docs(evolution): réorganisation docs/FabNum v2/ + points 13-14 + vues progressives
- Déplacement de toute la documentation v2 dans docs/FabNum v2/ - Ajout points 13 (bus d'impact, mémoire situationnelle, IA) et 14 (combinatoire) - Architecture structurel/situationnel, IVC dynamique inter-sectoriel - 4 vues architecturales progressives (vue1→vue4) pour présentation - Génération PNG de tous les diagrammes - .gitignore : docs/**/*.dot au lieu de docs/*.dot Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2
.gitignore
vendored
@ -7,7 +7,7 @@ __pycache__/
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.dot
|
||||
!docs/*.dot
|
||||
!docs/**/*.dot
|
||||
prompt.md
|
||||
.gitignore
|
||||
|
||||
|
||||
@ -5,6 +5,10 @@ Document de brainstorming — capture les réflexions et décisions prises lors
|
||||
**Date** : 2026-04-02
|
||||
**Statut** : En cours de réflexion (quoi/pourquoi, pas encore le comment)
|
||||
|
||||
## Architecture globale
|
||||
|
||||
{ width=100% }
|
||||
|
||||
## Contraintes transversales
|
||||
|
||||
- **Budget : zéro en phase de démarrage** — tout est auto-hébergé et auto-financé. Briques technologiques open source et gratuites. Si le projet trouve son marché, cette contrainte sera réévaluée (ex : Neo4j Enterprise si justifié).
|
||||
@ -254,6 +258,10 @@ La validation doit être **argumentée**, par au moins une des approches suivant
|
||||
- Quels intitulés génériques pour les niveaux ? (à définir après revue de littérature)
|
||||
- Le nombre de niveaux doit-il être fixe ou configurable par chaîne ?
|
||||
|
||||
### Modèle de niveaux — Cas possibles
|
||||
|
||||
{ width=100% }
|
||||
|
||||
---
|
||||
|
||||
## Point 8 — Services, sécurisation et profils de visibilité
|
||||
@ -441,6 +449,114 @@ Intégrer les **niveaux de stock** comme donnée du graphe pour permettre des **
|
||||
|
||||
---
|
||||
|
||||
## Point 13 — Bus d'impact (traducteur d'événements externes)
|
||||
|
||||
### Quoi
|
||||
|
||||
Un **bus d'impact** qui maintient en continu un état situationnel du graphe en traduisant les événements du monde extérieur en impacts chiffrés. Par analogie avec un bus applicatif, il possède une double connaissance :
|
||||
|
||||
- **Monde extérieur** — événements géopolitiques, climatiques, économiques, sanitaires, signaux faibles. Sources : veille 360°, actualités, données climatiques, alertes.
|
||||
- **Monde intérieur** — le graphe FabNum, ses nœuds, ses attributs, ses limites (granularité géographique, disponibilité des données).
|
||||
|
||||
Le bus traduit un événement qualitatif ("inondation dans le Yunnan") en impacts quantitatifs sur des nœuds du graphe ("extraction de germanium dans le Yunnan : capacité réduite de 80%").
|
||||
|
||||
**Architecture structurel / situationnel :**
|
||||
|
||||
Le graphe FabNum a deux couches :
|
||||
|
||||
- **Graphe structurel** — la chaîne de valeur telle qu'elle existe : acteurs, pays, capacités nominales, parts de marché, indices. Mis à jour trimestriellement (cycle structurel).
|
||||
- **Graphe situationnel** — le graphe structurel + les impacts en cours. Reflète la **réalité du terrain** à un instant T. Mis à jour en continu au rythme des événements (cycle situationnel).
|
||||
|
||||
Les deux cycles sont **indépendants** :
|
||||
|
||||
- Le cycle structurel (trimestriel) met à jour les données de base : qui opère quoi, où, avec quelle capacité nominale.
|
||||
- Le cycle situationnel (continu, au **rythme décisionnel** — dans l'heure pour un événement majeur si un COMEX doit se réunir) met à jour la réalité : cette mine est inondée, Ormuz est bloqué, les quotas sont en vigueur.
|
||||
|
||||
**Le bus maintient une mémoire situationnelle** — il ne fait pas de traduction en one-shot. Les impacts s'accumulent, évoluent et se résolvent au fil du temps :
|
||||
|
||||
- Un événement arrive → impact ajouté
|
||||
- La situation évolue ("l'inondation se résorbe") → impact mis à jour
|
||||
- L'événement est résolu → impact supprimé ou archivé
|
||||
|
||||
Le graphe situationnel reflète ainsi en permanence la **situation mondiale réelle** et non un scénario ponctuel.
|
||||
|
||||
**Fonctionnement :**
|
||||
|
||||
- La **veille 360°** se connecte au bus et lui injecte des événements.
|
||||
- L'**IA** analyse l'événement, identifie les nœuds concernés et propose des impacts chiffrés (nœud impacté, type d'impact, pourcentage de réduction, durée estimée).
|
||||
- Un **expert** valide ou corrige avant injection. Pas d'injection automatique non contrôlée.
|
||||
- Le **moteur** se connecte au bus et consomme le graphe situationnel. Il n'a pas besoin de comprendre les événements — il travaille sur un graphe avec des capacités réelles.
|
||||
|
||||
**Rôle de l'IA :**
|
||||
|
||||
La traduction événement → impact est un problème de **raisonnement** (comprendre l'événement, identifier les nœuds concernés, estimer la sévérité), pas d'algorithme. Un LLM avec accès au graphe et aux données contextuelles est le bon outil. Le code seul ne peut pas gérer l'infinie variété des événements possibles.
|
||||
|
||||
L'IA supervise aussi l'**évolution** de la situation : elle propose des mises à jour ("l'inondation au Yunnan est terminée, les mines reprennent à 60%"), l'expert valide.
|
||||
|
||||
**Signaux faibles :**
|
||||
|
||||
Le bus peut aussi traiter des signaux faibles (tensions diplomatiques, sécheresse naissante, changement de politique commerciale) avec une probabilité et une sévérité potentielle, permettant de construire des scénarios prospectifs.
|
||||
|
||||
**Indices structurels vs situationnels :**
|
||||
|
||||
Les indices se calculent sur les deux couches :
|
||||
|
||||
- **IHH structurel** (capacité nominale) vs **IHH situationnel** (capacité réelle avec impacts) — permet de mesurer la dégradation en cours.
|
||||
- **IVC situationnel** — la pression concurrentielle des autres secteurs dépend de la situation mondiale. Si une crise ralentit l'automobile, sa consommation de cobalt chute et l'IVC effectif pour le numérique diminue. Au démarrage, calcul proportionnel ; à terme, ajustement dynamique basé sur les données de demande sectorielle. Ce point renforce le lien avec le multi-sectoriel (point 9) : l'IVC est le lien entre les secteurs sur les ressources partagées.
|
||||
|
||||
### Pourquoi
|
||||
|
||||
- Aujourd'hui, tester un scénario dans FabNum oblige à pointer manuellement un minerai et en déduire les impacts. Pas de lien avec le monde réel.
|
||||
- Les crises sont rarement mono-causales — elles combinent plusieurs événements simultanés (Ormuz + sécheresse + quotas).
|
||||
- La veille 360° a besoin d'un point d'entrée structuré pour alimenter le moteur.
|
||||
- Sans ce bus, le moteur est aveugle aux événements extérieurs.
|
||||
- Un graphe situationnel maintenu en continu donne aux clients une raison de rester connectés plutôt que de faire des analyses ponctuelles.
|
||||
|
||||
### Décisions prises
|
||||
|
||||
- Le bus d'impact est le **seul point de contact** entre le monde extérieur et le moteur — séparation des responsabilités.
|
||||
- Le bus maintient une **mémoire situationnelle** — les impacts s'accumulent et évoluent, pas de one-shot.
|
||||
- Deux couches de graphe : **structurel** (trimestriel) et **situationnel** (continu, rythme décisionnel).
|
||||
- Les indices se calculent sur les deux couches (structurel vs situationnel).
|
||||
- L'IA est un composant clé du bus (traduction et suivi), avec validation humaine obligatoire.
|
||||
- L'IVC situationnel dépend de la demande inter-sectorielle — proportionnel au démarrage, dynamique à terme.
|
||||
- Point identifié comme horizon — dépend de la granularité géographique (point 11) et des stocks (point 12).
|
||||
|
||||
---
|
||||
|
||||
## Point 14 — Combinatoire multi-impacts et scénarios
|
||||
|
||||
### Quoi
|
||||
|
||||
Le moteur reçoit N impacts simultanés du bus (point 13), les applique sur le graphe et en déduit les conséquences cumulées via la projection temporelle (point 12).
|
||||
|
||||
Ce n'est **pas un composant actif** mais une **propriété du moteur** : s'il est conçu dès le départ pour recevoir des impacts multiples du bus, la combinatoire est native. C'est une contrainte de conception, pas un développement séparé.
|
||||
|
||||
**Concrètement :**
|
||||
|
||||
- Chaque impact du bus coupe ou réduit une ou plusieurs branches du graphe.
|
||||
- Le moteur fait tourner la projection temporelle (point 12) sur le graphe dégradé.
|
||||
- Le résultat montre quels produits finaux sont impactés, dans quel délai, avec quelle sévérité.
|
||||
- Si deux événements coupent deux sources différentes d'un même minerai, l'impact combiné est pire que chaque événement seul — le moteur le calcule naturellement.
|
||||
|
||||
**Scénarios :**
|
||||
|
||||
- Plusieurs scénarios (combinaisons d'événements) peuvent coexister et être comparés.
|
||||
- Les scénarios peuvent être contextualisés au client : "votre SI dépend de ces chaînes, voici votre exposition face à ce scénario".
|
||||
|
||||
### Pourquoi
|
||||
|
||||
- Les crises sont multi-causales — un seul événement isolé ne reflète pas la réalité.
|
||||
- La valeur du moteur est dans la combinaison : montrer que tel produit final résiste à un événement isolé mais pas à la combinaison de deux.
|
||||
- C'est un service à très forte valeur pour les clients (COMEX, DSI).
|
||||
|
||||
### Décisions prises
|
||||
|
||||
- Le point 14 est une **contrainte de conception du moteur**, pas un développement séparé. L'asservissement au bus d'impact doit être prévu dès la conception.
|
||||
- Dépend du point 12 (stocks/projection temporelle) et du point 13 (bus d'impact).
|
||||
|
||||
---
|
||||
|
||||
## Ordre de réalisation logique
|
||||
|
||||
L'ordre des points dans ce document reflète l'ordre de la discussion, pas l'ordre de réalisation. L'analyse des dépendances donne :
|
||||
@ -470,6 +586,9 @@ L'ordre des points dans ce document reflète l'ordre de la discussion, pas l'ord
|
||||
|
||||
- **Point 10** — Ressources transversales (énergie, eau)
|
||||
- **Point 11** — Granularité géographique fine
|
||||
- **Point 12** — Stocks et projection temporelle
|
||||
- **Point 13** — Bus d'impact (traducteur d'événements → impacts chiffrés, IA assistée)
|
||||
- **Point 14** — Combinatoire multi-impacts (contrainte de conception du moteur, pas un développement séparé)
|
||||
- **Point 9** — Multi-sectoriel
|
||||
|
||||
## MVP (jalon interne)
|
||||
@ -483,3 +602,21 @@ L'ordre des points dans ce document reflète l'ordre de la discussion, pas l'ord
|
||||
**Rétro-analyse** : valider les indices sur des crises passées (Spruce Pine, quotas chinois) comme preuve de concept.
|
||||
|
||||
**Tests** : toute logique métier est testée (calculs d'indices, requêtage, arbitrage des sources, import/export). Pas de seuil de couverture arbitraire — on teste ce qui compte.
|
||||
|
||||
\newpage
|
||||
|
||||
## Planification temporelle
|
||||
|
||||
{ width=100% }
|
||||
|
||||
\newpage
|
||||
|
||||
## Diagramme d'Architecture Fonctionnelle (DAF)
|
||||
|
||||
{ height=75% }
|
||||
|
||||
\newpage
|
||||
|
||||
## Diagramme d'Architecture Technique (DAT)
|
||||
|
||||
{ width=100% }
|
||||
BIN
docs/FabNum v2/EVOLUTIONS.pdf
Normal file
166
docs/FabNum v2/architecture-globale.dot
Normal file
@ -0,0 +1,166 @@
|
||||
digraph architecture_fabnum {
|
||||
// Configuration générale
|
||||
rankdir=TB;
|
||||
fontname="Arial";
|
||||
fontsize=18;
|
||||
label="FabNum — Architecture globale\n\n";
|
||||
labelloc=t;
|
||||
splines=true;
|
||||
nodesep=0.7;
|
||||
ranksep=0.9;
|
||||
node [fontname="Arial", fontsize=11, style="filled,rounded", shape=box, penwidth=1.5];
|
||||
edge [fontname="Arial", fontsize=9, penwidth=1.2];
|
||||
|
||||
// ==================== UTILISATEURS ====================
|
||||
|
||||
admin [
|
||||
label="Administrateur\n\nGère le graphe structurel,\nles sources, les tiers\nde confiance, les arbitrages"
|
||||
fillcolor="#FFE082"
|
||||
shape=house
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
expert [
|
||||
label="Expert\n\nAnalyse les risques,\nqualifie les données,\nvalide les impacts"
|
||||
fillcolor="#A5D6A7"
|
||||
shape=house
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
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
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
// ==================== ÉCOSYSTÈME / VEILLE 360° ====================
|
||||
|
||||
ecosysteme [
|
||||
label="Écosystème\nveille 360°\n\nDétecte les événements,\nalimente les sources\net le bus d'impact"
|
||||
fillcolor="#CE93D8"
|
||||
shape=house
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
// ==================== API ====================
|
||||
|
||||
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"
|
||||
fontsize=11
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== BUS D'IMPACT ====================
|
||||
|
||||
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"
|
||||
fontsize=11
|
||||
penwidth=2.5
|
||||
style="filled,rounded,bold"
|
||||
];
|
||||
|
||||
ia_bus [
|
||||
label="IA\n\nAnalyse les événements,\npropose les impacts\nchiffrés"
|
||||
fillcolor="#FFCC80"
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
// ==================== MOTEUR ====================
|
||||
|
||||
moteur [
|
||||
label="Moteur FabNum\n\nCalcul des indices\n(structurels et situationnels)\nRequêtage, chemins critiques\nGénération fiches (templates)\nArbitrage sources\nProjection temporelle"
|
||||
fillcolor="#90CAF9"
|
||||
fontsize=11
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== BASE DE DONNÉES ====================
|
||||
|
||||
subgraph cluster_bdd {
|
||||
label="Base de données (graphe)";
|
||||
style=filled;
|
||||
color="#E0F2F1";
|
||||
fontsize=11;
|
||||
fontcolor="#00695C";
|
||||
|
||||
bdd_struct [
|
||||
label="Graphe structurel\n\nCapacités nominales\nActeurs, pays, parts de marché\nIndices structurels\nMise à jour trimestrielle"
|
||||
fillcolor="#80CBC4"
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
bdd_situa [
|
||||
label="Graphe situationnel\n\nImpacts actifs\nCapacités réelles\nIndices situationnels\nHistorique des situations"
|
||||
fillcolor="#4DB6AC"
|
||||
fontsize=10
|
||||
];
|
||||
}
|
||||
|
||||
// ==================== VEILLE SUR LES SOURCES ====================
|
||||
|
||||
veille [
|
||||
label="Veille sources\n\nSurveillance des sources (huginn)\nVérification des citations\nAlertes (variations)"
|
||||
fillcolor="#FFAB91"
|
||||
fontsize=10
|
||||
penwidth=1.5
|
||||
];
|
||||
|
||||
// ==================== SOURCES ====================
|
||||
|
||||
sources [
|
||||
label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..."
|
||||
fillcolor="#E0E0E0"
|
||||
shape=cylinder
|
||||
fontsize=10
|
||||
];
|
||||
|
||||
// ==================== DISPOSITION ====================
|
||||
|
||||
{ rank=same; admin; expert; client; ecosysteme; }
|
||||
{ rank=same; bus; api; }
|
||||
{ rank=same; ia_bus; moteur; }
|
||||
|
||||
// ==================== RELATIONS ====================
|
||||
|
||||
// Expert → API + validation impacts
|
||||
expert -> api [label="consulte\nanalyse", color="#2E7D32"];
|
||||
expert -> bus [label="valide\nles impacts", color="#E65100", style=bold];
|
||||
|
||||
// Client → API
|
||||
client -> api [label="consulte\nles résultats", color="#C62828"];
|
||||
|
||||
// Écosystème → Bus d'impact + Sources
|
||||
ecosysteme -> bus [label="injecte\ndes événements", color="#6A1B9A", penwidth=2];
|
||||
ecosysteme -> sources [label="alimente\nles sources", color="#6A1B9A", style=dashed];
|
||||
|
||||
// Admin → Moteur (accès direct par scripts)
|
||||
admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2];
|
||||
|
||||
// IA ↔ Bus
|
||||
bus -> ia_bus [label="événement\nà analyser", color="#E65100", dir=both];
|
||||
|
||||
// Bus → Moteur (impacts chiffrés)
|
||||
bus -> moteur [label="impacts\nchiffrés", color="#BF360C", penwidth=2];
|
||||
|
||||
// API ↔ Moteur
|
||||
api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both];
|
||||
|
||||
// Moteur ↔ Base de données
|
||||
moteur -> bdd_struct [label="lit/écrit\nstructurel", color="#00695C", dir=both];
|
||||
moteur -> bdd_situa [label="lit/écrit\nsituationnel", color="#00695C", dir=both];
|
||||
|
||||
// Bus → BDD situationnel
|
||||
bus -> bdd_situa [label="met à jour\nles impacts", color="#BF360C", style=dashed];
|
||||
|
||||
// Veille → Sources
|
||||
sources -> veille [label="surveille\nles MAJ", color="#BF360C"];
|
||||
|
||||
// Veille → BDD structurel
|
||||
veille -> bdd_struct [label="met à jour\nles sources", color="#E65100", style=dashed];
|
||||
|
||||
// Sources → BDD structurel
|
||||
sources -> bdd_struct [label="alimente\nles données", color="#546E7A", style=dashed];
|
||||
}
|
||||
BIN
docs/FabNum v2/architecture-globale.png
Normal file
|
After Width: | Height: | Size: 465 KiB |
73
docs/FabNum v2/architecture-vue1.dot
Normal file
@ -0,0 +1,73 @@
|
||||
digraph architecture_vue1 {
|
||||
rankdir=TB;
|
||||
fontname="Arial";
|
||||
fontsize=18;
|
||||
label="FabNum — Vue 1 : Le moteur\nRequêtage, indices, fiches via API\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,\nles sources, les tiers\nde confiance"
|
||||
fillcolor="#FFE082" shape=house
|
||||
];
|
||||
expert [
|
||||
label="Expert\n\nAnalyse les risques,\nqualifie les données"
|
||||
fillcolor="#A5D6A7" shape=house
|
||||
];
|
||||
client [
|
||||
label="Client\n(COMEX, Métiers, DSI)\n\nConsulte les analyses,\nles fiches, les alertes."
|
||||
fillcolor="#EF9A9A" shape=house
|
||||
];
|
||||
// Placeholder veille 360° (invisible)
|
||||
ph_eco [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; admin; expert; client; ph_eco; }
|
||||
|
||||
// Ligne 2 : API + placeholder bus
|
||||
api [
|
||||
label="API\n\nPoint d'accès unique\nAuthentification, rôles,\nprofils de visibilité"
|
||||
fillcolor="#B39DDB" penwidth=2
|
||||
];
|
||||
// Placeholder bus (invisible)
|
||||
ph_bus [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; api; ph_bus; }
|
||||
|
||||
// Ligne 3 : Moteur + placeholders
|
||||
moteur [
|
||||
label="Moteur FabNum\n\nCalcul des indices\n(IHH, ICS, IVC, ISG)\nRequêtage du graphe\nChemins critiques\nGénération fiches (templates)\nArbitrage des sources"
|
||||
fillcolor="#90CAF9" penwidth=2
|
||||
];
|
||||
// Placeholder IA (invisible)
|
||||
ph_ia [label="" shape=point width=0.01 style=invis];
|
||||
// Placeholder veille (invisible)
|
||||
ph_veille [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; ph_veille; moteur; ph_ia; }
|
||||
|
||||
// Ligne 4 : BDD + sources
|
||||
bdd [
|
||||
label="Base de données\n(graphe)\n\nNœuds, relations, indices\nSources rattachées\nHistorique des données"
|
||||
fillcolor="#80CBC4" penwidth=2
|
||||
];
|
||||
sources [
|
||||
label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..."
|
||||
fillcolor="#E0E0E0" shape=cylinder
|
||||
];
|
||||
{ rank=same; bdd; sources; }
|
||||
|
||||
// Relations
|
||||
expert -> api [label="consulte\nanalyse", color="#2E7D32"];
|
||||
client -> api [label="consulte\nles résultats", color="#C62828"];
|
||||
admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2];
|
||||
api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both];
|
||||
moteur -> bdd [label="lit et écrit\nles données", color="#00695C", dir=both];
|
||||
sources -> bdd [label="alimente\nles données", color="#546E7A", style=dashed];
|
||||
|
||||
// Liens invisibles pour stabiliser la disposition
|
||||
ph_eco -> ph_bus [style=invis];
|
||||
ph_bus -> ph_ia [style=invis];
|
||||
ph_veille -> bdd [style=invis];
|
||||
}
|
||||
BIN
docs/FabNum v2/architecture-vue1.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
77
docs/FabNum v2/architecture-vue2.dot
Normal file
@ -0,0 +1,77 @@
|
||||
digraph architecture_vue2 {
|
||||
rankdir=TB;
|
||||
fontname="Arial";
|
||||
fontsize=18;
|
||||
label="FabNum — Vue 2 : Veille sur les sources et propagation\nSources surveillées, simulation d'impact manuelle\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,\nles sources, les tiers\nde confiance"
|
||||
fillcolor="#FFE082" shape=house
|
||||
];
|
||||
expert [
|
||||
label="Expert\n\nAnalyse les risques,\nqualifie les données,\nsimule des scénarios\nd'impact (propagation),\ncontextualise"
|
||||
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
|
||||
];
|
||||
// Placeholder veille 360° (invisible)
|
||||
ph_eco [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; admin; expert; client; ph_eco; }
|
||||
|
||||
// Ligne 2 : API + placeholder bus
|
||||
api [
|
||||
label="API\n\nPoint d'accès unique\nAuthentification, rôles,\nprofils de visibilité"
|
||||
fillcolor="#B39DDB" penwidth=2
|
||||
];
|
||||
// Placeholder bus (invisible)
|
||||
ph_bus [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; api; ph_bus; }
|
||||
|
||||
// Ligne 3 : Moteur + placeholder IA + veille
|
||||
moteur [
|
||||
label="Moteur FabNum\n\nCalcul des indices\n(IHH, ICS, IVC, ISG)\nRequêtage du graphe\nChemins critiques\nGénération fiches (templates)\nArbitrage des sources\nPropagation d'impact\n(simulation manuelle)"
|
||||
fillcolor="#90CAF9" penwidth=2
|
||||
];
|
||||
// Placeholder IA (invisible)
|
||||
ph_ia [label="" shape=point width=0.01 style=invis];
|
||||
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; ph_ia; }
|
||||
|
||||
// Ligne 4 : BDD + sources
|
||||
bdd [
|
||||
label="Base de données\n(graphe)\n\nNœuds, relations, indices\nSources rattachées\nHistorique des données"
|
||||
fillcolor="#80CBC4" penwidth=2
|
||||
];
|
||||
sources [
|
||||
label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..."
|
||||
fillcolor="#E0E0E0" shape=cylinder
|
||||
];
|
||||
{ rank=same; bdd; sources; }
|
||||
|
||||
// Relations
|
||||
expert -> api [label="consulte, analyse\net simule", color="#2E7D32"];
|
||||
client -> api [label="consulte\nles résultats", color="#C62828"];
|
||||
admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2];
|
||||
api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both];
|
||||
moteur -> bdd [label="lit et écrit\nles données", color="#00695C", dir=both];
|
||||
sources -> veille [label="surveille\nles MAJ", color="#BF360C"];
|
||||
veille -> bdd [label="met à jour\nles sources", color="#E65100", style=dashed];
|
||||
veille -> moteur [label="signale les\nchangements\net vérifie\nles citations", color="#E65100"];
|
||||
sources -> bdd [label="alimente\nles données", color="#546E7A", style=dashed];
|
||||
|
||||
// Liens invisibles pour stabiliser
|
||||
ph_eco -> ph_bus [style=invis];
|
||||
ph_bus -> ph_ia [style=invis];
|
||||
}
|
||||
BIN
docs/FabNum v2/architecture-vue2.png
Normal file
|
After Width: | Height: | Size: 314 KiB |
89
docs/FabNum v2/architecture-vue3.dot
Normal file
@ -0,0 +1,89 @@
|
||||
digraph architecture_vue3 {
|
||||
rankdir=TB;
|
||||
fontname="Arial";
|
||||
fontsize=18;
|
||||
label="FabNum — Vue 3 : Veille stratégique 360°\nLe monde extérieur interagit avec FabNum\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,\nles sources, les tiers\nde confiance"
|
||||
fillcolor="#FFE082" shape=house
|
||||
];
|
||||
expert [
|
||||
label="Expert\n\nAnalyse les risques,\nqualifie les données,\nsimule des scénarios\nd'impact,\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,\nrequête FabNum"
|
||||
fillcolor="#CE93D8" shape=house
|
||||
];
|
||||
{ rank=same; admin; expert; client; ecosysteme; }
|
||||
|
||||
// Ligne 2 : API + placeholder bus
|
||||
api [
|
||||
label="API\n\nPoint d'accès unique\nAuthentification, rôles,\nprofils de visibilité"
|
||||
fillcolor="#B39DDB" penwidth=2
|
||||
];
|
||||
// Placeholder bus (invisible)
|
||||
ph_bus [label="" shape=point width=0.01 style=invis];
|
||||
{ rank=same; api; ph_bus; }
|
||||
|
||||
// Ligne 3 : Moteur + placeholder IA + veille
|
||||
moteur [
|
||||
label="Moteur FabNum\n\nCalcul des indices\n(IHH, ICS, IVC, ISG)\nRequêtage du graphe\nChemins critiques\nGénération fiches (templates)\nArbitrage des sources\nPropagation d'impact"
|
||||
fillcolor="#90CAF9" penwidth=2
|
||||
];
|
||||
// Placeholder IA (invisible)
|
||||
ph_ia [label="" shape=point width=0.01 style=invis];
|
||||
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; ph_ia; }
|
||||
|
||||
// Ligne 4 : BDD + sources
|
||||
bdd [
|
||||
label="Base de données\n(graphe)\n\nNœuds, relations, indices\nSources rattachées\nHistorique des données"
|
||||
fillcolor="#80CBC4" penwidth=2
|
||||
];
|
||||
sources [
|
||||
label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..."
|
||||
fillcolor="#E0E0E0" shape=cylinder
|
||||
];
|
||||
{ rank=same; bdd; sources; }
|
||||
|
||||
// Relations utilisateurs
|
||||
expert -> api [label="consulte, analyse\net simule", color="#2E7D32"];
|
||||
client -> api [label="consulte\nles résultats", color="#C62828"];
|
||||
admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2];
|
||||
|
||||
// Écosystème 360° — deux points d'interaction
|
||||
ecosysteme -> api [label="requête\nanalyses", color="#6A1B9A", penwidth=2];
|
||||
ecosysteme -> expert [label="propose\ndes sources", color="#6A1B9A", style=dashed, penwidth=2];
|
||||
expert -> sources [label="valide et\nalimente", color="#2E7D32", style=bold];
|
||||
|
||||
// API ↔ Moteur
|
||||
api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both];
|
||||
|
||||
// Moteur ↔ BDD
|
||||
moteur -> bdd [label="lit et écrit\nles données", color="#00695C", dir=both];
|
||||
|
||||
// Veille
|
||||
sources -> veille [label="surveille\nles MAJ", color="#BF360C"];
|
||||
veille -> bdd [label="met à jour\nles sources", color="#E65100", style=dashed];
|
||||
veille -> moteur [label="signale les\nchangements\net vérifie\nles citations", color="#E65100"];
|
||||
sources -> bdd [label="alimente\nles données", color="#546E7A", style=dashed];
|
||||
|
||||
// Liens invisibles pour stabiliser
|
||||
ph_bus -> ph_ia [style=invis];
|
||||
}
|
||||
BIN
docs/FabNum v2/architecture-vue3.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
110
docs/FabNum v2/architecture-vue4.dot
Normal file
@ -0,0 +1,110 @@
|
||||
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];
|
||||
}
|
||||
BIN
docs/FabNum v2/architecture-vue4.png
Normal file
|
After Width: | Height: | Size: 474 KiB |
BIN
docs/FabNum v2/macro-daf.png
Normal file
|
After Width: | Height: | Size: 437 KiB |
BIN
docs/FabNum v2/macro-dat.png
Normal file
|
After Width: | Height: | Size: 672 KiB |
|
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 356 KiB |
@ -1,7 +1,7 @@
|
||||
digraph planification_temporelle {
|
||||
rankdir=LR;
|
||||
fontname="Arial";
|
||||
node [fontname="Arial", fontsize=11, style=filled, shape=record];
|
||||
node [fontname="Arial", fontsize=11, style=filled, shape=box];
|
||||
edge [fontname="Arial", fontsize=9];
|
||||
label="FabNum — Planification temporelle\n\n";
|
||||
labelloc=t;
|
||||
@ -15,8 +15,8 @@ digraph planification_temporelle {
|
||||
fontsize=13;
|
||||
fontcolor="#1565C0";
|
||||
|
||||
P7 [label="P7\nValidation\nniveaux|Revue littérature\nSCOR, ISO 28000\nOpen Supply Hub", fillcolor="#BBDEFB"];
|
||||
P6spike [label="P6 spike\nTest bases\ndonnées|Neo4j Community\nPostgreSQL+AGE\nArangoDB\n(Docker/serveur)", fillcolor="#BBDEFB"];
|
||||
P7 [label="P7\nValidation\nniveaux\nRevue littérature\nSCOR, ISO 28000\nOpen Supply Hub", fillcolor="#BBDEFB"];
|
||||
P6spike [label="P6 spike\nTest bases\ndonnées\nNeo4j Community\nPostgreSQL+AGE\nArangoDB\n(Docker/serveur)", fillcolor="#BBDEFB"];
|
||||
}
|
||||
|
||||
subgraph cluster_phase2 {
|
||||
@ -26,8 +26,8 @@ digraph planification_temporelle {
|
||||
fontsize=13;
|
||||
fontcolor="#2E7D32";
|
||||
|
||||
P3 [label="P3\nModèle de\ndonnées|Essentielles / Info\nTiers confiance\nArbitrage\nHistorisation\nIndice fiabilité", fillcolor="#C8E6C9"];
|
||||
P6impl [label="P6 impl\nStockage|Base retenue\nInstallation native\nBackup", fillcolor="#C8E6C9"];
|
||||
P3 [label="P3\nModèle de\ndonnées\nEssentielles / Info\nTiers confiance\nArbitrage\nHistorisation\nIndice fiabilité", fillcolor="#C8E6C9"];
|
||||
P6impl [label="P6 impl\nStockage\nBase retenue\nInstallation native\nBackup", fillcolor="#C8E6C9"];
|
||||
}
|
||||
|
||||
subgraph cluster_phase3 {
|
||||
@ -37,8 +37,8 @@ digraph planification_temporelle {
|
||||
fontsize=13;
|
||||
fontcolor="#E65100";
|
||||
|
||||
P2 [label="P2\nGestion\nsources|Identification\nCatégorisation\nVeille (huginn)\nVérification citations", fillcolor="#FFE0B2"];
|
||||
P4 [label="P4\nAmorçage|3 minerais\n1 composant\n1 produit final\nQualification\n+ audit exhaustivité", fillcolor="#FFE0B2"];
|
||||
P2 [label="P2\nGestion\nsources\nIdentification\nCatégorisation\nVeille (huginn)\nVérification citations", fillcolor="#FFE0B2"];
|
||||
P4 [label="P4\nAmorçage\n3 minerais\n1 composant\n1 produit final\nQualification\n+ audit exhaustivité", fillcolor="#FFE0B2"];
|
||||
}
|
||||
|
||||
subgraph cluster_phase4 {
|
||||
@ -48,9 +48,9 @@ digraph planification_temporelle {
|
||||
fontsize=13;
|
||||
fontcolor="#6A1B9A";
|
||||
|
||||
P5 [label="P5\nTemplates\nfiches|Niveau × usage\nExpertise\nSynthèse\nAPI/JSON", fillcolor="#E1BEE7"];
|
||||
P1 [label="P1\nAPI REST\n+ rôles|Admin / Expert / Service\nAuth + tokens\nAPI-first", fillcolor="#E1BEE7"];
|
||||
P8 [label="P8\nServices\nsécu profils|Personnalisation client\nProfils visibilité\nRate limiting\nRGPD / stateless", fillcolor="#E1BEE7"];
|
||||
P5 [label="P5\nTemplates\nfiches\nNiveau × usage\nExpertise\nSynthèse\nAPI/JSON", fillcolor="#E1BEE7"];
|
||||
P1 [label="P1\nAPI REST\n+ rôles\nAdmin / Expert / Service\nAuth + tokens\nAPI-first", fillcolor="#E1BEE7"];
|
||||
P8 [label="P8\nServices\nsécu profils\nPersonnalisation client\nProfils visibilité\nRate limiting\nRGPD / stateless", fillcolor="#E1BEE7"];
|
||||
}
|
||||
|
||||
subgraph cluster_horizon {
|
||||
@ -60,13 +60,13 @@ digraph planification_temporelle {
|
||||
fontsize=13;
|
||||
fontcolor="#4E342E";
|
||||
|
||||
P10 [label="P10\nÉnergie / Eau|Attributs opération\nSourçage parcellaire\nCroisements risques", fillcolor="#D7CCC8"];
|
||||
P11 [label="P11\nGéo fine|Région / site\nWRI Aqueduct\nAlertes climatiques", fillcolor="#D7CCC8"];
|
||||
P9 [label="P9\nMulti-\nsectoriel|Graphes par secteur\nConnexes inter-secteurs\nMinerais partagés", fillcolor="#D7CCC8"];
|
||||
P10 [label="P10\nÉnergie / Eau\nAttributs opération\nSourçage parcellaire\nCroisements risques", fillcolor="#D7CCC8"];
|
||||
P11 [label="P11\nGéo fine\nRégion / site\nWRI Aqueduct\nAlertes climatiques", fillcolor="#D7CCC8"];
|
||||
P9 [label="P9\nMulti-\nsectoriel\nGraphes par secteur\nConnexes inter-secteurs\nMinerais partagés", fillcolor="#D7CCC8"];
|
||||
}
|
||||
|
||||
// MVP
|
||||
MVP [label="MVP\nJalon interne|Moteur requêtable\nDonnées sourcées\nIndice fiabilité\nRétro-analyse", shape=doubleoctagon, fillcolor="#FFF9C4", style="filled,bold"];
|
||||
MVP [label="MVP\nJalon interne\nMoteur requêtable\nDonnées sourcées\nIndice fiabilité\nRétro-analyse", shape=doubleoctagon, fillcolor="#FFF9C4", style="filled,bold"];
|
||||
|
||||
// Dépendances principales
|
||||
P7 -> P3 [label="niveaux\nvalidés", color="#2E7D32", penwidth=2];
|
||||
BIN
docs/FabNum v2/planification-temporelle.png
Normal file
|
After Width: | Height: | Size: 348 KiB |
@ -1,124 +0,0 @@
|
||||
digraph architecture_fabnum {
|
||||
// Configuration générale
|
||||
rankdir=TB;
|
||||
fontname="Arial";
|
||||
fontsize=18;
|
||||
label="FabNum — Architecture globale\n\n";
|
||||
labelloc=t;
|
||||
splines=true;
|
||||
nodesep=0.8;
|
||||
ranksep=1.0;
|
||||
node [fontname="Arial", fontsize=12, style="filled,rounded", shape=box, penwidth=1.5];
|
||||
edge [fontname="Arial", fontsize=10, penwidth=1.5];
|
||||
|
||||
// ==================== UTILISATEURS ====================
|
||||
|
||||
admin [
|
||||
label="Administrateur\n\nGère le graphe, les sources,\nles tiers de confiance\net les arbitrages"
|
||||
fillcolor="#FFE082"
|
||||
shape=house
|
||||
fontsize=11
|
||||
];
|
||||
|
||||
expert [
|
||||
label="Expert\n\nAnalyse les risques,\nqualifie les données,\nalimente la connaissance"
|
||||
fillcolor="#A5D6A7"
|
||||
shape=house
|
||||
fontsize=11
|
||||
];
|
||||
|
||||
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
|
||||
fontsize=11
|
||||
];
|
||||
|
||||
ecosysteme [
|
||||
label="Écosystème\nveille 360°\n\nInterroge FabNum\net alimente\nles sources"
|
||||
fillcolor="#CE93D8"
|
||||
shape=house
|
||||
fontsize=11
|
||||
];
|
||||
|
||||
// ==================== API ====================
|
||||
|
||||
api [
|
||||
label="API\n\nPoint d'accès unique\nAuthentification, rôles,\nprofils de visibilité"
|
||||
fillcolor="#B39DDB"
|
||||
fontsize=12
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== MOTEUR ====================
|
||||
|
||||
moteur [
|
||||
label="Moteur FabNum\n\nCalcul des indices (IHH, ICS, IVC, ISG...)\nRequêtage du graphe, chemins critiques\nGénération des fiches (templates)\nArbitrage des sources"
|
||||
fillcolor="#90CAF9"
|
||||
fontsize=12
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== BASE DE DONNÉES ====================
|
||||
|
||||
bdd [
|
||||
label="Base de données\n(graphe)\n\nNœuds, relations, indices\nSources rattachées\nHistorique des données"
|
||||
fillcolor="#80CBC4"
|
||||
fontsize=12
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== VEILLE ====================
|
||||
|
||||
veille [
|
||||
label="Veille\n\nSurveillance des sources (huginn)\nVérification des citations\nAlertes (variations, événements)"
|
||||
fillcolor="#FFAB91"
|
||||
fontsize=12
|
||||
penwidth=2
|
||||
];
|
||||
|
||||
// ==================== SOURCES ====================
|
||||
|
||||
sources [
|
||||
label="Sources externes\n\nUSGS, Statista, BRGM,\nScholar Gateway, Consensus,\nWRI Aqueduct, ND-GAIN..."
|
||||
fillcolor="#E0E0E0"
|
||||
shape=cylinder
|
||||
fontsize=11
|
||||
];
|
||||
|
||||
// ==================== DISPOSITION ====================
|
||||
|
||||
{ rank=same; admin; expert; client; ecosysteme; }
|
||||
{ rank=same; veille; moteur; }
|
||||
|
||||
// ==================== RELATIONS ====================
|
||||
|
||||
// Expert → API
|
||||
expert -> api [label="consulte\nanalyse", color="#2E7D32"];
|
||||
|
||||
// Client → API
|
||||
client -> api [label="consulte\nles résultats", color="#C62828"];
|
||||
|
||||
// Écosystème ↔ API + Sources (bidirectionnel)
|
||||
ecosysteme -> api [label="requête\nanalyses", color="#6A1B9A"];
|
||||
ecosysteme -> sources [label="alimente\nles sources", color="#6A1B9A", style=dashed];
|
||||
|
||||
// Admin → Moteur (accès direct par scripts, pas via API)
|
||||
admin -> moteur [label="administre\n(scripts)", color="#E65100", style=bold, penwidth=2];
|
||||
|
||||
// API ↔ Moteur
|
||||
api -> moteur [label="transmet\nles requêtes", color="#4527A0", dir=both];
|
||||
|
||||
// Moteur ↔ Base de données
|
||||
moteur -> bdd [label="lit et écrit\nles données", color="#00695C", dir=both];
|
||||
|
||||
// Veille → Sources
|
||||
sources -> veille [label="surveille\nles mises à jour", color="#BF360C"];
|
||||
|
||||
// Veille → Moteur / BDD
|
||||
veille -> moteur [label="signale les\nchangements\net vérifie\nles citations", color="#E65100"];
|
||||
veille -> bdd [label="met à jour\nles sources", color="#E65100", style=dashed];
|
||||
|
||||
// Sources → BDD (alimentation)
|
||||
sources -> bdd [label="alimente\nles données", color="#546E7A", style=dashed];
|
||||
}
|
||||
|
Before Width: | Height: | Size: 392 KiB |