H↗ HelioForge

MODEL REGISTRY / 1.0.0

One contract for each named study.

Browse all 59 current study IDs by workspace. Each card shows its model version, input names and declared bounds/units, equations, fixture digest, source, test file and limits.

How to read this registry

The application, catalogue, sample data and numerical model have separate identities. No semantic study-catalogue version or separate study-result schema_version is declared by this source; both are marked U where appropriate. The default result is generated example evidence, not an independent reference fixture.

Download machine-readable registry JSON · Read the model/evidence glossary · Compare delivery modes.

Hybrid systems lab hybrid

Local app route #hybrid · 6 registered study ID(s) · new study calculations use the separate local Python application.

Learning studio lessons

Local app route #lessons · 5 registered study ID(s) · new study calculations use the separate local Python application.

Scenario compare compare

Local app route #compare · 5 registered study ID(s) · new study calculations use the separate local Python application.

Command centre overview

Local app route #overview · 4 registered study ID(s) · new study calculations use the separate local Python application.

Storage & flexibility storage

Local app route #storage · 7 registered study ID(s) · new study calculations use the separate local Python application.

PV economics pv

Local app route #pv · 7 registered study ID(s) · new study calculations use the separate local Python application.

Research pillars research

Local app route #research · 5 registered study ID(s) · new study calculations use the separate local Python application.

Market intelligence markets

Local app route #markets · 4 registered study ID(s) · new study calculations use the separate local Python application.

Forecast studio forecast

Local app route #forecast · 5 registered study ID(s) · new study calculations use the separate local Python application.

Investment desk investment

Local app route #investment · 4 registered study ID(s) · new study calculations use the separate local Python application.

Construction & pilots pilots

Local app route #pilots · 4 registered study ID(s) · new study calculations use the separate local Python application.

Agent council council

Local app route #council · 3 registered study ID(s) · new study calculations use the separate local Python application.

Per-study cards

Hybrid systems lab / hybrid

hybrid-resonance · Coupled oscillation modes

Inspect poles and a normalized response of two coupled damped modes.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
mode_1_hzHz180Default 12
mode_2_hzHz1100Default 24
damping_1fraction0.010.45Default 0.04
damping_2fraction0.010.45Default 0.07
coupling_fractionfraction00.9Default 0.15

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • q'' + C q' + K q = u
  • det(s²I + sC + K) = 0
  • H(jω) = (K − ω²I + jωC)⁻¹

Model limits

  • Two-mode lumped oscillator proxy; parameters are illustrative, not measured inverter/network impedances.
  • Pole screening is not EMT simulation, SSR diagnosis, protection coordination or stability certification.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 42938f1b89cacfef9b64a8aee1cf84dcae30fbdb8c03cea50ab621aae2596df7; result evidence digest 71b1d4b8286a9a41ad75590b7a75ba7a306ddd5e6f9ab7920970b499abc83095. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Hybrid systems lab / hybrid

hybrid-clipping · DC clipping recovery

Bound DC-coupled battery charging to PV inverter clipping, battery power and energy headroom.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
pv_dc_kwkW0100000Default 1400
inverter_ac_kwkW1100000Default 1000
inverter_efficiencyfraction0.011Default 0.98
battery_capacity_kwhkWh0100000Default 500
battery_initial_kwhkWh0100000Default 100
battery_charge_limit_kwkW0100000Default 300

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Pdc,inverter limit = Pac,rated / ηinv
  • Pclip = max(0, Ppv − Pdc,inverter limit)
  • Pcharge = min(Pclip, Pcharge,max, (Emax − E0)/(ηcharge Δt))
  • E1 = E0 + ηcharge Pcharge Δt

Model limits

  • Single interval, DC-side energy balance; no battery discharge, thermal limits, voltage-window or detailed inverter topology.
  • Recovered energy is a physical screening quantity, not a dispatch forecast or project value.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2a6d7f71fc38b9a55d1cb9c9f8548eb89df74e9fc11242677bad3e16d49aa13a; result evidence digest 3c1d95ca4a34e544e67df0ca8a41951c27be80ad3c95c034caf19508a0d95375. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Hybrid systems lab / hybrid

hybrid-inertia · Synthetic inertia and RoCoF

Integrate an aggregate swing model after a generation trip with bounded droop and derivative response.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
trip_mwMW120000Default 1000
system_base_mwMW10002000000Default 100000
inertia_secondss0.130Default 4
damping_mw_per_hzMW/Hz0500000Default 4000
synthetic_inertia_mw_s_per_hzMW·s/Hz0200000Default 10000
synthetic_inertia_limit_mwMW0100000Default 1000

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • df/dt = f0/(2 H Sbase) · (Pgov + Psyn − ΔPtrip − D Δf)
  • Psyn = clip(−Msynthetic · df/dt, 0, Psynthetic,max)
  • dPgov/dt = (clip(Kdroop · max(−Δf,0),0,Preserve) − Pgov)/τ

Model limits

  • Reduced-order aggregate frequency response; fixed trip and simplified governor/derivative service.
  • Not an EMT simulator, protection study, grid-code assessment or certified inertia requirement.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 316334f9753f6d095fcf9abada759d47c2e6e2142af2c4384eb2c53e2f60a9ce; result evidence digest a58003de3f6d9d0c968ebb446cf31e90df0360136da53ccfeb946c79f2fb0a11. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-degradation · Separate battery aging mechanisms

Compare uncalibrated calendar SEI, low-temperature plating and cycling-fatigue contributions.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
yearsyears030Default 8
temperature_c°C-2060Default 25
charge_c_rateC05Default 1
equivalent_full_cyclescycles0100000Default 2400
depth_of_discharge_fractionfraction01Default 0.8

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • LSEI = kSEI √t · 2^((T−25°C)/10°C)
  • Lplating = kplate · t · (C-rate/2)² · max(0,(15°C−T)/25°C)
  • Lfatigue = kfatigue · EFC · (0.5 + 0.5 DOD)

Model limits

  • Mechanism terms are independently parameterized, additive screening proxies and intentionally uncalibrated.
  • No cell chemistry, SOC history, charge protocol, coupled electrochemistry, uncertainty or warranty prediction.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 0e327f6bfce98f41564a501979eafb300224c6c0e8e6216fdb2082de033c5543; result evidence digest 54ccb7e438d36c05ca7ba98dc9310bbc98f5492218d77ec6786b8f78d723cad8. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-stacking · Reserve and arbitrage headroom

Bound an illustrative reserve-plus-arbitrage dispatch against explicit price and service arrays.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 5 JSON)
FieldUnitMinimumMaximumDefault
capacity_kwhkWh11000000Default 10000
power_kwkW1500000Default 5000
round_trip_efficiencyfraction0.011Default 0.9
initial_soc_fractionfraction01Default 0.5
interval_hoursh0.254Default 1
reserve_duration_hoursh04Default 0.25
  • price_eur_mwh — Energy price (€/MWh); JSON array, units U; default SHA-256 844e24698dd65f798e3c355854d4a0e0802790af6ba7cc45aa9a94f1fe3a3460.
  • reserve_up_price_eur_mw_h — Upward reserve price (€/MW·h); JSON array, units U; default SHA-256 981850663d5fa1a4e59e941a2e92323fce262e4ba73097c57588d91561cdcf61.
  • reserve_down_price_eur_mw_h — Downward reserve price (€/MW·h); JSON array, units U; default SHA-256 73f80dcafae74579d16db7d839a2dd3405a6a179167c9b3d5a942b29bbcbcf5c.
  • reserve_up_request_mw — Requested upward service (MW); JSON array, units U; default SHA-256 e357056133590e45824e1a5be336becb75f41c002eb1ab689819a92d97a311a0.
  • reserve_down_request_mw — Requested downward service (MW); JSON array, units U; default SHA-256 e357056133590e45824e1a5be336becb75f41c002eb1ab689819a92d97a311a0.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • maximize Σ(price·(d−c)·Δt/1000 + reserve_price·reserve_MW·Δt)
  • SOC[t+1] = SOC[t] + ηc c[t]Δt − d[t]Δt/ηd
  • SOC[T] = SOC[0]
  • c + d + r_up + r_down ≤ P; reserve energy margins use stated activation duration

Model limits

  • Illustrative perfect-foresight MILP with conservative simultaneous headroom and one terminal-SOC constraint.
  • Reserve quantities and prices are user assumptions; no market eligibility, bid acceptance, availability, penalties, taxes or annualization.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5e6af3c975ecd3bba3181c766496fd3b1ca1b81f512783ace95083077614ecd4; result evidence digest 2b0df56ab0c4825b42a13cdc4a0c3361acc31dd394a42a4c40492b4ad910e5dd. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-synergy · Flywheel and battery split-frequency dispatch

Route high-frequency disturbance to a flywheel and the residual to a bounded battery, tracking both energy states.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
interval_secondss0.160Default 1
filter_time_constant_ss0600Default 4
flywheel_power_kwkW0100000Default 500
flywheel_energy_kwhkWh0.1100000Default 20
battery_power_kwkW0500000Default 1000
battery_energy_kwhkWh0.11000000Default 4000
  • disturbance_kw — Requested power trace (+ discharge / − charge; ±1 GW/sample); JSON array, units U; default SHA-256 b97931082cf8195d983b72773f12089418179ed8eada57d21149241538cbfa7b.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • ℓ[t] = ℓ[t−1] + α(P[t]−ℓ[t−1]); α = Δt/(τ+Δt)
  • Pflywheel,request = P−ℓ; Pbattery,request = P−Pflywheel
  • E[t+1] = E[t] − PΔt/ηd for P≥0; E[t+1] = E[t] − PηcΔt for P<0

Model limits

  • A first-order frequency split and sequential clipping are transparent dispatch proxies, not an optimized controller.
  • No voltage, thermal, ramp, converter, degradation, coupled control or field response validation.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 226e32f06082e55b9b2039b8410779b59459e52f75544ff667cdab1203a72909; result evidence digest e99620988ffbb162eba471bdda39280bd7ae66b96e8759b6942946c94d362678. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-backtracking · Slope-aware tracker backtracking screen

Compare ideal tracker angles with a planar row-shadow backtracking correction over supplied sun positions.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
row_pitch_mm0.130Default 6
module_width_mm0.110Default 2.4
tracker_axis_azimuth_deg°0360Default 0
terrain_slope_deg°030Default 5
terrain_slope_azimuth_deg°0360Default 90
backtracking0/101Default 1
  • sun_elevation_deg — Solar elevation (°); JSON array, units U; default SHA-256 a96c29e5705e5226962245cb55357ad39c081f258bfb1ed54e3d2e71fa670cd0.
  • sun_azimuth_deg — Solar azimuth (°); JSON array, units U; default SHA-256 618f795cffa2937872e0c30dd674912ccf280794edab53e1de71ea89dfba8c58.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • βcross = atan(tan(slope) · sin(azslope − azaxis))
  • θideal = atan2(sun_cross · cosβ + sun_up · sinβ, −sun_cross · sinβ + sun_up · cosβ)
  • θbt = θideal − sign(θideal) arccos(|cos θideal|/GCR) when |cos θideal| < GCR

