Автономный корпоративный сервис формирования DOCX/XLSX по шаблонам и типизированным данным. Runtime работает без обязательного доступа в Интернет. Доступ к рабочему интерфейсу и предметным API закрывается одним общим паролем приложения «Оформлятор».
Note
Пользовательское название продукта — «Оформлятор». Технические идентификаторы docomator, @docomator/*, DOCOMATOR_*, systemd-службы, пути и имена автономных архивов сохранены для совместимости; см. BRANDING.
Important
Общий пароль — не система пользователей и ролей. После входа все допущенные клиенты имеют одинаковые возможности. Пространства остаются жёсткими границами данных, но не ACL. Firewall, reverse proxy и HTTPS по-прежнему обязательны для рабочего контура.
Текущий кодовый контур поддерживает импорт и экспорт данных, DOCX/XLSX-шаблоны, ручной и календарный выпуск, результаты, SMTP/сетевую доставку, резервирование и восстановление. Стабильный выпуск нельзя объявлять до фактической Debian/Astra/Office/recovery/UX-приёмки; см. FINALIZATION и SUPPORT_MATRIX.
- войти по общему паролю;
- выбрать пространство;
- импортировать сотрудников или произвольные объекты из CSV/XLSX либо добавить вручную;
- при необходимости выгрузить текущие данные в CSV/XLSX;
- загрузить и проверить DOCX/XLSX;
- связать изменяемые места с полями и выполнить пробное заполнение;
- активировать проверенную версию шаблона;
- выбрать всех, группу или отдельные объекты;
- проверить обязательные данные;
- сформировать персональные или сводные документы;
- скачать DOCX/XLSX/ZIP либо доставить через SMTP/сетевую папку;
- при ошибке исправить только проблемные данные и повторить неуспешные единицы.
ADR-0009 вводит один общий password gate без пользователей, персональных кабинетов, ролей и ACL.
Новая установленная система остаётся закрытой, пока оператор локально не задаст пароль:
sudo bash /opt/docomator/current/app/scripts/offline/set-password.shКоманда скрыто запрашивает пароль, сохраняет только параметризованный scrypt-хэш, создаёт новый случайный session secret и перезапускает API. При смене пароля session secret ротируется, поэтому ранее выданные браузерные сессии прекращают действовать.
Сессия браузера использует подписанную HttpOnly, SameSite=Strict cookie с ограниченным сроком жизни; при HTTPS добавляется Secure. Повторные неверные попытки входа получают локальный backoff. /healthz и /readyz остаются доступны техническим проверкам без пользовательской сессии.
В source/dev-запуске gate выключен только если DOCOMATOR_ACCESS_PASSWORD_HASH и DOCOMATOR_SESSION_SECRET вообще не объявлены. Установленный профиль объявляет их пустыми и поэтому fail-closed остаётся закрытым до set-password.sh.
Пространство изолирует сущности, группы, пользовательские поля и значения, импорт, шаблоны и связанные операции. Типы объектов являются общей системной схемой, но конкретный объект и пользовательское поле принадлежат одному пространству.
См. ENTITY_MODEL_AND_IMPORT, ADR-0008 и ADR-0009.
Оба пользовательских импорта используют сопровождаемый сценарий:
файл → колонки → сопоставление → preview → исправление → импорт → результат
Есть drag&drop, корректные координаты пустых XLSX-ячеек, физические номера строк, переносы внутри ячейки, повторный импорт, нормализация ФИО и структурированные ошибки code/row/column/propertyKey/rawValue/suggestedAction. Ошибка подсвечивает проблемное сопоставление и не сбрасывает остальные настройки.
В разделах сотрудников и произвольных объектов доступны «Экспорт CSV» и «Экспорт XLSX».
Экспорт строится сервером из явно выбранных пространства и типа объектов:
- только объекты и пользовательские поля текущего пространства;
- отображаемое название, состояние и последние значения;
- человеческие заголовки и единицы без UUID и технических ключей;
- устойчивый порядок строк и колонок;
- CSV UTF-8 BOM,
;, CRLF; - настоящий детерминированный XLSX с текстовыми ячейками, замороженной первой строкой и фильтром;
- строки, похожие на формулы Excel/Calc, нейтрализуются и не становятся исполняемыми формулами;
- превышение ограничений XLSX не обрезается молча: сервер предлагает CSV или разделение выгрузки.
До сохранения DOCX/XLSX проверяются ZIP/OOXML, размеры, пути, опасные XML-конструкции, макросы, ActiveX, OLE, подписи и внешние связи. Renderer изменяет только разрешённые привязки и повторно считывает значения после формирования.
Поддерживаются выбранный текст DOCX, ячейки XLSX, несколько полей, безопасные форматтеры, повторяемая строка DOCX, повторяемая строка/диапазон XLSX, персональный и сводный выпуск, частичный успех, повтор только ошибок и необязательный PDF-предпросмотр через локальный LibreOffice.
Готовые ручные и автоматические документы остаются в разделе «Результаты» до явного удаления. Скачивание не удаляет файл. Worker продолжает сохраняемую операцию после штатного перезапуска без второго результата.
Доставка поддерживает локальный SMTP с TLS/allowlist и разрешённую CIFS/NFS-папку с проверкой mount/sentinel, временным файлом, fsync и атомарным rename. Ошибка доставки не уничтожает уже готовый документ.
Ежедневный systemd timer создаёт проверяемые резервные копии. Восстановление проверяет manifest и SHA-256 до замены рабочих данных.
Требуются Node.js не ниже 24.18.0 и npm 11+:
npm ci
npm run build
DOCOMATOR_DATA_DIR="$PWD/.tmp/data" npm run migrateAPI:
DOCOMATOR_DATA_DIR="$PWD/.tmp/data" npm run start:apiWorker во втором терминале:
DOCOMATOR_DATA_DIR="$PWD/.tmp/data" npm run start:workerПроверка и полный инженерный gate:
curl --fail http://127.0.0.1:8080/healthz
curl --fail http://127.0.0.1:8080/readyz
npm run checkCI дополнительно запускает Chromium user flows, real-stack smoke и сборку/повторную проверку offline archive.
Debian и Astra Linux собираются как разные target-профили на соответствующих эталонных VM. Набор .deb одной ОС нельзя использовать для другой.
npm run bundle:offline:debian -- \
--apt-update \
--llama-server /srv/build/llama.cpp/llama-server \
--model /srv/models/model.ggufAstra Linux bundle собирается отдельно на согласованной Astra reference VM и требует явного Chromium-профиля этой ОС:
npm run bundle:offline:astra -- \
--apt-update \
--llama-server /srv/build/llama.cpp/llama-server \
--model /srv/models/model.gguf \
--ux-chromium-package "$ASTRA_CHROMIUM_PACKAGE" \
--ux-chromium-bin "$ASTRA_CHROMIUM_BIN"После установки задайте пароль и проверьте первый запуск:
sudo bash /opt/docomator/current/app/scripts/offline/set-password.sh
bash /opt/docomator/current/app/scripts/offline/first-run.sh --checkПароль acceptance передаётся только через локальный обычный файл текущего пользователя с режимом 0600; пароль и путь к файлу не включаются в акты.
install -m 0600 /dev/null "$HOME/.docomator-acceptance-password"
printf '%s\n' 'ВАШ_ОБЩИЙ_ПАРОЛЬ' > "$HOME/.docomator-acceptance-password"
"$BUNDLE_ROOT/target-acceptance.sh" \
--config /etc/docomator/docomator.env \
--base-url http://127.0.0.1:8080/ \
--password-file "$HOME/.docomator-acceptance-password" \
--output "$HOME/docomator-target-acts/debian-01"Для строгого Astra-контура добавляются --require-network --require-smtp. После прогона временный password file удаляется.
После получения target acts Debian/Astra, UX-акта, Office-корпуса, restore-акта и пустого списка блокеров выполняется единый fail-closed gate:
npm run release:evidence -- \
/srv/docomator-release-evidence \
--expected-commit '<ПОЛНЫЙ_GIT_SHA>' \
--expected-version '<ПРОВЕРЯЕМАЯ_ВЕРСИЯ>'Только успешный release:evidence разрешает менять статус выпуска на stable. Сам по себе зелёный CI или успешно собранный generic bundle целевую Debian/Astra/Office/recovery-приёмку не заменяет.
- чистая offline-установка и reboot на Debian;
- отдельный нативный прогон Astra Linux 1.7;
- настоящий LibreOffice без
SKIPPED; - реальный корпус не менее 20 DOCX + 20 XLSX с проверкой Microsoft Office;
- импорт/выпуск 10/100/1000;
- restart/failure scenarios;
- backup/restore на отдельной чистой машине;
- два новых пользователя без устной инструкции;
- финальный release evidence без открытых блокеров.
См. SECURITY, ARCHITECTURE, FINALIZATION, SUPPORT_MATRIX и ROADMAP.