Code/CLAUDE.md
Stéphan Peccini e77cb09bca
docs(claude): ajouter workflow avant commit (simplify → review → commit)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:49:48 +02:00

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 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

Workflow avant commit

Pour toute modification significative du code (logique metier, structures de donnees, nouveau code) :

  1. /simplify — Simplifier et nettoyer le code modifie
  2. /review — Verifier qualite, securite, coherence
  3. Commit — Une fois les deux valides

Non necessaire pour les modifications mineures (labels, config, documentation).

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)