Finance & Business · Project Finance & Infrastructure Investment · Contracted energy revenue, curtailment compensation, and merchant tail

PPA Revenue Escalation Merchant Tail Calculator

Builds a ten-year energy-revenue schedule with cumulative degradation, capacity factor, availability, curtailment, contract term and share, escalated or entered contract prices, growing or entered merchant prices, compensation routing, and merchant-tail isolation.

Last updated
Diagnostic Analytics

Calculator overview

Inputs and outputs

This summary comes from the calculator's published input and output contract.

Inputs

PPA Contract Price Mode
About this input

Uses an annually escalated initial contract price or the ten entered contract-price values.

Default Annual contract-price escalation Allowed Annual contract-price escalation, Entered contract-price path
PPA Merchant Price Mode
About this input

Uses an annually growing initial merchant price or the ten entered merchant-price values.

Default Annual merchant-price growth Allowed Annual merchant-price growth, Entered merchant-price path
PPA Curtailment Mode
About this input

Leaves curtailment uncompensated or pays the eligible contracted fraction at the active contract price and entered compensation percentage.

Default Compensated at contract price Allowed Uncompensated curtailment, Compensated at contract price
PPA Contract Term Years
About this input

Selects the final year in which the entered contracted share is applied.

Default 7 Allowed 2, 3, 5, 7, 10
PPA Nameplate Capacity MW
About this input

Installed nameplate capacity used to convert annual operating factors to MWh.

Unit MW Default 100 Range 0.001 to 1000000
PPA Hours Per Year
About this input

Annual hour count applied to nameplate capacity in every modeled year.

Unit hours/year Default 8760 Range 1 to 8784
PPA Initial Contract Price
About this input

Year-one price used by the annual contract escalation route.

Unit currency/MWh Default 55 Range 0 to 1000000
PPA Annual Contract Escalation
About this input

Annual compound change applied to the initial contract price.

Unit fraction/year Default 0.02 Range -0.5 to 1
PPA Initial Merchant Price
About this input

Year-one price used by the annual merchant growth route.

Unit currency/MWh Default 40 Range 0 to 1000000
PPA Annual Merchant Growth
About this input

Annual compound change applied to the initial merchant price.

Unit fraction/year Default 0.025 Range -0.5 to 1
PPA Curtailment Compensation Percent
About this input

Fraction of eligible curtailed contracted volume compensated in the compensated route.

Unit fraction Default 0.9 Range 0 to 1
PPA Annual Grid
About this input

Exactly ten complete positional rows containing operating factors, contract share, curtailment, and entered contract and merchant prices.

Default 10 rows
ColumnRange or allowed values
Year 1 to 10
Capacity factor 0 to 1
Availability 0 to 1
Annual degradation 0 to 1
Contracted share 0 to 1
Curtailment 0 to 1
Entered contract price 0 to 1000000
Entered merchant price 0 to 1000000

Outputs

PPA Total Pre Curtailment Generation Conditional
About this output

Cumulative generation after capacity factor, availability, and degradation but before curtailment.

Unit MWh
PPA Total Delivered Generation Conditional
About this output

Pre-curtailment generation less curtailed MWh across ten years.

Unit MWh
PPA Total Curtailed Generation Conditional
About this output

Cumulative curtailed MWh before any compensation treatment.

Unit MWh
PPA Total Contract Revenue Conditional
About this output

Contracted delivered MWh times active contract price during the selected term.

Unit currency
PPA Total Merchant Revenue Conditional
About this output

Uncontracted and post-term delivered MWh times active merchant price.

Unit currency
PPA Total Curtailment Compensation Conditional
About this output

Eligible curtailed contracted MWh times contract price and the entered compensation percentage.

Unit currency
PPA Total Project Revenue Conditional
About this output

Contract revenue plus merchant revenue plus modeled curtailment compensation.

Unit currency
PPA Merchant Tail Revenue Conditional
About this output

Merchant revenue earned strictly after the selected PPA term.

Unit currency
PPA Average Realized Price Conditional
About this output

Total revenue including compensation divided by delivered MWh; zero when delivery is zero.

Unit currency/MWh
PPA Ending Annual Revenue Conditional
About this output

Total project revenue in the tenth modeled year.

Unit currency
PPA Contract Revenue Share Conditional
About this output

Contract energy revenue divided by total project revenue; compensation is not classified as contract energy revenue.

Unit fraction
Model Status
About this output

OK means generation, pricing, contract/merchant allocation, compensation, and revenue totals are finite and nonnegative.

No unit declared

Methodology

Purpose and model boundary

This model builds a ten-year energy-revenue schedule with capacity factor, availability, cumulative degradation, curtailment, contracted share, PPA term, contract pricing, merchant pricing, curtailment compensation, and a separately reported merchant tail.

It is a revenue-scenario model, not a market forecast, dispatch model, offtake agreement interpretation, resource assessment, valuation, financing recommendation, or guarantee. All operating factors, prices, terms, shares, and compensation assumptions are supplied by the user.

Inputs and units

Nameplate capacity is in MW, time is hours per year, energy is MWh, prices use one user-consistent currency per MWh, and revenues use the corresponding currency. The full-width annual grid contains exactly ten positional years with capacity factor, availability, annual degradation, contracted share, curtailment, entered contract price, and entered merchant price.

Contract price can follow an initial price with annual escalation or the entered annual path. Merchant price can follow an initial price with annual growth or its entered path. Curtailment can be uncompensated or compensated at contract price. The PPA term is 2, 3, 5, 7, or 10 years.

Governing relationships

