Create your own
Lesson illustration

Платёжные инструкции и банковские подтверждения: ключевые различия

Здравствуйте. В прошлом уроке мы разделили участников банковского и токенизационного контуров: компания A может быть плательщиком, организация S — получателем фиата и эмитентом, а R — конечным держателем цифрового актива. Теперь нужно столь же строго разделить события и их доказательства.

Это критично для серверного моста «банк → токен»: факт, что компания отправила поручение, банк передал межбанковское сообщение или сеть приняла пакет, ещё не означает, что S получила деньги. В этой схеме выпуск либо доставка токена должны зависеть от заранее определённого и проверяемого факта зачисления, а не от скриншота, QR-кода, хеша или статуса «в обработке».


Одна коммерческая операция — несколько разных событий

Возьмём базовую ситуацию:

  • компания A даёт своему банку Bank A поручение перевести EUR;
  • Bank A и, возможно, банк-корреспондент передают инструкцию по банковской цепочке;
  • банк получателя Bank D зачисляет средства на счёт организации S;
  • только после этого по правилам продукта может начаться выпуск или доставка цифрового актива для R.

Это не одна «транзакция» в техническом смысле. Это цепочка утверждений с разной силой:

СобытиеКто сообщаетЧто это действительно означаетЧего это не доказывает
Клиент создал и подписал поручениеКомпания AA запросила платёж у своего банкаЧто Bank A принял, исполнил или доставил платёж
Банк принял поручениеBank AБанк согласился обработать инструкцию в рамках своего процессаЧто средства зачислены S
Банк отправил межбанковскую инструкциюBank A / промежуточный банкСледующему банку передано распоряжение обработать переводЧто межбанковский расчёт завершён
Сеть подтвердила техническое принятие сообщенияSWIFT-сервис или банковский шлюзСообщение прошло транспортную/синтаксическую стадиюЧто банк получателя зачислил деньги
Трекер показывает статусGPI/TrackerВ цепочке опубликован статус определённого этапаСамо по себе — юридическую и учётную окончательность
На счёте S отражён кредитBank DБанк получателя учёл поступление на счёте SЧто средства безусловно доступны для конкретной токенизационной модели; это зависит от условий, блокировок и правил
Банк подтвердил кредитование конечного бенефициараBank D / подтверждающий каналКонечный счёт бенефициара был кредитованЧто токен уже можно выпускать без дополнительных комплаенс- и резервных проверок

Главное правило:

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


Клиентская инструкция: pain.001 или банковский API

pain.001 — это ISO 20022-сообщение типа Customer Credit Transfer Initiation. В обычной логике оно идёт от клиента к обслуживающему банку: компания A просит Bank A выполнить перевод.

Содержательно такая инструкция обычно включает:

  • плательщика (Debtor);
  • счёт, с которого должны списаться средства;
  • получателя (Creditor);
  • счёт получателя;
  • сумму и валюту;
  • назначение платежа;
  • клиентские идентификаторы операции, в том числе Instruction Identification и End-to-End Identification;
  • данные, необходимые банку для маршрутизации и проверок.

Банковский API, host-to-host файл или интерфейс интернет-банка могут не передавать буквальный XML-документ pain.001. Но логически они выражают то же действие: клиент инструктирует свой банк.

ISO 20022: Corporates | Swift

Прочитайте краткое разъяснение Swift о том, какие ISO 20022-сообщения относятся к инициированию платежа и какие — к банковской отчётности. Оно закрепляет ключевое разделение между просьбой клиента исполнить платёж и последующим сообщением банка о движении по счёту.

В подразделе “ISO 20022 message types” сначала найдите ответ на вопрос о payment initiation flows. Прочитайте описание pain.001 и pain.002, обращая внимание на направление «corporate → financial institution». Затем в ответе о cash reporting прочитайте описание camt.052/053/054: это сообщения, которые корпоративный клиент получает от банка, а не отправляет как распоряжение.

