CEA Power Dashboard

Serbia Electricity Market Intelligence

Prices, renewable capture, cross-border signals, project economics and CEA market intelligence in one workspace.

Dashboard navigation
Selected: 26 Jul 2026 - 24 Aug 2026Time zone: Europe/BelgradeData coverage is shown beside each dataset.Compare: 26 Jun 2026 - 25 Jul 2026

Data sources & status policy

  • SEEPEX / ENTSO-E day-ahead data are the observed market-price inputs for Serbia. Regional ENTSO-E A44 series retain their published market time unit, including 15-minute intervals where applicable.
  • ENTSO-E Transparency Platform also supplies actual generation by production type (A75), actual load, physical cross-border flows, outages and explicit allocation results.
  • PVGIS (JRC, European Commission) is used for calculator PV profiles. Where Serbia B16 solar generation is unavailable for capture analytics, a clear-sky solar weighting proxy is used and explicitly labelled modelled.
  • AERS, EMS, Ministry of Mining and Energy and Energy Community provide regulatory and policy context where stated.
  • Statuses distinguish observed live data, cached observed data, partial coverage, modelled/estimated values and unavailable data. Synthetic/demo values must never silently replace an observed market KPI.

Market formulas

Baseload price
baseload = Σ price_interval × duration / Σ duration

Calculated only from complete Europe/Belgrade delivery days. A complete hourly delivery day contains every expected interval: 23, 24 or 25 hours depending on DST.

Peakload price
peakload = mean(price[Mon–Fri & 08:00–20:00 Europe/Belgrade])

Uses the same complete-day sample as baseload.

Negative price intervals
negative_intervals = count(observed_price < 0)

Missing observations are not converted to zero.

Regional spread
spread_h = regional_price_h − Serbia_price_h

Mixed 15/60-minute markets are aligned to a common hourly comparison level using duration-weighted prices before spreads are calculated.

Solar capture price
capture_solar = Σ(price_h × solar_h) / Σ(solar_h)

Only matched price/generation timestamps enter observed-generation capture calculations. Missing ENTSO-E generation is not forward-filled.

Wind capture price
capture_wind = Σ(price_h × wind_h) / Σ(wind_h)

Onshore and offshore series are explicitly aggregated where both are published. Missing wind observations remain missing rather than 0 MW.

Capture rate
capture_rate = capture_price / baseload

Below 100% indicates that the technology earns below the reference baseload price over the comparable sample.

Merchant revenue
merchant_revenue = Σ(generation_h × price_h)

Coverage rules

  • Complete means the selected range is covered without internal missing or incomplete days and without failed/capped source fetches.
  • Partial is shown whenever range bounds are incomplete, an internal day is missing/incomplete, a source fetch failed or the fetch cap was reached.
  • Cached data are labelled separately as cached-complete or cached-partial. An unavailable source is not represented as numeric zero.
  • Physical-flow net positions require both directions for the same timestamp. If either direction is missing, net flow for that timestamp is unavailable rather than assumed 0 MW.

Project Economics methodology

Futures-anchored hourly scenario
expected_price_h = historical_shape_h + target_month − historical_month_average

Month contracts take priority, then quarter, then calendar year. Later-year annual values are weighted by Europe/Belgrade delivery hours, including leap years and DST. Missing settlements are never fabricated.

Renewable settlement
revenue_h = PPA_settlement_h + merchant_settlement_h

Annual and monthly revenue use the same hourly settlement engine. Fixed/pay-as-produced, partial PPA and baseload PPA therefore reconcile exactly between monthly and annual views.

BESS dispatch
SOC_h = SOC_(h−1) + charge_h × η_charge − discharge_h / η_discharge

The deterministic arbitrage heuristic enforces power, energy, SOC, availability, grid and local-day cycle limits. A cycle is dispatched only when the spread remains economic after round-trip losses and variable throughput cost. Local days may contain 23, 24 or 25 hours.

LCOS
LCOS = discounted(CAPEX + OPEX + charging_cost + augmentation) / discounted_discharged_MWh

Lifetime discounted costs and discharged energy include degradation and augmentation assumptions.

Hybrid lifetime revenue
revenue_y = renewable_market/PPA_y + battery_merchant_y + tolling_y + ancillary_y

Wholesale-price scenarios scale only market-linked revenue. Fixed battery tolling and ancillary revenue are not multiplied by power-price escalation or renewable degradation; battery merchant revenue follows battery capacity degradation.

Hybrid allocation
renewable export → clipped-energy charging → optional grid charging → constrained discharge

All exports share one interconnection limit. Renewable energy that would otherwise be clipped is charged first when recovery is enabled.

Assumptions & limitations

  • Negative market prices are valid observations and are not treated as data errors.
  • Capture analytics are only as complete as the matched price and generation coverage; coverage/source labels should be considered together with the KPI.
  • Public ENTSO-E explicit-allocation quantities are auction results, not trader-owned or executable capacity. Route economics are expressed per MW unless executable capacity is supplied from a separately verified source.
  • Project Economics is an indicative deterministic model, not a dispatch optimiser or bankable due-diligence model. Tax, detailed degradation engineering, financing covenants and market-access constraints may require project-specific modelling.
  • This tool provides indicative analysis and is not financial or investment advice.