# Модуль: Организация **Ответственность**: описывает единый нормализованный профиль юридического лица и его фирменных ресурсов. **Расположение**: `.template/lib/domain/company.typ` ## Публичный интерфейс | Символ | Тип | Описание | |--------|-----|----------| | `company-profile()` | конструктор dictionary | Создаёт профиль из секций `legal`, `contacts`, `banking`, `brand`, `director`, `resources` | | `validate-company()` | функция | Проверяет обязательные реквизиты и типы необязательных полей | | `company-display-name()` | чистая функция | Возвращает полное или краткое наименование по политике профиля | | `company-resource()` | чистая функция | Возвращает нормализованное значение ресурса из уже построенного profile | ## Зависимости | Модуль | Что использует | |--------|----------------| | Нет | Domain не читает JSON и не строит пути | ## Инварианты - `id`, полное наименование и юрисдикция заданы. - ИНН/КПП/ОГРН и БИН/КБЕ хранятся как строки, чтобы не терять ведущие нули и формат. - Контактные и банковские поля имеют единые ключи для всех компаний; неприменимое поле равно `none`. - Brand color нормализован до color до передачи renderer. - Логотип, подпись и печать имеют значение `none`, `path` или готовый content; произвольная строка после infrastructure-нормализации не допускается. - Director содержит должность и ФИО; ресурсы подписи и печати хранятся отдельно и не задают координаты на странице. ## Намеренно НЕ обрабатывает - Поиск компании по содержимому документа. - Чтение `.template/companies/` и `.private/`. - Отрисовку логотипа, подписи, печати и реквизитов. - Валидацию законодательства конкретной юрисдикции. ## Заметки для агента > Существующие JSON-файлы отличаются по набору полей. Нормализуйте их через infrastructure, не добавляйте условные ключи в renderer. Для РФ и Казахстана используйте общую структуру с `none` для неприменимых идентификаторов. Не переносите пользовательские изображения в CompanyProfile.