Model limits

  • A two-dimensional planar row geometry with a cross-slope projection; edge effects, tracker limits and terrain variation are omitted.
  • NREL's slope-aware method includes full reference frames and shaded-fraction treatment; this screen is not its implementation or an energy-yield model.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5a6f3cc3d5a62edbed36b0d14b18e55441730e10992058fb7c61aae07204abfe; result evidence digest ecd238293d7983a546f8804647ee91e60d4366c043aa59d7fe643ef90ad76eb7. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-agrivoltaic · Agrivoltaic PAR and land geometry

Screen a simple crop-light tradeoff and polygon land area after a conservative perimeter setback deduction.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
ground_coverage_ratiofraction00.9Default 0.35
module_transmission_fractionfraction00.8Default 0.08
setback_mm0100Default 2
baseline_par_mol_m2_daymol/m²/day0.1100Default 35
  • land_polygon_m — Local land-boundary polygon vertices (m); JSON array, units U; default SHA-256 f618a20d9df81308bd9d5218dd9137bbebc48aac1e5a6c6024ab197a02df3adc.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • A = ½ |Σ(xᵢyᵢ₊₁ − xᵢ₊₁yᵢ)|
  • Ausable ≈ max(0, A − perimeter·setback)
  • PARcrop ≈ PARopen · [1 − GCR · (1 − module transmission)]

Model limits

  • Perimeter setback subtraction is a conservative area proxy, not an exact polygon offset or cadastral calculation.
  • PAR proxy omits time-of-day geometry, crop response, spectral effects, diffuse light, row spacing, equipment access and yield validation.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 20baee265bd2bf692a6288b92e431cb8808a5e2d546093568a21b9d39cde87bf; result evidence digest 77d5281b58063da339964c6a71a3078c3d8c4d361f3d06d391afbc7831129cb3. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-albedo · Monthly bifacial albedo response

Combine monthly front-plane and reflected rear irradiance with bifaciality, albedo, view factor and PR.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
system_capacity_kwpkWp110000000Default 5000
performance_ratiofraction0.011Default 0.82
bifacialityfraction01Default 0.7
albedofraction01Default 0.25
rear_view_factorfraction01Default 0.25
  • front_plane_irradiance_kwh_m2 — Monthly front-plane irradiation; JSON array, units U; default SHA-256 d369ad29f2beaccfdec6fb8157fc5197e81513d90a0e49e04c93d3b08cf0919f.
  • rear_ground_irradiance_kwh_m2 — Monthly rear ground irradiation before albedo; JSON array, units U; default SHA-256 4f9a61aef4ceda4a0794201463d2e431bed74b58bcdb92dd1f372db6e2bf46e6.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Grear = Gground · albedo · rear_view_factor
  • Efront,m = Pdc · PR · Gfront,m
  • Etotal,m = Pdc · PR · (Gfront,m + bifaciality · Grear,m)
  • Eyear = Σₘ Etotal,m

Model limits

  • Monthly scalar irradiance screen; rear view factor and PR are user assumptions, not ray tracing or site meteorology.
  • No electrical mismatch, row shading, temperature, spectral, terrain or measured validation; annual energy is only as representative as the supplied 12 months.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2f933af9a62a5e13d931885ce2394885b0977cd1c9c95cc78bbb27f19f512a8e; result evidence digest acad44d4dc0ad9af93f0f0824f70b174add5c949a99f4574e118d84a0f6bef61. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Research pillars / research

research-vibration · Vibration spectrum and drift

Estimate one-sided FFT amplitudes and compare early/late half-record spectral peaks.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
sample_rate_hzHz12820000Default 256
synthetic_frequency_hzHz110000Default 24
synthetic_drift_hzHz-50005000Default 3
synthetic_amplitudesignal unit01000000Default 1
noise_stdsignal unit01000000Default 0.05
sample_countsamples648192Default 1024
  • signal — Supplied evenly spaced signal (empty uses seeded synthetic signal); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • X[k] = Σₙ x[n] exp(−j 2πkn/N)
  • A[k] = 2|X[k]|/Σw[n] for interior one-sided bins
  • Spectral drift = late-half dominant frequency − early-half dominant frequency

Model limits

  • Single evenly spaced, finite record with a Hann window; half-window frequency resolution is limited.
  • Peaks and drift are descriptive spectrum statistics, not a fault classifier, causal diagnosis or maintenance recommendation.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 85fcfc03ead35873f1e809474a228630a847b952cfd1d9bd61194141cdab1e30; result evidence digest 4a8f32f1cb2a5aa5c1a91c877c49d474e73f9114a3debcf8db32f48811af428c. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Research pillars / research

research-epd · Supplier-stage emissions evidence ledger

Sum supplied supplier-stage quantities and factors while surfacing duplicate IDs and missing evidence.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
include_materials0/101Default 1
include_manufacturing0/101Default 1
include_transport0/101Default 1
include_use0/101Default 1
include_end_of_life0/101Default 1
include_other0/101Default 1
  • records — Supplier-stage records (quantity ≤1e12; factor ≤1e6 kgCO₂e/unit); JSON array, units U; default SHA-256 9537165dab30ba98d28a3bdbb869b4eb9be65bec4e9dc9fb2b7d0b27a6aa0fa8.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Stage emissionsᵢ = quantityᵢ · supplier/activity factorᵢ
  • Total included emissions = Σ unique, factor-complete stage records

Model limits

  • Per-record quantities are bounded at 1e12 declared units and factors at 1e6 kgCO₂e per declared unit to keep the arithmetic finite; choose and document suitable units.
  • A traceable arithmetic ledger only: it does not verify EPD validity, product-category rules, allocation, boundary, assurance or Scope 3 category.
  • Duplicate IDs retain only their first row; missing factors are reported and excluded, not imputed. Example defaults are synthetic.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 041ebb0658b8fee3695682f8299af17abb79c0c868ef740b97248365edb181a9; result evidence digest 9c4ff05f57737f51cfcd7531220e7dc176b6d444728b830c545b0d2f0349e818. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Research pillars / research

research-scr · Short-circuit strength and voltage drop

Calculate a simple Ssc/P screening ratio and a balanced small-voltage-drop estimate from R, X, P and Q.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
short_circuit_mvaMVA0.12000000Default 600
plant_mwMW0.12000000Default 100
active_power_mwMW02000000Default 80
reactive_power_mvarMvar-20000002000000Default 20
voltage_kvkV0.11000Default 20
line_r_ohmΩ/phase0100000Default 0.1

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • SCRscreen = Ssc / Pplant
  • ΔVpu ≈ (R P + X Q)/VLL²
  • |Zth| ≈ VLL²/Ssc

Model limits

  • Classical single-infeed ratio and balanced first-order voltage-drop approximation only.
  • SCR is not a stability guarantee; interactions, loads, X/R, controls, protection and operating points require detailed network and dynamic studies.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 44c8d00cc9704c69f52f926523d81d3507cc4dd87f778f8e3cfed9f66b7a2fe7; result evidence digest f67ff32f99c448935aa0c875ff3cea9d13322d9cc94a33000ce53fd4a30bd88e. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: engineering_studies.py. Tests: test_engineering_studies.py · test_studies_api.py. Shared study result contract.

Command centre / overview

overview-weather · Correlated weather stress

Compare shared and asset-specific weather shocks across six fictional assets.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
horizon_yearsyears140Default 10
common_shock_fractionfraction01Default 0.75
seedinteger04294967295Default 42
  • assets — Six synthetic assets; JSON array, units U; default SHA-256 359dce81eb5421ee8cb3ad76d2e33501516a62290e168ba7b55c37b35e688164.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • z_i,t = sqrt(common_share) z_common,t + sqrt(1−common_share) z_idiosyncratic,i,t
  • stress_i,t = generation_i × sensitivity_i × max(0, −z_i,t), capped at 100%

Model limits

  • Synthetic standardized shocks; no weather observations, technology calibration, spatial model or outage probability.
  • The reported stress index is a bounded generation-weighted exposure proxy.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 0402e26d161c32c1c8f0807ad1813a69c9b2856c42973a5f61e7d4db73734382; result evidence digest 65958eed23736922bd1dfcdb02d5df2a4ea0ddabf40447affa588099bd8ee712. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Command centre / overview

overview-merit · Value versus variable cost

Compare asset variable costs with bilateral, spot and balancing value assumptions.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
bilateral_weightfraction01Default 0.4
spot_weightfraction01Default 0.4
balancing_weightfraction01Default 0.2
  • assets — Asset value matrix; JSON array, units U; default SHA-256 7b5d1439bfedb08e4c3b369bffeea18ca85678b350d7f35c988223b168cf9b1e.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • net value_route,i = assumed value_route,i − variable cost_i
  • weighted net value_i = Σ_route weight_route × net value_route,i

Model limits

  • All matrix values and route weights are user assumptions; no dispatch, balancing eligibility, fees, shape or contract terms are inferred.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest d1e4ec58847b38d434cae98662c115ee1b24ff4a1218aa6420b7435f43efc2d4; result evidence digest e8e1666b778d48ca6c37e2dc6333f8d33f7006f6d5eec46226b9a8f5e53e0179. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Command centre / overview

overview-carbon · Hourly versus static emissions

Apply supplied hourly marginal factors and compare with one static factor on the same sampled generation.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
static_factor_kgco2e_mwhkgCO2e/MWh05000Default 400
sample_hourshours18760Default 24
generation_scalemultiplier0.01100Default 1
  • generation_mwh — Hourly generation; JSON array, units U; default SHA-256 e7303136d19e9e340f26fcb75f64507459e1881c7cbff70c1524d4467d4c0022.
  • marginal_factors_kgco2e_mwh — Hourly marginal factors; JSON array, units U; default SHA-256 71b39889da6d2331e852037ccc64c8765900e14989a46d58834e0d37e843b8ce.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • hourly emissions = Σ_h generation_h × marginal_factor_h
  • static comparison = Σ_h generation_h × annual_static_factor

Model limits

  • Supplied factors are not recalculated or calibrated; this does not estimate lifecycle emissions, avoided credits or annualize a sample day.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 580b5057ad05badedcad285a52632446d74ebb992fe47b6d8fb029f79418f96c; result evidence digest d274a32d97acfccb87cb4e976149159344c30aaa6670ae14d20835a268738a41. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Market intelligence / markets

markets-capture · Generation-weighted capture price

