---
suivi: 1295
date: 2026-08-12
sujet: facture_plafond_garde_fou
chantier: marches_compta
type: fix
statut: poussé
hash: 6b017a95
fichiers:
  - app/Services/MarcheSyntheseFinanciereService.php
  - app/Services/MontantFactureSousTraitantService.php
  - app/Services/FactureValidationService.php
  - app/Services/DepotFactureValiderDejaValideService.php
  - app/Http/Controllers/FactureController.php
  - app/Http/Controllers/DepotFactureController.php
  - resources/js/Pages/Factures/Show.vue
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - tools/diag/verif_plafond_marche_1295.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
---

## PROMPT ENVOYÉ

Correction du garde-fou de paiement : l’écran de validation affichait un reste disponible faux (67 167 € au lieu de 51 455 avant facture 6 / marché 109). Confirmation au dépassement. Aucune migration.

## SYNTHÈSE

### Écart constaté
Sur facture 6 / marché 109 : `201 600 − facturé` sans retenues → **+60 901 €** d’écart vs plafond hors retenues (185 887,50). Un valideur pouvait approuver en croyant qu’il restait ~67 k€ alors qu’il restait 6 266,71 après cette facture.

### Inventaire (extrait)
Corrigés : Avancement fiche facture + dépôt « Reste après facture ».  
Référence déjà juste : Synthèse (#1292/#1293).  
Non corrigés (soldes distincts / clause d’arrêt) : frise `MarcheCouvertureKpiService`, `marches.reste_a_regler_ht` / bilan, onglet Retenues & Pénalités (unité TTC encore fausse).

### Correction
- `MarcheSyntheseFinanciereService::plafondHorsRetenues` — extraction du calcul #1292, réutilisé (pas de 2ᵉ formule).
- KPI avancement : plafond + reste sous plafond ; détail RG/CP/CIE/OPC.
- Dépassement : **non bloquant** + **confirmation explicite** (UI + serveur) + `Log::warning` si confirmé.
- Dépôt : même plafond + confirmation à l’**envoi en validation** (pas au brouillon).

### Ouvert
Correction unité HT/TTC de `MarcheRetenuesEtatsService` (lot séparé). Libérations RG. Extension éventuelle CP/CIE dans « Reste à payer » trésorerie (#1293).

## 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_plafond_marche_1295.php
```

## LEÇON

Un reste « marché − facturé » sans déduire les retenues théoriques invente de la disponibilité. Un garde-fou silencieux (bouton masqué) ou un 422 sans confirmation forgeable ne protège pas : confirmation + trace serveur.
