# Checks (P4) | check | outcome | |---|---| | Clean re-run (deleted outputs) regenerates byte-identical results.json and analytic.csv | PASS | | analytic.csv rows == n_analysed (1164) | PASS | | sum(analytic price) == sum_price_valid; mean and median recomputed with pandas match | PASS | | exclusion ledger: n_before − n_removed = n_after each row; chained; first n_before = 1200 data lines; last n_after = n_analysed | PASS | | n_valid + n_unreadable == n_records_control (1164+36=1200) | PASS | | per-municipality shortfall sums to 36 | PASS | | sale_id unique in analytic set | PASS | | mean within [min,max] price; implied unreadable mean (414,361) same order as valid mean (392,070) → plausible | PASS | | sum_price_unreadable_implied > 0 | PASS |