---
suivi: 1280
date: 2026-08-12
sujet: CIE - onglet Synthèse par programme / entreprise
chantier: cie_compte_interentreprises
type: feature
statut: poussé
hash: b2ea8f58
fichiers:
  - app/Services/CieService.php
  - app/Http/Controllers/CieController.php
  - app/Http/Controllers/SuiviChantierController.php
  - routes/web.php
  - resources/js/Pages/Cie/Index.vue
  - resources/js/Pages/SuiviChantier/Index.vue
  - tools/diag/verif_synthese_cie_1280.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1280_cie_synthese_programme.md
---

# SUIVI #1280 — CIE Synthèse par programme

## PROMPT ENVOYÉ

Nouvel onglet de lecture « Synthèse » dans le module CIE d’un programme (demande Lahouari BENSAAD).
Aucune écriture, aucun calcul métier nouveau, aucune migration. Agrège et affiche l’existant.
Masquer « Soldes » (403 serveur), garder Opérations. Serialisation : Cie/Index, CieService, CieController — ne pas toucher DepotFactureSaisieForm.

## FICHES LUES

- `#1266` — soft-delete répartitions, masque Matrice/Règlements (403), modèle mono-créancier ENVOL.
- `#1265` — pair-à-pair faux métier ; R1 avanceur = ENVOL.
- `#1275` — piège deleted_at : total 10 063,50 sans filtre vs 7 299,50 avec.
- LEÇON retenue : filtrer `deleted_at` sur opérations ET répartitions ; retenu = prélèvements actifs, pas le cache `cumul_retenu_ht`.

## BESOIN

Vision globale **par programme, par entreprise** (dû / retenu / reste), sans ouvrir chaque fiche d’opération.
Complémentaire de l’onglet Opérations (liste des coûts).

## STRUCTURE DE L’ONGLET

1. Trois indicateurs : Avancé par ENVOL · Déjà retenu · Reste à récupérer (HT).
2. Tableau une ligne / entreprise (répartitions vivantes), tri Reste décroissant, pied Totaux HT.
3. Ligne dépliable (`v-if` à la demande) : détail par opération + lien nouvel onglet.
4. Signalements lecture seule : écart somme répartitions ≠ montant op ; sans marché ; commentaires ; écart cache cumul.

`CieService::kpis` renvoie désormais les trois clés Synthèse (`avance_envol_ht`, `deja_retenu_ht`, `reste_ht`) — plus le modèle pair-à-pair.

## SOLDES

Onglet **masqué** (pas supprimé). Route `programmes.cie.soldes` → 403 (`MSG_SOLDES_DESACTIVE`).
Code `calculerSoldesParProgramme` / `buildSoldesRows` conservé.

## RESTE OUVERT

- Vue multi-programmes (hors scope).
- 291 € HT sans marché (SNP 252 + NJIMA 39) — structurellement irrécupérable via situations ; à arbitrer avec Lahouari.
- Reclassement / commentaires type « À REPRENDRE » — signalés, non corrigés.
- Écarts éventuels classeur Lahouari ↔ ERP : question de données, pas d’affichage.

## DÉPLOIEMENT / TEST

1. `git pull origin main`
2. `php artisan optimize:clear` (+ `view:clear` ; `journal:sync` pour l’entrée)
3. Pas de migrate.
4. Diag OVH : `php -d display_errors=1 tools/diag/verif_synthese_cie_1280.php`
5. Écran : programme 3 Synthèse défaut ; ACP CLOISON Retenu 340,50 ; prog 1 = 0 ; prog 5 op 14 ; prog 6 = 4 084,50 ; Soldes 403.

## LEÇON

Un onglet « soldes algébriques » entre entreprises contredit la règle métier (ENVOL seul créancier). Le remplacer par une synthèse mono-créancier avant de couper l’ancien usage. Prouver le filtre soft-delete avec un écart peuplé (ops 1–2 ARBOREA), pas seulement le `whereNull` dans le code.
