Index thématique des ADRs
Le registre des décisions d'architecture (docs/adr/) est
immuable : une décision ne se corrige ni ne se supprime, elle se remplace par un
nouvel ADR qui la supersède explicitement (voir par exemple
ADR-0037, qui supersède
ADR-0008). Cette page ne réécrit aucun ADR — elle les
regroupe par thème pour retrouver une décision sans grep. Un ADR peut apparaître dans
deux thèmes quand la décision touche vraiment aux deux.
Architecture & rôles des modules
- ADR-0001 — Monorepo — un seul dépôt pour ingestion/core/api/bot/integrations, pas de paquets séparés.
- ADR-0002 — Polars exclusivement — pas de pandas ; Polars pur sur toute la couche calcul.
- ADR-0004 — Langue française — code, documentation et domaine métier en français.
- ADR-0005 — DuckDB comme stockage — DuckDB comme couche de stockage analytique entre ingestion et pipelines.
- ADR-0007 — Query builders —
DuckDBQuery/OdooQuery: builders fluents, immuables, filtres poussés auWHERE. - ADR-0009 — Architecture API-centrique — l'API FastAPI est le hub ; bot, notebooks et intégrations passent tous par elle.
- ADR-0016 —
core/ERP-agnostique —core/ne dépend que de Polars/DuckDB/Pandera/stdlib ; tout adaptateur ERP vit dansintegrations/. - ADR-0018 — Classes justifiées par l'état — une classe se justifie par un état interne réel ; sinon fonctions + dataclasses frozen.
- ADR-0019 — Rôles des dossiers — un rôle par dossier (loaders/pipelines/builds/writers/integrations/api), imports par rôle vérifiés en CI.
- ADR-0032 — Marts hors namespace
/flux— les marts transverses (relevés, spine…) sortent du namespace/flux/*. - ADR-0043 —
electricore-clientséparé — client léger httpx+pydantic distribué à part (PyPI), JSONL streamé, modèles single-source. - ADR-0050 — Deux entrées du contexte mensuel — parc complet et point unique restent des entrées distinctes de
contexte_du_mois.
Ingestion & flux Enedis
- ADR-0006 — DLT pour l'ETL — dlt orchestre l'ELT SFTP → DuckDB (landing brut).
- ADR-0008 — Rotation des clés AES (stopgap) — format
secrets.tomlà deux clés, superseded par ADR-0037. - ADR-0020 — Linéarisation en dbt (prototype) — prototype de linéarisation SQL des flux Enedis en dbt.
- ADR-0021 — Bascule production dbt — dbt devient le chemin de production de la linéarisation.
- ADR-0035 — Typage de la chaîne ingestion↔cœur — un propriétaire par fait, parité vérifiée aux frontières.
- ADR-0037 — Trousseau de clés AES N-clés — sélection par essai (oracle PKCS7/ZIP), escalade d'échec per-flux.
- ADR-0040 — Schéma de déchiffrement AES à IV préfixé — réalise le seam ouvert par l'ADR-0037 (AES-256).
- ADR-0047 — Flux R67 — énergie par période livrée par le distributeur, asset parallèle hors union
releves. - ADR-0051 — Flux C12 — ingestion du flux C12 (PRM > 36 kVA) + spine contractuelle C4.
- ADR-0053 — Parité des sites de déclaration d'un flux connu — vérifie que les quatre sites où se déclare un flux restent en phase.
Données & conventions
- ADR-0003 — Harmonisation des dates R151 — ajustement +1 jour du R151 pour s'harmoniser avec R64/R15/C15.
- ADR-0013 — Renommage Périmètre → Historique — le vocabulaire du cœur adopte « Historique ».
- ADR-0023 — Périodisations séparées — abonnement et énergie restent deux frises séparées, jamais imbriquées.
- ADR-0026 — Facturation calendaire — facturation du 1ᵉʳ au 1ᵉʳ, pas au « moisniversaire » Enedis.
- ADR-0028 — Identité de relevé — clé métier stable + priorité explicite des sources (C15 > R64 > R151).
- ADR-0029 — Modèle de relevés canonique — le mart
relevesassemble en dbt, le cœur se contente d'arbitrer/filtrer. - ADR-0033 — Qualité de période — remplace
data_complete/coveragepar un axe réelle/estimée/incalculable. - ADR-0034 — Index en kWh entiers — normalisation floor au boundary dbt.
- ADR-0036 — Statut de communication — axe jumeau de la qualité, porté par
Niveau_Ouverture_Services. - ADR-0038 — Relevés utilisés imbriqués — trace d'index légale imbriquée dans chaque méta-période.
- ADR-0039 — Chronologie : attributs de situation hors mart — attributs (FTA, puissance…) forward-fillés en SQL, hors du mart relevés.
- ADR-0041 — Chronologie du contrat en spine dbt — la chronologie devient une spine relationnelle assemblée entièrement en dbt.
- ADR-0042 — Convention de date instant/jour civil — TIMESTAMPTZ vs DATE harmonisés au boundary
flux_*, fuseau Europe/Paris à la lecture. - ADR-0045 — Relations de la spine par clé naturelle —
releve_idréférencé tel quel, pas de surrogate/FK. - ADR-0052 — Présence au périmètre — spans
[début, fin)par RSC, fermeture sur le code de sortie.
Facturation & taxes
- ADR-0014 — Lignes de factures du mois avec flags — expose les lignes avec des flags d'état plutôt que de filtrer à zéro hors période.
- ADR-0024 — Trois registres de savoir — distingue runtime / structurel / réglementaire ; gouvernance détaillée dans gouvernance-reglementaire.md.
- ADR-0027 — Odoo tire les méta-périodes —
GET /facturation/meta-periodes, cœur read-only, pas dePOST recompute. - ADR-0030 — Calculateur TURPE variable — Odoo fournit l'assiette de consommation, electricore livre le montant.
- ADR-0048 — Estimation de provision des lissés — dérivation cœur-pure en kWh, amorcée par R67 (cold-start).
Déploiement & secrets
- ADR-0011 — Déploiement VPS Docker — VPS + Docker Compose comme socle de déploiement.
- ADR-0015 — Déploiement multi-instance — un VPS par fournisseur, pas de mutualisation multi-tenant.
- ADR-0017 — Layout
/srv/<slug>/— une instance vit sous/srv/<slug>/, avec un utilisateur système dédié. - ADR-0025 — Registre runtime pydantic-settings —
runtime.py, domaines indépendants, validation fail-fast par point d'entrée. - ADR-0031 — Durcissement SSH du VPS — utilisateur admin
ops, root sans accès SSH. - ADR-0037 — Trousseau de clés AES N-clés — voir aussi thème Ingestion ci-dessus.
- ADR-0040 — Schéma de déchiffrement AES à IV préfixé — voir aussi thème Ingestion ci-dessus.
- ADR-0044 — Secrets-as-code SOPS + age — secrets chiffrés versionnés, déchiffrement en image, identité par instance.
- ADR-0046 — Convention de nommage env —
<DOMAINE>__<CHAMP>+ modèle d'identité/accès des secrets. - ADR-0049 — Schéma des secrets en SSOT pydantic — le schéma pydantic fait autorité, le bash de déploiement ne valide que la politique de split.
Bot & API
- ADR-0009 — Architecture API-centrique — voir aussi thème Architecture ci-dessus.
- ADR-0010 — Bot Telegram, UI opérationnelle — le bot est l'UI opérationnelle quotidienne du·de la facturiste, client de l'API.
- ADR-0012 — API read-only sur Odoo — l'API n'écrit jamais dans Odoo ; toute écriture reste un acte humain via notebook.
- ADR-0022 — Surface du bot par domaines hybrides — commandes organisées par domaine métier (ingestion, flux, périmètre, taxes, facturation).
- ADR-0027 — Odoo tire les méta-périodes — voir aussi thème Facturation & taxes ci-dessus.
Documentation & savoir
- ADR-0024 — Trois registres de savoir — voir aussi thème Facturation & taxes ci-dessus.
- ADR-0054 — Chemin de documentation par rôles — 5 sections par rôle de lecture, principe d'escalier et passerelles montantes ; décision fondatrice de cette section Maintenir.
Pour aller plus loin
Registre des ADR (ordre chronologique, docs/adr/) ·
Trois registres de savoir ·
Gouvernance du registre réglementaire.