---
suivi: 1158
date: 2026-08-03
sujet: Commercialisation — recherche et filtre statut grille (#100, #106)
chantier: commercialisation_grille
type: feature
statut: poussé
hash: eb4bc118
fichiers:
  - resources/js/Components/Commercialisation/LotsGrillePanel.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1158_commercial_grille_filtre.md
---

## PROMPT ENVOYÉ

SUIVI #1158 — lot 3 commercial. #100 barre recherche (n° lot + nom
acquéreur), #106 filtre multi-statut. Client-only (180 lots / 107 max).
KPI bandeau indépendants du filtre. Réf. SUIVI_1154.

## SYNTHÈSE

### Fiches lues

- `SUIVI_1154` — chargement `->get()`, pas de pagination ; tri client
  `numero_lot` ; pas de filtre DataTable (#1064).
- `SUIVI_1157` — zone `LotsGrillePanel` série ; HEAD avant ce lot =
  `68a11cdb`.

### Payload acquéreur

Déjà chargé : `CommercialisationController` eager
`reservations.contact` (modèle avec append `nom_complet`). Aucune requête
supplémentaire à la frappe. Recherche sur
`nom_complet` / `nom` / `prenom` / `raison_sociale` de la réservation
`en_cours`, sinon `acte`, sinon première avec contact.

### Mapping filtre statut (#106)

| Libellé affiché | Valeur (ENUM / postée) | Libellé back (`statut_label`) |
|-----------------|------------------------|-------------------------------|
| En stock | `en_stock` | En stock |
| En vente | `en_vente` | En vente |
| Réservé | `reserve` | Réservé |
| Acté | `acte` | Acté |
| Annulé | `annule` | Annulé |

Multi-sélection ; tableau vide = **tous**. Combinaison recherche ∩ statuts
(ET). Compteur permanent `N / total`.

### KPI

- Bandeau `StockSynthesePanel` : props serveur `stock_synthese` (programme
  entier) — non recalculé côté filtre.
- Computeds `kpis` / `kpisGlobaux` / `kpisLotsStatuts` dans le panel :
  restent sur **`props.lots`** (commentaire #1158).
- Seule la Σ « Valeur Vente Totale des Lots » (footer lotissement #1064)
  suit les **lignes affichées** (`lotsFiltres`) — ce n’est pas le KPI
  remises.

### Code

- `lotsTries` = tri complet inchangé.
- `lotsFiltres` = affichage DataTable.
- Normalisation recherche : NFD + strip accents + lower case.

## DÉPLOIEMENT / TEST

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

Pas de migrate.

### Tests

1. Recherche n° partiel.
2. Nom acquéreur ± accents / casse.
3. Multi `reserve`+`acte`.
4. Combiné + compteur.
5. KPI bandeau identiques avec/sans filtre.
6. Vider recherche + vider statuts → grille initiale.
7. Pas de requête réseau à la frappe (DevTools).

## LEÇON

À ~100 lignes, filtre client + compteur suffisent ; pagination serveur
casserait tri et KPI. Séparer explicitement **lignes affichées** et
**agrégats programme** — un KPI qui suit le filtre est pire qu’un 500.
