# Findings

Estimate hypothetical PV production, local shadow losses and historical energy value with local consumption and optional storage; select bounded Estonian contexts and export a reviewable scenario PDF.

Scope: one hypothetical 20 kWp array within the retained manifest AOI, complete UTC years 2024 and 2025. Run: `run-20261029-180756`. Validation: **warning**.

## season_2024

2024: clear-sky estimate 31780.8 kWh; weather-adjusted shadow-free 19890.7 kWh; locally shaded 19234.4 kWh. Local shadow loss 656.3 kWh (3.30%). The inverter ceiling removes 0.0 kWh; the no-storage net-export ceiling curtails 0.0 kWh, leaving 19234.4 kWh generated for on-site use or export. If all available AC generation were exported without a net-grid ceiling, wholesale revenue after margin would be 1136.90 EUR; the corresponding all-export shadow loss would be 58.44 EUR. With the declared day/night consumption assumption, demand is 5124.0 kWh, self-consumed PV 2438.2 kWh, surplus export 16796.2 kWh and grid import 2685.8 kWh. Surplus sales are 943.98 EUR and avoided import cost 205.11 EUR, giving net PV benefit 1149.09 EUR. Local shadows reduce this combined value by 58.72 EUR versus shadow-free weather. Storage is explicitly disabled; the configured capacity would be 40 kWh. The separate storage table retains the same imports, exports and benefit with zero dispatch.

Evidence:

- [seasonal_summary](data/seasonal-summary.csv)
- [planning_scenario](data/scenario.geojson)
- [hourly_results](data/hourly.csv)
- [storage_summary](data/storage-summary.csv)

Limitation: Hypothetical array and estimated 10 kWh daytime / 4 kWh nighttime local daily demand in Europe/Tallinn; daytime is 07:00–23:00. The import adder is 0 EUR/MWh; charges are included only when explicitly represented in that adder. Independently verified field calibration is not established.

Limitation: Inverter AC ceiling: unspecified (unlimited in this model); net grid-export ceiling: unspecified (unlimited in this model). Clipping uses hourly mean modeled generation; grid curtailment follows demand and optional storage at quarter-hour resolution. The battery inverter connection is shared; shared mode applies the configured common AC budget without recovering clipped PV. Unspecified equipment is not inferred from private uploads.

## season_2025

2025: clear-sky estimate 31969.9 kWh; weather-adjusted shadow-free 18647.6 kWh; locally shaded 18012.8 kWh. Local shadow loss 634.8 kWh (3.40%). The inverter ceiling removes 0.0 kWh; the no-storage net-export ceiling curtails 0.0 kWh, leaving 18012.8 kWh generated for on-site use or export. If all available AC generation were exported without a net-grid ceiling, wholesale revenue after margin would be 759.04 EUR; the corresponding all-export shadow loss would be 49.67 EUR. With the declared day/night consumption assumption, demand is 5110.0 kWh, self-consumed PV 2417.1 kWh, surplus export 15595.7 kWh and grid import 2692.9 kWh. Surplus sales are 595.91 EUR and avoided import cost 175.22 EUR, giving net PV benefit 771.13 EUR. Local shadows reduce this combined value by 49.93 EUR versus shadow-free weather. Storage is explicitly disabled; the configured capacity would be 40 kWh. The separate storage table retains the same imports, exports and benefit with zero dispatch.

Evidence:

- [seasonal_summary](data/seasonal-summary.csv)
- [planning_scenario](data/scenario.geojson)
- [hourly_results](data/hourly.csv)
- [storage_summary](data/storage-summary.csv)

Limitation: Hypothetical array and estimated 10 kWh daytime / 4 kWh nighttime local daily demand in Europe/Tallinn; daytime is 07:00–23:00. The import adder is 0 EUR/MWh; charges are included only when explicitly represented in that adder. Independently verified field calibration is not established.

Limitation: Inverter AC ceiling: unspecified (unlimited in this model); net grid-export ceiling: unspecified (unlimited in this model). Clipping uses hourly mean modeled generation; grid curtailment follows demand and optional storage at quarter-hour resolution. The battery inverter connection is shared; shared mode applies the configured common AC budget without recovering clipped PV. Unspecified equipment is not inferred from private uploads.

## Assumptions and limitations

