---
suivi: 1268
date: 2026-08-11
sujet: Affectation CIE — une ligne par opération due, suppression FIFO
chantier: cie_compte_interentreprises
type: correctif
statut: poussé
hash: b66be7fa
fichiers:
  - app/Services/CieService.php
  - app/Http/Controllers/DepotFactureController.php
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - tools/diag/verif_affectation_cie_1268.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
---

# SUIVI #1268 — Affectation CIE (correctif)

## PROMPT ENVOYÉ

PHASE 2 — correctif d’affectation suite #1267. Sur dépôt 1230, deux opérations CIE dues ; le champ unique était prérempli à la somme 592,50 HT alors que la facture ne retient que 340,50. L’allocation FIFO aurait soldé les deux répartitions à l’enregistrement. Remplacer par une ligne par opération (case + montant + plafond), défaut de coche (1 due → pré-cochée ; 2+ → aucune), supprimer FIFO, un `cie_prelevements` par ligne cochée avec `cie_repartition_id` explicite. Numérateur / écritures inchangés.

## SYNTHÈSE

### Défaut corrigé
- **Somme au lieu d’affectation** : UI #1267 préremplissait le total des restes dus ; FIFO allouait à l’enregistrement → fausse récupération de 252 € non retenus sur facture.
- **Cas A/B/C** (dépôt 1230) : NET toujours 54 226,22 ; seul le CIE (et donc TTC brut / HT brut / RG / CP) change selon les lignes cochées.

### Règle de défaut de coche
| Nb opérations dues | Comportement |
|---|---|
| Exactement 1 | Ligne pré-cochée à son reste dû (#1267 préservé) |
| 2 ou plus | **Aucune** pré-cochée ; total CIE = 0 jusqu’à action utilisateur |

### Une opération / plusieurs répartitions
**Une ligne UI = une répartition** (pas de regroupement). Même opération avec 2 répartitions pour le même fournisseur/marché → 2 lignes distinctes, chacune avec son plafond.

### Suppression FIFO
- `CieService::syncPrelevementsPourDepot(DepotFacture, array $lignes, ?userId)` — plus de `float $montant` ni boucle `resteAAllouer`.
- Front : plus de champ unique ni message « alloué en FIFO ».
- Post : `cie_lignes[] = { repartition_id, montant_ht }` + `cie_montant_ht` = somme + `montant_cie` TTC.

### Mapping lignes CIE

| Libellé affiché | Valeur postée | Champ back |
|---|---|---|
| Case ligne opération | `cie_lignes[i].repartition_id` + présence dans le tableau | `cie_prelevements.cie_repartition_id` |
| Montant HT ligne | `cie_lignes[i].montant_ht` | `cie_prelevements.montant_retenu_ht` |
| Total HT (somme cochées) | `cie_montant_ht` | saisie OCR + contrôle cohérence |
| Total TTC (taux marché) | `montant_cie` | saisie + calculateur / crédit ROLE_CIE |
| Case maîtresse CIE | `showCIE` (si false → `cie_lignes=[]`, montants 0) | annule prélèvements actifs du dépôt |

### Inchangé (#1267)
Formule `TTC brut = (TTC à régler + finitions + CIE_TTC) / (1 − RG% − CP% − OPC%)`, case maîtresse, refus dépôt figé, `montantCieTtc`, Cagnotte CP sans CIE, lien opération nouvel onglet.

## DÉPLOIEMENT-TEST

### Script
`php -d display_errors=1 tools/diag/verif_affectation_cie_1268.php`

### OVH
```
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
```
Pas de migrate. Pas de npm/composer sur OVH.

### Tests écran Robin
1. Dépôt 1230 : 2 lignes (nettoyage 252 / cie sit.6 340,50), **aucune cochée**, CIE=0 → cas C  
2. Cocher seule « cie situation 6 » → cas A (= facture papier)  
3. Cocher les deux → cas B (possible, jamais défaut)  
4. Sur sit.6 saisir 200 → recalcul ; reste affiché 140,50  
5. Saisir 400 sur plafond 340,50 → refus UI ; requête forgée → refus serveur  
6. Enregistrer seule sit.6 → **un** `cie_prelevements` sur rep 34 ; rep 19 intacte 252  
7. Décocher + enregistrer → prélèvement annulé, cumul 0, dette rouverte  
8. Dépôt 774 : aucune retenue ; forgé → refus  
9. Fournisseur sans CIE dû → case grisée + motif  
10. Facture enveloppe (sans marché) → case absente/grisée  
11. Onglet CIE prog 3 : après retenue 340,50 sur op 12, ACP CLOISON reste **252,00** (pas 0)  
12. `php_vs_js` : décocher/recocher, 7 valeurs = PHP  
13. `grep "production.ERROR" storage/logs/laravel.log | tail -5` après chaque essai  

## LEÇON

- Un défaut trop gourmand sur un montant comptable (pré-cocher la somme / FIFO) est pire qu’un clic : il invente de la charge HT/TVA et déclare récupéré ce qui ne l’est pas.
- Affectation CIE = **toujours** une répartition identifiée ; jamais pot commun ni allocation automatique.
- `DepotFactureSaisieForm.vue` : sérialiser — #1264 (refonte) **après** ce lot.

### Reste ouvert (hors scope)
- Reclassement des 11 opérations / créancier juridique ENVOL (1179 vs 1180) — arbitrages métier  
- 291 € répartitions sans marché (rep 23/28)  
- Remplacement onglet Soldes  
- Refonte #1264  
- Chantier d’**inversion du sens du calcul** (partir du HT brut et déduire) — à noter, pas traiter ici  
