---
suivi: 1101
date: 2026-07-30
sujet: Foncier — rattacher des parcelles à un dossier (direct ou via propriétaire)
chantier: module-foncier
type: feature
statut: poussé
hash: 741bb530
fichiers:
  - app/Models/DossierFoncier.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - routes/web.php
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - tests/Feature/Foncier/FoncierRattachementParcellesDossierTest.php
  - tests/Feature/Foncier/FoncierRattachementParcellesDossierSourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1101_foncier_rattachement_parcelles_dossier.md
---

## PROMPT ENVOYÉ

SUIVI #1101 — Rattacher des parcelles à un dossier, par propriétaire ou
directement (D51, détention courante, réutilisation search #1092/#1100).

## SYNTHÈSE

### Phase 1 — Audit
1. Onglet Parcelles Show.vue : **lecture seule** avant ce lot (pas d’attach/detach).
2. `proprietairesDerives()` chargeait `parcelles.proprietaires` **sans** filtre
   `date_fin_detention IS NULL` → **défaut corrigé** (vendeurs historiques exclus).
3. Endpoint réutilisé : `GET foncier.actes-fonciers.parcelles.search` (#1092/#1100).
   Pas de 3e search parcelle. Nouveau : search propriétaires + liste parcelles
   courantes d’un propriétaire (filtre UI uniquement).

### Livré
- A. Rattachement direct multi-sélection + détachement
- B. Via propriétaire : parcelles courantes, coches explicites, « tout cocher »
  non préselectionné
- C. Signalement indivision (`N co-indivisaires`)
- Transaction + message clair si déjà rattaché ; doublons #1076 au rattachement
- ACL `authorize('update')` ; lecture seule → 403
- Aucune table dossier↔propriétaire (D51)

### Routes (signature = segment)
| Route | Méthode | Params |
|-------|---------|--------|
| dossiers.parcelles.attach | attachParcelles | dossierFoncier |
| dossiers.parcelles.detach | detachParcelle | dossierFoncier, parcelle |
| dossiers.proprietaires.search | searchProprietaires | dossierFoncier |
| dossiers.proprietaires.parcelles | parcellesOfProprietaire | dossierFoncier, proprietaire |

## DÉPLOIEMENT / TEST

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

Pas de migration. Vérifier onglet Parcelles (0 / 1 / N) sans 500.

## LEÇON

Un chemin de saisie inverse n’exige pas d’inverser le modèle — partir du
propriétaire pour trouver les parcelles préserve la vérité unique de D51
(propriétaires dérivés des parcelles, jamais l’inverse en base).
