Задача
Банк видит все операции клиента, но клиент не видит в них подписок. `VIDSTREAM*PREMIUM`, `VDS*MONTHLY PLAN` и `VIDSTRM LONDON GB` — один и тот же сервис, но в выписке это три разные покупки, и ни одна из них не подсказывает, что за ней стоит действующий договор.
Дорого обходится именно незаметное: платная подписка после бесплатного триала; годовое продление, о котором забыли одиннадцать месяцев назад; несколько тарифов одного поставщика; мелкие суммы, растворяющиеся среди повседневных трат; тихое повышение цены; списания, которые продолжаются после того, как сервис заявил об отмене. Отдельная сложность — доказать, когда именно клиент попросил отменить.
Задача была не в том, чтобы разложить расходы по категориям, а в том, чтобы превратить транзакционную историю в список финансовых обязательств, которыми можно управлять прямо из приложения банка.
Решение
Нормализация продавца. Первый шаг — привести строку выписки к узнаваемому сервису. Merchant resolution собирает разные написания одного поставщика в один кластер и строит карточку: понятное имя, категория, сайт, канал поддержки, возможные тарифы, способы отмены, связанные дескрипторы и уверенность сопоставления. Если уверенности не хватает, приложение не выдаёт догадку за факт: подписка помечается как требующая проверки, а клиент может подтвердить сервис, скрыть поток или указать правильное название.
Распознавание регулярности. Похожие операции группируются, и по группе оценивается повторяемость: тот же продавец, та же или допустимо меняющаяся сумма, интервал между списаниями, недельная, двухнедельная, месячная или годовая периодичность, категория и тип операции, индикатор recurring, пропущенный или сдвинутый платёж, разница между выходным днём и датой обработки, появление нового дескриптора внутри существующего кластера. В паре работают правила и статистическая модель: детерминированные признаки дают прозрачность, оценка модели вытягивает неидеальные даты, конвертацию валют и плавающую сумму.
Вероятность, а не вердикт. Найдя новый поток, приложение показывает мягкое предупреждение: имя продавца, исходный дескриптор, последние повторяющиеся операции, периодичность, прогноз следующего списания, уверенность, причину вывода — и три действия: подтвердить, «это не подписка», посмотреть операции. При этом не всякое регулярное списание вообще является подпиской: аренда, коммунальные платежи, страховка, кредит и переводы отсекаются по категории, типу продавца, признакам карты на файле и порогу уверенности, а счета показываются отдельно от подписок. Правка клиента возвращается в модель как обратная связь, но не меняет данные других клиентов без контроля качества.
Триал, продление и цена. Модуль ловит переход с бесплатного периода на платный тариф — по первому проверочному или небольшому списанию, данным о продавце, первому полному платежу, подтверждённой клиентом дате триала — и напоминает заранее. Для активной подписки считается ожидаемая дата и сумма с поправкой на выходные и валюту, а рост цены выносится отдельным событием. Для платежей с плавающей суммой система показывает обычный диапазон и не поднимает ложную тревогу.
Четыре пути отмены. Отмена запускается из карточки и идёт одним из путей: прямой запрос через доступную интеграцию сервиса; сценарий на стороне поставщика с понятной инструкцией; блокировка будущих recurring-платежей этого продавца средствами банка или карточной сети; обращение в поддержку банка, если нужна ручная проверка. Перед подтверждением приложение объясняет разницу между отменой услуги и остановкой платежа: остановка списаний не всегда прекращает договорные отношения с поставщиком. Само действие подтверждается банковской аутентификацией, а экран подтверждения фиксирует продавца, сумму, последний платёж, выбранный способ, дату и затронутую карту.
Что происходит после. Модуль продолжает следить за потоком продавца. Списание после отмены — отдельное событие с датой, суммой, ссылкой на исходный запрос и быстрыми действиями: связаться с продавцом, остановить будущие платежи, оспорить операцию. В спор уходит уже собранный контекст — операция, история подписки, время запроса отмены, подтверждение, повторное списание, — поэтому поддержка получает связную временную линию, а клиенту не приходится собирать доказательства заново.
Результат
Клиент видит месячную сумму подписок и прогноз на год, ближайшие списания, новые обнаруженные сервисы и те, где выросла цена, — в приложении, которым и так пользуется каждый день. Годовые платежи приводятся к среднемесячной величине для общей оценки, но в карточке всегда остаётся реальная периодичность.
Непонятная строка выписки превратилась в объект с историей: первое и последнее списание, сумма за период, изменение цены, карта, доступные способы отмены. Вместо поиска операций по всей выписке — таймлайн, на котором виден весь паттерн.
Отмена перестала быть кнопкой в никуда. У неё есть статус, сохранённое доказательство и наблюдение после: если сервис заявил об отмене и продолжил списывать, это видно, зафиксировано и передаётся в спор одним действием.
Банк, в свою очередь, получил механику, которую можно защищать: объяснимая причина каждого распознавания, неизменяемый аудит отмен и остановок платежа, идемпотентность чувствительных запросов, ручная проверка спорных случаев и обогащение продавцов, которое не раскрывает данные одного клиента другому.