Availability testing has no ASTM E2848. There is no published method to cite and no canonical report format to imitate — the contract itself is the standard. That puts an unusual burden on the availability test report: where a capacity test report can lean on a standard for its method, an availability report must carry its own definitions, print every threshold it used, and prove it applied them consistently. A report that just states "availability was 99.6%" has said almost nothing.
This article shows what carrying that burden looks like, using a complete sample report as the exhibit.
Download the sample report (PDF) — an eight-page availability test report for a fictional three-inverter rooftop plant over a five-day test window, generated with HelioTest. Free to download and share, no sign-up required.
The sample report: the verdict up front, and a summary that accounts for every charged minute behind it.
Rather than walking the document front to back, we will read it the way the counterparty's engineer actually will: start at the verdict on page one, then chase each number upstream until it bottoms out in raw minutes.
A Pass — With the Rough Edges Left Showing
Our sample capacity test report fails on purpose, because failing reports are the ones that get audited. The availability sample makes the opposite point: it passes at 99.6% against a 99.0% guarantee, and the interesting question is whether that pass would survive an audit.
Because it is not a spotless pass. The report openly carries:
- 35 of 92 permitted inverter-minutes consumed — a margin of +0.6 percentage points, comfortable but not lavish;
- 11 charged inverter-minutes with no documented event explaining them;
- a standing data-quality warning: no inverter had a status-code column mapped, so every interval was classified from power output alone.
That is deliberate. Real telemetry has gaps, and real tests have loose ends. A report that discloses its weak points — and shows each one is quantified and bounded — is much harder to argue with than one presenting an immaculate number, because an immaculate number is usually the sign of a definition chosen after the fact.
The Verdict, and the Arithmetic Directly Under It
The summary page does not just state 99.6%; it derives it:
Three details here are exactly the kind that spreadsheet-based tests leave implicit until someone disputes them:
- The unit is inverter-minutes. Eligible time is plant-wide (3,099 minutes), multiplied by the three inverters under test — 9,297 inverter-minutes in the denominator.
- The rounding rule is printed. Half-up to one decimal place, and pass/fail is decided on the rounded value. At contractual margins this thin, an unstated rounding convention is a dispute waiting for a trigger.
- The downtime budget is derived, and labeled as illustrative. One percent of 9,297 eligible inverter-minutes is 92 — roughly half an hour of whole-plant outage spread over five days. That is the entire allowance. The report states plainly that the contractual criterion is the percentage itself; the budget exists to make the margin tangible.
That last point deserves a pause: on this plant, a single inverter taking one slow morning to restart would consume most of the budget alone. The sample's worst day landed at exactly 99.0% — availability tests are decided in minutes, not hours.
The Denominator: Which Minutes Count at All
The 3,099 eligible minutes are not asserted; they are derived in an eligibility funnel that dices the entire window into non-overlapping buckets:
| Step | Minutes | Inverter-minutes (×3) | Share of window |
|---|---|---|---|
| Test window (effective) | 7,200 | 21,600 | 100.0% |
| − Excluded for grid outages | 0 | 0 | 0.0% |
| − POA or meter sample missing | 0 | 0 | 0.0% |
| − POA at or below 50 W/m² | 4,101 | 12,303 | 57.0% |
| − Export at or below deadband | 0 | 0 | 0.0% |
| = Eligible | 3,099 | 9,297 | 43.0% |
Every minute of the window lands in exactly one bucket, evaluated in the order listed, and the rows sum to the window total. Fifty-seven percent of the five days never enters the test at all — night and low-light time below the 50 W/m² threshold.
Just as important as the funnel is the configuration block above it, which prints each threshold with its provenance: the POA eligibility threshold, the export deadband (5 kW), the fallback operational-power threshold (0.1 kW), and the agreed data cadence ceiling. A reviewer holding the contract exhibit in one hand and this page in the other can verify the test was configured to the deal — and recompute the denominator from the raw file if they choose to.
The Numerator: Thirty-Five Minutes, Accounted For Twice
The charged minutes get the report's closest scrutiny, and the sample accounts for them in two independent ways that must agree.
First, the event log: a documented fault on inverter 1 (18 inverter-minutes) and a data override on inverter 3 (6 inverter-minutes). Note the direction of that override — external evidence showed the inverter was down while its telemetry suggested production, so the override added charged time. Overrides cut both ways, and each one requires a written justification that is printed in the report.
Second, a reconciliation back to the summary:
| Inverter-minutes | |
|---|---|
| Charged — documented by events | 24 |
| Charged — no documented event-log entry | 11 |
| Total charged (as in the Summary) | 35 |
This table is the availability counterpart of the capacity report's filtering waterfall: it makes it impossible for charged time to hide outside the accounting. The 11 undocumented minutes are not smoothed over — they are named, and an automated check confirms they sit below the agreed materiality threshold of 15 inverter-minutes. Undocumented downtime that stays visible is a finding; undocumented downtime that disappears is a dispute.
Excluded Is Not Excused
The report devotes a glossary page to its time categories, and one distinction on it settles more arguments than any other: excluded time (a grid outage) leaves the denominator entirely and extends the test window to compensate, while excused time (waived downtime) stays in the denominator and simply is not charged. Conflate the two and you change the result — in whichever direction the person doing the conflating prefers.
The sample happens to contain zero of both, and it still prints the zero rows. In a spreadsheet, a category that never occurred and a category that was never tracked look identical; only one of them is auditable.
Missing Data Cannot Improve the Result
The missing-data policy operates at two levels, and the distinction matters:
- Inverter-level gaps — both the state and the power sample absent during eligible time — are charged to that inverter. An inverter that cannot prove it was running is treated as down. Inverter 3 collected 10 such minutes in the sample, and the only way to reverse them is a documented data-override event backed by external evidence such as SCADA logs or service records.
- Plant-level gaps — a missing POA or export-meter sample — remove the minute from the test entirely, since eligibility itself cannot be established. That favors neither party.
Either way, a data gap can never silently push the number up. And if the uploaded data does not cover the whole test window, the run is marked provisional rather than passed — the report refuses to certify what it has not seen.
A Report That Grades Its Own Inputs
Before the charts, the sample prints the results of fifteen automated quality checks — blockers, warnings, and informational checks — with ten passed, four not applicable (each stating why it did not apply), and the one standing warning about status-code classification. The blockers are the existential ones: data cadence within the agreed ceiling, the window fully covered by data, eligible time actually present.
A report that can fail itself is more credible when it passes. The warning in the sample is a good example: classifying inverters by power output alone is a legitimate, common method — but it is a weaker basis than status codes, and the honest move is to say so on the record and let the parties agree to it, rather than leave the reviewer to discover it.
If You Are the One Reviewing
Flip the perspective: an availability report lands on your desk. The sample suggests an efficient audit order — and doubles as a checklist for whether your own reports would survive one:
- Quality checks first. What does the report admit about itself? A report with no findings section has not looked.
- The reconciliation. Does documented-plus-undocumented charged time sum to the headline figure, and how much of it lacks an event?
- The funnel. Can you recompute the denominator from the printed thresholds and the named input file?
- Configuration against the contract exhibit. Thresholds, charging policy, missing-data policy, rounding rule — line by line.
- Event justifications. Is every exclusion, excusal, and override backed by written evidence, with its effect quantified?
A report that survives that path closes the test. One that does not starts an email thread.
Where the Sample Came From
The document was not assembled by hand. HelioTest generates it from the same computation that produced the verdict — the funnel, the reconciliation, the per-inverter table, and the charts cannot drift apart from the result they describe. The demo data behind the sample is preloaded in the HelioTest sandbox (the Try Sandbox button in the navigation, no sign-up): you can open this exact test run, raise the POA threshold or log a grid-outage event, and watch the funnel, the budget, and the verdict recompute.
Download the sample report (PDF)
Related Articles

Peter is an engineer with a PhD in renewable energy management and over a decade of experience in software development for renewable energy applications. He built HelioTest to replace the fragile spreadsheet workflows he encountered across dozens of ASTM E2848 capacity tests.
