Przejdź do głównej zawartości

Obsługiwane formaty

Ksefnik obsługuje 5 formatów wyciągów bankowych z polskich banków. Każdy parser implementuje interfejs BankStatementParser i jest automatycznie wykrywany na podstawie treści pliku.

BankFormatSeparatorKodowanieFormat daty
MT940SWIFT MT940pola :XX:ASCIIYYMMDD
mBankCSV;UTF-8YYYY-MM-DD
INGCSV;UTF-8YYYYMMDD
PKO BPCSV,UTF-8YYYY-MM-DD
SantanderCSV;UTF-8DD-MM-YYYY

Wszystkie parsery implementują wspólny interfejs:

interface BankStatementParser {
bank: string
canParse(content: string | Buffer): Promise<boolean>
parse(content: string | Buffer): Promise<BankTransaction[]>
}
  • bank — identyfikator parsera (np. 'mbank', 'ing')
  • canParse() — sprawdza czy treść pasuje do tego formatu
  • parse() — parsuje treść i zwraca tablicę BankTransaction

Nie musisz podawać formatu ręcznie. Funkcja importBankStatement() automatycznie wykrywa format na podstawie nagłówków i struktury pliku:

import { importBankStatement } from '@ksefnik/core'
// Format zostanie wykryty automatycznie
const transactions = await importBankStatement('./wyciag.csv')

Aby obsłużyć nowy format bankowy, zaimplementuj interfejs BankStatementParser:

import type { BankStatementParser, BankTransaction } from '@ksefnik/shared'
export class MojBankParser implements BankStatementParser {
bank = 'moj-bank'
async canParse(content: string | Buffer): Promise<boolean> {
const text = typeof content === 'string' ? content : content.toString('utf-8')
return text.includes('MOJ-BANK-HEADER')
}
async parse(content: string | Buffer): Promise<BankTransaction[]> {
const text = typeof content === 'string' ? content : content.toString('utf-8')
// Logika parsowania...
return []
}
}

Następnie przekaż parser do importBankStatementFromString():

import { importBankStatementFromString, getDefaultParsers } from '@ksefnik/core'
import { MojBankParser } from './moj-bank.parser.js'
const parsers = [...getDefaultParsers(), new MojBankParser()]
const transactions = await importBankStatementFromString(content, { parsers })