---
suivi: 1735
date: 2026-09-28
sujet: Zonage et constructible obligatoires à la création unitaire
chantier: module-foncier
type: feature
statut: poussé
hash:
fichiers:
  - app/Models/Parcelle.php
  - app/Services/Foncier/ParcelleCreationUnitaireService.php
  - app/Http/Controllers/Foncier/ParcelleController.php
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - resources/js/Pages/Foncier/Parcelles/Show.vue
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/UrbanismeObligatoire1735SourceTest.php
  - public/build/manifest.json
  - docs/suivi/SUIVI_1735_urbanisme_obligatoire.md
---

# SUIVI #1735 — urbanisme obligatoire

Zonage PLU et constructible exigés à la création unitaire. L’existant incomplet reste modifiable et s’affiche en rouge. Départ `444ac3e8` (#1734).

## PROMPT ENVOYÉ

Création unitaire : les deux champs, sinon 422. Multiparcelle et import : pas de blocage, parcelles incomplètes en rouge. Un champ déjà saisi ne se vide plus. Pastille « Urbanisme à compléter ». Les parcelles remplacées sont hors signalement.

## FICHES LUES

- **#1633** — le tri et les filtres de la liste passent par `ParcelleProspectionQuery`. Un filtre nouveau se branche là, pas dans le front. Les valeurs de référentiel ne se renomment pas.
- **#1733** — le rouge « Acte à régulariser » est le modèle d’affichage. La pastille compte hors de son propre filtre.
- **#1734** — valorisation cible. Non touchée.

## SYNTHÈSE

Une seule définition : `Parcelle::urbanismeACompleter` et `restreindreUrbanismeACompleter`. Active (`statut_cadastral = active`) et zonage vide ou constructible vide. Une remplacée (`remplacee`) n’est pas signalée.

La création unitaire (`ParcelleCreationUnitaireService`) exige les deux. `rulesCreate` (saisie courte, multiparcelle, import) reste nullable. `updateChamp` refuse seulement de vider un champ déjà rempli.

Constructible conservé : oui, pour_partie, potentiel, a_devenir, jamais. Pas réduit à Oui / Non.

MySQL local a refusé la connexion (`SQLSTATE[HY000] [2002]`). Le nombre de parcelles n’a pas été lu.

Bundles : `Show-BNllQJEL.js` (fiche), `Index-BWe-AgVO.js` (liste), `app-RAeIt1_f.js`.

## DÉPLOIEMENT

git pull origin main
php artisan view:clear
php artisan route:clear
php artisan journal:sync

## LEÇON

Ne pas poser l’obligation dans `rulesCreate` : la multiparcelle et l’import passent par `validateAndPrepare`. L’exigence vit dans `validatePayload` de la création unitaire. Le signalement exclut `statut_cadastral = remplacee` dans la même méthode que le filtre, sinon la pastille et la ligne divergent.
