Генератор договоров и актов v3.0 — кейс внедрения в экспертной компании
Клиент: АНО «ЛэИ «Центр» — независимая экспертная организация
Штат: до 40 сотрудников, 5 офисов
Проблема: менеджеры тратили до 20 минут на ручное заполнение одного договора
Решение: веб-приложение с автоподбором цен, генерацией .docx и синхронизацией с Яндекс.Диском
Результат: договор за 2 минуты вместо 20
Если вы руководитель экспертной компании, юрфирмы или любой организации, где ежедневно оформляются десятки однотипных договоров — этот кейс для вас. Расскажу, как мы превратили бумажный ад в удобное веб-приложение, которое само считает цены, создаёт документы и синхронизирует их с облаком.
Представьте: 10 менеджеров, каждый оформляет до 10 договоров в день. 22 категории товаров — от обуви до сантехники. У каждой — своя сетка цен, свои поля, свои шаблоны.
До автоматизации процесс выглядел так:
Одна ошибка в цене — и договор переделывается. Опечатки в ФИО клиента — репутационные риски. Потеря файла — скандал.
Мы разработали полноценную систему с веб-интерфейсом, базой данных и интеграцией с Яндекс.Диском. Вот ключевые возможности:
Роли:
src/
├── index.js — точка входа (Express)
├── db/
│ ├── init.js — создание БД (7 таблиц)
│ └── seed.js — начальное наполнение
├── routes/
│ ├── auth.js — логин/регистрация/смена пароля
│ ├── contracts.js — CRUD договоров + генерация
│ ├── categories.js — категории товаров
│ ├── products.js — услуги с ценами
│ ├── stats.js — статистика по менеджерам
│ └── yadisk.js — OAuth для Яндекс.Диска
├── services/
│ ├── generator.js — генерация .docx
│ ├── pricing.js — расчёт цен
│ ├── numbering.js — нумерация Т.XXX.MM-YYYY
│ ├── approve.js — утверждение и папки
│ └── yadisk.js — синхронизация с Диском
├── middleware/
│ └── auth.js — JWT + роли
├── public/ — SPA фронтенд
└── tamplate/ — шаблоны .docx
Всё занимает 2–3 минуты вместо 15–20.
Договоры/
└── Т.001.07-2026 Т ВС/
├── Т.001.07 ДЗАС/ ← договор.docx + акт.docx
├── Т.001.07 Заключение/ ← пустая (для ручного заполнения)
└── Т.001.07 Материалы/ ← фотографии товара
Word хранит текст в XML особым образом: если в слове есть ошибка (подчёркивается красным), Word разбивает его на несколько XML-элементов, вставляя между ними маркеры проверки орфографии. Плейсхолдер {{marka}} мог выглядеть в XML так:
<w:t>{{</w:t>
<w:proofErr/>
<w:t>marka</w:t>
<w:proofErr/>
<w:t>}}</w:t>
Библиотека docxtemplater видела {{ в одном элементе и marka в другом — и не могла найти цельный плейсхолдер. Решение: предварительно удалять маркеры проверки орфографии из XML регулярным выражением.
Первые попытки заменять текст в XML через JavaScript-регулярки ломали документ. Проблема: Word — это ZIP-архив с XML-файлами внутри. Малейшее нарушение структуры XML — и Word отказывается открывать файл без внятной ошибки. Решение: использовать специализированную библиотеку docxtemplater вместо ручного regex.
Внутренняя библиотека для Яндекс.Диска использовала path.join() из Node.js. На Windows join ставит обратную косую черту \. Яндекс.Диск таких путей не понимает. Решение: отказаться от библиотеки, написать свою реализацию загрузки с явным указанием разделителя /.
Яндекс требует авторизацию через OAuth. Без указания scope cloud_api:disk полученный токен не работает с API Диска. Пришлось разобраться с OAuth-флоу Яндекса и добавить правильный scope в URL авторизации.
Экономия времени: до 3 часов в день на одного менеджера.
Экономия денег: при средней ставке менеджера 500 руб/час — около 300 000 руб/год на пятерых сотрудников.
Автоматизация документооборота — это не про «поменять Word на сайт». Это про то, чтобы сотрудник вообще не думал о форматировании, нумерации и поиске файлов. Система должна быть настолько простой, чтобы новый менеджер начинал работать через 30 минут после знакомства.
Мы справились за 2 недели. Клиент получил работающее приложение, которое: