---
suivi: 1308
date: 2026-08-13
sujet: marche_cp_retenu_historique
chantier: marches_compta
type: fix
statut: poussé
hash: ff7495bd
fichiers:
  - app/Services/MarcheRetenuesEtatsService.php
  - app/Services/CompteProrataService.php
  - resources/js/Pages/CompteProrata/Index.vue
  - resources/js/utils/compteProrataAffichageHt.js
  - tools/diag/verif_perimetre_cp_1308.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
---

## PROMPT ENVOYÉ

PHASE 2 #1308 — aligner CP retenu MRES sur Compte prorata (payées + historique HT),
diag bouton reversement (sans correction), corriger infobulle Équivalent TTC.
HEAD attendu f89aad47 (#1306).

## SYNTHÈSE

### Fiches lues
- `#1304` LEÇON : conversion TTC→HT à la lecture ; périmètre CP Sage seul laissé volontairement.
- `#1306` LEÇON : détail OPC/CIE via `detail_*` → props `prelevements_*` ; ne pas défaire la présentation.
- `#1302` LEÇON : 30 écarts CP = historique ignoré ; RG quasi OK.
Approche : réutiliser `CompteProrataService::montantHistoriqueMarche` (déjà HT), additionner après `ttcVersHt` Sage — jamais reconvertir l’historique.

### OBJET 1 — source historique
| Élément | Valeur |
|---------|--------|
| Méthode | `CompteProrataService::montantHistoriqueMarche` (~L106) |
| Manuel | `MarcheCpHistorique.montant_ht` via `montantHistoriqueManuelMarche` |
| Auto | `RetenueHistoriqueCollecteService::sommeMontantHtCpMarche` → `depot_facture_retenues_historiques` WHERE `type_retenue=CP`, SUM(`montant_ht`) |
| Unité | HT natif (ne pas passer dans `ttcVersHt`) |
| Sage | `collecteMarche[provisionne]` TTC → HT via `tauxTvaMarchePct` |
| Preuve 109 | 1801,40 + 1831,91 = **3633,31** (ni 4359,97 ni 3027,76) |

### OBJET 2 — bouton reversement (DIAG SEUL, non modifié)
| Élément | Constat |
|---------|---------|
| UI | `Show.vue` `openReversementCpDialog` ~L2478 : `base_ht = cp.solde_restant` |
| Back | `MarcheRetenuesEtatsService` `cp.solde_restant = théorique − retenu` |
| Effet OBJET 1 | restant 109 : ~3238,60 → **1406,69** (−1831,91) |
| Risque AVANT | solde SURÉVALUÉ → on aurait réclamé un historique déjà prélevé |
| Cagnotte prog | Vue = payées HT + historique HT (`kpis` séparés) — **inchangée** par OBJET 1 |

### OBJET 3 — infobulle TTC
`provisionneTooltip` : Équivalent TTC sur **total** HT × (1+taux marché/100). Attendu 109 : 4359,97.

### Pont #1306
Controller : `prelevements_opc`/`prelevements_cie` ← `detail_opc`/`detail_cie`. Noms alignés. Peuplement réel non vérifié (DB locale vide).

### Écran réel
**NON vérifié** : MySQL `.env` :3306 refusé ; MariaDB locale :3307 sans marché 109. Rejouer `tools/diag/verif_perimetre_cp_1308.php` en prod.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
php -d display_errors=1 tools/diag/verif_perimetre_cp_1308.php
```

## LEÇON

Deux écrans qui affichent le « même » CP avec deux périmètres (Sage seul vs Sage+historique) = écart systématique invisible au lint. La page Compte prorata avait déjà la bonne somme ; il fallait brancher la source, pas recalculer.
