Le nombre de modules se lit, il ne se code plus
La courbe energie/SOC a ete mesuree sur sept modules. Retirer un module divise la capacite sans changer la forme de la courbe : les pentes sont donc mises a l'echelle du nombre reellement en service, lu dans input_number.evcs_balance_modules_en_service. Le controleur EVCS lit le meme helper pour sa capacite utile - les deux decrivent forcement le meme parc. Helper absent, illisible ou hors bornes => sept, la valeur de la mesure. Les 44 scenarios du bilan et les 80 golden passent donc sans qu'un seul attendu ait ete touche : la bascule ne change rien tant que personne ne l'ecrit. Deux scenarios couvrent la bascule elle-meme, l'un avec quatre modules (SOC exige 30,5 -> 35,2 %), l'autre avec une valeur aberrante qui doit retomber sur sept. Preuve par mutation : ignorer l'echelle fait tomber le premier et lui seul. Le genou a 33 % est conserve par PRUDENCE et non par mesure : l'hypothese est qu'il vient des cellules faibles du pack retire, donc qu'il disparait avec lui. Le garder revient a sous-estimer la reserve, c'est-a-dire a se tromper du bon cote. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -36,6 +36,56 @@ function horizonFrom(startIso, hours, production) {
|
||||
}
|
||||
|
||||
export const balanceScenarios = [
|
||||
{
|
||||
// Le parc a change deux fois en une semaine et rechangera cet hiver : le
|
||||
// nombre de modules se lit dans un helper au lieu d'etre code. Ce scenario
|
||||
// rejoue exactement la matinee du 24/08 avec quatre modules au lieu de
|
||||
// sept. Meme energie a couvrir, meme creneau — seule la capacite change,
|
||||
// donc le SOC exige monte de 30,5 a 35,2 %. Son jumeau ci-dessous, sans le
|
||||
// champ, prouve que l'absence du helper ne change rien.
|
||||
node: 'BALANCE',
|
||||
id: 'bilan-parc-reduit-a-quatre-modules',
|
||||
label: 'Pack ancien isole : quatre modules au lieu de sept, meme matinee du 24/08 → le SOC exige passe de 30,5 a 35,2 %',
|
||||
snapshot: {
|
||||
nowMs: Date.parse('2026-08-24T06:43:00+02:00'),
|
||||
consumption_p50: P50,
|
||||
consumption_p80: P80,
|
||||
horizon: horizonFrom('2026-08-24T06:43:00+02:00', 18, PROD_24_08),
|
||||
soc_percent: 21,
|
||||
usable_capacity_kwh: 15,
|
||||
soc_floor_percent: 22,
|
||||
modules_en_service: 4,
|
||||
},
|
||||
expect: {
|
||||
usable: true,
|
||||
crossingHour: 8,
|
||||
energyToCoverKwh: 0.82,
|
||||
requiredSocPct: 35.2,
|
||||
gridNeeded: true,
|
||||
prudentRequiredSocPct: 51.7,
|
||||
deficitTrustworthy: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
node: 'BALANCE',
|
||||
id: 'bilan-modules-valeur-aberrante-retombe-sur-sept',
|
||||
label: 'Helper illisible (0 module) : on retombe sur les sept de la mesure plutot que de diviser par zero',
|
||||
snapshot: {
|
||||
nowMs: Date.parse('2026-08-24T06:43:00+02:00'),
|
||||
consumption_p50: P50,
|
||||
consumption_p80: P80,
|
||||
horizon: horizonFrom('2026-08-24T06:43:00+02:00', 18, PROD_24_08),
|
||||
soc_percent: 21,
|
||||
usable_capacity_kwh: 15,
|
||||
soc_floor_percent: 22,
|
||||
modules_en_service: 0,
|
||||
},
|
||||
expect: {
|
||||
usable: true,
|
||||
requiredSocPct: 30.5,
|
||||
prudentRequiredSocPct: 41,
|
||||
},
|
||||
},
|
||||
{
|
||||
node: 'BALANCE',
|
||||
id: 'bilan-rejeu-24-08-matin',
|
||||
|
||||
Reference in New Issue
Block a user