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