Pain001

Прямые ответы для казначеев, платёжных операций, инженеров и аудиторов. Вопросы сформулированы так, как их действительно задают. Более глубокие технические детали — в техническом справочнике.


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

Что такое pain.001, в одном абзаце?

pain.001 — это сообщение ISO 20022, которое клиент отправляет своему банку для инициирования кредитовых переводов — XML-преемник форматов вроде SWIFT MT101 и национальных плоских файлов. Прежде чем принять файл, банк проверяет его по схеме и своду правил платёжной схемы. Pain001 (программа) формирует эти файлы из данных, которые у вас уже есть, и доказывает их валидность до отправки.

В чём разница между pain.001 и pain.008?

В направлении движения средств. pain.001 инициирует кредитовые переводы — вы отправляете деньги. pain.008 инициирует прямые дебетования — вы взыскиваете причитающиеся вам средства по мандату. Pain001 генерирует оба: десять версий pain.001 (от .001.03 до .001.12) и pain.008.001.02.

Мы всё ещё отправляем файлы MT101. Насколько срочна миграция?

Срочна. В ноябре 2025 года SWIFT вывел из эксплуатации сообщения MT категорий 1, 2 и 9 для трансграничных межбанковских платёжных инструкций; корпоративные каналы, всё ещё принимающие MT, делают это на усмотрение каждого банка и на заимствованном времени. Загрузчик MT101 преобразует существующие потоки MT101 в проверенный pain.001 без повторного ввода данных.

Что для нас означает дедлайн по структурированным адресам в ноябре 2026 года?

С конца ноября 2026 года полностью неструктурированные почтовые адреса больше не принимаются в трансграничных платежах CBPR+; адреса должны быть структурированными или гибридными — отдельные элементы, такие как город () и страна (), вместо строк свободного текста. Если ваши мастер-данные хранят адреса сплошным текстом, работа лежит в ваших данных, а не в подключении к банку. Начните с этого. Брифинг 2026 подробно описывает сроки.

Сколько стоит Pain001?

Нисколько. Ядро распространяется под двойной лицензией 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 покрыты?

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

Наши данные живут в Excel. В чём подвох?

Excel незаметно превращает строки, похожие на IBAN, в числа. Загрузчик Excel читает .xlsx/.xlsm напрямую и жёстко останавливается, если столбцы IBAN содержат числовые ячейки — порча данных обнаруживается при загрузке, а не в банке.

Как он справляется с пакетом в 500,000 строк?

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


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

Как интегрировать — библиотека, CLI или API?

Все три существуют как полноценные интерфейсы: типизированный Python API, CLI с удобными для CI кодами выхода и микросервис FastAPI (pain001 serve) с эндпоинтами синхронной генерации, асинхронных заданий, проверки здоровья и метрик Prometheus. Под ними один и тот же конвейер валидации, поэтому результаты никогда не расходятся между интерфейсами.

Действительно ли генерация XML защищена от ошибок округления float?

Суммы — это 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 и идемпотентные.

Кто поддерживает Pain001?

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