# Data audit (P1) File: `data/firms.csv`, SHA-256 `78f119a92d7c11aebb8c238c69d62687a80d91031f1e8a30fb412b9e77e1625a` (matches bundle.json). - 445 data rows + header, 5 columns: firm_id (str, 5 chars, pattern F####), sector (str), revenue (float), unit (str), employees (int). - No date columns (cross-section; no date range applicable). - sector: services 124, manufacturing 122, retail 76, technology 75, energy 48 (raw rows) — five valid levels, no typos. - unit: USD_millions 378, USD_thousands 67 (raw rows). No other units. - Missing values: revenue empty in 7 raw rows (6 distinct firms: F0399 appears twice, both empty); no other missing cells. - Duplicates: 45 rows are exact duplicates of another row (all 5 columns identical); after dropping exact duplicates 400 rows = 400 distinct firm_id, so there are no conflicting duplicates. Whitespace-stripped IDs give no extra duplicates. - Revenue (raw, mixed units): min 5.742, max 1,005,760; mean of non-empty raw values ~30,696 — inflated by thousands-unit rows. - After converting USD_thousands/1000: millions rows median 176.5, thousands rows median 131.9 (comparable scales, confirming unit labels are plausible). Max 2057.6 MUSD. Revenue per employee 0.086–0.83 MUSD, no extreme anomalies. - employees: integers 19–7953, no zeros/negatives/missing. - Information-availability: only input is firms.csv; no violation. Decisions: drop exact duplicates (assembly errors); convert thousands to millions; exclude firms with missing revenue from revenue aggregates only (kept for mean_employees). No outlier removal (no evidence of errors).