Import wyciągu bankowego
Moduł bank obsługuje import wyciągów bankowych z 5 formatów polskich banków. Automatycznie wykrywa format pliku, parsuje kwoty na grosze i wyciąga NIP-y z tytułów przelewów.
Obsługiwane formaty
Dział zatytułowany „Obsługiwane formaty”| Bank | Format | Separator | Kodowanie | Rozszerzenie |
|---|---|---|---|---|
| mBank | CSV | ; | Windows-1250 | .csv |
| ING Bank Śląski | CSV | ; | UTF-8 | .csv |
| PKO BP (iPKO) | CSV | , | UTF-8 | .csv |
| Santander | CSV | ; | Windows-1250 | .csv |
| Dowolny | MT940 (SWIFT) | — | ASCII | .mt940, .sta |
Import wyciągu
Dział zatytułowany „Import wyciągu”import { createKsefnik } from '@ksefnik/core';
const ksef = createKsefnik({ config: { nip: '5213456784' },});
// Import z pliku na dyskuconst transactions = await ksef.bank.importStatement('./wyciag-marzec.csv');
console.log(`Zaimportowano ${transactions.length} transakcji`);
for (const tx of transactions) { console.log( `${tx.date} | ${tx.amount > 0 ? 'IN' : 'OUT'} | ${tx.amount} gr | ${tx.title}` );}Możesz też zaimportować z ciągu znaków (przydatne gdy dane przychodzą z API):
const csvContent = await fetch('https://example.com/wyciag.csv').then(r => r.text());
const transactions = await ksef.bank.importStatementFromString(csvContent);# Import wyciągu — auto-detekcja formatuksefnik bank import ./wyciag-marzec.csv
# Wyświetl jako tabelęksefnik bank import ./wyciag-marzec.csv --format table
# Zapisz sparsowane transakcje jako JSONksefnik bank import ./wyciag-marzec.csv --format json > transakcje.json
# Import wyciągu MT940ksefnik bank import ./wyciag.mt940Auto-detekcja formatu
Dział zatytułowany „Auto-detekcja formatu”Parser analizuje plik w trzech krokach:
- Rozszerzenie — pliki
.mt940i.statrafiają od razu do parsera MT940. - Nagłówki CSV — parser porównuje pierwszą linię z znanymi schematami nagłówków banków.
- Heurystyka — jeśli nagłówki nie pasują, parser analizuje separatory, kodowanie i strukturę kolumn.
Jeśli auto-detekcja zawiedzie, możesz wymusić format:
const transactions = await ksef.bank.importStatement('./wyciag.csv', { parser: 'mbank',});Ekstrakcja NIP z tytułów przelewów
Dział zatytułowany „Ekstrakcja NIP z tytułów przelewów”Ksefnik stosuje 3 strategie ekstrakcji NIP z tytułu przelewu (w kolejności priorytetów):
| Strategia | Wzorzec | Przykład tytułu |
|---|---|---|
| MPP (split payment) | /VAT/...NIP/1234563218 | /VAT/230,00/IDC/FV/2026/03/15/NIP/1234563218 |
| Prefiks NIP | NIP: 1234563218 lub NIP 1234563218 | Zapłata za FV/2026/03/15 NIP: 1234563218 |
| Surowy checksum | 10-cyfrowy ciąg z poprawną sumą kontrolną | Przelew za usługi 1234563218 marzec |
const transactions = await ksef.bank.importStatement('./wyciag.csv');
// Sprawdź, ile transakcji ma wykryty NIPconst withNip = transactions.filter(tx => tx.extractedNip);console.log(`NIP wykryty w ${withNip.length}/${transactions.length} transakcjach`);Parsowanie kwot
Dział zatytułowany „Parsowanie kwot”Wszystkie kwoty są konwertowane na grosze (liczby całkowite):
| Wartość w pliku | Wynik w tx.amount | Kierunek |
|---|---|---|
1 234,56 | 123456 | przychodzący |
-1 234,56 | -123456 | wychodzący |
0,01 | 1 | przychodzący |
for (const tx of transactions) { const zlote = (Math.abs(tx.amount) / 100).toFixed(2); const kierunek = tx.amount > 0 ? 'przychodzący' : 'wychodzący'; console.log(`${zlote} PLN (${kierunek})`);}Przykład: import wyciągu z mBanku za marzec
Dział zatytułowany „Przykład: import wyciągu z mBanku za marzec”- Zaloguj się do mBanku i pobierz wyciąg za marzec 2026 w formacie CSV.
- Uruchom import:
Okno terminala ksefnik bank import ./mbank-marzec-2026.csv --format table - Przejrzyj wynik — każda transakcja ma datę, kwotę w groszach, tytuł i (opcjonalnie) wykryty NIP.
- Następny krok: uzgadnianie faktur z przelewami.