================================================================================ BANK FINANCIAL PERFORMANCE TOOL Ratio Methodology and Data Sources ================================================================================ Last updated: 2026-06-18 Data source: FFIEC Call Report (quarterly filings, 2001 Q1 – 2026 Q1) Database: bank_financials (PostgreSQL); view: bank_ratios All dollar amounts in the underlying schedule tables are stored in $thousands. Ratios are expressed as percentages (e.g., 12.50 = 12.50%) unless noted. -------------------------------------------------------------------------------- SECTION 1 — FOUNDATIONAL CONVENTIONS -------------------------------------------------------------------------------- 1.1 RCFD vs. RCON Prefixes FFIEC Call Report data uses two prefix conventions: rcfd = consolidated total (domestic + foreign offices) — used by large banks and bank holding companies filing FFIEC Form 031 rcon = domestic offices only — used by community banks filing FFIEC Form 041 or FFIEC Form 051 All key balance sheet and income items use: COALESCE(NULLIF(rcfd_code,'')::NUMERIC, NULLIF(rcon_code,'')::NUMERIC) This ensures coverage of both filer types with a single formula. 1.2 Annualization of Income Statement Items Schedule RI (income statement) items are year-to-date (YTD) cumulative totals. They are annualized using: ann_factor = 12.0 / EXTRACT(MONTH FROM report_date) Q1 (March 31): × 4 Q2 (June 30): × 2 Q3 (September 30): × 4/3 Q4 (December 31): × 1 This matches UBPR/FFIEC annualization practice. 1.3 Average Balances — Schedule RCK Schedule RCK provides quarterly average balances. These are used in preference to period-end values wherever available. If RCK data is absent for a bank-quarter, the formula falls back to the period-end balance from Schedule RC. 1.4 Capital Ratios — Text Format Regulatory capital ratios in Schedule RCRI are stored as text strings in the format "XX.XXXX%" (e.g., "13.7500%"). The % character is stripped before casting to numeric: NULLIF(REPLACE(rcri.rcoa7204, '%', ''), '')::NUMERIC Bank-level ratios (rcoa prefix) are preferred over consolidated BHC ratios (rcfa prefix); rcoa is populated for approximately 97% of reporters. 1.5 Comparison with UBPR This tool uses non-tax-equivalent (non-TE) income figures. The UBPR uses tax-equivalent (TE) income, which grosses up tax-exempt income (e.g., from municipal bonds) to a pre-tax equivalent. This creates two known systematic differences that CANNOT be eliminated without TE income data: - NIM: our NIM is typically 5–15 bp lower than UBPR NIM - Efficiency ratio: our ratio is typically 0.3–2.5% higher than UBPR Banks with large municipal bond portfolios show wider gaps. -------------------------------------------------------------------------------- SECTION 2 — BALANCE SHEET ITEMS (base fields, not ratios) -------------------------------------------------------------------------------- 2.1 Total Assets Source: Schedule RC Formula: COALESCE(rcfd2170, rcon2170) 2.2 Equity Capital Source: Schedule RC Formula: COALESCE(rcfd3210, rcon3210) Includes all components of stockholders' equity. 2.3 Gross Loans & Leases Source: Schedule RC Formula: COALESCE(rcfdb528, rconb528) Total loans and leases, net of unearned income, BEFORE deducting the allowance for credit losses. This is the standard UBPR denominator for credit quality ratios. 2.4 Loans Held for Sale (HFS) Source: Schedule RC Formula: COALESCE(rcfd5369, rcon5369) Loans originated or acquired with intent to sell. Included in net loans (section 3.3) to match the UBPR "Net Loans & Leases" definition. 2.5 Allowance for Credit Losses (ACL / ALLL) Source: Schedule RC Formula: COALESCE(rcfd3123, rcon3123) The reserve balance deducted from gross loans to arrive at net loans. 2.6 Net Loans & Leases Formula: GREATEST(gross_loans + hfs_loans - ACL, 0) Matches the UBPR definition: HFI loans + HFS loans - allowance. 2.7 Total Deposits Source: Schedule RC Formula: COALESCE(rcon2200, 0) + COALESCE(rcfn2200, 0) Large banks (FFIEC 031 filers) report domestic deposits under rcon2200 and foreign-office deposits separately under rcfn2200. Both must be summed. Do NOT use COALESCE(rcfd2200, rcon2200) — rcfd2200 is blank for large banks, which would silently drop all foreign deposits. 2.8 Investment Securities — AFS Source: Schedule RC Formula: COALESCE(rcfd1773, rcon1773) Available-for-sale securities at fair value. 2.9 Investment Securities — HTM Source: Schedule RC Formula: COALESCE(rcfdjj34, rconjj34, rcfd1754, rcon1754) Held-to-maturity securities at amortized cost. NOTE: Post-2022, FFIEC 031 large-bank filers report HTM under rcfdjj34/ rconjj34. Prior filers and all FFIEC 041/051 community banks use rcfd1754/ rcon1754. The four-way COALESCE covers both code generations. 2.10 Average Assets Source: Schedule RCK (preferred) or Schedule RC (fallback) Formula: COALESCE(rck.rcfd3368, rck.rcon3368, rc.rcfd2170, rc.rcon2170) 2.11 Average Loans (domestic) Source: Schedule RCK (preferred) or Schedule RC (fallback) Formula: COALESCE(rck.rcon3360, rc.rcfdb528, rc.rconb528) rcon3360 = average total loans and leases, domestic offices (quarterly avg). 2.12 Average Loans (foreign offices) Source: Schedule RCK Formula: COALESCE(rck.rcfn3360, 0) Only populated for FFIEC 031 large-bank filers with foreign offices. Defaults to 0 for community banks. 2.13 Average Interest-Bearing Deposits at Other Institutions Source: Schedule RCK Formula: COALESCE(rck.rcfd3381, rck.rcon3381) NOTE: Both rcfd3381 AND rcon3381 must be checked. Community banks (FFIEC 041/051) populate rcon3381 only; large banks use rcfd3381. Omitting rcon3381 causes NIM overstatement for community banks because a significant earning asset class is excluded from the denominator. 2.14 Average Federal Funds Sold Source: Schedule RCK Formula: COALESCE(rck.rcfd3365, rck.rcon3365) Average fed funds sold and securities purchased under repos. -------------------------------------------------------------------------------- SECTION 3 — CAPITAL ADEQUACY RATIOS -------------------------------------------------------------------------------- 3.1 Equity / Assets Formula: equity_capital / total_assets × 100 Simple book equity ratio. Available for all 101 quarters loaded. Source: Schedule RC 3.2 Tangible Common Equity (TCE) Ratio Formula: (equity_capital - goodwill - other_intangibles) / total_assets × 100 Goodwill: COALESCE(rcfd3163, rcon3163) Other intangibles: COALESCE(rcfd0426, rcon0426) Source: Schedule RC 3.3 Tier 1 Leverage Ratio Formula: text field stripped of "%" → numeric Source: Schedule RCRI, field rcoa7204 (preferred) or rcfa7204 Basel III requirement: minimum 4%. Available 2015 Q1 onward. 3.4 Tier 1 Risk-Based Capital Ratio Formula: text field stripped of "%" → numeric Source: Schedule RCRI, field rcoa7206 (preferred) or rcfa7206 Basel III requirement: minimum 6%. Available 2015 Q1 onward. 3.5 Total Capital Ratio (Total Risk-Based Capital) Formula: text field stripped of "%" → numeric Source: Schedule RCRI, field rcoa7205 (preferred) or rcfa7205 Basel III requirement: minimum 8%. Available 2015 Q1 onward. 3.6 CET1 Ratio (Common Equity Tier 1) Formula: text field stripped of "%" → numeric Source: Schedule RCRI, field rcoap793 (preferred) or rcfap793 Basel III requirement: minimum 4.5%. Available 2015 Q1 onward. 3.7 Texas Ratio Formula: (past_due_90 + nonaccrual) / (tangible_equity + ACL) × 100 Values > 100% historically associated with elevated failure risk. Source: Schedule RC, RCN -------------------------------------------------------------------------------- SECTION 4 — EARNINGS RATIOS -------------------------------------------------------------------------------- 4.1 Return on Assets (ROA) Formula: net_income_ytd × ann / avg_assets × 100 net_income_ytd: Schedule RI, field riad4340 Annualized and divided by average assets from Schedule RCK. 4.2 Return on Equity (ROE) Formula: net_income_ytd × ann / equity_capital × 100 Uses period-end equity capital from Schedule RC. 4.3 Net Interest Margin (NIM) Formula: net_interest_income_ytd × ann / avg_earning_assets × 100 net_interest_income_ytd: Schedule RI, field riad4074 avg_earning_assets = avg_loans (domestic, Schedule RCK rcon3360) + avg_loans_foreign (RCK rcfn3360) + avg_ib_deposits_at_fis (RCK COALESCE(rcfd3381, rcon3381)) + afs_securities (period-end, RC rcfd1773/rcon1773) + htm_securities (period-end, RC COALESCE(rcfdjj34, rconjj34, rcfd1754, rcon1754)) Period-end securities are used as a proxy for average securities because Schedule RCK does not include average investment security balances. vs. UBPR: UBPR NIM uses tax-equivalent NII. Our NIM is non-TE. Expected gap: 5–15 basis points (wider for banks with more munis). 4.4 Net Interest Spread Formula: (loan_interest_income_ytd × ann / avg_loans × 100) - (total_interest_expense_ytd × ann / avg_assets × 100) loan_interest_income_ytd: Schedule RI, field riad4010 (interest & fees on loans) total_interest_expense_ytd: Schedule RI, field riad4073 4.5 Loan Yield Formula: loan_interest_income_ytd × ann / avg_loans × 100 Annualized interest and fees on loans divided by average loans. 4.6 Cost of Funds Formula: total_interest_expense_ytd × ann / avg_assets × 100 Annualized total interest expense divided by average assets. Note: a true cost-of-funds calculation would divide by interest-bearing liabilities, but average IB liabilities are not available in Schedule RCK. 4.7 Pre-Provision Net Revenue (PPNR) / Assets Formula: (NII + noninterest_income - noninterest_expense) × ann / avg_assets × 100 Earnings power before credit costs and taxes. noninterest_income_ytd: Schedule RI, field riad4079 noninterest_expense_ytd: Schedule RI, field riad4093 4.8 Efficiency Ratio Formula: noninterest_expense / (NII + noninterest_income) × 100 Capped at 999.99% to suppress extreme outliers. Lower is better; community bank median is approximately 60–65%. vs. UBPR: UBPR efficiency ratio uses TE-adjusted NII in the denominator and excludes AFS securities gains/losses from noninterest income. Our formula uses non-TE NII and includes all noninterest income items (riad4079). Expected overstatement: 0.3–2.5% vs. UBPR, wider for banks with large municipal bond portfolios or large realized AFS securities losses. 4.9 Noninterest Income / Assets Formula: noninterest_income_ytd × ann / avg_assets × 100 Schedule RI, field riad4079. 4.10 Noninterest Expense / Assets (Overhead Ratio) Formula: noninterest_expense_ytd × ann / avg_assets × 100 Schedule RI, field riad4093. 4.11 Provision / Assets Formula: provision_ytd × ann / avg_assets × 100 provision_ytd: Schedule RI, field riad4230. -------------------------------------------------------------------------------- SECTION 5 — CREDIT QUALITY RATIOS -------------------------------------------------------------------------------- 5.1 Net Charge-Off Rate (NCO / Avg Loans) Formula: (chargeoffs_ytd - recoveries_ytd) × ann / avg_loans × 100 chargeoffs_ytd: Schedule RIBI, field riad4635 (total loans charged off) recoveries_ytd: Schedule RIBI, field riad4605 (total recoveries) Annualized net charge-offs divided by average loans. 5.2 Provision / Net Charge-Offs (Reserve Build Coverage) Formula: provision_ytd / (chargeoffs_ytd - recoveries_ytd) Values > 1.0 (100%) indicate the bank is building reserves faster than it is charging off loans. 5.3 NPA Ratio (Nonperforming Assets / Gross Loans) Formula: (past_due_90 + nonaccrual) / gross_loans × 100 past_due_90: Schedule RCN Post-2017: COALESCE(rcfd1407, rcon1407) Pre-2017 (FFIEC 041): rcon1607 nonaccrual: Schedule RCN Post-2017: COALESCE(rcfd1403, rcon1403) Pre-2017 (FFIEC 041): rcon1608 Uses gross loans (before ACL) as denominator, consistent with UBPR. 5.4 30–89 Days Past Due Ratio Formula: past_due_30_89 / gross_loans × 100 past_due_30_89: Schedule RCN Post-2017: COALESCE(rcfd1406, rcon1406) Pre-2017 (FFIEC 041): rcon1606 5.5 NPA / Total Assets Formula: (past_due_90 + nonaccrual) / total_assets × 100 5.6 ACL Coverage Ratio (Allowance / NPA) Formula: ACL / (past_due_90 + nonaccrual) × 100 Values > 100% indicate the allowance fully covers nonperforming assets. 5.7 ACL / Gross Loans (Allowance Ratio) Formula: ACL / gross_loans × 100 Reserve level as a percentage of the gross loan portfolio. -------------------------------------------------------------------------------- SECTION 6 — BALANCE SHEET STRUCTURE RATIOS -------------------------------------------------------------------------------- 6.1 Net Loans / Assets Formula: net_loans / total_assets × 100 net_loans = gross_loans + hfs_loans - ACL (see section 2.6) Measures the proportion of assets deployed in lending. 6.2 Net Loans / Deposits Formula: net_loans / total_deposits × 100 Loan-to-deposit ratio using the UBPR net loans definition. 6.3 Securities / Assets Formula: (afs_securities + htm_securities) / total_assets × 100 6.4 Cash / Assets Formula: (cash_nonib + cash_ib) / total_assets × 100 cash_nonib: Schedule RC, COALESCE(rcfd0081, rcon0081) cash_ib: Schedule RC, COALESCE(rcfd0071, rcon0071) 6.5 Intangibles / Assets Formula: (goodwill + other_intangibles) / total_assets × 100 6.6 Equity / Loans Formula: equity_capital / gross_loans × 100 6.7 Deposits / Assets Formula: total_deposits / total_assets × 100 -------------------------------------------------------------------------------- SECTION 7 — LOAN MIX RATIOS (Schedule RCCI) -------------------------------------------------------------------------------- All loan mix ratios use gross_loans (rcfdb528 / rconb528) as the denominator. Component numerators are from Schedule RCCI (loan detail, period-end balances). 7.1 Agricultural Loans % = (farmland_RE + ag_production) / gross_loans × 100 farmland_RE: COALESCE(rcfd1420, rcon1420) ag_production: COALESCE(rcfd1590, rcon1590) 7.2 Commercial Real Estate (CRE) % = (construction + multifamily + nonfarm_nonresidential) / gross_loans × 100 7.3 Construction & Land Development % = (construction_14fam + construction_other) / gross_loans × 100 construction_14fam: COALESCE(rcfdf158, rconf158) construction_other: COALESCE(rcfdf159, rconf159) 7.4 Multifamily % = multifamily_loans / gross_loans × 100 COALESCE(rcfd1460, rcon1460) 7.5 Nonfarm Nonresidential % = (nonfarm_nonres_owner + nonfarm_nonres_other) / gross_loans × 100 owner-occupied: COALESCE(rcfdf160, rconf160) other: COALESCE(rcfdf161, rconf161) 7.6 C&I Loans % = ci_loans / gross_loans × 100 Community banks: rcon1766 (total C&I) Large banks: rcfd1763 (US addressees) + rcfd1764 (non-US addressees) 7.7 Credit Card % = credit_card_loans / gross_loans × 100 COALESCE(rcfdb538, rconb538) 7.8 CRE Concentration Ratio = CRE_loans / total_risk_based_capital × 100 Regulatory guidance threshold: 300%. CRE here = construction + multifamily + nonfarm nonresidential (excludes 1-4 family). 7.9 Construction Concentration Ratio = construction_loans / total_risk_based_capital × 100 Regulatory guidance threshold: 100%. -------------------------------------------------------------------------------- SECTION 8 — PREDECESSOR STITCHING -------------------------------------------------------------------------------- When viewing a bank's time series that spans mergers or acquisitions, the `institution_lineage` table resolves the full predecessor chain. The stitched query uses DISTINCT ON (report_date) with ORDER BY total_assets DESC to select the dominant (largest) entity for each reporting period when multiple predecessors overlap. This prevents chart spikes caused by double-counting. Key table: institution_lineage ultimate_rssd — RSSD ID of the surviving (current) institution successor_cert — immediate next FDIC CERT (one hop forward) ultimate_cert — FDIC CERT of the final surviving institution chain_depth — merger hops (max observed in dataset: 10) failed — boolean; fail_date, cost_to_dif if applicable -------------------------------------------------------------------------------- SECTION 9 — VALIDATION -------------------------------------------------------------------------------- Ratios are periodically validated against the FDIC BankFind API (https://banks.data.fdic.gov/api/financials), which draws from the same FFIEC Call Report data as the UBPR. Run: python ubpr_compare.py The script samples 10 banks stratified by asset size and compares 11 ratios. As of 2026-06-18, all ratios except efficiency ratio match to within expected tolerances. The efficiency ratio systematically overstates vs. FDIC/UBPR by 0.3–2.5% due to the tax-equivalent adjustment in the UBPR denominator. ================================================================================ END OF DOCUMENT ================================================================================