Apply a transparent penetration-linked price adjustment to user-supplied intervals.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
penetration_fractionfraction01Default 0.4
reference_penetration_fractionfraction01Default 0.1
cannibalization_slope_eur_mwhEUR/MWh per fraction05000Default 100
  • intervals — Synthetic or user-provided intervals; JSON array, units U; default SHA-256 3adab35a365ae32950da8db0f4cabace97f76a8a0f79fcd07e62e0eb775ad9b9.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • adjusted_price_t = spot_price_t − slope × (penetration − reference) × exposure_t
  • capture price = Σ_t generation_t × adjusted_price_t / Σ_t generation_t

Model limits

  • The linear slope is a user-defined sensitivity, not an estimated market response or price forecast. Capture price is null when supplied generation sums to zero.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 685f83ab37b3f6252b0ffe1460acabc7683c5157d5488daf7ae4681beddf3e9f; result evidence digest 034f015c15b795ee6f8126b00c13e4e2a0127eb2e59b4d644411efc11541caba. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Market intelligence / markets

markets-negative · Negative settlement intervals

Count negative 15-minute prices and identify runs reaching a user-configured suspension duration.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
interval_minutesminutes1515Default 15
suspension_duration_minutesminutes1510080Default 60
negative_threshold_eur_mwhEUR/MWh-100000Default 0
  • prices_eur_mwh — 15-minute prices; JSON array, units U; default SHA-256 b72f651d2e0c2a97a15e13c7b815d581a16de1675a39e263eba870ef8e7bf8ea.
  • country_scenario — Hypothetical jurisdiction label; JSON object, units U; default SHA-256 67c482243f604951ac751908daddf1a2b1b3f3cf9923d9526c2e2b25e909176d.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • negative interval if price < 0 and price ≤ configured threshold
  • triggering run if consecutive_negative_intervals × 15 min ≥ configured duration

Model limits

  • Country label is metadata only. Any suspension setting is a hypothetical user scenario explicitly UNVERIFIED; no subsidy, settlement, legal or eligibility rule is asserted.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest eacf4af788e4b32d707f5939b6523b6cc83e40b5261a3a472c6c77660c2523e5; result evidence digest e9203607487263217ed62dc56ed9ac845566bc4b99d0ddf5fa043cf6db524037. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Market intelligence / markets

markets-interconnection · Two-zone interconnection

Choose the least-cost flow between two zones with quadratic supply curves and a bounded interconnector.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
capacity_mwMW01000000Default 500
supply_slope_a_eur_mwh_mwEUR/MWh per MW0.0000011000Default 0.02
supply_slope_b_eur_mwh_mwEUR/MWh per MW0.0000011000Default 0.02
  • intervals — Zone demand and supply intercepts; JSON array, units U; default SHA-256 a639be6f6fb0821bd3f5d48e998a50dcaeaf04d758d62817dd6c7f69540b4742.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • min_f C_A(d_A+f)+C_B(d_B−f)
  • C_i(q)=a_i q + 0.5 b_i q²; −min(capacity,d_A) ≤ f ≤ min(capacity,d_B)

Model limits

  • Single-link two-zone convex dispatch proxy; ignores losses, network loop flows, ramping, reserves, bids, indivisibilities and actual market-coupling constraints.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest a342218f216fc5478e138046c13f739e7506300d5efa38efdf97d80d65bbbb9a; result evidence digest 14e0cd9162051d049bb4b83dff4872288bc3088003d4edf48ea67a2ce6b0bc8a. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Forecast studio / forecast

forecast-regimes · Three-state price regimes

Generate seeded annual scenario paths from normal, scarcity and oversupply Markov states.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 4 JSON)
FieldUnitMinimumMaximumDefault
yearsyears140Default 20
pathspaths2010000Default 1000
seedinteger04294967295Default 42
  • state_means_eur_mwh — State price means; JSON array, units U; default SHA-256 7503ddfc0ab4b0838ec2e1d94d8f9c721c58bdc78ee1a29a24422988b61f1090.
  • state_volatilities_eur_mwh — State volatilities; JSON array, units U; default SHA-256 78773dea9fb438140498f712446cbe2c8c0d4d064aed05287a89d11cdb36a86f.
  • transition_matrix — Transition probabilities; JSON array, units U; default SHA-256 420f835981c8cb3bf1c70dc11705a0cd5616a01d7367a8b1bc1472c845cbf041.
  • initial_state_probabilities — Initial probabilities; JSON array, units U; default SHA-256 1df1fa431ecaacee744db67ebb1e05ecc0994dc725e3fecfb42831655c9e56f9.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • S_t ∼ categorical(P[S_{t−1},·])
  • price_t | S_t=s ∼ Normal(state_mean_s, state_volatility_s²)

Model limits

  • Seeded annual scenarios only; user-supplied transition probabilities and state parameters are not calibrated, backtested or market forecasts.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6f9e112d753bf0d942dc3eefc5d5f58914154a89b279957377f7b9fd172a2cdf; result evidence digest 31defb04af903be902409a7a79214d90104ac62bf1fbdfd51d626cf80963a9d3. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Forecast studio / forecast

forecast-commodities · Correlated commodity shocks

Simulate correlated gas, carbon and power price paths using a bounded, PSD correlation matrix.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 4 JSON)
FieldUnitMinimumMaximumDefault
yearsyears140Default 20
pathspaths205000Default 1000
seedinteger04294967295Default 42
  • starting_prices — Starting gas, carbon and power prices; JSON array, units U; default SHA-256 009cfc5a5d3f09a9404a35e659feca0c654006caba77253fa5e58a27178ae279.
  • annual_volatilities — Annual volatilities; JSON array, units U; default SHA-256 5bc297ef73bd42e8f4b3f05a4be5df313d6937fac161637443835948eecd3905.
  • annual_log_drifts — Annual log drifts; JSON array, units U; default SHA-256 eb52fd75fdccfeb5a497bdc83277ad64c8ff226314d5f323f5ad79c9ce3c4661.
  • correlation_matrix — Correlation matrix; JSON array, units U; default SHA-256 6de851cd25e3cf9c650f712a3dacd3e6d20a0e0a865939c123680d074fb66789.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Z_t = L ε_t, L Lᵀ = correlation matrix
  • P_j,t = P_j,t−1 exp((μ_j−0.5σ_j²)+σ_j Z_j,t)

Model limits

  • Synthetic geometric-random-walk shocks with constant user inputs; no forward curves, cointegration, structural fuel dispatch, calibration or forecast claim.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9b982aecc8668d522e4bc837b4efcf02baade464bb8634048df0898cfb3a9980; result evidence digest 8a81664f0baac4cc18ceadd7dd2143391c565272ffc71295122d31460681d408. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Forecast studio / forecast

forecast-tail · PPA settlement tail risk

Estimate empirical 95% and 99% loss VaR/CVaR from seeded annual PPA settlement paths.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
strike_eur_mwhEUR/MWh0.015000Default 80
volume_mwhMWh/year010000000Default 10000
yearsyears140Default 10
pathspaths10010000Default 1500
seedinteger04294967295Default 42
annual_volatilityfraction02Default 0.25
  • histogram_year — Selected year and histogram bins; JSON object, units U; default SHA-256 7c3888e0f543e35c434e0fa049ad3ce20f5a3bf020de8eb57ab5884ddea0ab87.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • spot_t = strike + Σ_{k≤t} Normal(0, (volatility × strike)²)
  • loss_t = (spot_t − strike) × volume
  • CVaR_α = mean of the largest ceil((1−α)N) empirical losses

Model limits

  • Synthetic arithmetic price walk; signed buyer settlement losses versus strike, not project revenue, calibrated PPA basis, hedge effectiveness or a probability guarantee.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9cd8d1581533cc8fb1868c81def6688e5786cde3644fda43fbf18ab031efa354; result evidence digest cc414c25643cc97ca8992cb08b679f6021b204f074a47f9ae8b18f60f0c8e98a. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Investment desk / investment

investment-sculpt · DSCR-constrained sculpted debt

Compare the existing finance screen and annuity sizing with a non-negative-amortization CFADS sculpting bound.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
target_dscrratio15Default 1.3
requested_debt_eurEUR01000000000Default 1760000
discount_ratefraction00.4Default 0.08
  • finance_request — Existing project-finance assumptions; JSON object, units U; default SHA-256 bdcb1f1f5bccc2f8c5f8109a2761dd40dbb09116c0886ea02da550c86215ea69.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • target service_t = max(0, CFADS_t) / target_DSCR
  • debt capacity = largest initial balance whose target-limited service amortizes within tenor without service below interest
  • balance_t = balance_{t−1} + interest_t − principal_t

Model limits

  • Uses the existing pre-tax nominal project-finance engine and its rounded annual CFADS. No taxes, DSRA, fees, reserve facility or legal covenant is added; infeasible requests are disclosed.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest dd9ed5077bd5f46e5e0dc2f76fad6f593a4d88272dd0f7fdbc1f7b68c60194f7; result evidence digest 7f1eef49684d1cfbe7d4185e47301cd74fd1d168151f33c7c828ca61ffd57c19. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Investment desk / investment

investment-tranches · Contracted and merchant tranches

Size debt separately against PPA-floor CFADS and user-haircut merchant cash flows.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
target_dscrratio15Default 1.3
merchant_haircut_fractionfraction01Default 0.5
interest_ratefraction00.3Default 0.055
tenor_yearsyears140Default 10
contract_yearsyears040Default 10
  • annual_rows — Annual floor, merchant and operating assumptions; JSON array, units U; default SHA-256 abb4a03aea3e75f6ee819eddc9792b822e001fec8289d7478d4b52b287fd3fcf.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • contracted_CFADS_t = floor_price_t × contracted_MWh_t − OPEX_t (within floor term)
  • merchant_CFADS_t = haircut × merchant_price_t × merchant_MWh_t − OPEX_t
  • debt-service ceiling_t = max(0, CFADS_t) / target_DSCR

Model limits

  • User-supplied floor is a hypothetical exposure input, not an executed PPA or eligibility claim. No volume shape, basis, counterparty risk, taxes or post-expiry contracted-volume conversion is inferred.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 33c2d99f5f21fb454c314174d09b3a41406b840af739e85863308b1c1a4450f4; result evidence digest 143ec198d1a264f24eba3e6a4f50dbaec1a85108fbaacd53351ba46f0a8454e0. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Investment desk / investment

investment-waterfall · Capital and promote waterfall

Allocate one exit pool through return of LP capital, accrued preferred return, a 50/50 catch-up and an 80/20 promote.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
capital_eurEUR01000000000000Default 5000000
distribution_pool_eurEUR01000000000000Default 12000000
yearsyears150Default 10
preferred_return_ratefraction00.5Default 0.08
catchup_sharefraction0.011Default 0.5
sponsor_promote_sharefraction00.99Default 0.2

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • preferred return due = capital × ((1 + preferred_rate)^years − 1)
  • catch-up total = promote_share × LP_pref_paid / (catch-up_share − promote_share)
  • remaining pool split LP/sponsor = (1 − promote_share)/promote_share

