-- Deferred card reconciliation. -- -- An order paid "MasterCard Ending in 8032 and/or credits" does not state the -- split. The split is recoverable from the card statement -- but for a live -- order that statement is weeks away, so the split cannot be resolved at ingest -- time. These columns let an order be parked and revisited. ALTER TABLE expense_metadata ADD COLUMN IF NOT EXISTS card_last4 TEXT; ALTER TABLE expense_metadata ADD COLUMN IF NOT EXISTS currency TEXT; ALTER TABLE expense_metadata ADD COLUMN IF NOT EXISTS flags JSONB NOT NULL DEFAULT '[]'; ALTER TABLE expense_metadata ADD COLUMN IF NOT EXISTS reconciled_at TIMESTAMPTZ; -- The pending set: provenance recorded, no transaction yet, still waiting on a -- statement line. Partial so it stays small regardless of table growth. CREATE INDEX IF NOT EXISTS idx_expense_metadata_pending ON expense_metadata (transaction_date) WHERE transaction_id IS NULL AND reconciled_at IS NULL;