The most detailed open catalogue of U.S. bank regulatory data — every major information collection and its subschedules, the MDRM code system, the FFIEC NIC institutional-structure data, the identifier crosswalk, cross-form mappings, and reconciliation formulas.
Version 10.0 | Updated: 2026-06-11 | FR Y-9C + Call Report line items detailed against official field specifications · UBPR derivation formulas parsed and empirically validated · official edit history across 30 taxonomy cycles · 100% MDRM/UBPR token validity (11,126/11,126), now CI-enforced · empirically validated against 208 million + 1.9 billion rows of real FR Y-9C and Call Report filings
This repository is a catalogue / mapping reference — it documents what the datasets are, how they are structured, and how they relate to each other. For a data-access package (download and query the actual filings), see the companion project FreeNIC.
New in v10.0 — Call Report line items, UBPR derivations, edit history, and CI-enforced validity. v10.0 ships seven Call Report per-schedule line-item CSVs (RC balance sheet, RI income, RC-B securities, RC-C loans, RC-E deposits, RC-N past due, RC-R capital) so the dictionary now details line items for both report families — each row triple-attested against official 2025-12 grids, the CDR XBRL taxonomy presentation linkbase, and the bulk warehouse. It adds the UBPR: the official taxonomy v181 + User's Guide were acquired, 4,207 derivation formulas parsed (zero silent drops), and 31 headline ratios empirically validated at 99.77–100% against real published UBPR values (ROA, ROE, NIM, efficiency, charge-off, past-due, capital, liquidity). It ships the official edit history — 15,622 distinct edit labels across 30 taxonomy cycles (2001–2026), showing the rulebook roughly quintupled. A new conditional/compound testing engine made 448 previously-documented registry rows testable and drove every row to an explained verdict. Token validity is now CI-enforced (
scripts/ci_audit.pyfails the build on any invalid token). The Relationship Registry grew to 7,539 relationships. See docs/EMPIRICAL_VALIDATION.md, docs/UBPR_GUIDE.md, and docs/EDIT_HISTORY.md.
U.S. bank regulators run dozens of overlapping data collections — FR Y-9C, the Call Report (FFIEC 031/041/051), FFIEC 101/102/002/009, the FR Y-7/Y-10/Y-11/Y-12/Y-14/Y-15 family, FR 2052a, Pillar 3, plus FDIC (SDI/SOD/failures), NCUA 5300, OCC historical returns, and the NIC/NPW structure files — together using tens of thousands of MDRM variable codes across hundreds of schedules. Analysts spend hours mapping between forms, deciphering code prefixes, tracing corporate hierarchies, reconciling identifiers, and verifying that balance-sheet components actually add up. This repository puts all of that reference material in one place — as CSV tables for programmatic use, JSON for AI agents, and Markdown guides for human readers.
What v6.0 adds over the original FR Y-9C/trading focus: a master collections catalogue of 42 collections with a schedule catalogue of every subschedule; the full FFIEC NIC institutional-structure layer (entities, relationships, transformations, 40+ code lists); an identifier crosswalk (RSSD / FDIC Cert / OCC / NCUA / LEI / ABA / EIN / CIK); the complete Call Report, foreign/structure, and FDIC/NCUA/OCC/UBPR guides; and an MDRM meta-dictionary + namespace catalogue.
git clone https://github.com/andenick/bank-data-dictionary.git
cd bank-data-dictionaryNo installation required — all data is in CSV, JSON, and Markdown files ready to use. Start with docs/NAVIGATION.md for navigation or docs/COLLECTIONS_CATALOG.md for the full data universe.
TOTAL ASSETS (BHCT2170)
|
+----------+-----------+-----------+-----------+----------+
| | | | | |
Cash Securities Loans Trading Other Assets
(0081) (8641*) (B528) (3545) (2160)
| | | |
HC-B HC-C HC-D HC-F
| | |
AFS + HTM Net Loans Assets + Deriv
1773+JJ34+ B529 = Pos FV 3543
JA22 B528-3123 |
HC-L
(FV by Asset Class)
TOTAL LIABILITIES (BHCK2948)
|
+----------+-----------+-----------+-----------+
| | | | |
Deposits Fed Funds Trading Other Borrowings
(2200*) Purchased Liab Liab (3190)
(B993) (3548) (2750)
| |
HC-D HC-G
|
Shorts + Deriv
Neg FV 3547
TOTAL EQUITY (BHCT3210)
|
+--------+--------+--------+--------+
| | | | |
Preferred Common Surplus Retained AOCI
(3283) (3230) (3240) (3247) (B530)
REGULATORY CAPITAL
(HC-R)
+----------+----------+
| |
TIER 1 (8274) TIER 2 (5311)
|
+----+----+
| |
CET1 AT1
(P859) (P865)
Code conventions for the diagram above. Leaf labels are MDRM item codes; on the FR Y-9C they take the prefix
BHCK/BHCT(consolidated) for balance-sheet/income items andBHCA(e.g.BHCA8274,BHCAP859) for HC-R regulatory-capital items. All codes shown are verified against the Federal Reserve MDRM except the two marked*:8641(total securities) and2200(total deposits) are Call Report totals (RCFD8641/RCFD2200) and have no single consolidated FR Y-9C MDRM — on the Y-9C, total securities = AFSBHCK1773+ HTMBHCKJJ34+ equityBHCKJA22, and total deposits =BHDM6631(noninterest) +BHDM6636(interest). Capital: Tier 1 =BHCA8274, Tier 2 =BHCA5311, Total =BHCA3792, CET1 =BHCAP859, AT1 =BHCAP865.
- Need MDRM codes? Start with
csv/MDRM_MASTER_COMPLETE.csv - Analyzing specific schedules? See schedule-specific guides in
docs/ - Understanding form relationships? See
docs/MASTER_REGULATORY_GUIDE.md - Validating data? Check
docs/RECONCILIATION_HIERARCHY.md
- Programmatic access to schedules →
json/schedule_schemas.json - Cross-form concept mapping →
json/cross_form_mapping.json - Validation rules for data quality →
csv/VALIDATION_RULES.csv - Full regulatory taxonomy →
json/data_taxonomy.json
- Reconciliation formulas →
csv/RECONCILIATION_FORMULAS_COMPLETE.csv - Component hierarchies →
csv/SCHEDULE_COMPONENT_HIERARCHY.csv - Form data flow →
csv/FORM_REPORTING_HIERARCHY.csv - Validation test cases →
csv/VALIDATION_TEST_CASES.csv
Every check below carries its empirical verdict against 208M rows of real FR Y-9C filings
(the Call Report side is validated against 1.9B rows — see
docs/EMPIRICAL_VALIDATION.md and
csv/RELATIONSHIP_REGISTRY.csv).
Cross-source check (v9.0): the same balance-sheet concepts were confirmed against the FDIC's independently-collected SDI at 99.5–99.97% over up to 667,551 bank-quarters. Two definitional mappings were corrected as a result — FDIC total equity maps to Call item
3210(excl. minority interest, not the MI-inclusiveG105), and FDIC net loans maps to2122 − 3123(loans net of unearned income minus allowance, not the RC-C item-12 totalB529). Seejson/cross_form_mapping.json.
| # | Check | Formula | Empirical verdict |
|---|---|---|---|
| 1 | Balance Sheet (item 29 = item 12) | BHCK3300 = BHCK2170 | CONFIRMED (100.00%, n=187,845) |
| 1b | Balance Sheet (A = L + E) | BHCK2170 = BHCK2948 + BHCK3210 | QUALITY_TOLERANCE (92.6%; BHCK2948 includes minority interest, so item-29 form is the exact one) |
| 2 | Trading Assets | BHCT3545 (HC-D) = BHCK3545 (HC) | CRITICAL |
| 3 | Trading Liabilities | BHCT3548 (HC-D) = BHCK3548 (HC) | CRITICAL |
| 4 | Loans Net | BHCKB529 = BHCKB528 − BHCK3123 (HFI − allowance) | CONFIRMED (100.00%, n=100,102) |
| 5 | Tier 1 Capital | BHCA8274 = BHCAP859 + BHCAP865 | CRITICAL |
| 6 | Total Capital | BHCA3792 = BHCA8274 + BHCA5311 | CRITICAL |
| 7 | Derivatives +FV | BHCT3543 = Sum(HC-L Positive FV) | CRITICAL |
| 8 | Derivatives -FV | BHCT3547 = Sum(HC-L Negative FV) | CRITICAL |
| 9 | Securities | HC item 2 = BHCK1773 (AFS) + BHCKJJ34 (HTM) + BHCKJA22 (equity) † | HIGH |
| 10 | NII | BHCK4074 = BHCK4107 − BHCK4073 | CONFIRMED (100.00%, n=187,842) |
† The FR Y-9C has no single consolidated total-securities MDRM; the total is the sum of
its AFS + HTM + equity components. 8641 (total securities) is a Call Report code (RCFD8641).
bank-regulatory-data-dictionary/
│
├── csv/ # All CSV data tables
│ ├── MDRM_MASTER_COMPLETE.csv # Curated cross-form concept spine (~100 concepts)
│ ├── MDRM_CROSSWALK_EXPANDED.csv # 1,239 MDRM-verified codes w/ cross-scope mapping
│ ├── CODE_VALIDATION_AUDIT.csv # Every code validated vs MDRM (NEW v6.2)
│ │
│ ├── ALL 22 FR Y-9C Schedule Files (v8.0 — verified vs official March-2026 field spec):
│ │ ├── HI_INCOME_STATEMENT.csv # Schedule HI income statement
│ │ ├── HI_A_EQUITY_CHANGES.csv # Schedule HI-A changes in equity (NEW v8.0)
│ │ ├── HI_B_CHARGEOFFS.csv # Schedule HI-B charge-offs & allowance (NEW v8.0)
│ │ ├── HI_C_ALLOWANCE.csv # Schedule HI-C ALLL disaggregation (NEW v8.0)
│ │ ├── HC_BALANCE_SHEET.csv # Schedule HC master balance sheet
│ │ ├── HC_B_SECURITIES.csv # Schedule HC-B securities
│ │ ├── HC_C_LOANS.csv # Schedule HC-C loans
│ │ ├── HC_D_TRADING_ASSETS.csv # Schedule HC-D trading
│ │ ├── HC_E_DEPOSITS.csv # Schedule HC-E deposit liabilities (NEW v8.0)
│ │ ├── HC_F_OTHER_ASSETS.csv # Schedule HC-F other assets
│ │ ├── HC_G_OTHER_LIABILITIES.csv # Schedule HC-G other liabilities
│ │ ├── HC_H_INTEREST_SENSITIVITY.csv # Schedule HC-H interest sensitivity
│ │ ├── HC_I_INSURANCE.csv # Schedule HC-I insurance activities (NEW v8.0)
│ │ ├── HC_K_QUARTERLY_AVERAGES.csv # Schedule HC-K averages
│ │ ├── HC_L_DERIVATIVES.csv # Schedule HC-L derivatives
│ │ ├── HC_M_MEMORANDA.csv # Schedule HC-M memoranda (NEW v8.0)
│ │ ├── HC_N_PAST_DUE.csv # Schedule HC-N past due
│ │ ├── HC_P_MORTGAGE_BANKING.csv # Schedule HC-P mortgage banking (NEW v8.0)
│ │ ├── HC_Q_FAIR_VALUE.csv # Schedule HC-Q fair value
│ │ ├── HC_R_CAPITAL.csv # Schedule HC-R capital
│ │ ├── HC_S_SECURITIZATION.csv # Schedule HC-S securitization
│ │ └── HC_V_VIES.csv # Schedule HC-V variable interest entities (NEW v8.0)
│ │
│ ├── Call Report per-schedule line items (NEW v10.0 — triple-attested):
│ │ ├── CALL_RC_BALANCE_SHEET.csv # Schedule RC balance sheet (48 rows)
│ │ ├── CALL_RI_INCOME.csv # Schedule RI income statement (108 rows)
│ │ ├── CALL_RC_B_SECURITIES.csv # Schedule RC-B securities (52 rows)
│ │ ├── CALL_RC_C_LOANS.csv # Schedule RC-C loans (79 rows)
│ │ ├── CALL_RC_E_DEPOSITS.csv # Schedule RC-E deposits (55 rows)
│ │ ├── CALL_RC_N_PAST_DUE.csv # Schedule RC-N past due (93 rows)
│ │ └── CALL_RC_R_CAPITAL.csv # Schedule RC-R capital (361 rows)
│ │
│ ├── UBPR & edit history (NEW v10.0):
│ │ ├── UBPR_CONCEPTS.csv # 4,099 UBPR concepts (2,186 w/ derivations; 31 validated)
│ │ └── EDIT_HISTORY.csv # 15,622 official edit labels × 30 taxonomy cycles (2001–2026)
│ │
│ ├── Empirical Validation (v8.0; Call layer v9.0; UBPR + conditional engine v10.0):
│ │ └── RELATIONSHIP_REGISTRY.csv # 7,539 relationships (y9c+call+cross-source+ubpr); tested vs 208M Y-9C + 1.9B Call rows
│ │
│ ├── Advanced Forms (~5,000 items):
│ │ ├── FFIEC_101_ADVANCED_CAPITAL.csv # Advanced approaches capital
│ │ ├── FFIEC_102_MARKET_RISK.csv # Market risk VaR/sVaR
│ │ ├── FR_Y15_SYSTEMIC_RISK.csv # G-SIB systemic risk
│ │ ├── FR_Y9LP_PARENT_ONLY.csv # Parent company only
│ │ ├── FFIEC_009_COUNTRY_EXPOSURE.csv # Country exposure
│ │ └── FR_Y11_FOREIGN_SUBSIDIARY.csv # Foreign subsidiary
│ │
│ ├── New Files (v4.0-5.0):
│ │ ├── FR_Y14A_SCHEDULES.csv # Y-14A stress testing
│ │ ├── FR_Y14Q_SCHEDULES.csv # Y-14Q quarterly
│ │ ├── FR_2052a_PRODUCT_HIERARCHY.csv # Liquidity monitoring
│ │ ├── PILLAR3_GSIB_DISCLOSURE.csv # Pillar 3 disclosure
│ │ ├── RECONCILIATION_FORMULAS_COMPLETE.csv # 60+ reconciliations (NEW v5.0)
│ │ ├── VALIDATION_RULES.csv # 50 validation rules (NEW v5.0)
│ │ ├── SCHEDULE_COMPONENT_HIERARCHY.csv # Component hierarchies (NEW v5.0)
│ │ └── FORM_REPORTING_HIERARCHY.csv # Form data flow (NEW v5.0)
│ │
│ ├── Catalogue & Structure (NEW v6.0):
│ │ ├── COLLECTIONS_CATALOG.csv # All 42 collections
│ │ ├── SCHEDULES_CATALOG.csv # Every subschedule (265 rows)
│ │ ├── NIC_ATTRIBUTES_SCHEMA.csv # NIC entity attributes (74 fields)
│ │ ├── NIC_RELATIONSHIPS_SCHEMA.csv # NIC relationships (22 fields)
│ │ ├── NIC_TRANSFORMATIONS_SCHEMA.csv # NIC mergers/failures (6 fields)
│ │ ├── NIC_CODE_LISTS.csv # 40 NIC code lists (274 codes)
│ │ ├── IDENTIFIERS.csv # Identifier systems crosswalk
│ │ └── MDRM_NAMESPACES.csv # Full mnemonic namespace catalogue
│ │
│ └── Reference Files:
│ ├── MDRM_PREFIX_DEFINITIONS.csv # BHCK (consolidated), RCFD, etc.
│ ├── FORM_HIERARCHY.csv # Form relationships
│ ├── GSIB_ENTITY_IDENTIFIERS.csv # Bank identifiers
│ └── HISTORICAL_CODE_TRANSITIONS.csv # Legacy codes
│
├── docs/ # Documentation (53 guides incl. all 22 Y-9C schedule guides)
│ ├── index.md # Site landing page (GitHub Pages home)
│ ├── NAVIGATION.md # Master navigation
│ ├── COLLECTIONS_CATALOG.md # The full data universe — 42 collections (NEW v6.0)
│ ├── NIC_STRUCTURE_GUIDE.md # FFIEC NIC entities/relationships/transformations (NEW v6.0)
│ ├── IDENTIFIERS.md # RSSD/FDIC/OCC/NCUA/LEI/ABA/EIN/CIK crosswalk (NEW v6.0)
│ ├── CALL_REPORT_GUIDE.md # Complete FFIEC 031/041/051 (NEW v6.0)
│ ├── FOREIGN_AND_STRUCTURE_GUIDE.md # FFIEC 002/009, FR Y-7/10/11/12/6/8 (NEW v6.0)
│ ├── FDIC_NCUA_OCC_UBPR_GUIDE.md # Non-Fed collections + UBPR (NEW v6.0)
│ ├── MDRM_GUIDE.md # MDRM meta-dictionary + namespaces (NEW v6.0)
│ ├── COVERAGE_PROVENANCE.md # Temporal coverage & vintages (NEW v6.0)
│ ├── RECONCILIATION_HIERARCHY.md # What adds up to what
│ ├── MASTER_REGULATORY_GUIDE.md # Comprehensive reference
│ ├── RECONCILIATION_MATRIX.md # Cross-schedule tie-outs
│ │
│ ├── Schedule Guides (all 22 Y-9C + 5 Call Report):
│ │ ├── HC_*_GUIDE.md / HI_*_GUIDE.md # One guide per Y-9C schedule (HC, HC-B…HC-V, HI, HI-A…HI-C)
│ │ ├── CALL_REPORT_RC_GUIDE.md # (NEW v5.0)
│ │ ├── CALL_REPORT_RC_C_LOANS_GUIDE.md # (NEW v5.0)
│ │ ├── CALL_REPORT_RC_E_DEPOSITS_GUIDE.md # (NEW v5.0)
│ │ ├── CALL_REPORT_RC_N_PAST_DUE_GUIDE.md # (NEW v5.0)
│ │ └── CALL_REPORT_RI_INCOME_GUIDE.md # (NEW v5.0)
│ │
│ └── Advanced Form Guides:
│ ├── FR_Y14_CAPITAL_ASSESSMENT_GUIDE.md
│ ├── FR_2052a_LIQUIDITY_GUIDE.md
│ └── PILLAR3_DISCLOSURE_GUIDE.md
│
├── json/ # Machine-readable data
│ ├── collections.json # All 42 collections (NEW v6.0)
│ ├── identifiers.json # Identifier systems (NEW v6.0)
│ ├── schedule_schemas.json # Schedule structures
│ ├── cross_form_mapping.json # Concept mapping
│ ├── data_taxonomy.json # Full regulatory taxonomy
│ └── schedule_correspondence.json # Cross-schedule linkages
│
├── scripts/ # Validation scripts (NEW v5.0)
│ ├── validate_reconciliation.py # Registry-driven validator; --scope {y9c,call,all,ubpr} (v9.0/v10.0)
│ └── ci_audit.py # CI token-validity guard — fails the build on any invalid token (NEW v10.0)
│
├── README.md # This file
└── LICENSE # MIT License
BHCT3545
│ │ │──│
│ │ │
│ │ └── Item number (3545 = Trading Assets)
│ │
│ └────── Form/Scope code (T = total consolidated)
│
└───────── Prefix (BHC = Bank Holding Company)
Common Prefixes:
| Prefix | Form | Scope |
|---|---|---|
| BHCK | FR Y-9C | Consolidated (domestic + foreign) — the primary Y-9C series |
| BHDM | FR Y-9C | Domestic offices only |
| BHFN | FR Y-9C | Foreign offices only |
| BHCP | FR Y-9LP | Parent company only (large) |
| BHSP | FR Y-9SP | Parent company only (small) |
| BHCA | FR Y-9C | Consolidated regulatory capital (HC-R) |
| RCFD | Call Report | Consolidated (domestic + foreign) |
| RCON | Call Report | Domestic offices only |
| RCFN | Call Report | Foreign offices only |
| RIAD | Call Report / FR Y-9C | Income statement (year-to-date) |
Correction (v6.0): earlier releases mislabeled
BHCKas "domestic only."BHCKis the consolidated series; domestic-only isBHDMand foreign-only isBHFN(confirmed against the Federal Reserve MDRM). Seedocs/MDRM_GUIDE.mdandcsv/MDRM_NAMESPACES.csvfor the full namespace catalogue.
import json
# Load schedule schemas
with open('json/schedule_schemas.json') as f:
schemas = json.load(f)
# Access HC balance sheet structure
for item in schemas['HC']['line_items']:
print(f"{item['item']}: {item['mdrm']} - {item['name']}")
if item.get('reconciliation'):
print(f" Reconciliation: {item['reconciliation']}")# Load cross-form mapping
with open('json/cross_form_mapping.json') as f:
mapping = json.load(f)
# Find same concept across forms
total_assets = mapping['concepts']['total_assets']
print(f"Y-9C: {total_assets['forms']['FR_Y9C']['mdrm']}") # BHCT2170
print(f"Call: {total_assets['forms']['Call_Report_031']['mdrm']}") # RCFD2170import pandas as pd
# Load validation rules
rules = pd.read_csv('csv/VALIDATION_RULES.csv', comment='#')
# Get critical balance sheet rules
critical_rules = rules[rules['severity'] == 'CRITICAL']
for _, rule in critical_rules.iterrows():
print(f"{rule['rule_id']}: {rule['description']}")# Core balance sheet items
balance_sheet = {
'total_assets': 'BHCT2170',
'total_loans': 'BHCTB528',
'securities_afs': 'BHCT1773', # + HTM 'BHCKJJ34' + equity 'BHCKJA22' (no single Y-9C total; Call: RCFD8641)
'trading_assets': 'BHCT3545',
'deposits_noninterest': 'BHDM6631', # + interest 'BHDM6636' (no single Y-9C total; Call: RCFD2200)
'total_equity': 'BHCT3210',
}
# Income statement items
income = {
'interest_income': 'BHCK4107',
'interest_expense': 'BHCK4073',
'net_interest_income': 'BHCK4074', # = 4107 - 4073 (CONFIRMED, 100%, n=187,842)
'provision': 'BHCKJJ33', # HI item 4, CECL "provisions for credit losses" (current)
'net_income': 'BHCK4340', # HI item 14 (BHCT4340 = BHCK4340, CONFIRMED)
}# Regulatory capital
capital = {
'cet1': 'BHCAP859',
'tier1': 'BHCA8274',
'total_capital': 'BHCA3792',
'rwa': 'BHCAA223',
}
# Ratios
cet1_ratio = capital['cet1'] / capital['rwa'] # Min 4.5%
tier1_ratio = capital['tier1'] / capital['rwa'] # Min 6.0%
total_ratio = capital['total_capital'] / capital['rwa'] # Min 8.0%asset_quality = {
'npl_total': 'BHCK1403', # Nonaccrual
'past_due_30_89': 'BHCK5524', # 30-89 days
'past_due_90_plus': 'BHCK5525', # 90+ days
'allowance': 'BHCT3123', # ALLL
}
# NPL Ratio = (Nonaccrual + 90+ DPD) / Total Loans| Source | URL | Content |
|---|---|---|
| FFIEC CDR | https://cdr.ffiec.gov/ | Call Reports, FR Y-9C, FFIEC 101/102/002/009 |
| MDRM Dictionary | https://www.federalreserve.gov/apps/mdrm/ | Official variable definitions (~87,000+ codes) |
| Fed Reporting Forms | https://www.federalreserve.gov/apps/reportingforms/ | FR Y-series forms + instructions |
| Fed NIC / NPW | https://www.ffiec.gov/NPW/ | Institutional structure, relationships, transformations |
| FDIC BankFind | https://banks.data.fdic.gov/ | SDI financials, SOD, failures, locations |
| NCUA | https://ncua.gov/analysis/credit-union-corporate-call-report-data | 5300 credit-union Call Reports (FS220) |
| FRASER (OCC) | https://fraser.stlouisfed.org/ | Historical OCC national-bank reports (1863–1941) |
For an annotated directory of every source — what each provides, its coverage, what it is best used for, and citation requirements — see docs/DATA_SOURCES.md.
This repository is the catalogue / mapping product. Its sibling, FreeNIC, is the data-access package — it lets you download and query ~2.3 billion rows of the actual filings (1863–2026) via Python/SQL. Use this repo to understand what the data is and how it fits together; use FreeNIC to get and query it.
| Entity | RSSD ID | 2024Q4 Assets |
|---|---|---|
| JPMorgan Chase | 1039502 | $3.9T |
| Bank of America | 1073757 | $3.3T |
| Citigroup | 1951350 | $2.4T |
| Wells Fargo | 1120754 | $1.9T |
| Goldman Sachs | 2380443 | $1.7T |
| Morgan Stanley | 2162966 | $1.2T |
This repository is verified on two independent axes: token validity (does every code exist in the Fed MDRM?) and empirical relationship validity (do the identities actually hold in real filings?).
Token validity: 100% — and CI-enforced (v10.0). Every one of the 11,126 distinct
MDRM/UBPR-code-shaped tokens in the shipped files validates against the full Federal Reserve MDRM
dictionary and the official UBPR taxonomy concept set; results are in
csv/CODE_VALIDATION_AUDIT.csv. UBPR-namespace tokens validate
against the official UBPR taxonomy concept set rather than the MDRM (the MDRM's UBPR section is
incomplete, e.g. UBPR2210). Validity is no longer just habitual: scripts/ci_audit.py runs in CI
on every push and fails the build on any invalid token. (The three form-name string literals
"031"/"041"/"051" flagged by the official form-number edit are whitelisted as documented false
positives.)
Empirical relationship validity (FR Y-9C v8.0; Call Report v9.0; UBPR + conditional engine v10.0).
The official FR Y-9C edit checklist, the official FFIEC Call Report edit checks and calculation
linkbases (distributed in the CDR XBRL taxonomy, cdr.ffiec.gov; forms 031/041/051), the official
FFIEC UBPR taxonomy v181 + User's Guide derivations, and the dictionary's curated identities were
structured into a Relationship Registry of 7,539 relationships
(y9c 2,330 · call 5,162 · cross-source 16 · ubpr 31). Every machine-testable one was tested against
real filings — 208 million rows of FR Y-9C bulk data (1986–2025), 1.917 billion rows of Call
Report bulk data (2001 Q1–2026 Q1), and real published UBPR values — with a max($1k, 0.1%)
tolerance. v10.0 added a conditional/compound testing engine (IF/THEN→CASE, AND-splitting,
constant coefficients) that made 448 previously-documented rows testable and drove every row to an
explained verdict:
| Status | Count |
|---|---|
| CONFIRMED | 2,841 |
| CONFIRMED_CURRENT | 144 |
| LOW_N_PASS | 4 |
| VINTAGE_CONFIRMED | 7 |
| QUALITY_TOLERANCE (documented rate) | 43 |
| DATA_GAP (component splits too sparse) | 122 |
| OFFICIAL_EDIT_UNMET (kept as research finding) | 8 |
| CONDITION_NEVER_MET (confidential supervisory items absent from bulk) | 48 |
| NOT_IN_BULK (text/confidential/discontinued code) | 134 |
| CONDITIONAL_DOC (sub-population / non-arithmetic) | 224 |
| GRAMMAR_DOC (null-logic / ratio-division families, documented) | 2,158 |
| not_testable (documented non-arithmetic classes) | 1,806 |
| Total | 7,539 |
Zero rows are pending or unexplained. A v9.0 cross-source concordance additionally confirmed
16 core concepts between the Call Reports and the FDIC SDI at 99.5–99.97% (up to 667,551
bank-quarters each), correcting two definitional mappings — FDIC equity ↔ Call 3210 (not the
MI-inclusive G105) and FDIC net loans ↔ 2122 − 3123 (not RC-C item-12 B529). Full
methodology, showcase identities with pass rates, the seven OFFICIAL_EDIT_UNMET findings, and honest
limitations are in docs/EMPIRICAL_VALIDATION.md; the
per-relationship verdicts are in
csv/RELATIONSHIP_REGISTRY.csv.
v8.0: all 22 schedules, official-spec verified, empirically validated. v8.0 took the dictionary from token-validity to full conceptual and empirical verification. Every FR Y-9C schedule was rebuilt and checked against the official March-2026 field specifications (Reporting Central Appendix A); 8 schedules were newly added (HC-E, HC-I, HC-M, HC-P, HC-V, HI-A, HI-B, HI-C) so the dictionary now details all 22 FR Y-9C schedules. A conceptual sweep fixed hundreds of wrong-concept and wrong-vintage codes. Token validity now stands at 4,564 / 4,564 (100%), and every machine-testable relationship is tested against real filings (see the verdict table above and docs/EMPIRICAL_VALIDATION.md).
v7.0: 100% code validity. Every one of the 2,426 distinct MDRM-code tokens in the v7.0 shipped
files now exists in the Federal Reserve MDRM. The three structurally fabricated legacy schedule
CSVs (HC-H, HC-K, HC-Q) were rebuilt from the official FR Y-9C form rather than patched —
every code in them is verified both against MDRM and against actual reported FR Y-9C (BHCF)
bulk data, 1986–2021. The remaining concepts with no MDRM code (caption totals like Y-9C total
deposits, computed lines like NII-after-provision, retired Basel lines) are stated honestly as
code-less concepts instead of carrying invented codes. Every adjudication — FIX / REMOVED /
DISCONTINUED / FALSE_POSITIVE, with reasoning — is published in
csv/CODE_REMEDIATION_LOG.csv (427 entries).
Correction (v7.0): v6.3 described Schedule HC-H as "removed ~2001." That was wrong — HC-H
(Interest Sensitivity) is a current FR Y-9C schedule of five single-column items
(BHCK3197/3296/3298/3408/3409), collected continuously since 1986. What never existed was the
14-row maturity-bucket grid earlier editions printed for it; v7.0 replaces it with the real
schedule.
Math-verified relationships. Every asserted reconciliation identity was checked for code
validity and definitional correctness against the FR Y-9C form. Corrections include the
capital identities (BHCA8274 = BHCAP859 + BHCAP865; AT1 is BHCAP865, not the previously-used
BHCAP856), and the balance-sheet identity (BHCK2170 = BHCK2948 + BHCK3210 = BHCK3300 —
BHCK2948 already includes minority interest, so adding BHCK3000 separately double-counts it).
The v6.0+ layer — Collections/Schedules catalogue, NIC structure, identifier crosswalk, MDRM
namespace catalogue, and the 1,239-code expanded crosswalk — is
MDRM-verified by construction. For guaranteed-valid codes, prefer MDRM_CROSSWALK_EXPANDED.csv
and the schedule files; consult CODE_REMEDIATION_LOG.csv for the full disposition history.
This repository is maintained as a reference resource. Issues and suggestions are welcome.
@software{bank_data_dictionary2026,
title = {Bank Regulatory Data Dictionary},
author = {Anderson, Nicholas},
year = {2026},
url = {https://github.com/andenick/bank-data-dictionary}
}MIT License — See LICENSE file for details.
