## 1.4.10 — Intégrité des grilles de variations

- Supprime la limite de rendu à 12 lignes dans les contrats FR et ES : toutes les formules actives et tarifées sont désormais affichées.
- Donne la priorité à la grille WooCommerce vendue lorsqu’un ancien import structuré contient moins de prix.
- Lit les variations publiées depuis la source WordPress autoritative et utilise le tarif régulier comme repli après un enregistrement AJAX.
- Réévalue immédiatement le hash après toute sauvegarde d’une variation WooCommerce.
- Ajoute une révision de rendu au hash des grilles automatiques de plus de 12 lignes : un ancien PDF 12/15 ne peut plus rester indiqué « À jour ».
- Aucun changement de prix, paiement, commande, stock, facture, document juridique ou contrat historique publié.

## 1.4.9 — Validation native des CGV espagnoles

- Le validateur reconnaît désormais « Condiciones generales » pour le Pack ES au lieu d'exiger par erreur le libellé français.
- La source espagnole fournie possède un titre contractuel explicite et peut être figée sans contenu parasite de la page publique.
- Aucun changement de paiement, commande, stock, facture, statut ou logique Chapka.

## 1.4.8 — Priorité absolue à « Aucune mention »

- La politique Fan Experience `none` efface désormais tout ancien texte résiduel avant validation et rendu.
- Le titre et l’encart du bonus restent totalement absents dans ce cas, en français comme en espagnol.
- Les anciennes lignes « Fan experience » sont retirées des inclusions, même lorsqu'elles proviennent d'un import structuré.
- Les marqueurs explicites de recette (`fictif`, `ficticio`, `test clone`, `random`) sont écartés des vols et hôtels ; la publication est alors bloquée pour donnée manquante.
- Le contact Trip Double utilisable pendant le séjour prime sur une ancienne formulation importée, en FR et en ES.

## 1.4.7 — Packs FR/ES et rendu contractuel conditionnel

- séparation réelle des Packs juridiques français et espagnol ;
- archivage immutable et empreinte SHA-256 propres à chaque langue ;
- formulaires d’information standard FR et ES fournis avec le plugin ;
- Fan Experience retirée des inclusions et rendue uniquement si renseignée ;
- Goodies rendus uniquement si renseignés ;
- prix ferme, documents sous sept jours sous réserve d’émission tardive, langues de service et assistance pendant le séjour.

## 1.4.6 — Archivage immutable du Pack juridique

- Archive chaque Pack juridique validé sous son empreinte SHA-256 avant toute modification ultérieure.
- Conserve une copie figée des CGV, du formulaire d’information standard et des textes juridiques communs.
- Crée des URL d’archive stables et affiche l’historique des Packs dans l’administration.
- Migre automatiquement le Pack 1.4.5 déjà validé sans modifier son empreinte ni les commandes historiques.
- Fige dans les nouvelles preuves de commande l’URL archivée des CGV et du formulaire standard.
- Utilise l’archive immutable au checkout tout en conservant l’URL canonique à titre de référence.
- Ne modifie aucun paiement, statut, stock, total, facture, email, passerelle, produit ou commande existante.

## 1.4.5 — Premier règlement Chapka exact au checkout

- Le bouton final additionne la prime Chapka au montant du voyage exigible immédiatement.
- En paiement partiel avec assurance, le libellé devient « premier règlement » pour ne pas présenter la prime comme une fraction du prix du voyage.
- Le contrat, le récapitulatif checkout et l'obligation de paiement affichent désormais le même montant.

## 1.4.4 — Normalisation des deux choix de placement par match

- Décompose les anciens titres compacts pour afficher séparément rencontre, date, heure et salle.
- Utilise le libellé du supplément lorsque le champ « section » ACF est vide.
- Présente distinctement le placement inclus et chaque placement payant dans le contrat public.
- N’affiche plus de Fan Experience quand le statut est seulement « bonus non annoncé » ; une mention publique exige désormais un statut explicite.

## 1.4.3 — Billetterie, politique Fan Experience et assurance Chapka

