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:
- Can we actually obtain the cross-border allocation? (Bilateral, capped, NDA.)
- Does USEP land near 120 SGD/MWh in years 1-20 of operation? (Backtest gap.)
- Is the cross-border friction (transmission tariff + aggregator margin) really within the assumed 8% + RM 102/MWh band?
| Scenario | USEP SGD/MWh | Gross RM/MWh | Net RM/MWh | Annual revenue (100 MW × 25%) | NPV uplift (20 yr @ 8%) | Cap needed to close 349 M BESS gap |
|---|---|---|---|---|---|---|
| USEP low (soft year) | 80 | 272 | 143 | 31.3 M | 307 M | 113.7 MW |
| USEP base (typical) | 120 | 408 | 265 | 58.1 M | 570 M | 61.2 MW |
| USEP high (stress) | 200 | 680 | 510 | 111.7 M | 1,097 M | 31.8 MW |
How the structural model works
Section titled “How the structural model works”gross_RM_per_MWh = USEP_SGD_per_MWh × FX_RM_per_SGDnet_RM_per_MWh = gross − transmission_charge_SGD × FX − aggregator_margin × gross − line_losses × gross
annual_export_MWh = export_capacity_MW × capacity_factor × 8760annual_revenue = annual_export_MWh × net_RM_per_MWhNPV_uplift = annual_revenue × annuity_factor(0.08, 20)Default friction parameters
Section titled “Default friction parameters”| Param | Default | Rationale |
|---|---|---|
| FX RM/SGD | 3.40 | 2024-2025 typical |
| Transmission charge SGD/MWh | 30.00 | Cross-border interconnect tariff (regional benchmark) |
| Aggregator margin | 8% | Wholesaler/aggregator take |
| Line losses | 2% | Transmission losses on the cross-border leg |
| Capacity factor (default) | 25% | ~2,200 hr/yr daylight + USEP-clears-spread overlap |
| Discount rate | 8% | Match BTM/aggregator/PPA models |
| Horizon | 20 yr | Match BTM/aggregator/PPA models |
USEP scenario pinning
Section titled “USEP scenario pinning”| Tier | USEP daily-avg SGD/MWh | Source |
|---|---|---|
| low | 80 | 2023 lower tertile of EMC public daily-avg USEP |
| base | 120 | 2024-2025 typical daily-avg USEP |
| high | 200 | Peak-window or gas-stress USEP days, ~90th pct |
These are publicly observable headline levels — not derived from the paywalled 30-min time series.
How to use this model
Section titled “How to use this model”- 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.
- Allocation-target sizing. Use
required_capacity_for_npv_targetto answer “how many MW do we need to close gap X?” inverse-solver questions without manually iterating. - Friction sensitivity. Override
transmission_charge_sgd_per_mwh,aggregator_margin_pct, orline_loss_pctper scenario to test bilateral contract terms before negotiation. - 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.
Limitations and gating risks
Section titled “Limitations and gating risks”- 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.
Stacking onto other reports
Section titled “Stacking onto other reports”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 NPVaggregator_portfolio.md: 10-site portfolio at instant deployment = −2,213 Mportfolio_timeline.md: 10-site phased = −1,843 Mcarbon_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.
JSON output
Section titled “JSON output”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.