---
suivi: 1267
date: 2026-08-11
sujet: PHASE 2 application retenue CIE (case RETENUES + numerateur + prelevements)
chantier: cie / depot-factures / compta
type: feature
statut: poussé
hash: 16430160
fichiers:
  - app/Services/DepotFacture/EcrituresComptablesCalculator.php
  - resources/js/lib/depotFactureEcrituresCalculator.js
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - app/Services/CieService.php
  - app/Http/Controllers/DepotFactureController.php
  - routes/web.php
  - tools/diag/verif_retenue_cie_1267.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1267_retenue_cie.md
  - public/build/
---

# SUIVI #1267 — Retenue CIE

## PROMPT ENVOYÉ

PHASE 2 application retenue CIE. Suite #1261/#1263/#1265/#1266. Ne pas
ressusciter #1262. Pas de migration. Test manuel prod obligatoire.

## FICHES LUES

- `#1266` — schéma prelevements/cumul ; pair-à-pair masqué
- `#1265` — deux sémantiques ; R1–R5
- `#1263` — peupler montant_cie sans numérateur rompt D/C
- `#1261` — CIE absent du numérateur
- `#1224` — retenues selon marché / applicable_cie

## R1–R7

Acquis (avanceur ENVOL, mono-créancier, retenue éteint, N retenues, montant =
répartition, partiel OK, HT partout).

## OBJET 1 — Décisions

### applicable_cie

| fichier:ligne | défaut | type absent |
|---|---|---|
| DepotFactureController mapMarche | **true** (#1267) | CIE possible |
| DepotFactureController normaliser | (wipe retiré) | — |
| MarcheController | true | CIE affiché |
| Nomenclature create | true | poste applicable |

**Décision** : défaut **true** (aligné Marche + nomenclature). Type présent →
valeur réelle. **Activation case dépôt** = dues CIE (reste > 0), pas le seul flag.
Association dépôt 1230 réussissait sans le flag : `associerDepotFacture` ne le lit pas.

### Formulaire avant

Pas de case CIE dans RETENUES ; `montant_cie` / association / Associer dans
« Cagnotte CP et CIE ». `showCIE` existait sans UI.

### Nommage

`montantCieHt` renommé **`montantCieTtc`** (`form.montant_cie` = TTC calculateur).
Saisie **`cieMontantHtSaisi`** / posté `cie_montant_ht` (HT).

### Retenu vs encaissé

**Fait foi** : déduction `depotPorteurEstEncaisse` (statut dépôt/facture).
Colonne `statut` : écrite `retenu` ou `annule` seulement — jamais `encaisse` dans
ce lot.

## Tableau AVANT / APRES (dépôt 1230)

Prouvé localement via `computeRetenuesGlobales` : base 59 064,67 ; RG 2 953,23 ;
CP 1 476,62 ; CIE 408,60 ; D=C=59 064,67 ; 401=54 226,22 ; NET inchangé.

## Mapping case CIE

| Libellé UI | Valeur postée | Back |
|---|---|---|
| Case CIE | showCIE → cie_montant_ht / montant_cie | saisie + cie_prelevements |
| Montant HT | cie_montant_ht | plafond = reste dû |
| montant_cie | TTC = HT × (1+taux_marché/100) | calculateur / ROLE_CIE |

Plusieurs répartitions dues : **somme des restes** à l’écran ; **allocation FIFO**
à l’enregistrement (une ligne prelevement / répartition touchée).

Annulation : statut `annule` + softDeletes ; cumul recalculé.

Unicité (repartition, depot) actifs : **garantie en code**. Contrainte SQL
partielle = migration future (signalée, non écrite).

## Reste

Reclassement 11 ops ; créancier juridique ; 291 € sans marché ; Soldes ;
refonte #1264.

## DÉPLOIEMENT

```
git pull ; optimize:clear ; route:clear ; journal:sync
php -d display_errors=1 tools/diag/verif_retenue_cie_1267.php
```

Pas de migrate.

## LEÇON

A+B+C indissociables (case + numérateur + prelevements). Cache cumul doit être
branché à chaque écriture. Net à payer = invariant.