Model limits

  • Explicit single-LP, time-zero contribution and single-exit convention; no interim distributions, taxes, return-of-capital priority to sponsor, clawback, IRR hurdle or legal partnership terms.
  • First-party algebraic convention; the source reference is not independent validation or a legal partnership agreement.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 80637a51f24f187bb37eb39ad714e957e643c018eed8891e8035977730423bc6; result evidence digest 4d69d195973aeeb02ab07f78dca12eb0d5f364e063444558a277ba214ca2f923. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: decision_studies.py. Tests: test_decision_studies.py · test_studies_api.py. Shared study result contract.

Learning studio / lessons

lessons-duck · Net load and ramps

Work through renewable subtraction, hourly ramps, and energy closure.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 3 JSON)
FieldUnitMinimumMaximumDefault
interval_hoursh0.254Default 1
ramp_limit_kw_per_hourkW/h010000Default 45
ramp_percentile%5099.9Default 95
  • load_kw — Demand; JSON array, units U; default SHA-256 0c82ad30214dafaeec9938c4bd816d27356e7f9c63d6c18e9bf6f53d559456ec.
  • solar_kw — Solar output; JSON array, units U; default SHA-256 10a94fc5f77b4920a95711906bdb20dd46c87663f47d2f68490a22aac7d999f3.
  • wind_kw — Wind output; JSON array, units U; default SHA-256 27c38d492507eb28a7458427129f656f36b54db5ede86005781e26c5608fc171.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • net load[t] = load[t] - solar[t] - wind[t]
  • ramp[t] = (net load[t] - net load[t-1]) / interval hours
  • net-load energy = sum(net load[t] * interval hours)

Model limits

  • Synthetic equal-duration series; no dispatch, forecast, or grid-constraint model.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest c40a02b1ab8a04cb0bd94ee0e23763b034fb77086c82be31fb9ec1591b6f844c; result evidence digest 859e80d471bf574c94d3edef215551d775d197ad16654ba70a05ce290ddc4ccb. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Learning studio / lessons

lessons-blackstart · Black-start sequence exercise

Check a finite-state energization sequence against active-power and inrush budgets.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
gfm_rated_kwkW1100000Default 500
available_power_fractionfraction0.011Default 0.8
inrush_budget_kwkW0100000Default 250
reserve_fractionfraction00.99Default 0.15
  • steps — Ordered exercise steps; JSON array, units U; default SHA-256 cab7cc7fb867753a7600370a8af4f3a1b2f5c8a6bf4d4a115d83918d40f39055.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • available budget = rated power * available fraction
  • step passes if active power + inrush <= rated power * (available fraction - reserve fraction)
  • states: dark -> grid-forming-ready -> bus-energized -> load-restored

Model limits

  • Procedural finite-state exercise only; no transient, protection, motor-start, or energization validation.
  • Budgets and sequence require system-specific operator review.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 9584284a0d8d5f8c4a17e1b03cbde839d3d5a46d385a105ce252bc771dffb4fa; result evidence digest a94bfaff59524438a7f2c816d99703b6c123d0e27160fd52d3cf0593edcf818f. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Learning studio / lessons

lessons-hydrogen · Hydrogen energy pathway

Close the electrolyzer, compression, LHV storage, and fuel-cell energy ledger.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
electrolyzer_kwh_per_kgkWh/kg H233.3200Default 52
compression_kwh_per_kgkWh/kg H20100Default 2
fuel_cell_electric_efficiencyfraction01Default 0.5
hydrogen_lhv_kwh_per_kgkWh/kg H233.333.3Default 33.3
  • batch — Hydrogen batch; JSON object, units U; default SHA-256 576500d0ef9c90dbfa6f097862e0186506043c8ab5fda9ccb5e460c69202e256.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • chemical energy = hydrogen mass * 33.3 kWh/kg (LHV basis)
  • fuel-cell electricity = chemical energy * electric efficiency
  • electricity input = useful output + electrolysis + compression + fuel-cell losses

Model limits

  • Stage parameters are illustrative, not measured plant performance.
  • Compression boundary, delivery pressure, leakage, and plant auxiliaries are not modeled.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 5c32abfe7e669a83892218dd80d1b40470274d16eb58c9d953df8ea4fe25145b; result evidence digest a8e3dd7e6715de6cc54143790fdf170cdb52594814ef8eca030ec596e5c8ca69. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Scenario compare / compare

compare-pareto · Comparable-run Pareto screen

Show cost, service, SOC endpoints, sampled expected loss-of-load hours, dominance, and a disclosed weighted preference.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
cost_weightfraction01Default 0.4
service_weightfraction01Default 0.3
loss_of_load_weightfraction01Default 0.3
  • candidates — Scenario-tagged run results; JSON array, units U; default SHA-256 2a66d8ca20fa1409aed033e87b239e12c3cf564a838726febcc89ba3128683c0.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • a dominates b when it is no worse on all objectives and strictly better on one
  • score = weighted sum of within-group min-max normalized objectives

Model limits

  • Comparison requires matching scenario, sample-set key, horizon, service basis, and sample count.
  • Expected loss-of-load hours are supplied estimates; recommendation depends on user weights.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 4f296a339cebe21478c3d273ea0ae99ce1fe429331b902b55bdc7bdec85afcba; result evidence digest 22f332e760056403db191bc62dd3d0e3adce59679220837f6574b1ca6d374f64. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Scenario compare / compare

compare-dunkelflaute · Fourteen-day storage dispatch

Dispatch storage over a non-repeating synthetic 336-hour path with fixed initial and terminal SOC.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
energy_capacity_kwhkWh0.00110000000Default 500
power_limit_kwkW0.0011000000Default 120
charge_efficiencyfraction0.011Default 0.94
discharge_efficiencyfraction0.011Default 0.94
initial_soc_kwhkWh010000000Default 250
  • load_kw — 336 hourly demand values; JSON array, units U; default SHA-256 82c7687716acf5867c8ed176f4a9485d2712cea2107738134e7f9aed1645488d.
  • renewable_kw — 336 hourly renewable values; JSON array, units U; default SHA-256 7591e40d252a1168119fad73b30ece299aa1c38315c2805ca08277e25cd4f7c3.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • renewable + discharge + shortfall = load + charge + curtailment
  • SOC[t+1] = SOC[t] + charge efficiency*charge - discharge/discharge efficiency
  • charge <= power limit*mode; discharge <= power limit*(1-mode); mode is binary
  • minimize shortfall subject to SOC[0] = SOC[336] = initial SOC

Model limits

  • One synthetic 336-hour weather path, not a repeated demo day or statistical LOLE estimate.
  • Reduced mixed-integer dispatch enforces battery direction but omits degradation, reserves, network, and market constraints.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 8af60e8d4cf71a8d86659bb5e5c5ba2bf4d25d664bee3104b4f99dc22b87dec5; result evidence digest 89a51d19bb519a2ef7d5c85c8930429869efb1fb73aa710bb87f67fe052b5eef. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Scenario compare / compare

compare-thermal · Thermal and cycle-wear screen

Compare utilization, equivalent full cycles, an explicit temperature multiplier, and three-axis radar data.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
reference_temperature_c°C-40100Default 25
temperature_factor_per_c1/°C00.1Default 0.025
screening_loss_fraction_per_1000_efcfraction01Default 0.025
yearsyear130Default 1
  • regimes — Operating regimes; JSON array, units U; default SHA-256 80f6accecf99eba2f0b9eaf452917f80440544b4706368f04a9f4ab6d21e3ea2.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • EFC = years * 365 * cycles/day * utilization * depth of discharge
  • thermal multiplier = exp(user factor * (temperature - reference temperature))
  • screening wear index = EFC * user loss fraction / 1000 * thermal multiplier

Model limits

  • Temperature factor and cycle-loss rate are assumptions, not fitted cell-aging laws.
  • Wear index may exceed 100%; it is not a capacity-fade forecast, warranty, or safety limit.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest def66335c4dbfa79561796b23366e2d2559bed9833b40065e22a3a4b73aa6720; result evidence digest 9e7ebf8fafac1e98389c3b5a9de3afa154ae2df791e6b0423168b8d57b085d0c. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Construction & pilots / pilots

pilots-photogrammetry · Paired as-built geometry check

Compute 3D paired-point residuals, RMSE, maximum, and a selected percentile.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
coordinate_scale_mm/unit0.000001100000Default 1
reporting_limit_mm0100000Default 0.05
percentile%5099.9Default 95
  • design_points_xyz — Design XYZ points, index-paired; JSON array, units U; default SHA-256 6e9106a2fce695bf8b464f17641c8dd54e531b9f38ec1e444421c41f5949a69e.
  • asbuilt_points_xyz — As-built XYZ points, index-paired; JSON array, units U; default SHA-256 1d773ffb0ac6f68200d7106dfdcb01307dd29bc286e38cf9cad8a9dfd46cc887.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • error[i] = norm(as-built XYZ[i] - design XYZ[i]) * coordinate scale
  • 3D RMSE = sqrt(mean(error[i]^2))
  • selected error = empirical percentile of paired errors

Model limits

  • Pairs are matched by array index; no registration, nearest-neighbour search, camera model, or drone connector.
  • The user reporting limit does not establish survey or construction acceptance.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 75676277e4f66bf40a75f8e2dc2ecca75e6f9474083c5731d07f175859086f29; result evidence digest 390ffec5d3cffcd21004820749913b489ff8a1ec3776ad06463e5ba48301f6b3. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Construction & pilots / pilots

pilots-dts · Distributed temperature profile

Report fresh hot spots, spatial gradients, missing samples, and stale observations.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
hot_spot_threshold_c°C-50200Default 75
gradient_threshold_c_per_m°C/m0100000Default 0.25
maximum_age_hoursh0100000Default 2
current_time_hourh01000000Default 10
  • samples — Spatial temperature samples with timestamps; JSON array, units U; default SHA-256 1bcf94d8bbd2a4c3b870a17302b07fbde25a88ce3e5a2918135dc0e15c29dd35.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • gradient = abs(adjacent temperature difference) / adjacent distance
  • fresh when current time - observed time <= user maximum age

Model limits

  • Sample temperatures and the user threshold are bounded to -50–200 °C; adjacent samples must be at least 0.1 m apart.
  • Thresholds are user screening values; no cable rating or calibrated alarm is claimed. Missing and stale observations are excluded from current thermal summaries.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest f59e798220b3d7b1be3368ff8c1cc719e24f83737ef58e0746ddc750bd062640; result evidence digest 947c2de4f18bb9348d6a9f6a9b3e4add3b88a49b1f21724184b01b6692b18818. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Construction & pilots / pilots

pilots-offgas · Hypothetical multisensor warning vote

