diff --git a/TODO.md b/TODO.md index 1b86822..5844e35 100644 --- a/TODO.md +++ b/TODO.md @@ -2,20 +2,17 @@ ## Ouvert au 2026-08-27 -- [ ] 🔴 **Bilan JOURNALIER — il n'en existe aucun dans l'app.** Les quatre tuiles du - tableau de bord (`features/dashboard/widgets/kpi_row.dart`) mêlent deux natures de - grandeur, et aucune n'est journalière : *Autoconsommation* et *Autonomie* sont des - **pourcentages instantanés**, *Vers réseau* et *Depuis réseau* des **kWh cumulés depuis - l'origine** — `totalReturn` / `totalAcquisition` ne sont pas remis à zéro chaque nuit. - Le libellé disait « aujourd'hui » ; il porte « · cumulé » depuis, mais **le bilan du jour - reste à écrire**. - - il passe par `Energy.GetPowerBalanceLogs` avec des bornes à **minuit local**, jamais par - les totaux de `GetPowerBalance` ; - - piège vérifié : les entrées de log portent `production` / `consumption` / `acquisition` - / `storage`, **sans** le préfixe `currentPower` de `GetPowerBalance`. Réutiliser les - mauvaises clés ne produit **aucune erreur** — tout tombe sur `0` ; - - `.75` publie des cumulés corrompus (9,1e+33 kWh exportés) : `EnergyData.isPlausibleKwh` - existe pour ça, ne pas le contourner. +- [x] ~~🔴 **Bilan JOURNALIER**~~ — **fait le 2026-08-28.** Les quatre tuiles montrent la + journée, sous un en-tête « Aujourd'hui » qui le dit une fois. Méthode : différence des + compteurs entre minuit local et maintenant, jamais l'intégration des puissances — + mesurée contre estimée, 0,8 % d'écart sur `.75`. Le contrôle qui la valide est + l'identité *production + soutiré == consommation + injecté*, vérifiée exactement sur le + banc. + - **Deux bugs d'unité trouvés en chemin** : les compteurs `total*` sont en **kWh** et le + modèle les nommait `Wh`. L'écran Énergie les divisait donc encore par mille — une + journée de 78 kWh s'y lisait « 78 Wh » — et la simulation accumulait des Wh. + - Vérifié sur appareil contre `.75` en lecture seule. Le passage a trouvé quatre libellés + tronqués qu'aucun des 138 tests unitaires ne pouvait voir. - [ ] ❓ **« ECS d'abord, batterie ensuite » — à porter au moteur.** Demandé le 2026-08-27, et **pas exprimable aujourd'hui**. `batteryLevelConsideration` fait l'inverse : il annule