---
suivi: 1446
date: 2026-09-04
sujet: Parcelle — fusion état/type foncier, bornage, bâti, échéance
chantier: foncier / parcelles
type: feature
statut: poussé
hash: ad743a5c
fichiers:
  - database/migrations/2026_09_04_144600_add_parcelle_champs_bornage_bati_echeance.php
  - app/Support/Foncier/FoncierReferentiels.php
  - app/Support/Foncier/ParcelleEtatAvancement.php
  - app/Models/Parcelle.php
  - app/Models/ParcelleBati.php
  - app/Models/ParcelleOccupation.php
  - app/Services/Foncier/ParcelleCreationService.php
  - app/Services/Foncier/FieldAuditService.php
  - app/Services/Foncier/ParcelleOccupationEcheanceTacheService.php
  - app/Support/Foncier/Alertes/Types/ParcelleOccupationEcheanceType.php
  - app/Support/Foncier/Alertes/FoncierAlerteTypeRegistry.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Http/Controllers/Foncier/ParcelleBatiController.php
  - app/Http/Controllers/Foncier/ParcelleOccupationController.php
  - resources/js/Pages/Foncier/Parcelles/Show.vue
  - resources/js/Pages/Foncier/Parcelles/Form.vue
  - tests/Unit/Parcelle1446SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1446_parcelle_champs_et_echeance.md
---

# SUIVI #1446 — Schéma et champs fiche parcelle

## PROMPT ENVOYÉ

Fusion État + Type foncier (13 valeurs, sans « Non renseigné », avec Autre).
Bornage + date, risque feu, bâti présent / surface / année, date d’échéance
d’occupation avec alerte et tâche deux mois avant. Pas de dépôt, pas d’onglets,
pas de filiation, pas de charges/historique (#1447).

## FICHES LUES

- `#1119` LEÇON — alerte préavis via `DeclencheFoncierAlertes` (middleware web
  `terminate`, pas crontab). Réutiliser le registry, ne pas en créer un second.
- `#1242` — `type_foncier` colonne VARCHAR(32) nullable ; bâtis multiples
  (`parcelle_batis`). Surface/année **par bâti** ; bascule « Bâti présent » sur
  la parcelle.
- `#1225` / `#1213` — axe `etat_foncier` ; les anciennes valeurs de type sont
  hors axe pour ne pas bloquer `sous_compromis`.
- `#1442` LEÇON — ne pas réassigner `$groups` dans `DossierFoncierController::index`
  (`$groupesM365` conservé, contrôleur non modifié ici).
- `#1434` — `GS_GEMME_PDG` via `m365GroupNames()` brut dans le nouveau type d’alerte.
- `#1445` — rebase confirmé sur `be9d130f` (classe Sage dossier, autre écran).

## MESURES

MySQL local refusé (`127.0.0.1:3306`). Aucun `SHOW COLUMNS` ni COUNT production.
Requêtes à lancer par Robin : voir livrable. Aucune copie `type_foncier` →
`etat_foncier` (clause d’arrêt : combinaisons non mesurées). Colonne
`type_foncier` conservée (dette).

Alerte : `DeclencheFoncierAlertes` (bootstrap web, GET authentifié après 8h,
verrou `foncier_alerte_runs`). Type `parcelle_occupation_echeance` inscrit au
registry. Tâche : `TacheSuiviService::creer` à la saisie ; mise à jour directe
si la date change (pas `modifier()`, seul le créateur peut — #1394). Créateur =
utilisateur qui saisit la date ; assigné = lui-même.

## SYNTHÈSE

Migrations additives. Fiche Show : sélecteur État 13 valeurs, Type masqué,
bornage, risque feu (même `type="boolean"` que l’inondable), bâti présent qui
masque le reste, surface/année par bâti, date de signature + échéance.

## DÉPLOIEMENT-TEST

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

Puis les requêtes de répartition état/type (livrable) avant toute UPDATE.

## LEÇON

Fusion de deux champs indépendants : ne jamais copier l’un dans l’autre sans
compter les combinaisons en production. Tâche auto Mes Tâches : ne pas passer
par `TacheSuiviService::modifier` (ACL créateur) ; lier par `tache_suivi_id`.
