digraph macro_daf { rankdir=TB; fontname="Arial"; node [fontname="Arial", fontsize=10, style=filled, shape=box]; edge [fontname="Arial", fontsize=9]; label="FabNum — Macro-DAF (Dossier d'Architecture Fonctionnel)\n\n"; labelloc=t; fontsize=16; compound=true; // F1. Modéliser subgraph cluster_F1 { label="F1. MODÉLISER LA CHAÎNE DE VALEUR"; style=filled; color="#E3F2FD"; fontsize=12; fontcolor="#1565C0"; F1_1 [label="F1.1\nValider les niveaux\nde décomposition", fillcolor="#BBDEFB"]; F1_2 [label="F1.2\nDéfinir les intitulés\ngénériques", fillcolor="#BBDEFB"]; F1_3 [label="F1.3\nDéfinir les critères\nd'arrêt (profondeur)", fillcolor="#BBDEFB"]; F1_4 [label="F1.4\nGérer chaînes\nessentielles / connexes", fillcolor="#BBDEFB"]; F1_5 [label="F1.5\nGérer les matières\ncomposées (NMC...)", fillcolor="#BBDEFB"]; F1_1 -> F1_2 -> F1_3 -> F1_4 -> F1_5; acteur_F1 [label="Acteur : Admin", shape=ellipse, fillcolor="#E3F2FD", fontsize=9]; } // F2. Structurer et qualifier subgraph cluster_F2 { label="F2. STRUCTURER ET QUALIFIER LES DONNÉES"; style=filled; color="#E8F5E9"; fontsize=12; fontcolor="#2E7D32"; F2_1 [label="F2.1\nSpécifier données\n(essentielles / info)", fillcolor="#C8E6C9"]; F2_2 [label="F2.2\nDéfinir périmètre\nmesuré", fillcolor="#C8E6C9"]; F2_3 [label="F2.3\nIdentifier et catégoriser\nles sources", fillcolor="#C8E6C9"]; F2_4 [label="F2.4\nAttribuer tiers\nde confiance\n(par domaine)", fillcolor="#C8E6C9"]; F2_5 [label="F2.5\nQualifier données\n(filtres qualité)", fillcolor="#C8E6C9"]; F2_6 [label="F2.6\nArbitrer divergences\n(tier 1 par défaut,\nconvergence → alerte)", fillcolor="#C8E6C9"]; F2_7 [label="F2.7\nCalculer indice\nde fiabilité", fillcolor="#C8E6C9"]; F2_1 -> F2_2 -> F2_3 -> F2_4 -> F2_5 -> F2_6 -> F2_7; acteur_F2 [label="Acteur : Admin", shape=ellipse, fillcolor="#E8F5E9", fontsize=9]; } // F3. Surveiller et maintenir subgraph cluster_F3 { label="F3. SURVEILLER ET MAINTENIR (cycle structurel — trimestriel)"; style=filled; color="#FFF3E0"; fontsize=12; fontcolor="#E65100"; F3_1 [label="F3.1\nVeiller sur\nles sources\n(huginn)", fillcolor="#FFE0B2"]; F3_2 [label="F3.2\nDétecter variations\nanormales (alertes)", fillcolor="#FFE0B2"]; F3_3 [label="F3.3\nContrôler\ncitations\n(verify-citations)", fillcolor="#FFE0B2"]; F3_4 [label="F3.4\nHistoriser données\net indices", fillcolor="#FFE0B2"]; F3_5 [label="F3.5\nAuditer exhaustivité\ndes matières premières", fillcolor="#FFE0B2"]; F3_1 -> F3_2; F3_3 -> F3_4; acteur_F3 [label="Acteurs : Admin (gouv.)\nServices internes (auto.)", shape=ellipse, fillcolor="#FFF3E0", fontsize=9]; } // F4. Calculer les indices subgraph cluster_F4 { label="F4. CALCULER LES INDICES DE CRITICITÉ"; style=filled; color="#FCE4EC"; fontsize=12; fontcolor="#C62828"; F4_1 [label="F4.1\nCalculer IHH, ICS\nIVC, ISG (+ futurs)\nstructurels et situationnels", fillcolor="#F8BBD0"]; F4_2 [label="F4.2\nPré-calculer à\nchaque MAJ graphe", fillcolor="#F8BBD0"]; F4_3 [label="F4.3\nMéta-indices\ndynamiques\n(sur sélection)", fillcolor="#F8BBD0"]; F4_4 [label="F4.4\nRétro-analyser\n(backtesting)", fillcolor="#F8BBD0"]; F4_5 [label="F4.5\nPropager les impacts\net projeter\ntemporellement", fillcolor="#F8BBD0"]; F4_1 -> F4_2; F4_3 -> F4_4; acteur_F4 [label="Acteur : Services internes", shape=ellipse, fillcolor="#FCE4EC", fontsize=9]; } // F5. Produire les fiches subgraph cluster_F5 { label="F5. PRODUIRE LES FICHES"; style=filled; color="#F3E5F5"; fontsize=12; fontcolor="#6A1B9A"; F5_1 [label="F5.1\nGénérer depuis\ndonnées via templates", fillcolor="#E1BEE7"]; F5_2 [label="F5.2\nAdapter par niveau\n(matière première,\ncomposant, composé...)", fillcolor="#E1BEE7"]; F5_3 [label="F5.3\nAdapter par usage\n(expertise, synthèse,\nAPI/JSON)", fillcolor="#E1BEE7"]; F5_1 -> F5_2 -> F5_3; acteur_F5 [label="Acteur : Services internes", shape=ellipse, fillcolor="#F3E5F5", fontsize=9]; } // F6. Exposer et servir subgraph cluster_F6 { label="F6. EXPOSER ET SERVIR"; style=filled; color="#E0F2F1"; fontsize=12; fontcolor="#00695C"; F6_1 [label="F6.1\nRequêtage graphe\n(expert / simplifié)", fillcolor="#B2DFDB"]; F6_2 [label="F6.2\nConsultation\nfiches", fillcolor="#B2DFDB"]; F6_3 [label="F6.3\nAnalyse vulnérabilité\net scénarios", fillcolor="#B2DFDB"]; F6_4 [label="F6.4\nExport\n(PDF, JSON, DOT)", fillcolor="#B2DFDB"]; F6_5 [label="F6.5\nContextualisation\nclient", fillcolor="#B2DFDB"]; F6_6 [label="F6.6\nIntégration\nécosystème 360°", fillcolor="#B2DFDB"]; F6_7 [label="F6.7\nScénarios multi-impacts\n(combinatoire)", fillcolor="#B2DFDB"]; acteur_F6 [label="Acteurs : Expert, Client\nCOMEX, Métiers, DSI", shape=ellipse, fillcolor="#E0F2F1", fontsize=9]; } // F7. Capter et traduire les événements subgraph cluster_F7 { label="F7. CAPTER ET TRADUIRE LES ÉVÉNEMENTS (bus d'impact)"; style=filled; color="#FBE9E7"; fontsize=12; fontcolor="#BF360C"; F7_1 [label="F7.1\nRecevoir événements\n(veille 360°,\nsignaux faibles)", fillcolor="#FFCCBC"]; F7_2 [label="F7.2\nTraduire en impacts\nchiffrés (IA)", fillcolor="#FFCCBC"]; F7_3 [label="F7.3\nValidation expert\navant injection", fillcolor="#FFCCBC"]; F7_4 [label="F7.4\nMaintenir la mémoire\nsituationnelle\n(accumule, archive)", fillcolor="#FFCCBC"]; F7_5 [label="F7.5\nMettre à jour\nle graphe situationnel", fillcolor="#FFCCBC"]; F7_1 -> F7_2 -> F7_3 -> F7_4 -> F7_5; acteur_F7 [label="Acteurs : Veille 360° (input)\nIA (traduction)\nExpert (validation)", shape=ellipse, fillcolor="#FBE9E7", fontsize=9]; } // F8. Sécuriser et contrôler (transversal) subgraph cluster_F8 { label="F8. SÉCURISER ET CONTRÔLER (transversal)"; style=filled; color="#ECEFF1"; fontsize=12; fontcolor="#37474F"; F8_1 [label="F8.1 Auth\n(user / API key)", fillcolor="#CFD8DC"]; F8_2 [label="F8.2 Rôles\n(admin/expert/service)", fillcolor="#CFD8DC"]; F8_3 [label="F8.3 Profils\nvisibilité", fillcolor="#CFD8DC"]; F8_4 [label="F8.4 Rate limiting\n+ Monitoring", fillcolor="#CFD8DC"]; F8_1 -> F8_2 -> F8_3; acteur_F8 [label="Acteurs : Admin (config)\nSystème (exécution)", shape=ellipse, fillcolor="#ECEFF1", fontsize=9]; } // Flux principal F1_5 -> F2_1 [lhead=cluster_F2, ltail=cluster_F1, penwidth=2, color="#333333"]; F2_7 -> F3_1 [lhead=cluster_F3, ltail=cluster_F2, penwidth=2, color="#333333"]; F3_4 -> F4_1 [lhead=cluster_F4, ltail=cluster_F3, penwidth=2, color="#333333"]; F4_2 -> F5_1 [lhead=cluster_F5, ltail=cluster_F4, penwidth=2, color="#333333"]; F5_3 -> F6_1 [lhead=cluster_F6, ltail=cluster_F5, penwidth=2, color="#333333"]; // F3 en continu F3_2 -> F3_1 [style=dashed, color="#E65100", label="boucle\ncontinue"]; // F7 alimente F4 (impacts → calcul) F7_5 -> F4_5 [lhead=cluster_F4, ltail=cluster_F7, penwidth=2, color="#BF360C", label="impacts\nchiffrés"]; // F7 boucle situationnelle F7_4 -> F7_1 [style=dashed, color="#BF360C", label="mise à jour\ncontinue"]; // F8 transversal F8_3 -> F5_1 [style=dotted, color="#37474F", lhead=cluster_F5, label="filtre"]; F8_3 -> F6_1 [style=dotted, color="#37474F", lhead=cluster_F6, label="filtre"]; }