Сотрудник сертцентра открывает шестой за утро docx-протокол испытаний и в шестой раз вбивает одни и те же реквизиты заявителя, продукции, изготовителя. Каждый шаблон лежал отдельным Word-файлом, заполнение шло ручным переносом. Мы свели десятки разрозненных docx в один конструктор внутри аналитической платформы — и новый шаблон теперь заводит сам оператор, без программиста.
В сертификационном бизнесе протокол испытаний, декларация о соответствии, акт идентификации заполняются по фиксированной форме: сотрудник подставляет данные конкретной продукции. У клиента таких форм было 70–100 под разные категории продукции и технические регламенты. Сгенерировать docx умеет любая библиотека. Сложность в другом: сделать так, чтобы добавление сто первого шаблона не упиралось в очередь к разработчику.
Сводка
| Отрасль | Сертификация продукции, B2B-аналитика рынка |
| Конечный клиент | «Аналитика сертификатов» |
| Формат сотрудничества | Регулярное сопровождение — серия ТЗ по модулю шаблонов (2022–2025) |
| Тип проекта | Конструктор шаблонных документов внутри B2B-платформы аналитики |
| Объём работ | Импорт docx-шаблонов с тэговой разметкой, генерация с пулом номеров и случайными значениями, доп-файлы лабораторий, шаблоны без печатей, права по компаниям |
| Дата проекта | 2022 — основной модуль, далее точечные доработки до 2025 |
| Трудозатраты | более 300 часов согласованных по ТЗ (тэговый конструктор — 160 ч; пул номеров и статистика — 65 ч; документы без печатей — 40 ч; и серия доработок) |
| Команда | Антон Херсун (руководитель проекта) и разработчик аналитической панели — он ведёт это направление с первого дня и до сегодня |
| Технологический стек | Laravel · Sencha 6 · docx с тэговой разметкой · xlsm как внешний источник |
| Сдано | Модуль импорта и хранения шаблонов, генерация через тэговую разметку, пул номеров с бронированием, случайные значения в полях испытаний, доп-файлы лабораторий, шаблоны без печатей, разграничение по компаниям и ролям |
Постановка задачи
Сотрудники клиента работают с тремя типами шаблонных документов: протоколы испытаний, декларации о соответствии, акты идентификации продукции. По каждому типу в обороте десятки шаблонов под разные категории продукции и регламенты — заказчик называл цифру 70–100. Раньше каждый шаблон был отдельным docx: сотрудник открывал нужный и заполнял руками, а копии нужной версии расползались по компьютерам.
Заказчик хотел централизованное хранилище шаблонов внутри уже работающей у него платформы аналитики, с поиском по типу и названию, и чтобы система сама генерировала документ из данных заявителя. Главный вопрос он задал прямо на старте: насколько реально дать сотрудникам самостоятельно добавлять новые шаблоны в конструктор? Этот вопрос и стал осью всего проекта.
Что в этом сложного. Самое уязвимое в шаблонной автоматизации не генерация docx, а то, что через год у программиста копится очередь «добавьте ещё один шаблон». Если каждая форма требует правок кода, модуль превращается в узкое место. Поэтому контракт между оператором и системой мы заложили в саму разметку документа: оператор размечает Word-файл тэгами и сам же его загружает.
Как мы это сделали
1. Тэговая разметка в docx как контракт между оператором и системой.
Центральное решение модуля (160 ч): оператор берёт обычный Word-документ и проставляет в нём тэги вида {{поле}} там, где должны встать данные. Одинаковый текст помечается одинаковым тэгом. При генерации система разбирает разметку, строит форму ввода и подставляет значения. Строковых тэгов в одном шаблоне может быть сколько угодно — хоть тысяча. Новый шаблон загружается через интерфейс как обычный размеченный docx: программист пишет генератор один раз — оператор добавляет формы сколько угодно раз. Уже имеющиеся 70 документов мы сознательно не размечали за клиента. Где какое поле подставить, знают только его сотрудники, и они по мере работы разметили шаблоны сами.
2. Случайные значения в полях испытаний.
В протоколах испытаний часть числовых полей содержит результаты измерений в допустимых границах. Чтобы сотрудник не выдумывал эти числа вручную для каждого документа, в разметку заложили генерацию случайных значений прямо в такие поля при создании документа, а позже добавили и повторную перегенерацию на готовом документе. По описанию мелочь. По факту она экономит время на каждом протоколе.
3. Пул номеров с бронированием (65 ч).
Каждый документ должен получить свой регистрационный номер из заранее заданного диапазона. Сделали пул номеров: оператор пополняет его сам, номер бронируется за документом, у каждой компании пул свой. Здесь же всплыла тонкость, которую разобрали заранее. Автоматически подставить номер по тэгу нельзя: в разных шаблонах это поле называется по-разному, и система не понимает, куда вставлять. Предложили два пути: отдельный тэг под номер либо кнопку бронирования с ручной вставкой. Заказчик выбрал тот, который не ломал свободу разметки. Дату бронирования привязали к часовому поясу, и позже это помогло корректно фильтровать документы по дате брони.
4. Доп-файл лаборатории при генерации.
У лаборатории-исполнителя испытаний свои реквизиты, печать, аккредитационный номер. Сделали так: когда при генерации выбрана лаборатория, рядом с основным документом формируется второй файл по тексту, заданному для этой лаборатории, и все тэги шаблона применяются к обоим файлам. Нет текста — нет второго файла. Есть у лаборатории и флаг «учитывать даты при бронировании», который влияет на подсчёт остатка номеров.
5. Шаблоны без печатей и подписей для черновиков (40 ч).
Сотрудники часто отправляют клиенту черновик протокола на согласование, а черновик не должен нести печати и подписи. Раньше пришлось бы держать два комплекта шаблонов. Вместо этого ввели генерацию второго файла без печатей и массовое скачивание таких документов по списку: один комплект шаблонов закрывает и финальные документы, и черновики.
6. Права по компаниям и роли.
По шаблонам у клиента работали две компании, и шаблоны одной не должны были попадаться на глаза другой. Завели у пользователя принадлежность к компании, у администратора — справочник компаний, и шаблоны стали видны только внутри своей. К этому добавились отдельные роли доступа к разделу шаблонов: «Сотрудник ТО», «Руководитель ТО», позже «менеджер и шаблоны». А когда заказчик попросил разделить сотрудников по компаниям ещё до того, как под это оформили отдельное ТЗ, мы сделали доработку бонусом, зачётом в уже оплаченный заказ.
Дисциплина процесса
Модуль рос не одним куском, а серией ТЗ с честной оценкой по каждому. Как мы относимся к чужому бюджету, лучше любого описания показывает пара эпизодов.
Заказчик хотел тэг дат с автопересчётом: при смене основной даты сами пересчитываются даты испытаний, с учётом красных дней производственного календаря. Мы оценили работу примерно в 30 часов и сами же отговорили: «штучка простая на вид, но в реализации стоит как феррари». В ТЗ её даже не стали описывать — чтобы не закладывать в смету заведомо невыгодный пункт.
Отдельно заказчик просил генерировать документы сразу в Word и PDF, архивом. Мы прогнали тестовые шаблоны и показали, что конвертер не от самого Word даёт расхождения: лишние разрывы страниц, мелкие смещения. Вывод дали прямой: менеджер не глядя отправит кривой PDF в работу. От задачи отказались — хотя могли её взять.
И ещё мельче, но в ту же сторону. В одном из ТЗ заказчик попросил «выдачу свежих номеров»; мы разобрались и ответили, что это не доработка, а невыставленная галка в настройках лаборатории — её достаточно включить. Платить тут было не за что.
Результаты
| Метрика | Значение |
|---|---|
| Часы по ТЗ | более 300 часов согласованных |
| Заказы | Серия ТЗ по модулю шаблонов + точечные доработки |
| Самообслуживание оператора | Новые шаблоны размечаются и загружаются через интерфейс, без программиста |
| Случаи документов | Протоколы, декларации, акты идентификации, доп-файлы лабораторий, черновики без печатей |
| Нумерация | Пул номеров с бронированием, отдельный под каждую компанию |
| Разграничение | Шаблоны по компаниям, роли доступа к разделу |
Что получилось: тэговая разметка прямо в docx работает как единый контракт между человеком и системой, и именно она снимает основную часть очереди «допилите ещё один шаблон». Регистрацию документов закрывает пул номеров с бронированием. Спецслучаи (доп-файл лаборатории, черновики без печатей) живут поверх одного тела шаблона, а случайные значения в полях испытаний убирают ручной ввод чисел.
Процесс и хронология
| Этап | Период | Результат |
|---|---|---|
| Модуль импорта и хранения шаблонов, тэговая разметка, случайные значения | I–II квартал 2022 | 160 ч |
| Пул номеров с бронированием + инструменты статистики | лето 2022 | 65 ч |
| Доп-файл лаборатории при генерации | август 2022 | точечная доработка |
| Доработки: импорт, комментарии, копирование с бронью | январь 2023 | пакет доработок |
| Шаблоны без печатей и подписей | май 2023 | 40 ч |
| «Мои документы»: поиск и смена шаблона с автозаполнением | июль 2023 | точечная доработка |
| Уведомление об остатке номеров | август 2023 | точечная доработка |
| Прорабатывалось: автозаполнение из внешнего Excel | 2025 | приостановлено заказчиком |
В 2025-м заказчик предложил автозаполнять шаблоны из того же Excel-файла фиксированной структуры, который сотрудники уже используют в другой программе, чтобы вводить данные один раз. Мы разобрали формат файла и логику привязки полей к тэгам, но запуск заказчик поставил на паузу из-за внутренней реформации техотдела. Идея проработана и готова к запуску — когда у клиента вернётся приоритет.
Команда
- Антон Херсун, Xaver Pro, руководитель проекта: формат тэгов, разметочный контракт, оценки и согласование ТЗ.
- Разработчик аналитической панели: серверная и клиентская части модуля шаблонов. Он ведёт это направление с первого дня и до сегодня: модуль 2022 года и доработки 2023–2025 делал один и тот же человек. Правки сегодня вносит тот, кто писал этот код несколько лет назад, и никаких «наследники не разобрались».
Скриншоты и материалы
Будут добавлены отдельным проходом. Нужны примеры размеченного docx и сгенерированных документов после обработки приватности конкретных названий продукции.
Если в вашем сертцентре одни и те же реквизиты вбивают в шесть шаблонов подряд, а правка одной формы занимает день, покажите три шаблона и пример отчёта. Оценим, во что выйдет перенести генерацию внутрь системы. Оценка бесплатная.