Питання

Pain001: питання казначейства, операцій та аудиту

Прямі відповіді для казначеїв, платіжних операцій, інженерів та аудиторів, сформульовані так, як їх насправді ставлять.

Прямі відповіді для казначеїв, платіжних операцій, інженерів та аудиторів. Питання сформульовані так, як їх насправді ставлять. Глибші технічні деталі шукайте в технічному довіднику.


Для керівників казначейства та фінансів#

pain.001 є повідомленням ISO 20022, яке клієнт надсилає своєму банку для ініціювання кредитових переказів. Це XML-наступник форматів на кшталт SWIFT MT101 і національних плоских файлів. Перш ніж прийняти файл, банк перевіряє його за схемою та збірником правил платіжної схеми. Pain001 (програма) формує ці файли з даних, які ви вже маєте, і доводить їхню валідність до подання.

У напрямку руху коштів. pain.001 ініціює кредитові перекази: ви надсилаєте гроші. pain.008 ініціює прямі дебети: ви стягуєте належні вам кошти за мандатом. Pain001 генерує обидва: десять версій pain.001 (від .001.03 до .001.12) та pain.008.001.02.

Термінова. У листопаді 2025 року SWIFT вивів з експлуатації повідомлення MT категорій 1, 2 і 9 для транскордонних міжбанківських платіжних інструкцій; корпоративні канали, що досі приймають MT, роблять це на розсуд кожного банку та в позичений час. Завантажувач MT101 перетворює наявні потоки MT101 на перевірений pain.001 без повторного введення даних.

Swift планував припинити приймати повністю неструктуровані поштові адреси в транскордонних платежах CBPR+ у листопаді 2026 року. У серпні 2026 року він відклав цей термін і оголосить новий не пізніше грудня 2026 року, але саме правило не змінилося: адреси мають бути структурованими або гібридними, тобто використовувати окремі елементи, як-от місто (<TwnNm>) і країна (<Ctry>), замість рядків вільного тексту. Якщо ваші майстер-дані зберігають адреси суцільним текстом, робота лежить у ваших даних, а не в підключенні до банку. Почніть звідти. Брифінг 2026 детально описує терміни.

Нічого. Ядро має подвійну ліцензію Apache-2.0 / MIT; супутні пакети мають ліцензію Apache-2.0. Комерційне використання, модифікація та розповсюдження дозволені. Для масштабу: лише SDK трансляції від SWIFT коштує за прайсом €10,000–30,000 на рік.


Для платіжних операцій#

Чотири повторювані причини: порушення схеми (не той елемент, не та версія, не той простір імен), погані ідентифікатори (помилки контрольної суми IBAN, некоректні BIC), розбіжні контрольні підсумки (NbOfTxs / CtrlSum не збігаються з транзакціями) та символи поза латинським набором ISO 20022. Pain001 перевіряє всі чотири до появи файлу: валідація JSON Schema для кожного запису, перевірки mod-97 для IBAN та ISO 9362 для BIC, переобчислення контрольних підсумків, транслітерація набору символів і фінальна валідація сформованого XML за XSD.

Так. Використовуйте pain001 --dry-run (або підкоманда validate, або POST /api/v1/validate). Код виходу 0 означає валідність; 1 означає, що валідація не пройдена, з помилками на рівні полів. Вбудуйте це в CI або в чек-лист перед поданням.

П'ять збірників правил схем вбудовано: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) і транскордонний кредитовий переказ (xborder-ct). Використовуйте --scheme <name> --explain, щоб побачити кожне пройдене чи непройдене правило.

Excel непомітно перетворює IBAN-подібні рядки на числа. Завантажувач Excel читає .xlsx/.xlsm напряму та жорстко зупиняється, якщо стовпці IBAN містять числові комірки, тож пошкодження виявляється під час завантаження, а не в банку.

--streaming обробляє вхід блоками з обмеженням пам'яті (типово 1,000 транзакцій); кожен блок виводиться окремим XML-файлом із коректно переобчисленими контрольними підсумками. REST API з тієї ж причини пропонує POST /api/v1/generate/async з опитуванням завдань.


Для інженерів та архітекторів#

Усі три існують як повноцінні інтерфейси: типізований Python API, CLI зі зручними для CI кодами виходу та мікросервіс FastAPI (pain001 serve) з ендпоінтами синхронної генерації, асинхронних завдань, перевірки стану та метрик Prometheus. Під ними один і той самий конвеєр валідації, тому результати ніколи не розходяться між інтерфейсами.

Суми є decimal.Decimal від початку до кінця в генерації та перевірці правил схем: розбираються як точні десяткові числа, підсумовуються як точні десяткові числа, записуються без рухомого подання. Контрольні підсумки переобчислюються з перевірених записів і ніколи не беруться на віру з вхідних даних.

Увесь розбір XML іде через defusedxml (що блокує атаки XXE та розширення сутностей); у дереві залежностей немає lxml. Вхідні дані проходять валідатор обходу шляхів. Образ Docker працює не від root. Для релізів ядра генерується CycloneDX SBOM, а виявлення сторонніх плагінів можна повністю вимкнути через PAIN001_DISABLE_PLUGINS=1.

100% покриття рядків і гілок як жорсткий CI-гейт на ядрі (перевірювано: 3,828 рядків, 926 гілок на 100%), суворий mypy, 100% покриття docstring, лінтинг безпеки Bandit і pip-audit та сканування CodeQL. Супутні пакети дотримуються тієї ж дисципліни 100% покриття.

Так, через чотири групи точок входу для плагінів (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). Завантажувач Excel сам є плагіном на публічному протоколі, тож водночас слугує еталонною реалізацією.


Для аудиторів і комплаєнсу#

Так. Зафіксуйте версію пакета, повторіть той самий ввід, і результат буде детермінований. Оскільки інструментарій має відкритий код, аудиторський слід сягає самого коду, а не обмежується запевненням постачальника.

Ні. Кожен компонент (CLI, бібліотека, REST API, сервер MCP, LSP) виконується локально. Немає телеметрії, звернень до SaaS і зовнішнього сервісу валідації. Сервер MCP працює лише через stdio, і всі його 17 інструментів позначені як read-only та ідемпотентні.

Sebastien Rousseau, лондонський керівник фінтех-інжинірингу, разом з учасниками спільноти. Розробка відкрита на GitHub, релізи публікуються в PyPI, а журнал змін версіонується з кожним релізом.