Transaction Categorisation & Import Enhancements
Transaction Categorisation & Import Enhancements
Inline Categorisation During Import
The import preview now includes an Account column where you can categorise transactions before they’re created. No more importing everything to Suspense and categorising afterwards.
- Inline account selection — every row in the preview shows either an auto-suggested account (green tick) or a dropdown to pick one manually. Uncategorised rows still post to Suspense (9999) as a safe fallback.
- Categorisation progress bar — shows “8 of 19 transactions categorised — 42%” with a colour-coded progress bar. Motivates you to clear the remaining uncategorised rows before importing.
- Silent rule creation — when you pick an account from the dropdown, a categorisation rule is automatically created in the background. No prompts, no extra clicks. Next time you import, those transactions categorise themselves.
- Apply to similar — categorising one TESCO row instantly applies the same account to all other TESCO rows in the import. The progress bar jumps accordingly.
- Rule upsert — change your mind? Pick a different account and the existing rule updates automatically. No stale rules accumulating.
- Per-row account overrides — each transaction can go to a different account during import. Priority: user override → rules engine → Suspense.
Auto-Categorisation on Import
The categorisation rules engine now runs during the confirm step. If you’ve set up rules (or they’ve been silently created from previous imports), matching transactions skip Suspense entirely.
- Rules engine integration — each row is evaluated against active categorisation rules before transaction creation.
- Cumulative learning — the more you import, the fewer manual categorisations you need. Rules created from one import apply to all future imports.
Bank Format Auto-Detection
Selecting a bank account now auto-populates the Bank Format dropdown. Pick “NatWest - Business Current Account” and the format switches to NatWest automatically. Still changeable if the auto-detect gets it wrong.
Supported mappings: NatWest, RBS, Royal Bank of Scotland, Starling, Monzo, HSBC, Lloyds, Halifax, Bank of Scotland.
Account Column on Transactions List
The Transactions page now shows an Account column with colour-coded badges:
- Green badge with the account code for categorised transactions (e.g. 7460, 7530, 8020)
- Amber badge showing “9999 Suspense” for uncategorised transactions awaiting review
Duplicate Import Protection
Two layers of protection against importing the same CSV twice:
- Upload-time detection — rows are checked against previous completed imports on the same bank account. Matches are flagged as duplicates and auto-deselected in the preview.
- Confirm-time guard — already-imported rows are excluded from processing at the database level, preventing duplicates even if the same CSV is uploaded multiple times.
- Auto-deselect duplicates — duplicate rows are unchecked by default in the preview, so the Import button only counts genuinely new transactions.
- “Nothing to Import” messaging — when all rows are duplicates, the Done step shows an informative message instead of a misleading “0 imported successfully”.
Categorise from Transaction Detail
Transactions sitting on the Suspense account show an amber banner with an account dropdown and a “Categorise” button. The rules engine pre-suggests an account if a matching rule exists.
Bug Fixes
- Fixed transaction detail page journal lines display — both legs of the double-entry now render correctly.
- Minor frontend build fixes.
Known Issues
- Zero-amount rows (e.g. LIDL £0.00) pass duplicate detection but are skipped at confirm time. They appear as “New” in the preview but result in “1 skipped” on import. Rare in practice.
- Account badges on the transactions list show codes only (e.g. 7460) without names. A hover tooltip is planned.
- No “undo import” capability yet — incorrectly imported transactions must be deleted individually or via reversing entries.