После получения pain.001 Bank A может вернуть клиенту pain.002Customer Payment Status Report. Однако здесь нужна дисциплина интерпретации: статус в pain.002 показывает, как Bank A обработал именно клиентскую инструкцию в рамках согласованного интерфейса. Он может сообщать о принятии, отклонении, ожидающей обработке или другом этапе, но не заменяет подтверждение кредитования счёта S банком Bank D.

Практически это означает, что в токенизационном сервере нельзя делать правило вида:

если pain.001 принят → разрешить mint

Принятие поручения — важное событие аудита и контроля, но оно находится в начале банковской цепочки.


Межбанковское сообщение: pacs.008 или MT103

После того как Bank A принял инструкцию A, он создаёт распоряжение для следующего финансового института в маршруте. В современном ISO 20022-контексте для клиентского кредитового перевода между финансовыми институтами типичным сообщением является pacs.008FI to FI Customer Credit Transfer.

В legacy FIN-потоке ему функционально соответствует MT103. Важно не подменять эти понятия:

  • pain.001: «клиент A просит Bank A перевести деньги»;
  • pacs.008 / MT103: «один финансовый институт инструктирует другой финансовый институт обработать клиентский перевод»;
  • pacs.002: статус, отправленный между финансовыми институтами; его точная семантика зависит от применимого rulebook и этапа обработки;
  • camt.053 / camt.054: отчёт банка клиенту о движениях либо уведомление о конкретном дебете/кредите.

На практике между pain.001 и pacs.008 нет гарантированной связи «один файл — одно одинаковое сообщение». Банк может:

  • разделить массовую инструкцию на несколько платежей;
  • удержать или отдельно учесть комиссию;
  • дополнить данные согласно банковским правилам;
  • изменить маршрут через корреспондентов;
  • провести внутренние учётные записи до отправки внешней межбанковской инструкции.

Поэтому серверу эмитента недостаточно получить от компании A копию pain.001. Она доказывает только намерение клиента и набор заявленных реквизитов. Она не доказывает, что банк получил платёж, тем более что S кредитована.

Схема показывает различие между customer-to-bank инструкцией pain.001 и bank-to-bank сообщением pacs.008 на пути через банки и рыночную инфраструктуру. Стрелки иллюстрируют обмен сообщениями; сами по себе они не являются доказательством, что счёт конечного бенефициара уже кредитован.

Схема полезна именно как напоминание о границе контуров, но её не следует читать как универсальную обязательную топологию. Реальный маршрут зависит от валюты, корреспондентских счетов, платёжной системы, банковских договоров и применимого стандарта. В частности, наличие линии pacs.008 между двумя банками означает передачу межбанковской инструкции, а не автоматическое появление доступного остатка на счёте S.


«Подтверждение сети» бывает трёх разных типов

Фраза «SWIFT подтвердил платёж» слишком неопределённа для проектной документации. Под ней могут иметь в виду по меньшей мере три несводимых друг к другу вещи.

1. Техническое подтверждение транспорта

Это ответ, что сообщение было принято, прошло сетевую аутентификацию, валидацию формата или доставлено адресату в рамках сервиса обмена сообщениями.

Такое подтверждение полезно для эксплуатации: оно позволяет понять, нужно ли повторно отправлять сообщение и дошло ли оно до контрагента. Но оно не говорит, что адресат:

  • принял на себя обязательство по расчёту;
  • завершил санкционную или AML-проверку;
  • дебетовал либо кредитовал какой-либо счёт;
  • сделал деньги доступными конечному получателю.

Технический ACK — это доказательство доставки сообщения, а не доставки денег.

2. Статус обработки от банка

Следующий банк может вернуть межбанковый статус, например через pacs.002 в ISO 20022-потоке. Такой статус сильнее простого сетевого ACK: он отражает обработку инструкции банком или платёжной системой.

