Parsing: Bank statement PDFs and CSVs are parsed using Gemini 2.5 Flash multimodal. Every transaction is extracted with date, description, amount and direction.
Classification: Two-pass — rule-based SA merchant matching (~40 high-confidence patterns), then Gemini fallback for the remainder. 40+ category taxonomy.
Recurring detection: Transactions are clustered by description and ±10% amount tolerance to detect monthly obligations.
Affordability: NCA Section 81 + Regulation 23A. Net = gross − statutory deductions − minimum living expenses (Reg 23A table). Discretionary = net − recurring obligations. Max instalment = discretionary × 0.65 (conservative buffer). DTI = (obligations + new instalment) / gross. Light: green <25%, amber 25-35%, red >35%.
Honesty: If any transaction has Gemini confidence below 0.6, it is flagged for manual review. If statement period is less than 90 days, the user is warned. No fabricated transactions are ever inserted.