Traçabilité : le panneau appelle « valeur affichée » la minute pile, la courbe trace la moyenne de l'heure #215

Closed
opened 2026-09-08 14:42:37 +00:00 by lenaic · 2 comments
Owner

Exigence couverte

ENF-07 · Auditabilité : toute valeur affichée remonte à sa lecture d'origine et à sa méthode. EF-04.

Épreuve servie

EC05 · Data, ETL et BI

Charge estimée

une demi-journée

Ce qu'on veut obtenir

Le panneau de traçabilité étiquette « valeur affichée » un nombre qui n'est pas celui que la courbe affiche.

La courbe d'un site a un pas d'UNE HEURE : chaque point est la moyenne des soixante minutes, lue dans mesure_horaire. Le panneau, lui, appelle /v1/sites/{id}/tracabilite avec l'horodatage du point, et cette route lit public.mesure à la clé exacte (site_id, horodatage) — donc la minute pile du haut de l'heure, une minute sur soixante.

Relevé sur SITE003 en production, ce jour :

 heure    courbe (moyenne)   panneau (minute pile)   écart    minutes retenues   méthode
 11:00        747,58 kW            722,95 kW        -24,63          60           measured
 10:00        742,39 kW            776,84 kW        +34,45          60           measured
 09:00        758,56 kW              (aucune)          —             7           none
 08:00        788,35 kW            788,35 kW          0,00           2           forward_fill
 07:00        755,39 kW            725,58 kW        -29,81          60           measured

Trois défauts distincts, et le deuxième est le pire.

1. L'écart de valeur. Vingt-cinq à trente-cinq kW d'écart sur des points courants, systématique et non exceptionnel. Le mot « affichée » est faux.

2. La contradiction franche. À 09:00 la courbe affiche 758,56 kW et la minute pile n'a AUCUNE valeur. La route lève alors SourceIndisponible et le routeur rend 503 : l'écran annonce « source indisponible » sur un point qu'il est en train de tracer. Le trait existe, sa justification dit qu'il n'y a rien.

3. La méthode ne se transpose pas. L'infobulle de la courbe porte un drapeau imputee calculé par bool_or sur les soixante minutes ; le panneau porte la méthode d'une seule. Les deux peuvent donc se contredire sur le même point, et le font.

Ce que la colonne minutes retenues révèle en plus. La moyenne de 09:00 est calculée sur SEPT minutes, celle de 08:00 sur DEUX. Elles s'affichent comme n'importe quelle autre heure. mesure_horaire.releves_pris_en_compte porte ce compte depuis la migration 0016 et personne ne le lit. Une moyenne horaire sur deux minutes n'est pas une moyenne horaire.

Pourquoi c'est grave au-delà de l'écran. L'ENF-07 est l'exigence d'auditabilité : « toute valeur affichée remonte à sa lecture d'origine et à sa méthode ». Le mécanisme est juste de bout en bout — la clé (site_id, horodatage) est commune de bronze à la zone or, c'est vérifié. C'est l'appariement côté front qui est faux : on remonte la lecture d'une minute et on la présente comme la justification d'une moyenne.

Découvert en préparant la vidéo de démonstration, sur le chapitre qui devait justement prouver l'auditabilité. En l'état, filmer ce panneau démontre le contraire de la thèse.

Critères d'acceptation

  • Le panneau ne dit plus « valeur affichée » quand le point de la courbe est une moyenne horaire : il nomme ce qu'il montre, la lecture d'une minute précise, avec cette minute en toutes lettres
  • Un point de courbe horaire ouvre une traçabilité qui décrit L'HEURE : nombre de minutes retenues, nombre écartées, répartition des méthodes sur l'heure
  • Un 503 sur la minute pile ne s'affiche plus sur un point que la courbe trace : soit la traçabilité horaire répond, soit le panneau dit pourquoi il ne peut pas descendre
  • La méthode montrée par le panneau et le drapeau imputee de l'infobulle ne peuvent plus se contredire : ils viennent de la même source
  • releves_pris_en_compte est rendu et affiché : une moyenne horaire calculée sur moins de la moitié de ses minutes le dit
  • La traçabilité à la minute reste atteignable, depuis une vue au pas de la minute, où l'appariement est exact

Comment on le vérifie

tests/unit/api/ : une heure dont la minute pile est nulle mais dont la moyenne existe ne doit plus produire un 503 sur un point tracé.

À la main sur enervision_prod, la requête du corps du ticket : sur les six dernières heures d'un site, aucun écart entre ce que la courbe affiche et ce que le panneau annonce comme étant cette valeur.

Côté front, un cas qui monte un point horaire et vérifie que le libellé du panneau ne promet pas « la valeur affichée ».

Hors périmètre

Changer le pas de la courbe. Une courbe 24 h au pas de la minute, c'est 1 440 points par site, ce n'est pas la réponse.

Changer mesure_horaire ou la traçabilité à la minute. Les deux sont justes chacune dans son grain ; c'est leur appariement qui est faux.

