---
suivi: 1333
date: 2026-08-13
sujet: dashboard_widget_factures_strict
chantier: dashboard
type: fix
statut: poussé
hash: ee258e35
fichiers:
  - app/Services/Dashboard/WidgetDataService.php
  - app/Services/Dashboard/UserDashboardLayoutService.php
  - config/dashboard_widgets.php
  - resources/js/Components/Dashboard/WidgetBody.vue
  - resources/js/Components/Dashboard/WidgetWrapper.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1333_dashboard_widget_factures_strict.md
---

## PROMPT ENVOYÉ

SUIVI #1333 — widget « Mes factures à valider » : périmètre STRICT (valideur
désigné au niveau courant uniquement), suppression scroll interne, hauteur
calée sur l’extrait (pas de rognage vertical). Ne pas toucher
`ValidationController` / `/validations` (périmètre large conservé).

## SYNTHÈSE

### Fiches lues
- `#1331` : contenu lisible + FactureVisibility + catalogue réduit — **conservé** ;
  périmètre large (rôles programme / juriste / PDG) **volontairement resserré** ici.
- `#1329` : URLs en dur, error/retry, pas « Données indisponibles » pour vide —
  **non régressé**.
- `#1332` : HEAD `19b34937` — zone commune ; files SIWI / CommuneSelect non touchés.

### Valideur désigné (SHOW COLUMNS)
Table `workflow_validations`, colonne `validateur_id` (pas de colonne valideur
sur `factures`). Niveau courant : `factures.statut` ∈
`en_validation_nv1|en_validation_nv2` + `workflow_validations.niveau` aligné
(`nv1` / `nv2`) et `statut = en_attente`.

### OBJET 1 — Périmètre
`WidgetDataService::facturesAValider` : `validateur_id = user` uniquement ;
exclusion rôles programme / juriste / PDG. NV2 n’apparaît pas chez le valideur
NV1. Rejetée / payée / comptabilisée / en paiement exclus via `whereIn` statut
validation. `FactureVisibility::canViewFacture` conservé.
**`ValidationController` non touché** — pas d’extraction : le widget avait déjà
sa propre requête (copie élargie #1331) ; resserrage local suffit. `/validations`
garde `buildFacturesForUser` large.

### OBJET 2 / 3 — UI
Borne **4** lignes ; `+ N autres` → `/validations`. `default_height` catalogue
**7** (row-height 48). Layouts existants : `max(height, default_height)` à la
lecture (`UserDashboardLayoutService`). Corps widget : retrait du défilement
interne ; truncate horizontal + `title` pour noms longs ; **aucune** classe
`overflow-*` sur le corps.

### Chantier ouvert (#1331)
Les 10 widgets non recréés restent un chantier ouvert.

### Vérification écran
**NON faite** (pas de session M365 / prod depuis Cursor). Compteurs locaux
strict = 0 (base sans factures en validation). Lot **non validé écran**.

## DÉPLOIEMENT-TEST

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

Pas de migration. Tests 1–14 prod (2 comptes : admin Robin + valideur réel).

## LEÇON

Titre « Mes factures » = valideur **désigné** au niveau **courant**, pas
éligibilité large de `/validations`. Scroll interne dans un widget = extrait
trop haut pour sa case : monter `default_height`, ne pas masquer le débordement.
