---
suivi: 1074
date: 2026-07-30
sujet: Module Foncier Lot 2 — parcelles, propriétaires, prospection
chantier: module-foncier
type: feature
statut: poussé
hash: 70393554
fichiers:
  - database/migrations/2026_07_30_140000_create_proprietaires_tables.php
  - database/migrations/2026_07_30_140100_create_parcelles_table.php
  - database/migrations/2026_07_30_140200_create_parcelle_geometries_table.php
  - database/migrations/2026_07_30_140300_create_parcelle_proprietaire_table.php
  - app/Models/Proprietaire.php
  - app/Models/ProprietaireAccessLog.php
  - app/Models/Parcelle.php
  - app/Models/ParcelleGeometrie.php
  - app/Support/Foncier/FoncierReferentiels.php
  - app/Services/Foncier/ParcelleProspectionQuery.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/
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Feature/Foncier/FoncierParcellesProspectionTest.php
  - public/build/
  - docs/suivi/SUIVI_1074_foncier_parcelles_proprietaires.md
---

## PROMPT ENVOYÉ

SUIVI #1074 — MODULE FONCIER LOT 2 : PARCELLES, PROPRIÉTAIRES, PROSPECTION.
Migrations proprietaires (+ RGPD), parcelles, parcelle_geometries (GEOMETRY
SRID 4326 dédiée), parcelle_proprietaire N⇄N. Écran prospection filtres
cumulables (options depuis jeu visible #1070). Fiches parcelle/propriétaire.
Référentiel ouvert, parcelle sans propriétaire OK, états non monotones.
Un commit, push HECTAREG.

## SYNTHÈSE

### Unicité parcelle
`(code_insee_commune, section_cadastrale, numero)` — une même section+numéro
existe sur des communes différentes ; l’INSEE ancre le cadastre.

### RGPD réutilisé / manquant
Réutilisé (pattern Annuaire/Contact) :
- champs `rgpd_consent`, `rgpd_consent_at`, `rgpd_canal`, `anonymise`,
  `rgpd_anonymise_at`, `created_by` ;
- table `proprietaire_access_logs` (view / anonymise) ;
- anonymisation admin ERP + journal.
Manquant par rapport à un CRM idéal (constaté aussi côté Annuaire) :
base légale / opposition / rétention auto / logs IP / historique consentement.
Pas de second système inventé.

### SHOW CREATE attendu (prod MySQL) — coller sortie brute après migrate

```
SHOW CREATE TABLE proprietaires;
SHOW CREATE TABLE proprietaire_access_logs;
SHOW CREATE TABLE parcelles;
SHOW CREATE TABLE parcelle_geometries;
SHOW CREATE TABLE parcelle_proprietaire;
```

parcelle_geometries (extrait migration) :
GEOMETRY NOT NULL SRID 4326 + SPATIAL INDEX + FK unique parcelle_id.

### Mapping UI ↔ DB

| UI libellé | Valeur postée / DB | Colonne |
|------------|--------------------|---------|
| Repérée … Projet abandonné | reperee … projet_abandonne | parcelles.etat_foncier |
| Personne physique … Société du groupe | physique … societe_groupe | proprietaires.type |
| Active / Remplacée | active / remplacee | parcelles.statut_cadastral |
| Quote-part | 0–1 decimal | parcelle_proprietaire.quote_part |
| Cases état (cumul) | etats[] whereIn | filtre prospection (UNION) |

### Closures (variables libres ↔ use)

| fichier:ligne | libres | dans use() ? |
|---------------|--------|--------------|
| ProprietaireController.php:26 | $like | OUI use ($like) |
| ParcelleProspectionQuery.php:77 | $departement | OUI |
| ParcelleProspectionQuery.php:93 | $like, $q | OUI |
| ParcelleProspectionQuery.php:97 | $like | OUI |
| ParcelleProspectionQuery.php:100 | $like | OUI |
| Migrations Schema::create | $table (param) | N/A |

### Bundles
- app-mnPxKvQQ.js
- pages Foncier Parcelles/Proprietaires/Referentiel (manifest)

### Tests
Feature test livré (skip sans pdo_sqlite). MySQL local indisponible ici —
ST_Area et SHOW CREATE à rejouer en prod après migrate.

## DÉPLOIEMENT / TEST

1. git pull && php artisan migrate --force
2. view:clear && journal:sync
3. Module foncier actif + foncier.lecture/gestion
4. Créer parcelle sans propriétaire ; indivision 3×1/3 ; detach
5. Filtres 2 états → union ; commune options stables après filtre état
6. SHOW CREATE TABLE parcelle_geometries ; insert GeoJSON + ST_Area
7. User sans lecture → 403

## LEÇON

Options de filtres depuis le scope visible (clone avant filtres) — leçon #1070
appliquée d’emblée. Géométrie en table dédiée NOT NULL + SPATIAL INDEX : une
colonne nullable sur parcelles aurait interdit l’index MySQL.
