Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PV PR Test Report

Description

The PV PR Test Report prepares measured weather, production, and energy datasets for an external performance-ratio (PR) test workflow, typically completed in PVSyst. Proximal does not compute the contractual PR, run a PVSyst simulation, or score modeled versus actual energy in this report. The platform's job is to assemble a defensible measured dataset: apply automatic and manual exclusions, document those exclusions, and export files that a modeler can import into PVSyst (or another independent tool) for the modeled-vs-actual comparison.

In the app the page is titled PR Test (project → Reports → PR Test). It currently shows an In Development banner. The report is organized as four sequential tabs:

  1. Test Setup – test identity, date range, timezone, source-data status, and optional import of a prior filter configuration.
  2. Automatic Filters – exclusion rules and a timestamp-level impact preview.
  3. Manual Filters – weather-trace review plus global and device-specific timestamp-range exclusions with reasons.
  4. Outputs – downloadable artifacts for PVSyst weather import, production/energy analysis, and audit of the filter set.

This page is the methodology and instruction reference for engineers who already know how a PR test is structured (valid-period selection, irradiance and soiling gates, clipping and outage exclusions, measured vs. modeled energy). It documents what Proximal assumes, what it calculates automatically, and what each exported file is for.

Scope and capabilities

The report can:

  • Query on-site meteorological traces (GHI, POA, POA tilt, secondary/rear POA, ambient temperature, wind speed, soiling) over a user-selected inclusive calendar range.
  • Query project-level and inverter-level AC power, the PPC active-power setpoint, and plant energy-meter registers.
  • Query project-level Events for curtailment and availability/outage windows.
  • Apply a configurable set of automatic exclusions, then optional manual exclusions.
  • Roll weather up to hourly values in the project timezone and write a PVSyst-oriented custom weather CSV.
  • Derive hourly DHI from GHI when no measured DHI tag is present and site coordinates are available.
  • Produce irradiance-weighted monthly soiling and albedo summaries for PVSyst parameter tables.
  • Export production (MW) and hourly energy (Wh) tables, a reusable JSON filter configuration, an hourly TRUE/FALSE filter matrix, a manual-exclusion audit log, and a README manifest.

The report cannot:

  • Compute PR, reference yield, or specific yield (see the Performance Ratio KPI for the operational PR KPI, which is a different calculation).
  • Import or score a PVSyst .MET / simulation output against metered energy inside Proximal.
  • Apply IEC 61724 or ASTM E2848 capacity-test regressions. Those remain external.

Assumptions

The following assumptions are built into the current implementation. They are not user-editable unless a corresponding filter or setup field exists.

  1. This phase is dataset preparation only. Modeled-vs-actual scoring is performed outside Proximal.

  2. All timestamps are interpreted in the project timezone (IANA name from the project record, overridable on Setup). Native-interval samples are bucketed to the civil hour [h, h+1) in that timezone. Hour labels are written as YYYY-MM-DD HH:mm:ss at the start of the hour.

  3. The selected date range is inclusive of both calendar dates. Queries run from startDate 00:00:00 through endDate 23:59:59. The hourly grid runs from startDate 00:00 through endDate 23:00.

  4. The query interval follows the project's configured data interval. One-second projects are queried at one minute. Unrecognized intervals fall back to five minutes. The interval is not a Setup control; it is taken from the project and stored in the exported config.

  5. An exact-zero meteorological reading is treated as a malfunction, not as a physical night-time or dry-sensor value, except soiling loss. Finite non-zero readings are required for other met-station types. MET_STATION_SOILING_LOSS of is a physical no-soiling value and is kept.

  6. Irradiance is nonphysical when or . The bound is applied to GHI and POA (and to DHI in the weather roll-up), and to up-facing / down-facing samples used to derive albedo from pairs. It is a per-sensor drop, not an automatic site-timestamp drop.

  7. Minimum-POA uses the mean of remaining front-facing POA sensors, not the site minimum. Rear-, back-, down-facing, reflected, and ground-facing POA traces are ignored for this gate so that a single rear or low sensor cannot zero the valid set.

  8. Hours with no remaining front-facing POA fail the minimum-POA gate in the hourly filter matrix (missing POA is treated as ). That matrix is what filtered weather, energy pass/fail columns, and the Excel filter file use.

  9. All soiling traces are converted to soiling loss percent before thresholds and export. loss means no soiling.

    • Soil percent (MET_STATION_SOIL_PERCENT, id 39) and soiling ratio (MET_STATION_SOILING_RATIO, id 245) are remaining performance, typically –, where means no soiling.
    • Soiling loss (MET_STATION_SOILING_LOSS, id 246) is already lost performance, typically –, where means no soiling.

    Values in the unit-fraction range are scaled to percent; values above that range are already percent. Soiling ratio uses a wider unit-fraction band () so clean readings slightly above stay loss:

