3.2 KiB
3.2 KiB
Модуль: Приложения
Ответственность: задаёт идентичность, порядок, заголовки и нумерацию приложений независимо от профиля и конкретной вёрстки.
Расположение: .template/lib/domain/attachments.typ
Модель используется письмами, ТКП и договорами. Отчётные приложения подключаются отдельными файлами через параметр report.appendices, потому что их заголовок и label должны находиться внутри авторского файла.
Публичный интерфейс
| Символ | Тип | Описание |
|---|---|---|
attachment() |
конструктор dictionary | Создаёт приложение с id, title, subtitle, body, numbering |
attachment-set() |
конструктор dictionary | Нормализует массив приложений и общую политику нумерации |
validate-attachments() |
функция | Проверяет уникальность ids, номеров и допустимость body |
attachment-label() |
чистая функция | Формирует семантическое обозначение без layout |
Зависимости
| Модуль | Что использует |
|---|---|
.template/lib/shared/numbering.typ |
Стратегии арабской и кириллической нумерации как чистые функции |
Инварианты
idприложения уникален и пригоден для label.- Порядок массива является порядком документа, если пользователь явно не задал sort key.
- Номер не хранится одновременно как вычисляемый и вручную заданный без явной override-policy.
bodyявляется content или функцией, которую renderer вызывает в локальном контексте.- Заголовок обязателен; subtitle необязателен.
- Приложение не меняет global counter вне вызова своего renderer.
Намеренно НЕ обрабатывает
- Размещение pagebreak и заголовка приложения.
- Физическое объединение внешних PDF.
- Подсчёт страниц вложения до компиляции.
- Profile-specific текст «Приложение к договору».
Заметки для агента
Старые
make_appendicesиappendix-headerрешают presentation-задачи и не переносятся в domain. Domain должен одинаково поддерживать кириллические приложения отчёта, цифровые приложения ТКП и именованные приложения договора. Renderer выбирает display policy на основе profile metadata.