Tier 2 · Internal Strategy

Regulated Rate-Base / Cost-of-Service

M-431 · lifecycle: development · RAT-431-v1.0.0 · conditionally-approved scaffold

Intended Use

Regulated Rate-Base / Cost-of-Service Compute a regulated utility's rate base and cost-of-service revenue requirement (return on rate base + recoverable expenses + depreciation + taxes); reconcile to disclosed revenue.

1L-BUILT, UNDER DEVELOPMENT (Decision 060/051, insightalm#3415). The real cost-of-service engine that replaces the M-430 scaffold's analytic rate-base × allowed-ROE earnings term. Engine: energylib.L3.cost_of_service (homed in the energyview repo — the first energy engine, bootstrapping the energylib module; the energy analogue of finlib-in-FinView). Rate base = disclosed net utility plant (utility_plant_net) + CWIP/working-capital adders (authorized adders data-gated → 0, flagged). Revenue requirement = return on rate base (WACC × rate base, equity leg grossed up for tax) + recoverable O&M + depreciation, reconciled to disclosed total revenue. Because the recoverable leg is disclosed (total_revenue − operating_income), the reconciliation tests the modelled return against disclosed operating income — the earned-vs-allowed-ROE signal. Tier-2 (decision-support / valuation input). COMPOSES WITH M-432 (2026-06-29, 1L remediation): allowed_roe + the authorized equity ratio are now SOURCED from state-PUC rate-case orders via energylib.L3.allowed_roe_ratecase for the 7 regulated peers (flagged sourced:rate_case(M-432)); CEG (merchant — no rate case) keeps the recovered ~9.7% sector prior + accounting equity-ratio proxy, honestly. With sourced θ live, 5/8 peers reconcile to disclosed revenue (AEP/DUK/ED/SO/CEG); XEL/D/NEE are non-reconcilers documented as signal (merchant earnings / regulatory lag / Dominion invested-capital rate-base proxy). HONESTY: M-432 is itself 1L-only (NOT 2L-ratified) so this composition is intelligence-use only until M-432 ratifies; authorized rate base + recoverable-O&M split remain data-gated on FERC Form 1 / rate-order extraction. 1L build only — NOT 2L-ratified.


Components

Inputs, processing, outputs

data sources
DS-073
engines
energylib.L3.cost_of_service
dimensions
D3

Methodology & Mechanics

Methodology

  • Rate base = disclosed net utility plant (utility_plant_net) + CWIP / working-capital adders (authorized adders are FERC-Form-1 figures → defaulted to 0, flagged). SOURCED.
  • Revenue requirement = return on rate base (WACC × rate base, equity leg grossed up for income tax) + recoverable O&M + depreciation. The recoverable leg is taken from disclosure (total_revenue − operating_income), so the revenue-requirement reconciliation is mathematically the modelled return vs disclosed operating income test — the earned-vs-allowed-ROE signal.
  • Allowed ROE + authorized equity ratio (composition with M-432): sourced from state-PUC rate-case orders via energylib.L3.allowed_roe_ratecase (M-432) for the 7 regulated peers; the recovered ~9.7% sector prior + accounting equity-ratio proxy are used only where no rate case exists (CEG, merchant). SOURCED-WHERE-AVAILABLE.
  • No firm value is hardcoded — every input is a contract parameter (the InsModel bscr_engine factor·exposure precedent).

Validation Evidence

Validation Evidence

energyview repo: validation_evidence/M-431/ — per-peer reconciliation of the modelled revenue requirement against disclosed total revenue (and the modelled return against disclosed operating income), regenerated with the M-432 sourced-θ composition live (allowed_roe + authorized equity ratio sourced for 7/8 peers). 5 of 8 peers reconcile within ±10% (AEP, DUK, ED, SO, CEG). The three that don't are honest signals, not model error:

  • NEE (−10.4%): material unregulated merchant / IPP (renewables) earnings above the regulated cost-of-service return — earned return-on-rate-base ~15% vs the ~11% authorized. (CEG, also merchant, earns ~14% on rate base but its smaller rate-base / larger pass-through pulls its revenue-requirement diff to −3.6% → it reconciles; its allowed ROE stays recovered, no rate case.)
  • XEL (+20.6%): under-earns its modelled return on rate base (regulatory lag / accounting net plant above the authorized rate base).
  • D (+12.9%): Dominion has no disclosed utility_plant_net series → rate base falls back to an invested-capital proxy (flagged); sourcing the authorized equity ratio (~52% vs ~39% accounting) raised its modelled return and moved it just outside tolerance — an honest correction surfaced by the M-432 composition.

Correction vs the intake/2L brief (FIND-431-02 + composition effect): sourcing the authorized equity ratio (M-432) MOVED the spectrum. Pre-composition the misses read as NEE/XEL; with sourced θ the non-reconcilers are XEL / D / NEE and CEG now reconciles. The card now matches the regenerated evidence, not the pre-composition 6/8. Regenerate: validation_evidence/M-431/reconcile.py.


Model Documentation

What is real vs flagged (no fabrication)

  • REAL (disclosed): rate base = net utility plant; total revenue; operating income; the full revenue-requirement reconciliation.
  • SOURCED (rate case, via M-432): allowed_roe + the authorized equity ratio for the 7 regulated peers — pinned from state-PUC orders by energylib.L3.allowed_roe_ratecase, flagged sourced:rate_case(M-432). M-432 is itself 1L-only (not 2L-ratified) → this composition is intelligence-use only until M-432 ratifies.
  • FLAGGED (recovered / scaffold, never filed): allowed_roe recovered ~9.7% prior ONLY for CEG (merchant — no rate case) + its accounting equity-ratio proxy; depreciation (sector scaffold where the disclosed D&A line is absent); CWIP / working-capital rate-base adders (→ 0); Dominion (D) rate base = invested-capital proxy (no disclosed utility_plant_net).
  • Data unlock for full depth: FERC Form 1 ingestion (authorized rate base + recoverable-O&M split); M-432 2L ratification + its predictive rate-case-outcome tier (paid RRA/EEI) and full per-subsidiary realized coverage (PUDL bulk-ingest).

Model Documentation

Status

under_development. Engine bound (energylib.L3.cost_of_service), data source DS-073 (investorMgmt canonical store, read-only per D041), validation evidence present. 2L CONDITIONALLY APPROVED — RAT-431-v1.0.0. Status held at under_development (not active) pending the open condition: allowed_roe + authorized equity ratio are now sourced from M-432 (rate cases) for 7/8 peers, but M-432 is itself 1L-only (not 2L-ratified), so booked use / active promotion waits on M-432 ratification. The authorized (vs accounting) rate base and recoverable-O&M split remain data-gated (FERC Form 1).


Change Log

Change Log

  • 2026-06-28 — 1L build: energylib.L3.cost_of_service (energyview) + per-peer reconciliation evidence; registry/card moved planned → under_development. Ready for 2L.
  • 2026-06-28 — Created as a planned backlog stub (Decision 060 / energy governance-setup).
  • 2026-06-28 — 2L verdict (RAT-431-v1.0.0): CONDITIONALLY APPROVED. Registry lifecycle.ratification_ref set to RAT-431-v1.0.0 via the reconciler promote channel. Status held at under_development (not promoted to active) pending the open condition: allowed-ROE / authorized-equity-ratio proxies replaced by the M-432 model + FERC Form 1 / rate-order sourcing.
  • 2026-06-29 — 1L remediation: M-432 composition wired + doc-currency (C-431-02 / C-431-03 / FIND-431-01). M-432 (energylib.L3.allowed_roe_ratecase) is now 1L-built; M-431 composes with it, pinning sourced allowed-ROE + authorized equity ratio for the 7 regulated peers (CEG merchant stays recovered). Evidence regenerated with the sourced θ live: 5/8 reconcile (AEP, DUK, ED, SO, CEG); non-reconcilers XEL / D / NEE documented as signal (C-431-03). Card brought current with the merged engine + evidence (FIND-431-01 doc-currency). Status stays under_development — booked use waits on M-432 2L ratification (D053: 1L does not self-promote).

2L Inventory Review

Open findings (4)

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.

high FIND-431-GOV · ·

The engine energylib.L3.cost_of_service is BUILT, tested (10/10, incl. 6 live- store API tests), and honest — but the registry entry M-431 is still status: planned with empty bindings and the card is still the "PLANNED, NOT BUILT" stub. Same internal inconsistency as M-423. The Tier-3 bar is card + intent; the intent half is honest, the card half is unbuilt.

Recommendation: Reconcile the registry + author the real M-431 card (Tier-3 standard: methodology, sourced-vs-recovered-vs-scaffold provenance, the 6/8 reconciliation, the XEL/NEE misses); set lifecycle.ratification_ref: RAT-431-v1.0.0. (C-431-01.)

HIGH INV-029 · P5 · validation-gap

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.

medium FIND-431-MISSES · ·

Reconciliation over the live store (8 utilities): 6/8 within ±10% (DUK −3.7%, CEG −3.6%, D −7.5%, SO −7.8%, AEP −8.0%, ED −9.8%); 2 misses. The intake brief named the misses as NEE/CEG — the LIVE DATA shows the actual pair is XEL (+17.2%) and NEE (−15.6%); CEG reconciles. NEE's modelled requirement falls BELOW disclosed (merchant/IPP earnings above the cost-of-service return — the documented < case); XEL's is ABOVE (regulatory lag / accounting plant > authorized rate base — the documented > case). Both are correct, informative signal.

Recommendation: The card must state the correct pair (XEL/NEE) with the return_test interpretation, and the two misses must stay documented as signal — never tune the tolerance to hide them or drop the non-reconciling peers (Conditions C-431-02/03).

low FIND-431-PROXY · ·

Scaffold/recovered substitutions present (all already flagged in engine provenance, verified live): allowed_roe RECOVERED at the ~9.7% sector prior (the M-432 gap, allowed_roe_sourced False across the peer set); equity_ratio / cost_of_debt scaffold; CWIP default 0; Dominion (D) rate base = invested-capital proxy (rate_base_sourced False).

Recommendation: Keep every caveat disclosed in the card / registry description / provenance; M-432 (allowed-ROE / rate-case) remains the precondition for booked use + tier promotion (Condition C-431-02).


Validation Coverage

Per-tier expectations

Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:

ferc state_puc internal
component tier-2 expectation status
Registry entry required present
Model card (§10.5 doc pack) required present
Validation evidence required present
Change log required present
Independent effective challenge (2L) required n/a

Ratification

Conditionally-approved scaffold — RAT-431-v1.0.0

2L issued RAT-431-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-431-01 RECONCILE THE GOVERNANCE ARTIFACTS TO THE BUILT STATE. The engine energylib.L3.cost_of_service is built, tested, and honest — but the insightalm registry entry M-431 is still status: planned with empty component lists and the card is still the "PLANNED, NOT BUILT" stub. 1L must: (a) flip the registry status and declare the engine binding (register the engine id; declare the sourced inputs / explicitly flag the recovered+scaffold ones as the provenance already does); (b) author the real M-431 card to the Tier-3 standard (methodology, the sourced-vs-scaffold/recovered split, the 6/8 reconciliation, the XEL/NEE misses and their interpretation); (c) set lifecycle.ratification_ref: RAT-431-v1.0.0.
C-431-02 INTELLIGENCE-USE ONLY + KEEP THE RECOVERED/PROXY CAVEATS DISCLOSED. M-431 is approved ONLY as cross-firm cost-of-service intelligence (reconciliation + comparison). It is NOT a booked rate-case revenue requirement, an authorized rate base, or an awarded allowed-ROE. The recovered allowed_roe (the M-432 gap), the accounting equity_ratio / scaffold cost_of_debt, the CWIP=0 default, and the Dominion invested-capital rate-base proxy MUST stay flagged in the card, registry description, and engine provenance. The M-432 allowed-ROE / rate-case engine remains the precondition for any booked use and tier promotion (C-430-02 carried). Removing or burying these caveats voids this approval.
C-431-03 THE TWO MISSES MUST STAY DOCUMENTED AS SIGNAL, NOT SUPPRESSED. XEL (+17.2%) and NEE (−15.6%) do not reconcile within ±10%, and that is CORRECT and informative: NEE carries unregulated merchant/IPP earnings above the cost-of-service return (the < case), XEL shows regulatory lag / accounting plant above the authorized rate base (the > case). The card must keep these as disclosed signal (the return_test interpretation), never tune the tolerance to hide them or drop the non-reconciling peers.