PayMatch
Сверка внутренних платежей с выпиской банка: совпадения, расхождения сумм, пропуски и дубли. Спорная пара остаётся спорной, а не достаётся первой попавшейся строке.
Сортировщик двух колод
Наши платежи и выписка банка едут двумя колодами. Гребёнка скрепляет пару, только если карточки выбрали друг друга; спорные и одинокие уходят в свои лотки.
Как сверяет
Строки приводятся к одному виду, дубли ссылок откладываются отдельно. Кандидаты подбираются по валюте, окну времени и нормализованной ссылке, а затем оцениваются по настраиваемым признакам. Пара принимается, только если каждая сторона — единственный лучший кандидат для другой.
Почему так
Жадный проход отдаёт спорный платёж той строке, что встретилась раньше, и ошибка становится незаметной. Здесь всё, что нельзя решить однозначно, получает статус «спорно» с перечнем доказательств.
Технически
- Статусы: совпало, расхождение суммы, нет у нас, нет в банке, дубль, спорно.
- Суммы в Decimal, время только с явным часовым поясом.
- Взаимно лучшие пары вместо жадного обхода.
- Отчёт в JSON и необязательная запись аудита в PostgreSQL.