Skip to content

Executive Summary

As of 2026-05-08. Reference scenario: 60 MW BTM PV + 60 MWh BESS @ a hypothetical 100 MW JB data center anchor.

⚠ Risk-adjusted finding (added post-hoc)

Section titled “⚠ Risk-adjusted finding (added post-hoc)”

Monte Carlo over the risk register below — with risks scoped to the structures they actually affect (PV-alone is not exposed to hyperscaler-carbon-attribute price risks, since it doesn’t book carbon revenue) — shows PV-alone has P(NPV<0) = 13%, much lower than the previously published 26% which spuriously applied carbon-attribute risks to a structure that doesn’t carry them. Carbon-stacked structure has P(NPV<0) = 0.2%. Both are bankable at conservative project-finance bars, but carbon-stacked is decisively so.

Mitigation-value attribution (2026-05-08): zeroing each risk’s probability one at a time reveals the highest-leverage PPA clauses:

Risk mitigated (PV-alone)P(NPV<0) baselineAfter mitigationΔP
ICPT subsidy reform (tariff-floor PPA clause)12.6%0.0%−12.6pp
DC commissioning slips ≥ 2 years (phased PV PPA)12.6%8.4%−4.1pp
ENEGEM upside lost (negative — losing the upside)12.6%17.7%+5.1pp
BESS capex stays high (zero impact at PV-alone)12.6%12.6%0.0pp

Headline action: a single tariff-floor clause in the BTM PPA — protecting against ICPT subsidy reform — is the highest-value commercial-negotiation item, eliminating the entire P(NPV<0) tail for PV-alone.

Top-priority clause changes by commercial structure:

StructureTop single-clause priorityΔP(<0)
PV alone (vanilla PPA)ICPT tariff-floor clause−12.6pp
PV + carbon (bundled, no CFE)Carbon-attribute price floor (vs hyperscaler-internal-carbon collapse)−0.23pp
PV + carbon + 24/7 CFEICPT tariff-floor clause−0.08pp

For vanilla PPAs, ICPT-floor is decisively #1. For bundled-carbon PPAs, the carbon-attribute floor matters more because the carbon-NPV layer (+211 M) is the source of robustness — protecting its downside is the biggest tail defender. For 24/7 CFE structures, the analytical scenario tree shows zero negative patterns at midpoint impacts (Monte Carlo’s residual 0.08% comes from impact-range sampling within fired risks); ICPT-floor still tops the ranking primarily through E[NPV] uplift.

Correlated-risk overlay: latent-Gaussian copula with positive within-cluster correlations (energy-policy stress, tech pullback, decarb push) shifts P(NPV<0) modestly: PV-alone 12.6% → 13.8%, PV+carbon 0.23% → 0.66%. Carbon-stacked stays decisively below 1% even under correlated stress — the structural-robustness claim holds.

Top 5 most-probable joint scenarios (PV-alone, analytical enumeration of all 16 risk-trigger patterns at midpoint impacts):

PNPV (M RM)Triggered risks
25.5%+83NONE — base case
13.7%+53DC commissioning slip
10.9%+138ENEGEM upside
10.9%+5ICPT reform
6.4%+83BESS capex stays high (zero-impact risk)

Top 5 cover 67% of probability mass; top 10 cover 90%. The single most probable outcome (25.5%) is “no risks fire” → +83 M. The first NPV-negative pattern is rank 7 (“ICPT + DC slip” at 5.9% → −25 M). See risk_scenario_tree.json for the full 16-pattern enumeration.

Worst-credible-case enumeration across all structures:

StructureWorst NPV (midpoint impacts)Patterns NPV<0 / TotalWorst-case P
PV alone (60 MW)−25 M2 / 165.9%
PV + carbon (USD 100/tCO2)−22 M2 / 1280.13%
PV + carbon + 24/7 CFE premium+8 M0 / 128n/a

