1. Wprowadzenie
Banki przechodzą ze starszej wersji standardu ISO 20022 z 2009 roku, czyli formatu pain.001.001.03, na wersję z 2019 roku, czyli format pain.001.001.09. W listopadzie 2026 roku kończy się możliwość przesyłania adresów w postaci jednej linii tekstu, a część banków przestaje przyjmować pliki w starszym formacie.
Główny format wykorzystywany w systemie to pain.001, czyli Customer Credit Transfer Initiation. Jest to międzynarodowy komunikat służący do zlecania przelewów wychodzących. Dzięki niemu można wyeksportować z systemu paczkę płatności krajowych, zagranicznych SEPA, Split Payment czy podatkowych i zaimportować ją bezpośrednio do bankowości elektronicznej.
Najważniejsze korzyści:
- Automatyzacja i oszczędność czasu: setki przelewów przekazane jednym kliknięciem zamiast ręcznego przepisywania danych.
- Eliminacja pomyłek: numery rachunków IBAN i NRB, kwoty, numery NIP i faktur trafiają do banku bezpośrednio z systemu.
- Standaryzacja: wykorzystanie światowego standardu wymiany danych finansowych ISO 20022.
UWAGA!!!
Przelewy SEPA są realizowane wyłącznie w walucie EUR, niezależnie od waluty, w jakiej prowadzony jest rachunek zleceniodawcy.
2. Obsługiwane banki i formaty
W wersji 3.92 dodano obsługę formatu pain.001.001.09 dla banków:
- Erste Bank Polska, dawniej Santander: iBiznes24,
- ING: ING Business,
- mBank: CompanyNet,
- PKO BP: iPKO biznes.
Dostępny jest też ogólny format ISO 20022 dla banków, które nie mają specyficznych wymagań dotyczących znaczników.
UWAGA!!!
Każdy bank stosuje własne reguły dotyczące wymaganych pól, oznaczania rodzaju przelewu i walidacji danych. Przy eksporcie należy zawsze wybrać format dedykowany bankowi, do którego plik będzie wczytywany. Różnice opisuje rozdział 6.
3.. Eksport przelewów w systemie
3.1. Rodzaje przelewów
Format pain.001.001.09 jest dostępny dla:
- przelewów krajowych,
- płatności podzielonej MPP,
- płatności podzielonej MPP w formie przelewu zbiorczego,
- przelewów do ZUS,
- przelewów skarbowych,
- przelewów walutowych zagranicznych.
Nowe formaty są dostępne także przy seryjnym wydruku przelewów.
3.2. Dane wymagane przed eksportem
a) Rachunek bankowy firmy
Rachunek, z którego wychodzą przelewy, musi mieć uzupełniony numer rachunku, kod BIC/ SWIFT oraz właściwy format eksportu.
b) Kontrahent przy przelewach zagranicznych
Przy przelewach zagranicznych w EUR należy sprawdzić, czy kontrahent ma wprowadzony poprawny numer rachunku w formacie IBAN, zaczynający się od kodu kraju, np. DE lub FR. Trzeba też sprawdzić, czy w systemie uzupełniono kod BIC/ SWIFT jego banku. Brak kodu BIC/ SWIFT lub błąd w numerze IBAN spowoduje odrzucenie pliku podczas walidacji w banku.
W pliku XML dane te trafiają do znaczników:
<BICFI>BPKOPLPW</BICFI> oraz <IBAN>PL36100600010000123456789123</IBAN>.
a) Adres kontrahenta w osobnych polach
Nowy format kładzie nacisk na adres ustrukturyzowany, czyli zapisany w osobnych polach:
- ulica,
- numer budynku,
- kod pocztowy,
- miejscowość
Dotychczas adres był zapisywany w jednej linii tekstu. Banki wycofują taki zapis, dlatego dane adresowe w kartotekach kontrahentów należy wpisywać w oddzielnych polach i dbać o ich kompletność. Minimum to miejscowość i kod kraju.
Przykład dla banku PKO BP:
Struktura pliku, fragment:
Plik XML:
Kartoteka kontrahenta w systemach Humansoft:
d) Płatność podzielona MPP
Przy przelewach w mechanizmie podzielonej płatności kluczowe jest podanie NIP dostawcy oraz numeru faktury. NIP podaje się bez myślników i bez prefiksu PL. Kwota VAT nie może być wyższa niż kwota brutto całego przelewu.
Każdy bank przyjmuje przelew MPP opisany w tytule następującym ciągiem znaków:
/VAT/kwota_vat/IDC/NIP_dostawcy/INV/nr_faktury/TXT/opis
Przykład fragmentu pliku dla banku ING:
<RmtInf>
<Ustrd>/VAT/45,54/IDC/5250007738/INV/FZ/2026/201a</Ustrd>
</RmtInf>
e) Dopuszczalne znaki
Format XML obsługuje kodowanie UTF-8, w tym polskie litery ą, ć, ę. W tytułach przelewów i nazwach kontrahentów zaleca się jednak unikać znaków specjalnych, takich jak * # ; ” { }, które w niektórych bankach mogą powodować odrzucenie pojedynczych transakcji.
3.3. Błędy walidacji
Jeśli dane są błędne, plik zostanie zapisany we wskazanym katalogu wraz z informacją o błędach walidacji.
W następnym kroku wyświetli się opis błędów, a przycisk Błędy XML stanie się aktywny.
Przykład: brak danych w pliku XML.
Po poprawnej walidacji ta sekcja pliku zawiera dane:
Na liście poleceń przelewu, pod przyciskiem Zestawienia i inne operacje F12, dodano opcję Błędy eksportu przelewu.
3.4. Nowe kolumny w widoku polecenia przelewu
Fabryczny widok polecenia przelewu wzbogacono o kolumny:
- VAT MPP,
- Przelew na rachunek,
- Nazwa rachunku,
- Symbol rachunku,
- Rodzaj przelewu,
- Czy plik wyeksportowany?,
- Identyfikator,
- Format eksportu.
4 . Budowa pliku XML
Ten rozdział ułatwia analizę wygenerowanego pliku, na przykład przy wyjaśnianiu błędu zgłoszonego przez bank.
4.1. Struktura pliku
Pierwszy element pliku określa standard i wersję formatu:
<Document xmlns=”urn:iso:std:iso:20022:tech:xsd:pain.001.001.09″>
Plik zawsze składa się z trzech poziomów zagnieżdżonych w elemencie głównym komunikatu: Document → CstmrCdtTrfInitn → GrpHdr → PmtInf → CdtTrfTxInf.
- Document – Element otwierający plik. Określa standard ISO i wersję formatu.
- CstmrCdtTrfInitn – Treść komunikatu, czyli Customer Credit Transfer Initiation, zlecenie przelewów. Obejmuje nagłówek i wszystkie bloki płatności.
- GrpHdr – Nagłówek z informacjami o całym pliku: unikalny identyfikator, data utworzenia, łączna liczba przelewów i ich suma.
- PmtInf – Blok płatności. Grupuje przelewy wychodzące z jednego rachunku firmy.
- CdtTrfTxInf – Szczegóły pojedynczego przelewu: dane odbiorcy, kwota, tytuł, NIP, numer faktury.
Struktura pliku na przykładzie banku PKO BP:
4.2. Najważniejsze pola
- MsgId – Identyfikator pliku zleceń
- NbOfTxs – Liczba przelewów
- CtrlSum – Suma kwot wszystkich przelewów
- ReqdExctnDt – Data realizacji przelewu
- Dbtr – Zleceniodawca
- DbtrAcct – Rachunek, z którego wychodzą środki
- Cdtr – Odbiorca przelewu
- CdtrAcct – Rachunek odbiorcy
- RmtInf/Ustrd – Tytuł przelewu
4.3. Przykładowy plik
Plik z jednym przelewem SEPA w EUR, wygenerowany dla banku PKO BP:
<?xml version=”1.0″ encoding=”utf-8″?>
<Document xmlns=”urn:iso:std:iso:20022:tech:xsd:pain.001.001.09″>
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>20261020123300619-7L70QW70E</MsgId>
<CreDtTm>2026-10-20T12:33:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>2500.00</CtrlSum>
<InitgPty>
<Nm>Bifoto humansoft firma MO3</Nm>
<PstlAdr>
<StrtNm>Mlodzianowska</StrtNm>
<PstCd>26-600</PstCd>
<TwnNm>Radom</TwnNm>
<Ctry>PL</Ctry>
</PstlAdr>
<Id>
<OrgId>
<Othr>
<Id>7962395376</Id>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>20261020123300619-7L70QW70E-1</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>2500.00</CtrlSum>
<ReqdExctnDt>
<Dt>2026-10-20</Dt>
</ReqdExctnDt>
<Dbtr>
<Nm>Bifoto humansoft firma MO3</Nm>
<PstlAdr>
<StrtNm>Mlodzianowska</StrtNm>
<PstCd>26-600</PstCd>
<TwnNm>Radom</TwnNm>
<Ctry>PL</Ctry>
</PstlAdr>
<Id>
<OrgId>
<Othr>
<Id>7962395376</Id>
</Othr>
</OrgId>
</Id>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>PL36100600010000123456789123</IBAN>
</Id>
<Ccy>EUR</Ccy>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BICFI>BPKOPLPW</BICFI>
</FinInstnId>
</DbtrAgt>
<CdtTrfTxInf>
<PmtId>
<InstrId>-7L70QW70E</InstrId>
<EndToEndId>NOTPROVIDED</EndToEndId>
</PmtId>
<PmtTpInf>
<SvcLvl>
<Prtry>7</Prtry>
</SvcLvl>
</PmtTpInf>
<Amt>
<InstdAmt Ccy=”EUR”>2500.00</InstdAmt>
</Amt>
<ChrgBr>SLEV</ChrgBr>
<CdtrAgt>
<FinInstnId>
<BICFI>BPKOPLPW</BICFI>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>PKO KONTRAHENT</Nm>
<PstlAdr>
<StrtNm>Rusinova</StrtNm>
<BldgNb>12</BldgNb>
<Room>34</Room>
<PstCd>82104</PstCd>
<TwnNm>Bratyslawa</TwnNm>
<Ctry>SK</Ctry>
</PstlAdr>
<Id>
<OrgId>
<Othr>
<Id>2120150582</Id>
</Othr>
</OrgId>
</Id>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>PL92124018066033862134791218</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>PKO w eur</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
Objaśnienia wybranych pól:
| Pole | Objaśnienie |
| InitgPty/Id/OrgId/Othr/Id | NIP firmy pobierany z danych podatkowych. |
| NbOfTxs, CtrlSum | Liczba przelewów i ich suma. W nagłówku dotyczą całego pliku, a w bloku płatności danego bloku. |
| ReqdExctnDt/Dt | Data realizacji przelewu w formacie RRRR-MM-DD. |
| EndToEndId | Identyfikator end-to-end, czyli unikalne oznaczenie wiążące płatność w systemie zleceniodawcy, w bankach i u odbiorcy, np. FV/2026/123 albo PRZELEW-000123. Wartość NOTPROVIDED oznacza, że zleceniodawca nie podał takiego identyfikatora. |
| SvcLvl/Prtry | Rodzaj przelewu. Kod 7 oznacza w PKO BP przelew SEPA. Pełna lista kodów jest w rozdziale 6.2. |
| ChrgBr | Sposób rozliczenia kosztów. SLEV oznacza koszty rozliczane według zasad danego rodzaju płatności: zleceniodawca płaci koszty swojego banku, a odbiorca swojego, podobnie jak przy opcji SHA. Wartość ustala system i nie należy jej zmieniać ręcznie, bo bank może odrzucić plik. |
| FinInstnId/BICFI | Identyfikacja instytucji finansowej, najczęściej banku. |
| PstlAdr | Adres pocztowy. W sekcji Dbtr jest to adres zleceniodawcy pobierany z danych firmy, a w sekcji Cdtr adres odbiorcy pobierany z kartoteki kontrahenta. Adres identyfikuje lokalizację podmiotu, IBAN rachunek, a BICFI bank. |
| RmtInf/Ustrd | Tytuł przelewu, czyli opis celu płatności. To inne pole niż EndToEndId. |
1. Różnice między bankami
5.1. Elementy wspólne
- Element główny pliku zawiera informację o standardzie i formacie: urn:iso:std:iso:20022:tech:xsd:pain.001.001.09.
- Plik zawsze składa się z nagłówka GrpHdr, bloków płatności PmtInf i szczegółów przelewów CdtTrfTxInf.
- Przelewy SEPA wymagają kwoty w EUR i rachunku w formacie IBAN.
- Przelew MPP opisuje się w tytule ciągiem /VAT/…/IDC/…/INV/…/TXT/…, opisanym w rozdziale 4.2.
5.2. Oznaczanie rodzaju przelewu
Największa różnica między bankami dotyczy sposobu oznaczania rodzaju przelewu. Sam schemat XML jest wspólny, ale reguły zależą od banku i rodzaju płatności.
a) PKO BP: kody liczbowe
PKO BP stosuje własne kody w polu SvcLvl/Prtry, na poziomie bloku płatności PmtInf lub pojedynczego przelewu CdtTrfTxInf:
- Przelew krajowy,
- Przelew Express Elixir,
- Przelew Split Payment,
- Przelew Split Payment Express Elixir,
- Przelew podatkowy,
- Przelew podatkowy Express Elixir,
- Przelew SEPA,
- Przelew natychmiastowy SEPA,
- Przelew zagraniczny,
- Przelew zagraniczny dowolny, wykrywany automatycznie,
- Przelew zagraniczny SWIFT GPI.
Przelew SEPA można oznaczyć kodem standardowym albo kodem PKO BP:
<PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf>
<PmtTpInf><SvcLvl><Prtry>7</Prtry></SvcLvl></PmtTpInf>
b) ING: kody usług i kategorii ISO
| Pole | Wartość | Zastosowanie |
| SvcLvl/Cd | SEPA lub URGP | Wybrane zlecenia SEPA |
| CtgyPurp/Cd | SSBE | Przelew do ZUS |
| CtgyPurp/Cd | TAXS | Przelew do urzędu skarbowego |
| CtgyPurp/Cd | INTC | Przelew wewnętrzny |
c) mBank
Dokumentacja mBanku rozdziela m.in. przelewy krajowe, Express Elixir, walutowe, zagraniczne, podatkowe, SEPA i EuroEkspres. Wartości i wymagane pola dobiera się według sekcji właściwej dla danego rodzaju zlecenia.
d) Bank Millennium
Bank Millennium stosuje kody tekstowe, np. PLKR, SPKR, FRGN.
5.3. Blok płatności
Blok PmtInf grupuje płatności, ale reguły jego wypełniania różnią się między bankami:
- Data realizacji: pole ReqdExctnDt w formacie RRRR-MM-DD. W ING i mBanku jest wymagane:
<ReqdExctnDt>
<Dt>2026-10-16</Dt>
</ReqdExctnDt>
- Metoda płatności: w ING i mBanku pole PmtMtd ma stałą wartość TRF, a w PKO BP jest zgodne ze strukturą ISO.
- Księgowanie zbiorcze: w PKO BP i mBanku określa je znacznik BtchBookg.
5.4. Koszty przelewu: pole ChrgBr
Dla przelewów SEPA obowiązuje wartość SLEV, czyli koszty według taryfy banku: każda strona płaci koszty swojego banku. Dla przelewów w innych walutach, np. USD, generowana jest sekcja SWIFT, w której koszty mogą mieć wartość DEBT, CRED lub SHAR.
5.5. Wersja formatu
- 001.001.09, wersja nowsza: aktualny standard, używany domyślnie przez PKO BP, ING i mBank.
- 001.001.03, wersja starsza: standard oparty na rekomendacji ZBP 2.0, wciąż wykorzystywany m.in. przez Bank Millennium.
5.6. PKO BP: informacje dodatkowe
- Format pozwala na import przelewów krajowych i zagranicznych, ale nie obsługuje polecenia zapłaty ani SEPA Direct Debit.
- Można wskazać typ księgowania: pojedyncze, czyli analityczne, znacznikiem <BtchBookg>false</BtchBookg> lub zbiorcze znacznikiem <BtchBookg>true</BtchBookg>.
- W jednym pliku można umieścić różne rodzaje przelewów.
- Maksymalny rozmiar pliku to 99 MB.
- Obsługiwane kodowanie: UTF-8 dla iPKO biznes oraz UTF-8 z BOM dla iPKO biznes Integra.
- Plik może mieć dowolną nazwę.
5.7. Dlaczego nie ma jednego pliku dla wszystkich banków
Ze względu na różnice w schematach XSD i w kodowaniu rodzajów przelewów nie da się wygenerować jednego pliku XML pasującego do wszystkich banków. Podczas eksportu należy wybrać format dedykowany bankowi, do którego wgrywana jest paczka, a nie format innego banku.
6.. Lista kontrolna przed eksportem
- Zainstalowany pakiet .NET Desktop Runtime 10 w wersji x86.
- Rachunek bankowy firmy ma uzupełniony kod BIC/ SWIFT, numer rachunku i właściwy format eksportu.
- Kontrahent ma kompletny adres w osobnych polach, poprawny numer rachunku i kod BIC/ SWIFT. Przy przelewach zagranicznych numer rachunku musi być w formacie IBAN.
- Przy MPP: poprawny NIP dostawcy, numer faktury i kwota VAT nie większa niż kwota brutto.
- Przy SEPA: waluta EUR.
- Wybrany format dedykowany bankowi, do którego wczytywany jest plik.