Let D_t be the cumulative retained output after degradation. The workbook compounds degradation by year:

D_1 = 1 - degradation_1

D_t = D_(t-1) × (1 - degradation_t)

Generation before curtailment is:

Pre-curtailment MWh_t = Nameplate MW × Hours/year × Capacity factor_t × Availability_t × D_t

Curtailed MWh_t = Pre-curtailment MWh_t × Curtailment_t

Delivered MWh_t = max(0, Pre-curtailment MWh_t - Curtailed MWh_t)

For an escalated path, the year-t contract price is:

Contract price_t = Initial contract price × (1 + contract escalation)^(t - 1)

The merchant growth route uses the same compound form with merchant inputs. Entered-path modes use the corresponding grid price instead.

During the PPA term:

Contracted MWh_t = Delivered MWh_t × Contracted share_t

After term, contracted MWh is zero. Merchant MWh is delivered MWh less contracted MWh. Revenue is:

Contract revenue_t = Contracted MWh_t × Contract price_t

Merchant revenue_t = Merchant MWh_t × Merchant price_t

In compensated mode during the term:

Compensation_t = Curtailed MWh_t × Contracted share_t × Contract price_t × Compensation percent

Total project revenue is contract revenue plus merchant revenue plus compensation. Merchant-tail revenue includes merchant revenue only after the selected PPA term.

Calculation sequence

  1. Validate price routes, curtailment route, PPA term, scalar bounds, and all ten positional rows.
  2. Compound annual degradation and calculate generation before curtailment.
  3. Calculate curtailed and delivered MWh.
  4. Select escalated/grown or entered contract and merchant prices.
  5. Split delivered MWh between contract and merchant routes during the PPA term; route all delivered volume to merchant after term.
  6. Calculate contract revenue, merchant revenue, and any eligible curtailment compensation.
  7. Sum generation and revenue, isolate merchant-tail revenue, calculate realized price and contract-revenue share, and read year-ten revenue.
  8. Populate the contract-versus-merchant chart, test energy and revenue closure, and evaluate status.

Outputs and interpretation

Headline generation outputs are cumulative pre-curtailment and delivered MWh. Revenue outputs include contract, merchant, total project, and merchant-tail revenue. Supporting results report curtailed MWh, compensation, average realized price, ending annual revenue, and contract-revenue share.

Average realized price is total revenue including compensation divided by delivered MWh, or zero when delivery is zero. Contract-revenue share excludes compensation from the contract-energy numerator. The chart compares contract and merchant revenue by year and makes the transition to merchant exposure visible.

Validation and status logic

The workbook evaluates status in this order:

Condition Returned status
A price, curtailment, or term route is unsupported, a scalar bound fails, or years 1 through 10 are incomplete or out of position NOT VALID: choose supported price, curtailment, and term routes and complete years one through ten
Generation, price, revenue, energy closure, or revenue closure is nonnumeric, negative where prohibited, or outside the workbook's supported range NOT VALID: generation, price, or revenue arithmetic exceeds the supported range
Neither condition applies OK

Energy closure requires pre-curtailment generation to equal delivered plus curtailed generation within 0.000000001 × max(1, total pre-curtailment generation). Revenue closure applies the same relative tolerance to total revenue versus contract, merchant, and compensation components. The workbook has no CHECK state.

Assumptions and limitations

  • Annual degradation compounds multiplicatively and applies before curtailment.
  • Contracted share applies only through the selected PPA term. All delivered volume after term is merchant tail.
  • Revenue is quantity times user-entered price. The model performs no inflation-index, foreign-exchange, settlement, basis, or capture-price adjustment beyond the selected paths.
  • Curtailment compensation is a simple eligible-volume fraction and does not interpret contract language.
  • Hourly shape, negative prices, congestion, imbalance, renewable certificates, capacity payments, ancillary services, operating costs, and tax credits are excluded.
  • The merchant price path is a user scenario, not a market forecast.
  • All shipped operating, price, contract, and curtailment values are synthetic illustrations.

Restrictions and non-computing states

The grid must contain exactly ten complete rows, with year equal to row position 1 through 10. Capacity factor, availability, annual degradation, contracted share, and curtailment are from 0 through 1. Entered prices are nonnegative. Nameplate capacity is positive, hours are from 1 through 8,784, and compensation percent is from 0 through 1. Annual price escalation and merchant growth are from -0.5 through 1.

Zero prices, zero operating factors, or full curtailment are valid and may produce zero revenue. Inactive entered price paths remain part of the fixed grid but are ignored when their scalar growth route is selected. Entries outside the published limits or with an invalid grid shape are rejected before calculation; an in-range year in the wrong row returns workbook NOT VALID.

Errors and warnings

A rejected entry means the submitted values did not meet the published rules for options, types, limits, or fixed-grid shape. Workbook NOT VALID distinguishes an unsupported/incomplete input state from derived generation or revenue arithmetic failure. There is no workbook CHECK state. A connection or calculation-service failure is not an energy or revenue finding. OK confirms arithmetic closure, not production, price realization, or contract enforceability.

References

Wholesale market and bilateral-contract context follows the Federal Energy Regulatory Commission Energy Primer. Public context on factors affecting electricity prices follows the U.S. Energy Information Administration. No market price, forecast, PPA term, source chart, or external dataset is embedded.

This page is provided by LogicCommons for informational purposes only. Results are analysis outputs computed from the inputs you supply and are not engineering advice, a design, or a substitute for review by a licensed professional under the codes adopted where the work is built. Verify all inputs and results independently.

LogicCommons is in beta. If a result, label, or reference looks wrong, tell us here; we read every message.