3.5 KiB
3.5 KiB
FabNum
Description
Application Streamlit d'analyse de risques géopolitiques pour les chaînes d'approvisionnement numériques. Modélise les dépendances (produits, composants, minerais, pays) sous forme de graphe orienté et calcule des indices de criticité (IHH, ICS, IVC, ISG).
Architecture
fabnum.py— Point d'entrée Streamlit (page d'accueil, instructions)config.py— Variables d'environnement (Gitea, fiches criticité,.env/.env.local)app/— Pages Streamlit organisées par fonctionnalité :analyse/— Analyse de criticité et visualisation Sankeyfiches/— Gestion des fiches de criticité (IHH, ICS, IVC, ISG)visualisations/— Graphes et visualisations interactivesia_nalyse/— Analyse assistée par IAplan_d_action/— Plans d'action et recommandationspersonnalisation/— Personnalisation de l'interface
components/— Composants UI partagés (header, footer, sidebar, connexion)utils/— Utilitaires métier (graphe, persistance, Gitea, logs, traductions)scripts/— Scripts d'ingestion et génération (auto_ingest, generer_analyse)tests/— Tests pytest (unit, integration, fixtures)IA/,batch_ia/— Modules IA (priorité basse, exclus du linting)
Stack technique
- Python >= 3.10
- Streamlit 1.45 — Interface web
- NetworkX + PyGraphviz — Modélisation graphe (format DOT)
- Plotly / Altair — Visualisations
- Pandas / NumPy — Traitement de données
- Requests — API Gitea (fiches, schéma)
- Jinja2 / pypandoc — Génération PDF
- pytest — Tests (8 fichiers, tests/unit/)
- ruff — Linter et formateur
Conventions de code
- Linter :
ruff(config complète danspyproject.toml, line-length=120) - Tests :
pytestavec markersunitetintegration - Style docstrings : convention Google, en francais
- Variable graphe :
G(convention NetworkX, ignoree par N803/N806) - Exclusions ruff :
IA/,batch_ia/,pgpt/(priorite basse) - Imports tries par isort (first-party : app, utils, batch_ia)
- Quotes doubles, indentation espaces
Commandes utiles
streamlit run fabnum.py # Lancer l'application
python -m pytest tests/unit/ -v # Lancer les tests unitaires
python -m pytest tests/ -v # Tous les tests
ruff check . # Verifier le code
ruff check --fix . # Corriger automatiquement
ruff format . # Formater le code
Workflow avant commit
Pour toute modification significative du code (logique metier, structures de donnees, nouveau code) :
/simplify— Simplifier et nettoyer le code modifie/review— Verifier qualite, securite, coherence- Commit — Une fois les deux valides
Non necessaire pour les modifications mineures (labels, config, documentation).
Points d'attention
fabnum.pydoit appelerst.set_page_config()avant tout import de modules app (E402 ignore)utils.persistance.update_session_paths()est appele en tout premier dans fabnum.py- Les variables d'environnement critiques (FICHE_IHH, ICS, IVC, ISG) sont obligatoires (OSError si absentes)
- Le graphe est lu depuis un fichier DOT (Graphviz) et manipule via NetworkX DiGraph
- Deux environnements :
dev(defaut) etpublic(detecte via header Nginx X-Environment) - Donnees stockees sur Gitea (fiches criticite, schema de dependances)
- Les tests utilisent des fixtures dans
tests/fixtures/(sample_graph.dot, config YAML)