- Rebase cumulatif sur la version 1.4.2 : conserve la traçabilité de la version du gestionnaire dans la preuve d’acceptation et la correction de langue WPML au checkout.

- Respecte la valeur `none` de la politique Fan Experience après tous les filtres d'import et supprime les anciennes mentions résiduelles des inclusions.
- Rattache les choix de placement actifs du produit aux matchs structurés, y compris lorsque l'import ne contient pas de `block_index` exploitable.
- Injecte le devis Chapka sélectionné dans le contrat exact et sa preuve : formule, assurés, prime, documents précontractuels et séparation entre voyage et police d'assurance.
- Ajoute le devis Chapka à l'empreinte sémantique du checkout afin d'éviter la réutilisation d'un PDF exact généré sans assurance ou avec une autre formule.
- Affiche le texte spécifique du produit dans les modèles français et espagnol.

## 1.4.0 — Cockpit, préflight et version de travail idempotente

- Remplace le panneau produit technique par un parcours Données → Brouillon → Publication.
- Affiche un diff humain entre le dernier snapshot publié et les données actuelles.
- Prépare automatiquement un brouillon après modification, sans publication automatique.
- Réutilise le document correspondant au même hash et maintient une seule version de travail ouverte.
- Bloque la création de PDF avant génération si le précontrôle ou la relecture obligatoire n’est pas satisfait.
- Restaure l’état de validation si la génération ou la publication échoue.
- Sécurise les actions d’écriture en POST + nonce et refuse leur exécution lorsque la fiche comporte des changements non enregistrés.
- Ignore les événements techniques déclenchés automatiquement au chargement de la fiche afin que la protection des changements non enregistrés ne produise plus de faux blocage.
- Versionne les assets d’administration d’après leur fichier réel afin qu’une réinstallation corrective en 1.4.0 ne conserve jamais un ancien JavaScript en cache.
- Préserve les surcharges contractuelles déjà enregistrées lors d’un simple clic sur « Mettre à jour » ; les valeurs par défaut restent affichées comme automatiques et les champs pilotés par import conservent leur priorité.
- Stabilise le hash des imports structurés sur leur seul contenu documentaire.
- Rétablit dans les grilles tarifaires FR/ES le nombre de voyageurs explicite de chaque variation et le prix par personne ; affiche un tiret lorsqu’aucune occupation n’est déclarée au lieu d’une fausse valeur nulle.
- Versionne le moteur de rendu dans l’empreinte produit afin qu’un PDF publié avec l’ancienne grille soit signalé à republier, sans toucher aux contrats déjà acceptés dans les commandes.
- Impose une numérotation strictement croissante : un ancien brouillon ne peut plus être republié sous une version déjà dépassée et une incohérence historique v10/v9 est réparée par la génération de v11.
- Ne modifie pas le checkout, la preuve contractuelle, les paiements, commandes, statuts, stocks, factures, emails, WPML, HPOS ou Travel Core.

## 1.3.12 — Confirmation contractuelle différée hors checkout

- Conserve immédiatement sur la commande le PDF exact accepté, son URL, son SHA-256, la preuve d’acceptation et le snapshot contractuel.
- Remplace uniquement la génération synchrone du second PDF de confirmation par une action différée de 90 secondes.
- Joint le PDF exact accepté aux emails immédiats tant que la confirmation secondaire n’est pas prête.
- Ajoute une exécution idempotente, trois tentatives au maximum, un watchdog et un repli WP-Cron.
- N’intervient jamais sur le paiement, la passerelle, le statut, le stock, les totaux, la facture ou la redirection.

## 1.3.11 — Détection fiable acompte / paiement intégral

- Utilise `td_deposit_percent`, la méta panier portée par le parcours Trip Double, comme source explicite du choix de paiement.
- Reconnaît `0` comme paiement intégral et une valeur positive comme acompte.
- Corrige le bouton final, le bloc d’acceptation et le contrat exact sans modifier les totaux ni le traitement du paiement.
- Le changement de version renouvelle l’empreinte du checkout et empêche la réutilisation d’un snapshot contractuel erroné.