Headline structural finding: PV+carbon+CFE produces zero NPV-negative outcomes across all 128 enumerated risk-trigger patterns when the 24/7 CFE premium materialises. PV+carbon (without CFE) has only 2 negative patterns, both requiring ≥4 of 7 risks to fire simultaneously, with cumulative probability ~0.2%. PV-alone has 2 negative patterns at cumulative probability ~7%. The carbon-stacked structure is not just “low P(NPV<0)” — it is deterministically positive across the entire enumerated joint scenario space when CFE applies.

On-site BTM PV is bankable today at 13.0% IRR / 8-year payback / +83 M RM NPV under current ICPT (16 sen/kWh). BESS is structurally NPV-negative at current capex (5 M RM/MWh) and remains so under multi-site aggregation. Carbon attributes priced at hyperscaler internal rates (USD 100/tCO2) deliver +211 M RM NPV — 2.5× the BTM-only NPV — and reframe the commercial case from “energy avoided cost” to “RE100 fulfilment with on-site auditability.” The recommended structure is a 24/7 CFE Premium PPA at RM 450–550/MWh with the BESS commitment trigger-locked to 2027–2028 (capex < 3 M RM/MWh).

LayerNPV (RM mn)Notes
BTM avoided cost (LP dispatch + cooling CDH, full-year corrected)+83bankable as standalone PV PPA
BESS at 5 M RM/MWh capex−287structurally negative; defer until ≤ 2.0 M RM/MWh
Carbon attributes @ USD 100/tCO2+211hyperscaler internal pricing
24/7 CFE premium ~+30conditionalonly credible if PV ≥ 200 MW (cfe_247_analysis.md); at 60 MW PV the on-site 24/7 share is only 8% so no real “premium” basis
TOTAL (PV + carbon, no BESS)+293recommended commercial structure today

Methodology correction (2026-05-08): prior versions used avg_annual_savings over a 6-row series that included a partial-year tail (1 MWh × 7 hours of MYT 2025), biasing every NPV downward by ~52 M RM uniformly. Filtering to full years only (≥ 4000 hours of weather per year) gives the corrected numbers above. Qualitative conclusions (PV bankable, BESS negative, carbon dominant) are unchanged; quantitative magnitudes are larger.

PPA tariff bargaining range (third-party developer, kWh-only and bundled)

Section titled “PPA tariff bargaining range (third-party developer, kWh-only and bundled)”
RM/MWhSource
Developer floor @ 8% IRR (kWh-only)299ppa_pricing.md
Tenant ceiling — LP avoided cost (energy + ICPT 16 sen + MD reduction)406ppa_pricing.md (auto-derived from BTM JSON)
kWh-only surplus+107 (~26% of ceiling)healthy under current ICPT; collapses to ~0 if ICPT reformed (ceiling falls to ~245)
Bundled ceiling — kWh + hyperscaler carbon @ USD 100/tCO2696ppa_pricing.md
Practical bundled tariff target (mid-spread)450–550dev margin 150–250 RM/MWh, tenant margin 150–250 RM/MWh under bundled ceiling

Headline: vanilla PPA has a healthy 26% bargaining range under current ICPT, but it collapses entirely under ICPT subsidy reform (ceiling 245 < floor 299). Bundled PPA captures the hyperscaler’s idiosyncratic valuation of the renewable attribute (~290 RM/MWh above market REC price), opening a 4–7× wider bargaining range that survives any ICPT regime. The deal economics are dominated by carbon-attribute pricing, not kWh price — same conclusion as the stacked-NPV table, framed as a tariff.

Target-IRR sensitivity — does the PPA still clear at higher equity returns?

Target IRRFloor RM/MWhVanilla surplusBundled surplusFeasibility
8%299+107+397both comfortable
10%340+65+356vanilla thin, bundled comfortable
12%384+22+312vanilla thin, bundled comfortable
15%454−48+243vanilla INFEASIBLE; carbon-stacked still works
18%526−120+170vanilla infeasible; bundled workable

