Run reconciliation

Three-way matching: GPay CSV ⟕ screenshots, then merged transactions vs the internal log XLSX. CSV rows are re-ingested on every run so the merge view reflects whatever CSVs are in data/inbox/ right now.

Pipeline state

GPay CSVs (in inbox)

0
0 rows from last ingest
Upload CSVs

Screenshots

17
Upload more

Reconcile against internal log

+ Upload internal log

What happens

  1. Re-ingest every GPay_*.csv in data/inbox/ into gpay_settlements.
  2. Refresh the merged_transactions view (CSV joined with screenshots on Google Transaction ID).
  3. Reload the internal log XLSX into deposit_entries.
  4. Match merged rows ↔ log entries: UTR-exact first (1.0 conf), then amount + time ±5min.
  5. Assign each row to a bucket (VERIFIED / MATCHED_NO_PROOF / ORPHAN_PAYMENT / PHANTOM_LOG / GHOST_DEPOSIT / GHOST_SCREENSHOT) and flag amount mismatches and duplicates.