---
suivi: 1208
date: 2026-08-05
sujet: Prospection — grille d’abord, colonne 1 pivotante
chantier: foncier / prospection
type: feature
statut: poussé
hash: ebd4c57e
fichiers:
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Http/Middleware/HandleInertiaRequests.php
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - resources/js/Components/Foncier/Prospection/ProspectionSaisieDialog.vue
  - tests/Feature/Foncier/FoncierProspectionSourceTest.php
  - tools/diag/diag_prospection_queries_1208.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1208_foncier_prospection_grille.md
---

# SUIVI #1208 — Prospection grille

## PROMPT ENVOYÉ

Refonte Prospection : liste d’abord, colonne 1 pivotante selon le mode,
saisie en modale, filtres repliés, perf N+1 bloquant.

Décisions : Q1=A, Q3=A, Q4=A, Q5=A.

## SYNTHÈSE

### Ordre page
Titre + mode + CTA → recherche/3 clés/Filtres(N) → pastilles états →
**grille 7 colonnes** → orphelins repliés → pied lignes·SQL.

### Grammaire colonne 1
| Mode | Colonne 1 |
|------|-----------|
| parcelle | Référence → fiche parcelle |
| proprietaire | Nom → fiche propriétaire |
| commune | Nom → mode parcelle filtré `code_insee` |

### Eager load (colonnes nommées)
- `commune:code_insee,nom,departement`
- `proprietairesActuels:id,type,nom,prenom,raison_sociale,anonymise,responsable_id`
- `proprietairesActuels.responsable:id,name`
- `withCount` proprietaires + occupations (subselect)

### Perf (diag seed+rollback)
| Mesure | Requêtes |
|--------|----------|
| AVANT (prod signalé) | 11 pour 6 lignes |
| Eager+etatCounts 6 lignes | **5** |
| Eager+etatCounts ≥100 (page 30) | **5** |
| CONSTANT | **YES** |

Compteurs d’état = ensemble filtré (hors filtre états), pas la page.

### AVANT → APRÈS (informations)
| AVANT | APRÈS |
|-------|-------|
| Saisie rapide inline dépliée | Modale « + Nouvelle parcelle » |
| Pavé filtres + cases états | Recherche + commune/constructible + pastilles + Filtres(N) |
| Colonne « Informations » fourre-tout | État (badge) + propriétaires nommés séparés |
| nb propriétaires seul | 2 noms + `+N` ; `0 propriétaire` anomalie |
| Surface | Cad. · arp. si ≠ |
| Zonage / constructible absents grille | Col. 6 |
| Chargé (groupement) | Col. 7 + grouper avancé |
| Orphelins mode parcelle seulement | Tous modes, replié + compteur |
| Mode proprio : cartes/groupes | Même grille 7 cols |
| Mode commune : dossiers colonne | Title hover sur commune (nb dossiers) |
| Pinel/social | Col. 6 ; NULL → « non renseigné » |
| Flash succès texte | Flash + lien `parcelle_creee` |

Fiches lues : #1199 (useTabAnchor currentKey=fn), #1204 (preference), #1201 (MAJUSCULES).

## DÉPLOIEMENT-TEST

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

## LEÇON

`Route::permanentRedirect` / select partiel sur BelongsToMany : omettre
`nom/prenom/raison_sociale` → libellés vides sans erreur (#1184). Compter
les requêtes sur 6 **et** ≥100 lignes pour prouver la constante.
