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

42 lines
3.2 KiB
Markdown

# Модуль: Приложения
**Ответственность**: задаёт идентичность, порядок, заголовки и нумерацию приложений независимо от профиля и конкретной вёрстки.
**Расположение**: `.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.