Files
hiffi-artist-intelligence/scripts/fix_t11_reconciliation.py
T

41 lines
1.4 KiB
Python
Raw Normal View History

"""
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()