Tier 1 · Capital Solvency Assessment

Banking RWA / CET1 Capital

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

Intended Use

Banking RWA / CET1 Capital Compute standardized risk-weighted assets and the CET1 capital ratio for a bank under the Basel III framework — bottom-up by exposure class from FR Y-9C Schedule HC-R where available, else reconciled to the disclosed CET1 capital + CET1 ratio + RWA total.

BUILT (1L, Decision 060 Phase 2c; bottom-up tier on REAL regulator data, D062) — under_development pending 2L re-review. The RWA/CET1 engine (banklib.L3.rwa_cet1, bankview repo) has TWO tiers. BOTTOM-UP tier (the Tier-1 promotion basis): a REAL FR Y-9C BHCF flat file is now ingested through the committed pipeline (investorMgmt pipeline/fry9c_hcr.py BHCF lane) — the GSIB cohort's actual rows from a real Federal Reserve Bank of Chicago archive file (bhcf2012.csv, 2020-12-31; public, free, no CAPTCHA), committed trimmed as a CI fixture. Per-class RWA = Σ(HC-R Part-II risk-weight-bucket exposure × Basel weight) — REGULATOR-REPORTED, no apportionment (this also fixed a real defect: the old map summed HC-R col-A carrying amounts, i.e. gross exposure ≈ on-BS assets, ~1.5-2× the RWA total, mis-labelled as RWA; the synthetic-fixture tests masked it). The engine consumes these with D≡1 (no calibration fudge); the bottom-up on-BS Σ is validated against each firm's disclosed RWA total, the residual (off-BS + market + operational RWA) reported as rwa_recon_error_pct, not hidden; classes_sourced=True. Real 2020Q4 coverage: all 7 GSIBs land 8 on-BS RWA classes; on-BS Σ reconciles as a PARTIAL of disclosed RWA — commercial banks USB 75% / WFC 69% / BAC 63% / JPM 58% / C 56%, broker-dealers GS 37% / MS 31% (lower because their RWA is market/op-risk dominated — exactly as Basel structure predicts). CET1 capital is regulator-reported where the BHCAP859 line is populated (USB), else derived via the ratio×RWA identity (flagged). DISCLOSED-ANCHOR fallback: no HC-R cells → modelled Σ_class exposure·risk_weight·D over a representative prior, D solved so modelled RWA == disclosed total; classes_sourced=False. CET1-ratio identity (CET1 capital / RWA) checked vs the disclosed ratio in both. Replaces the M-420 scaffold's flat risk-density approximation. Validation evidence: validation_evidence/M-422/RECONCILIATION.md. Status stays under_development until 2L ratifies (Decision 052/053).


Components

Inputs, processing, outputs

engines
banklib.L3.rwa_cet1
dimensions
D3

Methodology & Mechanics

Methodology

Modelled standardized RWA over a representative exposure-class decomposition of the bank's sourced total assets:

RWA_model = Σ_class  exposure_class · risk_weight_class · D
  • exposure_class — total assets × class share (modelled allocation prior; the class mix is not 10-K-disclosed — flagged classes_sourced=False).
  • risk_weight_class — the Basel III standardized risk weight (0% sovereign … 50% mortgage … 100% corporate … 150% high-risk).
  • D — a single per-firm calibrated density scalar, solved so modelled standardized RWA equals the disclosed RWA total. D absorbs off-balance-sheet exposures + market/operational-risk RWA add-ons + the firm's real class concentration; an implausible D (≫ or ≪ 1) is flagged as a mis-scaled prior.

With RWA reconciled, the CET1-ratio identity is checked directly: implied CET1% = disclosed CET1 capital / RWA, cross-validated against the disclosed CET1 ratio (agreement to ~rounding confirms the anchors are internally coherent).


Model Documentation

