42 lines
2.9 KiB
Markdown
42 lines
2.9 KiB
Markdown
# Модуль: Ресурсы компаний
|
||
|
||
**Ответственность**: читает публичные данные `.template/companies/`, нормализует JSON, создаёт устойчивые Typst paths и применяет явные overrides подписи и печати.
|
||
**Расположение**: `.template/lib/infrastructure/company-assets.typ`
|
||
|
||
## Публичный интерфейс
|
||
|
||
| Символ | Тип | Описание |
|
||
|--------|-----|----------|
|
||
| `load-company()` | функция | Загружает профиль по разрешённому id и принимает `logo`, `signature`, `stamp` overrides |
|
||
| `available-companies()` | функция | Возвращает детерминированный список встроенных ids |
|
||
| `merge-resources()` | чистая функция | Применяет только явно переданные resource overrides |
|
||
|
||
## Зависимости
|
||
|
||
| Модуль | Что использует |
|
||
|--------|----------------|
|
||
| `.template/lib/domain/company.typ` | `company-profile()` и `validate-company()` |
|
||
| `.template/companies/*/data.json` | Публичные реквизиты организаций |
|
||
| `.template/companies/*/logo.*` | Публичные логотипы |
|
||
| `.template/lib/assets/placeholders/` | Безопасные круг и крест |
|
||
|
||
## Инварианты
|
||
|
||
- Адаптер не сканирует `assets/` или `.private/`.
|
||
- Относительные внутренние paths создаются в infrastructure-файле.
|
||
- Private paths организаций создаются адаптером сотрудников из явной настройки и передаются как готовые `path`.
|
||
- Идентификатор компании выбирается из явного registry.
|
||
- Публичные JSON не содержат путей к реальным подписям и печатям.
|
||
- `none` сохраняется как отсутствие ресурса и обрабатывается media policy.
|
||
- Указанный override не подменяется placeholder при ошибке загрузки.
|
||
|
||
## Намеренно НЕ обрабатывает
|
||
|
||
- Layout логотипа, подписи или печати.
|
||
- Поиск файлов по имени.
|
||
- Сетевую загрузку реквизитов.
|
||
|
||
## Заметки для агента
|
||
|
||
> Typst `path` сохраняет контекст файла, в котором создан. Public company paths создавайте здесь, а absolute `.private/` paths — только в private/employee adapter. Значения `auto` и `none` должны различаться: `auto` означает взять публичное значение профиля, `none` — осознанно применить media policy.
|