digraph architecture_vue4 { rankdir=TB; fontname="Arial"; fontsize=18; label="FabNum — Vue 4 : Architecture complète\nBus d'impact, mémoire situationnelle, IA\n"; labelloc=t; splines=true; nodesep=0.7; ranksep=0.9; node [fontname="Arial", fontsize=10, style="filled,rounded", shape=box, penwidth=1.5]; edge [fontname="Arial", fontsize=9, penwidth=1.2]; // Ligne 1 : utilisateurs (4 colonnes fixes) admin [ label="Administrateur\n\nGère le graphe structurel,\nles sources, les tiers\nde confiance" fillcolor="#FFE082" shape=house ]; expert [ label="Expert\n\nAnalyse les risques,\nqualifie les données,\nvalide les impacts,\nvalide les sources" fillcolor="#A5D6A7" shape=house ]; client [ label="Client\n(COMEX, Métiers, DSI)\n\nConsulte les analyses,\nles fiches, les alertes.\nPeut contextualiser\nses requêtes." fillcolor="#EF9A9A" shape=house ]; ecosysteme [ label="Écosystème\nveille 360°\n\nDétecte les événements,\npropose des sources,\nalimente le bus d'impact" fillcolor="#CE93D8" shape=house ]; { rank=same; admin; expert; client; ecosysteme; } // Ligne 2 : API + Bus d'impact api [ label="API\n\nPoint d'accès unique\nAuthentification, rôles,\nprofils de visibilité\n\nSert le graphe situationnel\n(structurel accessible aussi)" fillcolor="#B39DDB" penwidth=2 ]; bus [ label="Bus d'impact\n\nMémoire situationnelle\nTraduction événements → impacts\nAccumule, met à jour, archive\nMise à jour en continu\n(rythme décisionnel)" fillcolor="#FF8A65" penwidth=2.5 style="filled,rounded,bold" ]; { rank=same; api; bus; } // Ligne 3 : Moteur + IA + veille moteur [ label="Moteur FabNum\n\nCalcul des indices\n(structurels et situationnels)\nRequêtage, chemins critiques\nGénération fiches (templates)\nArbitrage des sources\nProjection temporelle" fillcolor="#90CAF9" penwidth=2 ]; ia_bus [ label="IA\n\nAnalyse les événements,\npropose les impacts\nchiffrés" fillcolor="#FFCC80" ]; veille [ label="Veille sources\n\nSurveillance des sources\n(huginn)\nVérification des citations\nAlertes (variations)" fillcolor="#FFAB91" penwidth=1.5 ]; { rank=same; veille; moteur; ia_bus; } // Ligne 4 : BDD scindée + sources subgraph cluster_bdd { label="Base de données (graphe)"; style=filled; color="#E0F2F1"; fontsize=10; fontcolor="#00695C"; bdd_situa [ label="Graphe situationnel\n\nImpacts actifs\nCapacités réelles\nIndices situationnels\nHistorique des situations" fillcolor="#4DB6AC" ]; bdd_struct [ label="Graphe structurel\n\nCapacités nominales\nActeurs, pays, parts de marché\nIndices structurels\nMise à jour trimestrielle" fillcolor="#80CBC4" ]; } sources [ label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..." fillcolor="#E0E0E0" shape=cylinder ]; // Relations utilisateurs expert -> api [label="consulte\nanalyse", color="#2E7D32"]; expert -> bus [label="valide\nles impacts", color="#E65100", style=bold]; expert -> sources [label="valide et\nalimente", color="#2E7D32", style=bold]; client -> api [label="consulte\nles résultats", color="#C62828"]; admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2]; // Écosystème 360° ecosysteme -> bus [label="injecte\ndes événements", color="#6A1B9A", penwidth=2]; ecosysteme -> expert [label="propose\ndes sources", color="#6A1B9A", style=dashed, penwidth=2]; // Bus ↔ IA bus -> ia_bus [label="événement\nà analyser", color="#E65100", dir=both]; // Bus → Moteur + BDD situationnel bus -> moteur [label="impacts\nchiffrés", color="#BF360C", penwidth=2]; bus -> bdd_situa [label="met à jour\nles impacts", color="#BF360C", style=dashed]; // API ↔ Moteur api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both]; // Moteur ↔ BDD moteur -> bdd_struct [label="lit/écrit\nstructurel", color="#00695C", dir=both]; moteur -> bdd_situa [label="lit/écrit\nsituationnel", color="#00695C", dir=both]; // Veille sources -> veille [label="surveille\nles MAJ", color="#BF360C"]; veille -> bdd_struct [label="met à jour\nles sources", color="#E65100", style=dashed]; sources -> bdd_struct [label="alimente\nles données", color="#546E7A", style=dashed]; }