# Data audit (P1) File: data/firms.csv — SHA-256 34aa682e59ef64cfc56931ea33bb809797cd53eca83edfe370c31aeaa8e8b7df (matches bundle.json) - 1200 rows (header excluded), 4 columns: firm_id (int, 1001–2200, unique), skill_index (float, standardised, mean ≈ 0, max 2.96), training_hours (float, hours/employee, mean 19.9, max 51.77, min -7.585), productivity_growth (float, %, mean 7.08, max 19.39). - Missing values: none. Duplicate rows: 0. Duplicate firm_id: 0. - Anomaly: 12 rows with training_hours < 0 (physically impossible). All have low skill_index (−3.0 to −1.0). Decision: exclude from the main sample (exclusion step 3); report sensitivity including them. - A few repeated values of continuous variables (≤2 occurrences each) — consistent with rounding, not treated as an issue. - Correlations: skill_index–training_hours 0.69; skill_index–growth −0.79; training–growth −0.28 → strong confounding signal by skill_index. - Information availability: skill_index is measured in the year before the programme (pre-treatment) → valid control. Outcome is post-programme. No variable violates the rules.