---
suivi: 1418
date: 2026-09-02
sujet: Liste factures — onglet En dépôt, case inclure, actions à gauche, ligne cliquable
chantier: factures
type: feature
statut: poussé
hash: e8109759
fichiers:
  - app/Models/DepotFacture.php
  - app/Services/FactureGlobaleListeQuery.php
  - app/Http/Controllers/FactureGlobaleController.php
  - resources/js/Pages/Factures/Global.vue
  - tests/Feature/FactureGlobaleListeTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
---

# SUIVI #1418 — Onglet En dépôt + ligne cliquable (`/factures`)

## PROMPT ENVOYÉ

Volets 1–4 sur `/factures` : renommer Autres → En dépôt (critère statut stade dépôt), case « Afficher aussi les factures en dépôt », Actions à gauche avant alerte, ligne cliquable avec exceptions. Ne pas toucher FactureVisibility / FactureEstAvoir / doublons / boîte dépôt / Sage. Mesures prod #1417 acquises.

## SYNTHÈSE

### Règle d’aiguillage clic (avant diff — code existant `depotHref`)

| Cas | Destination |
|-----|-------------|
| `facture_id` + programme (`facture_programme_id` ?? `programme_id`) | `/programmes/{id}/factures/{facture_id}` |
| `facture_id` sans programme | `/factures/fiche/{facture_id}` |
| sinon `uuid` | `/depot-factures/{uuid}` |
| sinon | `/depot-factures` |

Aucun 404 attendu : les quatre branches couvrent facture±programme et dépôt.

### Avoir au stade dépôt

Conservé **uniquement** dans l’onglet **Avoirs** (`FactureEstAvoir::applyDepotScope(..., false)` sur En dépôt / Programmes / FG). Ainsi En dépôt = 61 (38+6+17) et Avoirs = 3, disjonction préservée case décochée.

### Mapping case + onglets

| Libellé UI | Valeur postée | Param back | Effet requête |
|------------|---------------|------------|---------------|
| Afficher aussi les factures en dépôt (décochée) | *(absent)* / `0` | `inclure_en_depot=0` | Programmes/FG excluent `statutsStadeDepot()` |
| Afficher aussi… (cochée) | `1` | `inclure_en_depot=1` | Programmes/FG incluent aussi le stade dépôt (chevauchement assumé) |
| Tous | `tab=tous` | `tab` | Pas de filtre onglet |
| Programmes | `tab=programmes` | `tab` | `programme_id IS NOT NULL` + NOT avoir (+ exclude stade si case off) |
| Frais généraux | `tab=frais_generaux` | `tab` | `programme_id IS NULL` + `entite_id IS NOT NULL` + NOT avoir (+ exclude stade si case off) |
| Avoirs | `tab=avoirs` | `tab` | `FactureEstAvoir` true |
| En dépôt | `tab=en_depot` (alias `autres`) | `tab` | `statut IN statutsStadeDepot()` + NOT avoir |

### Compteurs (mesures prod #1417, DB locale indisponible)

Case décochée : Programmes **371**, FG **795**, En dépôt **61**, Avoirs **3** ; somme = 1230 = Tous. Case cochée : Programmes **377**, FG **812**, En dépôt **61**, Avoirs **3**.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan view:clear`
3. `php artisan journal:sync`
4. Vérifier `/factures` : onglet En dépôt, case, actions gauche, clic ligne.

## LEÇON

- Les onglets Programmes/FG/En dépôt/Avoirs sont disjoints **seulement** si `inclure_en_depot` est off ; la case coche volontairement le chevauchement.
- Réutiliser `depotHref` existant pour le clic ligne ; `@click.stop` sur programme, marché, actions, référence ; ignorer clic si sélection de texte.
- Constantes via `DepotFacture::statutsStadeDepot()` — ne pas hardcoder les chaînes statut.
- Alias `tab=autres` → `en_depot` pour les URL/favoris anciens.