### Exigence couverte ENF-07 · Auditabilité : toute valeur affichée remonte à sa lecture d'origine et à sa méthode. EF-04. ### Épreuve servie EC05 · Data, ETL et BI ### Charge estimée une demi-journée ### Ce qu'on veut obtenir Le panneau de traçabilité étiquette « valeur affichée » un nombre qui n'est pas celui que la courbe affiche. La courbe d'un site a un pas d'UNE HEURE : chaque point est la moyenne des soixante minutes, lue dans `mesure_horaire`. Le panneau, lui, appelle `/v1/sites/{id}/tracabilite` avec l'horodatage du point, et cette route lit `public.mesure` à la clé exacte `(site_id, horodatage)` — donc **la minute pile du haut de l'heure**, une minute sur soixante. Relevé sur SITE003 en production, ce jour : ``` heure courbe (moyenne) panneau (minute pile) écart minutes retenues méthode 11:00 747,58 kW 722,95 kW -24,63 60 measured 10:00 742,39 kW 776,84 kW +34,45 60 measured 09:00 758,56 kW (aucune) — 7 none 08:00 788,35 kW 788,35 kW 0,00 2 forward_fill 07:00 755,39 kW 725,58 kW -29,81 60 measured ``` **Trois défauts distincts, et le deuxième est le pire.** **1. L'écart de valeur.** Vingt-cinq à trente-cinq kW d'écart sur des points courants, systématique et non exceptionnel. Le mot « affichée » est faux. **2. La contradiction franche.** À 09:00 la courbe affiche 758,56 kW et la minute pile n'a AUCUNE valeur. La route lève alors `SourceIndisponible` et le routeur rend 503 : l'écran annonce « source indisponible » sur un point qu'il est en train de tracer. Le trait existe, sa justification dit qu'il n'y a rien. **3. La méthode ne se transpose pas.** L'infobulle de la courbe porte un drapeau `imputee` calculé par `bool_or` sur les soixante minutes ; le panneau porte la méthode d'une seule. Les deux peuvent donc se contredire sur le même point, et le font. **Ce que la colonne `minutes retenues` révèle en plus.** La moyenne de 09:00 est calculée sur SEPT minutes, celle de 08:00 sur DEUX. Elles s'affichent comme n'importe quelle autre heure. `mesure_horaire.releves_pris_en_compte` porte ce compte depuis la migration 0016 et personne ne le lit. Une moyenne horaire sur deux minutes n'est pas une moyenne horaire. **Pourquoi c'est grave au-delà de l'écran.** L'ENF-07 est l'exigence d'auditabilité : « toute valeur affichée remonte à sa lecture d'origine et à sa méthode ». Le mécanisme est juste de bout en bout — la clé `(site_id, horodatage)` est commune de bronze à la zone or, c'est vérifié. C'est **l'appariement côté front** qui est faux : on remonte la lecture d'une minute et on la présente comme la justification d'une moyenne. Découvert en préparant la vidéo de démonstration, sur le chapitre qui devait justement prouver l'auditabilité. En l'état, filmer ce panneau démontre le contraire de la thèse. ### Critères d'acceptation - [ ] Le panneau ne dit plus « valeur affichée » quand le point de la courbe est une moyenne horaire : il nomme ce qu'il montre, la lecture d'une minute précise, avec cette minute en toutes lettres - [ ] Un point de courbe horaire ouvre une traçabilité qui décrit L'HEURE : nombre de minutes retenues, nombre écartées, répartition des méthodes sur l'heure - [ ] Un 503 sur la minute pile ne s'affiche plus sur un point que la courbe trace : soit la traçabilité horaire répond, soit le panneau dit pourquoi il ne peut pas descendre - [ ] La méthode montrée par le panneau et le drapeau `imputee` de l'infobulle ne peuvent plus se contredire : ils viennent de la même source - [ ] `releves_pris_en_compte` est rendu et affiché : une moyenne horaire calculée sur moins de la moitié de ses minutes le dit - [ ] La traçabilité à la minute reste atteignable, depuis une vue au pas de la minute, où l'appariement est exact ### Comment on le vérifie `tests/unit/api/` : une heure dont la minute pile est nulle mais dont la moyenne existe ne doit plus produire un 503 sur un point tracé. À la main sur `enervision_prod`, la requête du corps du ticket : sur les six dernières heures d'un site, aucun écart entre ce que la courbe affiche et ce que le panneau annonce comme étant cette valeur. Côté front, un cas qui monte un point horaire et vérifie que le libellé du panneau ne promet pas « la valeur affichée ». ### Hors périmètre Changer le pas de la courbe. Une courbe 24 h au pas de la minute, c'est 1 440 points par site, ce n'est pas la réponse. Changer `mesure_horaire` ou la traçabilité à la minute. Les deux sont justes chacune dans son grain ; c'est leur appariement qui est faux.
lenaic reopened this issue 2026-09-09 07:48:12 +00:00
Author
Owner

