Разработка AI-системы для анализа чеков покупателей

Ручной разбор чеков съедает время сотрудников и всё равно даёт ошибки в данных. Мы разрабатываем AI-систему анализа чеков под ключ: она читает кассовые данные, распознаёт позиции и сводит их в понятные отчёты. На выходе заказчик получает готовый поток данных и сокращение ручной работы в разы.
Часто задаваемые вопросы

Анализ чеков: где ломается ручная обработка

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

Дальше начинаются ошибки в товарных данных. Один и тот же товар заводится и как «Кола 0,5», и как «cola 0.5 бут», оказывается в разных категориях — и сводка по категории перестаёт отражать реальность, потому что продажи, наценка и остатки считаются по разным основаниям. Отследить ошибку до конкретного чека не получается: источник данных — уже переписанная вручную таблица, а не первичный документ.

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

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

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

Розничная сеть с несколькими десятками точек выгружала продажи из касс вручную: операторы скачивали архивы чеков из кабинета оператора фискальных данных, сводили смены и расшифровывали строки, где наименование сокращено до «напиток сок 1л ябл». Суточная партия собиралась к вечеру следующего дня, и решения по полке принимались вслепую.

Что было до внедрения

Обработка суточной партии занимала около восьми часов работы трёх операторов, а доля позиций, доведённых до товарной категории, не превышала 60%. Остальное оседало свободным текстом, отчёты по категориям появлялись через сутки, а расхождения с учётной системой 1С находили уже после закрытия смены — задним числом.

Что изменили и что получили

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

Суточная партия обрабатывается за 15–20 минут вместо восьми часов, полнота данных по категориям выросла с 60 до 97%, отчёты готовы к открытию смены, а не через сутки. Ручной труд сократился с трёх операторов до выборочной проверки порядка 2% чеков — быстрее и без потерь.

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

Способы анализа чеков: пакет или поток

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

На практике выбирают не «или», а порядок: поток закрывает операционные задачи, пакет — сверку и добор пропущенного. Ниже — три рабочих варианта и то, чем каждый ограничен.

Варианты разбора и их ограничения

Вариант Когда подходит Ограничения
Пакетная выгрузка за период Смена закрывается целиком, задержка результата допустима Данные появляются только после выгрузки; сбойную позицию приходится искать и перезапускать отдельно
Поточная обработка по событию Решение нужно в момент покупки: контроль лимита, сверка, подсказка оператору Требует устойчивого канала от кассового узла; при обрыве события копятся и требуют повторной доставки
Гибрид: поток плюс пакетная сверка Нужны и скорость, и гарантия полноты за смену Двойная логика сопоставления и защита от дублей при повторной доставке

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

Этапы работы: от аудита данных до передачи системы

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

  1. Аудит выборки чеков. Смотрим, что реально приходит с касс и из приложения: снимки под углом, мятые и выцветшие чеки, разные форматы печати. Считаем долю выборки, пригодную к разбору без ручной правки.
  2. Схема данных и разметка примеров. Фиксируем обязательные поля — дата, сумма, позиции, скидки — и вручную размечаем несколько сотен чеков, включая неудобные. Эта разметка становится эталоном для всех последующих версий.
  3. Настройка правил разбора. Типовые случаи закрываем правилами и словарями товарных групп, нетиповые уводим в модель. Так решение системы объяснимо, а ошибку правим без полного переобучения.
  4. Проверка на реальных данных. Прогон на отложенной выборке с точностью по каждому полю отдельно: где путается вес с ценой, где теряется строка. Сводная цифра по чеку такие провалы скрывает.
  5. Дообучение на спорных примерах. Чеки с низкой уверенностью разбираем вручную и добавляем в набор — точность растёт именно там, где она проседала.
  6. Приёмка по согласованным метрикам. Проверяем на выборке, которую заказчик собирает сам и нам заранее не показывает. Порог не достигнут — возвращаемся к правилам, а не «дотягиваем» показатель.
  7. Передача системы заказчику. Отдаём код, конфигурации правил, схему данных, инструкции по спорным чекам и журнал метрик; обучаем команду и остаёмся на связи по инцидентам.

Артефакты передачи: модель, правила, документация

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

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

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

Кейс: что изменилось после внедрения

До внедрения

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

Что изменили

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

Доля ошибочных позиций снизилась с 18% до 1,5%, партия того же объёма обрабатывается за 25–30 минут вместо шести часов, ручная доработка сократилась с четверти строк до 4%. Основной эффект не в скорости распознавания, а в том, что ошибка перестала доходить до отчётности: сомнительные строки изолируются на входе, и закрытие периода больше не превращается в перепроверку всей выгрузки.

Что делать, если кассовые данные уже собираются в учётной системе?

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

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

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

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

Частые вопросы по качеству и данным

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

Насколько устойчиво распознавание на мятых и выцветших чеках?

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

Как обрабатываются смешанные форматы — фото, сканы, выгрузки из кассового ПО?

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

Что с чувствительными полями чека — ФИО, телефоном, платёжными данными?

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

Какой минимальный объём выборки нужен для старта?

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

Обсудим задачу: что нужно для оценки

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

  • Образцы чеков — 100–300 штук в том виде, как они попадают в обработку. Нужны разные классы: затухшая термопечать, мятые и косо снятые квитанции, разные модели касс.
  • Объём и ритм: сколько чеков в месяц, каков пиковый поток, есть ли сезонные всплески.
  • Список полей для извлечения: номенклатура, сумма, НДС, дата, номер фискального документа, QR. Отметьте критичные поля и те, где допустимо ручное заполнение.
  • Маршрут документа: откуда приходит файл и куда должен попасть результат — таблица, учётная система, файл заданного формата.
  • Требования к точности и допустимая доля ручной проверки спорных позиций.
  • Ограничения по контуру: где разрешено хранить и обрабатывать данные — закрытый сервер, облако.
  • Что уже пробовали и на чём остановились.

Из этого собираем план: пилотный запуск на вашей выборке, замер точности по каждому полю, объём ручной доработки и порядок вывода в промышленную эксплуатацию. Опишите задачу — вернёмся с оценкой и планом работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139