Pain001

Konkretne odpowiedzi dla skarbników, zespołów operacji płatniczych, inżynierów i audytorów. Pytania sformułowano tak, jak ludzie naprawdę je zadają. Szczegóły techniczne znajdą Państwo w dokumentacji technicznej.


Dla liderów skarbowości i finansów#

Czym jest pain.001 — w jednym akapicie?

pain.001 to komunikat ISO 20022, który klient wysyła do swojego banku, aby zainicjować polecenia przelewu — XML-owy następca formatów takich jak SWIFT MT101 i krajowe pliki płaskie. Bank waliduje go względem schematu i reguł systemu płatności, zanim go przyjmie. Pain001 (oprogramowanie) tworzy te pliki z danych, które już Państwo posiadają, i dowodzi ich poprawności przed wysłaniem.

Czym różni się pain.001 od pain.008?

Kierunkiem przepływu. pain.001 inicjuje polecenia przelewu — wysyłają Państwo środki na zewnątrz. pain.008 inicjuje polecenia zapłaty — pobierają Państwo należne środki na podstawie mandatu. Pain001 generuje oba: dziesięć wersji pain.001 (od .001.03 do .001.12) oraz pain.008.001.02.

Nadal wysyłamy pliki MT101. Jak pilna jest migracja?

Pilna. SWIFT wycofał komunikaty MT kategorii 1, 2 i 9 dla transgranicznych międzybankowych instrukcji płatniczych w listopadzie 2025 r.; kanały korporacyjne, które wciąż przyjmują MT, robią to według uznania danego banku i na pożyczonym czasie. Loader MT101 konwertuje istniejące przepływy MT101 na zwalidowane pain.001 bez ręcznego przepisywania danych.

Co oznacza dla nas termin adresów ustrukturyzowanych w listopadzie 2026?

Od końca listopada 2026 r. w płatnościach transgranicznych CBPR+ w pełni nieustrukturyzowane adresy pocztowe nie będą już akceptowane; adresy muszą być ustrukturyzowane lub hybrydowe — odrębne elementy, takie jak miejscowość () i kraj (), zamiast wierszy dowolnego tekstu. Jeśli Państwa dane podstawowe przechowują adresy jako bloki tekstu, praca leży w danych, nie w połączeniu z bankiem. Od tego warto zacząć. Raport 2026 szczegółowo omawia harmonogram.

Ile kosztuje Pain001?

Nic. Rdzeń jest podwójnie licencjonowany Apache-2.0 / MIT; pakiety towarzyszące — Apache-2.0. Użycie komercyjne, modyfikacja i redystrybucja są dozwolone. Dla porównania skali: sam SDK translacyjny SWIFT jest wyceniany na €10,000–30,000 rocznie.


Dla operacji płatniczych#

Dlaczego banki odrzucają pliki płatności?

Cztery powtarzające się przyczyny: naruszenia schematu (zły element, zła wersja, zła przestrzeń nazw), błędne identyfikatory (niepoprawne sumy kontrolne IBAN, zniekształcone BIC-y), błędne sumy kontrolne (NbOfTxs / CtrlSum niezgodne z transakcjami) oraz znaki spoza łacińskiego zestawu ISO 20022. Pain001 sprawdza wszystkie cztery, zanim plik powstanie: walidacja JSON Schema dla każdego rekordu, kontrole mod-97 dla IBAN i ISO 9362 dla BIC, przeliczone sumy kontrolne, transliteracja zestawu znaków i końcowa walidacja XSD wyrenderowanego XML.

Czy możemy zwalidować plik bez generowania czegokolwiek?

Tak — pain001 --dry-run (albo podkomenda validate, albo POST /api/v1/validate). Kod wyjścia 0 oznacza plik poprawny; 1 — walidacja nie powiodła się, z błędami na poziomie pól. Można to wpiąć w CI lub listę kontrolną przed wysyłką.

Które zbiory reguł SEPA są obsługiwane?

Wbudowanych jest pięć zbiorów reguł: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) oraz transgraniczne polecenie przelewu (xborder-ct). Użycie --scheme --explain pokazuje każdą regułę — zaliczoną lub nie.

