Files
nav-carte/V2-cadrage/L-prompt-session-2.5-hierarchie.md
2026-04-28 14:00:05 +02:00

4.0 KiB

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