---
suivi: 1541
date: 2026-09-15
sujet: Décompte visible sur la fiche facture
chantier: factures / depot / decompte
type: feature
statut: poussé
hash: f77fe442
fichiers:
  - app/Support/FactureDecompteSaisiePresenter.php
  - app/Http/Controllers/FactureController.php
  - resources/js/Components/Facture/FactureDecompteBloc.vue
  - resources/js/Pages/Factures/Show.vue
  - tests/Unit/FactureDecompte1541SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1541_decompte_fiche_facture.md
---

# SUIVI #1541 — Décompte sur la fiche facture

## PROMPT ENVOYÉ

Afficher le décompte (TTC/TVA/HT brut, retenues, HT/TVA à régler,
net, reste) sur la fiche facture, colonne gauche, sous les infos,
avant Avancement. Visible, pas replié. Source = dépôt saisi, pas
une autre table. Réutiliser le rendu saisie. Cas 1192 SIT 13.
Ne pas modifier saisie ni calculateur ni avancement. Rebase Vite.
Push main.

## BASE GIT

HEAD = origin/main `ff15a12f` au départ. Rebase Vite : déjà à jour.

## FICHES LUES

- **#1522** — ocr_raw.saisie = taux et montants bruts saisis, pas le
  décompte calculé.
- **#1525 LEÇON** — retenues dans ocr_raw.saisie, pas en colonnes.
  apply remplace l’objet saisie.
- **#1536 LEÇON** — le NET du décompte suit `netAPayerTtc` ; afficher
  une ligne ≠ l’injecter. Calculateur PHP/JS vs écran.
- **#1242 / #1540** — hors sujet (parcelles).

## DIAGNOSTIC — source des chiffres

`ocr_raw.saisie` contient les **entrées** : `montant_ht`,
`montant_tva`, `montant_ttc`, `retenue_garantie_pct`,
`compte_prorata_pct`, `retenue_opc_pct`, `retenue_finitions_montant`,
`liberation_rg`, `liberation_rg_montant_ttc`, `montant_cie`,
`cie_lignes`, `lignes_tva`, `applications_avoir`. **Pas** `ttc_brut`,
`ht_a_regler` calculé, ni le net du décompte (hormis un
`net_a_payer_ht` non utilisé ici).

**Approche A** : recalcul à l’affichage via
`EcrituresComptablesCalculator::computeRetenuesGlobales` à partir
de ces clés. Pas B.

Reste après facture : absent du JSON. Affiché seulement si le KPI
`marche_avancement.apres.reste_a_facturer_sous_plafond_ht` est déjà
chargé (même payload que la saisie) ; sinon la ligne est omise
(pas de chiffre approché).

## SYNTHÈSE

Bloc `FactureDecompteBloc` sous les dates, avant Avancement.
Saisie et calculateur non modifiés. Facture sans retenue : bloc
visible, bruts = à régler + net. Saisie vide : tirets.

Cas 1192 (saisie dépôt, centime) :
TTC brut 51 613,87 · TVA 8 602,31 · HT 43 011,56 ·
Libération −11 088,73 HT · CP 1,5 % 645,18 HT ·
HT à régler 53 455,12 · TVA 10 691,02 · NET 64 146,14 TTC.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear` + `journal:sync`
3. Facture 1192 SIT 13 — décompte = saisie
4. Facture sans retenue — bloc visible, bruts + net
5. RG + CP classiques
6. Frais généraux — pas de ligne marché / reste
7. Historique — pas d’erreur (tirets si saisie incomplète)
8. Avoir — montants négatifs

Pas de migration. JAMAIS npm/composer/optimize/config:cache sur OVH.

## LEÇON

Le décompte écran n’est pas persisté : seuls taux et montants à
régler le sont. Recalculer avec le même calculateur + les totaux
saisis (`montant_*`), jamais `factures.montant_ht` ni les lignes
comptables. Ne pas retomber sur les % du marché si la saisie a 0.
Le reste après facture n’est pas dans le JSON : le KPI déjà chargé
sur la fiche, ou rien.
