api : le tableau de bord n'écrase plus les valeurs nulles #201

Merged
lenaic merged 1 commit from lenaic/199-nuls-non-ecrases into develop 2026-09-08 12:42:09 +00:00
Owner

Ferme le #199.

Le défaut

SQL_SITES portait and valeur_kw is not null sur sa jointure latérale. Un site dont la minute courante est une panne remontait donc sa dernière minute valide, estampillée comme la relève du moment.

Mesuré sur enervision_prod, trois dernières heures, par site :

site_id  nuls  imputés  suspects  total
SITE001    45       17        26    106
SITE004    40       13        30    106
SITE007    39       20        32    106

Environ quarante minutes nulles sur cent six, et une vingtaine de minutes réellement propres. L'API amont produit ces nuls exprès, pour simuler la panne d'un capteur. L'écran affichait sept sites avec une consommation et une heure, et ne disait rien.

Au moment de la mesure, SITE004 portait une ligne critical à 10:59 et la tuile montrait 10:58. Cinq sites sur sept affichaient une valeur suspect sans que rien ne le signale.

Le remède

Trois jointures au lieu de deux, et la première ne filtre plus.

  • m est la dernière minute, nulle comprise, avec son indicateur_qualite et sa methode_imputation
  • d est la dernière valeur non nulle, avec son heure
  • les deux traversent jusqu'au contrat, et jamais l'une à la place de l'autre

À l'écran : la case reste à « — » quand le capteur est muet, et la dernière valeur connue se lit sous le tiret avec son heure. Une valeur reconstituée ou suspecte s'affiche avec son état à côté. La synthèse du parc continue d'exclure les sites muets, ce que le contrat dit depuis toujours, mais elle annonce « sur 5 sites mesurés sur 7 » quand le parc est incomplet : sans ça, un total qui baisse parce qu'un capteur est tombé se lit comme une baisse de consommation.

Ce que ça sert

L'EF-04 mot pour mot : « la valeur brute et la méthode restant lisibles à côté ». Elles l'étaient de la zone bronze à la zone or, le lignage est intact en base, et elles se perdaient au dernier mètre.

Vérifications

  • 7 nouveaux cas côté API, 3 côté front. tests/unit complet : 1 076 passés
  • ruff check et ruff format --check sur le périmètre de la chaîne, mypy --config-file enervision_api/pyproject.toml en strict
  • les chiffres du corps viennent de public.mesure sur enervision_prod, pas d'une estimation

Hors périmètre

Les courbes (SQL_SERIE_HEURE, SQL_SERIE_SITE) écartent les seaux sans moyenne, mais un seau vide de mesure_horaire est une heure sans donnée, pas une panne d'une minute — et elles portent déjà leur drapeau imputee, que le front trace autrement. Rien à changer là.

Le rafraîchissement automatique de l'écran reste le #196.