## 1.3.10 — Correctif checkout sans faux positif

- Ignore les seules métadonnées volatiles d'affichage des suppléments dans l'empreinte POST.
- Conserve l'identité de ligne, les variations et les cibles de stock des matchs.
- Invalide les sessions de la version précédente.
- Rétablit le montant exact exigible dans le bouton, conformément au choix validé : acompte ou paiement intégral.

## 1.3.9 — Checkout avec obligation de paiement

- Remplace le libellé générique du bouton par une formule explicite distinguant acompte et paiement intégral, sans dupliquer le montant déjà affiché dans le récapitulatif.
- Distingue la remise du formulaire d’information standard de l’acceptation du contrat et des CGV.
- Conserve le libellé exact accepté dans la preuve contractuelle, en français et en espagnol.

## 1.3.8 — Séparateur de transfert et cohérence Fan Experiences

- impose le séparateur `›` après un code aéroport au début d’une route de transfert, y compris lorsque la donnée source contient un espace atypique ;
- affiche le singulier ou le pluriel de « Fan Experience(s) » selon le nombre de matchs inclus plutôt que selon le nombre de lignes techniques d’activité ;
- applique la même robustesse au modèle espagnol ;
- aucune modification des paiements, commandes, statuts, stocks, factures WooCommerce, emails, WPML, HPOS ou checkout.

## 1.3.7 — Simplification du contrat, Fan Experiences et assurance

- retire le minimum de participants du résumé d’ouverture, tout en le conservant dans les sections contractuelles détaillées ;
- supprime le titre redondant de l’alerte literie et le rappel literie secondaire ;
- évite la répétition des dimensions des lits dans le tableau hôtel ;
- ajoute les Fan Experiences dans la ligne Matchs NBA et renomme la section Activités ;
- remplace le texte générique des bonus par une information standardisée sur la confirmation et l’annulation possibles par les franchises ;
- précise que le guide de voyage Trip Double est en ligne ;
- retire la phrase demandée dans la clause d’annulation ;
- ajoute le lien Chapka et la règle de souscription sous 48 heures pour les garanties annulation ;
- renforce à nouveau le séparateur des routes de transfert JFK › hôtel/hébergement ;
- applique les adaptations équivalentes au modèle espagnol ;
- aucune modification des paiements, commandes, statuts, stocks, factures WooCommerce, emails, WPML, HPOS ou checkout.

## 1.3.6 — Séparateur explicite des routes de transfert

- Corrige le rendu `JFK hébergement choisi par le voyageur` en `JFK › hébergement choisi par le voyageur`.
- Rend la détection insensible à la casse pour `hôtel`, `hébergement`, `hotel` et `alojamiento`.
- Normalise uniquement l'affichage documentaire des routes ; aucun paiement, commande, statut, stock, facture, email, HPOS ou checkout n'est modifié.

# Changelog

## 1.3.5 — Cohérence sans hôtel, arrivée le lendemain et pagination hybride

- Supprime le double paragraphe consécutif lorsque l’hébergement n’est pas inclus.
- Normalise les routes aéroport/hébergement avec une flèche explicite, y compris lorsque les champs sont séparés par espaces ou retours à la ligne.
- Ajoute dans l’en-tête, le récapitulatif et les informations précontractuelles la date d’arrivée réelle lorsqu’un vol retour arrive le lendemain.
- Garde les petits tableaux de transferts sur un même bloc et laisse la section Prix poursuivre la page pour les propositions hybrides afin d’éviter une page presque vide.
- Applique les mêmes règles aux documents FR et ES.
- Compatibilité coordonnée avec Offres sur mesure 2.1.4.
- Aucun changement sur checkout, paiements, statuts, stock, factures WooCommerce ou Travel Core.

## 1.3.4 — Finition documentaire et confidentialité des imports

