---
suivi: 1102
date: 2026-07-30
sujet: Foncier — périmètre des offres (parcelles + surfaces souhaitées)
chantier: module-foncier
type: feature
statut: poussé
hash: edb6ee9a
fichiers:
  - database/migrations/2026_07_30_230000_create_offre_parcelle_table.php
  - app/Models/OffreFonciere.php
  - app/Models/DossierFoncier.php
  - app/Http/Controllers/Foncier/OffreFonciereController.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - tests/Feature/Foncier/FoncierOffrePerimetreTest.php
  - tests/Feature/Foncier/FoncierOffrePerimetreSourceTest.php
  - tests/Feature/Foncier/FoncierOffresFormellesTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1102_foncier_perimetre_offres.md
---

## PROMPT ENVOYÉ

SUIVI #1102 — MODULE FONCIER — PÉRIMÈTRE DES OFFRES : PARCELLES + SURFACES SOUHAITÉES.

## SYNTHÈSE

### Alignement `promesse_parcelle` (#1089)
Table `offre_parcelle` calquée sur `promesse_parcelle` :
- `id`, `offre_fonciere_id` (FK cascade → `offres_foncieres`), `parcelle_id` (FK restrict),
  `surface_souhaitee_m2` decimal(14,2) nullable, timestamps,
  unique `offre_parcelle_uq` (`offre_fonciere_id`, `parcelle_id`).

### Livré
1. Pivot N⇄N + relation Eloquent `OffreFonciere::parcelles()`
2. Formulaire offre : parcelles du dossier uniquement ; priorité détention courante
   du destinataire ; signal (non bloquant) autre proprio / détention close
3. Surface souhaitée par parcelle (vide = totalité) ; > cadastrale signalée, acceptée
4. Somme vs `surface_reference_m2` : écart affiché + report d’un clic, jamais auto
5. Liste offres : nb parcelles + surface totale souhaitée
6. Indicateur : surfaces souhaitée → promise → acquise (visibles lecture) ;
   montants toujours soumis à `foncier.prix`
7. Transaction store/update ; ACL héritée dossier ; pas de dépôt document

### Hors périmètre
Documents attachés / SharePoint dossier foncier (Q36) — `document_url` inchangé.

## DÉPLOIEMENT / TEST

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

## LEÇON

Les trois périmètres (souhaité / promis / acquis) sont volontairement indépendants —
les coupler ferait disparaître l’écart, qui est précisément l’information de pilotage
recherchée.
