# #08 — Section « Location de salle privée pour réunion »

> Statut : ✅ **fait** — 17/08/2026, migration **0.10**.
> Plafond porté à **4 créneaux** le 21/08/2026, sur réponse du client, et les quatre horaires
> annoncés dans l'encart.

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

## Demande client

> Ajouter une section "Location de salle privée pour réunion" : 1h30 : 450€ HT
>
> Texte explicatif : La salle sera située au sein de la Meeting Business Area. Elle sera équipée
> d'une télévision 55 pouces avec branchement HDMI. Des tables et une dizaine de places assises
> seront disponibles.

## Ce qui a été fait

La section est posée **après le Fichier Visiteurs et avant les Packs visibilité** : la salle relève
de la logistique, pas de la visibilité.

```
case        | case_2        | Fichier Visiteurs
explication | explication_3
selection   | selection_1   | Location de salle privée pour réunion (créneau de 1h30)  ← nouveau
explication | explication_2                                                            ← nouveau
radio       | radio_1       | Packs visibilité
…
```

- Saisie **`selection`** (dropdown de quantité), conformément à la réponse A7, et non une case à
  cocher.
- Valeurs `salle_privee_0` … `salle_privee_5`, sur le modèle des mobiliers.
- `'salle_privee' => 450` dans `reex_tarifs_2027()`.
- Champ caché `salle_privee_amount` dans `demande_inscription_2027`, à sa place dans l'ordre du
  formulaire — juste après le fichier visiteurs.
- Encart d'explication bilingue reprenant le texte fourni, complété d'une phrase : le créneau est
  attribué par l'équipe du salon. Le formulaire ne propose aucun choix de plage, il valait mieux le
  dire que de laisser l'exposant l'attendre.

## Le plafond du dropdown — tranché

**0 à 4 créneaux.** La question posée était commerciale, la réponse est d'exploitation : le salon
ouvre de 9 h à 18 h, ce qui laisse exactement quatre créneaux de 1h30.

| | Créneau |
| --- | --- |
| 1 | 9h30 – 11h00 |
| 2 | 11h00 – 12h30 |
| 3 | 14h00 – 15h30 |
| 4 | 15h30 – 17h00 |

Un exposant peut donc réserver la salle toute la journée, mais pas au-delà de ce qui existe. Le
plafond avait été fixé à 5 en interne, faute d'indication ; il est passé à 4.

**Les quatre horaires sont annoncés dans l'encart, mais ne sont pas sélectionnables.** Laisser
choisir sa plage produirait des collisions — deux exposants sur le même créneau — qu'il faudrait
arbitrer après coup. L'attribution reste à l'équipe RVR, et le formulaire le dit.

### Une faiblesse d'idempotence corrigée au passage

La migration ne rafraîchissait, au rejeu, que les options du menu déroulant — pas son encart. Elle
aurait donc produit un formulaire proposant quatre créneaux et un texte en décrivant cinq. Elle
remet désormais la section entière en accord avec sa définition.

## Un piège que le ticket ne mentionnait pas : le sous-total

`lignesQuantite`, dans `contract_form.js`, gérait déjà la multiplication prix × quantité — le
ticket avait raison sur ce point. Mais **toutes ses lignes relevaient jusqu'ici du stand**, et leur
montant tombait sans condition dans `offresStandsExposantsSubtotalAmount`.

La salle privée est une offre **complémentaire**. Sans précision, son montant aurait gonflé le
sous-total des stands et manqué à celui des offres complémentaires. Le total général serait resté
juste : le contrat aurait affiché **deux sous-totaux faux qui s'annulent**, ce que personne ne
regarde.

Les lignes portent donc désormais un `sousTotal`, et un test vérifie que celle de la salle privée
est bien attribuée aux offres complémentaires.

## Critères d'acceptation

- [x] La section apparaît avec son texte explicatif en fr et en en.
- [x] Sélectionner N créneaux ajoute N × 450 € HT au total.
- [x] Le récapitulatif de contrat mentionne la quantité et le montant, dans le bon sous-total.
- [x] Quantité 0 n'ajoute rien et n'affiche aucun montant — le récapitulatif n'affiche de prix que
      si la ligne est non nulle.
- [ ] Contrôle visuel dans un navigateur — demande un compte exposant.
- [x] Plafond confirmé par le client : **4 créneaux**, avec les horaires affichés.
