Auteur : Victor Lequay Date : 19 mars 2026 Statut : Brouillon pour discussion
La plateforme OpenCaps collecte des données énergétiques auprès de plusieurs fournisseurs (Enedis, GRDF, CPCU, Fraîcheur de Paris) pour le compte de gestionnaires de bâtiments et de copropriétaires. Cette collecte nécessite des autorisations légales (consentements, mandats, contrats) dont la gestion est aujourd'hui entièrement manuelle.
| Aspect | État |
|---|---|
| Suivi des consentements | Aucun système. PDFs stockés sur Google Drive, référencement dans la tête des opérateurs |
| Vérification avant collecte | Aucune. Le ct-injector collecte tant que le fournisseur le permet |
| Détection d'expiration | Réactive uniquement — découverte quand les données cessent d'arriver |
| Alertes proactives | Inexistantes |
| Lien entre preuves et comptes | Manuel (audit ponctuel via rclone + API) |
| Type | Rôle vis-à-vis du consentement |
|---|---|
| Copropriétaire / Résident | Donne son consentement pour son propre compteur (PRM, PCE) |
| Gestionnaire de patrimoine | Donne le consentement au nom d'un bâtiment ou d'un portefeuille, couvre potentiellement de nombreux compteurs |
| Opérateur OpenCaps | Gère les comptes de collecte, vérifie les consentements, relance les renouvellements |
Chaque fournisseur a un processus de consentement différent :
ACCORD_CLIENT), mais Enedis peut auditer à tout moment et demander la preuve du mandat. Marge d'environ 1 mois.CommandeAccesDonneesMesuresClient) existe dans le code mais n'est pas utilisé en production.Un consentement n'est pas un booléen. C'est un objet avec un cycle de vie :
NÉCESSAIRE Le compteur est identifié, le consentement est requis
│
▼
EN COURS La procédure d'obtention est lancée
│ (signature envoyée, enrôlement demandé)
▼
OBTENU Preuve reçue, collecte autorisée
│ (PDF signé, confirmation d'enrôlement, contrat validé)
│
├──► EXPIRATION PROCHE Dans les N jours avant expiration
│ │
│ ▼
├──► EXPIRÉ Date d'expiration dépassée, renouvellement nécessaire
│
└──► RÉVOQUÉ Retiré explicitement (départ locataire, résiliation)
| Champ | Description |
|---|---|
| Identifiant compteur | PRM, PCE, numéro client, mnémonique... |
| Fournisseur | Enedis, GRDF, CPCU, Fraîcheur, etc. |
| Bâtiment / Entité | Lien avec le patrimoine (ID Hemisphere/GraphDB) |
| Donneur de consentement | Nom, rôle (copropriétaire, gestionnaire) |
| Statut | NÉCESSAIRE, EN_COURS, OBTENU, EXPIRATION_PROCHE, EXPIRÉ, RÉVOQUÉ |
| Date de signature / obtention | Quand le consentement a été obtenu |
| Date de début de validité | À partir de quand la collecte est autorisée |
| Date d'expiration | Quand le consentement expire |
| Type de preuve | PDF signé, confirmation API, référence contrat |
| Référence de preuve | Lien vers le document (Drive, S3, etc.) |
| Notes | Informations libres (numéro de contrat, cas particulier) |
| Composant | Aujourd'hui | Demain |
|---|---|---|
| MetaInfoDB | Store de métadonnées entités (MongoDB) | Remplacé par une base de données graphe |
| Hemisphere | Plateforme centrale (utilisateurs, bâtiments, JWT) | Possiblement absorbé dans le graphe |
| CT-Injector | Monolithe (scheduling + fetch + write + anomalies) | Refactoring prévu, séparation des responsabilités |
Le système de consentement ne doit pas être construit comme une extension de ct-injector ou de MetaInfoDB — ces deux composants vont évoluer significativement. Il doit être autonome et communiquer avec le reste via des APIs.
Un nouveau microservice avec sa propre base de données, API REST, et MCP.
| Avantage | Inconvénient |
|---|---|
| Indépendant des migrations en cours | Un service de plus à opérer |
| Modèle de données conçu pour le domaine | Risque de duplication d'information (entités, bâtiments) |
| Peut évoluer indépendamment | Nécessite une intégration avec les autres services |
| Survivra aux refactorings |
Stack potentiel : Go ou TypeScript, PostgreSQL, API REST, MCP dédié.
Le consentement comme un nœud/relation dans le graphe (compteur) -[A_CONSENT]-> (consentement) -[DONNÉ_PAR]-> (utilisateur).
| Avantage | Inconvénient |
|---|---|
| Modèle relationnel naturel | Dépend de la migration GraphDB (timeline incertaine) |
| Pas de service supplémentaire | Mélange domaines métier et juridique |
| Requêtes traversant entités + consentements | Moins de flexibilité sur le modèle |
Ajouter des champs de consentement au modèle Account + une table de documents.
| Avantage | Inconvénient |
|---|---|
| Proximité avec la collecte | CT-Injector va être refactoré |
| Moins de services | Couplage domaine collecte / domaine juridique |
| Vérification au plus près | Les contrats CPCU/Fraîcheur ne sont pas des "accounts" |
Option A (service autonome) semble la plus résiliente face aux migrations à venir, avec une intégration progressive :
| Fournisseur | Comptes actifs | Compteurs couverts | Consentements documentés |
|---|---|---|---|
| Enedis | 31 (enedis, enedis_day, enedis_top, enedis_day_top) | ~20 PRMs uniques | PDFs sur Google Drive (audit Félicité uniquement) |
| GRDF | 0 | 0 | N/A (credentials pas encore déployées) |
| CPCU | 1 | 1 client (19070) | Contrat commercial (non documenté dans le système) |
| Fraîcheur de Paris | 1 | 1 mnémonique (040012) | Contrat commercial (non documenté) |
| Weather | 4 | N/A (données ouvertes) | Pas de consentement requis |
| Synthesis | 3 | N/A (calcul interne) | Pas de consentement requis |
| Per_month | 2 | N/A (agrégation interne) | Pas de consentement requis |
| PRM / ID | Fournisseur | Problème | Impact |
|---|---|---|---|
| 3 PRMs (868..., 740..., 740...) | Enedis | Bloqués depuis janvier 2023 | Aucune donnée depuis 3 ans, comptes toujours actifs |
| 50059419716994 | Enedis | "Point résilié" (SGT4M1) | Génère ~750K alertes cumulées |
| 50008194526040 | Enedis | Bloqué depuis janvier 2026 | 76 jours sans données |
| 19070 | CPCU | Gap données jan-mars 2026 | Provider-side, résolu récemment |
Il n'existe aucun type d'anomalie dédié au consentement. Quand Enedis retourne le code SGT4M1 ("point résilié"), l'anomalie est classée TECHNICAL_FAULT / UNAVAILABLE — indistinguable d'une panne technique. Un opérateur ne peut pas filtrer les alertes pour identifier spécifiquement les problèmes de consentement.