---
suivi: 1221
date: 2026-08-05
sujet: suppression avenant marché + couleur carte pénalités
chantier: marches-avenants
type: feature
statut: poussé
hash: 572bc1bd
fichiers:
  - app/Http/Controllers/MarcheController.php
  - app/Http/Middleware/HandleInertiaRequests.php
  - routes/web.php
  - resources/js/Pages/Marches/Show.vue
  - resources/js/Components/Marches/MarcheKpiHeader.vue
  - public/build/
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1221_avenant_suppression.md
---

## PROMPT ENVOYÉ

SUIVI #1221 — suppression définitive avenant + rouge atténué carte pénalités.
HEAD base = #1220 (`0222ddf3`). #1219 validé en prod.

## FICHES LUES

- `SUIVI_1219` — pénalités / restant ; ne pas toucher `MarchePenalitesSoldeService`.
- `SUIVI_1191` / `1192` — retenues ; palette rouge = danger.

## OBJET 1 — Ce que la suppression déplace

| Consommateur | Fichier | Recalcul |
|--------------|---------|----------|
| `montant_total_ht` / `reste_a_regler_ht` (+ pénalités #1219) | `Marche::recalculer` via boot `Avenant::deleted` | **auto** |
| Frise KPI | `MarcheCouvertureKpiService` à l’affichage show | **auto** (lecture) |
| Pénalités solde | `MarchePenalitesSoldeService` | inchangé (indépendant avenant) |
| RG théorique / à venir | % × total marché (show + frise) | **auto** à l’affichage |
| CP / OPC théoriques | % × total | **auto** affichage |
| CIE | répartitions (pas % marché) | inchangé |
| Finitions | saisie dépôts | inchangé |
| Bilan / dashboard / index | colonne + invalidation cache bilan | **déclenché** (`invalidateCache`) |
| Impact cumulé liste | recalculé dans `transformMarcheForShow` | **auto** reload |
| % avancement barre | `facture / total` via recalculer | **auto** |

## OBJET 2 — Numérotation

Déjà `max(numero)+1` dans `storeAvenant` et `prochainNumeroAvenant` (front).
**Pas de renumérotation** des restants. Trous acceptés.

## OBJET 3 — Dépendances

| Dépendance | Traitement |
|------------|------------|
| PJ `avenant_documents` | Cascade SQL + purge SharePoint/disque avant delete |
| Avenant issu TMA (`tma_id`) | **refus** 403 (comme update) |
| TMA qui référence `avenant_id` | **refus** message nommé |
| Factures | pas de FK avenant |
| Sage / Intacct | **aucune** colonne / flux sur `avenants` — déclaratif |
| FieldAudit | non ; historique = `marche_historique` |

## OBJET 5 — Historique

Table / modèle **`marche_historique`** (`MarcheHistorique`), type `avenant`,
`description` + `donnees_avant` / `donnees_apres` (totaux, RG, facture, nb PJ).

## OBJET 6 — Couleur

Carte pénalités : `#9b5555` / ink `#6f3a3a` (rouge brique).
Restant négatif : `#dc2626` inchangé.

## DÉPLOIEMENT

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

Pas de migrate.

## LEÇON

Hard delete ≠ pas de trace : historiser l’événement, pas la ligne.
PJ : cascade SQL sans purge fichiers = orphelins SharePoint — purger avant.
RG à venir négative = signal (marché 32), à expliquer dans la confirmation.
