42 lines
3.2 KiB
Markdown
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.
|