Equity-heavy financing structures (≥12% IRR) make the vanilla PPA infeasibleonly the carbon-stacked structure clears. This adds a structural reason to bundle: not just “more attractive” but required for any non-debt-heavy capital stack.

  1. Sign 60 MW BTM PV PPA today — IRR 13.0%, 8-year payback, +83 M RM NPV. Independent of BESS, ENEGEM, or VPP service. [btm_economics_dc100.md]
  2. Negotiate tariff-floor clause in the PPA — single highest-value contract item; protects up to RM 105 M NPV against ICPT subsidy reform. [sensitivity_tornado.md]
  3. Lead the commercial pitch with carbon, not avoided cost — for hyperscaler tenants, carbon NPV is 2.5× the BTM-only NPV. Vanilla PPA bargaining surplus is 107 RM/MWh (developer floor 299, tenant ceiling 406, ~26% room) but ICPT reform collapses it (ceiling 245 < floor 299); bundled PPA at hyperscaler internal carbon (USD 100/tCO2) opens a bundled ceiling of 696 RM/MWh that survives ICPT regime risk. [ppa_pricing.md] [carbon_re100_analysis.md]
  4. Defer BESS commitment with a trigger conditionbess_trigger_curve.md shows BESS only flips NPV-positive with VPP service revenue (BTM-only never triggers, even at BNEF 2035 floor capex). Trigger years: 2025 if premium hyperscaler PPA at ≥ 180k RM/MW/mo signs; 2027 with strong VPP stack at 120k; 2031 if 24/7 CFE premium at 60k. Pre-negotiate the framework agreement; the trigger is “VPP contract signed”, not “capex below threshold”. [bess_trigger_curve.md] [vpp_service_revenue_required.md]
  5. Structure as BTM Additionality PPA with anchor hyperscaler — target tariff RM 450–550/MWh (developer captures ~150–250 RM/MWh margin over the 299 vanilla floor; tenant captures ~150–250 RM/MWh below the 696 bundled ceiling at internal carbon pricing). Note: at 60 MW PV the on-site 24/7 hourly matching is only ~8% (cfe_247_analysis.md); true 24/7 CFE requires off-site PPA layer (CRESS/CGPP/ENEGEM) on top. BESS is a trigger-conditional option for tenants wanting verified 24/7 share above 25%, which requires PV ≥ 200 MW (land-adjacent, beyond rooftop). [ppa_pricing.md] [carbon_re100_analysis.md] [cfe_247_analysis.md]
