К содержимому
РЫБКИН АЛЕКСЕЙ
Назад к кейсам

Кейс крупным планом · ОКТ 2026

Проверка договоров ИИ-⁠сервис для поставщика

Один исполнитель · неделяКод на GitHub

2,5 мин

на анализ типового договора; протокол — за секунды

10–⁠20 ₽

анализ договора на 20 страниц моделью Claude Sonnet, цены октября 2026

Проблема
Покупатели присылают поставщику договоры в свою пользу: неустойки без предела, удержания из оплаты, отказ от договора без оплаты изготовленного товара. Каждый нужно прочитать и ответить на него протоколом разногласий.
Решение
Сделал веб-⁠сервис: менеджер загружает договор, ИИ находит риски для поставщика, объясняет их простыми словами и предлагает новые редакции пунктов.
Результат
Анализ договора занимает минуты, протокол разногласий в Word и PDF с подписью и печатью собирается одной кнопкой. От ТЗ до работающей системы на сервере — около недели.
01

Риски видны сразу, рядом с текстом договора

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

Как это сделаносвернуть

Модель отвечает по строгой JSON-⁠схеме (structured outputs): риски, стоп-⁠факторы, новые редакции, обязательства и сроки, противоречия, недостающие приложения, вопросы к специалистам. Если ответ не сходится со схемой, система один раз переспрашивает модель и прикладывает перечень ошибок.

Каждая цитата сверяется с текстом договора: сначала точно, потом нечётко (rapidfuzz). Номера пунктов и ссылки на приложения проверяются по разметке документа. Если цитаты в договоре нет, у риска стоит пометка, так что незаметно «придумать» пункт модель не может.

Договор для модели — данные, а не команды: так сказано в фиксированной части промпта, и промпт администратора её не меняет.

Шаг «Риски»: вывод анализа, стоп-⁠факторы, карточка риска и подсвеченный пункт договора — открыть крупно
Сверху — вывод и стоп-⁠факторы, у риска — подсвеченный пункт в тексте договора. Снимки сделаны на демо-⁠стенде: договоры и организации вымышленные.
02

Протокол разногласий собирается одной кнопкой

Протокол разногласий — ответ поставщика покупателю: слева — редакция покупателя, справа — новая редакция поставщика. Он собирается из рисков; менеджер видит документ таким, каким его получит покупатель, правит строки и их порядок, а правки сохраняются сами. Готовый протокол скачивается в Word или PDF, с подписью и печатью или без них.

Как это сделаносвернуть

Протокол — полноценный деловой документ: альбомный A4, шапка таблицы повторяется на каждой странице, ширины колонок зафиксированы, чтобы Word и PDF не расходились. Тексты — по шаблону с подстановками, его правит администратор.

Подпись и печать — плавающие картинки над строкой подписи. У скана белый фон становится прозрачным, а печать чуть поворачивается и просвечивает, чтобы текст под ней читался.

PDF собирает LibreOffice из того же docx, а шрифт Liberation Serif метрически совместим с Times New Roman, поэтому PDF совпадает с Word постранично.

Шаг «Протокол»: протокол в виде документа и панель скачивания Word и PDF — открыть крупно
Протокол — таким, каким его увидит покупатель; правки сохраняются сами.
Готовый протокол разногласий в Word: первая и последняя страницы с подписью и печатью — открыть крупно
Готовый протокол в Word, первая и последняя страницы. PDF выглядит так же.
03

Договор принимается в любом виде, даже сканом

Менеджер загружает то, что прислал покупатель: Word, RTF, PDF или скан. Система сама находит в договоре сторону поставщика и сверяет его реквизиты с карточкой организации: ИНН, ОГРНИП, счета, телефоны, адреса. Опечатка в номере счёта не пройдёт незамеченной, а для этой сверки ИИ не нужен вовсе.

Как это сделаносвернуть

Файл docx разбирается прямо из XML, автонумерация восстанавливается так, как её показывает Word: иначе номера пунктов в анализе разошлись бы с документом. Файлы doc и rtf LibreOffice переводит в docx.

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

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

«Мои проверки»: зона загрузки и три договора на разных шагах — открыть крупно
Договор достаточно перетащить в окно: Word, RTF или PDF, в том числе скан, до 50 МБ.
04

С телефона работает тот же сервис

Отдельной мобильной версии нет: тот же интерфейс перестраивается под узкий экран. Список проверок, риски с текстом договора в шторке и протокол с кнопками Word и PDF работают и с телефона.

Как это сделаносвернуть

Раскладку переключают два порога ширины, 768 и 992 px, поверх сетки Ant Design. На телефоне строки протокола становятся карточками, текст договора уходит в шторку снизу, а поля ввода набраны кеглем 16 px — иначе Safari на iPhone увеличивал бы страницу.

Сервис на телефоне: список проверок, риски и протокол — открыть крупно
С телефона — тот же сервис: проверки, риски и протокол с кнопками Word и PDF.
05

Правила проверки компания задаёт сама

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

Как это сделаносвернуть

У промпта есть версии с автором и комментарием, построчное сравнение, откат и прогон черновика на договоре до сохранения. Формат ответа задаёт фиксированная часть промпта, поэтому правка промпта его не ломает.

Подключения трёх типов. API, совместимый с OpenAI: RouterAI с режимом «Только серверы в РФ» под 152-⁠ФЗ, OpenRouter, OpenAI, локальные Ollama и vLLM. API Anthropic: ответ потоком, строгая схема, кэш промпта. Codex CLI по подписке ChatGPT: вход по коду устройства прямо из админки.

Стоимость известна заранее: по прайсу RouterAI на 16 октября 2026 анализ договора на 20 страниц моделью Claude Sonnet стоит 10–⁠20 ₽, а токены и стоимость каждого анализа пишутся в журнал.

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

Администрирование: редактор промпта анализа — открыть крупно
Промпт задаёт, что и как ищет ИИ; администратор правит его сам, и каждая версия сохраняется.
06

Договоры не задерживаются в системе

Файл договора удаляется сразу после чтения, а вся проверка — через 24 часа после последнего действия с ней. Тексты договоров не попадают ни в логи, ни в резервные копии, так что коммерческие условия и персональные данные контрагентов на сервере не копятся.

Как это сделаносвернуть

Тест проводит договор через весь путь с логами уровня DEBUG и проверяет, что его текста в логах нет; то же подтвердил прогон в Docker с настоящей моделью. Проверок в резервной копии нет вовсе.

Копии шифруются открытым ключом age, а закрытый ключ хранится у владельца; на сервере данные лежат на зашифрованном диске (LUKS). Пароли хранятся хешами Argon2, ключи API — зашифрованными, число попыток входа ограничено, все изменяющие запросы защищены от CSRF, у интерфейса строгая CSP.

Как шла работа

Работал в паре с Claude Code: архитектуру и приёмку держал за собой, рутинный код писал агент, и каждый результат проходил автотесты и ревью. Поэтому весь цикл — от разбора ТЗ и вопросов заказчику до развёртывания, защиты сервера и документации — вёл один человек, а работающая система стояла на сервере через неделю после ТЗ. Код открыт, лицензия MIT: github.com/chaoseye/contract-⁠review.

Python FastAPI PostgreSQL React TypeScript Ant Design Docker LibreOffice Tesseract OpenAI API Anthropic API

Есть похожая задача? Опишите её — предложу, с чего начать.

Написать в Telegram