---
suivi: 1273
date: 2026-08-11
sujet: Inventaire unification URL dépôt (Show → Index) — clause d'arrêt
chantier: depot-factures
type: diagnostic
statut: poussé
hash: f3e3837d
fichiers:
  - docs/suivi/SUIVI_1273_depot_url_ecran_unique.md
---

# SUIVI #1273 — Unification écran dépôt (inventaire + clause d’arrêt)

## PROMPT ENVOYÉ

Option A Robin : `GET /depot-factures/{uuid}` doit rendre la page liste avec dépôt préselectionné. Inventaire obligatoire de `Show` avant code. Clause d’arrêt si > 5 fonctions à porter ou point d’entrée dépendant du rendu Show.

## Prérequis

`origin/main` à `c5c04d38` (#1272 poussé). Pas de modification de `DepotFactureSaisieForm.vue` / `AppShell.vue` dans ce lot.

## CLAUSE D’ARRÊT — APPLIQUÉE

**Aucun code fonctionnel.** Motifs cumulés :

1. **≥ 6 fonctions à porter** depuis Show vers Index (voir tableau OBJET 1) — seuil « plus de cinq ».
2. **Points d’entrée qui atterrissent sur le rendu Show aujourd’hui** : e-mails NV (`NotificationFactureService`), alertes (`AlerteService` ×6), redirections fiche facture (`FactureController` edit/view dépôt), Validations, « Facture suivante » (`suivanteAValider` → `router.visit(depot_url)`), test Feature qui assert `DepotFactures/Show`.

Recommandation : Robin arbitrer le périmètre de portage (surtout **Réattribuer** / **Rejeter** / **Facture suivante** dans la barre Ariane Index) puis un lot de mise en œuvre dédié, sans toucher `DepotFactureSaisieForm` si possible.

## OBJET 1 — Inventaire Show vs Index

| Fonction de Show | Existe déjà dans Index | Doit être portée | Comment |
|---|---|---|---|
| Lien « ← Retour aux dépôts » | N/A (on est sur la liste) | **non** | Retirer si Show disparaît de la route ; sans objet sur Index |
| `StatutBadge` (display_badge_statut / display_statut) | **non** (Index a des pastilles de statut **liste**, pas le badge fiche normalisé en tête de sélection) | **oui** | Afficher près de la sélection / barre Ariane |
| `WorkflowBloqueBadge` | **non** | **oui** | À côté du badge statut |
| Enregistrer (workflow `can_enregistrer`) | **oui** | non | `DepotFactureSaisieForm` ActionBar / Teleport Ariane (`modification_workflow`) quand `externalWorkflowActions=false` |
| Valider (`can_validate`) | **oui** | non | Idem ActionBar |
| Réattribuer (`can_reattribuer_validateur`) + dialog | **non** | **oui** | POST `/factures/fiche/{id}/reattribuer-validateur` — UI absente d’Index |
| Bloquer / Débloquer | **oui** | non | Formulaire Index (#1189) via `can_block` + overflow / controls |
| Rejeter (`can_reject`) + dialog | **non** | **oui** | POST `/factures/fiche/{id}/rejeter` — UI absente d’Index |
| Supprimer (`can_supprimer` workflow) | **partiel** | **oui** (à clarifier) | Index : delete depuis la **liste** ; Show : bouton conditionné `workflow_modification.can_supprimer`. Même DELETE route, conditions d’affichage à aligner |
| **Facture suivante à valider →** + « Plus de facture à valider » | **non** | **oui** (priorité absolue) | GET `/depot-factures/{uuid}/suivante-a-valider` puis `router.visit(depot_url)` — usage Sabrina/Laury |
| Bandeau « Édition exceptionnelle réservée Admin ERP » | **oui** | non | Props `edit_override_*` déjà passées au formulaire depuis `/data` |
| `externalWorkflowActions=true` | **non** (Index laisse `false`) | **architecture** | Sur Show : masque ActionBar formulaire et expose la barre Show. Sur Index : garder une **seule** barre Ariane ; y intégrer les actions manquantes (pas une 2ᵉ barre) |
| PDF + saisie | **oui** | non | Index 3 colonnes ; Show Splitter 50/50 — différence de layout volontaire |
| `use-ajax=false` (Show) vs `true` (Index) | différent | **à trancher** | Comportement sauvegarde/reload ; ne pas changer sans test validation série |
| Dialogs rejet / réattribution / delete Show | non (sauf delete liste) | **oui** avec Rejeter/Réattribuer | Porter les dialogs avec les boutons |

**Total « doit être portée = oui » (hors N/A / déjà présents) : 6** — Facture suivante, Badge statut, WorkflowBloqueBadge, Réattribuer, Rejeter, Supprimer (alignement can_supprimer).

## Points d’entrée vers `depot-factures.show` / `/depot-factures/{uuid}`

| Source | Nature | Dépend du rendu Show.vue ? |
|---|---|---|
| `routes/web.php` → `DepotFactureController::show` | Route Inertia → `DepotFactures/Show` | **oui** (rendu actuel) |
| `DepotFactureController::suivanteAValider` → `depot_url` | JSON pour bouton suivante | **oui** (visit Inertia Show) |
| `DepotFactureController` payload ~L2823 | idem | oui |
| `AlerteService` (6× `route('depot-factures.show')`) | Liens alertes in-app | atterrit Show aujourd’hui |
| `NotificationFactureService` | E-mails NV1/NV2 « Accéder à la facture » | atterrit Show |
| `FactureController` `edit_depot_url` / `view_depot_saisie_url` | Fiche facture → dépôt | atterrit Show |
| `Validations/Index.vue` | Lien validation | atterrit Show |
| `Factures/Show.vue`, `Factures/Global.vue` | Liens dépôt | atterrit Show |
| `ProgrammeFacturesPanel.vue` | Lien | atterrit Show |
| `Marches/Show.vue`, `Cie/Index.vue`, `Cie/Show.vue` | Liens | atterrit Show |
| `MontantFactureSousTraitantService`, `ChargePortageService`, `DepotFactureDoublonPayload` | URLs métier | atterrissent Show si visités |
| `Index.vue` #1269 `replaceState` | URL cosmétique sans visit | reste sur Index |
| `tests/Feature/FactureFicheRouteTest.php` | Assert composant `DepotFactures/Show` | **oui** |

## OBJET 2–4

Non implémentés (clause d’arrêt).

## LEÇON

Unifier l’URL sans inventaire des actions **hors formulaire** (Réattribuer, Rejeter, Facture suivante) casserait le parcours validation en série. Les mails/alertes ne sont pas « neutres » : ils ouvrent aujourd’hui Show.

## Vérification

Inventaire **lecture code uniquement** — **pas** d’écran réel ni fixture UI.

## DÉPLOIEMENT

Aucun (diagnostic). Après arbitrage Robin : lot d’implémentation séparé.
