feat: add bank file import as core, move Enable Banking to extension
Replace PSD2 bank integration as the default with file-based bank import (CSV/XML), which better suits Swedish sole traders and small companies. Enable Banking is now an opt-in extension. - Phase 1: Extract generic transaction ingestion service (ingest.ts) with dedup, auto-categorization, and OCR-based invoice matching - Phase 2: Bank file parser library supporting Nordea, SEB, Swedbank, Handelsbanken CSV formats and ISO 20022 camt.053 XML - Phase 3: Database migration adding import_source, reference columns and bank_file_imports tracking table - Phase 4: Import wizard UI (5-step flow) and API routes for parse/execute - Phase 5: Move Enable Banking to extensions/enable-banking/ with commented-out loader entry for opt-in activation - Phase 6: 104 new tests (ingestion + all parser formats), fixing Nordea detection overlap and camt.053 XML tag collision bugs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
838dc6b8b5
commit
885f362a29
@@ -157,6 +157,17 @@ export interface BankAccount {
|
||||
balance: number | null
|
||||
}
|
||||
|
||||
// Import source identifiers
|
||||
export type ImportSource =
|
||||
| 'enable_banking'
|
||||
| 'csv_nordea'
|
||||
| 'csv_seb'
|
||||
| 'csv_swedbank'
|
||||
| 'csv_handelsbanken'
|
||||
| 'csv_generic'
|
||||
| 'camt053'
|
||||
| 'manual'
|
||||
|
||||
// Transaction
|
||||
export interface Transaction {
|
||||
id: string
|
||||
@@ -198,6 +209,10 @@ export interface Transaction {
|
||||
// Receipt link
|
||||
receipt_id: string | null
|
||||
|
||||
// Import tracking
|
||||
import_source: string | null
|
||||
reference: string | null // OCR number, Bankgiro reference
|
||||
|
||||
// Notes
|
||||
notes: string | null
|
||||
|
||||
@@ -205,6 +220,27 @@ export interface Transaction {
|
||||
updated_at: string
|
||||
}
|
||||
|
||||
// Bank File Import (tracking table for file-based imports)
|
||||
export type BankFileImportStatus = 'pending' | 'processing' | 'completed' | 'failed'
|
||||
|
||||
export interface BankFileImport {
|
||||
id: string
|
||||
user_id: string
|
||||
filename: string
|
||||
file_hash: string
|
||||
file_format: string
|
||||
transaction_count: number
|
||||
imported_count: number
|
||||
duplicate_count: number
|
||||
matched_count: number
|
||||
date_from: string | null
|
||||
date_to: string | null
|
||||
status: BankFileImportStatus
|
||||
error_message: string | null
|
||||
created_at: string
|
||||
updated_at: string
|
||||
}
|
||||
|
||||
// Customer
|
||||
export interface Customer {
|
||||
id: string
|
||||
|
||||
Reference in New Issue
Block a user