- The initial 30 × 12 m, 20 kWp array is a hypothetical planning scenario, not an observed PV installation or suitability recommendation. Issue #4 requests manual polygon planning; the open-surface patch was selected from the frozen DSM without inferring rights or engineering suitability.
- All metric geometry and horizon distances use EPSG:3301; GeoJSON coordinates are WGS84 longitude, latitude. Estonia's projected CRS supports metre-based calculations without Web Mercator area distortion.
- PV capacity is DC kWp. The inverter AC ceiling and independent net grid-export ceiling are explicit nullable settings; the hypothetical baseline leaves both null, meaning unspecified and unlimited in this model. A zero grid limit forbids export. Equipment and connection limits are not inferred from uploaded measurements. Inverter clipping uses hourly mean potential generation; grid curtailment follows local demand and optional storage. A shared battery connection respects the same AC output budget; a separate connection uses its own battery power limit. Neither topology recovers clipped PV.
- Hourly ERA5 weather is a grid estimate shared across this bounded pilot; it is not site-measured irradiance. Site irradiance and a matching installation have not been independently verified for canonical field calibration; private browser uploads do not become retained calibration evidence.
- The frozen 5 m DSM/DTM download is not asserted contemporaneous with either 2024 or 2025. Per-cell LiDAR acquisition dates are not exposed by the selected WCS response.
- Local shadows use equal-weight polygon receiver samples and a 500 m DSM horizon at 2° azimuth intervals, with 2 m mounting height initially. A bounded horizon approximation captures major buildings and vegetation while remaining interactive; module electrical mismatch is outside scope.
- Surplus export revenue is exported kWh / 1000 × (EE spot EUR/MWh − sales margin); on-site PV avoids imports at spot price plus the explicit import adder. The extended planning scenario separates self-consumption value from surplus sales; the original all-generation-export comparison is retained and labeled.
- All source and model timestamps use UTC interval starts; weather radiation averages are aligned by the acquisition transformation. Explicit interval semantics prevent the one-hour radiation shift and daylight-saving duplicate hours.
- The canonical consumption assumption is 10 kWh during local daytime 07:00–23:00 and 4 kWh during the remaining local night, in Europe/Tallinn. No household measurements were supplied; this explicit editable planning profile supports on-site use estimates without presenting assumed demand as observations.
- The canonical import-price adder is 0 EUR/MWh, so avoided import cost uses spot prices only; VAT and grid fees are not assumed. Actual retail and network contracts were not supplied. A configurable adder remains an explicitly user-entered scenario assumption.
- PV and demand are matched on the model time axis for the comparison without storage; optional battery dispatch is reported separately. Missing uploaded demand remains unknown unless estimate filling is explicitly enabled. Imports, exports and self-use must balance while preserving uncertainty and partial profile coverage.
- Uploaded household consumption is processed in browser memory and excluded from the repository and PDF reports; a user-initiated scenario export may explicitly include the normalized profile. The public canonical baseline contains only a generic estimate, not personal household observations.
- A downloaded scenario PDF describes the current modeled scenario and its limitations; the published canonical PDF uses the pinned baseline and canonical run time. The report is a reviewable view over the analysis, and does not validate a scenario or establish financial returns.
- The canonical source AOI remains the pinned Tartu pilot. Another selected Estonian area loads its own bounded terrain and weather context and remains exploratory, with request-time provenance. Tartu terrain and weather cannot establish shading or weather at another location; live request hashes do not substitute for retained raw source pins.
- Storage is explicitly disabled in the canonical baseline. Optional historical dispatch uses configured capacity, charge/discharge limits, efficiency, reserve, permitted grid charging/export and cycling cost, with finite state resolution and historical price knowledge. Storage results are separate from the comparison without storage; perfect historical information does not establish live achievable returns or a recommended battery size.
- Automatic battery capacity is twice PV kWp in kWh; the canonical 20 kWp array therefore proposes 40 kWh while storage remains disabled. The multiplier is an explicit editable scenario assumption, not an engineering or investment recommendation.
- Private production workbooks and CSVs may be compared in the browser using date-matched historical weather, but are not retained in the canonical source inputs. Exploratory overlap statistics do not independently verify installation location, equipment, meter meaning or model field accuracy. Production values, filenames and account identifiers are excluded from weather requests and repository evidence.
- Solarman power-sample comparisons estimate energy by linear interpolation between adjacent observations over their actual elapsed time. The editable maximum interpolation span defaults to 30 minutes, with longer spans excluded; accepted integrals are clipped at UTC hour boundaries. Logging intervals can vary. The observed modal interval is a diagnostic separate from the selected interpolation limit. Accepted extended spans, their duration and excluded-span duration remain visible; complete-hour comparison statistics describe estimated energy rather than metered interval energy or independently verified field accuracy.
- The private matched-period energy guide uses absolute total-energy bias bands up to 5 percent, over 5 to 10 percent, over 10 to 20 percent and over 20 percent. It requires seven distinct matched UTC dates, 24 matched hours with positive imported or modeled production, and 80 percent coverage of the elapsed source/model overlap, including whole missing hours and days. These are project screening heuristics, not NREL or PVGIS standards or an accuracy guarantee. Unknown coverage or insufficient evidence leaves the assessment limited. Hourly errors may offset in the total; hourly MAE and RMSE remain separate diagnostics. The guide does not calibrate the model, establish annual performance or upgrade canonical field validation.
- Energy is an uncalibrated planning estimate from ERA5 and a 5 m horizon model. Field accuracy has not been established against an independently verified matching installation and retained calibration inputs; private browser uploads are not canonical source evidence.
- DSM catalog metadata describes acquisition campaigns in 2017–2020; exact cell dates are unknown. The frozen 5 m surface may differ from 2024/2025 and omits small objects, seasonal foliage and electrical mismatch.
- The retained canonical source context is a 2 × 2 km Tartu pilot. Another selected Estonian area loads its own bounded source context and remains exploratory; missing context is not extrapolated from Tartu.
- Energy value uses explicit consumption, inverter and net-export limits; optional storage is a separate historical dispatch comparison. Figures exclude taxes, unentered grid charges, dynamic operator curtailment and financing. The default import adder is zero, and 2025 quarter-hour prices are averaged hourly.
- Elering price-data reuse licensing was not verified in the public API documentation; source attribution and the unresolved status are retained.
- Aerial PV detection and installation-level government reconciliation are not evaluated; available government data are municipality aggregates.
- The published 10 kWh day / 4 kWh night household demand is an estimate, not a measured household profile. Partial CSV imports do not establish full-year demand or savings.
- Optional battery dispatch uses historical price knowledge, finite state resolution and explicit losses/limits; storage is disabled in the canonical baseline. The model excludes battery investment and does not guarantee trading returns.

[Project, sources and definitions](https://github.com/jaakla/openmapstack-samples/blob/main/pv-location/project.yaml)
 · [Validation report](https://github.com/jaakla/openmapstack-samples/blob/main/pv-location/validation/latest-report.json)
