Electricity plans / field notes

For developers & agents

A static, local-first tool with named controls and a reproducible data contract.

Use the same calculation path as the interface

The side-effect-free assets/replay.mjs module exports validatePlan, computeReplay, importUsage, exampleState, and reportFor. It imports the existing core and domain modules. A module Worker invokes computeReplay in the browser. There is no remote API and no authentication requirement.

Interact through explicit controls

The planner uses labeled native inputs with stable field IDs, such as field-flat and field-timezone. Import buttons open local file inputs. Dialogs state the scope of replacements and deletions. Results expose flat-total, tou-total, and shift-total as separate outputs. Wait for calculation-status to report a ready comparison; aria-busy marks in-flight results. Do not treat an example or a pending result as user evidence.

Plan and report contracts

The normalized plan JSON has product, version 1, fields, tables.usage, demo, and optional source. The schema describes exported normalized values, while the UI also accepts numeric strings and normalizes them. Unknown input properties are dropped. Reports include modelVersion, currency, inputs, result, coverage, and limitations. All monetary values use USD. The legacy version-1 saved-plan key and original fields remain compatible.

Protect private data

File selection, local saving, replacement, and deletion are explicit user actions. Do not upload exported meter data to an external service without authorization. Saved plan names and source filenames are untrusted text. The app escapes them before rendering.

Machine-readable resources

Normalized plan JSON Schema · Small example plan · CSV template · Tool discovery text

Before choosing a plan

Use the rate-plan verification checklist to confirm current tariff terms, fees, and your usage inputs before relying on the comparison.

Reference sources

These sources explain utility-rate concepts. They do not verify the sample rates or your uploaded data. Model 1.1.0.

Try your comparison