---
suivi: 1190
date: 2026-08-04
sujet: Saisie facture — filtre programmes enseigne + search serveur
chantier: depot-factures
type: feature
statut: poussé
hash: b07f1232
fichiers:
  - app/Support/ProgrammeEnseigneComfortFiltre.php
  - app/Support/ProgrammeSaisieSelectPresenter.php
  - app/Http/Controllers/ProgrammeController.php
  - app/Http/Controllers/DepotFactureController.php
  - routes/web.php
  - resources/js/Components/Programmes/ProgrammeSearchSelect.vue
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - resources/js/Pages/DepotFactures/Index.vue
  - resources/js/Pages/DepotFactures/Show.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/ProgrammeEnseigneComfortFiltreTest.php
  - public/build/
---

## PROMPT ENVOYÉ

SUIVI #1190 — filtre programmes par enseigne (confort), recherche serveur,
composant unique appliqué au dépôt uniquement. Échelle 110+ HECTARE.

## FICHES LUES

- `SUIVI_1188` — filtre ≠ ProgrammeAccessService ; GEMME ; déblocage session.
- `SUIVI_1189` — ne pas casser Bloquer / 3 issues ; série SaisieForm.
- `SUIVI_1156` — modèle FournisseurSearchSelect (min 2 car.).
- Piège #1184 : enseigne eager load partiel → ici `enseigne:id,code` seulement.

## SYNTHÈSE

### Composant
`ProgrammeSearchSelect.vue` — AutoComplete + `GET /programmes/search`.
- Filtre enseigne actif : liste au focus (min_q=0), bandeau « Programmes X · N · M masqués », bouton « Tout débloquer ».
- Débloqué / sans filtre : recherche dès 2 caractères (échelle 110+).
- `include_id` : programme hors filtre toujours affichable (édition).
- Déblocage = `ref` Vue dans le composant (durée de la saisie / remount) — **pas** preferences, **pas** localStorage.

### Helper
`ProgrammeEnseigneComfortFiltre` — GS_* → codes ; vide = tout. Pas d’ACL.

### Inventaire sélecteurs (non modifiés)
Voir livrable : AppShell switcher, Annuaire, Juridique, Tâches, registres,
Admin codes/leads, Factures Global, Programmes/Index, Mes Tâches filtre…

### À 110+
Search limit 40 ; payload dépôt n’embarque plus le catalogue (seulement le
programme rattaché). Marches restent chargés (dette volumétrie séparée).

## DÉPLOIEMENT-TEST

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

Pas de migrate.

## LEÇON

Filtre confort ≠ ProgrammeAccessService. Select catalogue entier ne survit
pas à 110 programmes — search serveur dès le premier lot, même à 12.