- Les champs internes `notes` et `note` des vols structurés ne sont plus rendus dans les PDF clients.
- Seuls `baggage`, `details`, `client_note` et `contract_note` peuvent apparaître dans le document.
- Les notes internes d’hôtel ne sont plus rendues dans la version espagnole.
- Normalisation défensive des transferts aéroport lorsque l’aéroport et l’hôtel proviennent de champs distincts.
- Compatibilité déclarée avec Offres sur mesure 2.1.3.
- Aucun changement sur checkout, paiements, statuts, stock, factures ou Travel Core.

## 1.3.3 — Compatibilité structurée avec Offres sur mesure 2.1.2

- Ajout du mode exact `hybrid_offer`.
- Priorité stricte au payload personnalisé : prix unique, matchs cochés, vols retenus, hôtel et nuitées exactes.
- Suppression défensive de la grille produit dans les documents hybrides.
- Prise en charge des vols partiels et des exclusions explicites.
- Pied de page « Proposition personnalisée » et textes FR/ES dédiés.
- Aucun changement sur paiements, statuts, stocks, totaux ou factures.

## 1.3.2 — Dernier patch de confirmation et finition PDF
- Conserve le pourcentage d’acompte et l’itinéraire exact dans le snapshot de commande.
- Affiche la référence contractuelle en plus du numéro de commande dans la confirmation.
- Normalise les chambres selon l’occupation réelle et adapte l’avertissement literie.
- Compacte l’identité de l’organisateur et garde le tableau de confirmation sur une seule page.
- Corrige les routes aéroport vers hôtel et les pieds de page par type de document.
- Aucun changement sur le checkout, les paiements, les statuts, le stock, les factures, WPML ou HPOS.

## 1.3.1 — Finition documentaire et diagnostic explicite
- Le bandeau de brouillon liste désormais les validations ou données réellement manquantes.
- Le panneau produit précise que le Pack juridique validé ne remplace pas la validation du contrat propre au produit.
- Le moteur PDF garde les titres avec le bloc suivant, répète les en-têtes de tableaux et évite les tableaux démarrant par un en-tête isolé.
- Les itinéraires utilisent un chevron directionnel compatible avec le moteur PDF.
- Les libellés de chambres double, triple et quadruple sont normalisés ; l’avertissement literie dépend de l’occupation réelle de la chambre et non du seul nombre de places achetées.
- Le texte « Documents à conserver » est adapté au descriptif produit, au contrat exact et à la confirmation.
- L’identité complète reste dans la confirmation de commande ; aucun email client n’est ajouté au PDF précontractuel public.
- Aucun changement sur le checkout 1.2.9, les paiements, les statuts, le stock, les factures, WPML ou HPOS.


## 1.3.0 — Contrats client finalisés
- Masque les versions internes, hashes et références techniques dans les PDF client ; seules la date et la référence contractuelle sont visibles.
- Ajoute une référence stable au contrat exact et la conserve dans la commande HPOS.
- Ajoute le détail du prix exact : formule, options de placement, quantités, prix unitaires, total, acompte et solde.
- Inscrit explicitement le caractère ferme du prix.
- Rend l’hébergement générique dans le descriptif produit lorsque plusieurs configurations sont proposées.
- Clarifie le regroupement déjà confirmé sans créer de regroupement automatique ni d’encadré supplémentaire.
- Corrige les formulations d’annulation et de formalités, la pagination, la typographie et les bonus non contractuels.
- Conserve les preuves techniques complètes dans les métas de commande sans les exposer au client.
- Maintient la compatibilité WooCommerce 10.7, HPOS, WPML et Offres sur mesure.


## 1.2.9 — Snapshot contractuel autoritaire et hash indépendant du stock

- Suppression du re-résolveur de source au clic sur Commander : le PDF exact déjà présenté et figé en session fait désormais autorité.
- Contrôle explicite du prix contractuel courant contre le prix figé dans le PDF.
- Conservation des contrôles produit/variation/options, mode acompte/intégral, Pack juridique, pièce jointe et SHA-256.
- Stabilisation du hash source : exclusion des `legacy_items` et des valeurs de stock effectif des matchs structurés.
- Aucun clic sur « Mon contrat » n’est requis ; seule la case d’acceptation est obligatoire.

