Files
test/.template/development/modules/domain-attachments.md
T
2026-10-09 04:24:38 +00:00

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.