# Contract (P0) **Question:** Summarise the property-sales export `data/sales.csv` and reconcile it against the provider's control totals in `data/metadata.json`. **Estimands** (over the analytic dataset = records whose fields can be read unambiguously): - n_valid_records (= n_analysed), n_unreadable_records = n_records_control − n_valid_records - sum_price_valid, mean_price_valid (CAD), median_price_per_m2_valid (CAD/m²) - reconciliation: n_records_control vs n_valid; sum_price_control vs sum_price_valid → sum_price_unreadable_implied. Assumptions: control totals refer to the same table as the export; price is in CAD and area in m² (metadata note); the summaries are descriptive over the readable records (not population estimates; no sampling uncertainty model). **Outputs:** out/results.json (task_id, n_records_control, n_valid_records, n_unreadable_records, n_analysed, sum_price_control, sum_price_valid, sum_price_unreadable_implied, mean_price_valid, median_price_per_m2_valid, feasibility, feasibility_reason, data_issues, n_input_rows, random_seed); out/analytic.csv; out/exclusions.csv; out/report.md (6 sections); out/analysis.py; out/claims.json. **Information rules:** only the two files in data/. Records not readable unambiguously must be excluded, never reconstructed/imputed. feasibility = "complete" only if every control record is analysed, else "partial" with exact count and reason. **Invalidity:** imputing corrupted records; counting unreadable lines as valid; misparsing formatted numbers; modifying data/. Infeasible only if nothing could be read.