Но его нельзя интерпретировать по одному коду без контекста. Один и тот же статус может сообщать, что инструкция принята для дальнейшей обработки, находится в процессе расчёта, ожидает проверки или окончательно отклонена. Его смысл определяется:

  1. схемой конкретного платежа;
  2. профилем ISO 20022 и правилами сообщества;
  3. ролью отправившего статус банка;
  4. статусным текстом и причиной;
  5. тем, относится ли событие к межбанковскому расчёту или к кредитованию клиентского счёта.

То есть правило «увидели pacs.002 — выпускаем токен» является архитектурной ошибкой.

3. GPI/Tracker-подтверждение и UETR

В GPI-цепочке участники передают статусы в общий Tracker. Для сквозной корреляции используется UETRUnique End-to-end Transaction Reference. Он должен сопровождать платёж по маршруту и связывать статусы разных участников с одной платёжной историей.

Understanding concepts behind SWIFT GPI (Global Payment Innovation)

Посмотрите фрагмент “Understanding concepts behind SWIFT GPI” канала The Fintech Techie, чтобы увидеть механику Tracker и роль UETR в отслеживании многостороннего платежа. Смотрите его как объяснение корреляции событий, а не как основание считать идентификатор доказательством расчёта.

Посмотрите механику Tracker: банки публикуют этапные обновления, позволяющие видеть маршрут и статус. Затем посмотрите роль UETR, особенно тезис о том, что идентификатор сохраняется на всём пути. Зафиксируйте различие: UETR связывает артефакты, но сам не подтверждает остаток на счёте S.

UETR особенно ценен в архитектуре, потому что позволяет сопоставить:

  • исходную инструкцию Bank A;
  • сообщения и статусы промежуточных банков;
  • GPI-обновления;
  • подтверждение от Bank D;
  • внутреннюю запись сверки эмитента.

Однако уникальность ссылки не превращает её в доказательство. Самостоятельно сформированный hash, QR-код с UETR или письмо «payment sent» лишь указывают, что искать. Они не заменяют банковский источник, который подтверждает, что произошло.


Выписка и уведомление: что именно сообщает банк клиенту

Когда Bank D обслуживает счёт S, наиболее значимыми для S артефактами становятся банковские отчёты, а не исходная инструкция A.

АртефактТиповое ISO 20022-сообщениеНазначениеДоказательная сила для условия выпуска
Внутридневной отчётcamt.052Показывает доступные банку внутридневные движения и остаткиПолезен для раннего мониторинга, но не всегда достаточен как окончательная запись
Банковская выпискаcamt.053Отражает движения и остатки за отчётный периодСильный учётный артефакт, если получен из доверенного банковского канала и содержит нужную кредитовую запись
Уведомление о дебете/кредитеcamt.054Сообщает о конкретном движении по счётуБыстрое операционное подтверждение; нужно сверять с выпиской и правилами банка
Подтверждение кредитования конечного бенефициараGPI/подтверждающий статус/банковский ответУказывает, что конечный счёт бенефициара был кредитованСильный индикатор доставки платежа, но его следует связать с банковским учётом и условиями продукта

camt.054 часто наиболее удобен для событийной архитектуры: банк оперативно сообщает S о конкретном кредите. Но сервер не должен верить любому входящему JSON, XML, PDF или email. Он должен проверить источник: например, взаимно аутентифицированный банковский API, подписанный канал, защищённый SFTP-обмен, банковский портал с контролируемым извлечением либо иной согласованный механизм.

camt.053 полезен для последующей сверки. Он показывает, что кредитовая запись вошла в официальную отчётность по счёту за период. Это снижает риск, что система среагировала на временное или ошибочно интерпретированное уведомление.

Universal confirmations – all you need to know | Swift

Прочитайте объяснение Swift о confirmations of credit. Оно прямо отделяет первоначальный платёжный процесс от уведомления банку-отправителю о том, что конечный счёт бенефициара кредитован.

