---
suivi: 1546
date: 2026-09-15
sujet: Totaux en pied du tableau des factures d’un marché
chantier: marches / factures
type: feature
statut: poussé
hash: 095c8b75
fichiers:
  - app/Http/Controllers/MarcheController.php
  - resources/js/Pages/Marches/Show.vue
  - tests/Unit/FacturesMarcheTotaux1546SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1546_totaux_factures_marche.md
---

# SUIVI #1546 — Totaux pied tableau factures du marché

## PROMPT ENVOYÉ

Pied de totaux sur l’onglet FACTURES d’un marché : N facture(s),
somme HT, somme TTC, alignés sous les colonnes. Même principe que
#1533. Toutes les factures affichées. Serveur, pas JS. Vide = pas
de pied. Somme = colonnes affichées (pas le Facturé HT hors
libération). Rebase Vite. Push HECTAREG main.

## BASE GIT

HEAD = origin/main au départ. Rebase Vite sur origin/main à jour
AVANT `npm run build` (zone commune Marches/Show.vue).

## FICHES LUES

- **#1533 LEÇON** — totaux pied = clone SQL avant with(), jamais un
  reduce JS sur la page. Conservé : SUM SQL sur le même périmètre
  que la liste. Ici pas de pagination ni de filtre.
- **#1538 LEÇON** — Facturé HT = base reconstituée (travail), jamais
  le net à payer qui inclut la libération RG. Conservé pour le KPI ;
  le pied du tableau somme les colonnes affichées (montant_ht /
  montant_ttc du dépôt), donc un écart est attendu sur un marché
  avec libération (ex. MCH-2026-069 sit. 13 : 53 455,12 HT en ligne
  vs 43 011,56 HT au KPI).
- **#1535 / #1539** — libération portée par facture ; ne pas toucher
  Retenues / Avancement.
- **#1271** — pas d’overflow-x-hidden.

## SYNTHÈSE

Pas de filtre ni de pagination sur ce tableau : le pied = toutes
les factures rattachées (hors rejet / archive), tous statuts.

Montant sommé = `depot_factures.montant_ht` / `montant_ttc` (les
colonnes du tableau), y compris la libération de RG dans le net.
Écart volontaire avec le KPI Facturé HT (#1538).

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` + `view:clear` + `journal:sync`
3. MCH-2026-412 — totaux = la ligne (6 467 HT / 7 761 TTC)
4. MCH-2026-069 — totaux = somme des lignes, pas le Facturé HT
5. Marché sans facture — pas de pied
6. Comparer Facturé HT de la fiche — écart si libération RG

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

## LEÇON

Un total de tableau doit suivre les colonnes, pas un KPI voisin
calculé autrement. Sur un marché avec libération de RG, sommer le
HT affiché (net) diverge du Facturé HT (base travail). Écrire
l’écart dans la synthèse plutôt que d’aligner en silence.