with for soil percent and for soiling ratio.

The weather CSV Soiling column, monthly soiling summary, and maximum-soiling-loss gate all use . 10. Clipping is evaluated at 98% of the relevant limit. Project clipping compares plant power to PPC_ACTIVE_POWER_SETPOINT. Inverter clipping uses capacity_power_ac_kva treated as kW (power factor of 1) and converted to MW. PVS projects use the MV collector-circuit meter power, summed across those meters, in place of METER_ACTIVE_POWER. 11. If the PPC setpoint is missing or non-positive, project clipping never excludes. If an inverter has no positive nameplate, that inverter is skipped for clipping. If no inverter AC-power traces exist, communication-gap exclusion does not remove native timestamps. Communication-gap exclusion is preview-only; it does not fail hours in the matrix or filtered exports. 12. Sensor validity, outlier sigma, and hourly completeness are front-facing POA-only. Rear-, back-, down-facing, reflected, and ground-facing POA traces are ignored for these gates, matching the minimum-POA filter. GHI remains in the weather CSV and is still dropped per-sensor when nonphysical, but it does not decide validity, outliers, or completeness. 13. POA outlier statistics are population mean and population standard deviation over every usable front-facing POA sample in the selected range (not a rolling or per-hour statistic). A timestamp/hour fails if any remaining front-facing POA sample at that key is more than from that site-wide mean. 14. Hourly completeness requires at least 60% of the expected sub-intervals in that civil hour to contain a valid front-facing POA timestamp. Expected count is , using the query interval (1, 5, 10, 15, 30, or 60 minutes). 15. The filtered weather CSV always applies the 60% completeness rule, even if the completeness switch is turned off. Turning the switch off only stops completeness from contributing to the hourly matrix verdict; the filtered-weather file still drops incomplete hours. 16. Event exclusions use project-level Events, not inverter- or device-level Events. Availability/outages are other project-level Events whose event_id is not in that curtailment set. 17. An Event overlaps an hour if the Event window and [hour, hour+1) share any open interval. Events that started before the report window are included when they still overlap the selected range. 18. DHI derivation uses the Erbs diffuse-fraction correlation and a simplified solar-position model (no equation of time). Measured DHI tags, when present, always take precedence. Derivation runs only for hours that already meet the 60% front-facing POA completeness rule and only when latitude and longitude are available. 19. Weather CSV GPI is the hourly mean of traces classified as POA (MET_STATION_POA and MET_STATION_POA_TILT). Secondary/down-facing POA is not mapped into GPI. Name-based rear/back traces that are still typed as MET_STATION_POA are included in GPI, unlike the minimum-POA filter, which excludes them. 20. Albedo is not a weather-CSV column. It is computed for the monthly summary from an albedo tag when present, otherwise from same-device up-facing / down-facing irradiance pairs ( when ). 21. Energy registers are assumed to be kWh. Hourly export is in Wh. A trace is treated as cumulative if at least 80% of consecutive valid samples are non-decreasing; otherwise samples in an hour are summed as interval energy. 22. Manual exclusions are not columns in the hourly filter matrix. They omit matched weather samples from hourly averages. Global ranges also remove those native timestamps from the Automatic Filters preview; device ranges remove every candidate timestamp in that range from the preview remaining set. The matrix Final verdict is automatic filters only.

