Pain001

Niniejsza dokumentacja opisuje interfejs wiersza poleceń, API Python, mikrousługę REST oraz potok walidacji dla pain001 v0.0.57. Każda wymieniona tu flaga, endpoint i zachowanie pochodzi z dostarczonego kodu, a nie z planów.

Pain001 obsługuje 11 definicji komunikatów ISO 20022: od pain.001.001.03 do pain.001.001.12 (Customer Credit Transfer Initiation, dziesięć wersji) oraz pain.008.001.02 (Customer Direct Debit Initiation).


1. Interfejs wiersza poleceń#

Program pain001 grupuje funkcje w podkomendy. Uruchomienie go wyłącznie z flagami generowania wywołuje niejawnie generate, dzięki czemu istniejąca automatyzacja działa bez zmian.

Podkomenda Przeznaczenie
generate Konwertuje plik danych na XML ISO 20022 zwalidowany względem schematu (komenda domyślna).
validate Waliduje dane wejściowe bez zapisywania XML.
versions [--json] Wyświetla wszystkie 11 obsługiwanych definicji komunikatów.
inspect [--json] Pokazuje pola wymagane i opcjonalne dla danego typu komunikatu.
init [-o DIR] Tworzy startowy szablon CSV dla typu komunikatu.
serve [--host] [--port] [--reload] Uruchamia mikrousługę REST FastAPI (wymaga dodatku api).
mcp Uruchamia wbudowany serwer Model Context Protocol (5 narzędzi; pełny serwer z 17 narzędziami jest dostarczany jako pain001-mcp).
plugins list / show / disable Wyświetla wykryte wtyczki (loadery, walidatory, schematy, writery) i zarządza nimi.

Opcje generate

Flaga Opis
-t, --xml-message-type Definicja komunikatu, np. pain.001.001.09.
-d, --data Dane wejściowe: .csv, .json, .jsonl, .db / .sqlite, .parquet lub zaszyfrowane PGP .gpg / .asc.
-o, --output-dir Katalog, do którego trafia wygenerowany XML.
-m, --template / -s, --schema Zastępuje dołączony szablon Jinja2 lub schemat XSD.
-c, --config Wczytuje wartości domyślne z profilu konfiguracji (--profile, --show-config).
--dry-run (alias --validate-only) Waliduje dane wejściowe względem JSON Schema, XSD i reguł schematu płatności bez zapisywania wyniku.
--scheme Wymusza reguły schematu płatności: sepa-sct, sepa-inst, sepa-sdd, sepa-b2b lub xborder-ct.
--explain --scheme-format {text,json} Raportuje każdą regułę schematu — zaliczoną lub nie — w formie czytelnej dla człowieka lub maszyny.
--streaming / --chunk-size Przetwarzanie w porcjach o ograniczonym zużyciu pamięci dla dużych partii (domyślnie 1,000 transakcji na porcję; każda porcja staje się osobnym plikiem XML z przeliczonymi NbOfTxs i CtrlSum).
--emit-metrics Emituje odczytywalne maszynowo metryki uruchomienia dla potoków obserwowalności.

Kody wyjścia są przyjazne dla CI: 0 — sukces, 1 — błąd walidacji, 2 — błąd użycia.


2. API Python#

from pain001.core.core import process_files

# Generate a validated pain.001.001.09 file from CSV
process_files(
    xml_message_type="pain.001.001.09",
    xml_template_file_path="template.xml",
    xsd_schema_file_path="schema.xsd",
    data_file_path="payments.csv",
    output_dir="out",
)

Każdy wygenerowany dokument przechodzi przez trzy warstwy, zanim zostanie zapisany:

  1. Walidacja danych wejściowych — każdy rekord jest sprawdzany względem JSON Schema danego typu komunikatu, z normalizacją aliasów pól oraz kontrolą składni IBAN/BIC.
  2. Reguły schematu płatności (opcjonalnie) — SEPA SCT, SEPA Instant, SEPA SDD Core, SEPA B2B lub reguły transgranicznych poleceń przelewu.
  3. Walidacja XSD — wyrenderowany XML jest walidowany względem oficjalnego schematu ISO 20022 za pomocą xmlschema, zanim choć jeden bajt trafi na dysk.

