---
suivi: 1176
date: 2026-08-04
sujet: Acquéreurs — signaler échéances en retard (affichage seul)
chantier: commercialisation
type: feature
statut: poussé
hash: d2b1d04d
fichiers:
  - app/Support/Commercial/AcquereursProchaineEcheance.php
  - app/Support/Commercial/AcquereursGrilleGroupSorter.php
  - app/Http/Controllers/TMAController.php
  - resources/js/Components/Programmes/AcquereursGrillePanel.vue
  - tests/Unit/AcquereursGrille1172Test.php
  - tools/diag/diag_echeances_retard_1176.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/ (Tma-D8IRmAyl.js — un seul bundle Tma.vue)
  - docs/suivi/SUIVI_1176_acquereurs_echeances_retard.md
---

## PROMPT ENVOYÉ

SUIVI #1176 — après #1172/#1174 : rendre visibles les échéances dépassées
sur la grille Acquéreurs (année, rouge + retard, alertes cumulées, SRU
incohérent signalé sans bascule, filtre En retard, tri urgence par blocs).
Affichage seul — aucune écriture / migration / basculement de statut.

## SYNTHÈSE

### Fiches lues
- `SUIVI_1172` — chaîne d’échéances, alertes AF/date/notaire, tri groupes (D9),
  compteur N/total (#1158). Approche : enrichir `AcquereursProchaineEcheance`
  (urgence à l’exécution) plutôt qu’un cache ; garder `AcquereursGrilleGroupSorter`.
- `SUIVI_1174` — câblage `date_rdv_signature` / `date_reelle_accord` (prérequis
  progression chaîne). Rebasé sur `origin/main` = `444f18e7`.
- `SUIVI_1171` — répartition SRU mesurée (en_attente 29 · en_cours 18 · purge 14)
  ; ne pas auto-basculer.

### Formats retenus
- **Année** : affichée si ≠ année courante ; **toujours** en jj/mm/aaaa pour un
  retard (jamais tronquée).
- **Retard** : `+N j` si &lt; 60 j ; sinon `N mois de retard` (N = round(jours/30.437)).
- **Couleurs** : overdue → rose/rouge ; imminent (≤15 j) → ambre ; sinon neutre ;
  sans date → neutre (pas de faux retard).

### Alertes ajoutées (cumulatives)
| Icône | Flag | Condition |
|-------|------|-----------|
| ⏰ | `alerte_echeance_depassee` | `urgence === overdue` |
| ⏳ | `alerte_sru_a_verifier` | `sru_statut=en_cours` + `date_sru_fin_delai` passée |
| ⚖️ | `alerte_acte_sans_purge_sru` | `statut=acte` + SRU ∈ {en_attente, en_cours} |

### Tri / filtre
- `sort_key` = catégorie(0 overdue…4 « — ») × 1e11 + timestamp → ASC = plus
  ancien retard en tête, puis imminentes, futures, sans date, « — ».
- Tri **par blocs** inchangé (valeur du principal).
- Filtre « En retard » ; compteur `N / total` indépendant (#1158).

### Comptages
- MariaDB locale indisponible au moment du lot (`ibdata1` verrouillé / process
  fantôme). Script lecture seule : `php tools/diag/diag_echeances_retard_1176.php`
  (à lancer en prod après deploy pour chiffres exacts par étape).
- Unit tests couvrent LACROUX (565 j / 19 mois), tri CARLIER&lt;LACROUX&lt;futur,
  sans-date neutre, alertes SRU, blocs multi-lots.

### Garde-fous
- Aucune migration, aucun UPDATE, aucun basculement `sru_statut`.
- KPI remises / cohérence lots : à revalider quand la BDD est joignable
  (`diag_remises_kpi_1168.php`, `commercial:coherence-reservation-lots`).

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` ; `view:clear` ; `journal:sync`
3. `php tools/diag/diag_echeances_retard_1176.php` → noter retards / SRU
4. `php tools/diag/diag_remises_kpi_1168.php` → 107 304,48 €
5. `php artisan commercial:coherence-reservation-lots` → 0
6. Smoke tests 1–11 du prompt (LACROUX, CARLIER 2 icônes, JACQUETIN, filtre,
   tri groupé, 20 Acté+SRU en attente, sru_statut inchangé)

## LEÇON

Une colonne « prochaine échéance » qui ne dit que l’étape sans dire le **retard**
n’est pas pilotante. Calculer l’urgence à la date du jour (pas de cache). Ne
jamais basculer `sru_statut` automatiquement : signaler seulement (#1043).
Année tronquée = retard 2025 invisibleisible d’une échéance 2026.
