---
suivi: 1090
date: 2026-07-30
sujet: Foncier — conditions suspensives structurées + alertes d'échéance
chantier: module-foncier
type: feature
statut: poussé
hash: 78c4428e
fichiers:
  - database/migrations/2026_07_30_190000_create_types_conditions_suspensives_table.php
  - database/migrations/2026_07_30_190100_create_conditions_suspensives_table.php
  - database/migrations/2026_07_30_190200_seed_cs_alerte_config_and_task_type.php
  - app/Models/TypeConditionSuspensive.php
  - app/Models/ConditionSuspensive.php
  - app/Models/PromesseFonciere.php
  - app/Models/TaskType.php
  - app/Services/Foncier/ConditionSuspensiveService.php
  - app/Http/Controllers/Foncier/ConditionSuspensiveController.php
  - app/Http/Controllers/Foncier/PromesseFonciereController.php
  - app/Http/Controllers/Admin/TypesConditionsSuspensivesController.php
  - app/Http/Controllers/Admin/AdminController.php
  - app/Support/Foncier/Alertes/Types/ConditionSuspensiveEcheanceType.php
  - app/Support/Foncier/Alertes/FoncierAlerteTypeRegistry.php
  - app/Support/Foncier/FoncierReferentiels.php
  - resources/js/Pages/Foncier/Promesses/Show.vue
  - resources/js/Pages/Admin/TypesConditionsSuspensives.vue
  - resources/js/Pages/Admin/Index.vue
  - routes/web.php
  - tests/Feature/Foncier/FoncierConditionsSuspensivesTest.php
  - tests/Feature/Foncier/FoncierConditionsSuspensivesSourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1090_foncier_conditions_suspensives.md
---

## PROMPT ENVOYÉ

SUIVI #1090 — Conditions suspensives structurées + alertes d'échéance
(prérequis #1089 + #1077). Référentiel admin, CRUD fiche promesse, type
d'alerte sur socle #1077, tâche d'arbitrage idempotente.

## SYNTHÈSE

### Livré
1. Tables `types_conditions_suspensives` (seed R2) + `conditions_suspensives`
2. Bloc CS sur fiche promesse (délai, dépassées signalées même si alerte coupée)
3. Admin référentiel types (`foncier.gestion`) — suppression refusée si utilisé
4. Type `condition_suspensive_echeance` : classe + registry + config (moteur intact)
5. TaskType `arbitrage_cs_fonciere` via TaskSyncService (1 tâche / CS)

### Mapping
| Élément | Valeurs |
|---------|---------|
| Statuts CS | a_lever · levee · non_levee · caduque (aucune transition auto) |
| Types seed | pc_purge, financement_obtenu, depollution, purge_delai_recours, dle, preemption_safer, preemption_commune, division_cadastrale, defrichement, autre |
| Paliers | J-30 / J-15 / J-7 / jour (0) — palier `j-N.cs{id}` / `atteint.cs{id}` |

### Destinataires
| Palier | Destinataires | Condition envoi | Test |
|--------|---------------|-----------------|------|
| J-30/15/7/0 | Responsables dossier + GS_DIRECTION_GENERALE + GS_ADMIN_ERP | foncier.lecture + userCanViewRecord au moment de l'envoi | habilitation retirée → 0 alerte ; sans foncier.prix → message sans montant |

## DÉPLOIEMENT / TEST

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

Pas de commande artisan d'évaluation alertes (middleware web #1077).

## LEÇON

Le socle #1077 a tenu : un type ajouté = 1 classe + 1 ligne registry + 1 ligne
`foncier_alerte_configs`. `git diff` sur `FoncierAlerteEvaluationService` et
`DeclencheFoncierAlertes` = vide. Extensibilité tenue sans contourner le moteur.
