ISO 20022 wyjaśnione

Czym jest pain.001? Inicjowanie przelewów w ISO 20022

Komunikat ISO 20022, którym firma zleca bankowi przelewy: czym jest, jak jest zbudowany, której wersji użyć, oraz pełny przykład zgodny z oficjalnym schematem.

pain.001 to komunikat ISO 20022, którym firma zleca swojemu bankowi jeden lub więcej przelewów. Jego pełna nazwa to Customer Credit Transfer Initiation: "pain" to rodzina komunikatów inicjowania płatności, .001 to numer komunikatu, a przyrostek, na przykład pain.001.001.09, oznacza wersję. To XML weryfikowany względem oficjalnego schematu (XSD), który zastępuje bankowe formaty CSV i tekstowy komunikat SWIFT MT101.

pain.001 w minutę#

  • Kto go wysyła: firma (dłużnik lub działający w jego imieniu agent) wysyła go do własnego banku (banku dłużnika).
  • Co zawiera: jedną lub więcej paczek przelewów, każdą z rachunkiem dłużnika, żądaną datą wykonania i dowolną liczbą płatności na rzecz wierzycieli.
  • Co wraca: bank odpowiada komunikatem pain.002, czyli Customer Payment Status Report, akceptując lub odrzucając plik albo poszczególne transakcje z kodami przyczyn ISO.
  • Co dzieje się dalej: po akceptacji bank zamienia każde zlecenie na komunikaty międzybankowe, takie jak pacs.008, których firma nigdy nie widzi.
  • Gdzie się go używa: w przelewach SEPA zgodnie z regulaminami EPC, w płatnościach transgranicznych w sieci Swift w ramach CBPR+ (pain.001.001.09) oraz w wielu systemach krajowych. Korpus przykładów Pain001 obejmuje 42 scenariusze na 17 rynkach.

Jak zbudowany jest komunikat pain.001#

Każda wersja ma ten sam trzypoziomowy szkielet wewnątrz elementu <CstmrCdtTrfInitn>.

Poziom Element Co zawiera
1 <GrpHdr> Group Header (nagłówek grupy) Identyfikator komunikatu, znacznik czasu utworzenia, liczba transakcji (NbOfTxs), suma kontrolna (CtrlSum), strona inicjująca
2 <PmtInf> Payment Information (informacje o płatności) Jedna paczka: metoda płatności, żądana data wykonania, dłużnik, rachunek i bank dłużnika, podział kosztów
3 <CdtTrfTxInf> Credit Transfer Transaction (transakcja przelewu) Jedna płatność: referencja end-to-end, kwota i waluta, wierzyciel, rachunek i bank wierzyciela, informacja o płatności

Plik może zawierać kilka paczek <PmtInf>, a każda paczka wiele płatności <CdtTrfTxInf>. NbOfTxs i CtrlSum występują zarówno na poziomie pliku, jak i paczki, i muszą zgadzać się z płatnościami, które liczą; to jeden z najczęstszych powodów odrzucenia pliku przez bank.

Pełny przykład pain.001#

To pojedynczy przelew SEPA w wersji pain.001.001.09, przejęty bez zmian z korpusu przykładów Pain001. Przechodzi walidację względem oficjalnego XSD ISO 20022. Strony, numery IBAN i kody BIC są fikcyjne.

<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>OML-SCT-20260921</MsgId>
      <CreDtTm>2026-09-21T12:00:00</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <InitgPty>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>SCT-20260921-IT-01</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <BtchBookg>false</BtchBookg>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>
        <Dt>2026-09-22</Dt>
      </ReqdExctnDt>
      <Dbtr>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>IT48T78971134594OGDKY5VXE41</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BICFI>TLAOIT60</BICFI>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>OML-2026-0921-01</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">2200.00</InstdAmt>
        </Amt>
        <CdtrAgt>
          <FinInstnId>
            <BICFI>MHXHITI0</BICFI>
          </FinInstnId>
        </CdtrAgt>
        <Cdtr>
          <Nm>Fonderia Bresciana Srl</Nm>
          <PstlAdr>
            <PstCd>25121</PstCd>
            <TwnNm>Brescia</TwnNm>
            <Ctry>IT</Ctry>
          </PstlAdr>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>IT23J14887404856NF3794IGWXN</IBAN>
          </Id>
        </CdtrAcct>
        <RmtInf>
          <Ustrd>Fattura 117/2026</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Sprawdź własne dane w demie w przeglądarce: tworzy ono plik pain.001 z pliku CSV i weryfikuje go względem oficjalnego schematu, a dane nie opuszczają Twojego komputera.

