# L — Prompt Session 2.5 : Hiérarchie racine / antennes (CNOA, CAUE, syndicats, etc.) > **Session dédiée — à lancer APRÈS S2 (carte + fiche + contribuer) et AVANT S3 (worker IA + déploiement).** > Modèle conseillé : **Opus pilote** + délégation Sonnet (modif schéma + UI + filtrage non-trivial). > Durée estimée : 3-4h. ## Mission Introduire dans NAV V2 la notion de **fiche racine** (tête de réseau national) avec **antennes** dépendantes (régionales / départementales / locales). ### Cas métier couverts - **CNOA** (Conseil National de l'Ordre des Architectes) ↔ 13 CROA régionaux - **Réseau CAUE** (national) ↔ ~95 CAUE départementaux - **Syndicats nationaux** (UNSFA, CNAJEP…) ↔ antennes locales - Patrons identiques pour autres réseaux à venir ### Pourquoi Sans hiérarchie : - Carte FR désaturée (100+ pins CAUE qui se chevauchent) - Filtre "Local" ne montre pas la racine → utilisateur perd le contexte - Pas de breadcrumb pour naviguer racine ↔ antenne - Soumissions redondantes (chaque antenne crée fiche déconnectée) ## Spec ### Schéma NocoDB (ajout 2 colonnes table `orgas`) ``` parent_id FK nullable → orgas.id (NULL pour racines et fiches indépendantes) is_root bool (true si tête de réseau, sinon false) ``` Migration : script Python ou via UI NocoDB. Mettre à jour les ~96 fiches seed pour rattacher les CROA à CNOA, etc. (requiert mapping manuel, ~30 min). ### UI **Fiche racine** (ex : CNOA) - Pin carte : `--nav-accent` (safran) — déjà cas "prioritaire" - Sur fiche détail : bandeau "Réseau de N antennes" + carte miniature des antennes + liste cliquable - Apparaît dans filtre `échelle=National` **Fiche antenne** (ex : CROA Île-de-France) - Pin carte : `--nav-primary` standard - Sur fiche détail : breadcrumb en haut "← CNOA (racine du réseau)" - Apparaît dans filtre `échelle=Régional` ou `Local` **Filtrage** - Filtre `échelle=Local` : affiche antennes locales SANS masquer les racines (toujours pinables si onglet National actif) - Cluster carte absorbe la désaturation quand 13+ enfants visibles dans un département/région **Soumission** - Formulaire `/contribuer` : ajouter champ optionnel "Cette organisation fait-elle partie d'un réseau ?" → autocomplete sur racines existantes - Si racine non trouvée : créer en pending sans `parent_id`, modérateur lie manuellement après ## Livrables - [ ] Migration schéma NocoDB (`parent_id`, `is_root`) - [ ] Mapping seed : rattacher CROA à CNOA, autres réseaux identifiés - [ ] Composants : - `FicheRacineHeader.vue` — bandeau réseau + miniature carte - `BreadcrumbReseau.vue` — "← Racine" - `AutocompleteRacine.vue` — pour formulaire contribuer - [ ] Logique filtrage hiérarchique (composable `useHierarchicalFilter.ts`) - [ ] Adaptation `NavMap.vue` : pin racine vs antenne distincts - [ ] Adaptation `FicheDetail.vue` : afficher bandeau ou breadcrumb selon `is_root` - [ ] Adaptation `pages/contribuer.vue` : champ réseau parent - [ ] Tests manuels : naviguer CNOA → CROA-IDF → retour CNOA, filtre échelle cohérent ## Règles - Accents français - Palette respectée - Mobile-first - Migration backward-compat : fiches sans `parent_id` continuent à fonctionner comme avant - Pas de touche au worker IA / chatbot (Session 3) ## Délégation (si Opus pilote) | Sous-agent | Tâche | Modèle | |------------|-------|--------| | Sonnet 1 | Migration schéma + mapping seed CROA/CAUE | Sonnet | | Sonnet 2 | Composants UI hiérarchie + adaptation map/fiche | Sonnet | | Sonnet 3 | Composable filtrage + adaptation formulaire | Sonnet | ## Critère de fin - Carte affiche CNOA (safran) + 13 CROA (bleu) - Click CROA → breadcrumb vers CNOA - Click CNOA → liste 13 CROA cliquables - Filtre `Local` n'efface pas CNOA si onglet National actif - Soumission de nouvelle antenne CAUE → autocomplete trouve "Réseau CAUE" - Aucune régression sur les fiches sans `parent_id` ## Hors scope (pour Session 3) - Worker IA enrichissement automatique - Chatbot - Bandeau collaboration - Déploiement VPS prod - SEO/GEO