Workflow

  1. Open the report on the project. The Documentation button in the upper-right opens this methodology page. Confirm Weather, Project production, Inverter production, Energy meter, and Project events source status on Test Setup after a date range is selected.
  2. Set Test run name, Date range, and Timezone. Import a previous pr-test-filter-config/v1 JSON if you are repeating a test. Reset restores the default setup and empty filter set and clears this project's saved browser state.
  3. On Automatic Filters, enable the gates required by the test protocol. Defaults are listed below. Click Compute preview after changes; impact counts do not refresh automatically. Preview is for tuning; it is not required before exporting.
  4. On Manual Filters, review weather traces, then add global and/or device timestamp ranges for conditions the automatic engine cannot see (soiling events not captured by the soil sensor, known pyranometer outages, snow, etc.). Include a reason; it is written to the audit log (the form does not block an empty reason).
  5. On Outputs, download the artifacts required by the PVSyst workflow. At minimum this is usually the filtered weather CSV, production and/or energy CSV, filter matrix, and README. Re-download after any filter change.

Browser state for the project is written when you download an Outputs artifact and restored the next time you open the report. The exported JSON is the portable copy so another engineer can reload the same filter set.

Setup fields

FieldIntentionDefault
Test run nameHuman label used in the JSON, README, and download filenames.{project name} PR test
Date rangeInclusive civil dates that bound queries, the hourly grid, and every export.Last 7 days through today (UTC calendar dates at page load)
TimezoneIANA timezone for local-hour bucketing, Event overlap, and CSV clocks.Project timezone
Data intervalNative query step used for completeness (expected intervals per hour = 60 / Δt). Not shown as an editor; taken from the project.Project data_interval (1 s → 1 min; otherwise 5 min fallback)
Import filter configReloads automatic filters, manual exclusions, test name, dates, timezone, and interval from a previously exported JSON. Project identity stays the current project.(none)
ResetRestores default setup (including the last-7-days date range), default automatic filters, and empty manual exclusions, and clears this project's browser storage.—

Source-status rows are availability checks only. Unavailable does not block configuration; exports that need Events will retry and fail if availability exclusions are on and Events cannot be fetched.

Source data

Weather

Queried sensor types:

  • GHI
  • Ambient temperature
  • Wind speed
  • Soil percent (legacy remaining performance, typically –)
  • Soiling ratio (remaining performance, typically –; same conversion as soil percent)
  • Soiling loss (lost performance, typically –; scaled to percent, not inverted)
  • POA
  • POA tilt
  • POA secondary (typically rear / down-facing; used for albedo pairing, not for GPI or the minimum-POA mean)

Production

  • Project power: METER_ACTIVE_POWER, except PVS projects, which use PV_MV_COLLECTOR_CIRCUIT_METER_ACTIVE_POWER summed across those meters.
  • PPC setpoint: PPC_ACTIVE_POWER_SETPOINT, used as the project-clipping limit.
  • Inverter power: PV_INVERTER_AC_POWER.
  • Inverter nameplate: capacity_power_ac_kva on PV inverter devices, treated as kW.

Energy

  • METER_ENERGY_EXPORTED_TO_GRID
  • METER_NET_ENERGY
  • PV_MV_COLLECTOR_CIRCUIT_METER_ENERGY_EXPORTED_TO_GRID (PVS)

Events

Two summaries are fetched over the same overlap window (open: false, losses not requested):

  • Curtailment: failure_mode_id = 205.
  • Project-level Events: device_type_id = PROJECT. Availability/outage windows are this set minus curtailment event_ids.

Time, candidates, and two evaluation grids

The engine builds two related views of the same range.

Native-interval preview (Automatic Filters tab). Candidate timestamps are the union of GHI, front-facing POA, soiling, and production timestamps after conversion to project-local time. Filters are applied sequentially in the order listed under Automatic filters. Each filter's Removed count is the number of candidates that still remained after earlier filters and then failed this one (except nonphysical irradiance, which counts dropped sensor readings). Percent is that removed count divided by the original candidate count, except the nonphysical row, which divides by the irradiance-reading count. Scope device-specific means the filter dropped individual sensor readings (or is attributed per device); global means the whole timestamp is removed.

