[incident] Les courbes de consommation marquent tout un seau « reconstitué » dès une minute imputée #267
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision#267
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Symptôme observé
Sur la fiche d'un site et sur la courbe du parc, toutes les barres de consommation sortent hachurées « reconstitué (EF-04) », à toutes les fenêtres (24 h, 7 j, 30 j), alors que la quasi-totalité des minutes sont mesurées.
Constaté sur SITE005 (Hôpital Toulouse Purpan) : disponibilité 100,0 %, valeur courante « mesure directe », et pourtant 100 % des barres hachurées. L'exploitant lit « ce site n'est plus mesuré » là où il l'est.
Comment le reproduire
/sites/SITE005, période « 24 dernières heures », puis « 7 derniers jours ».valeur brute = valeur retenue, méthodemeasuredpour la plupart des minutes de l'heure.Cause trouvée
services/api/enervision_api/dashboard/repository.py: les trois requêtes de série (SQL_SERIE_DIX_MINUTES,SQL_SERIE_HEURE,SQL_SERIE_JOUR) posaientimputeeavecbool_or(methode_imputation in ('interpolated','forward_fill'))sur tout le seau. Une seule minute imputée sur 60 (barre horaire) ou sur 1 440 (barre journalière) marquait le seau entier. Un capteur légèrement instable mais à 100 % de disponibilité ressort donc « reconstitué » partout, à toutes les échelles.Correction appliquée
Les requêtes remontent le nombre de minutes reconstituées du seau (
count(*) filter (...)), et une fonction_seau_imputetranche : le seau est « reconstitué » quand ses minutes reconstituées atteignent au moins la moitié de ses minutes retenues (SEUIL_SEAU_IMPUTE = 0.5, constante unique). En deçà, la barre reste « mesuré » ; le détail minute par minute reste lisible dans l'infobulle et le panneau de traçabilité (EF-04). Le contrat de sortie (imputee: bool) et le front sont inchangés.Critères de clôture
imputee=false.imputee=true.imputee=false.Vérification
pytest tests/unit/api/test_dashboard_site_series.py -v— castest_une_minute_imputee_isolee_ne_signale_pas_le_seaupytest tests/integration/test_lectures_tableau_de_bord.py -v— cas paramétrétest_le_seau_est_impute_a_partir_de_la_moitie_de_ses_minutesExigence
EF-04 — « la valeur brute et la méthode restent lisibles à côté de la série ». Épreuve EC05.
Temps perdu
0 h 45