Calculator overview
Inputs and outputs
This summary comes from the calculator's published input and output contract.
Inputs
- PPA Contract Price Mode
-
Default Annual contract-price escalation Allowed Annual contract-price escalation, Entered contract-price path
About this input
Uses an annually escalated initial contract price or the ten entered contract-price values.
- PPA Merchant Price Mode
-
Default Annual merchant-price growth Allowed Annual merchant-price growth, Entered merchant-price path
About this input
Uses an annually growing initial merchant price or the ten entered merchant-price values.
- PPA Curtailment Mode
-
Default Compensated at contract price Allowed Uncompensated curtailment, Compensated at contract price
About this input
Leaves curtailment uncompensated or pays the eligible contracted fraction at the active contract price and entered compensation percentage.
- PPA Contract Term Years
-
Default 7 Allowed 2, 3, 5, 7, 10
About this input
Selects the final year in which the entered contracted share is applied.
- PPA Nameplate Capacity MW
-
Unit MW Default 100 Range 0.001 to 1000000
About this input
Installed nameplate capacity used to convert annual operating factors to MWh.
- PPA Hours Per Year
-
Unit hours/year Default 8760 Range 1 to 8784
About this input
Annual hour count applied to nameplate capacity in every modeled year.
- PPA Initial Contract Price
-
Unit currency/MWh Default 55 Range 0 to 1000000
About this input
Year-one price used by the annual contract escalation route.
- PPA Annual Contract Escalation
-
Unit fraction/year Default 0.02 Range -0.5 to 1
About this input
Annual compound change applied to the initial contract price.
- PPA Initial Merchant Price
-
Unit currency/MWh Default 40 Range 0 to 1000000
About this input
Year-one price used by the annual merchant growth route.
- PPA Annual Merchant Growth
-
Unit fraction/year Default 0.025 Range -0.5 to 1
About this input
Annual compound change applied to the initial merchant price.
- PPA Curtailment Compensation Percent
-
Unit fraction Default 0.9 Range 0 to 1
About this input
Fraction of eligible curtailed contracted volume compensated in the compensated route.
- PPA Annual Grid
-
Default 10 rows
About this input
Exactly ten complete positional rows containing operating factors, contract share, curtailment, and entered contract and merchant prices.
Column Range 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
-
Unit MWh
About this output
Cumulative generation after capacity factor, availability, and degradation but before curtailment.
- PPA Total Delivered Generation Conditional
-
Unit MWh
About this output
Pre-curtailment generation less curtailed MWh across ten years.
- PPA Total Curtailed Generation Conditional
-
Unit MWh
About this output
Cumulative curtailed MWh before any compensation treatment.
- PPA Total Contract Revenue Conditional
-
Unit currency
About this output
Contracted delivered MWh times active contract price during the selected term.
- PPA Total Merchant Revenue Conditional
-
Unit currency
About this output
Uncontracted and post-term delivered MWh times active merchant price.
- PPA Total Curtailment Compensation Conditional
-
Unit currency
About this output
Eligible curtailed contracted MWh times contract price and the entered compensation percentage.
- PPA Total Project Revenue Conditional
-
Unit currency
About this output
Contract revenue plus merchant revenue plus modeled curtailment compensation.
- PPA Merchant Tail Revenue Conditional
-
Unit currency
About this output
Merchant revenue earned strictly after the selected PPA term.
- PPA Average Realized Price Conditional
-
Unit currency/MWh
About this output
Total revenue including compensation divided by delivered MWh; zero when delivery is zero.
- PPA Ending Annual Revenue Conditional
-
Unit currency
About this output
Total project revenue in the tenth modeled year.
- PPA Contract Revenue Share Conditional
-
Unit fraction
About this output
Contract energy revenue divided by total project revenue; compensation is not classified as contract energy revenue.
- Model Status
-
No unit declared
About this output
OK means generation, pricing, contract/merchant allocation, compensation, and revenue totals are finite and nonnegative.
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
- Validate price routes, curtailment route, PPA term, scalar bounds, and all ten positional rows.
- Compound annual degradation and calculate generation before curtailment.
- Calculate curtailed and delivered MWh.
- Select escalated/grown or entered contract and merchant prices.
- Split delivered MWh between contract and merchant routes during the PPA term; route all delivered volume to merchant after term.
- Calculate contract revenue, merchant revenue, and any eligible curtailment compensation.
- Sum generation and revenue, isolate merchant-tail revenue, calculate realized price and contract-revenue share, and read year-ten revenue.
- 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.
Found a problem, or have an idea?
Tell us if a result looks wrong, a label is unclear, or something is missing. We read every message.
LogicCommons is in beta. If a result, label, or reference looks wrong, tell us here; we read every message.