Przejdź do głównej zawartości

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.

import { detectBankFormat } from '@ksefnik/core'
type BankFormat = 'mt940' | 'mbank' | 'ing' | 'pko' | 'santander'
function detectBankFormat(content: string): BankFormat | null

Zwraca identyfikator formatu lub null, jeśli treść nie pasuje do żadnego znanego formatu.

Detekcja odbywa się na pierwszych 2000 znakach treści, w następującej kolejności:

  1. MT940 — czy treść zawiera pola SWIFT :20: + :60F: / :61:, lub zaczyna się od {1:
  2. mBank — czy nagłówki zawierają #Data operacji + #Opis operacji
  3. ING — czy nagłówki zawierają "Data transakcji" + "Dane kontrahenta"
  4. PKO BP — czy nagłówki zawierają "Data operacji" + "Typ transakcji"
  5. Santander — czy nagłówki zawierają Data operacji;Data waluty;Tytu + Nadawca/Odbiorca

Kolejność ma znaczenie — pierwszy pasujący format wygrywa.

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

Czyta plik z dysku i automatycznie wykrywa format.

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.

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 })

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)
}
}

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.

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

mBank CSV
6 linii

Wykryty format

mBank CSV

ID parsera: mbank

Obs\u0142ugiwane formaty: MT940, mBank, ING, PKO BP, Santander

Wykryte NIP-y

4
  • 5213456789błę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...