What is sourced vs flagged

  • Sourced: total assets (investorMgmt content store via the bankview adapter); the disclosed CET1 capital + CET1 ratio + RWA total anchors (FY2024 10-K / Pillar-3 + SEC XBRL for GS/MS, per-figure citations in banklib/disclosed_anchors.yaml; sourced by investorMgmt#106).
  • Modelled & flagged (classes_sourced=False): the Basel exposure-class decomposition — a representative prior calibrated to the disclosed RWA total via D, NOT a disclosed per-class balance sheet.

Validation Evidence

Validation Evidence

bankview/validation_evidence/M-422/ — per-firm modelled-vs-disclosed reconciliation (RECONCILIATION.md, reconciliation.json), three honesty tiers:

  • Tier 1 — fully reconciled (sourced asset base + disclosed CET1/RWA): JPM (implied CET1 15.70% vs disclosed 15.7%, D=0.62), BAC (11.85% vs 11.9%, D=0.84).
  • Tier 2 — anchor-only (disclosed CET1/RWA, no content-store asset base): GS (15.00% vs 15.0%, derived RWA), MS (15.92% vs 15.9%, RWA from SEC XBRL conf 1.0). Bottom-up RWA not consumable (no asset base) — capital identity reconciled.
  • Tier 3 — ratio-only (CET1 ratio disclosed; amount + RWA absent): WFC (11.1%), USB (10.6%), C (13.6%) — flagged calibrated=False, not reconciled (honest partial).

Unit tests: tests/test_banklib_rwa_cet1.py.


Limitations

Limitations

  • Bottom-up RWA is BUILT and runs on REAL regulator data (was gated; cleared 2026-06-29, C-422-02). The per-exposure-class RWA breakdown is sourced from the FR Y-9C Schedule HC-R Part II (public, free), ingested through the committed pipeline (investorMgmt pipeline/fry9c_hcr.py BHCF lane) from a real Federal Reserve Bank of Chicago archive file (bhcf2012.csv, 2020-12-31). RWA per class = Σ(HC-R risk-weight-bucket exposure × Basel weight) — regulator-reported, no apportionment. The disclosed-anchor modelled-prior tier remains a fallback for firms/periods without HC-R cells (its class shares are a prior; absolute class RWA only as good as that prior — flagged classes_sourced=False).
  • The bottom-up on-BS Σ is a PARTIAL of the disclosed total by construction — the residual (off-balance-sheet + market-risk + operational-risk RWA, which the on-BS HC-R rows do not carry) is reported as rwa_recon_error_pct, not hidden. Real 2020Q4: commercial banks reconcile ~56–75% on-BS (USB 75 / WFC 69 / BAC 63 / JPM 58 / C 56), broker-dealers ~31–37% (GS 37 / MS 31 — market/op-risk dominated). This is the honest reconciliation depth, not an aggregate-level fudge.
  • CET1 capital amount is regulator-reported where the BHCAP859 HC-R line is populated (USB in the 2020Q4 file); elsewhere the CET1 identity uses the ratio×RWA derivation (flagged) — both ratio and RWA total are the regulator's own figures. Honestly partial, not fabricated.

Change Log

Change Log

  • 2026-06-28 — Created as a planned backlog stub (Decision 060 / insightalm #3389).
  • 2026-06-28 — Registry-reality reconcile: change_log documentation flag corrected to present (status stayed planned).
  • 2026-06-28 — 1L build: real Basel III standardized-RWA + CET1-ratio reconciliation engine (banklib.L3.rwa_cet1), reconciled to disclosed CET1 capital + CET1 ratio + RWA total for JPM/BAC/GS/MS (data from investorMgmt#106); validation evidence + engine_registry binding added. Status → under_development. Bottom-up per-class RWA engine left gated (FR Y-9C HC-R). Ready for 2L re-review.
  • 2026-06-29 — Bottom-up tier on REAL data (clears C-422-02, RAT-422-v1.0.0). A real FR Y-9C BHCF file (Chicago Fed archive bhcf2012.csv, 2020-12-31; public, free, no CAPTCHA) is now ingested through the committed pipeline; per-class RWA = Σ(HC-R risk-weight-bucket exposure × Basel weight), regulator-reported, validated against each GSIB's disclosed RWA total (all 7 GSIBs, 8 on-BS classes). Also fixed a defect: the old map summed HC-R col-A carrying amounts (gross exposure, ~1.5–2× RWA), mis-labelled as RWA — masked by synthetic-fixture tests. (C-422-01 "engine not on bankview main" was a stale-clone false finding — the engine + bottom-up tier #5 were already on origin/main.) Status stays under_development — back to 2L for promotion.

2L Inventory Review

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.

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.


Validation Coverage

Per-tier expectations

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

sr_26_2 internal
component tier-1 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-422-v1.0.0

2L issued RAT-422-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-422-01 MERGE-STATE / GOVERNANCE-VS-BUILT MISMATCH. The bottom-up HC-R engine (the basis for the insightalm registry's bottom-up promotion narrative, PR #3506) is NOT on bankview origin/main — it is on the unmerged branch d062/m422-bottomup-rwa (rwa_cet1.py on main is blob ec20899, the disclosed-anchor-only version). The card meanwhile says bottom-up is "GATED (not built)". Land the bottom-up engine on bankview main AND reconcile the card + the registry description to ONE truthful built state. Until then the governance record claims a tier the merged engine does not have.
C-422-02 BOTTOM-UP IS DATA-EMPTY. The "regulator-reported, confidence 1.0" HC-R cells are an illustrative hardcoded JPM grid; no BHCF file has been ingested (the FFIEC NIC channel is CAPTCHA-walled; the one-time operator fetch has not happened). Land at least one REAL bank's HC-R Part-II cells via investorMgmt fry9c_hcr.py and re-run the bottom-up reconciliation on genuine regulator-reported data (the 15% residual is then a real, not illustrative, result). Only then is the bottom-up tier's confidence-1.0 claim true.
C-422-03 TIER-1 VALIDATION DEPTH. The merged disclosed-anchor tier reconciles RWA to the disclosed total BY CONSTRUCTION (D solves the level -> 0% error); the genuine signal is only the CET1 identity + the density-D spread. For a Tier-1 BOOKED, regulator-facing capital ratio, supply a genuine out-of-sample or cross-source check (e.g. the bottom-up HC-R sum vs the disclosed total on REAL cells per C-422-02 is exactly such a check once the data lands; or a held-out anchor; or a Pillar-3 cross-read). Alternatively, if M-422 is to be USED only as decision- support disclosure-intelligence (not a booked number), re-derive its tier per §6.3 and the bar drops accordingly — but as currently registered (Tier-1, capital_solvency_assessment) the booked-capital bar applies.