TRANSFER type fell into the ELSE branch of the spend CASE expression,
treating transfers as negative spend like refunds. Explicitly handle
each type: DEBIT=positive, CREDIT=negative, TRANSFER=0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add TRANSFER to TransactionType enum; excluded from cash flow queries
- Add TransferRule model: description patterns that auto-mark transactions
as transfers on upload (takes priority over budget rules)
- Bulk action "Mark as transfer" in transaction table
- Transfer Rules button/dialog on transactions page for managing patterns
- Transfers shown with ⇄ prefix and muted color in transaction list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Budget formula correctly adds DEBIT (CC charges stored from positive CSV
values) and subtracts CREDIT (refunds from negative CSV values).
Remove the fix-cc-types endpoint which was flipping CC transaction types
and causing charges to appear as CREDIT.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Budget formula now sums DEBIT transactions only, matching the intended
"current-month DEBIT total" behavior. Previously, CREDIT transactions
(CC payments) assigned to a budget would subtract and push totals negative.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>