Прямые ответы для казначеев, платёжных операций, инженеров и аудиторов. Вопросы сформулированы так, как их действительно задают. Более глубокие технические детали приведены в техническом справочнике.
Для руководителей казначейства и финансов#
Что такое 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 без повторного ввода данных.
Что для нас означает требование о структурированных адресах?
Swift планировал перестать принимать полностью неструктурированные почтовые адреса в трансграничных платежах CBPR+ в ноябре 2026 года. В августе 2026 года он отложил этот срок и объявит новый не позднее декабря 2026 года, но само правило не изменилось: адреса должны быть структурированными или гибридными, то есть состоять из отдельных элементов, таких как город (<TwnNm>) и страна (<Ctry>), вместо строк свободного текста. Если ваши мастер-данные хранят адреса сплошным текстом, работа лежит в ваших данных, а не в подключении к банку. Начните с этого. Брифинг 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 <name> --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, а журнал изменений версионируется с каждым релизом.
