Ukraine needs distributed energy resilience, not just green megawatts. ESMP helps investors, foundations, MDBs and municipalities identify where capital can survive missile risk, scale through reconstruction, and matter for energy independence — with deterministic financial models and source-linked data on every number.
| What is this? | A pre-investment screening platform for green-energy projects in Ukraine. Information digital twins of cities + an AI-assisted analyst that drafts investor-grade memos. |
| Who is it for? | Investors, family offices, foundations, MDBs/DFIs, IPPs, and Ukrainian municipalities preparing fundable projects. |
| What problem? | War risk, grid attacks, regulatory chaos and donor overlap make Ukrainian projects hard to screen. Capital sits on the sidelines while distributed resilience is needed now. |
| What can I do now? | Run a playbook above · explore 11 data layers across 4 MVP cities · read the methodology · review the risk framework. |
Russian strikes have repeatedly knocked out >50% of Ukraine's centralised generation. Distributed renewables + storage are the only hedge.
Hospitals, water utilities and shelters need autonomous power. Microgrids are no longer optional.
$486B Ukraine RDNA. Capital is mobilising, but pipeline-quality projects with verified data are scarce.
Every MW of domestic renewables reduces fossil import dependence and frees fiscal space.
Ukraine's 2030 RES targets and EU acquis alignment open ETS, CBAM-safe and Article 6 ITMO revenue.
EBRD, IFC, USAID, KfW, EIB all chasing similar opportunities — ESMP surfaces gaps and overlap.
Authored by Alex Cornell du Houx (2024) through the Energy Opportunity Program for Action (EOPA), the plan lays out a comprehensive framework for rebuilding Ukraine's energy infrastructure through distributed renewable generation, international partnerships, and blended finance. Every ESMP memorandum maps investment opportunities to one or more EOPA strategies:
Grant-funded installations on critical infrastructure — hospitals, schools, shelters.
US & EU municipalities paired with Ukrainian counterparts for co-investment and knowledge transfer.
Decentralised solar + storage microgrids hardened against grid disruption from missile strikes.
Aligning EBRD, IFC, USAID, KfW and private capital to avoid overlap and maximise impact.
Structuring projects so US-connected entities can claim Inflation Reduction Act clean-energy credits.
Each city twin is a structured JSON document. Every numeric value carries provenance: source URL, retrieval date, and a 0–1 confidence score. See the Sources & Provenance page for the full per-field index.
Indicative figures. Click Sources & Provenance for source URL, retrieval date, confidence and method per field.
ESMP is an AI-assisted screening engine with deterministic financial models and source-linked data. It is not a black-box LLM and not investment advice — it is a research tool that compresses weeks of desk-based screening into minutes, with every number traceable.
Claude-class LLM plans the analysis, picks tools, and writes prose — never the numbers.
numpy-financial calculates IRR / NPV / payback. War-risk and corruption scores use fixed formulas.
Every figure carries source URL, retrieval date and confidence. No silent assumptions.
Outputs are screening drafts. A human analyst signs off before any memo leaves ESMP.
You see the 0–1 confidence score on every layer; low-confidence fields are flagged.
Loading cities...
Select a layer above.
Every numeric output ESMP shows is produced by an explicit, reproducible formula. The LLM picks tools and writes prose. The Python tools below compute the numbers. This page documents what each formula does, what inputs it consumes, and what its limits are.
Computed by finance_calc using the numpy-financial library. The LLM never does arithmetic.
| Field | Unit | Description |
|---|---|---|
| capex_eur | EUR | Total capital cost, year 0 outflow. |
| capacity_mw | MW | Nameplate generation capacity. |
| capacity_factor | 0–1 | Annual energy / (capacity × 8760 h). |
| ppa_eur_per_mwh | EUR/MWh | Constant offtake price (or LCOE proxy). |
| opex_pct_per_year | 0–1 | O&M as fraction of capex per year. |
| life_years | years | Project life for cash-flow horizon. |
| discount_rate | 0–1 | WACC / hurdle rate for NPV. |
numpy_financial.irr(cashflows) — the discount rate that makes NPV = 0. Returns NaN if no real root exists (typical when cumulative revenue never recovers capex).
Discounted payback is exposed as payback_discounted_years when the LLM requests it.
Computed by warrisk_score. A weighted composite of four observable signals. Higher = more dangerous.
| Component | Source | Normalisation |
|---|---|---|
| strike_intensity | ACLED event counts · Ukrainian official strike reports · NASA FIRMS thermal anomalies | strikes per 100k pop / month, log-scaled to 0–10 |
| grid_damage_index | Ukrenergo / DTEK incident reports · satellite night-light delta (NOAA VIIRS) | fraction of substations / generation capacity offline 12-month rolling |
| frontline_proximity | ISW / DeepState frontline geometry | 1 − min(distance_km / 300, 1), so <30 km → ~1 |
| air_defense_uncertainty | Open-source defence reporting; analyst override | 0–1 subjective, default 0.5 with confidence flag |
Pulled from the city energy layer (peak_demand_mw, annual_consumption_gwh). Source: Ukrenergo regional load reports + oblast statistical bulletins. When the LLM needs implied per-capita demand:
Wartime distortions (IDP flux, industrial shutdowns) are reflected as reduced confidence on the field, not silently smoothed.
Source: PVGIS-SARAH3, Global Solar Atlas, NASA POWER — cross-checked, lowest-confidence wins.
Mean wind speed at 100 m AGL from Global Wind Atlas. Capacity factor is looked up from a turbine class curve; not modelled from scratch.
Suitable roof area derived from OpenStreetMap building footprints × oblast suitability factor.
A 0–10 composite from the governance and regulatory layers.
Read directly from the crime layer:
These are not combined into a single number on purpose — investors weight them differently.
Every field carries a confidence in [0,1]:
| Range | Meaning |
|---|---|
| ≥ 0.80 | Official primary source, retrieved within 12 months, no known contradictions. |
| 0.50–0.79 | Secondary source or modelled estimate; some triangulation. |
| < 0.50 | Single weak source, stale, or analyst inference. Do not use without verification. |
Investing in Ukrainian energy assets means pricing risks that do not appear in standard EU/US deal templates. This framework names the twelve risks ESMP tracks, rates how material they are at MVP-city level, and lists the mitigation tools available to investors today.
| Risk profile | Best-fit capital | Example city / use-case |
|---|---|---|
| Very high (frontline) | Grant + concessional only; no commercial debt | Kharkiv hospital microgrid — Direct Aid (EOPA-1) |
| High | Blended: grant first-loss + DFI debt | Kyiv resilience microgrids — EOPA-3 |
| Medium | DFI debt + private equity, MIGA-wrapped | Lviv 10 MW solar+BESS — EOPA-3 / EOPA-4 |
| Low | Commercial PPA, IPP-style structure | Lviv / Pustomyty rooftop and small wind |
These are indicative pipeline candidates assembled from the MVP city twins, not committed projects. They show what kind of opportunities ESMP surfaces and how risk ↔ capital pairing works in practice. Real pipeline access requires data-room sign-off — request access.
| Project | City | Type (EOPA) | Size | CapEx (EUR) | Status | Risk | Funding fit |
|---|---|---|---|---|---|---|---|
| Hospital solar + storage | Kharkiv | Direct Aid (1) | 500 kW + 1 MWh | ~€1.4M | concept | Very high (8.4) | Grant first-loss |
| School shelter microgrid | Kyiv | Resilience (3) | 250 kW + 0.5 MWh | ~€0.7M | data needed | Medium (4.6) | Blended (donor + DFI) |
| Municipal rooftop solar portfolio | Lviv | IPP / PPA (3,5) | 3 MW (15 sites) | ~€3.0M | pre-feasibility | Low (2.1) | Commercial debt + equity |
| Solar + BESS hybrid | Lviv | Distributed Resilience (3) | 10 MW + 4 MWh | ~€11.9M | feasibility | Low–Med | DFI debt + MIGA wrap |
| Community solar | Pustomyty | Direct Aid + Sister City (1,2) | 5 MW | ~€5.5M | pre-feasibility | Low (1.8) | Sister-city co-invest + grant |
| Onshore wind | Lviv oblast | IPP / PPA (3,4) | 20 MW | ~€26M | concept | Low (2.1) | Commercial + ECA |
| Water utility microgrid | Kharkiv | Resilience (3) | 1.5 MW + 3 MWh | ~€3.8M | data needed | Very high (8.4) | Donor + MIGA |
Every numeric value in an ESMP city twin carries a provenance object:
source_url, retrieved_at (ISO date), confidence (0–1),
method (official / estimated / modeled / inferred), and an optional note.
The Explore Layers tab shows this on every individual field. The catalogue below summarises the
primary sources by data layer.
| Layer | Primary sources | Typical method | Typical confidence |
|---|---|---|---|
| economy | State Statistics Service of Ukraine (Ukrstat); oblast statistical yearbooks; Ministry of Economy bulletins; World Bank Ukraine country data | official + estimated (wartime gaps) | 0.55–0.80 |
| demographics | Ukrstat; UNHCR Ukraine Refugee Situation; IOM DTM (IDPs); Ministry of Social Policy registers | official + modeled (IDP flux) | 0.55–0.85 |
| social | Ministry of Health facilities registry; Ministry of Education school registry; oblast administration sites | official | 0.80–0.95 |
| crime | Transparency International Ukraine CPI; NABU / SAPO case statistics; KIIS & Razumkov trust polls; Prozorro analytics | official + modeled | 0.55–0.80 |
| energy | Ukrenergo regional load reports; NEURC tariff orders; SAEE renewable installations registry; DTEK disclosures | official | 0.75–0.90 |
| investment | UkraineInvest; oblast IPA bulletins; IFC / EBRD project disclosures; FDI Markets | official + secondary | 0.55–0.80 |
| military | ACLED conflict events; ISW / DeepState frontline maps; NASA FIRMS; Ukrainian official strike reports; NOAA VIIRS night-lights | modeled composite | 0.50–0.75 |
| governance | Hromada / city council official sites; Ukrainian Government Portal; mayor / deputy contact pages; Diia.City registry | official | 0.80–0.95 |
| regulatory | NEURC; SAEE; Verkhovna Rada legislation; Article 17-1 wartime regime; Energy Community Secretariat reports | official | 0.80–0.95 |
| infrastructure | Ukravtodor; Ukrzaliznytsia; State Agency for Infrastructure; OpenStreetMap; oblast plans | official + OSM | 0.65–0.85 |
| renewables | PVGIS-SARAH3; Global Solar Atlas; Global Wind Atlas; NASA POWER; SAEE installations registry; OpenStreetMap building footprints | modeled (resource) + official (installed) | 0.75–0.95 |
| emissions | State Environmental Inspectorate; GPC inventories where available; IEA CO2 grid factor for Ukraine; SBTi sectoral pathways | modeled | 0.60–0.80 |
| Component | strike_intensity | ACLED Ukraine dataset; UA MoD daily situation reports | 0.85 |
| Component | grid_damage_index | Ukrenergo + DTEK incident logs; NOAA VIIRS night-light delta | 0.70 |
| Component | frontline_proximity | DeepState / ISW frontline geometry, distance < 30 km | 0.90 |
| Component | air_defense_uncertainty | analyst override, low transparency | 0.40 |
| Composite | 8.4 / 10 | weighted sum, weights {0.35, 0.25, 0.30, 0.10} | 0.72 |
Read this as: high-confidence on strikes and frontline, medium on grid damage, low on air-defense effectiveness — overall confidence 0.72.
When you reproduce ESMP data, please cite as:
Each underlying source retains its own licence; ESMP does not relicense third-party data.