Skip to content

How to Compute a Base-Load Fee Price per MWh

This recipe turns a deal's fee price and capacity (MW) into a price per MWh — and a per-15-minute share — by combining the fee with the total delivered energy (MWh).

Scope: base-load only

This derivation assumes a base-load product — a constant MW capacity across the whole delivery period. For shaped / peak / off-peak products the single capacity figure is not representative; work from the 15-minute volumes (fct_volume_pwr_15m) instead, where each row already carries begin_utc / end_utc and a fixed quarter-hour.


Inputs

Symbol Meaning Source view · column
px Fee price (per-MW fee rate) fct_deal_fee.fee
volume_mw Base-load capacity (MW) fct_deal_fee.volume
total_volume_mwh Total delivered energy (MWh) sum(fct_volume_pwr_daily.volume)

fct_deal_fee carries one row per deal · side · fee; fct_volume_pwr_daily carries daily power volume in MWh. They join on the deal, version and side (tran_id, tran_version, side identifier).


The formula

total_fee_cflow           = px × volume_mw                          [currency]
number_of_hours           = total_volume_mwh / volume_mw            [h]   (MWh / MW = h)
price_per_mwh             = px / number_of_hours                    [currency/MWh]
price_per_mwh_per_quarter = price_per_mwh / 4                       [currency/MWh per 15-min]

number_of_hours is the base-load bridge between the two volume bases (MW and MWh). Substituting it back shows the price per MWh is just the total fee spread over the total energy:

price_per_mwh = (px × volume_mw) / total_volume_mwh = total_fee_cflow / total_volume_mwh

A 15-minute interval at 1 MW delivers 0.25 MWh, so the quarter-hour share is one quarter of the hourly value. For a general interval, multiply price_per_mwh by interval_minutes / 60.


Query

with fee as (
    -- fee price (px) and base-load capacity (MW), per deal · side · fee
    select
        deal_id,
        tran_id,
        tran_version,
        param_seq_num as side_id,
        fee_seq_num,
        fee           as px,          -- per-MW fee rate
        volume        as volume_mw,   -- base-load capacity in MW
        currency,
        fee_calc_unit,
        price_unit,
        volume_type
    from fct_deal_fee
),

energy as (
    -- total delivered energy (MWh), summed to deal · side
    select
        tran_id,
        tran_version,
        side_id,
        sum(volume) as total_volume_mwh
    from fct_volume_pwr_daily
    group by tran_id, tran_version, side_id
)

select
    f.deal_id,
    f.side_id,
    f.currency,
    f.px,
    f.volume_mw,
    e.total_volume_mwh,

    f.px * f.volume_mw                                            as total_fee_cflow,
    e.total_volume_mwh / nullif(f.volume_mw, 0)                   as number_of_hours,
    (f.px * f.volume_mw) / nullif(e.total_volume_mwh, 0)         as price_per_mwh,
    ((f.px * f.volume_mw) / nullif(e.total_volume_mwh, 0)) / 4   as price_per_mwh_per_quarter

from fee f
left join energy e
    on  f.tran_id      = e.tran_id
    and f.tran_version = e.tran_version
    and f.side_id      = e.side_id
-- where f.deal_id = <your base-load deal>

Check the unit assumptions

The arithmetic relies on three things being true for your deal — confirm them before relying on the result:

  • fee is a per-MW rate (so fee × MW is a cashflow) — check fee_calc_unit / price_unit. If fee is already a total cashflow, use it directly as total_fee_cflow and skip the first multiplication.
  • fct_volume_pwr_daily.volume is MWh for the product (it is, by definition, for power) and covers the same delivery period as the fee.
  • One base-load fee per side — a side may carry several fee_seq_num rows (different charge types); filter to the fee you intend to price.
  • Direction — decide whether you want signed (pay vs receive) or absolute magnitudes before aggregating.

Worked example

A base-load deal of volume_mw = 10 MW, a fee px = 50 (currency/MW), and a full non-leap year of delivery (total_volume_mwh = 10 MW × 8,760 h = 87,600 MWh):

total_fee_cflow           = 50 × 10        = 500       currency
number_of_hours           = 87,600 / 10    = 8,760     h
price_per_mwh             = 50 / 8,760      ≈ 0.005708  currency/MWh
price_per_mwh_per_quarter = 0.005708 / 4    ≈ 0.001427  currency/MWh per 15-min

Cross-check: total_fee_cflow / total_volume_mwh = 500 / 87,600 ≈ 0.005708 — matches price_per_mwh.