Русский
Все проекты

Matchpoint | Exception workflow для AP-команд

Моя роль: Продуктовый дизайнер · Фокус: AP workflow, exception handling, data validation

Как я превратил расхождения в счетах из долгого ручного расследования в управляемый процесс внутри продукта.

Cover

1. Контекст

Matchpoint — сервис для команд, которые обрабатывают счета от поставщиков.

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

Проблема не в самом факте расхождения, а в том, что система обычно показывает только красный флаг и не объясняет, что именно пошло не так.

Конкуренты — Bill.com, Tipalti, Coupa — оптимизируют happy path и трактуют исключения как warnings: система поднимает флаг, а причину, владельца и следующий шаг человек находит сам. Matchpoint я строил от обратного: расхождение здесь не ошибка в таблице, а управляемый объект с жизненным циклом Detect → Diagnose → Route → Resolve → Trace. Скоуп этого кейса — Detect и Diagnose, то самое слабое место, которое конкуренты оставляют пользователю.

Поступает счёт Сверка документов Расхождение обнаружено Коммуникация уходит наружу Исключение —управляемый объект Диагностика Маршрутизация Решение принято История действий Matchpoint Традиционный путь

Домен. Основной пользователь — AP-специалист, который обрабатывает 200–500 счетов в месяц по 50–100 поставщикам. Каждый счёт проходит 3-way matching: сверку инвойса с заказом на закупку (PO) и приёмкой (goods receipt). Исключение — это любое место, где три документа не сходятся.

Что считается успехом

Рамка «зачем» держится на двух ярусах. Метрики конкретных решений вынесены отдельно в блок 10.

Пользователи

2. Ограничения и скоуп

Концепт, сделан соло, без реальных данных и живых пользователей — все baseline-значения требуют проверки на пилоте.

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

PO Mismatch Цена или количество в счёте не совпадают с ордером Duplicate Invoice Тот же счёт повторно через другой канал или с изменён-ным номером

3. Дискавери

Я начал с desk research: посмотрел отзывы о Bill.com, Coupa и Tipalti, публичные кейсы по AP-automation и обсуждения AP-специалистов. В разных источниках повторялась одна проблема: система находит расхождение, но дальше человек всё равно сам выясняет причину, владельца и следующий шаг.

Ключевые инсайты

Совпадает с PO? Счёт поступает: ручная загрузка, OCR, ручной тег к PO Проходит дальше — ошибка всплывёт позже Предупреждение: Сумма счёта не совпадает с PO AP расследует вручную: PO + счёт + goods receipt в 3 окнах Сумма выросла относительно PO? Нет framework для принятия решения внутри системы Платить за факт / ждать остаток Запрос corrected invoice → рестарт с шага 1 Одобрить с пометкой Procurement обновляет PO Нет истории изменений — причину решения невозможно восстановить — шаг где процесс ломается или уходит вне системы из-за отсутствия контекста или инструментов. Точка отказа Предупреждение без контекста — неизвестно что и на сколько не совпало Каждая новая цепочка согласования собирается вручную AP создаёт approval request, Approver одобряет Оплата + ручное обновление статуса Нет side-by-side сравнения — данные сопоставляются вручную в 3 окнах Причина расхождения? Коммуникация наружу: email / мессенджер к Procurement Обсуждение уходит в почту и мессенджеры, контекст теряется PO неверный В пределах допуска Счёт неверный Частичная поставка Анализ текущего процесса: Точки отказа

4. Допущения

Без доступа к реальным данным я зафиксировал допущения явно: что предположил, почему и как проверил бы.

5. Сценарии

Критическое расхождение перед дедлайном

СитуацияПятница, 15:30. Счёт нужно оплатить в понедельник.
ПроблемаСчёт на $2,580 не совпадает с заказом на $2,100. Система показывает только факт расхождения.
Что делает пользовательВручную сравнивает документы в нескольких окнах и пишет в закупки.
ПоследствиеСрыв срока оплаты, пеня и задержка следующей поставки.

Массовая обработка однотипных исключений

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

Первый счёт нового поставщика

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

6. Приоритизация

Я расставил сценарии по осям частота × стоимость.

Все три сходятся в одну точку — диагностику единичного исключения. Если сделать её сильной, она же обслуживает сценарий 2 (та же диагностика × N через bulk) и снижает риск в сценарии 3. Поэтому ядро продукта — hero-экран Exception Detail, а не общий список счетов.

7. Формулировка проблемы

8. Решение

Весь интерфейс держится на едином белом фоне без цветного бренда: цвет несёт только семантику статусов (tomato / amber / jade), а расхождения выделяются жирным, а не заливкой.

Модель сигналов

Я оставил только сигналы, которые помогают принять решение и по-разному выглядят в зависимости от того, насколько предупреждение серьёзно: confidence (уверенность системы), severity (критичность), статус поставщика, тип исключения, стадия обработки, причина и метод обнаружения.

