---
suivi: 1089
date: 2026-07-30
sujet: Module Foncier — Promesses (brique 1 : objet, parcelles, triptyque de prix)
chantier: module-foncier
type: feature
statut: poussé
hash: 8f17bda1
fichiers:
  - database/migrations/2026_07_30_180000_create_promesses_table.php
  - database/migrations/2026_07_30_180100_create_promesse_parcelle_table.php
  - database/migrations/2026_07_30_180200_add_fk_promesse_to_actes_fonciers.php
  - database/migrations/2026_07_30_180300_add_foncier_deverrouillage_permission.php
  - app/Models/PromesseFonciere.php
  - app/Models/ActeFoncier.php
  - app/Models/DossierFoncier.php
  - app/Services/Foncier/PromesseFonciereService.php
  - app/Services/Foncier/ActeAcquisitionService.php
  - app/Http/Controllers/Foncier/PromesseFonciereController.php
  - app/Http/Controllers/Foncier/DossierFoncierController.php
  - app/Http/Controllers/Foncier/ActeFoncierController.php
  - app/Support/Foncier/FoncierReferentiels.php
  - config/feature_permissions.php
  - routes/web.php
  - resources/js/Pages/Foncier/Promesses/Show.vue
  - resources/js/Pages/Foncier/Dossiers/Show.vue
  - resources/js/Pages/Foncier/ActesFonciers/Show.vue
  - resources/js/Pages/Foncier/ActesFonciers/Create.vue
  - tests/Feature/Foncier/FoncierPromessesBrique1Test.php
  - tests/Feature/Foncier/FoncierPromessesBrique1SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1089_foncier_promesses_brique1.md
  - public/build/
---

## PROMPT ENVOYÉ

SUIVI #1089 — MODULE FONCIER — PROMESSES (brique 1). Prérequis « #1085 » = en réalité
#1092 (`actes_fonciers`). Hors CS (#1090), avenants, dation. EN SÉRIE : Dossiers/Show.vue.

## LEÇON — câblage promesse ⇄ acte après #1092 (« #1085 »)

État réel trouvé **avant** ce lot :

| Élément | État |
|---------|------|
| Table actes | `actes_fonciers` (pas `actes`) |
| Colonne `promesse_id` | `unsignedBigInteger` nullable |
| Index | `actes_fonciers_promesse_idx` |
| FK vers `promesses` | **absente** (commentaire migration : « SANS FK — table arrivera au #1089 ») |

**Leçon** : livrer une colonne FK vers une table **inexistante** force soit (a) une FK différée
(index seul), soit (b) une erreur migrate. Le #1092 a choisi (a) correctement. Ce lot
ajoute la contrainte `actes_fonciers_promesse_fk` **après** création de `promesses`.
Ne jamais annoncer « FK livrée » si seule la colonne est posée — documenter
explicitement « index sans FK » pour le lot suivant.

## SYNTHÈSE

### Décisions
- Classe `PromesseFonciere` / table `promesses` (R3 : `dossier_foncier_id` requis).
- Triptyque prix sans total implicite (R4). Mode forfaitaire / au_m² + clause arpentage (R5).
- Statuts fermés ; **aucune** bascule auto (R6). Verrou serveur + `foncier.deverrouillage`
  (GS_DIRECTION_GENERALE + GS_DSI) avec trace qui/quand/motif (R7).
- Notaire = `notaire_fournisseur_id` → `fournisseurs` (R8). Prix filtrés R9 / ACL dossier #1075.
- Création : 5 champs connus ; instruction sur fiche. Onglet « Promesses » sur Show dossier.
- Indicateur #1078 : colonne promesse renseignée (`prix_numeraire` dernière promesse).
- Rattachement acte → promesse : verrouille + statut `acte` + affichage écart (pas d’alerte).

### Hors périmètre (confirmé)
Conditions suspensives, avenants, lots de dation, échéancier, signature électronique,
effets compta/trésorerie, catégorie fournisseurs.

## CONTRÔLES

Voir synthèse livrable post-push (php -l, ReflectionClass, method_exists authorize,
mapping, visibilité, build hash).

## DÉPLOIEMENT OVH

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