---
suivi: 1194
date: 2026-08-05
sujet: Foncier — onglet FONCIER dossier (fusion propriétaires / parcelles)
chantier: module-foncier
type: feature
statut: poussé
hash: c4b232ea
fichiers:
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Services/Foncier/ParcelleCreationService.php
  - routes/web.php
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - resources/js/Components/Foncier/DossierFoncierTab.vue
  - tools/diag/diag_foncier_dossier_1194.php
  - docs/dictionnaire/foncier.md
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1194_foncier_dossier_onglet_foncier.md
---

## PROMPT ENVOYÉ

SUIVI #1194 — fusion Propriétaires + Parcelles → onglet FONCIER (D51),
création proprio/parcelle depuis le dossier, écriture détention, inventaire
statuts sans implémentation. HEAD prod annoncé = 41a6a4a3.

## ÉTAPE 0 — DICTIONNAIRE

`php tools/diag/dictionnaire.php foncier` → `docs/dictionnaire/foncier.md`
Base locale Cursor `erp_immo_migrate_1113` : **volumes 0** sur toutes les tables
foncier (stub migrate). Volumes prod à lire via :

```bash
php tools/diag/diag_foncier_dossier_1194.php
```

Fiches lues : `SUIVI_1182` (détention / audit / pas 2e chemin), `SUIVI_1111`
(D51 inversion). CDC `CDC_Foncier_Hectarion_v21.md` **absent du repo** ;
D51 confirmée via #1111.

## SYNTHÈSE

### Alignement D51
Confirmé : le dossier porte les **propriétaires** ; les parcelles sont
**dérivées** des détentions courantes. L’écran FONCIER suit ce modèle.

### Objet 1 — Onglet FONCIER
Ordre : Synthèse · FONCIER · Négociations · Faisabilité · Promesses · Suivi · Accès.
Anciens `?tab=proprietaires|parcelles` → `foncier`.
Autres onglets inchangés (consomment toujours `proprietaires` / `parcellesCandidats`).

### Fonctions de l’ancien onglet Parcelles — où elles vont
| Fonction | Destination |
|----------|-------------|
| Liste groupée par propriétaire + surfaces cad./arpentée | Onglet FONCIER |
| Filtre commune | Onglet FONCIER |
| Badges engagement offre/promesse/acte | Onglet FONCIER |
| Lien fiche parcelle | Onglet FONCIER → `/foncier/parcelles/{id}` |
| Géométrie / import IGN | Fiche parcelle (#1109) — non déplacé |
| Zonage PLU, statut cadastral, filiation | Fiche parcelle (#1155/#1182) |
| Création / rattachement depuis dossier | **Nouveau** dans FONCIER |

### Objet 2 — Détention
- Rattacher écrit `parcelle_proprietaire` via `ParcelleCreationService`
  (`ParcelleDetention::create`, `date_debut_detention` = null, `acte_foncier_id` = null).
- Audit explicite `FieldAuditService::recordChange` (comme #1182).
- Déjà détenteur courant → **422 lisible** (`refuseSiDejaCourant`), pas 500 `pp_courante_uq`.
- **Détacher du dossier ≠ clôturer** : retrait proprio dossier ne clôture pas ;
  message explicite à l’écran. Clôture = fiche parcelle (`ParcelleDetentionService::clore`).
- `dossier_foncier_parcelle` : miroir conservé (`syncParcellesMiroir…`) ; non supprimé.
- Section « parcelles sans propriétaire identifié » pour orphelines du miroir.

### Objet 3 — Créations
- Proprio minimal + candidats doublon (nom normalisé) avant force_create ; pas d’`entite_id` physique.
- Parcelle : normalisation A→0A / numéro 4 car. ; preview / confirm_rattacher si triplet existant.
- Search serveur dossier (min 2 car., scope D62) — motif #1100/#1156/#1190.
  Réutilise le pattern, pas le catalogue actes (celui-ci est hors ACL).

### Objet 4 — Statuts (inventaire, RIEN CODÉ)
1. Champ réel : `dossiers_fonciers.statut` **varchar(20)**, valeurs
   `FoncierReferentiels::STATUTS_DOSSIER` : `en_cours`, `en_veille`, `terminee`, `annulee`.
   Pas de table référentiel. Répartition prod : diag `diag_foncier_dossier_1194.php`.
2. Écriture : création force `en_cours` ; édition Form/update (saisi). Affiché en
   en-tête Show (`statut_libelle`). Compteurs index. Pas de déduction auto.
3. Objets avancés (volumes = diag prod) :
   - `offres_foncieres` → négociation
   - `promesses` → promesse
   - `actes_fonciers` → acquis
   - `scenarios` → faisabilité
4. **Proposition** (à trancher Robin) :
   | Statut proposé | Signification |
   |----------------|---------------|
   | Opportunité | Dossier sans offre ni promesse ni acte |
   | Négociation | Au moins une offre ouverte |
   | Promesse | Promesse active |
   | Acquisition | Acte |
   | En veille | Pause (forcé) |
   | Abandonné | Sortie (forcé) |
   → **Déduit par défaut** de l’objet le plus avancé, **forçable** (veille / abandon).
   Ne rien implémenter dans ce lot.

### Migration
Aucune. Tables / pivots existants.

## DÉPLOIEMENT-TEST

1. `git pull origin main`
2. `php artisan optimize:clear` ; `view:clear` ; `route:clear` ; `journal:sync`
3. `php tools/diag/diag_foncier_dossier_1194.php` (volumes + orphelines + statuts)
4. Tests écran 1–12 du prompt (DF-2026-0001, détention, doublon cadastre, section A→0A, ACL)

## LEÇON

- Détacher dossier ≠ clôturer détention : deux actions, deux intentions juridiques.
- BelongsToMany::attach contourne l’audit Eloquent → passer par `ParcelleDetention`.
- Listes cloisonnées (D62) ≠ unicité objet (findDuplicate hors ACL).
