front+api : une heure sans mesure creuse un trou au lieu de passer pour une droite #217
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!217
Loading…
Reference in a new issue
No description provided.
Delete branch "lenaic/211-trous-visibles"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce que ça change
Une heure sans mesure disparaissait de la courbe au lieu d'y creuser un trou :
le trait reliait ses deux voisines et une panne de trois heures se lisait comme
une droite. Elle est désormais rendue, tracée comme un vide, et jamais comme un
zéro.
Closes #211
Preuve
Mesuré en production ce matin — cinq sites sur sept portaient une heure sans
moyenne, et rien à l'écran ne le disait :
Les cas ajoutés ont été passés contre le code d'AVANT, pour vérifier qu'ils
prouvent quelque chose :
Relecture
Où regarder en priorité
1. Un critère de l'énoncé n'est pas repris, et c'est assumé. Le ticket
demande
spanGaps: falsesurGraphiqueSite.vueetGraphiqueConsommation.vue.Les deux sont des diagrammes en barres, pas des courbes :
spanGapsn'y aaucun effet, et une valeur nulle y laisse déjà un vide. L'intention est tenue,
l'option ne l'aurait pas été. À contredire si vous préférez la lettre.
2. Le contrat devient nullable, et trois endroits y étaient exposés.
PointSerieOut.valeur_kwpasse àfloat | None. Sans garde,round(float(None))levait,
max()comparaitNoneà un flottant, et l'écart à la référencedivisait sur un trou. Les trois sont protégés, avec un helper qui NE classe pas
les trous : un trou n'est pas un creux.
3. Deux défauts trouvés en route, hors énoncé mais dans le sujet.
moyenneDesommait lesnullcomme des zéros tout en les gardant audénominateur. La ligne de moyenne du graphique affichait donc une
consommation inférieure à la réalité, sans que rien ne le dise. Ce défaut
était dormant : il ne se réveillait qu'avec l'arrivée des valeurs nulles.
MicroCourbe.vueest la seule vraie courbe de l'écran, et elle filtraitles trous avant de placer ses abscisses. Le trait les traversait et l'axe se
resserrait — exactement le défaut du titre du ticket, en vignette de 92 px.
Elle trace maintenant un tronçon par suite continue, pose une pastille sur
les mesures isolées (sans quoi elles disparaîtraient), et son équivalent
textuel annonce les heures manquantes aux lecteurs d'écran.
4. Ce que ça ne fait pas. Combler les heures manquantes. Ce ticket les
MONTRE — les combler serait exactement l'erreur que le #199 a corrigée ailleurs.
Relu, et corrigé sur la branche (
ff9ef62) : je pousse plutôt que de te renvoyer la PR, on n'a pas le temps d'un aller-retour.Ce qui manquait
ProfilHoraireParc.vueconsomme la même série queMicroCourbeetGraphiqueSite—store.profilParc, servi parserie_parcque cette PR rend nullable — mais n'avait pas été adapté. Reproduit sur ta branche avec trois points dont celui du milieu ànull:Deux défauts, tous deux sur le graphique principal de l'écran parc :
ProfilHoraireParc.vue:116—y(null)vautY1 - (null / haut) * (Y1 - Y0), soit la ligne de base. Le trait plongeait à zéro sur chaque heure sans mesure. C'est pire que la droite que le ticket corrige : une panne se lisait comme une consommation nulle relevée.ProfilHoraireParc.vue:143-144—null < 1000est vrai,nullse comparant comme zéro. Le trou devenait le minimum du parc, et le résumé lu à voix haute annonçait « minimum — kW ».Ce que j'ai poussé
Le même traitement que
MicroCourbe, puisque c'est le même problème : tronçons continus (une polyligne par tronçon), pastille pour les heures mesurées seules entre deux trous, abscisse gardée sur le rang dans la série pour que l'axe ne se resserre pas, extrêmes cherchés sur les seules heures mesurées, et le nombre de trous annoncé dans le résumé. Une fenêtre entièrement creuse dit « aucune mesure sur les 24 heures de la période » au lieu de « indisponible » — les seaux sont là, aucun n'a de valeur.Sept cas ajoutés dans
ProfilHoraireParc.test.js. Suite front : 482 verts (475 avant).Le reste
Vérifié et RAS :
GraphiqueConsommations'en sort seul (Chart.js laisse le trou,formaterKw(null)rend « — »,moyenneDeest corrigé ici). Côté SQL, retirermoyenne_kw is not nullne change aucun agrégat —sum()etavg()ignorent les nuls — seuls les seaux entièrement muets apparaissent désormais, ce qui est exactement le but.Point mineur non bloquant, pour plus tard :
_POINT_ABSENTgardevaleur_kw=0.0, donc une fenêtre entièrement creuse affiche pointe/creux à « 0 kW le 01/01/1970 ». Cas limite pré-existant, juste devenu atteignable.Approuvée.