Bilan : reserve d orage, en mode ombre

Une coupure reseau n arrete pas l installation : le solaire et la batterie
continuent, seul le filet de secours disparait. La reserve a tenir est donc la
couverture prudente p80 que le bilan calcule deja — aucune constante nouvelle.
En deficit c est la fenetre traversee, en surplus la prochaine, car a 15 h la
reponse « rien a couvrir » est exacte et inutile.

Le seuil d activation est la vigilance orange, echelle officielle de
Meteo-France et non un nombre choisi ici. Le snapshot lit l alerte sans
connaitre la commune, donc le code marche des l installation de l integration
et publie « indisponible » en attendant.

Tests 38 -> 42. Le fixture du test de perimetre ombre ne contenait pas storm :
les nouvelles ecritures n etaient pas couvertes. Corrige, assertion explicite,
preuve par mutation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
Tallagrand Thierry
2026-08-27 12:05:15 +02:00
parent 99aba9da0d
commit cf7eb47356
9 changed files with 294 additions and 5 deletions

View File

@@ -30,6 +30,13 @@ const BALANCE_OK = {
},
vehicle: { surplusAvailableKwh: 20.17 },
confidence: { deficitTrustworthy: true },
// La réserve d'orage fait partie de la sortie normale de BALANCE : elle doit
// figurer ici, sinon la garantie de périmètre ne couvre pas ses écritures.
storm: {
level: 'orange', known: true, active: true, phenomena: ['Orages'],
windowStartHour: null, reserveKwh: 2.42, reserveSocPct: 38.1,
socMarginPct: -17.1, covered: false, shortfallKwh: 2.57,
},
};
// Le même bilan, mais sans croisement trouvé sur l'horizon : le SOC requis
@@ -54,6 +61,9 @@ export const shadowScenarios = [
outOfScope: '',
wroteRequiredSoc: true,
wroteGridNeeded: true,
// Les 5 écritures de la réserve d'orage sont émises et restent dans le
// périmètre ombre.
wroteStorm: 5,
hasLogbook: true,
status: 'ok',
},