---
suivi: 1310
date: 2026-08-13
sujet: marche_cp_double_comptage_diag
chantier: marches_compta
type: diag
statut: poussé
hash: a079f4ee
fichiers:
  - tools/diag/diag_double_comptage_cp_1310.php
  - docs/suivi/SUIVI_1310_diag_double_comptage_cp.md
---

## PROMPT ENVOYÉ

PHASE 1 DIAG #1310 — lecture seule. Prouver/écarter double comptage CP Sage∩historique
après #1308 ; dossiers MCH-2026-066 / 034 ; vérité alertes RG/CP ; reco PHASE 2.
Aucun fix app/. Script tools/diag/ + fiche uniquement.

## SYNTHÈSE

### Fiches lues
- `#1308` LEÇON : brancher `montantHistoriqueMarche` (HT) sur MRES, ne pas recalculer ; bouton reversement = `solde_restant`.
- `#1304` LEÇON : conversion TTC→HT à la lecture ; double ÷ si couche affichage non retirée.
- `#1302` LEÇON : 30 écarts CP = historique ignoré ; anomalies RG à reconfirmer en prod après unité.
Approche : ventilation dépôt×dépôt (bill ∩ hist), preuve clés payload par `var_export`, alertes sans filtre `theo>0`.

### Exécution données
- Local : stub `erp_immo_migrate_1113` → **0 marché** → RESULTAT 0 NE VALIDE RIEN pour OBJETS 1–3 chiffrés.
- SSH OVH : `Permission denied (publickey)` depuis cet environnement.
- **À rejouer en prod** : `php -d display_errors=1 tools/diag/diag_double_comptage_cp_1310.php`

### Preuves CODE (sans DB métier)
1. **Trou double comptage** : `sommeMontantHtCpMarche` somme TOUTES les lignes `depot_facture_retenues_historiques` CP **sans** exclure les dépôts déjà dans `collecteMarche` (`intacct_bill_id`). La collecte refuse d’**écrire** si bill présent, mais les lignes déjà stockées restent lues → addition Sage HT + hist HT possible.
2. **Alertes #1308** : le script filtrait `$theo > 0.009` → excluait theo nul (MCH-2026-001). MRES n’émet que des alertes `rg_*` (pas de code CP).
3. **Theo CP** : `base_eligible` = taux × `montant_total_ht` actualisé si `avenants` loaded (pas `montant_marche_ht` seul) — `CompteProrataService::previsionnelMarche` utilise encore `montant_marche_ht` (périmètre différent).

### OBJET 4 — reco (sous réserve sortie prod)
- Compléter #1308 à la **lecture** : exclure du historique auto tout `depot_facture_id` déjà provisionné Sage (critère : bill non vide + payé + crédit CP > 0). Ne pas supprimer de stock.
- Si double confirmé : bouton reversement **sous-évalué** du montant double sur les marchés touchés.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php -d display_errors=1 -l tools/diag/diag_double_comptage_cp_1310.php
php -d display_errors=1 tools/diag/diag_double_comptage_cp_1310.php
```

Coller la sortie brute (jusqu’à `FIN`) dans le lot PHASE 2.

## LEÇON

Additionner deux sources « complémentaires » sans critère d’exclusion à la lecture recrée le piège CIE #1275 : la collecte empêche le futur doublon, pas le passé. Un script d’alerte qui exige `theo > 0` efface silencieusement la dette 58 (theo nul + retenu > 0).
