← EnergyViewReviewvoortgang — 28 oktober 2026
P0 — bron, pakket, tests en heffingen
De live bron is checkout bb9be8842ac0c6e0de6771a5667348bdce4f1001; de oudere in de publiek beschikbare map meegeleverde installatie-ZIP is verwijderd. Beide buildscripts sluiten de oude archieven expliciet uit en de verwijzingen zijn verwijderd. Pages wordt tweemaal gebouwd en de hashes worden vergeleken in tests/deployment-source.mjs. Dit is geen bewijs dat willekeurige afzonderlijke uitvoeringen met verschillende toolversies identiek zijn.
De baseline op de actuele checkout was 101 van 116 tests geslaagd. De review had 51 oudere tests tegen een ander pakket getest, niet dezelfde bron/testset. De huidige volledige suite is uitgevoerd na triage; raadpleeg npm test voor actuele aantallen.
report-isolation: de applicatie declareert warmingReport; de VM-test extraheert één functie zonder haar modulescope. Testcontext uitgebreid.report-worker: de actuele worker en staged-resulttests slagen; de oude geïsoleerde worker-API is niet dezelfde interface.heatpump-economics, gas-purchase: de huidige specifieke scope-tests slagen. Dit is geen visuele browsercontrole; gedeelde totaalvergelijkingen kunnen bewust stroom en gas combineren.fair-charging, heatpump-profile, report-charts, solar-investment: huidige numerieke tests slagen; er is geen berekeningscode gewijzigd. In solar-investment zijn nominale capaciteit en bruikbare capaciteit afzonderlijk getest. Een groene test bewijst geen overeenstemming met alle contracten of primaire wettelijke bronnen.forward-app, customer-app: DOM-stubs ondersteunen nu event listeners en animatieframes; de leverancierstest gebruikt de bestaande zoekfunctie omdat slechts een beperkt aantal leveranciers standaard zichtbaar is.- Overige falende regressies betroffen verouderde tekst/structuur, nieuwe globale afhankelijkheden in geïsoleerde VM-tests, en de gewijzigde selectie van het voorgestelde contract in de batterijtest. De laatste vergelijkt nu de berekende rij met het werkelijk geselecteerde contract, niet met een ander huidig contract. De rapporttest voor PV gebruikt afzonderlijke profielen per dakvlak zoals de huidige berekening vereist.
npm test ontdekt nu elk .mjs-testbestand, draait door na fouten, toont aantallen en blijft falen bij één of meer fouten; GitHub Actions voert dit uit. Een extern CI-resultaat is nog niet beschikbaar.docs/parameter-bronnen-2026.md: residentieel en niet-residentieel energiefonds en capaciteitstarief aan primaire bronnen getoetst. Individuele distributiebedragen en federale accijnstarieven zijn nog niet onafhankelijk tegen hun primaire 2026-tarieftabel gevalideerd. Ze zijn niet aangepast.
P1 — eerste correctie
De zonne-API onderscheidt ongeldige aanvragen (400), externe fouten (502) en time-outs (504). Interne foutdetails gaan niet naar de cliënt. tests/solar-api-errors.mjs test de daadwerkelijk gebouwde Pages-worker. Andere P1-taken zijn nog niet afgerond: edge-cache, rate-limiting, CSP/iframebeleid, performance, snelle instap en versheidslabels vereisen verdere uitwerking en echte metingen.
P2
Nog niet uitgevoerd. Affiliate-contracten, juridische toetsing, Lighthouse/axe met echte browser en geplande updates zijn niet vastgesteld.
P1 — vervolg
- Excelbibliotheek laadt pas bij een Excelimport; gelijktijdige aanvragen delen hetzelfde laadproces. Tests:
excel-loader, customer-app, forward-app. Laadtijdwinst is nog niet op een echt mobiel toestel gemeten. - PVGIS-resultaten kunnen 24 uur via Cloudflare edge-cache worden hergebruikt, met gehashte cachekey; de aanvraagparameters worden niet als apart
input-veld in de gedeelde cache opgenomen. Het zonneprofiel zelf is locatieafhankelijk en blijft dus een indirect herleidbaar gegeven; de privacytekst vermeldt dit. Meetbestanden worden niet gecachet. - De Worker ondersteunt een optionele Cloudflare
API_RATE_LIMITER-binding. Zonder geconfigureerde binding is er geen rate limiting. Met binding blokkeert de Worker bij limietoverschrijding en faalt gesloten bij een bindingsfout. De hostingconfiguratie is niet automatisch aangepast. Cloudflare Pages-ondersteuning voor de gekozen binding moet bij installatie worden gecontroleerd; een Cloudflare WAF/rate-limitregel is een alternatief. Zie https://developers.cloudflare.com/workers/runtime-apis/bindings/rate-limit/ en https://developers.cloudflare.com/pages/functions/bindings/. /api/health toont een deterministische versie en datadatums. Beide distributiepaden gebruiken dezelfde metadatafunctie; de footer toont de tariefmaand en promotiedatum. Dit dekt nog niet elk afzonderlijk resultaat of externe live bronnen. Tests: health-metadata, worker-cache-rate.- Permissions-Policy voor camera, microfoon en geolocatie toegevoegd. CSP en frame-ancestors zijn nog niet geconfigureerd: de toegestane Home Assistant-origin is onbekend en een algemene uitzondering zou geen doeltreffende bescherming bieden. Niet als afgerond aanmerken.
- Nog niet uitgevoerd: echte browsermetingen, Lighthouse/axe, modulebundeling, datasplitsing, contenthashes, volledige scheiding beheerinterface, demo/instapbenchmark en versheidsinformatie per resultaat.
P0 — resterende verificatie
De federale accijnzen kunnen afhankelijk zijn van toepassingsperiode en prijsbeschermingsmechanisme. Een voorstel van wet van 18 juli 2026 wijzigt volgens de federale overheid mogelijk de indeling; een voorstel bewijst nog niet dat deze wijziging in werking is getreden. Zie https://news.belgium.be/nl/energienorm-aanpassing-accijnstarieven-voor-elektriciteit-tweede-lezing. De exacte bedragen zijn nog niet tegen een geldende primaire tarieflijst per periode vastgesteld; de rekenlogica is niet veranderd.
Aanvulling — beperking API-verkeer
Als geen Cloudflare-binding beschikbaar is, wordt per instantie op basis van de Cloudflare-IP-header na 60 aanvragen per minuut tijdelijk een 429 teruggegeven. Geheugen wordt begrensd. Dit is best-effort: meerdere instanties en Cloudflare-locaties delen geen teller, zonder IP-header is er geen identificatie en de bescherming vervalt bij herstart. Een bindende WAF- of Cloudflare-rate-limitingregel blijft noodzakelijk. /api/health toont de actieve modus. worker-cache-rate.mjs controleert zowel de lokale grens als de optionele externe binding.
Vervolg — 28 oktober 2026
- Een beperkte CSP is toegevoegd op beide hostingpaden: object-src 'none', base-uri 'self' en form-action 'self'. Ze beperkt niet welke scripts kunnen uitvoeren en biedt geen frame-ancestors-bescherming; die blijft open tot de toegestane Home Assistant-origin kan worden vastgesteld en getest. De compatibiliteit van een echte HA-iframe is nog niet getest.
security-headers.mjs controleert de headers. - Beperkte echte browsercontrole op de lokale preview: handmatige instap zonder Fluvius-bestand opent het veld voor jaarverbruik; invoer van de voorbeeldpostcode 9000 toont Fluvius Imewo. Er is geen volledige contractvergelijking, timingbenchmark, Lighthouse, axe of schermlezertest uitgevoerd.
- Officiële nettarieven voor 2026 zijn beschikbaar bij de Vlaamse Nutsregulator: https://www.vlaamsenutsregulator.be/elektriciteit-en-aardgas/nettarieven/hoeveel-bedragen-de-distributienettarieven. De dataset is nog niet veld voor veld met deze werkboeken vergeleken.