---
suivi: 1322
date: 2026-08-13
sujet: liberation_rg_page_compta
chantier: marches_compta
type: feature
statut: poussé
hash: e6db5bef
fichiers:
  - app/Http/Controllers/DemandeLiberationRgController.php
  - app/Services/DemandeLiberationRgService.php
  - app/Policies/DemandeLiberationRgPolicy.php
  - routes/web.php
  - resources/js/Pages/LiberationRg/Index.vue
  - resources/js/Layouts/AppShell.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1322_liberation_rg_page_compta.md
---

## PROMPT ENVOYÉ

PHASE 2 #1322 (lot C) — page transverse de suivi des demandes de libération RG
pour la comptabilité. Réutiliser routes/Policy #1320. Porte STOP Sage.

## SYNTHÈSE

### Fiches lues
- `#1320` LEÇON : table demandes, Policy `m365GroupNames()` brut, routes
  payer/refuser, plafond `montant_retenu` — **réutilisé**, pas de second chemin.
- `#1321` : Synthèse/KPI — **non touché** (`MarcheSyntheseFinanciereService`
  hors périmètre).

### Objet 1 — page
`GET /liberation-rg` → `LiberationRg/Index.vue`. Colonnes Programme (`libelle`),
Marché (`reference`), Fournisseur (`nom`), Montant HT, dates, demandeur, état,
paiement/refus, justificatifs. Tri : Demandée d’abord, plus anciennes en tête.
Filtres GET : état, programme, fournisseur, période. Compteur `nb_filtres_actifs`
serveur. Empty distincts : `aucune_demande` vs `aucun_resultat_filtres`.

### Objet 2 — états
Réutilise `marches.liberation-rg.payer` / `refuser` (#1320). Pas de traitement
par lot (risque d’état incohérent > clic en plus). Date / motif obligatoires.
Trace `Log::warning` inchangée côté service #1320.

### Objet 3 — menu
`AppShell.vue` sous Comptabilité, après « Demandes fournisseurs », entrée
« Libérations de RG » (visibilité `m365GroupNames` brut). Route protégée par
Policy `viewAny` + `abort_unless(userEstComptaBrut)` (403).

### Visibilité enregistrement
`FactureVisibility` / `record_habilitations` **non appliquées** : page comptable
transverse (choix documenté, pas un oubli).

### AppShell
Touché **volontairement** pour l’entrée de menu (OBJET 3) malgré le garde-fou
des lots précédents.

### Vérification écran
**NON** — base locale sans marchés/demandes utilisables ; pas de prod.
Lot **non validé** écran réel.

## DÉPLOIEMENT-TEST

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

Porte STOP Sage / Intacct maintenue (débit 401400).

## LEÇON

Un second chemin d’écriture pour payer/refuser divergerait toujours. La page
transverse n’ajoute que la lecture filtrée + UI ; les POST restent #1320.
`Gate::before` admin rend `authorize` insuffisant : garder `abort_unless`
sur `m365GroupNames()` brut.
