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).
Inputs, processing, outputs
- engines
-
banklib.L3.rwa_cet1
- dimensions
- D3
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).
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
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
- 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.pyBHCF 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 — flaggedclasses_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
- 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.
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.
Per-tier expectations
Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:
| 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 |
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. |