# Data audit - `data/firm_panel.csv` SHA-256 a1f1af88b1ab05900155991f2468cce09695af978923e5bc3ef9c28d45683b6f; 2140 data rows, 7 columns. - `data/README.md` SHA-256 26573e982ab6ca9e7f90d2b89bd2878aa6a670f90da21496bff787b59216b9a2 (codebook). - Schema: firm_id str (300 distinct, all match F###), year int 2016–2022, leverage [0.02,0.95], cash_ratio [0.0046,0.7406], log_sales [1.29,8.88] (log thousand USD), rating_2025 A/B/C/D (constant within firm), default_next 0/1 with 307 missing. - Duplicates: 40 rows are exact duplicates of another row (80 rows involved in 40 duplicated firm_id-year keys; all duplicate pairs identical on every column). After dropping: 2100 rows = 300 firms x 7 years, balanced. - Missing outcome: all 2022 rows (300 after dedup; 307 before) have empty default_next (outcome year 2023 beyond data cut). No other missing values. - Leakage: rating_2025 is assigned in 2025 using realised default history through 2022 -> violates info rule. Crosstab confirms: ratings A/B/C have zero defaults; all defaults are rated D. Excluded from predictors. - Anomalies noted: leverage bounded exactly at 0.02 and 0.95 (possible truncation/winsorisation in the generator; kept as is). Some firms have multiple default_next=1 years (up to 4); codebook does not define default as absorbing, so kept.