Спецпроекты

PayMatch

Сверка внутренних платежей с выпиской банка: совпадения, расхождения сумм, пропуски и дубли. Спорная пара остаётся спорной, а не достаётся первой попавшейся строке.

Тип
Сверка платежей
Стек
Python · PostgreSQL
Код
Открыт на GitHub
Год
2026

Сортировщик двух колод

Наши платежи и выписка банка едут двумя колодами. Гребёнка скрепляет пару, только если карточки выбрали друг друга; спорные и одинокие уходят в свои лотки.

PAYMATCH
Тиски: спорный набор остаётся в них, а не уходит первой попавшейся строкеГребёнка: три зубца высотой 100, 50 и 20, как веса правилЛенты и карточки: наши платежи и выписка банкаНастольная модель PayMatch — консольной сверки платежей на Python. Две ленты везут колоды: внутренние платежи и строки выписки. Зубцы гребёнки поднимаются на веса правил из примера: совпавшая ссылка 100, сумма в допуске 0,01 — 50, время в допуске 300 секунд — 20. Пару принимают, только если каждая карточка — единственный лучший кандидат для другой; манипулятор несёт её в лоток совпадений или расхождения суммы. Строка без пары уходит в «нет у нас» или «нет в банке», а строки с повторяющейся нормализованной ссылкой в одном источнике выталкиваются как дубли ещё до сопоставления. Что нельзя решить однозначно (здесь — два платежа на одну строку выписки) остаётся в тисках как «спорно». Клик включает жадный проход для сравнения — его PayMatch как раз избегает. Партия на столе синтетическая; настоящий отчёт — JSON и необязательная запись в PostgreSQL.

Как сверяет

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

Почему так

Жадный проход отдаёт спорный платёж той строке, что встретилась раньше, и ошибка становится незаметной. Здесь всё, что нельзя решить однозначно, получает статус «спорно» с перечнем доказательств.

Технически

  • Статусы: совпало, расхождение суммы, нет у нас, нет в банке, дубль, спорно.
  • Суммы в Decimal, время только с явным часовым поясом.
  • Взаимно лучшие пары вместо жадного обхода.
  • Отчёт в JSON и необязательная запись аудита в PostgreSQL.
Код на GitHub

Обсудим ваш проект?

Обсудить проект