Ferme le #199. ### Le défaut `SQL_SITES` portait `and valeur_kw is not null` sur sa jointure latérale. Un site dont la minute courante est une panne remontait donc sa dernière minute valide, estampillée comme la relève du moment. Mesuré sur `enervision_prod`, trois dernières heures, par site : ``` site_id nuls imputés suspects total SITE001 45 17 26 106 SITE004 40 13 30 106 SITE007 39 20 32 106 ``` Environ quarante minutes nulles sur cent six, et une vingtaine de minutes réellement propres. L'API amont produit ces nuls exprès, pour simuler la panne d'un capteur. L'écran affichait sept sites avec une consommation et une heure, et ne disait rien. Au moment de la mesure, SITE004 portait une ligne `critical` à 10:59 et la tuile montrait 10:58. Cinq sites sur sept affichaient une valeur `suspect` sans que rien ne le signale. ### Le remède Trois jointures au lieu de deux, et la première ne filtre plus. - `m` est la dernière minute, nulle comprise, avec son `indicateur_qualite` et sa `methode_imputation` - `d` est la dernière valeur non nulle, avec son heure - les deux traversent jusqu'au contrat, et **jamais l'une à la place de l'autre** À l'écran : la case reste à « — » quand le capteur est muet, et la dernière valeur connue se lit **sous** le tiret avec son heure. Une valeur reconstituée ou suspecte s'affiche avec son état à côté. La synthèse du parc continue d'exclure les sites muets, ce que le contrat dit depuis toujours, mais elle annonce « sur 5 sites mesurés sur 7 » quand le parc est incomplet : sans ça, un total qui baisse parce qu'un capteur est tombé se lit comme une baisse de consommation. ### Ce que ça sert L'EF-04 mot pour mot : « la valeur brute et la méthode restant lisibles à côté ». Elles l'étaient de la zone bronze à la zone or, le lignage est intact en base, et elles se perdaient au dernier mètre. ### Vérifications - 7 nouveaux cas côté API, 3 côté front. `tests/unit` complet : 1 076 passés - `ruff check` et `ruff format --check` sur le périmètre de la chaîne, `mypy --config-file enervision_api/pyproject.toml` en strict - les chiffres du corps viennent de `public.mesure` sur `enervision_prod`, pas d'une estimation ### Hors périmètre Les courbes (`SQL_SERIE_HEURE`, `SQL_SERIE_SITE`) écartent les seaux sans moyenne, mais un seau vide de `mesure_horaire` est une heure sans donnée, pas une panne d'une minute — et elles portent déjà leur drapeau `imputee`, que le front trace autrement. Rien à changer là. Le rafraîchissement automatique de l'écran reste le #196.
lenaic self-assigned this 2026-09-08 12:28:40 +00:00
api: le tableau de bord n'ecrase plus les valeurs nulles (#199)
All checks were successful
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 40s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 7s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 18s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m19s
c99fa89bcf
La jointure laterale de SQL_SITES portait "and valeur_kw is not null". Un site
dont la minute courante est une panne remontait donc sa derniere minute valide,
estampillee comme la releve du moment : la panne devenait invisible sur le seul
ecran fait pour la voir.

Mesure sur enervision_prod, trois dernieres heures, par site : environ 40
minutes nulles sur 106, autant de lignes critical, une trentaine de suspect,
une vingtaine d'imputed. Il restait une vingtaine de minutes reellement propres
par site, et l'ecran n'en disait rien. L'API amont produit ces nuls expres,
pour simuler la panne d'un capteur.

Trois jointures au lieu de deux. La premiere prend la derniere minute, nulle
comprise, avec son indicateur_qualite et sa methode_imputation. La seconde
prend la derniere valeur non nulle et son heure. Les deux traversent jusqu'au
contrat et jamais l'une a la place de l'autre : l'ecran affiche un tiret, et
sous le tiret la derniere valeur connue avec son heure.

La synthese du parc continue d'exclure les sites muets, ce que le contrat dit
depuis toujours, mais elle annonce maintenant sur combien de sites elle porte
quand le parc est incomplet. Sans ca, un total qui baisse parce qu'un capteur
est tombe se lit comme une baisse de consommation.

C'est l'EF-04 : la valeur brute et la methode restent lisibles a cote. Elles
l'etaient de bronze a la zone or, et se perdaient au dernier metre.
lenaic force-pushed lenaic/199-nuls-non-ecrases from c99fa89bcf
All checks were successful
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 40s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 7s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 18s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m19s
to 622d2ec4d6
All checks were successful
Intégration / Tableau de bord — dépendances, tests et construction (pull_request) Successful in 38s
Intégration / Contrôles statiques du dépôt (pull_request) Successful in 8s
Intégration / Workflows — lint et audit de sécurité (pull_request) Successful in 18s
Intégration / Python — qualité, tests et dépendances (pull_request) Successful in 6m0s
2026-09-08 12:33:13 +00:00
Compare
gabriel requested reviews from gabriel and removed review requests for olivier, marvin 2026-09-08 12:41:39 +00:00
gabriel approved these changes 2026-09-08 12:41:49 +00:00
lenaic merged commit c28c282672 into develop 2026-09-08 12:42:09 +00:00
lenaic deleted branch lenaic/199-nuls-non-ecrases 2026-09-08 12:42:09 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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!201
No description provided.