Apply temperature, CO, and VOC thresholds and a sensor-level voting rule.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
temperature_threshold_c°C-100500Default 70
co_threshold_ppmppm0.001100000Default 35
voc_threshold_ppmppm0.001100000Default 5
votes_requiredsensors132Default 2
  • sensors — Temperature/CO/VOC readings; JSON array, units U; default SHA-256 02784d3a1195bfb3bf704df82bc03182c22d719079b271a971f4a9ad858e50bc.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • sensor vote = any present channel meets or exceeds its user threshold
  • warning state = sensor votes >= required votes

Model limits

  • Hypothetical logic only; thresholds are not calibrated alarms, exposure limits, or hazard controls.
  • No gas analyser, sensor-health connector, cross-sensitivity model, or field alarm is implemented.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest b91d1186ba0f6ff26716ae33b92353cc69d9be8d89716e0b4f3bb0280ba49d4a; result evidence digest 3917f701da3cefd434c2eceb1548842944107e1e76ffea54389293e6a9b41456. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Agent council / council

council-debate · Finance versus storage debate

Create deterministic proposer/challenger rounds and leave unresolved evidence conflicts visible.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
capex_eurEUR01000000000000Default 1200000
annual_net_value_eurEUR/year-10000000001000000000Default 230000
life_yearsyear160Default 15
discount_rate_fractionfraction00.5Default 0.08
  • finance_evidence — Proposer evidence; JSON array, units U; default SHA-256 1fe862a73f360a5e2fba728e50ed9174d7a59d859b73173157cb9f616bbb55dd.
  • storage_evidence — Challenger evidence; JSON array, units U; default SHA-256 271546ffb361280af9676e04b76fcbc558b5b548c24ce6a3f8e9df2683de3437.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • NPV = -capex + sum(annual net value / (1 + discount rate)^year)
  • matched claims converge only when units agree and values fit declared tolerance

Model limits

  • Rounds are deterministic comparisons of supplied assertions; no LLM or external agent is called.
  • Conflicts remain disputed; the NPV screen is not approval or a dispatch-finance bridge.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest b4d3ef0a82d47eb5426bbea1e0f487fc37b60f67eeafbacc7463f8e1c0a947a7; result evidence digest 773495176ce865887aa32a44db0c1d68524c8265fc152d980b8174c257354866. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Agent council / council

council-evidence · Structured evidence manifest

Check supplied tariff, warranty, and single-line JSON metadata for units, age, expiry, bounds, and provenance.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
maximum_manifest_age_daysdays036500Default 3650
maximum_tariff_eur_mwhEUR/MWh0.001100000Default 2000
maximum_warranty_yearsyears0.001100Default 50
maximum_single_line_nodesnodes11000000Default 10000
  • manifest — Structured document manifest; JSON object, units U; default SHA-256 13fab004e43f65a29ea4769e6cee62b6b8e59d59c87415ebda96bb5142ff2755.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • age = as-of date - issue date
  • expiry finding when expiry date < as-of date
  • field check = expected field name and unit plus configured numeric bound

Model limits

  • Structured JSON metadata only; no OCR, retrieval, signature validation, or authenticity verification.
  • Provenance references are user-supplied text and are not independently checked.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest e181e55e9cb797e400b89ef29b9add70c3536e1bb1ad75327e280c26de8ae2b9; result evidence digest ca55f0d38e64683c1c029844bea50202dbfdd92d5548850ba884fa82cec7f598. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Agent council / council

council-consensus · Bayesian evidence toy model

Update a binary prior from explicit likelihood ratios and show normalized probability and Shannon entropy.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
prior_probabilityprobability01Default 0.35
maximum_absolute_log_likelihood_ratiolog ratio020Default 4
evidence_weightfraction01Default 1
  • evidence — Likelihood ratios and dependency labels; JSON array, units U; default SHA-256 9d07bef887eaa2282ddf2d9637913f31e6032f6a06d5349dbc1841ee9c7c3bca.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • posterior odds = prior odds * product(likelihood ratios)
  • posterior probability = odds / (1 + odds)
  • binary Shannon entropy = -p log2(p) - (1-p) log2(1-p)

Model limits

  • Likelihood ratios are hypothetical; raw product assumes conditional independence.
  • Repeated dependency groups are flagged, not deduplicated; no unanimity or approval is inferred.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest d96dd3dcd89a139aefc25cc6f7c6ac371c8e5f2e1eecc9b95615e4b45e907ed9; result evidence digest 142ae1b303c71245e60acbc32b5e97e7dc674256c5b83fa4d0eaafb3db42a77a. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: workflow_studies.py. Tests: test_workflow_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-annual · 8760-hour dispatch and tariff builder

A complete seasonal year or supplied hourly series, with a transparent tariff policy and monthly billing.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (9 numeric; 3 JSON)
FieldUnitMinimumMaximumDefault
capacity_kwhkWh11000000Default 10000
power_kwkW11000000Default 5000
pv_kwpkWp01000000Default 5900
base_load_kwkW01000000Default 3000
efficiencyU0.51Default 0.9
wearEUR/kWh01Default 0.015
monthly_peakEUR/kW0100Default 0
export_priceEUR/kWh03Default 0.04
seedU04294967295Default 42
  • tariff — 24 hourly import tariffs (EUR/kWh); JSON array, units U; default SHA-256 e6f1e10aab1b4a79ab1c7096d8bbbb39a396e2e228db4141f7cd2b5ad4d0b7a1.
  • hourly_load_kw — Optional full-year load (8760 kW values); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.
  • hourly_pv_kw — Optional full-year PV (8760 kW values); JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • SOC[t+1] = SOC[t] + sqrt(efficiency)*charge - discharge/sqrt(efficiency)
  • Monthly demand cost = sum(monthly maximum import kW * monthly tariff)
  • Both initial and terminal SOC = 50%; usable range = 10–90%.

Model limits

  • Explicit non-leap 8760-hour calendar; no DST. Synthetic seasonal weather is not site-calibrated.
  • Transparent tariff-threshold policy, NOT the short-horizon MILP or a globally optimal annual solution.
  • Unconstrained grid connection; no reserve services, outages, demand ratchets, taxes or fixed fees.
  • No daily result is multiplied by 365. Annual totals sum every generated or supplied hour.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 67dc3f746227f6ac9d591f65a760c0efc1cbf87e936f0b981ca74ee7e186fa93; result evidence digest 4828edd3b44c5d6c78b33b4797c2be206b17b9863bd306511e97b51ae0cdb53d. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-sensitivity · LCOE contour sensitivity

A 9 × 9 CAPEX and yield surface evaluated by the existing discounted PV engine.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
capex_eur_kwpEUR/kWp1005000Default 650
yield_kwh_kwpkWh/kWp4002200Default 1350
discountU00.4Default 0.07
opexEUR/kWp0100Default 12

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • LCOE = discounted lifecycle costs / discounted lifetime MWh

Model limits

  • Constant money; the parent PV engine retains its 30-year life and year-15 replacement assumptions.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 28d019d628356b52ba2e634b617fb4879f0531f42dd272f84373a245867026ed; result evidence digest 14c9b5706212e0666e3175aaaf1754f8543b9d6bc156f62f08531372b868d934. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-reserve · Inverter repowering reserve

Inflation-linked future replacement cost and equal end-of-year reserve contributions.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
cost_eurEUR010000000000Default 1750000
inflationU00.2Default 0.02
fund_returnU00.2Default 0.03
yearsU150Default 15

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Future cost = present cost * (1+inflation)^years
  • Annual deposit = future cost * return / ((1+return)^years - 1); zero return: cost/years

Model limits

  • Constant annual assumptions; end-of-year contributions, no tax, fees or investment-return guarantee.
  • First-party algebraic convention; the source reference is not independent validation or a forecast of investment returns.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest fe97427ec80a38468af22b4f978a179a982260dbbdc7d78c41364df9974ad5fc; result evidence digest f828d0f7794f7d0657ef2f7c5feda826c6991edd0f19c63f43e68b24172e8dd1. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: toolkit_studies.py. Tests: test_toolkit_studies.py · test_studies_api.py. Shared study result contract.

Hybrid systems lab / hybrid

hybrid-powerflow · Balanced AC nodal power flow