Kwoty pieniężne są przetwarzane jako decimal.Decimal podczas generowania XML i walidacji schematu — nigdy jako liczby zmiennoprzecinkowe IEEE 754 — a sumy kontrolne NbOfTxs / CtrlSum są przeliczane na podstawie zwalidowanych rekordów, a nie przyjmowane z danych wejściowych.

Poza generowaniem pain.001 biblioteka podstawowa zawiera również parser i generator raportów statusu pain.002 (pozwalający odczytać odpowiedź banku o przyjęciu lub odrzuceniu) oraz parser i generator wyciągów camt.053 do uzgodnień na koniec dnia, a także VersionMapper, który migruje rekordy między wersjami komunikatów.


3. Mikrousługa REST#

pip install "pain001[api]"
pain001 serve --host 0.0.0.0 --port 8000

Wszystkie endpointy są zamontowane pod /api/v1 (z niewersjonowanym aliasem /api):

Metoda i ścieżka Przeznaczenie
GET /api/v1/health Sonda żywotności (liveness).
POST /api/v1/validate Waliduje rekordy; zwraca błędy na poziomie pól.
POST /api/v1/generate Synchroniczne generowanie XML.
POST /api/v1/generate/async Kolejkuje dużą partię do generowania w tle.
GET /api/v1/status/{job_id} Sprawdza stan zadania asynchronicznego.
GET /api/v1/download/{job_id} Pobiera gotowy XML.
DELETE /api/v1/jobs/{job_id} Usuwa zakończone zadanie.
GET /metrics Metryki Prometheus.

Interaktywna dokumentacja jest dostępna pod /api/docs (Swagger UI), /api/redoc i /api/reference (Scalar), a dokument OpenAPI pod /openapi.json.


4. Normalizacja danych wejściowych#

Pain001 przekształca rzeczywiste eksporty w poprawne rekordy jeszcze przed walidacją:

  • Aliasy pól — typowe nazwy kolumn z systemów ERP są mapowane na pola kanoniczne (na przykład amountpayment_amount).
  • Normalizacja IBAN / BIC — usunięcie spacji, ujednolicenie wielkości liter, a następnie kontrola (mod-97 wg ISO 13616 dla IBAN, struktura wg ISO 9362 dla BIC).
  • Daty — parsowanie dat wykonania w formacie ISO 8601 YYYY-MM-DD.
  • Kwoty — przetwarzane przez decimal.Decimal; zniekształcone kwoty nie przechodzą walidacji, zamiast być po cichu zaokrąglane.
  • Zestaw znaków — funkcje transliteracji sprowadzają treść do łacińskiego zestawu znaków ISO 20022 akceptowanego przez SWIFT i SEPA.

5. Architektura wtyczek#

Pakiet można rozszerzać poprzez cztery grupy punktów wejścia: pain001.loaders, pain001.validators, pain001.schemes i pain001.writers. pain001-loader-xlsx rejestruje się przez ten mechanizm i jest wykrywany automatycznie po instalacji; pain001-loader-mt101 to samodzielna biblioteka parsująca używana bezpośrednio (oraz przez narzędzie convert_mt101 serwera MCP). Wyłącznik awaryjny — PAIN001_DISABLE_PLUGINS=1 — całkowicie wyłącza wykrywanie wtyczek zewnętrznych w środowiskach o zaostrzonych restrykcjach.


6. Bramki jakości#

Biblioteka podstawowa jest rozwijana według ścisłych, weryfikowalnych bramek: 100% pokrycia linii i gałęzi wymuszane w CI (--cov-fail-under=100), ścisłe typowanie mypy, 100% pokrycia docstringów oraz linting bezpieczeństwa (Bandit, pip-audit). Dla każdej kompilacji wydania generowany jest SBOM w formacie CycloneDX.

Dalsze materiały: przewodnik instalacji, serwer MCP dla agentów AI oraz słownik płatności.