Data audit (P1)
File: data/firms.csv — SHA-256 78f119a92d7c11aebb8c238c69d62687a80d91031f1e8a30fb412b9e77e1625a (matches bundle.json).
- 446 lines = 1 header + 445 data rows; 5 columns: firm_id (str, pattern F\d{4}, all match), sector (5 values: energy 48, manufacturing 122, retail 76, services 124, technology 75 raw rows), revenue (numeric, 7 empty cells, no non-numeric values), unit (USD_millions 378 rows, USD_thousands 67 rows), employees (integer, no empties, range 19–7953, all >0).
- No leading/trailing whitespace in any column. No date columns (no date ranges apply).
- 400 distinct firm_id; 45 firm_ids appear twice and all 45 pairs are exact duplicates in all columns (no conflicting records).
- After de-duplication: 60 firms in USD_thousands (raw values 43,805–1,005,760), 340 in USD_millions. Revenue per employee after converting thousands/1000 is on the same scale for both unit groups (mean ≈ 262–263 kUSD/employee), which supports the conversion and shows no mislabelled units.
- Empty revenue: 7 raw rows = 6 distinct firms (F0399 is duplicated): F0048, F0121, F0129, F0269, F0348, F0399.
- Information-availability: only data/firms.csv is used; no violations. Mixed units must be harmonised to millions USD (rule); missing-revenue firms are excluded from revenue aggregates and listed in the ledger.
- Note: no row-level information about currency other than USD; all units are USD scales.