---
suivi: 1771
date: 2026-10-02
sujet: Évolution des montants en fenêtre, droit restreint
chantier: factures / comptabilisation
type: évolution
statut: poussé
hash:
fichiers:
  - app/Http/Controllers/FactureController.php
  - app/Http/Controllers/FactureEvolutionMontantsController.php
  - routes/web.php
  - resources/js/Pages/Factures/Show.vue
  - public/build/
  - tests/Unit/EvolutionMontantsPopup1771SourceTest.php
  - docs/suivi/SUIVI_1771_evolution_montants_popup_droits.md
---

# SUIVI #1771 — Évolution des montants en fenêtre

Le tableau quitte le milieu de la fiche. Il s'ouvre depuis l'en-tête, pour la comptabilité, la direction générale et l'administration ERP.

## PROMPT ENVOYÉ

Fenêtre (Dialog) à la place du bloc pleine page. Bouton à côté d'Historique. Visible uniquement pour GS_COMPTABILITE, GS_ADMIN_ERP, GS_DIRECTION_GENERALE, contrôle brut `m365GroupNames()`. Données chargées à l'ouverture, absentes des props sans droit. Même droit sur le rapport et l'export.

## FICHES LUES

- **#1768 LEÇON** — la photo s'écrit après le commit du jalon ; HT, TVA et retenues envoyés ne sont pas une copie du dépôt. Impact : aucun service d'écriture touché.
- **#1478** — `ComptaTableauBordAcces::peutAcceder` lit `m365GroupNames()` sur exactement trois groupes. Impact : réutiliser ce contrôle, ne pas l'élargir, ne pas passer par le middleware de groupes.
- **#1766 LEÇON** — `Show.vue` se construit après rebase, un seul lot front. Impact : rebase puis un seul `npm run build`.

## CONSTAT

`ComptaTableauBordAcces::GROUPES_AUTORISES` = `GS_COMPTABILITE`, `GS_DIRECTION_GENERALE`, `GS_ADMIN_ERP`.

`peutAcceder` fait `array_intersect` de cette liste avec `$user->m365GroupNames()`. Pas de `hasM365Group`, pas de `hasAnyM365Group`, pas de `isAdminERP()`, pas de Gate.

`GS_DSI` est dans `GROUPES_ECRAN_COMPTABILISATION` seulement. Il n'ouvre pas ce tableau ni le rapport.

Le middleware `m365.groups` laisse passer `isAdminERP()` avant la liste de groupes, et appelle `hasAnyM365Group`. Il n'est pas utilisé ici.

## SYNTHÈSE

Bouton « Évolution des montants » dans l'en-tête, même style qu'Historique. Clic : requête `GET /factures/fiche/{facture}/evolution-montants`, puis Dialog large et défilante (tableau inchangé, lien « Rapport sur une période »). Le bloc en pleine page est retiré.

La fiche n'envoie qu'un booléen `peut_voir_evolution_montants`. Sans droit, le bouton est absent et le tableau n'est pas dans les props. La requête, le rapport et l'export répondent 403. La requête vérifie aussi que la fiche facture est visible.

Photos des jalons : écriture inchangée.

## DÉPLOIEMENT-TEST

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

Pas de migration. Pas de journal.

1. Usurpation comptabilité : bouton visible, fenêtre avec le tableau, plus de bloc en pleine page.
2. Usurpation direction générale : bouton visible.
3. Usurpation hors de ces groupes : bouton absent, pas de tableau dans la page, rapport en 403.

## LEÇON

`ComptaTableauBordAcces::peutAcceder` est déjà le contrôle brut des trois groupes. Ne pas l'élargir pour un autre écran, et ne pas le remplacer par le middleware `m365.groups` : celui-ci court-circuite la liste dès qu'un compte est admin ERP.
