Chantier etape 3 : estimateur de ressource PV, apres deux approches ecartees

RESOURCE_ESTIMATE.js. Recalage de la prevision : ecarte, la censure est
correlee au beau temps (facteur 4,29 a 9 h sur 27 echantillons contre 0,48 a
15 h sur 3), les donnees manquantes ne le sont pas au hasard. Forme
geometrique : ecartee, un plan unique ajuste sur les heures propres converge
sur plein est 20 degres et predit 2,0 % de la journee a 18 h contre 5,8 %
mesures — le champ a plusieurs orientations que ce modele ne represente pas.

Retenu : forme = enveloppe horaire demontree (comportement reel du champ, sans
modele), magnitude = prevision Forecast.Solar (meteo, insensible a notre
batterie). L'enveloppe de l'apres-midi etant elle-meme censuree, le noeud
publie un indice de confiance et signale les heures minorees au lieu de les
presenter comme fiables. Sans enveloppe, il se declare inutilisable plutot que
d'inventer une forme.

Defaut trouve au passage : l'orientation declaree a Forecast.Solar ne
correspond pas au champ. Matin 07-11 h, 15,1 % de la journee prevus contre
39,3 % reels ; apres-midi 14-18 h, 52,1 % contre 35,2 %. Les totaux
journaliers tiennent, la repartition intra-journaliere est inutilisable.

Suite portee a 17 scenarios.

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-24 15:15:49 +02:00
parent d0149dd2a0
commit 180a1f3db5
5 changed files with 294 additions and 3 deletions

View File

@@ -84,3 +84,61 @@ export const profileScenarios = [
},
},
];
// --- RESOURCE_ESTIMATE -------------------------------------------------
const envelope = JSON.parse(fs.readFileSync(path.join(HERE, 'fixture-envelope.json'), 'utf8'));
const MIDDAY = Date.parse('2026-08-24T12:30:00+02:00');
export const resourceScenarios = [
{
node: 'RESOURCE_ESTIMATE',
id: 'ressource-repartition-prevision',
label: 'Prévision du jour répartie sur la forme démontrée, sans dépasser le total prévu',
snapshot: {
nowMs: MIDDAY,
forecast_today_remaining_kwh: '15.9',
forecast_tomorrow_kwh: '29.1',
envelope_kwh: envelope.envelope_kwh,
censorship_rate: envelope.censorship_rate,
},
expect: {
usable: true,
todayExpected: 15.9,
tomorrowExpected: 29.1,
// Le milieu et la fin de journée reposent sur une forme minorée :
// la confiance doit s'effondrer, pas rester silencieusement à 1.
shapeConfidenceBelow: true,
},
},
{
node: 'RESOURCE_ESTIMATE',
id: 'ressource-matin-forme-fiable',
label: 'Projection faite au petit matin : la forme du matin est propre, la confiance doit être bonne',
snapshot: {
nowMs: Date.parse('2026-08-24T06:30:00+02:00'),
forecast_today_remaining_kwh: '30',
forecast_tomorrow_kwh: '0',
envelope_kwh: envelope.envelope_kwh,
censorship_rate: envelope.censorship_rate,
},
expect: {
usable: true,
todayExpected: 30,
},
},
{
node: 'RESOURCE_ESTIMATE',
id: 'ressource-sans-enveloppe',
label: 'Aucune enveloppe fournie : le nœud se déclare inutilisable au lieu d\'inventer une forme',
snapshot: {
nowMs: MIDDAY,
forecast_today_remaining_kwh: '15.9',
forecast_tomorrow_kwh: '29.1',
},
expect: {
usable: false,
todayExpected: 0,
tomorrowExpected: 0,
},
},
];