Code/CLAUDE.md
Stéphan Peccini 6d2e877341
feat(audit): audit qualité complet — 907→0 erreurs ruff + fix multiselect labels
- Correction des 907 erreurs ruff (pathlib, imports, nommage, simplifications, docstrings)
- Fix déduplication labels dans multiselect nœuds d'arrivée (analyse)
- Expansion 1→N label→IDs pour le Sankey (Pays d'opération)
- Ajout CLAUDE.md et document de design de l'audit
- Mise à jour .gitignore (artefacts tests exploratoires)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 11:52:01 +01:00

3.2 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 Sankey
    • fiches/ — Gestion des fiches de criticité (IHH, ICS, IVC, ISG)
    • visualisations/ — Graphes et visualisations interactives
    • ia_nalyse/ — Analyse assistée par IA
    • plan_d_action/ — Plans d'action et recommandations
    • personnalisation/ — 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 dans pyproject.toml, line-length=120)
  • Tests : pytest avec markers unit et integration
  • 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

Points d'attention

  • fabnum.py doit appeler st.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) et public (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)