CONFIDENCE High confidence Suspected anomaly Manual flag SEVERITY High severity Medium severity Low severity VENDOR STATUS Active Under review Flagged EXCEPTION TYPE PO mismatch Duplicate invoice RESOLUTION STATE Open Awaiting approval Resolved Partial Disputed Rejected Snoozed ATTRIBUTION Vendor pricing change PO error Receipt error DETECTION METHOD Manual Pattern Anomaly Rule

Экран 1. Очередь исключений и пакетная обработка

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

Однотипные исключения закрываются пакетом. Группировка строгая — совпадать должны сразу пять признаков: поставщик, тип, направление отклонения (выше или ниже PO), диапазон variance и конкретное поле. Выпадающие значения (outliers) автоматически исключаются из пакета и остаются видимыми поштучно. Пакет выше $50k или больше 20 исключений уходит на approval.

Гипотеза: строгая группировка bulk снижает суммарное time-to-resolve по сценарию 2, не повышая риск закрыть аномалию вместе с рутиной.

Экран 2. Диагностика

Главный экран диагностики. Документы показаны рядом (split-view), а расхождение объясняется прямо у конкретной строки — причину нужно видеть рядом с документами, а не искать в соседнем окне. Система атрибутирует источник: изменение цены у поставщика (vendor pricing change), ошибка в заказе (PO error) или ошибка приёмки (receipt error).

Гипотеза: если показать attribution прямо у строки, time-to-understand cause падает — специалист перестаёт реконструировать причину вручную.

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

По умолчанию показываю diff table — только расходящиеся поля. Полная трёхколоночная сверка (инвойс ↔ заказ ↔ приёмка) доступна по запросу, а для проверки исходника есть scan modal с распознанным счётом. Поповер у статуса уверенности объясняет, почему флаг надёжен: показывает триггер, подтверждающие сигналы и правило, по которому он поднят.

Экран 3. Профиль поставщика

Профиль закрывает сценарий, где одного инвойса недостаточно. По новому поставщику истории ещё нет, и интерфейс честно показывает нехватку baseline (cold-start), а не имитирует уверенность. Здесь AP-специалист видит рабочий контекст: сколько компания обычно платит этому поставщику, как часто возникают расхождения, есть ли открытые исключения и были ли недавние изменения.

В профиле собраны данные, которые обычно приходится искать в разных местах:

Это помогает быстрее понять, проблема в конкретном инвойсе или в поведении поставщика. Отсюда же можно написать поставщику, скачать историю, обновить банковские данные или отметить поставщика для проверки.

Действия для исключений
Вспомогательные ДОБАВИТЬ КОММЕНТАРИЙ ОТЛОЖИТЬ НАЗНАЧИТЬ ВЛАДЕЛЬЦА Решения ОДОБРИТЬ КАК ЕСТЬ ОТКЛОНИТЬ СЧЁТ ОБНОВИТЬ ЦЕНУ В PO ОДОБРИТЬ ЧАСТИЧНО ПОМЕТИТЬ ПОСТАВЩИКА КАК РИСК ЗАПРОСИТЬ ИСПРАВЛЕННЫЙ СЧЁТ

Основные действия

Допуски

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

9. Компромиссы

Diff table по умолчанию. Рассматривал diff table (только расходящиеся поля) против полной трёхколоночной сверки на экране сразу. Выбрал diff table — плотность и фокус на главном. Теряем audit-режим по умолчанию. Ок: полный вид доступен по запросу, а нужен ли режим full 3-column сразу — открытый вопрос под валидацию.

Confidence как явный статус. Рассматривал confidence отдельным статусом с поповером против простого флага. Выбрал явный статус. Теряем место на экране и добавляем сложности. Ок: без объяснения уверенности автоматику отключают — это прямой вывод из research, то есть вопрос adoption, а не украшения.

Строгая группировка bulk. Рассматривал строгую группировку (пять критериев + auto-exclude outliers) против мягкой. Выбрал строгую. Теряем часть исключений, которые проходят мимо пакета. Ок: строгость защищает от закрытия аномалии вместе с рутиной, а outliers остаются видны поштучно.

10. Как я бы мерил успех

Baseline честно неизвестен — замерил бы на пилоте. Target даю порядком величины, а не финальной цифрой.

Мост к бизнесу: эти per-solution метрики — ведущие индикаторы; операционные метрики (time-to-resolve, доля эскалаций) — то, во что они конвертируются.

11. Что дальше

Вне итерации остались: общий список всех счетов, полный трёхколоночный audit-режим по умолчанию, зависшие согласования и цепочки утверждения, качество распознавания документов.

Что проверил бы дальше:

  1. Валидация основного флоу: открыть исключение → понять причину → выбрать действие.
  2. Читаемость построчной дельты без обучения и подсказок.
  3. Пустые, загрузочные и ошибочные состояния.
  4. Пакетная обработка на реальных данных.