name: import description: CSV and OFX transaction import parsing. Use when working on files in src/lib/import/.
Import Guidelines
Flow
File Drop → Parse (CSV/OFX) → Column Mapping → Formatting → Preview → Import
Money Handling
All amounts stored as integers in minor units:
import { toMinorUnitsForCurrency } from "@/lib/domain/currency";
toMinorUnitsForCurrency(12.34, "USD"); // 1234 (cents)
toMinorUnitsForCurrency(1234, "JPY"); // 1234 (0 decimals)
toMinorUnitsForCurrency(1.234, "KWD"); // 1234 (3 decimals)
Currency resolution order: OFX CURDEF → Account → User default → Vault default → USD
CSV Parser
Auto-detects: separator, headers, date/number formats.
Duplicate Detection
Uses Levenshtein distance: date window ±3 days, amount tolerance 1 cent, description 80% similarity.
Critical Rules
- Never trust user input - validate all parsed data
- Handle encoding: UTF-8, Latin-1, Windows-1252
- Preserve
originalRowfor debugging - Handle negative formats like
(123.45) - Return structured errors, don't throw
Testing
Test with real bank exports covering different date formats (US/EU/ISO), number formats, edge cases, large files.