# Étape C — Nettoyage code legacy « prestation »

## Tests manuels DSI (à exécuter avant push, puis en prod avant `marches:detach-prestations`)

1. **Bilan financier** — Ouvrir un programme avec marchés et factures ; comparer les colonnes (marchés signés, facturé validé, en attente, bilan réel) avant/après déploiement.
2. **Marché legacy** — Ouvrir un marché qui a encore `prestation_id` en BDD (ex. l’un des 14 sur poste 20) ; le poste bilan doit s’afficher correctement sur la fiche.
3. **Concessionnaires** — `/programmes/{id}/concessionnaires` : même liste qu’avant, groupée par poste (plus par libellé prestation).
4. **Admin nomenclature** — `/admin/nomenclature` : CRUD postes, select compte GL, suppression d’un poste non utilisé.
5. **Création marché** — Nouveau marché avec poste : pas d’erreur, documents requis selon le poste.
6. **Dépôt facture** — Sélection marché : libellé « Poste bilan » dans le récap.
7. **TMA** — « Marquer prestation réalisée » : workflow inchangé (sémantique TMA, pas FK prestation).

Après déploiement prod, **avant** détachement :

```bash
php artisan marches:detach-prestations --dry-run
php artisan marches:detach-prestations
```

Comparer 2–3 totaux du bilan (capture d’écran).

---

## Fichiers modifiés

| Fichier | Changement |
|---------|------------|
| `MarcheController.php` | Plus de lecture/écriture `prestation_id` ; eager-load `posteBudgetaireType` ; payload sans `prestation` |
| `BilanFinancierService.php` | Jointures directes `m.poste_budgetaire_type_id` ; plus de `join prestations` |
| `ConcessionnairesController.php` | Filtre `posteBudgetaireType.est_concessionnaire` ; payload `poste` |
| `TMAController.php` | `posteBudgetaireType` sur marché |
| `SharePointService.php` | Libellé poste / rubrique pour dossiers et classification |
| `NomenclatureController.php` | Usage poste via `marches.poste_budgetaire_type_id` ; plus de delete `Prestation` |
| `MarcheDocumentsHelper.php` | Suppression `documentsRequis(Prestation)` |
| `DepotFactureController.php` | `poste_bilan_libelle` au lieu de `prestation` |
| `Marches/Create.vue` | Message poste bilan |
| `Marches/Index.vue` | Colonne poste seule |
| `DepotFactures/DepotFactureSaisieForm.vue` | Labels poste bilan |
| `Concessionnaires/Index.vue` | Groupement `groupe.poste` |
| `DetachMarchesPrestations.php` | Commande `marches:detach-prestations` |

## Non modifié (volontairement)

- Table `prestations`, colonne `marches.prestation_id`
- Modèles `Prestation`, relations `Marche::prestation()`, `Lot::prestation()`
- Seeders prestations
- TMA statut `prestation_realisee`, catégorie `prestations_sup`

---

## Rollback

1. **Code** : `git revert <commit-étape-c>` puis redéployer (build front inclus).
2. **Données** : la commande de détachement ne supprime pas les prestations ; si `prestation_id` a été mis à NULL, restaurer depuis sauvegarde BDD ou réaffecter manuellement depuis l’audit (ex. `201_DEMOLITION` → poste 20).
3. **Pas de migration** à inverser pour cette étape.

---

## Commande détachement

```bash
# Simulation
php artisan marches:detach-prestations --dry-run

# Exécution (idempotent)
php artisan marches:detach-prestations
```

Ne met à NULL que les marchés avec `poste_budgetaire_type_id` renseigné ; signale les autres en warning.
