Regression-tested behaviour
These regression cases are used to check that important parsing, time-handling, data-quality, calculation and scenario behaviours remain stable as the application changes. They are this project's own automated tests. They are not an independent validation, an external audit, a certification or any form of regulatory, engineering or meter approval.
Input formats
Automated regression coverage for reading and interpreting meter files.
- Condition tested
- European-style CSV files
- Verified behaviour
- Semicolon delimiters, decimal commas, separate date and time columns and day-first dates are detected and interpreted as the source data specifies.
- Condition tested
- Timestamp column layouts
- Verified behaviour
- A single combined timestamp column and separate date and time columns both resolve to the same local interval timestamps.
- Condition tested
- Excel date systems
- Verified behaviour
- Workbooks using the 1900 and the 1904 date system decode to the same instants, and the fictional 1900-02-29 serial is rejected rather than turned into a date.
- Condition tested
- kW and kWh source data
- Verified behaviour
- Equivalent kW and kWh source data produces the same analysis across the supported reading intervals covered by the conversion tests.
- Condition tested
- End-stamped intervals
- Verified behaviour
- A timestamp marking the end of its interval is normalized back to the interval it describes using the effective interval duration.
| Condition tested | Verified behaviour |
|---|---|
| European-style CSV files | Semicolon delimiters, decimal commas, separate date and time columns and day-first dates are detected and interpreted as the source data specifies. |
| Timestamp column layouts | A single combined timestamp column and separate date and time columns both resolve to the same local interval timestamps. |
| Excel date systems | Workbooks using the 1900 and the 1904 date system decode to the same instants, and the fictional 1900-02-29 serial is rejected rather than turned into a date. |
| kW and kWh source data | Equivalent kW and kWh source data produces the same analysis across the supported reading intervals covered by the conversion tests. |
| End-stamped intervals | A timestamp marking the end of its interval is normalized back to the interval it describes using the effective interval duration. |
Time handling
Automated regression coverage for timezones and daylight saving clock changes.
- Condition tested
- Meter timezone selection
- Verified behaviour
- Offset-free local timestamps are interpreted in the selected meter timezone; results do not change because the computer running the browser is in another timezone.
- Condition tested
- Spring-forward clock change
- Verified behaviour
- Local timestamps that do not exist during the clock change are excluded and reported rather than shifted into another hour.
- Condition tested
- Fall-back complete double pass
- Verified behaviour
- A complete, evenly spaced double pass through the repeated hour is resolved into two distinct real instants when the cadence-consistent assignment is unique.
- Condition tested
- Other fall-back patterns
- Verified behaviour
- Analysis stops and asks for a decision rather than guessing an ambiguous local time.
- Condition tested
- Decisions on ambiguous readings
- Verified behaviour
- Keeping the first pass, keeping the second pass and excluding the ambiguous readings are each covered by regression tests.
| Condition tested | Verified behaviour |
|---|---|
| Meter timezone selection | Offset-free local timestamps are interpreted in the selected meter timezone; results do not change because the computer running the browser is in another timezone. |
| Spring-forward clock change | Local timestamps that do not exist during the clock change are excluded and reported rather than shifted into another hour. |
| Fall-back complete double pass | A complete, evenly spaced double pass through the repeated hour is resolved into two distinct real instants when the cadence-consistent assignment is unique. |
| Other fall-back patterns | Analysis stops and asks for a decision rather than guessing an ambiguous local time. |
| Decisions on ambiguous readings | Keeping the first pass, keeping the second pass and excluding the ambiguous readings are each covered by regression tests. |
Data quality
Automated regression coverage for how imperfect data is reported and handled.
- Condition tested
- Missing intervals
- Verified behaviour
- Reported as missing; nothing is interpolated or filled.
- Condition tested
- Duplicate readings
- Verified behaviour
- Identical duplicate readings are removed and reported. Conflicting duplicates block analysis rather than forcing a choice between values.
- Condition tested
- Unreadable timestamps or values
- Verified behaviour
- A small number of unreadable timestamps or values can be excluded and reported while the remaining usable rows are analyzed.
- Condition tested
- Incomplete timestamps
- Verified behaviour
- Date-only or time-only values are treated as incomplete rather than being given an assumed date or time; using such a column as a complete timestamp blocks analysis.
- Condition tested
- Negative readings
- Verified behaviour
- Negative readings are retained, flagged and included in calculations rather than silently discarded.
| Condition tested | Verified behaviour |
|---|---|
| Missing intervals | Reported as missing; nothing is interpolated or filled. |
| Duplicate readings | Identical duplicate readings are removed and reported. Conflicting duplicates block analysis rather than forcing a choice between values. |
| Unreadable timestamps or values | A small number of unreadable timestamps or values can be excluded and reported while the remaining usable rows are analyzed. |
| Incomplete timestamps | Date-only or time-only values are treated as incomplete rather than being given an assumed date or time; using such a column as a complete timestamp blocks analysis. |
| Negative readings | Negative readings are retained, flagged and included in calculations rather than silently discarded. |
Analysis and charts
Automated regression coverage for cadence handling, summary figures and chart data.
- Condition tested
- Reading-interval detection
- Verified behaviour
- 5, 10, 15, 30 and 60-minute cadences are detected where possible and become the active default; a manual choice can override detection.
- Condition tested
- Gaps versus cadence changes
- Verified behaviour
- An isolated gap remains missing data; a sustained cadence change is treated as a different regime and blocks whole-file analysis.
- Condition tested
- Per-segment mixed-cadence analysis
- Verified behaviour
- A detected segment is analyzed with its own cadence, and every boundary reading belongs to exactly one regime according to start or end timestamp semantics.
- Condition tested
- Summary calculations
- Verified behaviour
- Conversion between kW and kWh, total energy, covered hours, average demand, maximum interval demand and load factor are checked against worked examples and equivalent source representations.
- Condition tested
- Percentiles
- Verified behaviour
- The 95th and 99th percentile convention is deterministic and produces the same result regardless of source-row order.
- Condition tested
- Load duration curve
- Verified behaviour
- The curve remains ordered from highest to lowest demand.
- Condition tested
- Monthly and time-of-day views
- Verified behaviour
- Monthly maxima and weekday and time-of-day values match the underlying intervals, and slots without observations remain marked as no data.
- Condition tested
- Profile rendering with missing data
- Verified behaviour
- The chronological profile breaks across genuine missing intervals rather than drawing through them, and those gaps remain present after chart simplification.
- Condition tested
- Single-interval input
- Verified behaviour
- A single valid interval still produces finite figures and readable charts.
| Condition tested | Verified behaviour |
|---|---|
| Reading-interval detection | 5, 10, 15, 30 and 60-minute cadences are detected where possible and become the active default; a manual choice can override detection. |
| Gaps versus cadence changes | An isolated gap remains missing data; a sustained cadence change is treated as a different regime and blocks whole-file analysis. |
| Per-segment mixed-cadence analysis | A detected segment is analyzed with its own cadence, and every boundary reading belongs to exactly one regime according to start or end timestamp semantics. |
| Summary calculations | Conversion between kW and kWh, total energy, covered hours, average demand, maximum interval demand and load factor are checked against worked examples and equivalent source representations. |
| Percentiles | The 95th and 99th percentile convention is deterministic and produces the same result regardless of source-row order. |
| Load duration curve | The curve remains ordered from highest to lowest demand. |
| Monthly and time-of-day views | Monthly maxima and weekday and time-of-day values match the underlying intervals, and slots without observations remain marked as no data. |
| Profile rendering with missing data | The chronological profile breaks across genuine missing intervals rather than drawing through them, and those gaps remain present after chart simplification. |
| Single-interval input | A single valid interval still produces finite figures and readable charts. |
Scenarios
Automated regression coverage for the additional-load and peak-limit what-if calculations.
- Condition tested
- Additional load over complete and partial intervals
- Verified behaviour
- A constant added load produces the expected energy, with partial interval overlap applied proportionally to the real overlap time.
- Condition tested
- Overnight windows
- Verified behaviour
- Schedules that cross midnight remain one continuous local-time window.
- Condition tested
- Schedules across a clock change
- Verified behaviour
- Elapsed time follows real clock time through daylight saving changes, so a nominal eight-hour local window may contain seven or nine real hours.
- Condition tested
- Intervals without meter data
- Verified behaviour
- Only observed meter intervals are changed; missing observations are never created to complete a scenario.
- Condition tested
- Schedule coverage
- Verified behaviour
- Requested schedule hours, hours with meter observations and the resulting coverage are calculated for both complete and incomplete coverage.
- Condition tested
- Invalid scenario inputs
- Verified behaviour
- Negative added load, an equal start and end time and a negative peak limit are rejected.
- Condition tested
- Scenario immutability
- Verified behaviour
- The underlying measured profile is not modified; removing the scenario returns the original results.
- Condition tested
- Peak-limit analysis
- Verified behaviour
- Intervals above the limit, the largest overshoot, the energy above the limit, affected days and runs of consecutive exceeding intervals are reported. Nothing is shifted or reduced.
- Condition tested
- Peak limit with an active scenario
- Verified behaviour
- Peak-limit analysis uses the active additional-load scenario while it is applied and returns to the original profile when the scenario is removed.
| Condition tested | Verified behaviour |
|---|---|
| Additional load over complete and partial intervals | A constant added load produces the expected energy, with partial interval overlap applied proportionally to the real overlap time. |
| Overnight windows | Schedules that cross midnight remain one continuous local-time window. |
| Schedules across a clock change | Elapsed time follows real clock time through daylight saving changes, so a nominal eight-hour local window may contain seven or nine real hours. |
| Intervals without meter data | Only observed meter intervals are changed; missing observations are never created to complete a scenario. |
| Schedule coverage | Requested schedule hours, hours with meter observations and the resulting coverage are calculated for both complete and incomplete coverage. |
| Invalid scenario inputs | Negative added load, an equal start and end time and a negative peak limit are rejected. |
| Scenario immutability | The underlying measured profile is not modified; removing the scenario returns the original results. |
| Peak-limit analysis | Intervals above the limit, the largest overshoot, the energy above the limit, affected days and runs of consecutive exceeding intervals are reported. Nothing is shifted or reduced. |
| Peak limit with an active scenario | Peak-limit analysis uses the active additional-load scenario while it is applied and returns to the original profile when the scenario is removed. |
Additional browser checks
The checks below were carried out manually in a browser and are not part of the automated regression suite.
- Header-only file with no data rows
- A file containing column headers but no data rows was checked to ensure analysis stops cleanly rather than producing empty or misleading results.
- Clock-change day with explicit UTC offsets
- A complete clock-change day supplied with explicit UTC offsets was manually checked to preserve the distinct real instants and the expected scenario duration and coverage behaviour.
Scope
Regression testing includes a 100,000-row, 5-minute UTC dataset, checked for correct figures and no data-quality issues. It is not a speed measurement — actual browser speed depends on your device.
These cases verify specific behaviours that are important to electricity interval-data analysis. They are not a claim that every meter format or edge case has been tested.