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.
Inputs, processing, outputs
- data sources
- DS-073
- engines
-
energylib.L3.cost_of_service
- dimensions
- D3
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_enginefactor·exposure precedent).
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_netseries → 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.
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 byenergylib.L3.allowed_roe_ratecase, flaggedsourced: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_roerecovered ~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 disclosedutility_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).
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
- 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_refset to RAT-431-v1.0.0 via the reconciler promote channel. Status held atunder_development(not promoted toactive) 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 staysunder_development— booked use waits on M-432 2L ratification (D053: 1L does not self-promote).
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.
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.)
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.
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).
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).
Per-tier expectations
Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:
| 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 |
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. |