# #01 — Question « Dans quel secteur souhaitez-vous exposer ? »

> Statut : ✅ **fait** — 18/08/2026, migration **0.12**.
> Les 419 exposants existants sont **rattrapés** : leur étape 1 repasse en « à compléter » tant que
> le secteur manque. Reste à signaler l'export CSV décalé (défaut préexistant, découvert ici).

**Formulaire :** `informations_contact_organisation` (id 1) · **Charge :** S

## Demande client

> Ajouter une question "Dans quel secteur souhaitez-vous exposer ?"
> En réponse, 1 seul choix possible parmi : « Emballages » « Equipements électriques et batteries »
> « Mobiliers et Objets » « Conseil » « Textiles » « Bâtiments et constructions »

## Ce qui a été fait

Saisie **radio**, obligatoire, choix unique, dans le bloc « Organisation souscriptrice », après
l'URL du site web — l'emplacement par défaut retenu par le ticket, la question de fond ayant été
reportée (réponse A6).

| Clé | fr | en |
| --- | --- | --- |
| `emballages` | Emballages | Packaging |
| `equipements_electriques` | Équipements électriques et batteries | Electrical equipment and batteries |
| `mobiliers_objets` | Mobiliers et Objets | Furniture and objects |
| `conseil` | Conseil | Consulting |
| `textiles` | Textiles | Textiles |
| `batiments_constructions` | Bâtiments et constructions | Buildings and construction |

Nom du champ : **`radio_secteur`**, comme l'annonçaient les critères d'acceptation. Les clés sont
figées : [#10](REEX2027-10-prises-de-parole-par-secteur.md) les lira, et le formulaire n'étant pas
millésimé, elles vivront d'une édition à l'autre.

Pas de `conteneur_class` : le reste du bloc est en colonnes de champs de saisie, cette question-là
est d'une autre nature et occupe toute la largeur.

**Sur l'emplacement.** Après « URL Site Web » signifie *au milieu du bloc de présence en ligne*,
entre l'URL et la page Facebook. Ça se lit mal. Je m'y suis tenu parce que c'est la décision
écrite et qu'elle est explicitement provisoire — mais si l'arbitrage A6 tarde, la déplacer en tête
de `fieldset_1`, près du nom commercial, coûte un glisser-déposer.

## Les 419 exposants déjà enregistrés — traité

C'est le point le plus important, et il ne figurait pas dans le ticket.

`informations_contact_organisation` est le seul formulaire du dossier qui **ne soit pas
millésimé** : il est rempli une fois et resservi à chaque édition. **419 auteurs y ont déjà une
réponse.** Pour eux, l'étape était considérée comme franchie — le formulaire est `modifiable` et
l'étape reste cliquable, mais **rien ne les y ramenait**. La question aurait donc été renseignée
par les nouveaux candidats seulement, et vide pour tous les fidèles — c'est-à-dire précisément ceux
dont RVR connaît déjà le secteur, sans l'avoir sous forme exploitable.

**Retenu et implémenté : conditionner l'étape à la présence de la réponse.** L'exposant fidèle
retrouve l'étape 1 en « à compléter », avec son formulaire pré-rempli et un encart qui explique
qu'une question a été ajoutée.

Un piège a failli rendre la correction pire que le mal : **deux squelettes calculaient chacun leur
version de « l'étape est faite »** — `set_dossier_step.html` pour l'avancement du dossier, et
`rubrique-template-dossier-exposants.html` pour l'affichage du parcours. Ne corriger que le premier
aurait bloqué l'exposant devant une étape affichée comme validée, coche verte comprise. Second
piège : le parcours écrit `[(#GET{…}) done]`, où la valeur `non` appliquerait quand même la classe
`done` — il faut une chaîne vide.

La règle vit donc dans le plugin, en un seul endroit (`reex_etape_champs_requis()`), et les deux
squelettes l'appellent. Vérifié dans les deux sens sur un dossier réel : sans réponse, l'étape perd
sa classe `done` et l'encart s'affiche ; avec la réponse, l'étape redevient validée et l'encart
disparaît.

Millésimer le formulaire (option B du ticket) reste écarté : lourd, et le client n'a pas annoncé de
secteur variable d'une édition à l'autre.

L'option A du ticket — accepter le vide pour l'historique — reste le bon choix pour la **relecture
des vieux dossiers**. Elle ne répondait simplement pas à cette question-ci.

## ⚠️ L'export CSV du squelette était déjà décalé

Découvert en vérifiant l'impact de cette migration, et **sans rapport avec elle** :

[dossiers-exposants.html](../squelettes/dossiers-exposants.html) construit ses **colonnes** depuis
la définition des formulaires, et ses **cellules** depuis les réponses enregistrées, une cellule par
réponse, sans appariement par nom. Or ce formulaire a gagné des champs au fil des ans :

| Champs enregistrés par réponse | Nombre de réponses |
| ---: | ---: |
| 37 (le formulaire complet, avant cette migration) | 206 |
| 20 à 36 | 213 |

**La moitié des réponses est déjà décalée**, d'une à dix-sept colonnes. Cette migration ajoute une
colonne de plus : les 206 réponses aujourd'hui alignées le seront d'un cran, jusqu'à ce que leur
auteur rouvre le formulaire.

L'export du back-office, lui, **est correct** :
[exporter_dossiers_reex.php](../plugins/reuseeconomyexpo/formulaires/exporter_dossiers_reex.php)
apparie les valeurs à leur colonne **par le nom du champ** et non par la position. C'est celui-là
qu'il faut utiliser — ou corriger le squelette sur le même principe, ce qui n'est pas un gros
travail mais mérite son propre ticket.

## Critères d'acceptation

- [x] La question est obligatoire et n'accepte qu'une seule réponse.
- [x] Les 6 libellés sont disponibles en fr et en en (traductions internes, réponse A1).
- [x] La valeur est récupérable via `#VOIR_REPONSE{radio_secteur, brut}` pour un `id_auteur` donné.
- [x] Les dossiers des éditions antérieures restent consultables sans erreur : le récapitulatif
      cherche la réponse par son nom et n'affiche simplement pas la ligne quand elle manque.
- [ ] Contrôle visuel dans un navigateur.
- [x] **Atteindre les 419 exposants déjà enregistrés** — leur étape 1 rouvre tant que le
      secteur manque, avec un encart d'explication.
- [ ] **Déployer hors période d'inscription** : le jour du déploiement, 419 exposants voient leur
      étape 1 repasser en « à compléter ».
- [ ] Emplacement définitif (A6, reporté).
