Aller au contenu

Sprint 1 — LOG-01 v3 À FAIRE

Runbook technique (fichiers, SQL, commandes) : demo-conductor/docs/sprints/sprint-1-log01.md Cette page = vue stratégique pour Marc + Cyrille.

Refonte du pipeline LOG-01 pour matcher pixel-perfect la version HTML paysage v2 livrée par Cyrille le 2026-04-14.

Spec = HTML Cyrille

Fichier source de vérité : Contexte_par_cyrille/LOG01_Palaiseau_paysage_v2.html

Le pipeline Python doit reverse-engineer ce template et l'alimenter avec des données réelles certifiées (pas d'extrapolation). Voir Cyrille = source de vérité.

Critiques Cyrille à traiter (Apr 18)

Cyrille a identifié 6 catégories de données à requalifier ou extraire proprement :

Donnée État v6 actuel Action Sprint 1
DPE ADEME (23,4% passoires) Extrapolé, présenté comme "API réelle" Extraire via GET data.ademe.fr/.../dpe-v2-logements-existants/lines?q=91477
Loyers ANIL / OLAP Valeurs vraisemblables mais non extraites Ingérer CSV MEF-DHUP (uploadé 2026-04-24 dans raw/ANIL/)
BPE par équipement 31 médecins, 52 équipements sportifs : estimés Extraire fichier BPE 2024 commune (TYPEQU × DEPCOM)
IRIS (suroccupation, morpho) Estimations LObsTer Extraire RP2022 par IRIS depuis INSEE détaillés, ou supprimer
Loyer social 6,94 €/m² À vérifier Vérifier circulaire DHUP avec barèmes IRL
Mentions "estimation" Dispersées Badge visuel systématique pour toute valeur non extraite

Dépendances

Données ANIL uploadées 2026-04-24 — raw/ANIL/ (4 CSV pred-, 2 PDF méthodo) ⏳ *Mise en place ingest_anil.py** — à créer ⏳ Table anil_loyers — schéma à définir ✅ Template HTML Cyrille v2 — disponible dans Contexte_par_cyrille/

Plan d'exécution

flowchart TD
    A[Déplacer raw/ANIL/ → raw/logement/anil/] --> B[Créer ingest_anil.py]
    B --> C[Créer table anil_loyers + migration]
    C --> D[Ingérer 4 CSV dans PostgreSQL]
    D --> E[Enrichir log_01.py collector]
    E --> F[Brancher API DPE ADEME]
    F --> G[Extraire BPE par équipement]
    G --> H[Tenter extraction IRIS]
    H --> I[Vérifier loyer social DHUP]
    I --> J[Écrire prompt log_01_v3]
    J --> K[Générer HTML Palaiseau v3]
    K --> L[Comparer pixel-à-pixel vs Cyrille v2]
    L --> M[Revue par Cyrille]

    classDef blocker fill:#c62828,stroke:#0d1f3c,color:#fff
    classDef pipeline fill:#e87722,stroke:#0d1f3c,color:#fff
    classDef validation fill:#2a7f7f,stroke:#0d1f3c,color:#fff
    class A,B,C,D pipeline
    class E,F,G,H,I pipeline
    class J,K pipeline
    class L,M validation

Livrables attendus

  • backend/ingest_anil.py + table anil_loyers peuplée
  • backend/app/report_pipeline/data_collectors/log_01.py v3 (refactor majeur)
  • backend/app/report_pipeline/prompts/log_01_html_report.py v3
  • backend/reports/91477_20260XXX_v3.html pixel-perfect
  • Section "Sources détaillées" du rapport : chaque chiffre a son URL/fichier source

Anti-critères

  • Aucune valeur dans le rapport sans source certifiée ou badge "estimation"
  • Aucun chiffre inventé par le LLM (temperature=0, validation Pydantic stricte)
  • Aucune mention "~" ou "approximativement" — soit la donnée est là, soit elle est marquée N/A