Energy Inverse Model (EnergyPack) Recover a regulated utility's implied assumptions (allowed ROE, rate-base growth, capex intensity, equity ratio, opex efficiency) from public filings for cross-firm utility assumption recovery and valuation.
ANALYTIC SCAFFOLD (Decision 060) — not a booked-number engine. The thing that genuinely exists is the tenk2win EnergyPack: an inverse model that inverts an analytic regulated-utility forward map (rate-base × equity layer × allowed ROE → cost-of-service regulated earnings; capex_intensity × rate base → capex; opex-efficiency drag → net income; cohort payout → dividend capacity) through the SAME calibrate / recover_vertical / surrogate / counterfactual substrate the insurance and banking verticals use (Decision 037 — vertical-agnostic; the only new content is the pack's θ/y schemas + forward map). It recovers a peer's implied θ from disclosure and supports cross-firm comparison + a P/B allowed-ROE-spread valuation; it does NOT run a regulatory cost-of-service rate case, set an authorized ROE, or compute a booked rate base. Only the two disclosed line items (net_income, capex) anchor the inverse; allowed_roe is left FREE (rate cases are MD&A/ confidential, not XBRL — recovered prior-anchored at the ~9.7% sector norm) and equity_ratio is an honest accounting proxy (common-equity / (equity + LT debt)) for the authorized regulatory layer, flagged in provenance. 8/9 peers recover (AEP/CEG/D/DUK/ED/NEE/SO/XEL); WEC is dropped for stale data. Real utility engines (M-431/M-432) replace the analytic forward() when demand-pulled; the θ/y schemas and the inverse loop around them are unchanged.
Inputs, processing, outputs
- dimensions
- D3
θ / y Schema
θ — the latent assumptions a regulated utility's filings imply:
| θ | meaning | observability |
|---|---|---|
allowed_roe |
authorized return on equity from rate cases (the regulated value driver) | FREE — rate cases are MD&A/confidential, not XBRL; recovered prior-anchored at ~9.7% sector norm |
rate_base_growth |
YoY growth of the regulated rate base | FREE |
capex_intensity |
capex / rate base (the growth pump) | FREE |
equity_ratio |
regulatory equity layer in the authorized capital structure | FREE — accounting proxy (common-equity / (equity + LT debt)), flagged equity_ratio_basis=accounting |
opex_efficiency |
non-fuel O&M / revenue (lower = leaner) | FREE |
y — the filing-visible outputs: rate_base_next, regulated_earnings, capex,
net_income, dividend_capacity.
Inverse anchoring (no fabrication): only the two disclosed line items
(net_income, capex) anchor the inverse. regulated_earnings, rate_base_next and
dividend_capacity are forward/derived (scaffold) and are not used as calibration
targets. A target staler than ANCHOR_YEAR − 1 is omitted and flagged; calibrate()
skips absent targets, so a thin firm gets prior-dominated θ on the dimensions it cannot
anchor.
Validation Evidence
The scaffold's evidence is the real-θ recovery over the utility peer set: the pack recovers its implied θ through the same calibrate/recover_vertical used for insurance and banking — no solver changes.
- 8/9 peers recover: AEP, CEG, D, DUK, ED, NEE, SO, XEL.
- WEC dropped for stale data — an honest coverage gap, not a fabricated row. Other
real extraction gaps are flagged at source (D/SO have no
utility_plant_netseries; AEP net_income lags; NEE rate base to FY2020) — those firms get prior-dominated θ on the dimensions they cannot anchor. - Disclosed sensitivities (
(regulated_earnings, allowed_roe),(capex, capex_intensity)) are not yet wired from utility disclosures — left empty (a follow-up, the bankingdisclosed_sensitivitiesanalogue).observed_thetais empty (nothing disclosed to pin).
No production validation pack exists, and none is expected for a scaffold.
Upgrade Path
Replace the analytic forward() with the real regulated-utility engines —
M-431 regulated rate-base / cost-of-service (authorized rate base + revenue
requirement) and M-432 allowed-ROE / rate-case model (authorized return + capital
structure from rate proceedings) — and source utility EDGAR plus rate-case proceedings.
The θ/y schemas and the whole inverse loop around them are unchanged. Until then those
two are status: planned stubs in the registry (demand-pulled), not built engines.
ID Collision Note
The insightalm model ids use the clean M-430..M-432 block. The tenk2win pack's
internal OutputSpec/AssumptionSpec ids (M-601..M-605, A-601..A-605) are
pack-local schema labels, not insightalm model-registry ids — and M-601 would
collide with insmodel.L4.asset_management in engine_registry.yaml, so it is not
reused here (the same discipline banking used to dodge the M-401/M-403 Scheme-B
collision).
Change Log
- 2026-06-28 — Created. Energy / regulated utilities enters the governance lifecycle as an analytic scaffold (Decision 060 / insightalm governance-setup). Honest tier (3) / status (under_development); real rate-base/cost-of-service and allowed-ROE/rate-case engines registered as planned stubs.
References
- tenk2win
src/tenk2win/packs/energy/pack.py(the EnergyPack forward map). - tenk2win
src/tenk2win/packs/energy/firms/__init__.py(the real-θ utility firm adapter — what is sourced vs scaffolded). - Decision 059 (banking forward map = analytic scaffold, the template), Decision 060 (banking + energy into the governed lifecycle).
Open findings (1)
Independent 2nd-line review (INV-2026-06) — implemented capability vs registered scope. Each carries a recommended fix and is tracked in insightalm-mrm until closed.
Validation evidence + change logs missing across most of the inventory
Only M-001/M-020/M-050 carried full documentation packs before this pass. Most models record validation_evidence: missing and change_log: missing with peer_review: pending. Gold tests freeze behaviour but many assert only structural invariants (e.g. reserve>0), not correctness against external truth. The flagship T0-vs-10-K match is circular (BV-032).
Recommendation: For each Tier-1 model: produce a validation-evidence pack (back-test vs disclosed results once BV-032 re-calibration lands, sensitivity suite, challenger comparison), a change log, and a 2L ratification. Sequence behind BV-032 (firm-data) for anything needing 10-K reconciliation.
Conditionally-approved scaffold — RAT-430-v1.0.0
2L issued RAT-430-v1.0.0 as a conditionally-approved Tier 3 analytic scaffold. The model exists, runs, and matches its card — but its approval is intelligence-use-only: its outputs must never be read as a booked, regulatory, capital, or reserving figure. Booked use (and tier promotion) is gated on the PLANNED engines, which are not built. The conditions below are on record.
| id | deadline | condition |
|---|---|---|
| C-430-01 | INTELLIGENCE-USE-ONLY. M-430 is approved ONLY for cross-firm utility assumption recovery + valuation (decision-support intelligence). It is NOT approved for any booked, regulatory, rate-case, or capital-structure use. Its outputs (recovered θ, analytic regulated_earnings / rate_base_next / capex / net_income / dividend_capacity) must never be read as a regulatory cost-of-service revenue requirement, an authorized rate base, an awarded allowed-ROE, or an authorized regulatory capital structure. | |
| C-430-02 | REAL ENGINES ARE THE PRECONDITION FOR BOOKED USE + TIER PROMOTION. Any booked/regulatory utility use requires the PLANNED (not built) engines — M-431 regulated rate-base / cost-of-service (Tier-2) and M-432 allowed-ROE / rate-case (Tier-2) — to be built, registered with real bindings, and independently ratified. M-430 must not be promoted above Tier-3, and its purpose must not be widened beyond internal_strategy, until such an engine replaces the analytic forward() and a use beyond internal strategy is asserted. | |
| C-430-03 | THE PROXY / FREE-θ CAVEATS MUST STAY DISCLOSED. The two scaffolded substitutions — (a) the invested-capital proxy rate base for firms lacking a utility_plant_net series (D, NEE) and (b) the FREE prior-anchored allowed_roe + the accounting equity_ratio proxy (the equity layer is RECOVERED, not AUTHORIZED) — must remain explicitly flagged in the card, registry description, and the pack/firm-adapter provenance. Removing or burying these caveats voids this conditional approval. | |
| C-430-04 | RE-RATIFY ON ENGINE REPLACEMENT. When the analytic forward() is replaced by a real regulated-utility engine (the M-431/M-432 upgrade path), M-430 (or its successor) re-enters ratification at the new tier with the full Tier-1/2 effective-challenge battery (validation evidence, gold snapshot) — this RAT does not carry forward to a booked-number engine. |