# #11 — Section « Sponsoring »

> Statut : ✅ **fait** — 21/08/2026, migration **0.13**.
> Texte reçu le 21/08/2026. Le bouton `mailto:` demandé a été **doublé d'une case à cocher** :
> un lien de messagerie ne laisse aucune trace dans le dossier.

**Formulaire :** `offres_complementaires_2027` (id 59) · **Charge :** S

## Demande client

> Enfin, ajouter une section "sponsoring" en dessous des prises de parole avec un bouton :
> « Je souhaite en savoir plus sur les options de sponsoring. A partir de xx€ et inclut xxxx pubs
> etc ».

Texte définitif, reçu le 21/08/2026 :

> Voici le texte proposé pour le bouton qui sera relié à contact@reuseeconomyexpo.com :
> « Je souhaite en savoir plus sur les offres de sponsoring. À partir de 15 000€ HT »

Le contenu de l'offre — le « inclut xxxx pubs » du gabarit — n'a finalement pas été fourni, et le
client n'y revient pas : la section annonce le montant plancher et renvoie vers l'équipe.

## Ce qui a été fait

Un fieldset `fieldset_sponsoring` posé **après** le bandeau « Prises de parole » (`fieldset_1`, issu
de [#09](REEX2027-09-bandeau-prises-de-parole.md)), contenant :

| Saisie | Nom | Rôle |
| --- | --- | --- |
| `case` | `case_sponsoring` | classe `sponsoring`, valeur `sponsoring_on` |
| `explication` | `explication_sponsoring` | montant plancher, adresse de contact, mention de gratuité |

Le libellé de la case reprend le texte du client mot pour mot. L'encart précise en toutes lettres
que **la demande n'a aucune incidence sur le montant du contrat** — sans quoi une case cochée dans
un formulaire dont toutes les autres options se facturent laisse un doute légitime.

### Le bouton `mailto:` est devenu une case à cocher

C'est la seule divergence avec la demande, et elle est délibérée. Un lien `mailto:` a deux défauts
qui se cumulent ici :

- il n'ouvre rien chez un exposant qui utilise un webmail sans client de messagerie configuré —
  cas courant en entreprise — et **le clic est alors silencieux** ;
- même quand il fonctionne, il **ne laisse aucune trace dans le dossier**. L'intérêt exprimé
  n'apparaîtrait ni au récapitulatif, ni dans l'export : il n'existerait que dans une boîte mail.

La case coche l'intérêt dans la réponse au formulaire, donc dans l'export ; l'adresse de contact
reste offerte dans l'encart, en lien cliquable, pour qui préfère écrire directement.

### Différenciation visuelle : acquise sans CSS

Le ticket demandait de distinguer la case des offres payantes.
[contract_form.js](../squelettes/js/contract_form.js) accole un `<span class="price">` au libellé de
chaque option tarifée ; celle-ci n'en reçoit aucun. La distinction est donc produite par le
mécanisme lui-même, et ne peut pas se désynchroniser d'un changement de style.

## Le point de vigilance du ticket, vérifié

> Il faut vérifier explicitement au test que le mécanisme générique de `contract_form.js` ne la
> ramasse pas au passage.

Deux tests dans [tests/tarifs/](../tests/tarifs/tarifs.test.mjs) :

1. `sponsoring` n'est tarifé dans aucune édition (2026 ni 2027).
2. Aucun des **trois** mécanismes de reconnaissance de `contract_form.js` ne la voit :
   la valeur enregistrée (`value === 'masterclass_on'` et consorts), le préfixe d'une ligne à
   quantité (`lignesQuantite`), la classe de la saisie (`$('.masterclass')`, `GROUPES_TARIFES`).

Le second test extrait la valeur et la classe **de la migration elle-même**, pas d'une constante
recopiée : renommer la saisie sans y penser ne peut pas rendre le test vert par accident. Il vérifie
aussi que ses propres expressions trouvent encore les mécanismes qu'elles cherchent — sans quoi un
refactoring de `contract_form.js` le rendrait vert en ne vérifiant plus rien.

## La ligne apparaît au récapitulatif de contrat — confirmé le 22/08/2026

Le récapitulatif liste toutes les réponses enregistrées. La case cochée y produit donc une ligne,
**sans montant**. On aurait pu la masquer ; la question a été posée et tranchée en faveur du
maintien, pour deux raisons :

- l'exposant relit ce qu'il a rempli, et une demande qui disparaît du récapitulatif donne
  l'impression de ne pas avoir été prise en compte ;
- l'absence de montant, dans un document où chaque ligne en porte un, dit exactement ce qu'il faut.

Si l'avis change, une règle CSS suffit à la retirer.

## Critères d'acceptation

- [x] La section apparaît sous les prises de parole, en fr et en en.
- [x] Cocher la case ne modifie ni le total, ni les sous-totaux — vérifié au test.
- [x] L'information apparaît dans l'export des dossiers :
      colonne `[Offres complémentaires][Sponsoring] Offres de sponsoring`.
- [x] Le texte définitif est en place, aucun `xx €` ne subsiste.
- [x] La migration est idempotente — rejouée, elle ne produit aucun changement.
- [ ] Contrôle visuel dans un navigateur.
