For the complete documentation index, see llms.txt. This page is also available as Markdown.

The valuation engine

The engine builds one row per calendar year, from the commissioning year to the end of the asset's useful life: L + 1 rows for a lifetime of L years. Quantities within a year are treated as uniformly distributed in time, and partial years are handled through fractional time factors.

Time structure

Let a be the project age at the valuation date, in years of 365.2425 days, and y_o the fraction of the commissioning calendar year that follows the commissioning date. Row n carries:

tfn=min(max(yo+na, 0), 1),tfL=max(0, min(La, 1yo))tf_n = \min\big(\max(y_o + n - a,\ 0),\ 1\big), \qquad tf_L = \max\big(0,\ \min(L - a,\ 1 - y_o)\big)

Rows before the valuation date get tf = 0 and produce no cash flow, since the valuation is strictly forward-looking. The row containing the valuation date gets the remaining fraction of that year, full years get 1, and the final row covers the head of its calendar year up to the end-of-life anniversary, net of anything already elapsed. The factors sum to the remaining life, Σ_n tf_n = L - a, and a valuation dated past end-of-life is rejected.

Generation

Panel efficiency follows a yearly degradation ladder. A calendar year straddles two panel-age steps whenever commissioning was mid-year, so row n ≥ 1 uses the step average of the window it covers:

ηn=η0(n1+yo)δ\eta_n = \eta_0 - (n - 1 + y_o)\,\delta

with the commissioning row at full initial efficiency. Generation is:

Gn=P0365.2425kWpηntfn(1hn)G_n = P_0 \cdot 365.2425 \cdot kWp \cdot \eta_n \cdot tf_n \cdot (1 - h_n)

where P_0 is the year-zero baseline from telemetry and h_n is the expected downtime from any equipment replacement scheduled that year.

Energy revenue

R^(energy)_n = G_n · p_n, with p_n resolved from the PPA curve: base-year money escalated by the chosen index and, for anchored contracts, blended between the two overlapping 12-month batches. The blend weight is computed over the sub-window of the year the row actually covers, so for the valuation-year row only the remaining tail of the year participates and an expired batch cannot affect the price applied to future cash.

Certificates

RnREC=Gn1000cUSDRECU(yn)U(yeval)FXynR^{REC}_n = \left\lfloor \frac{G_n}{1000} \right\rfloor \cdot c^{REC}_{USD} \cdot \frac{U(y_n)}{U(y_{eval})} \cdot FX_{y_n}

Certificate revenue counts whole MWh. The price is denominated in USD/MWh, the denomination of the I-REC market, escalates with the US CPI index U, and converts at each year's projected exchange rate. A legacy local-currency mode escalating with local CPI remains for projects not yet migrated; under the PPP-consistent FX path the two are close to equivalent in real USD terms.

Operating expenses

Cnopex=12OusedCPI(yn)CPI(yeval)(1+δopex)ynyevaltfnC^{opex}_n = 12 \cdot O_{used} \cdot \frac{CPI(y_n)}{CPI(y_{eval})} \cdot (1 + \delta_{opex})^{\,y_n - y_{eval}} \cdot tf_n

The baseline O_used comes from invoice telemetry and is expressed in valuation-date money, hence the CPI escalation from the valuation year. The optional real escalator δ_opex (default 0; industry benchmarks run at CPI +0.5 to 1% for aging assets) captures recurring O&M outpacing general inflation. Major replacements are excluded from this line; they live in the discrete-event schedule, and the boundary between the two prevents double counting.

Protocol fee and additional income

The protocol fee is proportional to gross revenue: C^(fee)_n = φ · (R^(energy)_n + R^(REC)_n + R^(add)_n). Additional income streams, such as tax benefits or ancillary revenues, enter per year in declared base-year money and escalate with CPI from their base.

Net cash flow and conversion

FnLC=Rnenergy+RnREC+RnaddCnopexCnequipCnfee,FnUSD=FnLCFXynF^{LC}_n = R^{energy}_n + R^{REC}_n + R^{add}_n - C^{opex}_n - C^{equip}_n - C^{fee}_n, \qquad F^{USD}_n = \frac{F^{LC}_n}{FX_{y_n}}

Within the forecast horizon FX comes directly from the macro set; beyond it, the PPP drift applies. USD-denominated projects skip conversion.

The published table

The full year-by-year table ships with every valuation: time factors, efficiency, generation, prices, each revenue and cost line, exchange rates, discount factors, and discounted flows. The discounted column sums to the NPV, so a published NAV can be verified line by line.

Warnings

When an input situation weakens a calculation, the engine says so. A truncated FX forecast without US inflation data, insufficient telemetry, or a replacement event falling in the valuation year each produce an explicit warning that travels with the draft and freezes into the published version.

Last updated

Was this helpful?