ADR-007: Архитектура генерации документов
- Статус: Принято
- Дата: 16 апреля 2026
- Автор: CTO Agent (KALA-135)
Контекст
Клиентские флоу требуют повторяемой генерации документов — предложения, письма, контракты, счета, кастомные формы. Сгенерированные документы должны быть reviewable, скачиваемыми и, опционально, реиспользуемыми RAG-системой после создания.
В платформе уже были namespaces, knowledge bases уровня отдела, ingestion документов и audit-friendly API-маршруты. Document generator должен был вписаться в эти примитивы, а не становиться отдельным хранилищем.
Решение
Использовать двухфазную модель:
DocumentTemplate -> DocumentGeneration -> optional KnowledgeBase Document
DocumentTemplate хранит переиспользуемую спецификацию: namespace, категория, body шаблона, переменные и дефолтный output-формат.
DocumentGeneration хранит каждую попытку рендеринга: user, input, output, статус, ошибку и опциональный outputFileId.
Когда non-preview генерация сохраняется, отрендеренный результат становится обычным Document в knowledge base. Это позволяет сгенерированным документам использовать существующие пути загрузки, ingestion, чанкинга, embeddings и RAG retrieval.
Рассмотренные альтернативы
Хранить сгенерированные файлы вне knowledge base
Отклонено. Отдельному хранилищу понадобились бы свои правила upload, persistence и доступа, и оно не участвовало бы в RAG.
Генерировать только временные preview
Отклонено. Юридические и sales-процессы требуют durable-истории и скачиваемых результатов.
Сразу сделать полноценный office-шаблонизатор
Отклонено. Handlebars поверх Markdown/HTML/DOCX закрывает текущие потребности и его сильно проще тестировать. Rich binary-шаблоны можно добавить позже.
Последствия
Плюсы
- История генераций доступна для query.
- Preview и сохранённая генерация используют один и тот же render-путь.
- Сохранённые результаты становятся knowledge-документами и доступны для RAG-retrieval.
- Department scope наследуется из проверок namespace и knowledge base.
Минусы
- DOCX-экспорт сейчас собирается из text-блоков, а не из полноценного document templating engine.
- PDF зарезервирован, но не реализован.
- Качество
rag-переменных зависит от качества source-документов и запросов.
Заметки по реализации
src/documents/generator.tsвладеет парсингом переменных, резолвингом, рендерингом и export-метаданными.src/routes/document-templates.tsвладеет CRUD, генерацией и generation-history эндпоинтами.- Переменные могут быть source
user,ragилиcontractor_api. - Обязательные отсутствующие переменные валят генерацию и сохраняют ошибку в generation-строке.