2.9 KiB
2.9 KiB
Модуль: Сборка документа
Ответственность: выполняет use case «собрать документ» в фиксированном порядке от пользовательских параметров до вызова renderer.
Расположение: .template/lib/application/render-document.typ
Публичный интерфейс
| Символ | Тип | Описание |
|---|---|---|
render-document() |
функция | Оркестрирует resolve company → normalize → validate → create context → render |
resolve-profile() |
функция | Проверяет и нормализует встроенный или пользовательский DocumentProfile |
build-context() |
функция | Создаёт итоговый DocumentContext из валидированных частей |
Зависимости
| Модуль | Что использует |
|---|---|
.template/lib/domain/document.typ |
Контракт профиля, context и render options |
.template/lib/domain/company.typ |
Валидацию CompanyProfile |
.template/lib/domain/parties.typ |
Валидацию сторон и подписантов |
.template/lib/domain/attachments.typ |
Валидацию приложений |
.template/lib/infrastructure/company-assets.typ |
Загрузку компании только если передан строковый id |
Инварианты
- Renderer никогда не вызывается до завершения всех validators.
- Строковый
companyразрешается infrastructure-адаптером; готовыйCompanyProfileповторно не загружается. - Порядок normalize и validate одинаков для всех профилей.
- Application не содержит
if profile.id == "report"или другой profile-specific логики. bodyпередаётся renderer без изменения пользовательского content.- Ошибка содержит stage:
resolve-company,normalize-profile,validate-domainилиrender.
Намеренно НЕ обрабатывает
- Page layout и show rules.
- Чтение пользовательского
assets/. - Юридическую проверку содержимого.
- Запуск Typst compiler или запись PDF на диск.
Заметки для агента
Этот модуль должен оставаться коротким и скучным: его ценность — стабильный pipeline. Если новая возможность требует ветвления по профилю, добавьте её в profile contract или domain service. Infrastructure подключается как адаптер только для удобного строкового company id.