Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Сверка платежей: reconciliation

Сверка платежей: сопоставление операций с выпиской

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

Прямой ответ

Сверка сопоставляет операции приложения с записями платёжного провайдера, поэтому расхождение по сумме, статусу либо составу обнаруживается по парам операций.

Тип расхождения Что означает
По сумме Значения операции различаются
По статусу Состояние операции не совпадает
Только в приложении Операция не дошла до провайдера
Только в выписке Операция не отражена в приложении
SELECT
  a.payment_id,
  a.amount AS app_amount,
  b.amount AS bank_amount
FROM app_payments a
FULL JOIN bank_statement b ON b.payment_id = a.payment_id
WHERE a.payment_id IS NULL
   OR b.payment_id IS NULL
   OR a.amount <> b.amount;

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

Сопоставление операций и ключ сверки

Сопоставление выполняется по ключу операции, поэтому корректность сверки зависит от однозначности ключа.

Ключ сверки. Идентификатор операции, присутствующий в обоих источниках, поэтому пара операций определяется однозначно.

Полное соединение. Операции, отсутствующие в одном из источников, попадают в результат, поэтому расхождение по составу обнаруживается.

Один ко многим. Несколько записей выписки могут соответствовать одной операции, поэтому правило сопоставления фиксируется явно.

Практическое следствие: ключ сверки, не являющийся уникальным в одном из источников, даёт несколько пар на операцию, поэтому результат сверки содержит дубли.

Отдельный аспект — период сверки. Операции на границе периода могут попасть в разные периоды сверки, поэтому правило отнесения операции к периоду фиксируется.

Расхождения по сумме и статусу

Расхождение по сумме означает различие значений, поэтому причина определяется сравнением записей обоих источников.

Расхождение по сумме. Значения операции в приложении и в выписке различаются, поэтому расхождение требует выяснения причины.

Расхождение по статусу. Состояние операции не совпадает, поэтому операция в приложении может быть закрыта, а у провайдера — нет.

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

Практическое следствие: расхождение по статусу, не обработанное своевременно, приводит к тому, что операция в приложении остаётся в неверном состоянии.

Незакрытые платежи и регулярность сверки

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

Ожидание подтверждения. Операция создана в приложении, но подтверждение провайдера не получено, поэтому статус остаётся промежуточным.

Срок ожидания. Период, по истечении которого операция проверяется повторно, поэтому незакрытый платёж не остаётся в промежуточном состоянии бессрочно.

Регулярность сверки. Сверка выполняется по расписанию, поэтому расхождение обнаруживается до накопления.

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

О списании баланса — в статье про денежные операции в БД; о курсах при сверке сумм в разных валютах — в статье про валюты и курсы.

Практика: настройка сверки платежей

1. Определяйте однозначный ключ сверки. Пара операций определяется однозначно, поэтому дубли в результате исключаются.

2. Используйте полное соединение для выявления расхождений по составу. Операции, отсутствующие в одном из источников, попадают в результат.

3. Разделяйте расхождения по типу. Расхождение по сумме, статусу и составу требует разных действий.

4. Фиксируйте правило отнесения операции к периоду. Операции на границе периода не теряются при сверке.

5. Настраивайте срок ожидания подтверждения. Незакрытый платёж проверяется повторно и не остаётся в промежуточном состоянии.

6. Выполняйте сверку по расписанию. Расхождение обнаруживается до накопления, поэтому число незакрытых операций не растёт.

7. Фиксируйте результат сверки. История сверок позволяет отслеживать динамику расхождений.

Рекомендации:

  1. Не сверяйте по неуникальному ключу. Несколько пар на операцию дают дубли в результате, поэтому расхождение читается неверно.
  2. Учитывайте операции на границе периода. Правило отнесения к периоду фиксируется, поэтому операция не теряется.
  3. Сопоставляйте регулярность сверки с объёмом операций. Большой объём требует автоматической сверки по расписанию.
  4. Фиксируйте тип расхождения в результате. Разные типы требуют разных действий по устранению.
  5. Пересматриваем ключ сверки при изменении интеграции. Новый идентификатор операции требует изменения ключа сопоставления.

Практический сценарий: часть платежей оставалась в промежуточном статусе

Контекст: несколько операций в приложении оставались в статусе ожидания, при этом средства у клиентов списывались.

  1. Диагностика. Проверка показала, что подтверждение провайдера по части операций не обрабатывалось. Сверка выполнялась вручную нерегулярно, поэтому расхождение по статусу обнаруживалось с задержкой в несколько дней.
  2. Причина. Отсутствие регулярной сверки и срока ожидания подтверждения приводило к тому, что операции без подтверждения оставались в промежуточном состоянии бессрочно.
  3. Действия. (а) Настроили автоматическую сверку по расписанию с полным соединением операций приложения и выписки провайдера; (б) разделили результат по типу расхождения — по сумме, статусу и составу; (в) установили срок ожидания подтверждения, по истечении которого операция проверялась повторно; (г) добавили обработку операций, присутствующих только в выписке, чтобы операция отражалась в приложении; (д) настроили фиксацию результата каждой сверки, чтобы динамика расхождений отслеживалась.
  4. Результат. Операции закрываются в день совершения, поскольку расхождение по статусу обнаруживается автоматически по расписанию.

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

FAQ

Что такое reconciliation платежей? Сопоставление операций приложения с записями платёжного провайдера. Расхождение по сумме, статусу и составу обнаруживается по парам операций.

Почему важно полное соединение при сверке? Операции, отсутствующие в одном из источников, попадают в результат, поэтому расхождение по составу обнаруживается явно.

Что делать с незакрытым платежом? Проверять повторно по истечении срока ожидания. Операция без подтверждения не должна оставаться в промежуточном состоянии бессрочно.

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

Источники: PostgreSQL table expressions, PostgreSQL aggregate functions, PostgreSQL numeric types — ссылки в шапке.