Rouvert : le défaut est toujours là. Vérifié sur enervision_prod ce matin, sur SITE003.

 heure    courbe    panneau « Valeur affichée »   écart
 05:00   749,40 kW          744,11 kW            -5,29
 04:00   757,55 kW          810,26 kW           +52,71
 03:00   763,90 kW          773,61 kW            +9,71
 02:00   738,56 kW          736,92 kW            -1,64

Dans le code de develop à l'instant :

  • GraphiqueSite.vue:261 appelle toujours store.chargerTracabilite(point.t) avec l'horodatage du point HORAIRE ;
  • TracabiliteDetail.vue étiquette toujours la ligne « Valeur affichée » ;
  • minutes_retenues et releves_pris_en_compte n'apparaissent nulle part dans l'API.

Ce que le #211 a réglé, et c'était utile : un clic sur un TROU n'ouvre plus un panneau vide. C'est le symptôme du 503 sur un point tracé, dans le cas où le point n'a pas de valeur du tout. Le cas majoritaire reste entier : le point a une valeur, le panneau en montre une autre, et les deux portent le même nom.

Ça compte au-delà de l'écran. PanneauIdentite.vue affirme mot pour mot « Chaque valeur affichée remonte à sa lecture et à sa méthode », c'est l'ENF-07, et c'est le chapitre de la vidéo de démonstration qui doit prouver l'auditabilité. En l'état, ce panneau démontre le contraire de ce qu'il annonce.

Je le prends ce matin.

Rouvert : le défaut est toujours là. Vérifié sur `enervision_prod` ce matin, sur SITE003. ``` heure courbe panneau « Valeur affichée » écart 05:00 749,40 kW 744,11 kW -5,29 04:00 757,55 kW 810,26 kW +52,71 03:00 763,90 kW 773,61 kW +9,71 02:00 738,56 kW 736,92 kW -1,64 ``` Dans le code de `develop` à l'instant : - `GraphiqueSite.vue:261` appelle toujours `store.chargerTracabilite(point.t)` avec l'horodatage du point HORAIRE ; - `TracabiliteDetail.vue` étiquette toujours la ligne **« Valeur affichée »** ; - `minutes_retenues` et `releves_pris_en_compte` n'apparaissent nulle part dans l'API. Ce que le #211 a réglé, et c'était utile : un clic sur un TROU n'ouvre plus un panneau vide. C'est le symptôme du 503 sur un point tracé, dans le cas où le point n'a pas de valeur du tout. Le cas majoritaire reste entier : le point a une valeur, le panneau en montre une autre, et les deux portent le même nom. Ça compte au-delà de l'écran. `PanneauIdentite.vue` affirme mot pour mot « Chaque valeur affichée remonte à sa lecture et à sa méthode », c'est l'ENF-07, et c'est le chapitre de la vidéo de démonstration qui doit prouver l'auditabilité. En l'état, ce panneau démontre le contraire de ce qu'il annonce. Je le prends ce matin.
lenaic self-assigned this 2026-09-09 07:48:12 +00:00
Author
Owner

Fermé : le correctif est en production et vérifié dans le conteneur qui sert.

sudo docker exec ev-api grep -c 'minutes_retenues' \
  /opt/api/enervision_api/dashboard/repository.py
7

Livré par la PR #224, fusionnée puis déployée ce jour. Le panneau ne dit plus « Valeur affichée » sur la lecture d'une minute : il montre deux blocs nommés, la moyenne de l'heure avec le nombre de minutes sur lequel elle porte, puis la lecture d'origine d'une de ces minutes, et une phrase qui dit que l'écart entre les deux est normal.

Le second défaut trouvé en route est fermé avec : releves_pris_en_compte remonte enfin jusqu'à l'écran, et une heure dont la moyenne porte sur moins de la moitié de ses minutes le signale.

Débloque le chapitre 03 de la vidéo de démonstration, qui devait prouver l'auditabilité et montrait l'inverse.

Fermé : le correctif est en production et vérifié dans le conteneur qui sert. ``` sudo docker exec ev-api grep -c 'minutes_retenues' \ /opt/api/enervision_api/dashboard/repository.py 7 ``` Livré par la PR #224, fusionnée puis déployée ce jour. Le panneau ne dit plus « Valeur affichée » sur la lecture d'une minute : il montre deux blocs nommés, la moyenne de l'heure avec le nombre de minutes sur lequel elle porte, puis la lecture d'origine d'une de ces minutes, et une phrase qui dit que l'écart entre les deux est normal. Le second défaut trouvé en route est fermé avec : `releves_pris_en_compte` remonte enfin jusqu'à l'écran, et une heure dont la moyenne porte sur moins de la moitié de ses minutes le signale. Débloque le chapitre 03 de la vidéo de démonstration, qui devait prouver l'auditabilité et montrait l'inverse.
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#215
No description provided.