---
suivi: 1660
date: 2026-09-22
sujet: Cycle de vie des statuts de scénario (Complétée)
chantier: Foncier / Faisabilité
type: feature
statut: poussé
hash: 5a713046
fichiers:
  - app/Support/Foncier/FoncierReferentiels.php
  - app/Support/Foncier/DossierFoncierListeAvancement.php
  - app/Services/Foncier/FieldAuditService.php
  - resources/js/Pages/Foncier/Scenarios/Show.vue
  - tests/Unit/ScenarioStatuts1660SourceTest.php
  - tests/Unit/DossierFoncier1590ListeAvancementSourceTest.php
  - tests/Unit/Foncier/FoncierScenarioFaisabilite1142SourceTest.php
  - tests/Unit/ScenarioHautDePageCompact1641SourceTest.php
  - tests/Unit/ScenarioFaisabiliteExportPdf1659SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1660_statuts_scenario.md
---

# SUIVI #1660 — statuts de scénario

## PROMPT ENVOYÉ

Cycle En cours → Complétée → Retenue / Abandonnée.
Option A : renommage d’affichage seulement pour `etude` /
`retenu` / `abandonne`. Aucune migration de données. Seule
`completee` est une valeur nouvelle. Si ENUM SQL : s’arrêter.

## FICHES LUES

- **#1142 LEÇON** — noms de tables figés dès le socle ; le
  référentiel `STATUTS_SCENARIO` est la source unique.
- **#1590 LEÇON** — `withCount` par clé de `STATUTS_SCENARIO` ;
  `PRIORITE_SCENARIO` pilote le résumé liste dossiers. Sans
  `completee` dans la priorité, un mixte complétée+en cours
  aurait affiché « 1 en cours » et masqué l’étape plus avancée.
- **#1641** — largeur du select statut `!w-[98px]` : trop étroit
  pour « Abandonnée » / « Complétée » → `!w-[128px]`.
- **#1659 LEÇON** — PDF lit `statut_libelle` ; payload de test
  aligné sur « En cours ».

Anti-collision : dernier numéro = **#1659**. **#1660 est libre.**
`Show.vue` (scénario + dossier) en série, rebase avant Vite.

## SYNTHÈSE

### Colonne `scenarios.statut`

varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, pas d’ENUM SQL,
pas de DEFAULT (`hectareenvol.sql:4047`, migration
`2026_07_31_230000` ligne 20). `completee` (9 car.) tient.
Aucune migration de schéma ni de données.

### Référentiel avant

`etude` → Étude ; `retenu` → Retenu ; `abandonne` → Abandonné.

### Référentiel après

`etude` → En cours ; `completee` → Complétée (nouveau) ;
`retenu` → Retenue ; `abandonne` → Abandonnée.
Ordre du cycle, pas alpha.

### Ce que pilote `retenu`

`ScenarioFaisabiliteController::update` : entrée →
`reduireAutresRetenus` (les autres `retenu` non gelés
repassent en `etude`, `retenu_par_id` / `date_retenu` vidés ;
un autre gelé bloque) + pose `retenu_par_id` / `date_retenu`.
Sortie de `retenu` : ces deux champs vidés.
Liste dossiers : `FORCE_DETAIL` + priorité haute.
Bouton Retenir masqué si déjà `retenu`.
Ne pilote ni calcul, ni droit, ni `gele`, ni
`aDesSaisiesCalcul()`, ni écriture Programme.

### Transitions

Libres avant → libres après. Pas de verrou de workflow.
Boutons Retenir / Abandonner inchangés.

### Complétée aux comparaisons

Comme En cours partout sauf la liste d’avancement (priorité
entre retenu et etude) et le référentiel / validation
(`Rule::in` des clés). Aucun `statut === 'etude'` n’excluait
un écran.

### Couleur

Aucune pastille de statut aujourd’hui (seulement gelé ambre).
Pas de couleur ajoutée.

## DÉPLOIEMENT-TEST

```
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
```

Pas de migrate. `route:clear` inutile.

Recette : DF-2026-0012 V1 — consolidé 100 583,31 € inchangé.
SQL : `SELECT id, statut FROM scenarios WHERE …` — `etude`
reste `etude`. Passer en Complétée → `completee` en base.

## LEÇON

Option A = ne jamais UPDATE `scenarios.statut` pour un
renommage de libellé. `varchar(20)` évite la migration ENUM.
`PRIORITE_SCENARIO` doit lister toute valeur notable, sinon
le résumé liste dossiers masque l’étape nouvelle.
Le select identité a une largeur figée par #1641 : un libellé
plus long impose de la bouger et de mettre à jour ce test.
`FieldAuditService::formatValeurAffichee('statut')` ne connaissait
pas `STATUTS_SCENARIO` : `etude` / `retenu` s’y affichaient bruts.
`reduireAutresRetenus` reset toujours vers `etude` (pas vers
`completee`) : exclusivité inchangée.
