---
suivi: 1084
date: 2026-07-30
sujet: Module Foncier — référentiel communes/EPCI vers administration
chantier: module-foncier
type: feature
statut: poussé
hash: 9d153e97
fichiers:
  - app/Http/Controllers/Admin/ReferentielCommunesController.php
  - app/Http/Controllers/Admin/AdminController.php
  - app/Http/Controllers/Foncier/FoncierController.php
  - routes/web.php
  - resources/js/Layouts/AppShell.vue
  - resources/js/Pages/Admin/Index.vue
  - resources/js/Pages/Admin/ReferentielCommunes.vue
  - resources/js/Pages/Foncier/Referentiel.vue (supprimé)
  - tests/Feature/Admin/ReferentielCommunesAdminTest.php
  - tests/Feature/Foncier/FoncierSousMenuNavigationTest.php
  - tests/Feature/Foncier/FoncierSousMenuAppShellSourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1084_referentiel_communes_vers_admin.md
  - public/build/
---

## PROMPT ENVOYÉ

SUIVI #1084 — déplacement du référentiel communes/EPCI vers l’administration
(prérequis #1081). Routes admin + redirections permanentes, entrée menu admin
sans condition module foncier, retrait sous-menu Foncier, permission
`foncier.referentiels` inchangée, import web inchangé.

## AUDIT MENU ADMIN (avant modification)

### Pattern constaté
Pas de dropdown « Administration » dans `AppShell.vue` : l’icône engrenage
mène à `/admin` (`admin.index`). Les entrées (enseignes, etc.) sont des
**cartes / liens** dans `resources/js/Pages/Admin/Index.vue`, pilotées par
`tabs.*` renvoyés par `AdminController::resolveAdminTabs()` (ex. `enseignes`
← `userCan('admin.enseignes.lecture')`).

### Emplacement Enseignes
- Grille d’accueil Admin (~cartes header) : carte Enseignes si `tabs.enseignes`
- Onglet Utilisateurs : bandeau « Consulter les enseignes »

### Décision #1084
Réutiliser **exactement** ce pattern : flag `tabs.referentiel_communes` + carte
à côté d’Enseignes + bandeau dans l’onglet Utilisateurs. Aucune seconde mécanique
dans AppShell pour l’admin.

## Routes retenues

| URL | Nom de route | Méthode |
|-----|--------------|---------|
| `/admin/referentiel-communes` | `admin.referentiel-communes.index` | GET |
| `/admin/referentiel-communes/import` | `admin.referentiel-communes.import` | POST |
| `/foncier/referentiel` | `foncier.referentiel` (legacy) | GET → 301 |
| `/foncier/referentiel/import` | `foncier.referentiel.import` (legacy) | POST → 308 |

Alignement : `admin.enseignes.*` → `admin.referentiel-communes.*`.

## Navigation (après)

| Libellé | Route | Permission | Module foncier | Emplacement |
|---------|-------|------------|----------------|-------------|
| Référentiel communes / EPCI | admin.referentiel-communes.index | foncier.referentiels | **non** (retiré) | Menu admin (cartes Index) |
| Secteurs | foncier.secteurs.index | foncier.secteurs | oui | Sous-menu Foncier / Admin |
| Alertes | foncier.alertes.index | foncier.gestion | oui | Sous-menu Foncier / Admin |
| Référentiel (Foncier) | — | — | — | **supprimé** |

Groupe Administration Foncier : titre affiché seulement si
`peutVoirFoncierAdminGroupe` (secteurs **ou** alertes).

## Closures routes

Deux closures anonymes dans `routes/web.php` (groupe `auth`) pour les
redirections permanentes legacy `/foncier/referentiel` (301) et
`/foncier/referentiel/import` (308). Pas d’autre closure ajoutée sur le
contrôleur admin.

## Diff AppShell (minimal)

- Retrait `FONCIER_NAV_REFERENTIEL`, `peutVoirFoncierReferentiel`,
  `foncierReferentielActif`
- `peutVoirFoncierAdminGroupe` = secteurs \|\| alertes uniquement
- Retrait du `<Link>` « Référentiel » dans le groupe Administration

## Non-régression

Recherches communes (#1079) / EPCI (#1082), CommuneSelect, Secteurs, ACL,
alertes, table `communes`, `CommunesImportService` : inchangés. Import reste
route WEB (axios POST département par département).

## Bundles

app=`assets/app-B8kX7hpz.js` · Admin Index=`assets/Index-CnZcrrQT.js` · ReferentielCommunes=`assets/ReferentielCommunes-B8xT5r5l.js`

## DÉPLOIEMENT

`git pull origin main` · `php artisan view:clear` · `php artisan journal:sync`
— pas de migration · `route:clear` utile (routes déplacées).

## LEÇON

Critère de placement d’un écran : **paramétrage administratif rare**
(rafraîchi 1–2×/an, réservé DSI, indépendant de l’activation module) →
**Administration** ; **paramétrage métier courant** (qui prospecte où, types
d’alertes) → **module**. Conditionner l’admin à l’activation du module crée
une dépendance circulaire inutile (préparer le référentiel avant d’ouvrir
le module sur une enseigne).
