Methodology¶
This page states the model in financial terms. It is written to be read without opening the source: an analyst who reads discounted cash flow models should be able to rebuild this one in a spreadsheet from what is on this page, and get the same answer.
Each section names the phase it describes, what it computes, and — separately, because this is where models mislead — what it assumes.
What the model computes¶
A Suno valuation is a discounted cash flow of a single operating solar plant, run from the evaluation date to the end of the asset's useful life, with no terminal value.
Three numbers come out:
| Output | Definition |
|---|---|
npv_usd |
Present value, in USD, of the project's net operating cash flow, before withholding tax. |
npv_after_tax_usd |
Present value of the cash flow actually reaching the investor, after withholding on distributions. |
pwatt_nav_usd |
npv_after_tax_usd ÷ (kWp × 1,000). One kWp of installed capacity is tokenised as 1,000 pWatts, so this is the net asset value backing one token. |
Both NPVs are reconcilable by hand from the year-by-year table the engine
returns: npv_usd is the sum of the discounted cash flow column, and
npv_after_tax_usd is the sum of the discounted net-investor column. Nothing
is computed outside the table.
There is no terminal value and no residual/salvage value unless one is entered explicitly as a negative replacement event. At the end of the stated lifetime the model assumes the asset is worth nothing.
Currency and unit conventions¶
- Amounts are stated either in the project's local currency (Colombian pesos for every project published to date) or in USD, and the two are never mixed in one column. Local-currency flows are converted to USD at the FX rate of the year in which they occur, not at today's rate.
- Local-currency amounts are stated in the money of a base year, and the model escalates them from that base to each target year. The base is not the same for every curve: the PPA curve is based on the year of its first point, while replacement costs and additional income are based on the evaluation year. Each of these can be overridden explicitly.
- Rates and shares are fractions, not percentages: 0.045 means 4.5%.
design_prodis a specific production in kWh per kWp per day — not the plant's annual energy.est_opexis a monthly O&M figure, annualised by the model.
The calendar grid¶
Every column of the model is laid out on calendar rows, one per year from the commissioning year to the end of life.
Each row carries a time factor between 0 and 1: the share of that calendar year that still carries cash flow. It is 0 for years already elapsed at the evaluation date, 1 for whole future years, a fraction for the evaluation year itself (only the remaining tail counts), and a fraction again for the final row, which runs only to the end-of-life anniversary rather than to 31 December.
The project's age is measured in years from the commissioning date, using one day-count convention throughout (365.2425 days per year). Age is zero on the commissioning date.
Assumes: cash arises uniformly within the year, which is what lets a partial year be represented by a single scalar. For a monthly-billed PPA with a seasonal generation profile this is an approximation, and it is the same approximation the mid-year discounting convention below relies on.
Phase 1 — Macro indices¶
The model consumes a macro series: one row per year carrying the FX rate (local currency per USD), local CPI inflation, local PPI, the US risk-free rate, and — where available — US inflation.
From this it builds cumulative indices:
- Local CPI and PPI indices, and a US CPI index, each anchored at 100 on the first year of the series, with each year's index equal to the previous year's index times one plus the previous year's rate. The rate recorded against year Y therefore drives the index into year Y+1.
- Gaps inside the series are filled by carrying the previous year's rates forward; the FX rate across an interior gap is interpolated geometrically between the two known points rather than held flat.
- Beyond the last forecast year, rates are held constant and the indices keep
compounding at that rate. The FX rate drifts by the inflation differential
(purchasing power parity):
FX × ((1 + local inflation) ÷ (1 + US inflation))per year. If the series carries no US inflation for its last year, the FX rate is held flat instead and the valuation carries an explicit warning saying so. - A year earlier than the first year of the series is an error, not an extrapolation — unless the row carries no cash flow at all, in which case it is never looked up.
Assumes: the macro forecast is the valuer's input, not the model's opinion. The model never invents a rate; it only compounds and forward-fills what it was given. Past the forecast horizon, the assumption is constant rates and PPP-consistent FX drift — the least opinionated extrapolation available, and one that a reviewer can replace by extending the input series.
Phase 2 — Generation and degradation¶
The production figure¶
Specific production (kWh per kWp per day) is established once, then projected.
Where metered history exists, it is summarised by a trimmed mean of the monthly values: the series is sorted and at least one observation is dropped from each end from three observations upward (20% trim above ten). A single outage or a single billing anomaly therefore cannot set the plant's assumed output. Missing months are dropped before trimming, not treated as zero.
The metered figure and the design figure are then blended by billing coverage — how many of the last twelve months are actually measured, capped at twelve:
production used = coverage × measured + (1 − coverage) × design
Twelve months of data means the measurement rules outright; no data means the design figure rules.
Metered production already carries the degradation the panels have suffered so far, so before it is projected forward it is normalised back to year-zero terms, by dividing by the panel efficiency at the midpoint of the measurement window, not at today's date. A valuer may also pin the specific production explicitly, in which case it replaces the blend and is normalised the same way.
The efficiency ladder¶
Panel efficiency starts at eff_y0 and falls linearly by the annual
degradation rate. Row n covers ages spanning a commissioning anniversary, so
its average efficiency is
efficiency(n) = eff_y0 − (n − 1 + year_offset) × degradation
where year_offset is the fraction of the commissioning year the plant was
already operating. Efficiency is floored at zero: a long linear degradation
cannot turn generation negative.
Energy¶
generation(n) = efficiency(n) × production used × 365.2425 × kWp × time factor(n)
reduced further by the expected downtime of any replacement event falling in that year (see Phase 5).
Assumes: coverage, not asset age, is what makes a measurement representative — a three-month dry-season sample overestimates an old plant exactly as much as a young one. Degradation is linear, which is the industry convention and matches manufacturer warranties. The blend is a weighted average, not a statistical estimator: it carries no confidence interval, and the uncertainty around it is expressed separately, in the sensitivity tornado published alongside each valuation.
Phase 3 — PPA and REC pricing¶
Energy price¶
The PPA curve is a set of points, each a price in the money of the curve's base year. For a given year the model takes the latest point at or before that year (an approximate-match lookup) and escalates its price from the base year to the target year using one of three indices, declared per project:
| Indexation | Escalator applied |
|---|---|
ppi |
ratio of the PPI index between the two years |
inflation |
ratio of the CPI index between the two years |
plain |
none — the tariff is flat in nominal terms |
A curve with a single point therefore still escalates every year; it is a
price level, not a fixed tariff, unless plain is declared.
Many PPAs do not reset in January. Where a contract prices in 12-month batches from an anchor month, a calendar year overlaps two batches, and the year's price is the months-weighted blend of them, each batch escalated to its own starting year, because escalation happens on contract anniversaries. The weighting is computed over the part of the year the row actually covers, not the whole year: a valuation dated 1 July with an April anchor sees only the July–December tail, which falls entirely in the current batch.
A row carrying no cash flow is priced at zero and performs no lookup at all, so historical years irrelevant to the valuation are not required to have macro or PPA coverage.
Renewable energy certificates¶
One REC is issued per MWh, computed as floor(generation in kWh ÷ 1,000) —
whole certificates only, rounded down, per year.
RECs are valued by one of two routes:
- where a USD price per certificate is given (the denomination of the I-REC market), it escalates with US inflation from the evaluation year and is converted at each year's FX rate;
- otherwise, a local-currency price escalating with local CPI.
Assumes: the PPA price is contractual and the offtaker performs. There is no curtailment, no counterparty default probability and no merchant-price exposure in this model: a project whose offtaker is weak is not handled by a lower price here, but through the project risk premium in Phase 6. REC revenue assumes certificates are issued and sold every year at the stated price; there is no issuance lag and no unsold inventory.
Phase 4 — Operating expenditure¶
O&M is entered as a monthly figure and annualised by twelve.
Two sources are blended, again by billing coverage over the last twelve months:
monthly O&M = coverage × average of invoices + (1 − coverage) × projection
The historical component is a plain average of the invoices, deliberately not a trimmed one: annual charges such as insurance and land lease fall in specific months and are legitimate costs, not outliers. That is also why the weight is coverage rather than age — an average of four invoices has probably never seen the insurance premium, however old the plant is.
The annual O&M line escalates with local CPI from the evaluation year, optionally plus a real ageing delta compounding from the same base, for projects where routine maintenance is expected to grow faster than inflation. Major replacements are not in this line; they are discrete events in Phase 5.
Assumes: the invoiced history is representative of steady-state operation and is stated in the money of the evaluation year. Escalating from any other base would double-count inflation already embedded in those invoices. The model has no step change for an O&M contract renewal, and no economies of scale.
Phase 5 — Equipment replacement¶
Replacement is modelled as discrete, dated events, not as a percentage of capex smeared across the life. The reason is that a replacement's components move in opposite directions: electronics deflate in real terms while installation labour inflates above CPI, and a single blended percentage hides that.
Each event carries a quantity and a unit cost in today's money, grossed up by three explicit multipliers — installation and logistics uplift, tax and tariffs, and contingency — and weighted by a probability, so an uncertain event enters as its expected value.
The resulting ticket is split into a USD share and a local share. The USD part escalates with US inflation plus its own annual real delta and converts at the event year's FX; the local part escalates with local CPI plus its own real delta. Where a real delta is negative, the cumulative decline is floored at 40%: a 3% annual real deflation compounded over 25 years would price an inverter at 47% of today's cost, which commodity and supply-chain floors make implausible.
Each event also carries a downtime fraction, which reduces that same year's generation — and with it energy sales, REC revenue and the Suno fee. The outflow and the lost production land in the same year, so they compound rather than offset.
A negative amount represents salvage or recovery.
Assumes: events happen on schedule, at expected value. An event dated in the evaluation year is prorated by the remaining fraction of that year, which is right on average and wrong in the specific case where the replacement has already happened or is certain not to have; the model emits an explicit warning when this case arises so the valuation can be reviewed by hand rather than silently trusted.
Phase 6 — Discounting¶
The discount rate¶
The discount rate applied to a row is built additively:
discount rate = US risk-free rate (that year) + country premium + project risk premium
The project risk premium is the sum over scored risk dimensions of
basis points per point × score ÷ 10,000. The score scale runs 0 to 2, where
1 is the typical case, so a dimension's effective ceiling is twice its stated
basis points. A score outside [0, 2] is an error.
The rate is then scaled by the row's time factor, so a partial year is discounted for the part of it that exists.
The mid-year convention¶
The model discounts at mid-year, not at year end. This is stated explicitly because it is worth roughly 4.5% of NPV and is the single largest deliberate divergence from the reference spreadsheet.
A solar project's cash arrives approximately continuously — monthly invoices — so the centre of gravity of each year's flow is the middle of the period, not its close. The discount index for row n therefore compounds the full factors of every earlier row and half of its own:
index(n) = Π over k < n of (1 + rate(k)) × (1 + rate(n) ÷ 2)
Because each rate already arrives scaled by its time factor, the half applies
to the middle of the effective window: a whole year, the remaining tail of
the evaluation year, or the residual head of the final year, as the case may
be. Discounting at year end, as the reference spreadsheet did, understates the
present value by approximately (1 + r)^0.5 − 1.
Assumes: an additive build-up rather than a WACC — this is an unlevered, all-equity cash flow, and there is no debt, no tax shield on interest and no capital structure in the model. It also assumes the risk-free rate is the one supplied in the macro series for each year, so the discount rate varies over the horizon rather than being held flat.
Phase 7 — Withholding tax¶
The published NAV is stated after withholding on distributions.
The withholding is computed on a cash basis: in each year, the taxable amount is that year's cash flow less the capital repayment scheduled for that year, and the rate applies only to the excess. Years with negative cash flow pay nothing.
The capital repayment schedule is a curve of fractions keyed to years relative to the investment date — not to the commissioning date, because Suno frequently acquires an asset that is already operating. Each tranche is distributed across calendar rows by its real overlap with them, so a tranche whose anniversary falls mid-year is split across two rows in proportion. Anything scheduled before the evaluation date has already been repaid and drops out; anything scheduled past the end of life is lost, with a warning, and the remaining fractions are not renormalised to compensate.
The capital shield is cumulative: capital allowance unused in a weak or negative year carries forward to the next. Without the carry-forward, a year with a large replacement would lose its shield entirely and the following year would be over-taxed.
Where no investment amount or no repayment curve is configured, the tax columns are zero and the two NPVs coincide.
Assumes: a withholding on distributions from the holding jurisdiction, at a single flat rate over the whole horizon, with no treaty changes, no corporate income tax layer modelled separately, and no differences between holders. Because it applies equally to every holder, it is charged before the NAV per pWatt is struck.
Phase 8 — NPV and NAV per pWatt¶
Per row:
net cash flow (local) = energy sales + REC sales + additional income
− O&M − equipment replacement − Suno fee
The Suno fee is charged on total revenue — energy, RECs and additional income alike — not on energy revenue only.
The net cash flow is converted at the row's FX rate, divided by the row's discount index, and summed:
npv_usd = Σ discounted net cash flow (USD)
net investor cash flow = net cash flow (USD) − withholding
npv_after_tax_usd = Σ discounted net investor cash flow (USD)
pwatt_nav_usd = npv_after_tax_usd ÷ (kWp × 1,000)
There is no working capital, no reserve account, no debt service and no distribution lag between a project's cash flow and the investor's.
Warnings¶
A valuation can complete and still carry warnings: FX held flat past the forecast because US inflation was missing, US inflation absent where the model has USD-denominated exposure, a replacement event scheduled in the evaluation year, a repayment tranche falling past end of life, an investment date before commissioning, or no metered generation available on a young plant.
These are published with the valuation. A warning is not a failure, but it names a place where the model has substituted a convention for data, and each one is worth checking by hand.
Where this model is defined¶
Inputs are range-checked before any arithmetic runs, and a value outside its range is refused by name rather than silently producing a number. The bounds are of two kinds: physical ones — capacity, efficiency, degradation, lifetime — that would break the arithmetic, and financial ones — the fee, withholding rate and country premium as fractions of one; non-negative O&M and REC prices — that the arithmetic accepts but cannot give meaning to. A country premium of −1.0 used to drive the discount factor through zero and return an NPV of 3.65 × 10³⁷ without a word of complaint; it now raises an error.
The financial bounds are deliberately wide. They are not an opinion about a reasonable fee; they are the range in which each quantity still means what its name says.