Nasze dane są w Excelu. W czym haczyk?

Excel po cichu zamienia ciągi przypominające IBAN na liczby. Loader Excel odczytuje .xlsx/.xlsm bezpośrednio i twardo zatrzymuje się, jeśli kolumny IBAN zawierają komórki liczbowe — uszkodzenie danych jest wychwytywane przy wczytaniu, a nie w banku.

Jak radzi sobie z partią 500,000 wierszy?

--streaming przetwarza dane wejściowe w porcjach o ograniczonym zużyciu pamięci (domyślnie 1,000 transakcji), z których każda trafia do osobnego pliku XML z poprawnie przeliczonymi sumami kontrolnymi. REST API oferuje z tego samego powodu POST /api/v1/generate/async z odpytywaniem o stan zadania.


Dla inżynierów i architektów#

Jak to zintegrować — jako bibliotekę, CLI czy API?

Wszystkie trzy warianty istnieją jako pełnoprawne interfejsy: typowane API Python, CLI z kodami wyjścia przyjaznymi dla CI oraz mikrousługa FastAPI (pain001 serve) z endpointami synchronicznymi, zadań asynchronicznych, health i metryk Prometheus. Pod spodem działa ten sam potok walidacji, więc wyniki nigdy się nie rozjeżdżają.

Czy generowanie XML jest naprawdę odporne na zaokrąglenia zmiennoprzecinkowe?

Kwoty są typu decimal.Decimal od początku do końca generowania i walidacji schematu — parsowane jako dokładne liczby dziesiętne, sumowane jako dokładne liczby dziesiętne, renderowane bez reprezentacji zmiennoprzecinkowej. Sumy kontrolne są przeliczane na podstawie zwalidowanych rekordów, nigdy nie są przyjmowane z danych wejściowych.

Jak wygląda profil bezpieczeństwa?

Całe parsowanie XML przechodzi przez defusedxml (co blokuje ataki XXE i rozwijanie encji); w drzewie zależności nie ma lxml. Dane wejściowe przechodzą walidator ścieżek (path traversal). Obraz Docker działa bez uprawnień roota. Dla wydań rdzenia generowany jest SBOM CycloneDX, a wykrywanie wtyczek zewnętrznych można całkowicie wyłączyć zmienną PAIN001_DISABLE_PLUGINS=1.

Jak egzekwowana jest jakość?

100% pokrycia linii i gałęzi jako twarda bramka CI dla rdzenia (weryfikowalnie: 3,828 linii, 926 gałęzi przy 100%), ścisłe mypy, 100% pokrycia docstringów, linting bezpieczeństwa Bandit i pip-audit oraz skanowanie CodeQL. Pakiety towarzyszące utrzymują tę samą dyscyplinę 100% pokrycia.

Czy możemy rozszerzyć go o format własnościowy?

Tak — dostępne są cztery grupy punktów wejścia dla wtyczek (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). Loader Excel sam jest wtyczką korzystającą z publicznego protokołu, więc służy zarazem jako implementacja referencyjna.


Dla audytorów i compliance#

Czy możemy odtworzyć plik wygenerowany w zeszłym kwartale?

Tak. Wystarczy przypiąć wersję pakietu i odtworzyć te same dane wejściowe — wynik jest deterministyczny. Ponieważ narzędzia są open source, ślad audytowy sięga samej ścieżki wykonania kodu — a nie tylko oświadczenia dostawcy.

Czy dane płatnicze opuszczają nasze środowisko?

Nie. Każdy komponent — CLI, biblioteka, REST API, serwer MCP, LSP — działa lokalnie. Nie ma telemetrii, wywołań SaaS ani zewnętrznej usługi walidacji. Serwer MCP komunikuje się wyłącznie przez stdio, a wszystkie jego 17 narzędzi jest oznaczonych jako tylko do odczytu i idempotentne.

Kto utrzymuje Pain001?

Sebastien Rousseau, lider inżynierii fintech z Londynu, wraz ze społecznością współtwórców. Rozwój odbywa się publicznie na GitHub, wydania są publikowane na PyPI, a changelog jest wersjonowany z każdym wydaniem.