---
suivi: 1199
date: 2026-08-05
sujet: Foncier — page Prospection unifiée (3 modes)
chantier: module-foncier
type: feature
statut: poussé
hash: 500a99f3
fichiers:
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Http/Controllers/Foncier/ProprietaireController.php
  - app/Http/Controllers/Foncier/FoncierController.php
  - routes/web.php
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - resources/js/Components/Foncier/Prospection/ParcellePanel.vue
  - resources/js/Components/Foncier/Prospection/ProprietairePanel.vue
  - resources/js/Components/Foncier/Prospection/CommunePanel.vue
  - resources/js/Layouts/AppShell.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Feature/Foncier/FoncierProspectionSourceTest.php
  - public/build/
  - docs/suivi/SUIVI_1199_foncier_prospection_unifiee.md
---

## PROMPT ENVOYÉ

SUIVI #1199 — fusion listes Parcelles + Propriétaires → PROSPECTION
(Option A : une liste, trois modes). Carte = instruire seulement.
HEAD prod annoncé = 32d1e4a3 ; rebase sur origin/main (#1198).

## ÉTAPE 0 — DICTIONNAIRE

`php tools/diag/dictionnaire.php foncier` → base locale Cursor
`erp_immo_migrate_1113` (volumes 0). Pas de commit du dict local
(rates vides). Colonnes vérifiées : `date_fin_detention`,
`zonage_pinel` / `zonage_social` (NULL = inconnu), table
`parcelle_geometries` (GEOMETRY SRID 4326 MySQL).

Fiches lues : #1194 (onglet FONCIER), #1196 (useTabAnchor), #1109
(carte fiche + IGN), #1116 (cloisonnement).

## SYNTHÈSE

### Objet 1 — Fusion sans perte
Page `/foncier/prospection` + sélecteur de mode. Anciennes listes
redirigent (query conservée + `mode=`). Fiches `{id}` inchangées.
Menu Foncier : entrée unique « Prospection ».

### Objet 2 — Mode commune
Agrégats uniquement pour communes avec ≥1 parcelle (pas les 34 875).
Zonages Pinel/social affichés si présents ; NULL ≠ zone C.

### Objet 3 — Carte (instruction seule)
Voir synthèse livrable — recommandation : **reporter** le lot carte
tant que le référentiel géométré reste faible (≤6). Leaflet déjà
présent (`ParcelleMap.vue`, Plan IGN V2 sans clé).

### Persistance
Mode + filtres = **query string** (partageable, survit au reload).
`useTabAnchor` (`?mode=` + `#mode`). Pas de localStorage.
Préférences `mon_secteur` / `grouper_par_charge` aussi en prefs user
quand présentes dans la query (comportement inchangé #1076).

### Migration
Aucune.

## DÉPLOIEMENT-TEST

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

Tests manuels : 13 points du prompt (KX 112 orpheline, proprio « test »,
3 modes, saisie rapide commune, filtres état, redirects).

## LEÇON

- Option A Robin : deux sens de lecture (cadastre ↔ propriétaire) ;
  hiérarchie stricte + orphelins explicites, jamais de masquage.
- `currentKey` de `useTabAnchor` est une **fonction**, pas une ref —
  pour changer de mode côté serveur : `router.get` + `serverTab`.
- Carte : dépendances front déjà là ; le vrai coût est peuplement IGN
  (route WEB, padding section A→0A) + analyses spatiales D71.
