-- Audit Bank Account Balances -- Run this BEFORE applying balance constraints -- Fix any inconsistencies found before running 004_balance_constraints.sql -- Check for negative available balances SELECT id, account_number, currency_code, balance, available_balance, reserved_balance, 'negative_available' as issue_type FROM bank_accounts WHERE available_balance < 0 ORDER BY available_balance ASC; -- Check for negative reserved balances SELECT id, account_number, currency_code, balance, available_balance, reserved_balance, 'negative_reserved' as issue_type FROM bank_accounts WHERE reserved_balance < 0 ORDER BY reserved_balance ASC; -- Check for available > balance SELECT id, account_number, currency_code, balance, available_balance, reserved_balance, available_balance - balance as excess, 'available_exceeds_balance' as issue_type FROM bank_accounts WHERE available_balance > balance ORDER BY (available_balance - balance) DESC; -- Check for (available + reserved) > balance SELECT id, account_number, currency_code, balance, available_balance, reserved_balance, (available_balance + reserved_balance) - balance as excess, 'total_exceeds_balance' as issue_type FROM bank_accounts WHERE (available_balance + reserved_balance) > balance ORDER BY ((available_balance + reserved_balance) - balance) DESC; -- Summary count SELECT COUNT(*) FILTER (WHERE available_balance < 0) as negative_available_count, COUNT(*) FILTER (WHERE reserved_balance < 0) as negative_reserved_count, COUNT(*) FILTER (WHERE available_balance > balance) as available_exceeds_balance_count, COUNT(*) FILTER (WHERE (available_balance + reserved_balance) > balance) as total_exceeds_balance_count, COUNT(*) as total_accounts FROM bank_accounts;