## 1.2.8 — Snapshot de checkout figé et acceptation sans ouverture obligatoire
- Fige côté session le PDF exact réellement présenté au checkout et réutilise ce même snapshot lors du POST final.
- Supprime la régénération du contrat au clic sur Commander, source des faux changements entre AJAX, acompte, taxes, iframe et passerelle.
- Le clic sur « Mon contrat » reste facultatif ; seule la case d’acceptation explicite est obligatoire.
- Contrôle séparément les vrais changements : variation/options, source contractuelle, Pack juridique, pièce jointe et SHA-256.
- Ajoute un repli compatible pour les fragments de checkout mis en cache et reconnaît les valeurs MagePeople `check_pp_deposit` / `no-deposit`.

## 1.2.7 — 14/07/2026

- Stabilise définitivement l’empreinte du checkout entre les rafraîchissements AJAX et le POST final.
- Supprime les sous-totaux intermédiaires et la ventilation fiscale de l’empreinte ; conserve un total contractuel canonique.
- Canonicalise l’ordre des variations, cibles de stock et suppléments avant hash.
- Supprime la détection globale risquée du mode acompte/intégral dans toutes les valeurs POST.
- Nettoie les doublons de placement du type « Section 112 - Section 112 ».
- Aucun changement de paiement, statut, stock, facture ou passerelle.

## 1.2.6 — 13/07/2026

- Supprime le faux blocage « contrat publié obsolète » provoqué par les prix formatés dépendants de la session, du contexte AJAX, des taxes ou de la devise WPML.
- Le hash produit utilise désormais les prix bruts canoniques, les IDs de variations et leurs attributs, sans libellé de présentation variable.
- Le contrat exact du checkout se régénère automatiquement depuis la source complète courante lorsque le descriptif produit publié est en retard, sans modifier les anciennes commandes.
- Ajoute une action unique « Valider et publier la version actuelle » : validation produit, génération et publication pour les futures réservations en un clic.
- Corrige le contrat exact : suppression du nom du produit source dans la formule, chambre/literie alignées sur la variation choisie, placements dédupliqués et version documentaire cohérente.
- Remplace « Ouvrir mon contrat exact (PDF) » par « Mon contrat » et « Abrir mi contrato exacto (PDF) » par « Mi contrato ».
- Conserve Contract Manager comme propriétaire du checkout standard et Offres sur mesure 2.1.1 comme propriétaire de ses propositions personnalisées.

## 1.2.5 — 13/07/2026

- Rend le checkout contractuel fail-closed : aucun repli silencieux vers l’ancien snippet si le Pack juridique ou le contrat exact est invalide.
- Neutralise le rendu, la validation et le JavaScript legacy aux différents stades du checkout et après les mises à jour AJAX.
- Remplace la double acceptation CGV/contrat par un bloc unique : contrat exact, CGV, formulaire standard et une seule case.
- Vérifie de nouveau le fingerprint, le PDF, son SHA-256 et le Pack juridique lors de la création de commande.
- Enregistre la preuve schema 4 dans `_td_contract_acceptance_proof_v3` tout en conservant la compatibilité v2/v1.
- Fige la section de match réellement sélectionnée, y compris les upgrades payants intégrés au total.
- Corrige l’encadré literie FR/ES et expose un libellé d’acceptation commun aux autres modules Trip Double.

## 1.2.4 — 13/07/2026

- Retire l’alerte et la case literie du checkout ; l’acceptation globale du pack contractuel reste obligatoire.
- Simplifie le libellé visible de la case d’acceptation sans afficher les numéros de version, tout en conservant versions et empreintes dans la preuve de commande.
- Renforce et reformule l’avertissement literie dans le PDF, avec un encadré essentiel en première page et un rappel non redondant dans l’hébergement.
- Adapte la clause de cession aux billets et prestations nominatifs : demande anticipée recommandée, réémission ou nouvel achat possible après émission, coûts réels et justifiables uniquement.
- Conserve la preuve historique des anciennes confirmations literie sans en demander de nouvelle au checkout.

