Смета, которая пересчитывается сама: сверяем счета поставщиков со сметой в Битрикс24 и ловим перерасход до оплаты
На стройке смета и реальные закупки живут в разных мирах. Смету один раз считают в Excel, согласовывают и кладут в папку. А дальше на объект месяцами идут счета: документ на почту, фото в мессенджер, таблица от поставщика. То, что газобетон подорожал на 12%, а арматуры купили на полторы тонны больше сметы, обычно выясняется при закрытии объекта, когда маржа уже ушла.
Недавно разбирали такую задачу для строительной компании, которая ведет объекты в Битрикс24.Заказчик сказал примерно так: “Нужно, чтобы счет пришел, система сама разобрала позиции, сопоставила их со сметой и до оплаты показала, где цена закупки выше сметной, где объем материала уже превышен, а где позиции в смете вообще нет.”.
Расскажу, как устроена такая система и где в ней на самом деле сложно
Как идет счет
Счет сначала привязывается к объекту. Угадывать объект по содержимому счета я бы не стал: проще, когда счет загружают в карточку объекта, а еще лучше - когда бот при получении спрашивает, к какому объекту он относится. Ошибка на этом шаге тихо портит все, что дальше.
Потом из счета достаются позиции: наименование, единица, количество, цена, сумма. Для PDF с текстом и xlsx хватает обычного парсинга, для сканов и фото нужен OCR. Таблицы в счетах сверстаны как попало, поэтому разбирать их в структуру удобно языковой моделью.
Но модели на слово не верим. Счет сам себя проверяет: количество, умноженное на цену, должно дать сумму строки, а сумма строк должна дать итог. Если не сходится, счет уходит человеку с подсветкой проблемной строки. Ни одна цифра не принимается без проверки обычным кодом.
Единицы измерения
Счета спарсили, данные получили - теперь смотрим, что именно получили. И тут видим первую настоящая засада. В смете газобетон в кубометрах, в счете в штуках. Смесь в смете в тоннах, в счете в мешках. Арматура в тоннах против погонных метров. Без приведения к одной единице сравнивать нечего.
Работает только справочник коэффициентов по материалам. Часть считается из размеров в наименовании, часть заводится руками один раз, расширяя справочник. Если коэффициента нет, позиция не сравнивается автоматически и уходит на уточнение человеку.
Сопоставление со сметой
Привели все в СИ, какзлось бы, осталось сравнить два числа (в счете и в смете) и вуаля - все готово. К сожалению, не так). В смете "Блоки из ячеистого бетона D500 600x300x200", в счете "Газосиликатный блок Ytong D500 625250300". Артикулов в сметах обычно нет, точных совпадений почти не бывает.
Решаем и эту проблему. Сначала нормализуем наименования: раскрываем сокращения, выносим размеры, марку, диаметр в отдельные поля. Потом ищем несколько похожих строк только в смете этого объекта, а не во всем справочнике. Потом выбираем лучшую и оцениваем уверенность: если высокая, сопоставляем сами, если низкая, показываем человеку с подсказкой (да-да, нормализует, ищет и сопоставляет ИИ, а не человек, и тратит он на это секунды).
Самое полезное тут не сам алгоритм, а механизм его улучшения. Каждое подтверждение человека запоминается: у этого поставщика это наименование означает вот эту строку сметы. Поставщиков у стройки обычно не так немного, и пишут они из раза в раз одно и то же. Поэтому доля ручной работы со временем падает до около нулевых значений.
Что считать перерасходом
Все данные собрали, нормализовали, сравнили. А зачем мы это делали? Чтобы вовремя замечать перерасход и оптимизировать траты. Так что теперь проанализируем результат. В первую очередь, отклонений три вида, и смотреть их надо раздельно. По цене: поставщик поднял цены на продукт. По объему: материала берут больше, чем заложено. И позиции вне сметы: либо замена, либо что-то не учли.
Объем считается нарастающим итогом. Счет на 30 кубов при смете 120 выглядит нормально, но если до него уже было три таких же, то стоп. Пороги допустимого отклонения задает бизнес. Без порогов система будет тревожиться на каждой копейке, и через неделю ее перестанут читать, чтобы нормализовать артериальное давление.
В Битрикс24 смету удобно держать в смарт-процессе, где каждая строка хранит план и факт. При превышении порога счет уходит на согласование руководителю. Система ничего не блокирует и не оплачивает сама, она готовит решение.
Итог
Перерасход на стройке почти никогда не случается одним большим счетом. Он набирается из десятков мелких отклонений. Пока сверка идет руками раз в месяц, их видно слишком поздно. Если сверять в момент прихода счета, перерасход можно обсудить до оплаты, а не после.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.