Auto-detekcja formatu
Ksefnik automatycznie rozpoznaje format wyciągu bankowego na podstawie treści pliku. Nie musisz ręcznie podawać, z którego banku pochodzi wyciąg.
Funkcja detectBankFormat
Dział zatytułowany „Funkcja detectBankFormat”import { detectBankFormat } from '@ksefnik/core'
type BankFormat = 'mt940' | 'mbank' | 'ing' | 'pko' | 'santander'
function detectBankFormat(content: string): BankFormat | nullZwraca identyfikator formatu lub null, jeśli treść nie pasuje do żadnego znanego formatu.
Kolejność sprawdzania
Dział zatytułowany „Kolejność sprawdzania”Detekcja odbywa się na pierwszych 2000 znakach treści, w następującej kolejności:
- MT940 — czy treść zawiera pola SWIFT
:20:+:60F:/:61:, lub zaczyna się od{1: - mBank — czy nagłówki zawierają
#Data operacji+#Opis operacji - ING — czy nagłówki zawierają
"Data transakcji"+"Dane kontrahenta" - PKO BP — czy nagłówki zawierają
"Data operacji"+"Typ transakcji" - Santander — czy nagłówki zawierają
Data operacji;Data waluty;Tytu+Nadawca/Odbiorca
Kolejność ma znaczenie — pierwszy pasujący format wygrywa.
Funkcje importu
Dział zatytułowany „Funkcje importu”importBankStatement (z pliku)
Dział zatytułowany „importBankStatement (z pliku)”import { importBankStatement } from '@ksefnik/core'
const transactions = await importBankStatement('./wyciag.csv')Czyta plik z dysku i automatycznie wykrywa format.
importBankStatementFromString (z tekstu)
Dział zatytułowany „importBankStatementFromString (z tekstu)”import { importBankStatementFromString } from '@ksefnik/core'
const content = await fetch('https://api.bank.pl/export').then(r => r.text())const transactions = await importBankStatementFromString(content)Parsuje treść przekazaną jako string.
Własne parsery
Dział zatytułowany „Własne parsery”Obie funkcje akceptują opcjonalną listę parserów:
import { importBankStatementFromString, getDefaultParsers } from '@ksefnik/core'import { MojBankParser } from './moj-bank.parser.js'
const parsers = [...getDefaultParsers(), new MojBankParser()]const transactions = await importBankStatementFromString(content, { parsers })Nierozpoznany format
Dział zatytułowany „Nierozpoznany format”Jeśli żaden parser nie rozpozna treści, obie funkcje rzucają UnsupportedBankFormatError:
import { UnsupportedBankFormatError } from '@ksefnik/shared'
try { const transactions = await importBankStatement('./nieznany.csv')} catch (err) { if (err instanceof UnsupportedBankFormatError) { console.error('Nieobsługiwany format bankowy:', err.message) }}Jak działa wewnętrznie
Dział zatytułowany „Jak działa wewnętrznie”Mechanizm detekcji iteruje po liście parserów i wywołuje canParse() na każdym z nich:
export async function importBankStatementFromString( content: string, opts?: ImportBankStatementOpts,): Promise<BankTransaction[]> { const parsers = opts?.parsers ?? getDefaultParsers()
for (const parser of parsers) { if (await parser.canParse(content)) { return parser.parse(content) } }
throw new UnsupportedBankFormatError('unknown')}Domyślna kolejność parserów odpowiada kolejności detekcji: MT940, mBank, ING, PKO, Santander.
Wypróbuj detektor
Dział zatytułowany „Wypróbuj detektor”Wklej fragment wyciągu bankowego i zobacz jak działa auto-detekcja:
Detektor formatu wyci\u0105gu bankowego
Wklej wyci\u0105g bankowy, aby automatycznie wykry\u0107 format i wyodr\u0119bni\u0107 NIP-y
Wykryty format
ID parsera: mbank
Obs\u0142ugiwane formaty: MT940, mBank, ING, PKO BP, Santander
Wykryte NIP-y
45213456789błędna suma kontrolna...a za FV/2026/03/001 NIP: 5213456789 TECHSOLUTIONS SP. Z...
5260250995poprawny...dowlane marzec 2026 NIP: 5260250995;BUDIMEX S.A.;PL2711...
7811234567błędna suma kontrolna...LOUDWARE SP. Z O.O. NIP: 7811234567;PL98109023450000000...
1234563218poprawny...ICE PLUS SP. Z O.O. NIP 1234563218;PL55114020040000390...