---
suivi: 1182
date: 2026-08-04
sujet: Foncier — propagation détention après division / réunion (F3)
chantier: module-foncier
type: feature
statut: poussé
hash: febfd3f3
fichiers:
  - app/Services/Foncier/ParcelleDetentionPropagationService.php
  - app/Services/Foncier/ParcelleOperationCadastraleService.php
  - app/Services/Foncier/ParcelleFiliationService.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Console/Commands/DiagFoncierDetentionFiliationCommand.php
  - app/Console/Commands/RattrapageDetentionFiliationCommand.php
  - tools/diag/diag_foncier_detention_filiation_1182.php
  - resources/js/Pages/Foncier/Parcelles/Show.vue
  - tests/Unit/Foncier/ParcelleDetentionPropagation1182SourceTest.php
  - tests/Unit/Foncier/ParcelleOperationCadastraleSourceTest.php
  - tests/Feature/Foncier/FoncierParcelleOperationCadastraleTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1182_foncier_detention_filiation_f3.md
---

## PROMPT ENVOYÉ

SUIVI #1182 — F3 propagation détention sur division/réunion cadastrale.
Étape 0 socle #1155 + quotes-parts. Cas B réunion : instruire puis proposer.

## ÉTAPE 0 — SOCLE #1155 (local Cursor)

Base locale `erp_immo` **incomplète** (pas de table `parcelle_filiations` —
schéma stub). Impossible de compter les filiations / orphelines ici.

**À exécuter en prod avant / juste après déploiement F3 :**

```bash
php tools/diag/diag_foncier_detention_filiation_1182.php
# ou
php artisan foncier:coherence-detention-filiation
```

Attendu si F2 jamais utilisé à l’écran : `filiations_count=0`, 0 orpheline.
Si des filiations existent : lister les filles orphelines puis dry-run
`php artisan foncier:rattrapage-detention-filiation` (sans `--execute`).

### Quotes-parts (0 bis)
Colonne réelle `parcelle_proprietaire.quote_part` (decimal, #1074/#1092) —
**existe**. Propagée à l’identique. Pas de numérateur/dénominateur séparé.
Nombre de parcelles multi-détenteurs : à lire via le diag prod.

## SYNTHÈSE

### Décision cas B réunion (proposée, à confirmer Robin)
**REFUS explicite** si les sources n’ont pas exactement les mêmes détenteurs
courants (propriétaire_id + quote_part). Pas d’indivision inventée.
Cas A (mêmes détenteurs) : propagation à l’identique sur l’issue.

### Implémentation
- `ParcelleDetentionPropagationService` : propager, clôturer, empreinte, diag,
  rattrapage.
- Intégré dans `diviser` / `reunir` (même transaction atomique).
- Audit création via `FieldAuditService::recordChange` ; clôture via dirty Eloquent.
- Commandes : `foncier:coherence-detention-filiation`,
  `foncier:rattrapage-detention-filiation` (--execute).
- UI Show : textes F3 (plus « sans propriétaire ») ; géométrie toujours F4.

### Mapping
| Libellé | Posté | DB | Back |
|---------|-------|-----|------|
| Diviser | POST diviser | filles + pp + cloture mère | F3 |
| Réunir | POST reunir | issue + pp si homogène | F3 cas A ; refus cas B |
| Quote-part | (auto) | parcelle_proprietaire.quote_part | identique mère |

## ⚠ RAPPEL BLOQUANT
**Robin doit valider F2 (#1155) à l’écran (diviser + réunir) AVANT déploiement
de F3.** F2 est en prod depuis le 04/08 matin sans test écran connu.

## DÉPLOIEMENT-TEST

1. Valider F2 à l’écran
2. `git pull` ; `optimize:clear` ; `view:clear` ; `route:clear` ; `journal:sync`
3. `php tools/diag/diag_foncier_detention_filiation_1182.php`
4. Tests 1–11 du prompt (division, cascade, refus cas B, transaction, cohérence)
5. Rattrapage uniquement si orphelines : dry-run puis `--execute` après relecture

## LEÇON

- #1155 ne clôturait pas les détentions des mères remplacées → invariant
  `remplacee` + courant à surveiller jusqu’au rattrapage / premières ops F3.
- Quote-part déjà en base : ne pas inventer une colonne.
- Cas B : refuser > inventer une indivision indétectable.