В разделе “What is a payment confirmation?” прочитайте определение confirmation. Затем в разделе “What do you need to do?” прочитайте сферу подтверждения входящих MT 103. Обратите внимание на минимальные атрибуты подтверждения: BIC инициатора статуса, сумма, валюта и момент кредитования либо отклонения. Исторические сроки и конкретные механизмы нужно всегда сверять с действующим rulebook и двусторонними соглашениями.

Есть важная граница: даже достоверная выписка не всегда даёт стороннему эмитенту право считать деньги обеспечением. Если S — эмитент, это может быть её собственный банковский артефакт. Если фиат пришёл на счёт VASP или платёжного агента, эмитенту нужны договорная модель, полномочия на использование средств и проверяемое подтверждение от соответствующей стороны. В противном случае «кредит на чужом счёте» ошибочно принимается за резерв эмитента.


Что считать доказательством окончательного зачисления

В проекте не стоит искать один магический документ. Нужен набор взаимосвязанных доказательств. Для операции «A переводит EUR, S затем организует выпуск токена» минимальный пакет проверки должен отвечать на следующие вопросы.

1. Кто является источником подтверждения?

Источник должен быть известным, аутентифицированным и уполномоченным:

  • Bank D, обслуживающий счёт S;
  • доверенный банковский API или защищённый канал отчётности;
  • формально согласованный межбанковский механизм подтверждения;
  • в отдельных структурах — кастодиан или платёжный агент, если договор прямо делает его источником учёта.

Скриншот интернет-банка, пересланный PDF без проверяемого происхождения, email от плательщика и блокчейн-хеш не являются достаточным первичным доказательством.

2. Что именно было кредитовано?

Нужно проверить как минимум:

  • сумму и валюту;
  • валовую и чистую сумму, если возможны удержания комиссий;
  • счёт кредитора и юридическое лицо-владельца счёта;
  • дату валютирования, дату проводки и доступность средств, если они различаются;
  • назначение платежа;
  • платёжные ссылки банка;
  • отсутствие статуса rejection, return, recall, hold или compliance review.

Особенно опасна ошибка «совпала сумма — значит, это наш платёж». В EUR на один и тот же счёт могут прийти несколько одинаковых сумм, а комиссия посредника может привести к несовпадению исходной и фактически кредитованной сумм.

3. Как связать кредит с исходной инструкцией?

Для этого создают реестр корреляции, а не опираются на один идентификатор:

ИдентификаторКто обычно создаётДля чего нужен
Instruction IDКомпания AИдентифицирует клиентское поручение
End-to-End IDКлиентская цепочка платежаСвязывает коммерческую операцию по всей цепочке, если сохранён
UETRSWIFT/GPI-контекстСвязывает межбанковое прохождение и статусы
Банковский transaction referenceКонкретный банкПозволяет найти запись в учёте или отчёте банка
Statement entry referenceBank DПривязывает операцию к записи в camt.053/camt.054
Internal funding case IDСистема SСвязывает банковское событие с заявкой на выпуск токена

Связь должна быть явно записана в системе S. Например: заявка на токенизацию CASE-417 сопоставлена с UETR, затем с банковским reference Bank D и с конкретной строкой выписки. Это защищает от двойного использования одного поступления в двух заявках.


Операционная и юридическая окончательность — не одно и то же

Слово «окончательный» следует определить в политике операции, а не использовать как интуитивное.

Операционная окончательность может означать: Bank D подтвердил, что счёт S кредитован, запись отражена в банковской отчётности, а внутренние системы S успешно сверили атрибуты операции.

Расчётная или юридическая окончательность зависит от платёжной системы, применимого права, времени cut-off, договоров, процедур возврата, ошибок, санкционных остановок и иных обстоятельств. Даже после кредитования в реальном мире могут существовать расследования, исправления или предусмотренные законом возвраты.

Поэтому корректная логика не звучит как «кредит подтверждён, значит всё необратимо». Она звучит так:

Условия допуска к выпуску выполнены, если доверенный источник подтвердил кредитование счёта S, все атрибуты сверены, отсутствуют открытые блокировки, а уровень расчётной уверенности соответствует утверждённой политике продукта.