Solve a bounded balanced PQ/slack network and inspect actual voltage phasors, branch complex powers, losses and ratings.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (3 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
base_mvaMVA11000000Default 100
tolerance_pup.u.1e-120.0001Default 1e-9
max_iterationsiterations2200Default 40
  • buses — Balanced slack and PQ buses; JSON array, units U; default SHA-256 a7a96238b8d127c619657a0d5d5369ccc06d7163a1cba24dcc27df2e9fd197de.
  • branches — Series branches and MVA limits; JSON array, units U; default SHA-256 e8cfa4e15e2be03e4304365aff45787fdf3c00e9b6be91340725ac13894f584c.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • I = Ybus·V; Sbus = V·conj(I)
  • PQ residuals are calculated P/Q plus specified positive loads; slack voltage magnitude and angle are fixed.
  • Branch-end S = V·conj(Ibranch); real branch loss = Pfrom + Pto.

Model limits

  • Balanced positive-sequence per-unit educational model; one slack bus and constant-power PQ loads only.
  • No generator PV/Q limits, transformers, controls, protection, unbalanced phases or operational dispatch.
  • Non-converged or non-finite solutions fail closed. Overloaded branch ratings are reported, not controlled.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 75bd8bd8e2d3b29dcaa90947f359e43f163b85b6d115537ab52c2eb828b88e3e; result evidence digest 1d9b3567ad8f35285ba73e25ef99164b960ef26f48e70b980a4018461aedc78c. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Hybrid systems lab / hybrid

hybrid-switching · PWM inverter/filter transient

Compare single-phase bipolar PWM switching with its averaged voltage in a series RL grid filter.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (10 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
switching_enabledU01Default 1
dc_link_voltage_vV1002000Default 650
modulation_indexU00.95Default 0.85
fundamental_hzHz4070Default 50
switching_hzHz1005000Default 2000
filter_inductance_hH0.00010.1Default 0.003
filter_resistance_ohmΩ0.0520Default 0.5
grid_voltage_rms_vV RMS101000Default 230
time_step_ss0.0000010.00005Default 0.00002
simulation_cyclesU15Default 2

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • L·di/dt = vinverter(t) − vgrid(t) − R·i
  • Switched bridge: vinverter ∈ {−Vdc/2, +Vdc/2} from sinusoidal-reference/carrier comparison.
  • Averaged bridge: vinverter = (m·Vdc/2) sin(2πf1t); RL step uses the exact constant-input exponential update.

Model limits

  • Single-phase series-RL filter, ideal bipolar switches and stiff sinusoidal grid; no semiconductor losses, dead time, PLL or control loops.
  • Switching mode is explicitly sampled; the averaged mode removes carrier ripple. This is not a validated EMT product study.
  • A half-step current-RMS comparison is reported as a numerical resolution check.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 40cf32e2f140ef8600c12805d08b9416a762df6a45f75f88fe27bb5a2904546c; result evidence digest 4740e5cfe1865f4f13882295edf9045f9844f0a513079bdb93428478922860e4. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Learning studio / lessons

lessons-energization · Timed LRC energization transient

Inspect an R-L-C series circuit current and stored/dissipated energy around a single timed breaker closing step.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (10 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
source_voltage_rms_vV RMS11000Default 230
frequency_hzHz4070Default 50
breaker_close_ss00.1Default 0.005
resistance_ohmΩ0.1100Default 5
inductance_hH0.0012Default 0.05
capacitance_fF0.00010.5Default 0.001
initial_capacitor_voltage_vV-10001000Default 0
closing_phase_degdegrees-180180Default 0
time_step_ss0.0000010.00005Default 0.00002
simulation_cyclesU15Default 2

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • L di/dt = vsource − R i − vC after breaker close
  • C dvC/dt = i; before the close event, i and vC remain constant.
  • E = ½Li² + ½CvC²; dE/dt = vsource·i − Ri² while connected.

Model limits

  • One ideal single-phase series-RLC branch with a source-side close event; no transformer saturation, relay logic, arc or multi-step restoration.
  • This lesson is not a black-start study or a certified energization/inrush limit assessment.
  • A half-step peak-current comparison and circuit energy residual are reported.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 94d879bbb2569af4d4553c6451bcc27f7cb7482de76c493d732be9dbac1b49fa; result evidence digest 4605f2da9463e436145e356516dc219608eb59c67e182996e2ea680db8294a69. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-response · Sub-second frequency droop response

Apply frequency droop with a deadband, ramp, power cap, SOC limits and explicit interval energy integration.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (11 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
nominal_frequency_hzHz4565Default 50
deadband_hzHz01Default 0.02
droop_kw_per_hzkW/Hz01000000Default 2500
power_limit_kwkW01000000Default 1000
ramp_kw_per_skW/s010000000Default 1000
capacity_kwhkWh11000000Default 2000
initial_soc_fractionU0.10.9Default 0.5
minimum_soc_fractionU00.89Default 0.1
maximum_soc_fractionU0.111Default 0.9
round_trip_efficiencyU0.51Default 0.9
interval_ss0.0010.5Default 0.1
  • frequency_hz — Observed frequency samples; JSON array, units U; default SHA-256 530dfac6fa6eebdee7b67fa75a0e2a8ca77118ebeab4bc55a3f7de855249222b.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Pcommand = −droop·(f − fnominal) outside the selected deadband
  • Power is bounded by ramp, rated kW and SOC energy headroom.
  • ΔSOC = −P·Δt/(3600·ηdischarge) for discharge; charge uses ηcharge; delivered kWh = ΣP·Δt/3600.

Model limits

  • Deterministic response to supplied frequency samples; each interval holds its measured frequency and output power constant.
  • No grid-code, telemetry, controls, inverter current, reserve procurement, metering or service-qualification model.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest f8e2972bdbefc8d10947470e43793990816dd4b9307e73ee665f86c2c089a120; result evidence digest 0e8d70eeafe5070307b4b577a921be50f1b8ef111ad217346152834515f60ff7. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-agingfit · Capacity-fade coefficient fit

Fit a small empirical cycle-and-temperature response on supplied records and score a held-out validation split.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (0 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
No scalar numeric fields declared; inspect JSON fields and the linked input model.
  • observations — Cycle, temperature and capacity observations; JSON array, units U; default SHA-256 0f13d2b5bfa24dc5757e602d4ebbd5e5d5efd76a0fd8e6ed0cb4f9c867f6e841.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • retention = 1 − a·(cycles/1000)·exp(b·(temperature°C − 25))
  • SciPy bounded least-squares fit uses records 0–3 of each fixed five-record group; every fifth record is held out.

Model limits

  • The included records are a synthetic software fixture, not cell measurements or scientific validation.
  • This two-coefficient empirical curve ignores chemistry, SOC, C-rate, calendar aging, path dependence, uncertainty and censoring.
  • Held-out error describes only the supplied records and cannot qualify a warranty or predict field life.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 2b0cfcac393854bf1eea0621e4c05519a4f3a8dddd2f94fe50f0a0628b3bb29f; result evidence digest 0fd55e00d3ce367e06ebb8d259d95216eb1d0263f0166a5bddbbe1e8b6aa6ac1. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Scenario compare / compare

compare-thermalphysics · Lumped thermal reaction screen

Compare lumped cooling with a bounded Arrhenius heat-release term and explicit stop thresholds.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (12 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
initial_temperature_c°C-20120Default 25
ambient_temperature_c°C-3080Default 25
thermal_mass_j_per_kJ/K10001000000Default 10000
cooling_w_per_kW/K0100000Default 20
activation_energy_kj_molkJ/mol080Default 35
reaction_rate_ref_per_s1/s00.005Default 0.002
reaction_energy_jJ010000000Default 25000
reference_temperature_c°C-2080Default 25
duration_ss0.01120Default 60
time_step_ss0.0010.1Default 0.05
termination_temperature_c°C30150Default 100
reaction_fraction_tripU0.011Default 0.95

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • k(T) = kref·exp[−Ea/R·(1/T − 1/Tref)] with absolute temperature in kelvin
  • dα/dt = k(T)(1−α)
  • Cth·dT/dt = Etotal·dα/dt − UA·(T − Tambient).

Model limits

  • Single effective thermal mass, constant cooling and one depleted reaction; no spatial gradients or material-specific chemistry.
  • Temperature/reaction thresholds only stop this illustrative calculation; this is not a validated safety alarm or hazard assessment.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 08523185b0074291bca13df53a5a252a29e86003a901b3c508fdd30483cec0ff; result evidence digest 8b86353c3d394d440a10445dd787055e4c3f3c9f3bc1ca3ffd6f5b63db0584f7. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-raytrace · Panel-sample ray-triangle shading

Intersect directional sun rays with supplied terrain/obstacle triangles and integrate direct-beam energy at panel samples.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (0 numeric; 3 JSON)
FieldUnitMinimumMaximumDefault
No scalar numeric fields declared; inspect JSON fields and the linked input model.
  • panel_samples — Panel positions, normals and sample areas; JSON array, units U; default SHA-256 5a6cc1da801faa796c817be8d7a663ab52e8613989eefa7ce38b46b7657ce929.
  • sun_vectors — Sun directions, beam irradiance and duration; JSON array, units U; default SHA-256 cc98c685138dc56d58403c4cf5488fe95779a4d8d3c86c4bfa2b4478a7cfd693.
  • occluder_triangles — Terrain and obstacle mesh triangles; JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • incidence = max(0, n̂·ŝ); direct energy = DNI·panel area·incidence·duration.
  • A ray is shaded when a supplied triangle intersects the half-line from a panel sample toward the sun.

Model limits

  • Directional direct-beam only; no diffuse sky, ground reflection, spectral response, horizon/weather series or panel electrical mismatch.
  • Triangles and panel samples are user-supplied local Cartesian geometry; results depend on mesh completeness and coordinate quality.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 07fc8b63015690a8a79483c530d31959f076fd2ece8a5c5d19c1631f0b693ea8; result evidence digest 5f872d05000657728e1843edb375763a76550c22a0abe7c20475d446d21dbbf4. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

PV economics / pv

pv-setbacks · Parcel setbacks and crop-light screen

Apply planar polygon setbacks to multipolygons with holes, then expose a clearly uncalibrated PAR-to-light-response screen.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
setback_mm0100Default 2
pv_cover_fractionU00.9Default 0.3
module_par_transmission_fractionU00.8Default 0.1
baseline_par_mol_m2_daymol/m²/day0100Default 35
light_half_saturation_mol_m2_daymol/m²/day0.1100Default 12
photosynthesis_max_g_m2_dayg/m²/day01000Default 20
  • parcels — Planar parcels with optional interior holes; JSON array, units U; default SHA-256 c5e58b43e49cc7f4a68662dfa3a2b06ef34304c34e0f692b76a522d421181d37.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • usable geometry = parcel geometry buffered inward by setback distance
  • crop DLI = baseline PAR·[1 − cover·(1 − module transmission)]
  • illustrative response = Pmax·DLI/(DLI + half-saturation).

Model limits

  • Planar Shapely geometry in user-supplied metres; no georeferencing, survey, legal boundary, easement or access-road interpretation.
  • Crop-light response is a generic saturating curve, not species-, cultivar-, weather- or farm-calibrated agronomy.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 4215dcbec657d1eb390085f90fc33b89204a95eaae472437cce5b04d77933933; result evidence digest 46bcd9470a1a7c831ff8b78d5a8f44c0fd6e697fb9da7accb0438e0536e4cbf9. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Research pillars / research

research-bearing · Bearing spectrum envelope comparison

Build a robust per-frequency spectrum envelope from training records and flag threshold exceedances in held-out vibration records.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (2 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
sample_rate_hzHz6420000Default 256
threshold_sigmascaled MAD120Default 4
  • training_records — Baseline vibration records; JSON array, units U; default SHA-256 39afa40f4ed35aff229249f6337a8d0814a4c89452e1a4a07fe859dcd756d45f.
  • heldout_records — Held-out vibration records; JSON array, units U; default SHA-256 987a1e9e3d737f65484c604c59ed4e2e69612e38681662f5dbcd7e43a9fbb8cc.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • one-sided amplitude spectrum = |rFFT((x−mean(x))·Hann)|·2/sum(Hann)
  • per-bin envelope = median(training) + threshold·max(1.4826·MAD, 5% of median, floor)
  • held-out record is flagged if any spectral bin exceeds its baseline envelope; maximum_envelope_exceedance_sigma is max((amplitude−envelope)/scale) over exceeded bins, or zero when no bin exceeds.

Model limits

  • The fixture is synthetic; sampling, sensor mounting and training records determine the envelope.
  • A spectral threshold exceedance is an anomaly screen only. It does not identify a bearing fault, root cause, severity or remaining life.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 64a8f7bd96a1bd58e64532c0787e609a38d8b244218fcf177790f11674789934; result evidence digest 42c23e10b2a4dc7898ba9b4ea4f7a349c880bbadf7d1fc1c74acb2140ab46cdd. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: physical_studies.py. Tests: test_physical_studies.py · test_studies_api.py. Shared study result contract.

Storage & flexibility / storage

storage-annualopt · Full-year storage optimization

Optimize 8,760 hourly intervals with battery direction, SOC, grid limits, and twelve monthly demand peaks.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (5 numeric; 4 JSON)
FieldUnitMinimumMaximumDefault
capacity_kwhkWh010000000Default 600
power_kwkW0100000Default 150
round_trip_efficiencyfraction0.011Default 0.9
monthly_demand_charge_eur_kwEUR/kW-month0100000Default 0
solver_time_limit_secondss0.2510Default 4
  • load_kw — Non-leap-year hourly load; JSON array, units U; default SHA-256 19c38482774cc0362389aefac1a09847a72bb67013fef9792d167dbc36da7bc6.
  • pv_kw — Non-leap-year hourly PV; JSON array, units U; default SHA-256 eb2eb582f84e5a5027853645ded6a2608c4d50b5e25a46883cdaa366983b81e4.
  • import_price_eur_kwh — Hourly import tariff (24 points or annual); JSON array, units U; default SHA-256 568a0ae914630d1131e4b90f41c350ef18d217f0789ad7583e31e3d9e2885834.
  • export_price_eur_kwh — Hourly export tariff (24 points or annual); JSON array, units U; default SHA-256 e871ea33962c8f9b5c9d50afd403cdcfa448e8b061866e5fd54b0876e57b16af.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • SOC[t+1] = SOC[t] + ηcharge·charge[t] - discharge[t]/ηdischarge
  • grid import + PV - curtailment + discharge = load + charge + grid export
  • annual objective = hourly energy/wear costs + Σmonth demand_charge × monthly peak import
  • SOC[0] = SOC[8760] = supplied initial SOC

Model limits

  • Non-leap year with equal one-hour intervals; 24-point tariffs repeat by hour of day.
  • Import price must strictly exceed export price each hour; simultaneous grid import/export is then dominated.
  • Synthetic defaults are not a meter record, billing tariff, reserve product, degradation model, or investment case.
  • A time-limit, infeasible, or non-optimal HiGHS result is rejected; the returned schedule is only a proven optimum.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6d4028334ec7520fad95532938f96b2cf422dfec43ea3b0a3b45be09d5b7300e; result evidence digest ce23df9c5d2081bc61c238a338aad8d570e8e317b3c25c6a9f2698db90205900. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Scenario compare / compare

compare-reliability · Chronological reliability ensemble

Seeded Monte Carlo samples weather variation and generator failures while preserving battery chronology.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (7 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
trialstrials205000Default 250
weather_cvfraction01Default 0.2
battery_capacity_kwhkWh010000000Default 80
battery_power_kwkW0100000Default 40
generator_failure_probability_per_hourper hour01Default 0.002
generator_repair_probability_per_hourper hour0.0011Default 0.08
annualization_hourshours87608784Default 8760
  • load_kw — Hourly demand; JSON array, units U; default SHA-256 6ae304a67cfff92d8d9bbffb9bb0b7a90b2870dd5356db19eeb06d8ebaaa45d4.
  • renewable_kw — Hourly weather-dependent renewable output; JSON array, units U; default SHA-256 e7c980528c1c0b49e0e7f6679ecb9b60b12c21b65686ea19a4627e9e4713598f.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • LOLE[horizon] = mean over trials of hours with unserved load
  • EENS[horizon] = mean over trials of Σ unserved kWh
  • annualized metric = horizon expectation × annualization_hours / horizon_hours
  • SOC evolves once across each sampled chronology; it is initialized once per trial

Model limits

  • Weather is a mean-one lognormal AR(1) multiplier; a single thermal unit follows a geometric failure/repair process.
  • Annualization assumes the supplied horizon represents a typical year; it does not stitch repeated horizons or certify a resource adequacy standard.
  • Two-sided 95% Hoeffding intervals use independent bounded trial-level annualized outcomes and can be wide, especially with few or zero observed loss events; no weather-year sampling or network adequacy model is included.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest dcd927302399abfbfb70039b8f658f8065f372e8b8515ac572ef2720af755509; result evidence digest 3443d2200bea3e467b6da7795c279ad33f7023d268bf56990a1e6032b5be4881. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Forecast studio / forecast

forecast-cointegration · Rank-assumed energy-price VECM

Fit a gas/carbon/power long-run relation and short-run error-correction dynamics, then hold out later observations.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 3 JSON)
FieldUnitMinimumMaximumDefault
training_fractionfraction0.50.9Default 0.75
rank_assumptionrank11Default 1
lag_countlags14Default 1
forecast_stepsobservations148Default 12
  • gas_price_eur_mwh — Observed gas prices; JSON array, units U; default SHA-256 e3896729257dbb65eddb30181de73230bf79f019447b61f462394504fd88ccdc.
  • carbon_price_eur_t — Observed carbon prices; JSON array, units U; default SHA-256 038f5d0f8147f90b5846115343f0b19d955b7dcfdd6847ce489315cd733c75be.
  • power_price_eur_mwh — Observed power prices; JSON array, units U; default SHA-256 95afc7d77563ec545a0b2bcc0c66472f45cd9c6c75826dde00b5253bf1ec0b44.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • ECT[t] = power[t] - α - βgas·gas[t] - βcarbon·carbon[t]
  • Δy[t] = c + loading·ECT[t-1] + Σ Γj·Δy[t-j] + ε[t]
  • long-run relation and short-run VECM coefficients are fit on the first chronological segment only

Model limits

  • Rank one is an explicit assumption; no Johansen rank test, unit-root test, or seasonal adjustment is performed.
  • This OLS error-correction screen is not a likelihood-based Johansen estimator or a calibrated commodity forecast.
  • Synthetic examples do not substitute for timestamp-aligned, currency-consistent, real market observations.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 7d4537493146637d22ad2b6e70ea84513aaca87189d84c444180f31954ae3c5c; result evidence digest b41a38367b9f62b444b127367732935a075e99c6e3e1fec7feedfa8c4d721b76. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Forecast studio / forecast

forecast-backtest · Chronological price forecast backtest

Fit an ARX one-step model on early rows and score later rolling-origin forecasts with empirical interval coverage.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (2 numeric; 3 JSON)
FieldUnitMinimumMaximumDefault
training_fractionfraction0.50.9Default 0.75
interval_z_scorez0.54Default 1.96
  • target_price_eur_mwh — Target price observations; JSON array, units U; default SHA-256 95afc7d77563ec545a0b2bcc0c66472f45cd9c6c75826dde00b5253bf1ec0b44.
  • gas_price_eur_mwh — Gas observations; JSON array, units U; default SHA-256 e3896729257dbb65eddb30181de73230bf79f019447b61f462394504fd88ccdc.
  • carbon_price_eur_t — Carbon observations; JSON array, units U; default SHA-256 038f5d0f8147f90b5846115343f0b19d955b7dcfdd6847ce489315cd733c75be.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • target[t] = β0 + β1·target[t-1] + β2·gas[t-1] + β3·carbon[t-1] + ε[t]
  • MAE = mean(|actual - forecast|); RMSE = sqrt(mean((actual - forecast)^2))
  • interval coverage = held-out actuals inside fitted training residual interval / holdout count

Model limits

  • Uses rolling one-step actual target lags and the preceding observed gas/carbon values; multi-step future drivers are not forecast.
  • Prediction intervals use a normal residual approximation and omit parameter uncertainty.
  • A chronological holdout is an evaluation, not independent market calibration or a guarantee of future performance.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 6a6896f8518a7cf0bd9075158a7054d44fc678244e22ea80a4b494ede7a49363; result evidence digest b7514eef2960733e4d188dbe7fd36976cc31556470b4fb1ab72446411e088f4e. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Market intelligence / markets

markets-network · Six-zone DC optimal power flow

Dispatch six zonal generators through a connected linear DC network with branch limits and nodal prices.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (0 numeric; 5 JSON)
FieldUnitMinimumMaximumDefault
No scalar numeric fields declared; inspect JSON fields and the linked input model.
  • zone_names — Six zone names; JSON array, units U; default SHA-256 8be8e041255567ca9d0281045dbd0dff33546df05cecf735906113d83c2dc1ca.
  • demand_mw — Zonal demand; JSON array, units U; default SHA-256 ad466d9d56fc96afa7c8701ebe784ad0ce72fc36a05be4f1587bd599692b045f.
  • generator_capacity_mw — One generator capacity per zone; JSON array, units U; default SHA-256 84d97a2e95b8a98952f06a60726c9f0fca44312651da05b787349638bdf2ba4c.
  • generator_cost_eur_mwh — Marginal generation cost; JSON array, units U; default SHA-256 21702b464e9c841d1df98ebc0c4a85ef7af2b2e9030f7bd251e47a34f09bc138.
  • lines — Branch susceptance and thermal limits; JSON array, units U; default SHA-256 1fcbaab72ca6fd1437cc970c11e8ce12620c06e8bd74c93e0b08a17947a8c3a4.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • flow[i,j] = susceptance[i,j]·(angle[i] - angle[j])
  • generation[i] + net_import[i] = demand[i]
  • min Σ generator_cost[i]·generation[i] subject to nodal balance, capacity, and branch limits

Model limits

  • Linear DC active-power approximation with one aggregated generator per zone; no losses, reactive power, voltage, dynamics, or reserves.
  • Network parameters and costs are user assumptions; no calibrated six-zone topology or real zonal market is supplied.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 352cb15ff3677bce24a97e8505369fbd449df5a7d0d5971b41540e9b0528e691; result evidence digest 00a574b4a7e187ab687dc394ee394d06d94591832e12d54ded14decb6908e9af. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Investment desk / investment

investment-contracts · Contract, tax, and reserve cash flows

Build separate project and equity cash flows with dated floor volumes, merchant sales, tax losses, DSRA, and working capital.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
capex_eurEUR01000000000000Default 8000000
debt_sharefraction00.9Default 0.55
debt_interest_ratefraction00.5Default 0.055
tax_ratefraction00.6Default 0.25
dsra_monthsmonths012Default 6
working_capital_fraction_of_revenuefraction00.5Default 0.08
  • operating_years — Dated annual operating observations; JSON array, units U; default SHA-256 c2e8a76d9cb343b1d52a6bef851945281f8b81e59c461ee1d12e16c16999c2f6.
  • contracts — Calendar-year floor volume terms; JSON array, units U; default SHA-256 eef80e2b46e4e29489add81f401360da597f4d3fdf629ce7dd0977f94e84a3a2.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • contracted volume = min(generation, annual contract volume) while term is in force
  • contracted settlement price = max(user floor price, supplied merchant price)
  • taxable income = EBITDA - straight-line depreciation - interest (equity tax case); tax loss carries forward within this screen
  • equity CF = EBITDA - cash tax - debt service - DSRA funding + DSRA release - Δworking capital
  • project CF = -CAPEX - initial working capital; subsequent CF = EBITDA - project tax - Δworking capital

Model limits

  • Annual calendar-year floor and merchant-price screen; no partial-year settlement, take-or-pay, VAT, tax jurisdiction rules, loss caps, depreciation conventions, fees, or default.
  • Debt is level-payment; DSRA equals configured months of scheduled service and is funded from equity at close, then released after the final debt year.
  • Rates and terms are user assumptions; no signed contract or tax/legal advice is represented. Nonconventional IRR is null.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 02bd4e8946ae89f9daabf4b18c33c2fe6187b105925a407048584382c2133798; result evidence digest b9e66691c614d34db10e4e0633e8383902b04439fde417870779fd93395abe33. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Learning studio / lessons

lessons-hydrogenaux · Hydrogen auxiliary energy ledger

Account for demineralized water, electrolysis, idealized compression to 350 bar, fuel-cell auxiliaries, useful output, and losses.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (6 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
hydrogen_kgkg01000000Default 100
electrolyzer_kwh_per_kgkWh/kg33.3200Default 52
water_recovery_fractionfraction0.011Default 0.8
demineralization_kwh_per_m3kWh/m³010000Default 3
fuel_cell_gross_efficiencyfraction00.8Default 0.52
fuel_cell_auxiliary_fractionfraction00.4Default 0.06

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • water stoichiometry = 9 kg feedwater per kg H₂ / recovery fraction
  • ideal isothermal compression = m·R_H₂·T·ln(Pout/Pin) / compressor efficiency
  • electricity input = useful electricity + useful recovered heat + explicit losses

Model limits

  • Isothermal ideal-gas compressor proxy from supplied outlet pressure; no real-gas, multistage, storage, leakage, purity, or pressure-drop model.
  • Hydrogen LHV and 9 kg/kg stoichiometry are fixed screening conventions; plant-specific stack and water data are required.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest ed71591eb49d25c6e5660897b7daa4ebe600b7488789383880669f3fe2b4b423; result evidence digest 5d6726350869d822150e02cf2bf9b88537347cdddb2789d46b8a4c86dde51128. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Command centre / overview

overview-risk · Portfolio evidence and threshold screen

Compare supplied asset prices, debt, emissions, yield, or other numeric evidence with user-supplied limits and provenance.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (0 numeric; 1 JSON)
FieldUnitMinimumMaximumDefault
No scalar numeric fields declared; inspect JSON fields and the linked input model.
  • evidence — Asset metric values, limits, units, and source records; JSON array, units U; default SHA-256 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • status = missing_value if value is absent; otherwise compare to the supplied min/max threshold
  • provenance is complete only when a source reference and observation date are both supplied

Model limits

  • No asset values, thresholds, or sources are fabricated; an empty dataset returns an explicit no-evidence state.
  • Threshold comparison does not authenticate records, normalize units, or imply risk approval.
  • The NIST publication provides materials-data evaluation context; the source-plus-date completeness rule is this application’s own checklist, not a NIST validation standard.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 8f3f9c27d9b4cfc3cf603c15667240f02309ef53bc498bede4c4fb71c87a0267; result evidence digest 85828d40d7f64615125ed0ca21b2f5f7db6cf5c8fff132b56fee221bd34b422d. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Construction & pilots / pilots

pilots-registration · Unpaired point-cloud registration

Register unordered design and survey XYZ points with trimmed nearest-neighbor ICP and a rigid Kabsch transform.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (4 numeric; 2 JSON)
FieldUnitMinimumMaximumDefault
maximum_correspondence_distance_mm0.00011000000Default 1
trim_fractionfraction0.251Default 0.8
maximum_iterationsiterations1100Default 60
convergence_tolerance_mm1e-70.1Default 1e-7
  • design_points_xyz — Design points (XYZ m); JSON array, units U; default SHA-256 7aa7a0411b6b561b1526546a78cc46311da50c803b9d75840ccc3f193672c9ba.
  • survey_points_xyz — Unordered surveyed points (XYZ m); JSON array, units U; default SHA-256 e463ddc6e523cc0e6475d39ab73dbb9f947c1ca8b4dab2eed062c84c014d539d.

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • nearest-neighbor correspondences are recomputed after every transform
  • Kabsch rigid fit minimizes Σ ||R·source[i] + t - target[i]||² with det(R)=+1
  • trim high-residual correspondences; repeat until RMSE change ≤ tolerance or iteration cap

Model limits

  • Requires supplied XYZ point clouds; no drone imagery ingestion or 3D reconstruction is performed.
  • Unpaired ICP can converge to a local alignment; coordinate frames, units, point density, outliers, and registration quality require survey review.
  • No scale, non-rigid deformation, georeferencing, or survey certification is modeled.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 367874488470d723caec10abe36fedca2e97198ff8fe0a753f2adb1d39fe018a; result evidence digest 2781e5d644a0041bcfb805e79f0fd5f55a991a37ddbfd89f999ba4d7207837fd. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: planning_studies.py. Tests: test_planning_studies.py · test_studies_api.py. Shared study result contract.

Hybrid systems lab / hybrid

hybrid-controls · Averaged inverter control response

Simulate a balanced dq LCL inverter with cascaded voltage/current PI control, vector limits, back-calculation anti-windup, and a refined RK4 trace.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (21 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
duration_ss0.0010.12Default 0.04
time_step_ss0.000010.0005Default 0.00005
load_step_time_ss00.12Default 0.004
load_step_aA0500Default 8
filter_inductance_hH0.00010.02Default 0.0015
filter_resistance_ohmΩ0.00110Default 0.08
filter_capacitance_fF0.0000010.001Default 0.00002
grid_inductance_hH0.00010.1Default 0.001
grid_resistance_ohmΩ0.00110Default 0.05
grid_angular_frequency_rad_srad/s250400Default 314.1592653589793
grid_voltage_peak_vV peak50800Default 325.27
dc_bus_vV1001800Default 800
modulation_index_maxratio0.40.95Default 0.95
current_limit_aA0.11000Default 40
current_kp_v_per_aV/A0.001100Default 1.5
current_ki_v_per_asV/(A·s)0.01100000Default 1000
voltage_kp_a_per_vA/V0.001100Default 0.2
voltage_ki_a_per_vsA/(V·s)0.01100000Default 80
current_antiwindup_per_ss⁻¹010000Default 100
voltage_antiwindup_per_ss⁻¹010000Default 50
trace_pointspoints50500Default 240

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • L_f·d i_f/dt = u_inv − v_c − R_f i_f + ωL_f J i_f; C_f·d v_c/dt = i_f − i_g − i_load + ωC_f J v_c; L_g·d i_g/dt = v_c − v_grid − R_g i_g + ωL_g J i_g, with J=[[0,1],[-1,0]].
  • i_ref = sat_I(i_g+i_load+K_pv(v_ref−v_c)+K_iv∫(v_ref−v_c)dt); u_inv = sat_V(v_c+K_pi(i_ref−i_f)+K_ii∫(i_ref−i_f)dt). Integrators use back-calculation from each vector-limit residual.
  • The averaged two-level inverter voltage bound is Vdc·m_max/√3. State derivatives are integrated with fixed-step RK4 at dt and dt/2; aligned trajectories are compared as a numerical refinement check.

Model limits

  • Balanced positive-sequence dq averaged plant; the grid angle is imposed at the nominal frequency. There is no PLL state or synchronization transient.
  • No PWM switching ripple, dead time, sample/computation delay, sensor filters, DC-link dynamics, unbalance, harmonics, protection, or grid-code behavior is modeled.
  • The fixed-step RK4 model and local linearization are software research screens, not a calibrated controller, hardware result, field validation, or service qualification.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest 58d71dd8e911c20b1c3fc01dc2d8887a8917f80e75d256549465cb3af365d0e8; result evidence digest 5c4ef5f7b976c6be3dd76495c7f8b6574ef8747bcd1a3b773b7faffb41c7a736. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: control_studies.py. Tests: test_control_studies.py · test_studies_api.py. Shared study result contract.

Research pillars / research

research-eigenmodes · Closed-loop inverter eigenmodes

Linearize the unsaturated averaged LCL and cascaded PI model at its grid-voltage equilibrium, then report actual state-matrix eigenvalues and modal damping ratios.

Delivery: public preview = bundled example; new calculation = local Python. Model version: roadmap-screen-v1. Open workspace · Workspace card.

Input schema, units and bounds (14 numeric; 0 JSON)
FieldUnitMinimumMaximumDefault
filter_inductance_hH0.00010.02Default 0.0015
filter_resistance_ohmΩ0.00110Default 0.08
filter_capacitance_fF0.0000010.001Default 0.00002
grid_inductance_hH0.00010.1Default 0.001
grid_resistance_ohmΩ0.00110Default 0.05
grid_angular_frequency_rad_srad/s250400Default 314.1592653589793
grid_voltage_peak_vV peak50800Default 325.27
dc_bus_vV1001800Default 800
modulation_index_maxratio0.40.95Default 0.95
current_limit_aA0.11000Default 40
current_kp_v_per_aV/A0.001100Default 1.5
current_ki_v_per_asV/(A·s)0.01100000Default 1000
voltage_kp_a_per_vA/V0.001100Default 0.2
voltage_ki_a_per_vsA/(V·s)-100000100000Default 80

Study result schema version: U. Units not declared by the catalogue remain U; consult the linked model source for full Pydantic validation.

Equations, references and limits

Declared equations

  • Compute the local matrix A by central-difference linearization of the same ten-state averaged plant/controller used by hybrid-controls at its unsaturated zero-load equilibrium; i_f,q=ωC_fV_grid,d supplies synchronous capacitor current, and PI integrators supply the balancing equilibrium outputs.
  • λ_k are computed from A; local asymptotic stability requires max Re(λ_k)<0. The reported damping ratio is −Re(λ_k)/|λ_k|, and is a local linear modal quantity only.

Model limits

  • Balanced positive-sequence dq averaged plant; the grid angle is imposed at the nominal frequency. There is no PLL state or synchronization transient.
  • No PWM switching ripple, dead time, sample/computation delay, sensor filters, DC-link dynamics, unbalance, harmonics, protection, or grid-code behavior is modeled.
  • The fixed-step RK4 model and local linearization are software research screens, not a calibrated controller, hardware result, field validation, or service qualification.
  • This is the unsaturated local model at an equilibrium; current and modulation limit nonlinearities are inactive. It is not a large-disturbance stability guarantee.
  • A negative outer voltage integral gain is accepted only to expose an intentionally wrong-sign unstable thought experiment; it is not a candidate tuning.

References

Fixture and per-study acceptance card

Bundled default input/output fixture: synthetic_or_user_supplied_unverified. Input digest c90990ac9fbccada9027b5165ae90ecb5c7cf0ce16c81225fd85d22475083464; result evidence digest 194c18e7acd8061111a4d872cd6c8d7525f1ec4b9aca2c1fd859c80652d2e2d0. Both identify content; neither establishes validity.

  • Hand-checkable independent reference: NOT RUN.
  • Invalid boundaries and additional cross-field restrictions: NOT RUN in this documentation change.
  • Seed/determinism and solver feasibility/convergence acceptance: NOT RUN in this documentation change.
  • JSON, CSV and memorandum export path: NOT RUN in this documentation change.

Implementation: control_studies.py. Tests: test_control_studies.py · test_studies_api.py. Shared study result contract.

Source snapshot: human-readable registry · machine-readable registry · historical software verification record. Historical verification does not prove that this page’s app deployment is current.