FindingEvidenceSource
JB centroid solar resource: 1,661 kWh/m²/yr, CF ~14.8%5y NASA POWER 9-pt gridcross_comparison.md
POWER vs METAR T-bias: +0.10 °C over 5y43,818 aligned hourscross_comparison.md
Peninsular consumption +6% YoY in H1 2024DOSM monthly datacross_comparison.md
77% fossil grid (44% coal, 33% gas) → high carbon intensityEmber 2024 monthlycarbon_re100_analysis.md
MY grid CO2 intensity: 631 gCO2/kWh (2024 measured)Embercarbon_re100_analysis.md
ICPT 2022-H2 step from 3.7 → 20 sen/kWh; current 16 senTNB / ST static referencetnb_icpt.yaml
ETOU peak window CDH ratio 1.72× off-peak5y POWER analysisload_synthesizer.md
LP dispatch lifts BESS savings 14% over heuristic — but does not flip NPVLP cross-validationbtm_economics_dc100.md
Aggregation does NOT change per-MW BESS economics10-site portfolio sweepaggregator_portfolio.md
Required VPP service revenue: 209 kRM/MW/monthinverse NPV at current capexvpp_service_revenue_required.md
  • NPV monthly reconciliation against DOSM is exact (algebraic by construction, residual 7.9e-15). Not a fitted result.
  • Weather-year noise is small relative to other risks — across 2020-2024, per-year PV-only savings range 31.27 → 32.78 M RM (CoV 2.1%, std 0.68 M/yr). Translates to ~6.7 M RM std on NPV (8% of base) — a small fraction of any single risk-register lever (ICPT alone is 60+ M).
  • LP dispatch (CBC solver) shows the heuristic was leaving 14% on the table — full cross-validation against analytical tornado at 8 corner cases shows < 1% nonlinearity at extremes. Tornado rankings are robust.
  • Top 3 sensitivity levers: BESS CapEx (370 M range) >> ICPT (106 M) > PV CapEx (84 M). Bottom 5 levers (RTE, cycles, MD ±20%, peak share, PV in peak fraction) collectively < 70 M.
  • Cooling CDH refinement (PUE 0.008/°C above 25°C) adds +6.6 to +8.1 M NPV uplift — modest but meaningful, especially aligns model with what hyperscaler tenant runs.
  • BESS breakeven is invariant of portfolio size (linear per-MW economics). Aggregation buys market access, not financial wedge.
  • Vanilla PPA bargaining surplus is healthy today (107 RM/MWh, ~26%) but fragile under ICPT regime risk — the tornado puts ICPT removal at −60 M NPV per 8 sen, dropping the tenant ceiling from 406 → 245 RM/MWh, BELOW the 299 developer floor. Bundled PPA with hyperscaler is the only structure where the bargaining range survives ICPT reform.
  • ICPT tariff-floor PPA clause is the single highest-leverage mitigation — zeroing ICPT subsidy reform from the risk register drops PV-alone P(NPV<0) from 12.6% to 0.0% (entire negative tail collapses). DC commissioning phasing is #2 at 4.1pp reduction. Mitigation-value attribution via per-risk zero-out (risk_mitigation_value.json).
  • PV+carbon+24/7 CFE produces zero NPV-negative outcomes across all 128 enumerated risk-trigger patterns at midpoint impacts. PV+carbon (no CFE): 2/128 negative, both requiring ≥4 of 7 risks to fire simultaneously, cumulative probability ~0.2%. PV-alone: 2/16 negative at cumulative probability ~7%. Analytical scenario-tree enumeration in risk_scenario_tree.json.
  • Correlation amplifies “energy-policy stress” joint patterns 1.6–2.3× over independent expectations — empirical scenario tree under latent-Gaussian copula shows ICPT + BESS-stays-high firing together 1.62× more frequently than independent product, ICPT + BESS + DC-slip 2.30× — exactly the “everything goes wrong at once” patterns risk managers care most about. Net P(NPV<0) tail thickens from 7.35% (independent, midpoint) to 8.74% (correlated, empirical).
  • Vanilla PPA is structurally infeasible at IRR ≥ 15% — at 15% target IRR the developer floor (454 RM/MWh) exceeds the tenant ceiling (406 RM/MWh). Equity-heavy financing structures cannot close on a vanilla PPA; carbon-stacked is the only viable structure. This gives a third structural reason to bundle (alongside +211 M carbon NPV and ICPT-reform robustness): non-debt-heavy capital stacks have no other option.