Для консервативной модели политика может требовать одновременно:

  1. подтверждение кредитования конечного бенефициара;
  2. camt.054 из аутентифицированного банковского канала;
  3. последующую сверку с camt.053;
  4. отсутствие возврата, отзыва или compliance hold;
  5. одобрение уполномоченного оператора для исключений.

Для более быстрых продуктов допустим иной порядок, но тогда это должно быть осознанное решение по риску, а не результат технической путаницы.


Правило допуска: какие статусы блокируют выпуск

В документации будущего оркестратора полезно заранее разделить состояния на три категории.

КатегорияПримеры событийДействие токенизационного контура
Не является основанием для выпускаpain.001 создан; банк принял поручение; pacs.008 отправлен; транспортный ACK; промежуточный GPI-статусСохранить для трассировки; mint и доставка заблокированы
Требует ожидания или ручной проверкиНесовпадение суммы; частичный кредит; pending; AML/sanctions hold; неизвестный reference; платёж через агентаПоставить кейс в очередь исключений; не выпускать токен
Может стать основанием для выпускаПодтверждённый кредит на счёте S; все ссылки и реквизиты сверены; соблюдены условия политикиСоздать разрешение на выпуск, не смешивая его с самим банковским доказательством

Полезно сохранить раздельно два объекта:

Payment evidence:
  утверждение банка о конкретном кредитовом событии

Issuance authorisation:
  внутреннее решение S, что данное событие удовлетворяет
  правилам обеспечения, комплаенса и продукта

Первый объект говорит: «что произошло в банковском контуре». Второй: «какое действие разрешено в токенизационном контуре». Это разделение позволит позднее безопасно добавлять комплаенс-проверки, двойную бухгалтерскую книгу, повторные сверки и правила погашения.


Краткая проверка для вашей схемы A → S → R

Перед тем как считать фиатное поступление обеспечением цифрового актива, команда S должна быть способна документально ответить:

  1. Какая именно инструкция A лежит в основе операции?
    Нужны её клиентский ID, сумма, валюта, цель и разрешённый плательщик.

  2. Какой межбанковский путь и идентификаторы с ней связаны?
    В частности, UETR, если он доступен, и банковские references.

  3. Какой банк кредитовал какой счёт?
    Недостаточно формулировки «деньги пришли в Европу» или «платёж в SWIFT завершён».

  4. На каком основании S вправе использовать именно этот кредит для выпуска?
    Счёт должен принадлежать S либо существовать документально оформленная агентская/кастодиальная модель.

  5. Какие независимые артефакты подтверждают факт?
    Например, подтверждение кредитования и camt.054, затем сверка с camt.053.

  6. Что произойдёт, если позднее появится return, recall или расхождение?
    Этот вопрос пока не решаем технически, но его нельзя оставлять вне модели допуска.


Итоги

В этой операции пять типов артефактов выполняют разные функции:

  • pain.001 или банковский API фиксирует клиентское распоряжение A;
  • pacs.008 или MT103 передаёт межбанковскую инструкцию;
  • транспортный ACK подтверждает обработку сообщения сетью, а не движение денег;
  • GPI-статус и UETR дают наблюдаемость и корреляцию маршрута;
  • camt.054, camt.053 и подтверждение кредитования дают банковские доказательства движения по счёту и доставки платежа.

Ни один ранний этап — созданное поручение, отправленный pacs.008, сетевое подтверждение или UETR — не должен сам по себе запускать выпуск токена. Основанием может быть только заранее определённый, аутентифицируемый и сверенный пакет доказательств кредитования.

В следующем уроке мы превратим этот принцип в контрольную точку допуска: объединим банковские доказательства с KYB/KYC, проверкой бенефициаров, полномочий подписанта, происхождения и назначения средств, санкций и юрисдикций.

Can't find a good explanation? Sign up and we'll make it for you

Sign up