Wersje pain.001#

ISO publikuje nową wersję, gdy zmienia się model komunikatu. Banki i systemy akceptują określone wersje, więc wysyłasz tę, którą wskazuje dokumentacja kanału Twojego banku.

Wersja Uwagi
pain.001.001.03 Sprawdzony standard SEPA i CGI; identyfikuje banki za pomocą <BIC>
.04, .05, .06, .07, .08 Wersje utrzymaniowe używane przez określone kanały
pain.001.001.09 Wersja z 2019 roku wybrana przez CBPR+ dla sieci Swift; identyfikuje banki za pomocą <BICFI>, dodaje obsługę LEI i UETR
.10, .11, .12 Udoskonalenia po 2019 roku
pain.001.001.13 Opublikowana przez ISO 19 marca 2026; dodaje opcjonalny unikalny identyfikator transakcji (UnqTxIdr)

Macierz zgodności pokazuje, które wersje Pain001 generuje, weryfikuje i między którymi migruje dane.

Komunikat Kierunek Cel
pain.001 Firma do swojego banku Zleca przelewy (środki wypływają)
pain.002 Bank do firmy Informuje o statusie pain.001 lub pain.008: zaakceptowany, częściowo zaakceptowany lub odrzucony, z kodami przyczyn
pain.008 Firma do swojego banku Zleca polecenia zapłaty (pobiera środki na podstawie mandatu)
pacs.008 Bank do banku Przelew międzybankowy, w który zamienia się zlecenie pain.001
MT101 Firma lub bank, przez Swift Starszy tekstowy komunikat "Request for Transfer", który zastępuje pain.001. W sierpniu 2026 Swift odroczył wycofanie międzybankowego przekazywania MT101 (Swift); zobacz MT101 do pain.001

Słowniczek wyjaśnia pozostałe pojęcia ISO 20022 prostym językiem.

Dlaczego banki odrzucają pliki pain.001#

Plik może być poprawnym XML-em, a mimo to zostać odrzucony. Kontrole nakładają się warstwami:

  1. Schemat: plik musi przejść walidację względem oficjalnego XSD dla swojej wersji.
  2. Jakość danych: numery IBAN mają poprawne cyfry kontrolne, kody BIC są prawidłowo zbudowane, daty i kwoty są poprawne, a NbOfTxs i CtrlSum zgadzają się z płatnościami.
  3. Reguły systemu: SEPA, CBPR+ i systemy krajowe dodają własne ograniczenia, na przykład dozwolony zestaw znaków lub ustrukturyzowany adres pocztowy.
  4. Profil i kanał Twojego banku: każdy bank publikuje własne wytyczne stosowania, uzupełniające reguły systemu.

Pain001 sprawdza pierwsze trzy warstwy, zanim plik trafi do banku, i jasno mówi, że czwartą musi potwierdzić bank.

Jak utworzyć plik pain.001#

  • Z arkusza kalkulacyjnego: Excel do pain.001 zamienia listę płatności w Excelu lub CSV w zweryfikowany plik.
  • W przeglądarce: demo generuje i weryfikuje plik lokalnie, bez przesyłania danych.
  • Z kodu lub wiersza poleceń: zainstaluj otwartoźródłową bibliotekę pain001 i uruchom:
pain001 -t pain.001.001.09 -d payments.csv -o out/

Dokumentacja techniczna opisuje każdą opcję, a FAQ odpowiada na pytania, które najczęściej zadają zespoły skarbu, operacji i inżynierii.

Źródła#