# Tickets — Amélioration du parcours d'inscription exposants (REEX 2027)

Source : `260730_Dev_inscriptions_exposants.docx` (client Réseau Vrac & Réemploi, 30/07/2026).
Arbitrages intégrés le 11/08/2026 — voir [QUESTIONS-CLIENT.md](QUESTIONS-CLIENT.md).

**Objectifs client :**
1. Proposer une offre plus visuelle (photos / 3D) et simplifiée pour les exposants.
2. Faire gagner du temps à l'équipe RVR et automatiser les process.

---

## 🟢 Lot 1 — prêt à développer

| # | Ticket | Formulaire | Charge | Réserve |
| --- | --- | --- | --- | --- |
| [14](REEX2027-14-migration-creation-formulaires.md) | 🟡 **Créer et rattacher les formulaires 2027 par migration** — *rattachements faits (migration 0.5)* | les 10 formulaires 2027 | M | parcours EN du contrat à trancher |
| [00](REEX2027-00-socle-prix-formidable-js.md) | ✅ **Socle : source unique de vérité pour les tarifs** — *fait* | transverse | L | 3 arbitrages tarifaires |
| [01](REEX2027-01-secteur-exposition.md) | ✅ **Question « Dans quel secteur souhaitez-vous exposer ? »** — *fait, migration 0.12* | F1 `informations_contact_organisation` | S | **419 exposants ne la verront pas** · emplacement reporté |
| [02](REEX2027-02-grille-stands-2027.md) | ✅ **Refonte de la grille de stands (45 variantes)** — *fait, migrations 0.6 et 0.15* | F3 `offres_stands_exposants_2027` | L | — |
| [03](REEX2027-03-angles-conditionnels.md) | ✅ **Choix du stand en trois temps, en JS** — *fait* | F3 | M | contrôle visuel à faire |
| [05](REEX2027-05-section-electricite.md) | ✅ **Nouvelle section « Électricité » (24 tarifs)** — *fait, migration 0.7* | F3 | M | — |
| [06](REEX2027-06-mobiliers.md) | ✅ **Section « Mobiliers » : renommage + actualisation** — *fait, migration 0.8* | F3 | S | — |
| [07](REEX2027-07-moquette-reemployable.md) | ✅ **Personnalisation : « Moquette réemployable »** — *fait, migration 0.14* | F3 | S | prix à reconfirmer par Cécilia |
| [08](REEX2027-08-location-salle-privee.md) | ✅ **Section « Location de salle privée »** — *fait, migration 0.10* | F4 `offres_complementaires_2027` | S | — |
| [09](REEX2027-09-bandeau-prises-de-parole.md) | ✅ **Bandeau « Prises de parole »** — *fait, migration 0.11* | F4 | S | — |
| [11](REEX2027-11-section-sponsoring.md) | ✅ **Section « Sponsoring » (signalement d'intérêt)** — *fait, migration 0.13* | F4 | S | — |
| [13](REEX2027-13-coexposants-alignement.md) | ✅ **Co-exposants : alignement + règle d'éligibilité** — *fait, migrations 0.9, 0.14 et 0.16* | `offres_stands_coexposants_2027`, `coexposition_2027` | M + M | **tarifs fidélité/partenaire manquants** — bloquant |

**Ordre :** ~~#14~~ → ~~#00~~ → ~~#02~~ → ~~#03~~ → ~~#05~~ → ~~#06~~ → ~~#13~~ → ~~#08~~ → ~~#09~~ → ~~#01~~ →
~~#11~~ → ~~#07~~ → ~~#13 (second volet)~~.
**Lot 1 terminé.** Restent la recette en navigateur, le déploiement des migrations 0.5 → 0.16, et
**deux modes tarifaires que le client doit fournir** avant l'ouverture des inscriptions.

- **#14 en premier en production** : sans elle, les formulaires 2027 n'y existent pas, et toutes les
  migrations suivantes n'auraient rien à modifier. Elle corrige aussi un défaut bloquant — les
  formulaires 2027 créés en local ne sont rattachés à aucune rubrique, ce qui empêche le calcul de
  l'étape du dossier.
- ~~**#00 ensuite**~~ **fait.** Les tarifs ne sont plus dans `contract_form.js` : ils vivent dans
  `plugins/reuseeconomyexpo/inc/reex_tarifs.php`, une table par édition, et se modifient dans
  `reex_tarifs_2027()`. Les tickets #02, #05, #06, #07, #08 et #13 ont été mis à jour en
  conséquence. Après tout changement de prix : `node --test tests/tarifs/`.
- ~~**#03 après #02**~~ **fait.** Le parcours en étapes est construit par-dessus la saisie
  `radio_1`, sans migration. La grammaire des clés de stand est partagée entre le plugin
  ([reex_stands.php](../plugins/reuseeconomyexpo/inc/reex_stands.php)) et le navigateur
  ([reex_stands.js](../squelettes/js/reex_stands.js)) ; les deux sont tenues par `tests/stands/`.
- ~~**#06**~~ **fait.** Deux nouveautés remplacent deux articles retirés, et le renommage demandé
  est appliqué.
- ~~**#13**~~ **fait, en deux temps.** L'offre d'abord : le formulaire co-exposants passe de 3
  saisies à 15, les sections n'étant pas réécrites mais **recopiées** depuis le formulaire
  exposants — les clés tarifaires sont donc identiques par construction. Corrige au passage un
  défaut de facturation vieux d'au moins trois éditions : le mobilier d'un co-exposant était compté
  dans le total mais absent du détail contractuel. Vérifiable par
  `tests/formulaires/comparer_offres.php`.
  La règle d'éligibilité ensuite : **4 m² par exposant**, déduite de la surface et non plus
  énumérée. On a découvert en s'y mettant que la liste de stands éligibles vivait dans une
  composition **appliquée à aucun objet du site** — la règle ne s'appliquait donc nulle part, et le
  formulaire était offert à tout exposant ayant payé son acompte.
- ~~**#05**~~ **fait.** La section n'existait plus depuis 2026 alors que le champ caché et le calcul
  JS, eux, étaient restés. Ses 24 tarifs sont les **premiers montants à décimales** de la table :
  `reex_tarifs.js` porte désormais `arrondir()` et `formaterMontant()`, à utiliser partout où un
  montant est additionné ou affiché.

Charge cumulée : ~2 L + 5 M + 6 S — **tout est écrit**.

### Appliqué

La **date limite du tarif Fidélité** est passée au **31/10/2026** (réponse A2), aux trois endroits
où elle vivait : les deux lignes de [set_tarif_mode.html](../squelettes/inclure/set_tarif_mode.html#L13)
et l'en-tête du tableau de prix du formulaire, qui affichait encore 30/09/**2025**.

---

## 🟠🔴 Lot 2 — en attente

| # | Ticket | Formulaire | Charge | Ce qui manque |
| --- | --- | --- | --- | --- |
| [04](REEX2027-04-visuels-stands.md) | 🔴 Visuels des stands (carrousel image + légende) | F3 | M | Images d'exemple non reçues ; cadrage insuffisant |
| [10](REEX2027-10-prises-de-parole-par-secteur.md) | 🟠 Conditionner les prises de parole au secteur | F4 | M | Direction arrêtée, reprise reportée |
| [12](REEX2027-12-startup-moins-3-ans.md) | 🟠 « Start-up de moins de 3 ans » + Pépites | `contact` | M | Mis de côté |

Charge indicative : **S** ≈ ½ j · **M** ≈ 1–2 j · **L** ≈ 3 j+

---

## Décisions structurantes déjà prises

- **#03 en JavaScript seul.** Le parcours en trois temps (surface, angles, gamme) est construit
  par-dessus la saisie `radio_1` existante, qui reste la source de vérité. Prix, récapitulatif de
  contrat et export CSV sont inchangés. C'est ce qui a permis à #03 de ne pas invalider #02.
- **#11 sans impact sur le prix.** Seule case du formulaire 4 à ne pas alimenter le total.
  Vérifié au test : `tests/tarifs/` extrait la valeur et la classe de la migration, puis vérifie
  qu'aucun des trois mécanismes de `contract_form.js` — valeur écoutée, préfixe à quantité, classe
  sélectionnée — ne les reconnaît.
- **#10 sans compteur automatique.** Bascule manuelle par secteur en back-office plutôt que
  décompte des réservations.
- **#04 sans 3D interactive.** Visuels png/jpeg uniquement, en enrichissement optionnel — la mise
  en page doit rester correcte sans aucune image. L'emplacement est déjà prévu dans le balisage du
  sélecteur de stand (`.stand-selector-choice-visuel`), replié tant qu'il est vide.

## Points ouverts

Détail et formulation dans [QUESTIONS-CLIENT.md](QUESTIONS-CLIENT.md).

| Sujet | Ticket | Statut |
| --- | --- | --- |
| ~~2 libellés d'ampérage (8 kW/12A, 10 kW/16A)~~ | #05 | ✅ 21/08/2026 — confirmés tels quels, la suite n'est pas croissante et c'est normal |
| ~~Prix de la moquette~~ | #07 | ✅ 21–22/08/2026 — 50 €/m², 8 surfaces. **Reconfirmation de Cécilia annoncée** |
| ~~Texte de l'offre sponsoring~~ | #11 | ✅ 21/08/2026 — « À partir de 15 000 € HT », sans détail du contenu |
| ~~Comment atteindre les **419 exposants**~~ | #01 | ✅ traité — leur étape 1 rouvre. **Reste la date d'ouverture des inscriptions**, pour déployer avant |
| ~~Style des en-têtes de section~~ | #09 | ✅ 22/08/2026 — on garde les styles actuels |
| Images d'exemple des stands | #04 | ⏳ client — niveau tranché (1 par surface + 4 d'agencement), **fichiers non reçus** |
| ~~Dimensions des stands **32 et 64 m²**~~ | #02 | ✅ 21/08/2026 — 8×4 et 8,5×7,5 (soit 63,75 m², affiché tel quel sur décision) |
| ~~**Règle d'éligibilité à la co-exposition**~~ | #13 | ✅ 21/08/2026 — 4 m² par exposant, principal compris, jusqu'à 15. En ligne (migration 0.16) |
| ~~**Offre mobilière des co-exposants**~~ | #13 | ✅ le brief répondait : « même liste que pour les exposants » |
| ~~Tarif du stand jeune pousse `3m2_habille`~~ | #02 | ✅ 21/08/2026 — 850 / 1 100 € confirmés |
| Tarif co-exposant en mode **fidélité** et **partenaire**, aux 15 niveaux | #00 · #13 | ⏳ **Cécilia** — 🔴 **seul point bloquant** : un mode sans prix déclenche le bandeau d'anomalies |
| Forfait d'inscription en mode **partenaire** | #00 | ⏳ client |
| ~~`coexposants.2.non_adherent` = **100 €**~~ | #00 | ✅ 21/08/2026 — coquille confirmée pour 1 000 € |
| Rubriques à rattacher à `validation_contrat_2027` (parcours EN + pages paiement) | #14 | 🏠 interne |
| ~~Étape « gamme » dans le parcours en deux temps~~ | #03 | ✅ tranché : étape dédiée |
| ~~Quantité maximale de créneaux de salle privée~~ | #08 | ✅ 0 à 5, à confirmer avec l'équipe RVR |
| Emplacement de la question « secteur » | #01 | 🏠 interne, reporté |

## Incohérences relevées dans l'expression de besoin

1. ✅ **Date du tarif Fidélité** — tranché et appliqué : le **31/10/2026** fait foi. Voir #02.
2. ✅ **Trois ampérages incohérents** — un seul était une coquille (6 kW/8A) ; les deux autres sont
   justes, confirmés le 21/08/2026. La suite des ampérages n'est pas croissante, et c'est le
   matériel du prestataire qui veut ça. Voir #05.
3. ✅ **Deux mobiliers supprimés sans être mentionnés** — confirmé, on les retire. Voir #06.
4. ✅ **Moquette proposée en 3 m²** alors qu'aucun stand de la grille commerciale ne fait cette
   taille — c'est celle du stand habillé des jeunes pousses. Assumé, et confirmé à 150 €. Voir #07.
5. **Le document pointe le formulaire co-exposants 2026** (`id_formulaire=40`). Le 2027 est
   l'`id_formulaire=57`. Voir #13.
6. **16 et 24 m² n'ont pas de version nue** dans la nouvelle grille, ce que le document ne
   mentionne pas alors qu'il détaille les contraintes d'angles. Voir #03.
7b. ✅ **Le « bandeau gris » de #09 n'existe pas dans le projet.** Le ticket supposait le style
   déjà présent ; les en-têtes de section sont en réalité des titres gras soulignés d'un filet.
   Tranché le 22/08/2026 : on garde les styles actuels, aucun CSS. Voir #09.
7. **« Conférences » vs « Table-Ronde »** : le document parle de conférences, la saisie existante
   s'appelle Table-Ronde. Renommage ou format supplémentaire ? Suit #10, reporté.
8. **Le formulaire 1 n'est pas millésimé** : `informations_contact_organisation` est partagé par
   toutes les éditions (voir [CLAUDE.md](../CLAUDE.md)). Voir #01.
9b. 🔴 **L'export CSV `dossiers-exposants.html` est décalé pour la moitié des dossiers.** Il
   apparie ses cellules par position et non par nom de champ, alors que les formulaires ont gagné
   des champs au fil des éditions : 213 réponses sur 419 sont déjà décalées de 1 à 17 colonnes.
   L'export du back-office, lui, apparie par nom et est correct. Découvert en traitant #01, sans
   rapport avec lui. Mérite son propre ticket.
9. **Le sélecteur d'année de l'export back-office est inopérant** — sans lien avec cette expression
   de besoin (déjà noté dans [CLAUDE.md](../CLAUDE.md)), mais à traiter avant que l'équipe RVR ne
   s'appuie dessus pour « gagner du temps ».
