---
suivi: 1347
date: 2026-08-14
sujet: marches_colonnes_reste_ligne_cliquable
chantier: suivi_chantier
type: feat
statut: poussé
hash: 79b2c5c9
fichiers:
  - resources/js/Pages/Marches/Index.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1347_marches_colonnes_reste_ligne_cliquable.md
---

## PROMPT ENVOYÉ

SUIVI #1347 — tableau marchés programme (onglet CHANTIER). Fusionner
Marché + Total en « Marché + Avenant » (actualisé). Retirer colonnes
Avenant, Statut, Actions/œil. Nouvelle formule front « Reste à facturer »
= actualisé − facturé HT (décision Robin, pas de retenues, négatif
autorisé). Ligne cliquable. Adapter la ligne TOTAL #1342. Front
uniquement ; KPI haut inchangés ; services financiers non touchés.

## FICHES LUES

- `SUIVI_1342` — LEÇON : ne pas aligner TOTAL tableau et KPI du haut.
  Conservé : footer HT+TTC, somme des lignes affichées, sticky TOTAL.
  Adaptation : colonnes sommées = actualisé / facturé / reste à facturer.
- `SUIVI_1218` — LEÇON : `reste_a_regler_ht` ≠ restant frise. Ici on
  **cesse d’afficher** `reste_a_regler_ht` dans CE tableau (il déduit
  aussi les pénalités côté `transformMarche`). Formule d’écran = actualisé
  − facturé, sans toucher le champ serveur.
- `SUIVI_1069` — `Marches/Index.vue` identifié ; intitulé hors sujet.
- `SUIVI_1340` / `SUIVI_1341` / `SUIVI_1343` — non touchés.

## SYNTHÈSE

Front uniquement, `resources/js/Pages/Marches/Index.vue`.

### Mapping colonnes AVANT / APRÈS

| En-tête affiché | Champ payload | Sommée | Supprimée |
|---|---|---|---|
| Réf. | `reference` | N | N |
| Rubrique | `poste_rubrique_libelle` | N | N |
| Poste | `poste_bilan_libelle` | N | N |
| Fournisseur | `fournisseur.nom` | N | N |
| Marché | `montant_marche_ht` | — | O (retiré de CE tableau) |
| Total | `montant_total_ht` | — | O (fusionnée) |
| Marché + Avenant | `montant_total_ht` (actualisé) | O | N (nouvelle) |
| Facturé | `total_facture_ht` | O | N |
| Reste | `reste_a_regler_ht` | — | O (plus affichée ici) |
| Reste à facturer | calcul front `montant_total_ht − total_facture_ht` | O | N (nouvelle) |
| Avenant | `nb_avenants` (libellé) | N | O |
| Statut | `statut` / `statut_label` | N | O (filtre conservé) |
| Actions | lien œil | N | O |

### Filtres statut (colonne retirée, filtrage intact)

| Libellé affiché | Valeur postée (état local) | Colonne DB | Libellé back |
|---|---|---|---|
| Tous | `all` | (aucun filtre) | tous statuts |
| En cours | `en_cours` | `marches.statut` | en_cours |
| Soldé | `solde` | `marches.statut` | solde |
| Résilié | `resilie` | `marches.statut` | resilie |

`filteredMarches` filtre toujours `m.statut === statutFilter`. Les 4
boutons restent. Compteur KPI `nb_en_cours` / `nb_marches` inchangé.

### Formule reste (décision Robin)

`reste_a_facturer_ht = montant_total_ht − total_facture_ht`. Pas de
plafond à 0. Ne déduit pas RG / CP / CIE. N’utilise pas
`reste_a_regler_ht`. Footer HT forcé : `Σ actualisé − Σ facturé`.

### Ligne cliquable

`@row-click` → `router.visit(/programmes/{id}/marches/{marcheId})`.
Œil / colonne Actions retirés. Survol `cursor-pointer hover:!bg-[#EEF1F6]`.
Clic sur `a, button, input…` : stop (closest). Clavier : `tabindex=0`,
Enter / Espace.

### Hors périmètre respecté

KPI haut inchangés (dont « Reste à régler HT » = `kpis.reste_a_regler_ht`).
Aucun PHP métier. `AppShell.vue`, `useFormatters.js`, `ObjectSubNavBar.vue`
non touchés. Tri `sort-mode="multiple"` inchangé. `groupedMarches` conservé.

### Preuve chiffres (prompt + formule ; MySQL local refusé)

MCH-2026-029 : 1 156 900 − 1 066 321 = **90 579** € HT.
MCH-2026-035 : actualisé **156 892** € (pas 160 000).
MCH-2026-042 : 0 € → `toMontant` / `Number.isFinite`, pas de NaN.
Cas reste négatif programme 5 : **non mesurés ici** (127.0.0.1:3306
refusé) — à coller en prod.

Comptes d’onglets statut programme 5 : **à noter en prod** (même motif).

Aucune classe PHP modifiée.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear && php artisan view:clear
php artisan journal:sync
```

Pas de migrate. Pas de `route:clear`.

Sur `/programmes/5/marches` (HERMIONE) :

1. Colonnes visibles : Réf., Rubrique, Poste, Fournisseur, Marché + Avenant,
   Facturé, Reste à facturer. Plus de Marché / Total / Avenant / Statut /
   Actions / œil.
2. MCH-2026-029 : Marché + Avenant = 1 156 900 € ; Reste à facturer = 90 579 €.
3. MCH-2026-035 : Marché + Avenant = 156 892 € ; reste = 156 892 − facturé.
4. MCH-2026-042 : ligne 0 €, pas NaN.
5. Onglets Tous / En cours / Soldé / Résilié : noter le nombre de lignes
   de chacun (filtre encore actif). Si 0 ligne : « Aucun résultat », pas
   de TOTAL fantôme.
6. Clic ligne → fiche du bon marché ; survol → fond teinté + pointer.
7. TOTAL : Σ Marché + Avenant − Σ Facturé = TOTAL Reste à facturer (HT).
8. Comparer TOTAL « Marché + Avenant » (filtre Tous, tous statuts) et KPI
   ENGAGÉ TOTAL HT (hors résiliés) : **noter l’écart, ne pas corriger**.
9. Signaler tout reste à facturer **négatif** (facturé > actualisé).

## LEÇON

Sur cet écran, « Reste à facturer » n’est plus `reste_a_regler_ht`
(total − facturé − pénalités, et le KPI haut déduit encore d’autres
grandeurs). C’est un calcul d’affichage : actualisé − facturé. Le champ
serveur reste pour ses autres consommateurs. Ne pas réaligner ce total
de colonne sur le KPI « Reste à régler HT ».
