# Модуль: Технико-коммерческое предложение **Ответственность**: формирует ТКП как самостоятельный профиль с предметом, ценой, сроками, коммерческими условиями и приложениями. **Расположение**: `.template/lib/presentation/profiles/commercial-offer.typ` ## Публичный интерфейс | Символ | Тип | Описание | |--------|-----|----------| | `commercial-offer-profile()` | конструктор `DocumentProfile` | Принимает адресата, предмет, стоимость, валюту, сроки и validity | | `render-commercial-offer()` | renderer-функция | Собирает шапку, резюме предложения, body, условия, подпись и приложения | | `commercial-terms()` | domain-normalizer | Нормализует цену, НДС, валюту, срок и порядок оплаты | | `commercial-offer-validators()` | массив functions | Проверяет предмет и обязательные коммерческие поля | ## Зависимости | Модуль | Что использует | |--------|----------------| | `.template/lib/domain/document.typ` | `DocumentProfile` и context | | `.template/lib/domain/parties.typ` | Recipient и Signer | | `.template/lib/domain/attachments.typ` | Календарный план, ТЗ и другие приложения | | `.template/lib/presentation/foundation.typ` | Typography, page и media policy | | `.template/lib/presentation/components.typ` | Letter shell, money/date blocks, company footer, signature block | ## Инварианты - ТКП имеет собственный `profile.id` и renderer, а не boolean-режим письма. - Стоимость хранится структурированно: amount, currency, tax note; renderer не разбирает свободную строку. - Срок выполнения и срок действия предложения являются разными полями. - Приложения используют общий AttachmentSet и могут иметь цифровую нумерацию. - Коммерческие defaults принадлежат constructor, но пользователь может заменить текстовые формулировки через content slots. - Renderer не импортирует внешний `G:/TYPST/TKP` и не читает его config. ## Намеренно НЕ обрабатывает - Расчёт стоимости из сметы. - Юридическую проверку налоговой формулировки. - Автоматическое превращение ТКП в договор. - Специфические главы научного отчёта. ## Заметки для агента > Используйте TKP только как контекст сценариев и визуальную подсказку. Не копируйте монолитный facade. Если уникальная иконка действительно нужна, перенесите её в `.template/lib/assets/icons/` и дайте ей семантическое имя. Таблицы календарного плана должны использовать общий `corp-table`, а не локальную реализацию.