Hourly filter matrix (Outputs). One row per project-local hour from startDate 00:00 through endDate 23:00. Each enabled condition is evaluated independently against hourly aggregates (except communication gaps, which do not fail hours — see below). Disabled conditions are treated as TRUE. Final verdict is the logical AND of every condition. Filtered weather, energy pass/fail columns, and the Excel matrix all use this hourly verdict.

Because preview is sequential at native interval and the matrix is independent at hourly resolution, preview coverage and hourly pass counts will not match one-for-one. Use the preview to tune gates; use the matrix as the record of which hours entered the filtered weather/energy files.

Automatic filters

Defaults apply to a new test. Every switch and numeric threshold is written into the JSON config under automaticFilters.

ControlDefaultIntention
Exclude nonphysical irradianceOnDrop individual GHI/POA samples that cannot be physical.
Minimum POA thresholdOn, 150 W/m²Keep only periods with enough front-facing POA for a PR-valid irradiance set.
Maximum soiling lossOn, 10%Drop periods with excessive measured soiling loss so the valid set is not dominated by dirty-array hours.
Exclude project-level clippingOnRemove periods where plant power is at or near the PPC setpoint, so PR is not credited/penalized for plant clipping.
Exclude inverter-level clippingOnSame intent at inverter nameplate; any one inverter at the clip bound fails the timestamp/hour.
Exclude availability / outage periodsOnRemove project-level outage/availability Events other than curtailment.
Require hourly sub-interval completeness (60%)OnRequire enough front-facing POA sub-samples in the hour to treat the hourly mean as representative.
Exclude communication gapsOnDrop native-interval timestamps with no inverter AC power reading (SCADA hole). Does not fail hours in the matrix or filtered weather.
Require valid POA sensorsOnRequire at least one remaining valid front-facing POA reading.
POA sensor outlier thresholdOn, 3 σDrop timestamps where any remaining front-facing POA sample is an extreme relative to the site-wide POA distribution.

Evaluation order (preview)

On the native-interval preview, remaining timestamps are reduced in this order:

  1. Nonphysical irradiance (site timestamp removed only if no physical GHI or POA remains).
  2. Minimum POA.
  3. Maximum soiling loss.
  4. Sensor validity (valid front-facing POA present).
  5. POA outlier sigma.
  6. Hourly front-facing POA completeness.
  7. Communication gaps.
  8. Inverter clipping.
  9. Project clipping.
  10. Availability/outage Events.
  11. Manual global ranges.
  12. Manual device ranges.

The hourly matrix does not apply steps 11–12 and does not use sequential masking; it ANDs the enabled automatic conditions on hourly means. Communication-gap exclusion (step 7) is native-interval only: it does not fail hours in the matrix, so it does not remove hours from filtered weather, energy pass/fail columns, or the Excel file.

Nonphysical irradiance

A GHI or POA sample is nonphysical when

Each failing sample is dropped from that sensor only. Other sensors at the same timestamp remain. The site timestamp (preview) or hour (matrix) is removed only when every irradiance reading at that key was nonphysical, i.e. no physical GHI mean and no physical front-facing POA mean remain.

Preview Removed for this row counts dropped sensor readings, not site timestamps. That is why its scope is device-specific.

When this switch is off, nonphysical values are not dropped as nonphysical, but exact zeros are still rejected as invalid met-station readings.

Minimum POA

Front-facing POA traces are those classified as POA (MET_STATION_POA or MET_STATION_POA_TILT) that are not secondary/down/reflected/ground and whose names do not contain rear or back. After nonphysical samples are removed, remaining front-facing values at the key are averaged.

Hourly matrix (governs filtered exports):

If the hourly mean is missing, it is treated as , so the hour fails whenever the gate is enabled.

Native-interval preview: the timestamp is removed only when a mean exists and that mean is below . A timestamp with no front-facing POA therefore passes this preview gate (it may still fail sensor validity or other gates).

Maximum soiling loss

Soiling traces are converted to soiling loss percent (see assumption 9) and averaged across remaining sensors at the timestamp or hour. Soil percent and soiling ratio are remaining performance and are inverted to loss. Soiling loss is already lost performance and is only scaled to percent. The period fails when

If no valid soiling reading exists, the gate does not fail the period (null soiling is treated as “no evidence of excessive soiling”). A soiling-loss reading of is valid and counts as . An exact-zero soil-percent or soiling-ratio reading is dropped as a malfunction.

