41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""
|
|
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() |