Сидоров Данил
RU EN DE
Telegram

Проверка договоров и счетов: эталон, спецификация, заказ

Сверяет договор поставщика с эталоном компании и правилами юриста, а счёт — с договором, спецификацией и заказом, читает сканы и возвращает договор с правками в Word

AI / Документы Стек: Python, FastAPI, Tesseract, pypdf, python-docx, openpyxl, GigaChat ⚡ 25 из 25 заложенных ошибок найдены, 0 ложных замечаний на эталоне и чистом счёте Безопасный контур (NDA): боевая логика на тестовых данных

Живой интерактивный демо-стенд

Точная копия интерфейса и бизнес-логики проекта с демонстрационными данными. Все действия работают в реальном времени.

💡 Что протестировать в стенде:
  1. 1 Откройте договор поставки и у предоплаты 100 % нажмите «В договоре»: пункт подсвечен рядом с эталоном
  2. 2 Откройте счёт № 412 и найдите строку с ценой выше спецификации и подменённый расчётный счёт
  3. 3 Скачайте «Word с правками» и откройте его в Word: правки в режиме рецензирования, причины в примечаниях
check.kolosok.example/
Live Stand
Реализация под ключ

Нужна похожая система под ваши бизнес-процессы?

Разработаю архитектуру, отказоустойчивый бэкенд и быстрый интерфейс. Защита соглашением о неразглашении (NDA), чистый передаваемый код и прозрачные этапы.

  • Бесплатная оценка сроков и бюджета в течение дня
  • Стек: Python, FastAPI, Tesseract, pypdf, python-docx, openpyxl, GigaChat
  • Гарантия и поддержка после запуска
Обсудить проект в Telegram Оставить заявку на сайте Отвечу лично, без навязчивых продаж

Задача

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

Решение

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

Решённые задачи

  • Сделал сопоставление без нейросети: сочетания букв, общие слова и номер пункта ставят пункт договора в пару к эталону, а строку счёта — к спецификации и заказу
  • Сделал правила юриста отдельным файлом: регулярное выражение, проверка и объяснение словами
  • Проверил счёт целиком: арифметика строк, итог, ставка и сумма НДС, сумма прописью, основание
  • Проверил реквизиты по контрольным цифрам ИНН, ОГРН и счёта вместе с БИК банка и сверил их с договором
  • Научил читать сканы: Tesseract на сервере, линии таблицы убираются до распознавания
  • Сделал выгрузку в Excel и Word: договор с правками в режиме рецензирования и примечаниями, письмо поставщику по счёту
  • Подключил GigaChat и OpenAI-совместимые модели за одним интерфейсом: модель только выписывает строки счёта, если правила их не нашли
  • Ограничил демо: 10 своих файлов в сутки, каждая проверка в отдельном процессе, файлы живут в памяти час — контейнер держит около 40 МБ

Результат

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

Комментарий разработчика

Сидоров Данил
Сидоров Данил Разработчик проекта

Что было трудно

Сложнее всего было со сканом: линии таблицы Tesseract читал как «|» и «[», терял номера строк и цифры рядом с ними. Помогло убрать длинные линии до распознавания: у букв нет таких длинных штрихов, поэтому исчезает только сетка. Второе — фасовка: «мешок 25 кг» и «мешок 50 кг» по тексту почти одно и то же, поэтому вес и жирность сверяются отдельно.

Что далось легко

Легко далась арифметика счёта: строки, итог, НДС и сумма прописью проверяются точно, без порогов.

Технологии

PythonFastAPITesseract OCRpypdfpython-docxopenpyxlGigaChatDocker

Источники

Ссылки подтверждают цифры в кейсе

Расскажите о задаче

Telegram