Open itemWhy it mattersResolution path
Real Johor electricity seriesReplaces modelled GDP-share proxy (±5 pp uncertainty)TNB internal data — commercial outreach
Single real customer profileCalibrates synthesizer α coefficients (currently rule-based)Outreach to one Johor industrial customer
TNB current tariff E1/E2/E3 rate valuesAffects absolute NPV by ±20%Read latest TNB tariff PDF
EMC USEP price feedQuantifies ENEGEM cross-border revenueEMC subscription / scraping with credentials
MY 24/7 CFE PPA market clearingConfirms RM 100/MWh premium estimateTrack Microsoft/Google JS-SEZ contract precedents
ICPT trajectory beyond 2025-H1Each 6-month review changes margin by ~5-10%ST gazette monitoring (every 6 months)
IRDA industrial park breakdownCounty-level load allocation accuracyIRDA data request
dc_tracker phasing accuracyCashflow timing in portfolio NPVQuarterly track of public commissioning announcements
PV-degradation extrapolation past year 5Current model holds 5y-mean savings flat across 20y horizon; proper 0.5%/yr continuing degradation would reduce PV-only NPV by ~8 M (~9%)Refactor btm_economics to apply degradation factor in cashflow loop, not just within sim window. Documented in btm_economics_dc100.md “Known modeling simplifications”.
RankRiskMagnitudeMitigation
1ICPT subsidy reform (industrial included in domestic-style cap)−60 M NPV per 8 sen ICPT removedTariff-floor clause in PPA
2BESS capex stays high through 2030locks BESS in NPV-negative; PV alone still worksTrigger-conditional BESS contract
3Hyperscaler internal carbon price falls to ≤ USD 25/tCO2Carbon NPV drops from +211M to +52MDiversify carbon revenue (RECs + voluntary + regulated)
4DC commissioning slips 2+ yearsCashflow delay; potential RE100 deadline miss for tenantPhased PV PPA aligned to commissioning
5MY decarbonisation accelerates beyond NETRCarbon NPV halves over 20yFront-load carbon-attribute monetisation in early years of PPA
  1. Data foundation: 5y hourly NASA POWER (9-pt JB grid, 394k rows) + Senai METAR (45k rows) + DOSM monthly electricity/GDP + Ember monthly mix + ST MESH 2023 PDF + manual TNB ETOU/ICPT static refs. All UTC bronze, MYT-derived silver. Cross-validation: POWER vs METAR T-bias 0.10 °C; DOSM vs Ember demand ratio 1.014.
  2. Load synthesis (Stage 3): rule-based hourly basis Sₜ = (α₀ + α₁·CDHₜ) × w_etou × w_dow, calibrated so monthly sum = peninsular × Johor share (modelled 11.5–11.7%). Output: 39,424 hourly Johor load rows. Algebraically exact monthly reconciliation.
  3. BTM economics (Stage 4): hourly LP dispatch via pulp + CBC solver, monthly horizon, SoC continuity, MD-aware. Cooling-CDH PUE temperature dependence. Capex/OPEX from EPC quote ranges; ICPT period-aligned from static ref.
  4. Sensitivity infrastructure: analytical tornado recalibrated to LP-w-cooling-CDH base (residual drift ±4 M RM zero-mean, validated at 8 corner perturbations). 15 ranked levers; top 3 (BESS CapEx, ICPT, PV CapEx) carry 80% of total sensitivity.
  5. Carbon layer: Ember-measured grid intensity × annual PV yield; monetised at 5 carbon price benchmarks (BCX → EU CBAM range). RE100 decomposition assumes BTM PV + REC gap. Outputs are stackable with BTM NPV, not double-counted.
reports/
EXECUTIVE_SUMMARY.md this file
cross_comparison.md data corroboration findings
btm_economics_dc100.md single-site PV+BESS NPV (v0/v1/v2)
vpp_service_revenue_required.md BESS breakeven floor
aggregator_portfolio.md multi-site portfolio analysis
sensitivity_tornado.md assumption ranking + LP cross-validation
carbon_re100_analysis.md CO2 + RE100 economic layer
ppa_pricing.md developer floor, tenant ceiling, bundled PPA
load_synth_diagnostics.json synthesizer reconciliation metrics
tornado_lp_crossvalidation.json raw cross-validation data
docs/
architecture.md full pipeline diagram
IMPLEMENTATION_PLAN.md stage status
methodology/load_synthesizer.md Stage-3 math
sources.md data source catalog
CLAUDE.md project context for Claude / new team members
  1. Commercial outreach — anchor hyperscaler tenant for 24/7 CFE Premium PPA structure (#5 above).
  2. Read current TNB tariff PDF — replace placeholder rate values with audited numbers.
  3. Track ICPT every 6 months — each Suruhanjaya Tenaga revision changes the case by 5-10%.
  4. Track BESS capex curve — when LFP 4-h installed quote drops below 2.5 M RM/MWh, run the LP again and re-evaluate the trigger.
  5. Engage one real industrial customer — even a single 15-min profile would close the synthesizer’s largest open methodology question.