## 1.2.3 — 13/07/2026

- Correction du bouton « Capturer et figer » : diagnostic détaillé, repli réseau contrôlé et capture manuelle de secours.
- Neutralisation effective de la preuve renforcée tant que le Pack juridique courant n’est pas approuvé.
- Ajout des upgrades de placement structurés par match, avec prix par personne et disponibilité.
- Mise à jour des modèles CSV/XLSX et ajout d’un CSV de test New York avec upgrades.

## 1.2.2 — 13/07/2026

- Corrige l’adresse APST dans tous les rendus et textes par défaut.
- Sépare strictement activités incluses, options et bonus basket non garantis.
- Conserve les pays de vigilance ESTA sans afficher le terme interne « liste noire ».
- Harmonise la cession sur le préavis raisonnable et le délai de sept jours réputé raisonnable.
- Supprime l’incohérence Hiscox en centralisant la formulation et bloque le Pack juridique tant que l’attestation n’est pas marquée comme vérifiée.
- Distingue le descriptif produit du contrat exact de réservation et de sa confirmation.
- Remplace l’engagement générique J-10 sur les documents par une transmission en temps utile selon l’émission des prestataires.
- Ajoute l’installation serveur du formulaire standard fourni, sans passer par async-upload.php.
- Améliore les pluriels, les horaires et le vocabulaire client.

## 1.2.1 — 13/07/2026
- Correction du conflit entre le brouillon importé et l’ancienne version publiée.
- L’import XLSX/CSV validé devient prioritaire en mode remplacement pour ses sections.
- Les anciennes surcharges produit ne se mélangent plus à l’affichage Données contrat.
- Distinction explicite entre document publié et brouillon courant.
- Publication de recette autorisée sur clone avec marquage [TEST] lorsque seul le pack juridique manque ; production toujours bloquée.
- Suppression des notes internes importées dans le PDF client.
- Pagination, pluriels, tableaux matchs/transferts/prix et espaces blancs améliorés.
- Suppression automatique de la référence obsolète à la plateforme européenne ODR dans le rendu.

## 1.2.0 — UX contractuelle, import structuré et preuve d'acceptation

- Refonte complète des templates FR et ES autour de la réservation réelle.
- Synthèse, inclus/non inclus, matchs, vols, hôtel, transferts, prix et informations obligatoires.
- Avertissement renforcé sur les lits Double américains, répété dans le PDF et acceptation distincte disponible au checkout.
- Fan Experiences traitées comme bonus non garanti par défaut.
- Import XLSX/CSV sécurisé, modèles inclus et validation humaine obligatoire.
- Rapprochement des matchs importés avec `supplement_blocks` par `block_index` ou clé source.
- Pack juridique versionné : capture des CGV, formulaire standard, SHA-256 et validation par empreinte.
- Détection des mentions ODR/RLL obsolètes et de la clause de cession 80 jours.
- Contrôles bloquants avant publication : placeholders, vols incomplets, matchs, échéances, accessibilité, import et pack juridique.
- Échéance du solde et échéance du minimum de participants séparées.
- Barème d'annulation 50 % / 80 % / 100 % conservé.
- Liste de vigilance ESTA/visa conservée.
- Preuve d'acceptation renforcée au checkout standard, désactivée par défaut.
- Exact contract, cart fingerprint, versions et hashes contractuels enregistrés sur la commande.
- Exclusion de `order-pay`, flex, soldes, t-shirts, prestations et offres sur mesure.
- Confirmation contractuelle de commande jointe aux emails pertinents lorsque le mode strict est activé.
- La validation juridique n'est plus réinitialisée lors d'une simple montée de version technique.
- Aucun impact sur paiements, statuts, stock, totaux, factures, passerelles ou HPOS.

## 1.1.0 — Source structurée partagée et offres sur mesure

- API de données structurées partagée.
- Documents externes pour les offres sur mesure.
- Sources de vols et de matchs enrichies.
- Versionnement et snapshots existants conservés.

## 1.0.9 — Correctifs de résolution

- Correctifs vols, lits et préposition de destination.