Sensor validity

Fails when no valid front-facing POA remains at the timestamp (preview) or when the hourly front-facing POA mean is missing / the hour has no POA values (matrix). This is independent of GHI. If the project has no front-facing POA traces, the preview skips this gate; the matrix still requires a POA mean when the switch is on, so hours without POA fail.

POA outlier sigma

Let and be the population mean and standard deviation of every usable front-facing POA sample in the selected range. A timestamp/hour fails if any remaining front-facing POA value at that key satisfies

If , nothing is flagged. If there are no usable front-facing POA samples, the gate is inactive.

Hourly completeness

For civil hour , let be the number of distinct local timestamps in that hour that still have valid front-facing POA, and let . The hour (and every native timestamp in it, on preview) fails unless

An hour with no front-facing POA timestamps has no completeness record and fails this gate when it is enabled.

Communication gaps

On the native-interval preview, fails when no inverter AC-power trace has a finite reading at that timestamp. If inverter power traces exist but a timestamp has none of them, the timestamp is a gap. If there are no inverter traces at all, the gate does not exclude.

This gate is not applied on the hourly matrix. Filtered weather, energy pass/fail, and the Excel matrix therefore still include hours that the preview would drop as communication gaps.

Inverter clipping

Fails if any inverter with a positive nameplate satisfies

Preview uses the instantaneous inverter power at the native timestamp. The hourly matrix uses the mean inverter power within the hour. Nameplate is capacity_power_ac_kva / 1000 (kVA stored as if it were kW).

Project clipping

Fails if the PPC active-power setpoint is a finite positive MW value and

Project power is METER_ACTIVE_POWER at that timestamp, or for PVS projects the sum of PV_MV_COLLECTOR_CIRCUIT_METER_ACTIVE_POWER traces. The hourly matrix uses the mean of those timestamp values versus the mean setpoint in the hour. Missing project power, or a missing/non-positive setpoint, does not fail the gate. project.poi is not used.

Availability Events

When enabled, an hour (and native timestamps whose hour overlaps) fail if any availability Event overlaps [hour, hour+1). Overlap is half-open on the Event end: time_end must be after the hour start; an Event that ends exactly at the hour start does not overlap that hour. time_end = null overlaps all later hours.

Availability uses project-level Events whose event_id is not in the curtailment set (failure_mode_id = 205). Curtailment Events are fetched only so they can be subtracted from that availability set; there is no automatic curtailment-event gate.

Manual filters

Manual exclusions are timestamp ranges. A reason string is stored on the row and written to the audit log; the form does not require it.

  • Global: every weather sample whose local timestamp falls inside [start, end] (inclusive) is omitted from hourly averages. The native-interval preview also removes those timestamps from remaining.
  • Device / tag: in hourly weather construction, only the matched trace is omitted. Match is by tag_id when set, otherwise by device_id (and tag-less traces on that device). In the native-interval preview, every candidate timestamp in that range is removed from remaining (not only the matched trace).

Use these for protocol-specific exclusions the automatic gates cannot encode (known instrument failure, snow cover, washing, shading from construction, etc.). They appear in the manual-exclusion CSV and in the JSON. They do not flip Excel matrix columns or Final verdict. They change the weather values (and weather-side 60% completeness counts) that go into hourly averages.

Hourly weather construction

After manual exclusions and the nonphysical / zero-reading rules, remaining samples of each weather metric are arithmetically averaged within each civil hour. Metrics are assigned from sensor type and, for DHI/albedo/up/down, from tag/name matching.

Weather CSV columnSourceUnits
Year, Month, Day, Hour, MinuteHour-start timestamp expressed in the advertised GMT offset—
GHIMean of GHI tracesW/m²
TambMean ambient temperature°C
DHIMeasured DHI mean if any DHI tag exists in the hour; otherwise Erbs derivation from hourly GHIW/m²
GPIMean of POA / POA-tilt tracesW/m²
WindVelMean wind speedm/s
SoilingMean soiling loss percent after converting every soiling sensor type%

Missing numeric values are written as -99. A units row follows the header (W/m2, deg.C, m/sec, %).

