Skip to content

ENEGEM cross-border export structural estimate

Generated: 2026-05-08. Model: jb_vpp.models.enegem_export. STRUCTURAL ESTIMATE, NOT A BACKTEST. Public ENEGEM and EMC data exposes only auction announcements (capacity, dates, counterparties); the USEP clearing-price time series is paywalled / behind an EMC participant account. All revenue figures here are upper bounds derived from a friction-stripped per-MWh formula with three USEP scenarios pinned to historical Singapore wholesale levels.

Reading guidance: treat these numbers as “what’s the theoretical ceiling if we assume the USEP daily-average lands at level X”. For committee-grade due diligence, replace this with a USEP-time-series backtest once EMC participant access is obtained.

At base USEP 120 SGD/MWh, just 61 MW of cross-border export allocation generates enough NPV uplift to close the entire 349 M single-site BESS gap from vpp_service_revenue_required.md — assuming 25% capacity factor and default cross-border friction.

This is the headline because it reframes the BESS-bankability conversation: BESS is structurally NPV-negative under BTM-only economics, but a modest ENEGEM allocation structurally upper bounds a revenue stream large enough to flip the deal. The gating questions are not technical — they’re:

  1. Can we actually obtain the cross-border allocation? (Bilateral, capped, NDA.)
  2. Does USEP land near 120 SGD/MWh in years 1-20 of operation? (Backtest gap.)
  3. Is the cross-border friction (transmission tariff + aggregator margin) really within the assumed 8% + RM 102/MWh band?
ScenarioUSEP SGD/MWhGross RM/MWhNet RM/MWhAnnual revenue (100 MW × 25%)NPV uplift (20 yr @ 8%)Cap needed to close 349 M BESS gap
USEP low (soft year)8027214331.3 M307 M113.7 MW
USEP base (typical)12040826558.1 M570 M61.2 MW
USEP high (stress)200680510111.7 M1,097 M31.8 MW
gross_RM_per_MWh = USEP_SGD_per_MWh × FX_RM_per_SGD
net_RM_per_MWh = gross
− transmission_charge_SGD × FX
− aggregator_margin × gross
− line_losses × gross
annual_export_MWh = export_capacity_MW × capacity_factor × 8760
annual_revenue = annual_export_MWh × net_RM_per_MWh
NPV_uplift = annual_revenue × annuity_factor(0.08, 20)
ParamDefaultRationale
FX RM/SGD3.402024-2025 typical
Transmission charge SGD/MWh30.00Cross-border interconnect tariff (regional benchmark)
Aggregator margin8%Wholesaler/aggregator take
Line losses2%Transmission losses on the cross-border leg
Capacity factor (default)25%~2,200 hr/yr daylight + USEP-clears-spread overlap
Discount rate8%Match BTM/aggregator/PPA models
Horizon20 yrMatch BTM/aggregator/PPA models
TierUSEP daily-avg SGD/MWhSource
low802023 lower tertile of EMC public daily-avg USEP
base1202024-2025 typical daily-avg USEP
high200Peak-window or gas-stress USEP days, ~90th pct

These are publicly observable headline levels — not derived from the paywalled 30-min time series.

  1. Boardroom upper bound on cross-border revenue. When a counterparty asks “how much could cross-border export be worth”, quote the base scenario NPV uplift at the proposed allocation MW and lead with the “structural estimate” caveat.
  2. Allocation-target sizing. Use required_capacity_for_npv_target to answer “how many MW do we need to close gap X?” inverse-solver questions without manually iterating.
  3. Friction sensitivity. Override transmission_charge_sgd_per_mwh, aggregator_margin_pct, or line_loss_pct per scenario to test bilateral contract terms before negotiation.
  4. DO NOT use these numbers in NPV-positive claims to investors without the “structural estimate, not backtest” qualifier. The fundamental gap between announcement-only data and a USEP backtest is too large.
  • No USEP backtest. A real USEP-time-series ingester would replace each scenario’s flat daily-average with hour-by-hour realised prices, shrinking the upper bound (most hours are below the daily peak; export hours selected by capacity-factor logic might miss the 90th percentile entirely).
  • Volume assumption is a flat capacity factor. Real export hours are bounded by (a) when surplus PV/BESS is available locally and (b) when USEP clears above the cross-border floor cost. A coupled dispatch model would tighten this — currently in the deferred backlog (models/dispatch_lp.py’s ENEGEM extension).
  • Allocation-MW availability is bilateral, not market. The 1 GW-class cross-border arrangements between MY and SG are negotiated bilaterally (Tuas Power / SP Group / Sembcorp on the SG side; TNB/Generation Co on the MY side). Securing 30-100 MW of allocation is a regulatory + commercial outreach task, not a technical one.
  • FX is not hedged. SGD/RM volatility could move ±10% over a 20-yr horizon; the NPV uplift figures assume a static 3.40.
  • The model is linear in capacity and CF. No diminishing returns at scale — at 500+ MW of allocation, the SG market cannot absorb the volume at the assumed USEP-base price; that constraint is not represented here.

The ENEGEM structural NPV uplift can be combined with the headline numbers from:

  • btm_economics_dc100.md: PV+BTM-BESS at 100 MW DC = +83 M / −349 M NPV
  • aggregator_portfolio.md: 10-site portfolio at instant deployment = −2,213 M
  • portfolio_timeline.md: 10-site phased = −1,843 M
  • carbon_re100_analysis.md: hyperscaler carbon stack = +211 M

A “full-stack” view at base USEP × 100 MW allocation × 25% CF:

−1,843 M phased portfolio (BTM + aggregator)
+ 570 M ENEGEM structural (100 MW × base USEP)
+1,000 M carbon attribute (10 anchors × hyperscaler USD 100/tCO2 × 0.5 anchored)
--------
− 273 M net (still negative without further stack)

The structural ENEGEM layer is the biggest single re-rerating lever in the backlog. Securing the allocation deserves explicit commercial workstream ownership.

reports/enegem_export_estimate.json has all three scenarios’ inputs, gross and net per-MWh rates, annual volumes/revenue, NPV uplifts, and the required-capacity inverse-solve for closing the 349 M BESS gap.