Pain001

Klare Antworten für Treasurer, Zahlungsverkehrsbetrieb, Ingenieure und Prüfer. Die Fragen sind so formuliert, wie sie tatsächlich gestellt werden. Für tiefere technische Details siehe die Technische Referenz.


Für Treasury- und Finanzverantwortliche#

Was ist pain.001, in einem Absatz?

pain.001 ist die ISO 20022-Nachricht, die ein Kunde an seine Bank sendet, um Überweisungen zu beauftragen — der XML-Nachfolger von Formaten wie SWIFT MT101 und inländischen Flachdateien. Ihre Bank validiert sie gegen ein Schema und ein Scheme-Regelwerk, bevor sie sie annimmt. Pain001 (die Software) erzeugt diese Dateien aus den Daten, die Sie bereits haben, und weist ihre Gültigkeit nach, bevor Sie sie einreichen.

Was ist der Unterschied zwischen pain.001 und pain.008?

Die Richtung des Geldflusses. pain.001 löst Überweisungen aus — Sie schieben Geld hinaus. pain.008 löst Lastschriften aus — Sie ziehen Ihnen geschuldetes Geld auf Basis eines Mandats ein. Pain001 erzeugt beides: zehn Versionen von pain.001 (.001.03 bis .001.12) und pain.008.001.02.

Wir senden noch MT101-Dateien. Wie dringend ist die Migration?

Dringend. SWIFT hat die MT-Nachrichten der Kategorien 1, 2 und 9 für grenzüberschreitende Interbanken-Zahlungsaufträge im November 2025 abgeschaltet; Firmenkundenkanäle, die MT noch akzeptieren, tun dies im Ermessen der jeweiligen Bank und auf Zeit. Der MT101-Loader wandelt bestehende MT101-Flüsse in validiertes pain.001 um, ohne dass etwas neu erfasst werden muss.

Was bedeutet die Frist für strukturierte Adressen im November 2026 für uns?

Ab Ende November 2026 werden vollständig unstrukturierte Postadressen in grenzüberschreitenden CBPR+-Zahlungen nicht mehr akzeptiert; Adressen müssen strukturiert oder hybrid sein — diskrete Elemente wie Ort () und Land () statt Freitextzeilen. Wenn Ihre Stammdaten Adressen als Textblöcke halten, liegt die Arbeit in Ihren Daten, nicht in Ihrer Bankanbindung. Fangen Sie dort an. Das Briefing 2026 behandelt den Zeitplan im Detail.

Was kostet Pain001?

Nichts. Der Kern steht unter der Doppellizenz Apache-2.0 / MIT; die Begleitpakete unter Apache-2.0. Kommerzielle Nutzung, Modifikation und Weiterverbreitung sind sämtlich erlaubt. Zur Einordnung: Allein das Übersetzungs-SDK von SWIFT wird mit €10,000–30,000 pro Jahr gelistet.


Für den Zahlungsverkehrsbetrieb#

Warum lehnen Banken Zahlungsdateien ab?

Vier wiederkehrende Ursachen: Schemaverletzungen (falsches Element, falsche Version, falscher Namensraum), fehlerhafte Identifikatoren (IBAN-Prüfsummenfehler, missgebildete BICs), inkonsistente Kontrollsummen (NbOfTxs / CtrlSum passen nicht zu den Transaktionen) und Zeichen außerhalb des lateinischen ISO 20022-Zeichensatzes. Pain001 prüft alle vier, bevor eine Datei überhaupt existiert: JSON-Schema-Validierung pro Datensatz, mod-97-IBAN- und ISO 9362-BIC-Prüfungen, neu berechnete Kontrollsummen, Zeichensatz-Transliteration und abschließende XSD-Validierung des gerenderten XML.

Können wir eine Datei validieren, ohne etwas zu erzeugen?

Ja — pain001 --dry-run (oder der Subcommand validate, oder POST /api/v1/validate). Exit-Code 0 bedeutet gültig; 1 bedeutet, die Validierung ist mit Fehlern auf Feldebene fehlgeschlagen. Binden Sie es in die CI oder eine Checkliste vor der Einreichung ein.

Welche SEPA-Regelwerke sind abgedeckt?

Fünf Scheme-Regelwerke sind eingebaut: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) und grenzüberschreitende Überweisung (xborder-ct). Mit --scheme --explain sehen Sie jede bestandene oder verletzte Regel.