Comment rows before the header use PVSyst custom-file convention: field name in column A (# Site, # Country, …) and value in column B.

CommentValue
SiteProject / site name
CountryParsed from project address (US state abbreviation or “United States” → USA; otherwise last comma-separated segment if it looks like a country; else USA)
Data SourceProximal Energy
Time stepHour
Latitude / LongitudeProject point coordinates (GeoJSON [lon, lat])
AltitudeProject elevation
Time ZoneGMT offset in hours at startDate 00:00 local. Every data-row timestamp is converted onto this same fixed offset so a DST transition does not shift PVSyst solar time.
Summarization periodStart and end dates as DD/MM/YYYY; DD/MM/YYYY

Measured vs derived DHI

A trace is treated as measured DHI when its name/type contains dhi, diffuse_hor, diffuse horizontal, or met_station_dhi, and is not labeled as POA. If any such sample lands in the hour, DHI is the mean of those samples (dhiSource = measured).

Otherwise, for hours that already meet 60% front-facing POA completeness, with finite GHI and site latitude/longitude, DHI is derived:

  1. Day of year in the project timezone.
  2. Extraterrestrial irradiance:
  3. Solar declination:
  4. Hour angle from local clock time and longitude, without equation of time: with in degrees.
  5. Zenith angle from latitude and . If the sun is at or below the horizon (zenith ), derived DHI is .
  6. Clearness index:
  7. Erbs diffuse fraction :

  1. . GHI yields DHI .

If coordinates are missing, derived DHI is omitted (-99).

Albedo (monthly summary only)

If an albedo-named trace exists, its hourly mean is used. Otherwise albedo is the mean of per-device ratios in that hour, pairing up-facing GHI/front POA with down-facing/secondary POA on the same device_id. When nonphysical-irradiance exclusion is on, pair inputs must satisfy the same bound as GHI/POA. Up-facing irradiance for weighting falls back to GHI when POA is missing.

Outputs

Weather, production, energy, and monthly-summary filenames use the project's name_short. JSON, Excel, manual-exclusion log, and README filenames use {sanitized project name_long}-{sanitized test name}-{start}-{end}. All clocks in tabular files are project-local.

Weather CSV

Unfiltered hourly PVSyst custom file for the full selected range. Use this as the raw measured meteorological record: every hour is present, incomplete hours included, automatic-filter failures included. Typical uses: PVSyst custom weather import when you will apply validity inside PVSyst; audit of the as-measured hourly means; comparison against the filtered file.

Filtered weather CSV

Same schema as the weather CSV, restricted to hours that pass every enabled automatic filter on the hourly matrix (Final verdict = TRUE) and meet the 60% front-facing POA completeness rule (always, even if that switch is off). Communication-gap exclusion is not part of that hourly verdict. Use this as the candidate valid-period weather for the PR test in PVSyst when you want Proximal to have already applied the protocol gates. Hours removed by automatic filters or incompleteness are omitted rather than zero-filled.

Monthly weather summary CSV

Columns: Month (YYYY-MM), Soiling loss (%), Albedo, Soiling sample hours, Albedo sample hours.

Built only from hours that are complete (60% front-facing POA) and pass the hourly automatic-filter verdict:

  • Soiling: POA-weighted mean of hourly soiling loss percent, using hours with .
  • Albedo: up-irradiance-weighted mean of hourly albedo, using hours with up-facing irradiance (POA, else GHI) .

Use these monthly values as PVSyst soiling-loss and albedo parameters for the test period when the contract or model calls for irradiance-weighted monthly constants rather than hourly soiling in the weather file.

Production CSV

Wide table: Time (local) plus one column per meter, inverter AC-power, or PPC setpoint trace (MW, four decimal places). All native-interval timestamps in range are included; there is no validity mask. Empty cells are missing readings, not excluded hours. Use this for:

  • Independent clipping checks against nameplate or the PPC setpoint.
  • Aligning measured AC power with a PVSyst simulation timestep.
  • Investigating hours the filter matrix rejected.

Energy CSV

Hourly Wh from plant energy meters, one column per energy trace, plus Passes all filters and Is excluded (TRUE/FALSE). The pass/fail pair is the hourly automatic-filter verdict (Is excluded is the negation). The file contains every hour in the grid, including failed hours.

Cumulative vs interval detection: if ≥ 80% of consecutive valid samples are non-decreasing, hourly energy is in Wh, and hours where the register drops are left blank. Otherwise valid samples in the hour are summed and converted kWh → Wh. The first hour of a cumulative series has no delta and is blank.

Use this as the measured energy time series for the PR numerator, with the pass column as the valid-period mask if you are not using the filtered weather file alone.

JSON filter file

Version pr-test-filter-config/v1. Contains generatedAt, setup metadata, automaticFilters, filterLabels, manualExclusions, and notes stating that Proximal is not completing modeled-vs-actual comparison. Import this on Setup to reproduce the same test configuration in another session or for another engineer. Legacy capacity-test-dataset-builder/v1 files still parse.

Excel filter matrix

HTML .xls table: Timestamp (hourly), one TRUE/FALSE column per automatic condition (using the labels below), and Final verdict. Independent hourly evaluation, not sequential preview masking. Use this as the auditable valid-period mask: which gate failed which hour, for inclusion in a test report appendix or for rebuilding a mask in Excel/PVSyst.

Matrix column labels:

  • Nonphysical irradiance exclusion
  • Minimum POA threshold
  • Maximum soiling loss threshold
  • POA sensor validity requirement
  • POA sensor outlier sigma limit
  • Hourly POA sub-interval completeness (60%)
  • Communication gap exclusion
  • Inverter-level clipping exclusion
  • Project-level clipping exclusion
  • Availability / outage exclusion

A disabled gate is TRUE for every hour. Communication-gap exclusion is also TRUE for every hour in this matrix; that gate is native-interval (preview) only.

Manual exclusion log

CSV columns: scope, start_timestamp, end_timestamp, device_id, device_label, reason. One row per global or device-specific range. Use this as the test-report appendix of engineering judgments that sat outside the automatic protocol.

Export manifest / README

Markdown summary of project, test name, date range, timezone, data interval, units, generation time, config version, every automatic-filter value, manual-exclusion counts, and a preview summary computed at download time from the current filters and source data (not the last Compute preview click on Automatic Filters). Use this as the cover sheet for a delivered PR-test data package so a reviewer can see units and gates without opening the JSON.

Caveats

  • The in-app PR Test page is still marked In Development. Treat this document as the current methodology, and expect further changes.
  • Browser state is written when you download an Outputs artifact, not on every filter edit. Use Reset on Test Setup, or the exported JSON, if you need a known starting point.
  • Operational Performance Ratio KPI is a daily site KPI on unfiltered hourly POA and meter energy. It is not this report's valid-period PR and will not match a contractual PR test.
  • Preview coverage is native-interval and sequential; do not treat it as the hourly valid fraction in the filtered weather file.
  • Communication-gap exclusion affects the Automatic Filters preview only. It does not remove hours from filtered weather, energy pass/fail, or the Excel matrix.
  • Rear/down-facing POA is excluded from the minimum-POA mean, sensor validity, outlier sigma, and completeness counts, but can still affect GPI if a rear sensor is typed as primary POA.
  • Derived DHI is an Erbs estimate from GHI and a simplified solar position. Prefer measured DHI when the site has a shaded pyranometer.
  • Inverter nameplate is taken from capacity_power_ac_kva as kW. Incorrect commissioning nameplates will mis-fire inverter clipping.
  • Missing or non-positive PPC setpoint silently disables project clipping.
  • Exact-zero met readings are discarded. Night-time POA of true zero therefore never contributes; completeness is driven by daytime (or non-zero) front-facing POA samples only.
  • Energy conversion assumes kWh registers. If a meter is already in Wh, exported values will be 1000× high.
  • Event exclusions require a successful Events fetch. If Events fail and the availability gate is on, filter-dependent downloads stop after retry.
  • Turning off hourly completeness still drops incomplete hours from filtered weather; only the matrix completeness column becomes unconditionally TRUE. Completeness is counted on unique front-facing POA timestamps, not GHI. Manual exclusions can reduce that weather-side count even though they do not change the matrix completeness column.