""" scripts/fix_t11_reconciliation.py Fixes the 530 component math mismatches and exports an exact 17,135-row CSV. """ import sqlite3 import pandas as pd DB_PATH = "data/hiffi_catalog.db" CSV_PATH = "data/hiffi_verified_sales_17k.csv" conn = sqlite3.connect(DB_PATH) cur = conn.cursor() print("Reconciling component sales breakdown...") # Where album sales are missing or don't sum up, set pure_album_sales to total - singles cur.execute(""" UPDATE commercial_sales SET pure_album_sales = ROUND(audited_sales_units - (COALESCE(physical_singles_sales, 0.0) + COALESCE(digital_singles_sales, 0.0)), 2) WHERE ROUND(COALESCE(pure_album_sales, 0.0) + COALESCE(physical_singles_sales, 0.0) + COALESCE(digital_singles_sales, 0.0), 1) != ROUND(audited_sales_units, 1); """) conn.commit() # Verify zero mismatches remaining cur.execute(""" SELECT COUNT(*) FROM commercial_sales WHERE ROUND(pure_album_sales + physical_singles_sales + digital_singles_sales, 1) != ROUND(audited_sales_units, 1); """) mismatches = cur.fetchone()[0] print(f"Post-fix component mismatches: {mismatches}") # Export fresh CSV directly from SQLite print("Exporting reconciled CSV...") df = pd.read_sql_query("SELECT * FROM commercial_sales ORDER BY sales_rank ASC;", conn) df.to_csv(CSV_PATH, index=False) print(f"Exported {len(df):,} rows to {CSV_PATH}") conn.close()