Unsere Daten liegen in Excel. Wo ist der Haken?

Excel wandelt IBAN-ähnliche Zeichenketten stillschweigend in Zahlen um. Der Excel-Loader liest .xlsx/.xlsm direkt und bricht hart ab, wenn IBAN-Spalten numerische Zellen enthalten — die Verfälschung wird beim Laden erkannt, nicht erst bei der Bank.

Wie wird ein Stapel mit 500,000 Zeilen verarbeitet?

--streaming verarbeitet die Eingabe in speicherbegrenzten Blöcken (standardmäßig 1,000 Transaktionen), von denen jeder als eigene XML-Datei mit korrekt neu berechneten Kontrollsummen ausgegeben wird. Die REST-API bietet aus demselben Grund POST /api/v1/generate/async mit Job-Polling.


Für Ingenieure und Architekten#

Wie integrieren wir es — Bibliothek, CLI oder API?

Alle drei existieren als gleichwertige Schnittstellen: eine typisierte Python-API, eine CLI mit CI-freundlichen Exit-Codes und ein FastAPI-Microservice (pain001 serve) mit Endpunkten für synchrone Verarbeitung, asynchrone Jobs, Health und Prometheus-Metriken. Darunter liegt dieselbe Validierungspipeline, sodass die Ergebnisse zwischen den Schnittstellen nie auseinanderlaufen.

Ist die XML-Generierung tatsächlich sicher vor Gleitkomma-Rundung?

Beträge sind in Generierung und Scheme-Validierung durchgängig decimal.Decimal — als exakte Dezimalzahlen geparst, als exakte Dezimalzahlen summiert, ohne Gleitkommadarstellung gerendert. Kontrollsummen werden aus validierten Datensätzen neu berechnet und niemals aus der Eingabe übernommen.

Wie steht es um die Sicherheit?

Das gesamte XML-Parsing läuft über defusedxml (blockiert XXE- und Entity-Expansion-Angriffe); es gibt kein lxml im Abhängigkeitsbaum. Eingaben durchlaufen einen Path-Traversal-Validator. Das Docker-Image läuft ohne Root-Rechte. Für Kern-Releases wird eine CycloneDX-SBOM erzeugt, und die Erkennung von Drittanbieter-Plugins lässt sich mit PAIN001_DISABLE_PLUGINS=1 komplett deaktivieren.

Wie wird Qualität durchgesetzt?

100% Zeilen- und Zweigabdeckung als harte CI-Schranke für den Kern (nachprüfbar: 3,828 Zeilen, 926 Zweige bei 100%), striktes mypy, 100% Docstring-Abdeckung, Sicherheits-Linting mit Bandit und pip-audit sowie CodeQL-Scanning. Die Begleitpakete folgen derselben 100%-Abdeckungsdisziplin.

Können wir es für ein proprietäres Format erweitern?

Ja — vier Plugin-Entry-Point-Gruppen (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). Der Excel-Loader ist selbst ein Plugin auf Basis des öffentlichen Protokolls und dient damit zugleich als Referenzimplementierung.


Für Prüfer und Compliance#

Können wir eine Datei reproduzieren, die im letzten Quartal erzeugt wurde?

Ja. Fixieren Sie die Paketversion, spielen Sie dieselbe Eingabe erneut ein, und die Ausgabe ist deterministisch. Da die Toolchain Open Source ist, reicht der Audit-Trail bis in den Codepfad selbst — nicht nur bis zu einer Herstellerbescheinigung.

Verlassen Zahlungsdaten unsere Umgebung?

Nein. Jede Komponente — CLI, Bibliothek, REST-API, MCP-Server, LSP — wird lokal ausgeführt. Es gibt keine Telemetrie, keinen SaaS-Rückruf, keinen externen Validierungsdienst. Der MCP-Server spricht ausschließlich stdio, und alle 17 seiner Tools sind als schreibgeschützt und idempotent annotiert.

Wer pflegt Pain001?

Sebastien Rousseau, ein in London ansässiger Fintech-Engineering-Leiter, gemeinsam mit Community-Beitragenden. Die Entwicklung ist öffentlich auf GitHub, Releases werden auf PyPI veröffentlicht, und das Änderungsprotokoll wird mit jedem Release versioniert.