{
  "task_id": "F1-conf-04",
  "n_records_control": 1200,
  "n_valid_records": 1164,
  "n_unreadable_records": 36,
  "n_analysed": 1164,
  "sum_price_control": 471287000,
  "sum_price_valid": 456370000,
  "sum_price_unreadable_implied": 14917000,
  "mean_price_valid": 392070.446735,
  "median_price_per_m2_valid": 2984.93695,
  "feasibility": "partial",
  "feasibility_reason": "36 of the 1200 records in the provider's control total could not be analysed: 36 data lines of sales.csv are garbled export errors that cannot be read unambiguously (sale_ids S00700-S00735 are absent from the readable data); their implied price sum is 14917000 CAD.",
  "data_issues": [
    {
      "issue": "36 data lines of sales.csv are garbled export errors (random characters; 36 with wrong field count, 0 with invalid field formats); the sale_ids absent from the readable data are S00700-S00735 (36 ids, contiguous=True)",
      "handling": "excluded from the analytic dataset; not reconstructed or imputed; counted as unreadable"
    },
    {
      "issue": "25 records have price_cad written with a thousands separator inside a quoted CSV field (e.g. \"280,000\")",
      "handling": "read via standard CSV quoting; value matches the strict pattern d{1,3}(,ddd)+ so it is unambiguous; separators removed and record kept"
    },
    {
      "issue": "readable record count (1164) and price sum (456370000) fall short of the control totals (1200, 471287000); per-municipality count gaps {'Gatineau': 11, 'Laval': 8, 'Sherbrooke': 7, 'Levis': 3, 'Longueuil': 7} sum to 36",
      "handling": "reported as reconciliation gap; the unreadable records' price sum is implied as control minus valid, not estimated per record"
    }
  ],
  "n_input_rows": {
    "sales.csv": 1200
  },
  "random_seed": null,
  "n_garbled_lines": 36,
  "n_quoted_price_records": 25,
  "reconciliation_by_municipality_gap": {
    "Gatineau": 11,
    "Laval": 8,
    "Sherbrooke": 7,
    "Levis": 3,
    "Longueuil": 7
  }
}
