Le tableau de bord écrase les valeurs nulles et tait la qualité de ce qu'il affiche #199

Closed
opened 2026-09-08 12:15:44 +00:00 by lenaic · 0 comments
Owner

Exigence couverte

EF-04 · Produire une série exploitable par imputation, la valeur brute et la méthode restant lisibles à côté. EF-11 · vue du parc, vue d'un site, qualité.

Épreuve servie

EC05 · Data, ETL et BI

Charge estimée

une demi-journée

Ce qu'on veut obtenir

Sur le parc, sept sites sur sept affichent une consommation et une heure de relève. Mesuré à l'instant en production, sur les trois dernières heures et par site : environ 40 minutes nulles sur 106, autant de lignes critical, une trentaine de suspect, une vingtaine d'imputed. Il ne reste qu'une vingtaine de minutes réellement propres par site, et l'écran n'en dit rien.

Deux défauts distincts, tous deux dans SQL_SITES (services/api/enervision_api/dashboard/repository.py).

1. La requête saute la valeur nulle. La jointure latérale porte and valeur_kw is not null. Quand la minute courante est une panne, l'écran remonte la dernière minute non nulle et l'estampille comme la dernière relève. SITE004 est dans ce cas en ce moment : sa ligne de 10:59 est critical, la tuile montre 10:58. La panne est invisible, et c'est exactement le cas que l'API amont simule.

2. La qualité de la valeur affichée n'est jamais rendue. public.mesure porte indicateur_qualite et methode_imputation par ligne, la zone argent les écrit correctement, et le contrat du tableau de bord ne les transporte pas. Cinq sites sur sept affichent en ce moment une valeur suspect comme si elle était propre.

L'EF-04 demande que « la valeur brute et la méthode restent lisibles à côté ». Elles le sont en base, de bout en bout, et se perdent à la dernière étape.

Le remède ne consiste pas à masquer les sites en panne : c'est la seconde façon de mentir. Il consiste à ne pas écraser le nul, et à donner à côté la dernière valeur connue, son heure, et la qualité de ce qui est affiché.

Critères d'acceptation

  • SQL_SITES prend la dernière ligne de public.mesure, nulle comprise, et remonte indicateur_qualite et methode_imputation de cette ligne
  • Une seconde jointure latérale remonte la dernière valeur non nulle et son heure, sans les confondre avec la valeur courante
  • SiteEtat et SiteOut portent qualite, methode, derniere_valeur_connue_kw et derniere_valeur_connue_a
  • Un site dont la minute courante est nulle rend consommation_kw: null et derniere_releve à l'heure vraie de cette minute nulle
  • La synthèse du parc continue d'exclure les sites muets, et l'écran affiche sites_mesures sur sites_total sous le total
  • Le tableau des sites et la fiche d'un site rendent la qualité de la valeur montrée, et la dernière valeur connue quand la courante est absente
  • Aucun test ne suppose plus qu'une ligne nulle est absente

Comment on le vérifie

tests/unit/api/test_repository_sites.py : un site dont la dernière ligne est nulle rend consommation_kw nul, derniere_releve à l'heure de cette ligne, et la dernière valeur connue à l'heure précédente. Un site dont la dernière ligne est suspect rend qualite: suspect.

À la main sur enervision_prod, avec la requête du corps du ticket : le site dont la dernière ligne est critical doit rendre une consommation nulle et non celle de la minute d'avant.

Hors périmètre

Les courbes (serie_site, serie_parc) : elles lisent mesure_horaire, où une heure sans moyenne est une heure absente et non une panne d'une minute. À regarder séparément.

Le rafraîchissement automatique de l'écran, qui est le #196.

### Exigence couverte EF-04 · Produire une série exploitable par imputation, la valeur brute et la méthode restant lisibles à côté. EF-11 · vue du parc, vue d'un site, qualité. ### Épreuve servie EC05 · Data, ETL et BI ### Charge estimée une demi-journée ### Ce qu'on veut obtenir Sur le parc, sept sites sur sept affichent une consommation et une heure de relève. Mesuré à l'instant en production, sur les trois dernières heures et par site : environ 40 minutes nulles sur 106, autant de lignes `critical`, une trentaine de `suspect`, une vingtaine d'`imputed`. Il ne reste qu'une vingtaine de minutes réellement propres par site, et l'écran n'en dit rien. Deux défauts distincts, tous deux dans `SQL_SITES` (`services/api/enervision_api/dashboard/repository.py`). **1. La requête saute la valeur nulle.** La jointure latérale porte `and valeur_kw is not null`. Quand la minute courante est une panne, l'écran remonte la dernière minute non nulle et l'estampille comme la dernière relève. SITE004 est dans ce cas en ce moment : sa ligne de 10:59 est `critical`, la tuile montre 10:58. La panne est invisible, et c'est exactement le cas que l'API amont simule. **2. La qualité de la valeur affichée n'est jamais rendue.** `public.mesure` porte `indicateur_qualite` et `methode_imputation` par ligne, la zone argent les écrit correctement, et le contrat du tableau de bord ne les transporte pas. Cinq sites sur sept affichent en ce moment une valeur `suspect` comme si elle était propre. L'EF-04 demande que « la valeur brute et la méthode restent lisibles à côté ». Elles le sont en base, de bout en bout, et se perdent à la dernière étape. Le remède ne consiste pas à masquer les sites en panne : c'est la seconde façon de mentir. Il consiste à ne pas écraser le nul, et à donner à côté la dernière valeur connue, son heure, et la qualité de ce qui est affiché. ### Critères d'acceptation - [ ] `SQL_SITES` prend la dernière ligne de `public.mesure`, nulle comprise, et remonte `indicateur_qualite` et `methode_imputation` de cette ligne - [ ] Une seconde jointure latérale remonte la dernière valeur non nulle et son heure, sans les confondre avec la valeur courante - [ ] `SiteEtat` et `SiteOut` portent `qualite`, `methode`, `derniere_valeur_connue_kw` et `derniere_valeur_connue_a` - [ ] Un site dont la minute courante est nulle rend `consommation_kw: null` et `derniere_releve` à l'heure vraie de cette minute nulle - [ ] La synthèse du parc continue d'exclure les sites muets, et l'écran affiche `sites_mesures` sur `sites_total` sous le total - [ ] Le tableau des sites et la fiche d'un site rendent la qualité de la valeur montrée, et la dernière valeur connue quand la courante est absente - [ ] Aucun test ne suppose plus qu'une ligne nulle est absente ### Comment on le vérifie `tests/unit/api/test_repository_sites.py` : un site dont la dernière ligne est nulle rend `consommation_kw` nul, `derniere_releve` à l'heure de cette ligne, et la dernière valeur connue à l'heure précédente. Un site dont la dernière ligne est `suspect` rend `qualite: suspect`. À la main sur `enervision_prod`, avec la requête du corps du ticket : le site dont la dernière ligne est `critical` doit rendre une consommation nulle et non celle de la minute d'avant. ### Hors périmètre Les courbes (`serie_site`, `serie_parc`) : elles lisent `mesure_horaire`, où une heure sans moyenne est une heure absente et non une panne d'une minute. À regarder séparément. Le rafraîchissement automatique de l'écran, qui est le #196.
lenaic self-assigned this 2026-09-08 12:15:45 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
g2/enervision#199
No description provided.