Оптовик стройматериалов: первичка без ручного ввода
4 500 входящих документов в месяц, два оператора на вводе и бухгалтер на сверках. За четыре месяца 92% документов стали проходить в учёт без прикосновения руками, а закрытие месяца сократилось на 6 дней.

С чем пришли
Два оператора весь рабочий день переносят в 1С счета и накладные: часть приходит по ЭДО, часть письмом в PDF, часть — фотографией с телефона кладовщика. Бухгалтер отдельно проверяет, совпало ли поступление с заказом и актом, и делает это выборочно, потому что на все документы времени физически нет. Владелец сформулировал задачу так: перестать платить людям за перепечатывание чужих бумаг, ловить расхождения с поставщиком в момент приёмки, а не через месяц, и закрывать период не к двадцатому числу, а к середине. Условие — ничего не переписывать в 1С, только программная надстройка сверху.
Что делали по неделям — включая сложности
В реальных проектах всегда есть грабли. Мы показываем их здесь честно — потому что умение их проходить и есть то, за что вы платите.
Замер потока и разбор форм
Две недели ничего не автоматизировали, только считали. Выгрузили месяц входящих документов и разложили по каналам: 35% через Диадок, 45% письмами в PDF, 20% — фотографии со складов. Провели хронометраж: 4,4 минуты на документ в среднем, 330 часов в месяц на двоих операторов. Собрали коллекцию форм и получили первую неприятную цифру — 34 разных макета накладных, причём шесть из них дают 70% объёма, а остальные 28 растянуты хвостом по мелким поставщикам. Отдельно посчитали дубли: 3% документов заводились в 1С дважды, потому что приходили и почтой, и бумагой с водителем.
Первый месяц на реальном потоке: 84%
Запустили распознавание в теневом режиме на живом потоке: система обрабатывает документ, оператор вводит его руками, результаты сравниваются построчно. Точность извлечения полей за первый месяц — 84%, при том что на подготовленных образцах было под 95%. Разбирали ошибки поштучно, и виноватыми оказались не редкие формы, а физика носителя: перспектива и тень на телефонных фото со складов, синяя печать поверх табличной части, многостраничные накладные, где шапка с реквизитами есть только на первом листе, а итоговая сумма — только на последнем. Сама модель тут была ни при чём.
Препроцессинг и дообучение до 97%
Перед распознаванием поставили обработку изображения: выравнивание, устранение перспективы, локальное повышение контраста, подавление печатей, детекция границ таблиц, сшивка разрозненных страниц в один документ по номеру и поставщику. Под шесть массовых форм сделали точные шаблоны, хвост из 28 форм оставили на общей модели. Дообучали порциями по 300 документов с ручной разметкой, три итерации: точность прошла 93% и вышла на 97% по полям. Параллельно проговорили с заказчиком неприятное — 97% по полям не равны 97% готовых документов, потому что документ уходит человеку целиком, если сомнителен хотя бы один реквизит.
Сопоставление номенклатуры по истории проводок
Второе узкое место оказалось тяжелее распознавания. В справочнике 41 000 позиций с дублями и разнобоем написания: «профиль ПН 60х27 3 м» у одного поставщика, «профиль потолочный 60*27 L=3000» у другого, третий шлёт голый артикул без разделителей. Правила нормализации закрывали меньше половины строк. Решение нашли в истории: подняли три года проводок поступлений и построили индекс связок строка поставщика — позиция 1С, то есть зафиксировали то, как закупщики уже сопоставляли этих поставщиков руками. Поверх — нормализатор единиц и типоразмеров плюс нечёткое сравнение с оценкой уверенности. На старте автоматом сопоставлялось 88% строк, и каждое ручное сопоставление пополняет индекс.
Движок сверки заказ-поставка-акт
Собрали сверку трёх сущностей с настраиваемыми допусками: отклонение цены от заказа больше 0,5%, любое расхождение по количеству, нарушение срока поставки, несоответствие ставки НДС условиям договора. Совпало в допусках — документ уходит на проведение без человека. Не совпало — система формирует акт расхождений с указанием конкретной строки и отдаёт его тому закупщику, который вёл заказ, а не в общую папку. Заодно закрыли историю с дублями: дедупликация по хешу файла и по паре номер-дата документа.
Очередь исключений в 1С
Сделали внешнюю обработку и рабочее место оператора: слева скан, справа распознанные поля, подсвечены те, где модель не уверена, и те строки, где номенклатура подобрана с низкой оценкой. Оператор правит только подсвеченное, каждая правка возвращается в обучающую выборку и в индекс сопоставлений. Рядом — журнал автоматических решений: по любому проведённому документу видно, откуда взялось каждое поле и почему строка ушла именно в эту позицию справочника. Без этого журнала главбух отказывался подписывать переход, и был прав.
Параллельный прогон и переключение
Месяц система работала рядом с людьми: 20% потока вводили дважды и сравнивали построчно. На этом прогоне выяснилась вещь, которую не показал ни один пилот, — часть поставщиков присылает исправленную накладную под тем же номером и датой. Без контроля версий это тихо породило бы дубли в учёте либо затёрло уже проведённый документ. Добавили сравнение содержимого и явный конфликт версий, который уходит в ту же очередь исключений с пометкой. После этого перевели на автоматику весь поток, а операторов — на работу с поставщиками.
- Единая входная очередь: почтовый ящик первички, папка сканов со складов, выгрузка из Диадок. Дедупликация по хешу файла и по паре номер-дата документа, контроль версий исправленных накладных.
- Препроцессинг изображений: выравнивание, устранение перспективы телефонных снимков, локальный контраст, подавление печатей, детекция границ таблиц, сшивка многостраничных документов по реквизитам.
- Классификация и извлечение полей: точные шаблоны под шесть массовых форм поставщиков плюс общая модель на остальные 28. Уверенность считается по каждому полю отдельно, порог вынесен в настройку.
- Сопоставление номенклатуры: индекс по трём годам проводок поступлений, нормализатор единиц и типоразмеров, нечёткое сравнение. Каждое сопоставление хранится с оценкой и с объяснением.
- Движок сверки заказ-поставка-акт с допусками по цене, количеству, срокам и НДС. Расхождение превращается в акт и адресуется закупщику, который вёл заказ.
- Очередь исключений во внешней обработке 1С: рабочее место оператора с подсветкой неуверенных полей, журнал всех автоматических решений, возврат каждой правки в обучающую выборку.
Цифры до и после
- Точность на образцах и точность на живом потоке — два разных числа, и разница в 11 пунктов не была ошибкой модели. Первый месяц дал 84% вместо 95% на подготовленных документах, а вытянула их обработка изображения до распознавания: фотографии со склада испорчены перспективой, тенью и печатью поверх таблицы. Мы теперь закладываем в план 4–6 недель дообучения на документах заказчика, показываем цифру теневого месяца как есть и считаем экономику проекта по 90% автоматизации, даже когда рассчитываем выйти на 97%.
- Настоящим узким местом был не OCR, а справочник номенклатуры, и правилами это не чинится. Нормализация закрыла меньше половины строк, а история проводок за три года — 88% сразу и 99% через два месяца накопления: то, как этот закупщик уже сопоставлял этого поставщика, точнее любой придуманной логики. Побочный эффект — первые два месяца очередь исключений была вдвое толще плановой. Теперь мы предупреждаем об этом до старта, иначе заказчик решает, что система не работает, ровно тогда, когда она учится.
- Очередь исключений мы делали дольше, чем саму модель, и это была верная пропорция. Если 8% документов некуда положить, бесполезны и остальные 92%: бухгалтерия не примет систему, у которой есть состояние «застряло непонятно где». Там же всплыло то, чего не показал ни один пилот, — часть поставщиков шлёт исправленную накладную под прежним номером и датой. Нашли это на месяце параллельной работы, и с тех пор месяц двойного ввода стоит в каждом проекте по первичке отдельной строкой, которую мы не даём вычеркнуть ради срока.
- Экономику считаем брутто и нетто раздельно, иначе она врёт. Брутто 190 000 ₽ в месяц складывается из высвобожденных 272 часов операторов (112 000 ₽ по ставке 412 ₽/час с налогами), 40 часов бухгалтера на сверках (22 000 ₽), отказа от сезонного подрядчика на ввод в пик (24 000 ₽ в среднем по году) и половины найденных расхождений с поставщиками (32 000 ₽ — вторую половину списываем как спорную). Из этого вычитаем 45 000 ₽ поддержки и 45 000 ₽ эксплуатации: распознавание 6 750 страниц, языковая модель на нетиповых формах, сервер. Чистыми остаётся 100 000 ₽ в месяц, внедрение возвращается за 7 месяцев. Часы засчитаны только те, что реально перераспределены: операторов не сокращали, их перевели на претензии по недопоставкам, возврат брака и контроль сроков — работу, до которой раньше не доходили руки.
