---
suivi: 1828
date: 2026-10-08
sujet: Alertes échéance et préavis d’occupation
chantier: foncier
type: correctif
statut: poussé
hash: 82c9d0860
fichiers:
  - app/Models/ParcelleOccupation.php
  - app/Support/Foncier/Alertes/OccupationAlerteRegles.php
  - app/Support/Foncier/Alertes/OccupationAlerteDestinataires.php
  - app/Support/Foncier/Alertes/Types/ParcelleOccupationEcheanceType.php
  - app/Support/Foncier/Alertes/Types/ParcelleOccupationPreavisType.php
  - app/Console/Commands/FoncierAlertesOccupationPurgerCommand.php
  - tests/Unit/OccupationAlertes1828Test.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
---

# SUIVI #1828 — alertes d’occupation

## PROMPT ENVOYÉ

Correctif des alertes « Échéance de bail » et « Préavis occupation » après le diagnostic #1824. Destinataires, butoir du préavis, bail échu, pas de rattrapage trompeur, libellés sans clé interne, commande d’aperçu puis suppression.

## Fiches lues

- #1824 : les alertes partent du middleware web, pas d’un cron. Le préavis utilisait date_fin_bail, affichée « Date de signature » depuis #1446. Les groupes DG, GEMME PDG et admin ERP étaient ajoutés à chaque envoi. La clé `atteint.occN` était dans le message.
- #1119 LEÇON : le préavis affiché sur la fiche reste date de signature moins les mois. Cette méthode n’est pas réutilisée pour l’alerte.
- #1446 LEÇON : l’échéance moins deux mois alimente aussi la tâche. Cette tâche n’est pas modifiée.
- #1077 : le moteur et le verrou quotidien ne sont pas modifiés. peutRecevoir reste inchangé.

## SYNTHÈSE

Seuls `parcelle_occupation_echeance` et `parcelle_occupation_preavis` changent.

Types non touchés : `dossier_veille_revue`, `dossier_sans_echange`, `dossier_etape_echeance`, `offre_expiration`, `condition_suspensive_echeance`, `promesse_expiration`, `promesse_parcelle_coherence`.

Destinataires, union : responsable de la parcelle, responsables des dossiers qui contiennent la parcelle, créateur, bénéficiaires du partage de travail « parcelles ». Plus d’ajout des groupes direction, GEMME PDG, admin ERP. Liste vide : log info, aucune alerte.

Préavis : butoir = date d’échéance − mois. Vide ou 0 : rien. `dateButoirPreavis()` (date de signature − mois) reste pour l’affichage fiche, `ParcelleOccupationController` (`date_butoir_preavis`). `dateButoirAlerteEcheance()` reste pour la tâche, `ParcelleOccupationEcheanceTacheService`.

Échéance passée : une alerte « Bail échu », pas de préavis ni de « deux mois avant ». Libérée : rien.

Pas de rattrapage des paliers manqués. La clé interne peut encore contenir `occ` et un numéro. Le titre et le message ne les montrent pas.

Commande `foncier:alertes-occupation-purger`. Sans option : aperçu. Avec `--appliquer` : supprime en transaction les cloches foncier des deux types dont le message contient « (palier », et toutes les émissions des deux types (pour que le passage suivant reparte vers les bons destinataires). Idempotente.

`DeclencheFoncierAlertes` et le verrou `foncier_alerte_runs` ne sont pas modifiés.

### Mapping

| Cas | Condition | Titre | Message | Destinataires |
| Deux mois avant | Échéance aujourd’hui ou plus tard, et aujourd’hui ≥ échéance − 2 mois | Échéance de bail — référence | Deux mois avant l’échéance du bail (échéance le jj/mm/aaaa). | Responsable parcelle, responsables dossier, créateur, bénéficiaires du partage parcelles |
| Préavis J−30, J−15, J−7 | Échéance à venir, préavis > 0, butoir dans exactement N jours | Préavis occupation — référence | Préavis : il reste N jours avant le début du préavis (début le jj/mm/aaaa). | Idem |
| Jour du préavis | Butoir = aujourd’hui | Préavis occupation — référence | Début du préavis aujourd’hui (échéance le jj/mm/aaaa). | Idem |
| Préavis déjà entamé | Butoir dépassé de plus de 7 jours, échéance encore à venir | Préavis déjà entamé — référence | Préavis déjà entamé depuis le jj/mm/aaaa (échéance le jj/mm/aaaa). | Idem |
| Bail échu | Échéance avant aujourd’hui, occupation non libérée | Bail échu — référence | Bail échu le jj/mm/aaaa — occupation non marquée libérée. | Idem |
| Silence | Préavis vide ou 0, ou occupation libérée, ou aucun destinataire | — | — | Aucune alerte |

Le message complet ajoute la parcelle, l’occupant, le type d’occupation, l’échéance et le préavis en mois.

## DÉPLOIEMENT-TEST

```
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
php artisan foncier:alertes-occupation-purger
php artisan foncier:alertes-occupation-purger --appliquer
```

Pas de migration. Pas de route:clear. La seconde commande supprime. La lancer après lecture de l’aperçu.

## LEÇON

Le préavis d’alerte suit la date d’échéance, pas la date de signature. Ne pas réajouter les groupes direction à ces deux types. Ne pas réécrire `atteint` ou `occ` dans le texte lu par l’utilisateur. La commande sans option ne doit jamais écrire.
