# #06 — Section « Mobiliers » : renommage et actualisation

> Statut : ✅ **fait** — 16/08/2026, migration **0.8**.
> Une décision d'offre à faire trancher : **l'offre mobilière des co-exposants**.

**Formulaire :** `offres_stands_exposants_2027` (id 58), `fieldset_2` · **Charge :** S
**Dépend de :** [#00](REEX2027-00-socle-prix-formidable-js.md)

## Demande client

> Mobiliers (à changer car actuellement c'est packs mobiliers)

Puis la liste actualisée, avec la mention :

> Nb : les produits surlignés en jaune sont des nouveautés et ont remplacé une précédente offre.

## Ce qui a été fait

`fieldset_2` s'intitule désormais **« Mobiliers » / « Furniture »**. Le mot « packs » prêtait à
confusion avec les « Packs visibilité » du formulaire 4.

| Mobilier | Clé | € HT | |
| --- | --- | ---: | --- |
| Mange-debout (68 cm de diamètre) + 2 tabourets hauts | `mange_debout` | 200 | inchangé |
| Table 120x76 cm + 2 chaises | `small` | 150 | inchangé |
| **Table carrée (70x70 cm ; 34 cm de hauteur) + 2 chaises** | `table_carree` | **170** | 🆕 |
| **Étagère en résine (90x40 cm ; 180 cm de hauteur)** | `etagere_resine` | **100** | 🆕 |
| Comptoir (100x48 cm ; 110 cm de hauteur) + 2 tabourets hauts | `comptoir` | 300 | inchangé |
| Mini-réfrigérateur | `mini_frigo` | 130 | inchangé |
| Machine à café avec 60 capsules | `machine_cafe` | 120 | inchangé |
| Télévision 55 pouces sur pied | `tv` | 380 | inchangé |

Retirés du formulaire 2027 : la **table 183x76** (`large`) et la **table haute** (`table_haute`),
conformément à la réponse A4. Ils restent tarifés dans `reex_tarifs_2026()` : des dossiers 2026 les
référencent, et leur récapitulatif doit rester lisible.

### Le piège des 170 €

`large` valait déjà 170, soit exactement le prix de la nouvelle table carrée. Réutiliser la clé
aurait donné un **total juste et un libellé faux** dans le récapitulatif — le genre d'écart
qu'aucun test de montant ne rattrape. D'où deux clés explicites et la disparition franche des
anciennes. Un test le vérifie sur la clé, pas sur le prix.

### Le téléviseur a enfin sa ligne

`packs_mobiliers_tv_amount` n'existait pas dans `demande_inscription_2027` : le poste était compté
dans le total, sans détail conservé (dette relevée dans [CLAUDE.md](../CLAUDE.md)). La migration
crée le champ caché, en même temps que ceux des deux nouveautés. Les champs cachés des deux
articles retirés sont supprimés — aucune réponse 2027 n'existe encore.

### Une liste de classes qui était recopiée deux fois

`contract_form.js` déterminait la clé d'un mobilier par une suite de `hasClass`, écrite **deux
fois** avec deux valeurs par défaut différentes : `large` à l'affichage du prix unitaire, `small`
au calcul du total. Ajouter un mobilier demandait de penser aux deux, et l'oubli se serait payé
d'un **prix faux** plutôt que d'une erreur — la nouvelle table carrée aurait été affichée au tarif
de `large`, disparu.

La clé est maintenant lue sur la classe (`packs_mobiliers_<clé>`), qui la porte déjà, et une clé
inconnue n'est plus facturée au hasard. Le préfixe des valeurs stockées reste déclaré, lui : il
n'est pas déductible, le mange-debout étant tarifé sous `mange_debout` mais stocké sous
`mangedebout`.

## ⚠️ Effet sur le formulaire co-exposants

`offres_stands_coexposants_2027` proposait **deux** mobiliers : la table 120x76 et la table 183x76.
Retirer `large` de la table 2027 aurait mis sous les yeux d'un co-exposant un article sans prix —
bandeau d'anomalie et total barré, c'est-à-dire un parcours inutilisable.

La migration y applique donc le **strict nécessaire** : le renommage du fieldset et le retrait de
l'article supprimé. **Il ne reste plus qu'un seul mobilier** dans ce formulaire.

**Quels mobiliers un co-exposant peut commander est une question d'offre, pas de maintenance.**
Elle est renvoyée à [#13](REEX2027-13-coexposants-alignement.md), avec le reste de l'alignement de
ce formulaire, et inscrite aux [questions client](QUESTIONS-CLIENT.md).

## Texte de l'encart

L'encart `explication_4` décrivait les deux articles retirés et un stand de 5 m² qui n'existe plus
depuis [#02](REEX2027-02-grille-stands-2027.md). Ces lignes sont retirées, et « packs mobiliers »
suit le renommage là où il **nomme la section**.

Deux formulations restent, parce que ce sont des descriptions produit et non des libellés de
structure — les réécrire serait inventer de la prose commerciale :

- « Le pack mobilier contient une table nappée noire et deux chaises. »
- « The furniture pack includes one black-draped table and two chairs. »

Le lien PDF « REEX26 - Stands et options » reste lui aussi à actualiser (déjà relevé en 0.6).

## Ce qui n'a pas été fait

Les clés `small` et `large` sont peu lisibles, et `small` désigne aujourd'hui la seule table
rectangulaire. Les renommer reste souhaitable, mais **pas dans le même ticket qu'un changement de
prix** : cumuler les deux, c'est se priver du moyen de savoir laquelle des deux modifications a
cassé quelque chose. `large` disparaissant du formulaire 2027, l'urgence retombe.

## Critères d'acceptation

- [x] Le fieldset s'intitule « Mobiliers » en fr et en en.
- [x] Les 8 mobiliers sont sélectionnables au bon prix, total et récapitulatif compris.
- [x] Les deux mobiliers retirés ne sont plus proposés, et les dossiers antérieurs qui les
      contiennent restent lisibles — ils restent tarifés en 2026 et gardent leur ligne de
      facturation dans `contract_form.js`.
- [x] Aucune clé JS orpheline : un test vérifie que chaque mobilier tarifé a sa ligne de
      facturation, et que chaque ligne renvoie à une table.
- [ ] Contrôle visuel dans un navigateur — demande un compte exposant.
- [ ] Offre mobilière des co-exposants — **décision client**, voir #13.
