@torrow/sdk-docs 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/field-docs/field-doc-entry.ts","../../../src/field-docs/torrow-item-base.ts","../../../src/field-docs/nested/contact-visit-card.ts","../../../src/field-docs/contact-item.ts","../../../src/field-docs/note-item.ts","../../../src/field-docs/notes-field-docs.ts","../../../src/resources/contexts/context-icon-preset.ts","../../../src/field-docs/context-item.ts","../../../src/field-docs/calendar-item.ts","../../../src/field-docs/loyalty-system-item.ts","../../../src/field-docs/session-checkin-field-docs.ts","../../../src/field-docs/resource-item.ts","../../../src/field-docs/service-item.ts","../../../src/field-docs/case-item.ts","../../../src/field-docs/nested/object-info.ts","../../../src/field-docs/mcp-field-catalog.ts","../../../src/field-docs/booking-wizard-field-docs.ts","../../../src/field-docs/mcp-booking-catalog.ts","../../../src/field-docs/auth-token-field-docs.ts","../../../src/field-docs/mcp-auth-catalog.ts","../../../src/field-docs/search-field-docs.ts","../../../src/field-docs/mcp-search-catalog.ts","../../../src/field-docs/mcp-notes-catalog.ts","../../../src/field-docs/loyalty-access-field-docs.ts","../../../src/field-docs/operations-struct-field-docs.ts","../../../src/field-docs/block-reason-field-docs.ts","../../../src/field-docs/api-keys-field-docs.ts","../../../src/field-docs/contact-communication-field-docs.ts","../../../src/field-docs/item-delete-query-field-docs.ts","../../../src/field-docs/item-social-facet-field-docs.ts","../../../src/resources/common/implicit-tag-params.ts","../../../src/field-docs/implicit-tag-params-field-docs.ts","../../../src/field-docs/operations-field-docs.ts","../../../src/field-docs/solution-user-settings-field-docs.ts","../../../src/field-docs/shared-enum-field-docs.ts","../../../src/field-docs/torrow-id-field-docs.ts","../../../src/field-docs/mcp-operations-catalog.ts","../../../src/field-docs/user-profiles-field-docs.ts","../../../src/field-docs/mcp-user-profiles-catalog.ts","../../../src/field-docs/views-field-docs.ts","../../../src/field-docs/mcp-views-catalog.ts","../../../src/field-docs/relations-field-docs.ts","../../../src/field-docs/mcp-relation-catalog.ts"],"sourcesContent":["/**\n * Структурированное описание поля DTO для **ИИ и генерации MCP-инструментов**\n * (параметры `inputSchema`, описания аргументов, few-shot).\n *\n * Строковый вид для промптов: {@link fieldDocToString}.\n */\nexport type ItemFieldDoc = {\n /** Смысл поля и формат значения. */\n description: string;\n /** Примеры литералов (как в API/JSON), не выдумывать формат id — только иллюстрация. */\n examples?: readonly string[];\n /** Коротко: типичный сценарий использования в клиенте (UI, права, бизнес-поток). */\n usage?: string;\n /** Ссылка на вложенную схему OpenAPI `components.schemas.*`. */\n valueSchema?: string;\n};\n\nexport function fieldDocToString(doc: ItemFieldDoc): string {\n const parts = [doc.description.trim()];\n if (doc.examples?.length) {\n parts.push(`Примеры: ${doc.examples.join(\"; \")}.`);\n }\n if (doc.usage) {\n parts.push(`В продукте: ${doc.usage}`);\n }\n if (doc.valueSchema) {\n parts.push(`Схема значения: ${doc.valueSchema}.`);\n }\n return parts.join(\" \");\n}\n\n/** Сводка в одну строку для обратной совместимости и простых промптов. */\nexport function mapFieldDocsToStrings<const T extends Record<string, ItemFieldDoc>>(\n entries: T,\n): { [K in keyof T]: string } {\n const out = {} as { [K in keyof T]: string };\n for (const key of Object.keys(entries) as (keyof T)[]) {\n out[key] = fieldDocToString(entries[key]);\n }\n return out;\n}\n","/**\n * База **`TorrowItem`** — структурированные записи + строковая проекция.\n * @see components.schemas.TorrowItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowItemBaseFieldDocEntries = {\n id: {\n description:\n \"Стабильный идентификатор элемента в Torrow (torrow id), строка. В путях REST: `/api/v1/{domain}/{torrowId}`.\",\n examples: [\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"],\n usage:\n \"При create/update передаётся в URL/теле; клиент хранит id после ответа сервера. Связь с операциями блокировки/удаления по itemId.\",\n },\n name: {\n description: \"Отображаемое имя элемента в списках, карточке и поиске.\",\n examples: [\"Моя услуга\", \"Иван Иванов\", \"Каталог услуг\"],\n usage:\n \"Заголовок в mind-map и списках; часто редактируется вместе с masterInfo. У контактов с заполненным `visitCard` часто совпадает с отображаемым именем в слоте FullName.\",\n },\n uniqueName: {\n description:\n \"Уникальное имя в рамках правил продукта (slug для публичной ссылки на хостинге продукта). Может быть пустым.\",\n examples: [\"demo_booking\", \"city_services\"],\n usage:\n \"Проверка уникальности на сервере; используется в URL публичной карточки. Не путать с id элемента.\",\n },\n image: {\n description: \"Метаданные основного изображения/аватара элемента.\",\n valueSchema: \"FileInfo\",\n usage:\n \"Превью в карточке; загрузка байтов через `.../image/puturl` (`fileId`, опционально `fileName`/`fileSize` в query), затем в теле **`create`**/**`update`** — **`{ id }`** (как torrow-apps). В ответах GET — полный **FileInfo** (`url`, `fileName`, …). **image/info**, **updateImageId** — после создания.\",\n },\n masterInfo: {\n description: \"Заголовок, подзаголовок, локализованные строки для карточки и анонса.\",\n valueSchema: \"MasterInfo\",\n usage: \"Отображение в шапке элемента; различается по типам элементов.\",\n },\n publicityType: {\n description: \"Кто может видеть элемент и как выдаётся доступ (персональный, по ссылке, публичный и т.д.).\",\n examples: [\n \"Personal\",\n \"Link\",\n \"PublicAvailable\",\n \"PublicWithRequest\",\n \"Private\",\n \"Undefined\",\n ],\n usage:\n \"Пайп `ttPublicityType` и настройки создания: Personal по умолчанию в формах; Link при создании дочернего ресурса от родителя (см. resource-item-business). Для карточек «только по ссылке» часто сочетается с `anyoneAccess: Read` и отключённым поиском (`searchMode: NoneSearchMode`). Текстовый **`client.search.*`** (contacts/notes/…) индексирует только **`PublicAvailable`** / **`PublicWithRequest`**; смена — **`updatePublicity`** (см. **`docs/agents/participation-flow.md`** §3).\",\n },\n searchMode: {\n description: \"Участие элемента в поиске/выдаче (контракт API).\",\n examples: [\"UnknownSearchMode\", \"NoneSearchMode\", \"Partial\", \"Full\"],\n usage:\n \"Фильтрация в списках и индексация. `NoneSearchMode` — элемент не ищется в общей выдаче, но может открываться по прямой ссылке/uniqueName. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n anyoneAccess: {\n description: \"Параметры анонимного или широкого доступа без явного участия.\",\n valueSchema: \"AnyoneAccess\",\n examples: [\"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n usage:\n \"С `publicityType: Link` и `Read` аноним может читать карточку по ссылке в пределах прав сервера. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n tags: {\n description: \"Список строковых тегов (хэштеги) для группировки и фильтров.\",\n examples: [\"работа\", \"семья\", \"срочно\"],\n },\n rating: {\n description: \"Агрегированный рейтинг/оценки, если включены для типа.\",\n valueSchema: \"Rating\",\n },\n personalInfo: {\n description:\n \"Персональное участие текущего профиля в элементе: роль участника, порядок сортировки, напоминания, тип контента.\",\n valueSchema: \"PersonalInfo\",\n usage:\n \"В сервисе проверяется itemContentType Full для сценариев check-in; права через OperationType на item.\",\n },\n blockInfo: {\n description: \"Состояние и причина блокировки элемента.\",\n valueSchema: \"BlockInfo\",\n usage:\n \"Методы block/unblock по типу объекта (Case, Contact, Note, …). Выполняет только **администратор Torrow**; обычная сессия — HTTP 403.\",\n },\n groupInfo: {\n description: \"Связь с группами, родителями, иерархией mind-map.\",\n valueSchema: \"GroupInfo\",\n },\n solutionData: {\n description: \"Предметная конфигурация «решения» под тип элемента.\",\n valueSchema: \"SolutionData\",\n usage:\n \"У контакта часто задаёт раскладку карточки: `viewBlockSettings.blockSettings[]` с `name`, `order` и **числовым** `objectType` (в продукте: 1003 — заметка, 1005 — услуга и т.д.; см. константы клиента `NOTE`/`SERVICE`). Строковые имена типов в других полях (`childItemStats.objectType`) приходят как enum-строки.\",\n },\n childItemStats: {\n description: \"Агрегированная статистика по дочерним элементам (количества по типам).\",\n valueSchema: \"ChildItemStat[]\",\n examples: [\n '[{\"objectType\":\"Service\",\"itemCount\":2},{\"objectType\":\"Note\",\"itemCount\":1}]',\n ],\n usage:\n \"На странице услуги: решение показывать ли check-in при отсутствии детей. Для контакта обычно приходит при `GET .../contacts/{id}?includeChildTypes=true` (см. OpenAPI). Без авторизации список дочерних id через отдельные эндпоинты mind-map может быть недоступен.\",\n },\n feedbackOptions: {\n description: \"Настройки сбора отзывов и обратной связи.\",\n valueSchema: \"FeedbackOptions\",\n },\n integrationIds: {\n description: \"Идентификаторы подключённых интеграций (внешние системы).\",\n examples: [\"integration-uuid-1\"],\n },\n meta: {\n description:\n \"Служебная мета: версия объекта для оптимистичных обновлений, soft-delete, архив, даты.\",\n valueSchema: \"ObjectInfo\",\n usage: \"При update/delete передаётся `versionToCheck` из `meta.version` в query (см. описание метода в OpenAPI).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemBaseFieldDocs = mapFieldDocsToStrings(torrowItemBaseFieldDocEntries);\n","/**\n * Подробности **`ContactItem.visitCard`** и полей **`ContactVisitCardField`**.\n *\n * Это поле задаёт **слоты отображения** (визитная вёрстка контакта), а не сущность «Профиль пользователя».\n * Профиль — отдельный продуктовый и API-контур (`profileType`, операции **`/api/v1/user/profiles`**).\n *\n * `expression` в API — JSON в виде **строки**: парсинг на стороне клиента, тип слота задаёт источник данных\n * (поля контакта, `communications`, `addresses`). Клиент может пересчитывать отображаемую строку `value`\n * из `expression` и актуальных полей контакта перед сохранением.\n */\nimport type { ItemFieldDoc } from \"../field-doc-entry.js\";\n\nexport const contactVisitCardFieldDoc: ItemFieldDoc = {\n valueSchema: \"ContactVisitCard\",\n description:\n \"Структура **слотов отображения** контакта (массив `fields`): что показать в блоке «визитка» в UI. Для **контакта** в продукте длина `fields` фиксирована: **ровно три элемента** (слоты с `number` 0…2); лишние записи не используйте при сохранении через API. Заполняется у обычных контактов и у **Профиля** пользователя (контакт с `profileType`, напр. `MyProfile`), но **не заменяет** Профиль: Профиль — это контакт, привязанный к пользователю и получаемый через API **User** (`/api/v1/user/profiles`), см. `ContactItem.profileType`. У каждого слота есть порядковый номер (`number` в API), сохранённая строка `value` и поле `expression` — **отдельная JSON-строка** (в OpenAPI тип string), внутри объект с полем `type` и при необходимости `rid`. Тип задаёт, **из каких полей контакта** (или из какой записи в `communications`/`addresses`) брать текст при показе и при пересчёте на клиенте.\",\n examples: [\n '{\"type\":\"FullName\"}',\n '{\"type\":\"LastNameFirstName\"}',\n '{\"type\":\"Description\"}',\n '{\"type\":\"Phone\",\"rid\":\"0123456789abcdef01234567\"}',\n '{\"type\":\"Email\",\"rid\":\"abcdef0123456789abcdef01\"}',\n '{\"type\":\"Website\",\"rid\":\"fedcba9876543210fedcba98\"}',\n ],\n usage:\n \"В теле API `expression` — строка: `JSON.parse` даёт объект с полем `type` (enum в OpenAPI — `VisitCardExpressionType` и родственные значения для карточек кейса). Для контакта типичны FullName, LastNameFirstName, Initials, ShortName, Name, Organization, OrganizationPosition, Position, Description, Phone, Email, Website, Address, PlaceAddress. Для Phone/Email/Website/Address в JSON указывают `rid`, совпадающий с `rid` в `communications` или `addresses`. Для вычисляемых типов подпись строится из `firstName`/`lastName`/`middleName`, `company`, `position`, `description`. `value` — сохранённое отображаемое значение слота. **Не отправляйте больше трёх элементов в `fields` для контакта** — три слота соответствуют форме клиента; контакты/телефоны вынесены в `communications`, а не в четвёртый слот визитки. Разметка на экране: слоты по `number` 0…2; по типу выбирают иконку и действие (например, открыть адрес). На **`contacts.create`** и **`contacts.update`** SDK при наличии объекта **`visitCard`** в теле дополняет недостающие слоты 0…2 пустыми `{ number, value: \\\"\\\" }`, чтобы снять отказы схемы БД при неполном массиве. Добавление **Профиля** (привязка контакта к пользователю) — через операции **User** над **`/api/v1/user/profiles`**, не через заполнение только этого поля; после сохранения у Профиля может быть и `visitCard`, и нужный `profileType`.\",\n};\n","/**\n * **`ContactItem`** — структурированные описания полей.\n * @see components.schemas.ContactItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { contactVisitCardFieldDoc } from \"./nested/contact-visit-card.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const contactItemSpecificFieldDocEntries = {\n addresses: {\n description: \"Почтовые и другие адреса контакта.\",\n valueSchema: \"Address[]\",\n usage: \"Отображение адреса в карточке; клик открывает карту/детали.\",\n },\n birthday: {\n description: \"Дата рождения контакта.\",\n examples: [\"1990-05-15T00:00:00.000Z\"],\n },\n communications: {\n description:\n \"Каналы связи: телефон, email, сайты, мессенджеры и т.д. У одного типа может быть несколько записей (например, несколько WebSite) — различаются полем order.\",\n valueSchema: \"Communication[]\",\n usage:\n \"У телефона в `value` — отображаемый формат, в `valueForSearch` — нормализованные цифры для поиска. У мессенджеров (`Telegram`, `Max`) `value` часто хранит идентификатор/handle. `checkDate` — read-only (ответ GET), в **`CommunicationForCreateOrUpdate`** нет. `checkState` опционален при create/update; если не передан — SDK подставляет `Unchecked`. Основной канал для уведомлений — `personalInfo.defaultCommunication`.\",\n },\n dates: {\n description: \"Памятные даты (именины, юбилеи).\",\n valueSchema: \"MemorableDate[]\",\n },\n firstName: {\n description: \"Имя (поле визитки; для человека — имя, для «организации как контакта» может хранить часть названия).\",\n examples: [\"Иван\", \"Студия\"],\n usage: \"Вместе с lastName/middleName может заполняться даже у бизнес-контактов; отображаемый заголовок чаще смотри в `name` и visitCard.\",\n },\n lastName: {\n description: \"Фамилия или вторая часть названия визитки.\",\n examples: [\"Иванов\", \"Запись\"],\n usage: \"Смысл поля тот же, что у firstName: не всегда классическое ФИО физлица.\",\n },\n middleName: { description: \"Отчество.\", examples: [\"Иванович\"] },\n company: { description: \"Организация / место работы.\", examples: [\"ООО Ромашка\"] },\n position: { description: \"Должность.\", examples: [\"Врач\"] },\n description: {\n description: \"Свободный текст описания контакта (биография, заметки).\",\n },\n gender: {\n description: \"Пол.\",\n valueSchema: \"Gender\",\n },\n registerInfo: {\n description:\n \"Дополнительные поля, связанные с регистрацией пользователя (хобби, география и т.д. — см. схему `RegisterInfo` в OpenAPI), если контакт участвует в **Профиле** при регистрации.\",\n valueSchema: \"RegisterInfo\",\n usage: \"Может заполняться при первичной регистрации вместе с контактными данными **Профиля** (контакта пользователя).\",\n },\n photos: {\n description: \"Дополнительные фотографии помимо image.\",\n valueSchema: \"FileInfo[]\",\n },\n visitCard: contactVisitCardFieldDoc,\n profileType: {\n description:\n \"Роль контакта относительно учётной записи пользователя Torrow. Значения — строковый enum в OpenAPI (`ProfileType`). **Не путать с полем `visitCard`:** это разные вещи (см. ниже).\",\n valueSchema: \"ProfileType\",\n usage:\n \"**Профиль** в продукте — это `ContactItem`, который описывает самого пользователя Torrow и привязан к его учётной записи. В API такой контакт помечается, в частности, значением **`MyProfile`**: участие в записях, обратная связь, выбор «с какого профиля действовать», личный кабинет. У одного пользователя может быть несколько таких контактов (лимит задаёт продукт). Список и добавление **Профилей** выполняются **отдельными операциями раздела User** в OpenAPI (например `GET`/`POST` **`/api/v1/user/profiles`**, ответы `ProfileListResp` / `AddProfileResp`), а не только общим CRUD контактов по `/api/v1/contacts/...`. В SDK: **`TorrowClient.profiles.list()`** возвращает **`ContactItem[]`** (ответ HTTP — **`ProfileListResp`**); описания — **`ProfilesSdkMethods`**, **`ProfileListResp`**, **`AddProfileResp`** в `mcpUserProfilesFieldCatalog`. Обычный контакт в адресной книге без роли профиля владельца — как правило **`None`** или отсутствие значения. **`AnyProfile`**, **`CopyProfile`**, **`UnknownProfile`** — прочие значения enum; уточняй по спецификации и ответам сервера. Поле **`visitCard`** — это **не** Профиль: это структура слотов отображения (как визитка на экране) и может быть у разных контактов, включая Профиль; сам факт «это Профиль пользователя» задаётся **`profileType`** и связью через API пользователя. Для **`POST /api/v1/contacts`** поля **`profileType`**, **`profileProperties`**, **`hasTimetable`** в типе **`ContactItemForCreateOrUpdate`** нет — они передаются при **`client.profiles.add`** в типе **`UserProfileItemForAdd`**.\",\n },\n activityStatus: {\n description:\n \"Статус активности контакта в UI. **Только для чтения:** в теле `POST`/`PUT` контактов не задаётся; в **`TorrowItemForCreateOrUpdate`** / **`ContactItemForCreateOrUpdate`** поля нет (ключ **`activityStatus`** в `TorrowItemKeysExcludedFromItemWriteBody`).\",\n valueSchema: \"ActivityStatus\",\n },\n profileProperties: {\n description: \"Расширенные свойства профиля.\",\n valueSchema: \"ProfileProperties\",\n usage: \"Часто содержит цвет акцента карточки (`color`, hex) и доступность владельца (`profileUserAvailability`). В **`ContactItemForCreateOrUpdate`** поля нет — передаётся в **`UserProfileItemForAdd`** при **`client.profiles.add`**.\",\n },\n contactProperties: {\n description:\n \"Настройки контакта: видимость расписания контакта (`timetableVisibility`), кто может приглашать (`invitationRight`), право видеть расписание (`timetableVisibilityRight`).\",\n valueSchema: \"ContactProperties\",\n usage:\n \"Маппинг из форм создания/настроек. Расписание может быть скрыто на уровне контакта, при этом дочерние услуги всё равно ведут свою запись и слоты.\",\n },\n hasTimetable: {\n description: \"Признак: у контакта заведено расписание (слоты).\",\n examples: [\"true\", \"false\"],\n usage:\n \"Может быть false, даже если у вложенных услуг есть бронирование: расписание живёт на услуге, а не на контакте. В **`ContactItemForCreateOrUpdate`** поля нет — в **`UserProfileItemForAdd`** при создании Профиля.\",\n },\n loyaltyCard: {\n description: \"Вложенный элемент — карта лояльности, привязанная к контакту.\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contactItemSpecificFieldDocEntries,\n personalInfo: {\n description:\n \"Участие профиля пользователя в контакте: роль участника, способы уведомлений, подписки, псевдоним.\",\n valueSchema: \"ContactPersonalInfo\",\n usage:\n \"Отличается от базового PersonalInfo других элементов; хранит profileId, participantState/Type. Для открытия карточки по ссылке без входа в ответе может быть сценарий с `participantType` вроде PublicReader и списком `operationList` (в т.ч. чтение дочерних элементов при наличии прав сервера).\",\n },\n};\n\nexport const contactItemFieldDocs = mapFieldDocsToStrings(\n contactItemFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const contactItemSpecificFieldDocs = mapFieldDocsToStrings(\n contactItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`NoteItem`**\n * @see components.schemas.NoteItem; UI: `libs/mobile/mind-map/.../note-info.component`\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst noteSpecificFieldDocEntries = {\n noteType: {\n description: \"Тип содержимого заметки. Поддерживаемые сценарии SDK: Html и Markdown; остальные серверные значения сохранены для совместимости.\",\n examples: [\n \"Html\",\n \"Markdown\",\n ],\n valueSchema: \"NoteType\",\n usage:\n \"Для нового содержимого явно задавайте Html или Markdown. Файлы прикладываются через files независимо от формата текста; imagePreviewSize задаёт отображение вложений. Заметки на карточке контакта могут попадать в отдельный блок ContactItem.solutionData.viewBlockSettings.\",\n },\n data: {\n description:\n \"Содержимое: HTML-строка для Html, исходный Markdown для Markdown (тип unknown в OpenAPI сохранён для совместимости).\",\n examples: ['\"<p>Заметка</p>\"', '\"# Заметка\\\\n\\\\nТекст\\\\n\"'],\n usage: \"SDK сохраняет исходную строку, пробелы и переносы без преобразования разметки. Рендеринг и очистка HTML относятся к приложению.\",\n },\n files: {\n description: \"Вложенные файлы (не основное image).\",\n valueSchema: \"FileInfo[]\",\n examples: ['[ { \"id\": \"…\" } ]', '[ { \"id\": \"…\", \"fileName\": \"a.pdf\", \"url\": \"…\", … } ]'],\n usage:\n \"**create**/**update**: элементы с **`id`** достаточно. **getById** / read — полный **FileInfo** (url, fileName, fileSize, urlExpiration, refreshUrl).\",\n },\n imagePreviewSize: {\n description: \"Размер превью в списке/слайдере.\",\n examples: [\"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\", \"Hidden\"],\n valueSchema: \"ImagePreviewSize\",\n usage: \"Hidden скрывает файлы в UI; Slider — режим карусели.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const noteItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...noteSpecificFieldDocEntries,\n};\n\nexport const noteItemFieldDocs = mapFieldDocsToStrings(noteItemFieldDocEntries);\n","/**\n * MCP: методы **`client.notes`** (`NotesFacade`), не покрытые общим **`TorrowItemFacadeSdkMethods`**.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const notesSdkMethodFieldDocEntries = {\n getFileInfo: {\n description:\n \"`GET /api/v1/notes/{torrowId}/file/info` → **`FileInfo`**. Query **`fileId`** — id вложения из `files[]` (обязателен при нескольких файлах).\",\n valueSchema: \"(torrowId: string, fileId: string, options?: { signal? }) → FileInfo\",\n usage:\n \"Скачивание вложения: если в **`NoteItem.files`** у элемента с этим `id` есть живой `url` (`urlExpiration` > now), можно брать URL оттуда; иначе **`client.notes.getFileInfo(noteId, fileId)`**. Пример: **`notes-file-text-urls.ts`**, **`notes-file-image-urls.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const notesSdkMethodFieldDocs = mapFieldDocsToStrings(notesSdkMethodFieldDocEntries);\n","/**\n * Пресеты иконок контекста (torrow-apps `IconSetService` + `ContextFormMapper`).\n *\n * На wire нет поля `iconName`: пресет = SVG-файл в `ContextItem.image`\n * с `fileName` вида `{preset}.svg` (и заливка из `color`). Произвольные\n * JPEG/PNG/прочие SVG тоже допустимы через обычный upload `image`.\n */\nimport {\n CONTEXT_ICON_PRESET_PATHS,\n type ContextIconPresetPathKey,\n} from \"./context-icon-preset-paths.js\";\n\n/** Ключи пресетов — значения совпадают с `IconSetService.icons` / basename `*.svg`. */\nexport const ContextIconPresetValues = {\n Anchor: \"anchor\",\n Animals: \"animals\",\n Auto: \"auto\",\n Beauty: \"beauty\",\n Beauty2: \"beauty2\",\n Botanical: \"botanical\",\n Children: \"children\",\n Devices: \"devices\",\n Entertainment: \"entertainment\",\n Evolution: \"evolution\",\n Family: \"family\",\n Friends: \"friends\",\n Gamepad: \"gamepad\",\n Health: \"health\",\n Hobbies: \"hobbies\",\n Home: \"home\",\n Idea: \"idea\",\n Money: \"money\",\n Music: \"music\",\n Palm: \"palm\",\n Party: \"party\",\n ReparingService: \"reparingService\",\n Security: \"security\",\n Smile: \"smile\",\n Sport: \"sport\",\n Theater: \"theater\",\n Travel: \"travel\",\n Work: \"work\",\n World: \"world\",\n RegisterOrder: \"register_order\",\n} as const satisfies Record<string, ContextIconPresetPathKey>;\n\nexport type ContextIconPresetValue =\n (typeof ContextIconPresetValues)[keyof typeof ContextIconPresetValues];\n\nconst PRESET_SET = new Set<string>(Object.values(ContextIconPresetValues));\n\nlet nextSvgId = 0;\n\nexport function isContextIconPreset(value: string | null | undefined): value is ContextIconPresetValue {\n return typeof value === \"string\" && PRESET_SET.has(value);\n}\n\n/** Имя файла image для пресета — как в `ContextFormMapper` (`iconName + \".svg\"`). */\nexport function getContextIconPresetFileName(preset: ContextIconPresetValue): string {\n return `${preset}.svg`;\n}\n\n/**\n * Восстановить ключ пресета из `image.fileName` (basename без `.svg`).\n * Для кастомных картинок / неизвестных имён — `undefined`.\n */\nexport function parseContextIconPresetFromImage(\n image: { fileName?: string | null } | null | undefined,\n): ContextIconPresetValue | undefined {\n const fileName = image?.fileName;\n if (!fileName) {\n return undefined;\n }\n const base = fileName.split(/[/\\\\]/).pop() ?? fileName;\n const withoutExt = base.replace(/\\.svg$/i, \"\");\n return isContextIconPreset(withoutExt) ? withoutExt : undefined;\n}\n\nexport type BuildContextIconSvgOptions = {\n /** Заливка path; в apps обычно `ContextItem.color`. */\n color?: string;\n backgroundColor?: string;\n /** Атрибут `inversed` на path — как в `IconSetService.createSvg`. */\n inversed?: boolean;\n};\n\n/**\n * SVG-разметка пресета (без DOM) — эквивалент `IconSetService.getIcon` / blob из `getIconUrl`.\n * Готово к upload как `image/svg+xml` с именем {@link getContextIconPresetFileName}.\n */\nexport function buildContextIconSvg(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): string {\n const d = CONTEXT_ICON_PRESET_PATHS[preset];\n const id = `iconSet${(nextSvgId += 1)}`;\n const colorAttr = options?.color ? ` fill=\"${escapeXmlAttr(options.color)}\"` : \"\";\n const inversedAttr =\n options?.inversed !== undefined ? ` inversed=\"${options.inversed ? \"true\" : \"false\"}\"` : \"\";\n const styleAttr = options?.backgroundColor\n ? ` style=\"background-color: ${escapeXmlAttr(options.backgroundColor)};\"`\n : \"\";\n\n return (\n `<svg viewBox=\"7 7 40 40\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"${styleAttr}>` +\n `<defs><path d=\"${escapeXmlAttr(d)}\" id=\"${id}\"${colorAttr}${inversedAttr}/></defs>` +\n `<use xlink:href=\"#${id}\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\"/>` +\n `</svg>`\n );\n}\n\n/** UTF-8 bytes SVG для `uploadBytes` / `getImagePutUrl`. */\nexport function buildContextIconSvgBytes(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): Uint8Array {\n return new TextEncoder().encode(buildContextIconSvg(preset, options));\n}\n\nfunction escapeXmlAttr(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n","/**\n * **`ContextItem`** — группа/метка для организации элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\nimport { ContextIconPresetValues } from \"../resources/contexts/context-icon-preset.js\";\n\nconst contextSpecificFieldDocEntries = {\n color: {\n description:\n \"Цвет метки контекста в UI; для пресет-иконки apps также заливают этим цветом SVG path (`buildContextIconSvg(..., { color })`).\",\n examples: [\"#FF5722\", \"#2E7D32\", \"rgb(255,0,0)\"],\n usage: \"Визуальная группировка в mind-map и списках; вместе с `image` для пресета.\",\n },\n description: {\n description: \"Текстовое описание назначения контекста.\",\n examples: [\"Рабочие контакты\", \"Личное\"],\n },\n image: {\n description:\n \"Файл аватара/иконки. В apps выбор пресета = upload SVG с `fileName` `{preset}.svg` (см. MCP **`ContextIconPresetValues`**); произвольный JPEG/PNG тоже допустим через тот же `image`.\",\n examples: ['{ id, fileName: \"home.svg\" }', '{ id, fileName: \"custom.jpg\" }'],\n usage:\n \"Пресет: `buildContextIconSvg` + `getImagePutUrl` + `image: { id }`. Кастом: обычный upload. Обратно: `parseContextIconPresetFromImage(image)`.\",\n valueSchema: \"FileInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Справочник ключей пресет-иконок (wire — basename `*.svg`, не отдельное поле DTO). */\nexport const contextIconPresetValuesFieldDocEntries = Object.fromEntries(\n Object.entries(ContextIconPresetValues).map(([pascal, key]) => [\n pascal,\n {\n description: `Пресет иконки контекста \\`${key}\\` (torrow-apps IconSetService). На API уходит как image-файл \\`${key}.svg\\`.`,\n examples: [key, `${key}.svg`],\n usage: `ContextIconPresetValues.${pascal}; buildContextIconSvg / getContextIconPresetFileName.`,\n valueSchema: \"ContextIconPresetValues\",\n } satisfies ItemFieldDoc,\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const contextIconPresetValuesFieldDocs = mapFieldDocsToStrings(contextIconPresetValuesFieldDocEntries);\n\nexport const contextItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contextSpecificFieldDocEntries,\n};\n\nexport const contextItemFieldDocs = mapFieldDocsToStrings(contextItemFieldDocEntries);\n","/**\n * **`CalendarItem`**\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\n/**\n * Индексы вида расписания (`calendarViewIndex` / `timetableView`) для MCP.\n * В JSON — **число**; имена Day/Schedule — только подписи (как `LayoutTypeValues`).\n */\nexport const timetableViewTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник int-кодов вида расписания по умолчанию (`CalendarItem.calendarViewIndex`, `ServiceItem.timetableView`). Не OpenAPI-enum: в теле API передавай **число** (`0`…`5`).\",\n valueSchema: \"TimetableViewTypeValues\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"],\n usage:\n \"UI apps: Day / Poster / Schedule. В TypeScript SDK — `TimetableViewTypeValues.*` (то же число). Не передавай имя `Schedule` строкой — только int.\",\n },\n Day: {\n description: \"`0` — вид «День» (дефолт формы календаря в apps, если тип не выбран явно).\",\n examples: [\"0\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Month: {\n description: \"`1` — вид «Месяц» (в UI календаря часто скрыт).\",\n examples: [\"1\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n MonthEventList: {\n description: \"`2` — список событий месяца.\",\n examples: [\"2\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n ConnectCalendar: {\n description: \"`3` — подключённый/внешний календарь.\",\n examples: [\"3\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Poster: {\n description: \"`4` — «Афиша».\",\n examples: [\"4\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Schedule: {\n description: \"`5` — «Список событий» / Schedule.\",\n examples: [\"5\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableViewTypeValuesFieldDocs = mapFieldDocsToStrings(timetableViewTypeValuesFieldDocEntries);\n\nconst calendarSpecificFieldDocEntries = {\n description: {\n description: \"Описание календаря для пользователя.\",\n examples: [\"Рабочий календарь 2025\"],\n },\n calendarViewIndex: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day, `1` Month, `2` MonthEventList, `3` ConnectCalendar, `4` Poster, `5` Schedule. Полный справочник — MCP **`TimetableViewTypeValues`**.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage:\n \"UI: `CALENDAR_FORM.TYPE_INPUT`. То же число, что `ServiceItem.timetableView`. Apps проверяют truthy — `0` (Day) неотличим от «не задано» при чтении в UI.\",\n },\n scheduleRangeExceptions: {\n description: \"Исключения из базового расписания: замены и исключённые интервалы.\",\n valueSchema: \"ScheduleRangeExceptions\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const calendarItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...calendarSpecificFieldDocEntries,\n};\n\nexport const calendarItemFieldDocs = mapFieldDocsToStrings(calendarItemFieldDocEntries);\n","/**\n * **`LoyaltySystemItem`** — поля create/update, критичные для MCP\n * (wire-строки OpenAPI в `examples`, не имена TS-констант).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst loyaltySystemSpecificFieldDocEntries = {\n description: {\n description: \"Описание программы лояльности.\",\n examples: [\"Программа скидок 2025\"],\n },\n startDate: {\n description: \"Дата начала программы (ISO date-time).\",\n examples: [\"2025-01-01T00:00:00.000Z\"],\n },\n expiredDate: {\n description: \"Дата окончания программы (ISO date-time).\",\n examples: [\"2026-01-01T00:00:00.000Z\"],\n },\n loyaltyCardIssueType: {\n description:\n \"Способ выпуска карты. В JSON — **строка**: `Manual`, `AutoActive`, `AutoIssued`. Каталог MCP **`LoyaltyCardIssueType`**. Дефолт apps create: `AutoActive`.\",\n examples: [\"AutoActive\", \"Manual\", \"AutoIssued\"],\n valueSchema: \"LoyaltyCardIssueType\",\n },\n loyaltyCardAnyoneAccess: {\n description:\n \"Публичный доступ к карте. В JSON — **строка** `AnyoneAccess`: `Read`, `NoneAnyoneAccess`, `ReadWrite`, `Denied`. Каталог **`AnyoneAccess`**. Дефолт apps: `Read`.\",\n examples: [\"Read\", \"NoneAnyoneAccess\", \"ReadWrite\", \"Denied\"],\n valueSchema: \"AnyoneAccess\",\n },\n loyaltyCardUpdateKeyInformation: {\n description:\n \"Правило key-полей карты. В JSON — **строка**: `NonKeyDisallowed`, `NonKeyAllowed`. Каталог **`LoyaltyCardUpdateKeyInformation`**. Дефолт apps: `NonKeyDisallowed`.\",\n examples: [\"NonKeyDisallowed\", \"NonKeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateKeyInformation\",\n },\n loyaltyCardUpdateNonKeyInformation: {\n description:\n \"Правило non-key полей. В JSON — **строка**: `KeyDisallowed`, `KeyAllowed`. Каталог **`LoyaltyCardUpdateNonKeyInformation`**.\",\n examples: [\"KeyDisallowed\", \"KeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateNonKeyInformation\",\n },\n loyaltyCardUsagePeriod: {\n description: \"Срок действия карты в днях.\",\n examples: [\"365\", \"30\"],\n },\n beginTransactionValues: {\n description: \"Стартовые начисления на карту (`TransactionValue[]`).\",\n valueSchema: \"TransactionValue[]\",\n },\n initialSubscription: {\n description: \"Опциональная стартовая подписка программы.\",\n valueSchema: \"InitialSubscription\",\n },\n accountingProductNames: {\n description: \"Имена учётных продуктов программы (обязательны вместе с `beginTransactionValues`).\",\n valueSchema: \"AccountingProductName[]\",\n },\n numeratorInfo: {\n description: \"Нумерация карт.\",\n valueSchema: \"NumeratorInfo\",\n },\n businessCardId: {\n description: \"Id визитки/контакта, привязанного к программе.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n contactInformationFieldsRequirements: {\n description: \"Требования к полям контакта при выпуске карты.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...loyaltySystemSpecificFieldDocEntries,\n};\n\nexport const loyaltySystemItemFieldDocs = mapFieldDocsToStrings(loyaltySystemItemFieldDocEntries);\n","/**\n * Вложенные схемы услуги/кейса, нужные MCP для сборки create/update body\n * (wire-литералы строк/чисел, не имена TS-констант).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sessionDurationPropertiesFieldDocEntries = {\n sessionDurationType: {\n description:\n \"Тип длительности сессии. В JSON — **строка** OpenAPI: `Sum`, `Constant`, `Custom`, `SessionDurationNone`, … Каталог MCP **`SessionDurationType`**.\",\n examples: [\"Sum\", \"Constant\", \"Custom\", \"SessionDurationNone\"],\n valueSchema: \"SessionDurationType\",\n },\n timeSelectionType: {\n description:\n \"Кто выбирает время. В JSON — **строка**: `Consumer`, `Executor`, `TimeSelectionNone`. Каталог **`TimeSelectionType`**.\",\n examples: [\"Consumer\", \"Executor\", \"TimeSelectionNone\"],\n valueSchema: \"TimeSelectionType\",\n },\n stateManagementType: {\n description:\n \"Авто/ручное управление состоянием. В JSON — **строка**: `Auto`, `Manual`. Каталог **`StateManagementType`**.\",\n examples: [\"Auto\", \"Manual\"],\n valueSchema: \"StateManagementType\",\n },\n sessionPrecisionType: {\n description:\n \"Точность слота. В JSON — **строка**: `DateTime`, `Date`. Каталог **`SessionPrecisionType`**.\",\n examples: [\"DateTime\", \"Date\"],\n valueSchema: \"SessionPrecisionType\",\n },\n defaultDuration: {\n description: \"Длительность по умолчанию в секундах (для `Constant` / кастомных сценариев).\",\n examples: [\"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sessionDurationPropertiesFieldDocs = mapFieldDocsToStrings(\n sessionDurationPropertiesFieldDocEntries,\n);\n\nexport const checkinPermissionFieldDocEntries = {\n userAccessLevel: {\n description:\n \"Кто может check-in / запись. В JSON — **строка** OpenAPI: `Authenticated`, `Unauthenticated`. Каталог MCP **`UserAccessLevel`**.\",\n examples: [\"Authenticated\", \"Unauthenticated\"],\n valueSchema: \"UserAccessLevel\",\n },\n consumerMinTimeSecBetweenCasesInService: {\n description: \"Минимальный интервал (сек) между кейсами одного потребителя в услуге.\",\n examples: [\"0\", \"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkinPermissionFieldDocs = mapFieldDocsToStrings(checkinPermissionFieldDocEntries);\n","/**\n * **`ResourceItem`** — продуктовый ресурс (слот, аренда, билет и т.д.).\n * @see resource-item-business: publicity Link при создании с parentId\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const resourceItemSpecificFieldDocEntries = {\n description: {\n description: \"Текстовое описание ресурса в каталоге и при записи.\",\n },\n itemId: {\n description: \"Связь с элементом-представлением ресурса в модели API.\",\n examples: [\"uuid\"],\n },\n parentResourceId: {\n description: \"Родительский ресурс в иерархии (подресурсы).\",\n usage: \"Иерархия resource group / вложенные услуги.\",\n },\n timetableId: {\n description: \"Идентификатор расписания, к которому привязан ресурс.\",\n },\n schedule: {\n description: \"Расписание доступности.\",\n valueSchema: \"Schedule\",\n },\n priceInfo: {\n description: \"Отображаемая и расчётная ценовая информация.\",\n valueSchema: \"PriceInfo\",\n },\n item: {\n description: \"Вложенный TorrowItem с контентом ресурса.\",\n valueSchema: \"TorrowItem\",\n },\n parentResource: {\n description: \"Родитель как TorrowItem.\",\n valueSchema: \"TorrowItem\",\n },\n usageType: {\n description: \"Тип потребления ресурса (время, количество и т.д.).\",\n valueSchema: \"UsageType\",\n },\n serviceDescriptions: {\n description:\n \"Связи ресурса с группами услуг. Каждая связь определяется парой `id` услуги + `resourceGroupId`; `ResourceBuilder` формирует имена и `laterBinding` из актуальной услуги и группы.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: {\n description: \"Код номенклатуры или внешний артикул.\",\n examples: [\"SRV-001\"],\n },\n duration: {\n description: \"Длительность в единицах API (часто минуты).\",\n examples: [\"30\", \"60\"],\n },\n priceProperties: {\n description: \"Правила цены.\",\n valueSchema: \"PriceProperties\",\n },\n amountProperties: {\n description:\n \"Количество и лимиты списания. Для записи `totalAmount` передавайте согласованный объект формы: `measure`, `firstValue`, `plusStep`, `minusStep`, `digitsInMeasure`; сокращённый `{ totalAmount }` отклоняется фактической DB-схемой.\",\n valueSchema: \"AmountProperties\",\n },\n usageCondition: {\n description: \"Условия допустимого использования.\",\n valueSchema: \"UsageCondition\",\n },\n appendixList: {\n description: \"Приложения и дополнительные материалы.\",\n valueSchema: \"Appendix[]\",\n },\n paymentProperties: {\n description: \"Настройки оплаты по ресурсу.\",\n valueSchema: \"PaymentProperties\",\n },\n ticketProperties: {\n description: \"Параметры билета/пропуска (в т.ч. state оплаты в кейсе).\",\n valueSchema: \"TicketProperties\",\n usage: \"В кейсе читается ticketProperties.state (Paid/Used) для кнопки оплаты.\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Параметры транзакций лояльности.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n behaviorSettings: {\n description:\n \"SDK-слой поверх `tags`: типизированные параметры поведения ресурса (`ResourceBehaviorSettings`): `marginTimeSec` (`<sec>:MarginTime`) и `lockId` (`<lockNumber>:lockId`) для TTLock.\",\n usage:\n \"Заполняется SDK при чтении (`resourceItems.getById`, `resourceItems.listPersonal`) и сериализуется в `tags` при `resourceItems.create/update`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...resourceItemSpecificFieldDocEntries,\n};\n\nexport const resourceItemFieldDocs = mapFieldDocsToStrings(resourceItemFieldDocEntries);\n\nexport const resourceItemSpecificFieldDocs = mapFieldDocsToStrings(\n resourceItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`ServiceItem`** — услуга с записью и расписанием.\n * @see ServicePage useEffectStartCheckInProcessOnOpen, childItemStats\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const serviceItemSpecificFieldDocEntries = {\n description: {\n description: \"Описание услуги для клиента.\",\n usage:\n \"Текст бронирования, предоплаты и т.п. в списке услуг контакта часто собирается из `buttonName`, `priceInfo`/`priceProperties`, `stepDescriptionList`, а не только из этого поля и `TorrowItem.name`.\",\n },\n placeId: {\n description: \"Идентификатор места оказания.\",\n examples: [\"uuid-place\"],\n },\n place: {\n description: \"Текстовое название или адрес места.\",\n examples: [\"ул. Ленина, 1\"],\n },\n schedule: {\n description: \"Расписание слотов/доступности.\",\n valueSchema: \"Schedule\",\n },\n bookingDuration: {\n description: \"Длительность брони слота (единицы по контракту API, часто секунды/минуты в int64).\",\n examples: [\"3600\"],\n },\n timetableView: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day … `5` Schedule (см. MCP **`TimetableViewTypeValues`**). Не строка.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage: \"UI: `SERVICE_FORM.TYPE_INPUT`. То же число, что `CalendarItem.calendarViewIndex`.\",\n },\n registrationOpen: {\n description: \"Граница открытия записи (смещение или метка — уточнять по Swagger).\",\n },\n registrationClose: {\n description: \"Граница закрытия записи.\",\n },\n maxConsumerQuantity: {\n description: \"Максимум клиентов на слот/услугу.\",\n examples: [\"1\", \"10\"],\n },\n executorIdList: {\n description: \"Список профилей исполнителей.\",\n examples: [\"[uuid1, uuid2]\"],\n },\n needApproval: {\n description: \"Требуется подтверждение заявки исполнителем.\",\n examples: [\"true\", \"false\"],\n },\n timeAlignment: {\n description: \"Шаг сетки времени для слотов.\",\n },\n orderQuote: {\n description:\n \"Квота использования услуги: максимальное число одновременно действующих заказов на пересекающемся интервале. `null` или отсутствие поля означает, что общего лимита услуги нет.\",\n examples: [\"1\", \"10\", \"null\"],\n usage:\n \"Ограничение применяется ко всей услуге независимо от выбранных ресурсов. Не смешивать с `ResourceItem.amountProperties.totalAmount`, которое ограничивает количество конкретного ресурса `Rent`.\",\n },\n marginTime: {\n description: \"Пауза между слотами.\",\n },\n executorUsagePercent: {\n description: \"Доля загрузки исполнителя (0–100 или 0–1 — по контракту).\",\n examples: [\"0.75\"],\n },\n firstWeekDate: {\n description: \"Опорная дата первой недели для построения расписания.\",\n examples: [\"2025-04-07T00:00:00.000Z\"],\n },\n clientGroupId: {\n description: \"Ограничение услуги группой клиентов.\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов (что именно бронируется).\",\n valueSchema: \"ResourceGroup[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при записи (телефон, email и т.д.).\",\n valueSchema: \"ParticipateFieldRequirements\",\n usage: \"TorrowItemHelper.hasRequiredPhoneOrEmail для валидации формы.\",\n },\n appendixList: {\n description: \"Приложения к услуге.\",\n valueSchema: \"Appendix[]\",\n },\n sessionDurationProperties: {\n description:\n \"Правила длительности сессии. Поля-enum — **строки OpenAPI** (`Sum`, `Consumer`, `Auto`, `DateTime`, …); каталоги MCP: `SessionDurationType`, `TimeSelectionType`, `StateManagementType`, `SessionPrecisionType`.\",\n valueSchema: \"SessionDurationProperties\",\n },\n checkInAllCases: {\n description: \"Автоматический чек-ин по всем связанным кейсам.\",\n examples: [\"true\", \"false\"],\n },\n stepDescriptionList: {\n description:\n \"Пошаговое описание сценария услуги. `stepType` — **число** (`1` Time, `2` Resource, `3` Payment); см. `StepDescription`.\",\n valueSchema: \"StepDescription[]\",\n },\n buttonName: {\n description: \"Подпись основной кнопки действия (запись, оформить).\",\n examples: [\"Записаться\"],\n },\n numeratorInfo: {\n description: \"Нумерация заказов/документов.\",\n valueSchema: \"NumeratorInfo\",\n },\n priceProperties: {\n description: \"Правила ценообразования.\",\n valueSchema: \"PriceProperties\",\n },\n priceInfo: {\n description: \"Итоговая ценовая информация.\",\n valueSchema: \"PriceInfo\",\n },\n checkinPermission: {\n description:\n \"Кто и когда может отметить прибытие. `userAccessLevel` — строка OpenAPI (`Authenticated` / `Unauthenticated`); каталог MCP **`UserAccessLevel`** / схема **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n caseActionList: {\n description: \"Автоматические действия при смене состояния кейса.\",\n valueSchema: \"CaseAction[]\",\n },\n packingStrategyProperties: {\n description: \"Упаковка слотов/ресурсов в расписании.\",\n valueSchema: \"PackingStrategyProperties\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Настройки лояльности для услуги.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n behaviorSettings: {\n description:\n \"SDK-слой поверх `tags`: типизированные параметры поведения услуги (`ServiceBehaviorSettings`) для чтения/обновления без ручной работы со строковыми тегами.\",\n usage:\n \"Заполняется SDK при чтении (`services.getById`, `services.listPersonal`) и сериализуется обратно в `tags` при `services.create/update`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const serviceItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...serviceItemSpecificFieldDocEntries,\n};\n\nexport const serviceItemFieldDocs = mapFieldDocsToStrings(serviceItemFieldDocEntries);\n\nexport const serviceItemSpecificFieldDocs = mapFieldDocsToStrings(\n serviceItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`CaseItem`** — **событие** в продукте (визит, запись и т.д.); **заказ** — частный случай события после записи на **услугу** (`createOrder`).\n * @see CasePage getPayButtonType — ticketState, paymentProvider\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const caseItemSpecificFieldDocEntries = {\n beginDate: {\n description: \"Начало периода оказания услуги / визита.\",\n examples: [\"2025-04-12T09:00:00.000Z\"],\n },\n endDate: {\n description: \"Окончание периода.\",\n examples: [\"2025-04-12T10:00:00.000Z\"],\n },\n description: {\n description: \"Комментарий к заказу, пожелания клиента или заметка исполнителя.\",\n },\n placeId: {\n description: \"Идентификатор места.\",\n examples: [\"uuid\"],\n },\n serviceId: {\n description: \"Идентификатор услуги, к которой относится кейс.\",\n examples: [\"uuid\"],\n usage: \"Навигация к карточке услуги; сценарии записи.\",\n },\n groupId: {\n description: \"Идентификатор группового события/пакета кейсов.\",\n },\n place: {\n description: \"Текстовое описание места (если placeId не задан или для отображения).\",\n examples: [\"Кабинет 3\"],\n },\n caseState: {\n description: \"Состояние жизненного цикла заказа.\",\n examples: [\n \"Verifying\",\n \"Waiting\",\n \"Processing\",\n \"Preparing\",\n \"Completed\",\n \"Closed\",\n \"Rejected\",\n \"Canceled\",\n \"TimeControlled\",\n \"TaskNotCompleted\",\n \"TaskCompleted\",\n \"UnknownCaseState\",\n ],\n valueSchema: \"CaseState\",\n usage: \"Отображение статуса в карточке и триггеры case actions.\",\n },\n caseType: {\n description: \"Тип планирования кейса по времени.\",\n examples: [\"Time\", \"RepeatedTime\", \"Today\", \"Week\", \"Later\", \"Date\", \"State\", \"UnknownTimeType\"],\n valueSchema: \"CaseType\",\n },\n caseStateDate: {\n description: \"Момент последнего изменения caseState.\",\n examples: [\"2025-04-12T11:00:00.000Z\"],\n },\n personalInfo: {\n description:\n \"Участие текущего профиля в кейсе: участник, билет, оплата, связанные ResourceItem.\",\n valueSchema: \"CasePersonalInfo\",\n usage:\n \"Для оплаты: personalInfo.caseParticipant, ticketResource.ticketProperties.state (Paid/Used), paymentProperties.paymentProviderType (Cash и т.д.) — см. CasePage.\",\n },\n bookingResourceList: {\n description: \"Забронированные ресурсы (слоты, услуги).\",\n valueSchema: \"BookingResource[]\",\n },\n schedule: {\n description: \"Расписание, связанное с кейсом.\",\n valueSchema: \"Schedule\",\n },\n registrationOpen: {\n description: \"Параметр окна регистрации на кейс (см. Swagger).\",\n },\n registrationClose: {\n description: \"Параметр закрытия регистрации.\",\n },\n visitCard: {\n description: \"Поля визитки/карточки заказа.\",\n valueSchema: \"CaseVisitCard\",\n },\n bookingDuration: {\n description: \"Длительность брони.\",\n examples: [\"60\"],\n },\n maxConsumerQuantity: {\n description: \"Лимит участников.\",\n examples: [\"5\"],\n },\n bookingConsumerQuantity: {\n description: \"Фактическое число записанных.\",\n examples: [\"3\"],\n },\n executorUsagePercent: {\n description: \"Загрузка исполнителя.\",\n },\n availableResources: {\n description: \"Доступные для выбора ресурсы при записи.\",\n valueSchema: \"AvailableResources\",\n },\n needApproval: {\n description: \"Ожидается подтверждение.\",\n examples: [\"true\", \"false\"],\n },\n createSingleCases: {\n description: \"Порождение одиночных кейсов в групповом режиме.\",\n examples: [\"true\", \"false\"],\n },\n orderNumber: {\n description: \"Человекочитаемый номер заказа.\",\n valueSchema: \"OrderNumber\",\n examples: [\"ORD-2025-0042\"],\n },\n checkinPermission: {\n description:\n \"Права на чек-ин. `userAccessLevel` — строка OpenAPI (`Authenticated` / …); см. MCP **`UserAccessLevel`** / **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: {\n description: \"Скрыть кейс в списках пользователя.\",\n examples: [\"true\", \"false\"],\n },\n consumersCount: {\n description: \"Число потребителей (агрегат для UI).\",\n examples: [\"2\"],\n },\n caseSummary: {\n description: \"Краткая сводка по заказу.\",\n valueSchema: \"CaseSummary\",\n },\n appendixList: {\n description: \"Приложения.\",\n valueSchema: \"Appendix[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при участии.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priceProperties: {\n description: \"Ценообразование.\",\n valueSchema: \"PriceProperties\",\n },\n priceInfo: {\n description: \"Цена.\",\n valueSchema: \"PriceInfo\",\n },\n priority: {\n description: \"Приоритет в очереди/обработке.\",\n examples: [\"1.0\"],\n },\n clientGroupId: {\n description: \"Группа клиентов.\",\n },\n caseActionList: {\n description: \"Автоматизации и напоминания.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Лояльность.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...caseItemSpecificFieldDocEntries,\n personalInfo: {\n description:\n \"Для кейса: участие профиля, билет (ticketResource), оплата, caseParticipant — не путать с PersonalInfo базового TorrowItem.\",\n valueSchema: \"CasePersonalInfo\",\n usage: \"Кнопка оплаты vs детали: ticketProperties.state, paymentProviderType.\",\n },\n};\n\nexport const caseItemFieldDocs = mapFieldDocsToStrings(caseItemFieldDocEntries);\n\nexport const caseItemSpecificFieldDocs = mapFieldDocsToStrings(\n caseItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`ObjectInfo`** — обычно `meta` у элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"../field-doc-entry.js\";\n\nexport const objectInfoFieldDocEntries = {\n deleteState: {\n description: \"Состояние мягкого удаления.\",\n valueSchema: \"DeleteState\",\n },\n archiveState: {\n description: \"Состояние архивации.\",\n valueSchema: \"ArchiveState\",\n },\n version: {\n description: \"Версия сущности для оптимистичной блокировки при update/delete.\",\n examples: [\"1\", \"42\"],\n usage: \"Передаётся как versionToCheck в query; несовпадение — конфликт на сервере.\",\n },\n lastModified: {\n description: \"Время последнего изменения (ISO 8601).\",\n examples: [\"2025-04-12T10:30:00.000Z\"],\n },\n createDate: {\n description: \"Время создания (ISO 8601).\",\n examples: [\"2025-01-01T08:00:00.000Z\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const objectInfoFieldDocs = mapFieldDocsToStrings(objectInfoFieldDocEntries);\n","/**\n * Агрегат описаний полей **элементов** (*Item) для **генерации MCP-сервера** и внешних тулов:\n * каждый ключ — имя схемы в OpenAPI, значение — карта полей → {@link ItemFieldDoc}.\n *\n * Связи и mind map: {@link mcpRelationFieldCatalog}; запись и оплата: `mcpBookingFieldCatalog` в `mcp-booking-catalog.ts`;\n * представления: `mcpViewsFieldCatalog` в `mcp-views-catalog.ts`; объединение: {@link mcpFullFieldCatalog}.\n *\n * Строковые плоские карты (`*FieldDocs`) получайте через {@link fieldDocToString} при необходимости\n * или используйте готовые `contactItemFieldDocs` из пакета.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { calendarItemFieldDocEntries } from \"./calendar-item.js\";\nimport { caseItemFieldDocEntries } from \"./case-item.js\";\nimport { contactItemFieldDocEntries } from \"./contact-item.js\";\nimport { contextItemFieldDocEntries } from \"./context-item.js\";\nimport { loyaltySystemItemFieldDocEntries } from \"./loyalty-system-item.js\";\nimport { noteItemFieldDocEntries } from \"./note-item.js\";\nimport { objectInfoFieldDocEntries } from \"./nested/object-info.js\";\nimport { resourceItemFieldDocEntries } from \"./resource-item.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const mcpItemFieldCatalog: {\n TorrowItem: Record<string, ItemFieldDoc>;\n ContactItem: Record<string, ItemFieldDoc>;\n NoteItem: Record<string, ItemFieldDoc>;\n ContextItem: Record<string, ItemFieldDoc>;\n CalendarItem: Record<string, ItemFieldDoc>;\n ResourceItem: Record<string, ItemFieldDoc>;\n ServiceItem: Record<string, ItemFieldDoc>;\n CaseItem: Record<string, ItemFieldDoc>;\n LoyaltySystemItem: Record<string, ItemFieldDoc>;\n ObjectInfo: Record<string, ItemFieldDoc>;\n} = {\n TorrowItem: { ...torrowItemBaseFieldDocEntries },\n ContactItem: { ...contactItemFieldDocEntries },\n NoteItem: { ...noteItemFieldDocEntries },\n ContextItem: { ...contextItemFieldDocEntries },\n CalendarItem: { ...calendarItemFieldDocEntries },\n ResourceItem: { ...resourceItemFieldDocEntries },\n ServiceItem: { ...serviceItemFieldDocEntries },\n CaseItem: { ...caseItemFieldDocEntries },\n LoyaltySystemItem: { ...loyaltySystemItemFieldDocEntries },\n ObjectInfo: { ...objectInfoFieldDocEntries },\n};\n","/**\n * Описания полей **записи на услугу, мастера шагов и оплаты** (`components.schemas` + виртуальные карты методов SDK).\n * Формат {@link ItemFieldDoc} — для MCP `inputSchema` и промптов.\n *\n * Согласовано с публичным REST API Torrow и типичными сценариями: мастер записи, расписание, оплата билета.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Методы `TorrowClient.services`, участвующие в мастере записи. */\nexport const servicesBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/services/{serviceId}` + парсинг managed параметров из `service.tags` в `ServiceBehaviorSettings`.\",\n valueSchema: \"ServiceItem.tags → ServiceBehaviorSettings\",\n usage: \"Чтение текущих настроек поведения услуги перед patch/update.\",\n },\n updateBehaviorSettings: {\n description:\n \"Высокоуровневое обновление `ServiceBehaviorSettings` (внутри: `GET` сервиса -> merge patch (по умолчанию) -> `PUT /api/v1/services/{id}`).\",\n valueSchema: \"Partial<ServiceBehaviorSettings> → ServiceItem\",\n usage:\n \"Основной путь для приложений: передай только нужные поля; `mergeParameters=true` (default) сохранит остальные параметры и произвольные пользовательские tags.\",\n },\n setBehaviorSettings: {\n description:\n \"Полная установка `ServiceBehaviorSettings` (`mergeParameters=false`): заменяет managed-параметры, оставляя неуправляемые tags.\",\n valueSchema: \"ServiceBehaviorSettings → ServiceItem\",\n },\n createOrder: {\n description:\n \"`POST /api/v1/services/{serviceId}/order`. Тело: `CreateOrderReq`. Ответ: `OrderResp` (часто содержит `order` как `CaseItem` и `consumerSecurityToken` для последующих гостевых запросов). Создаёт заказ/кейс по выбранным слотам и ресурсам.\",\n valueSchema: \"CreateOrderReq → OrderResp\",\n usage:\n \"Финальный шаг мастера записи после выбора времени и ресурсов: отправка собранного тела `CreateOrderReq` на сервер.\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/services/{serviceId}/timetable`. Тело: `TimetableFilter`. Query: `TimetableQueryOptions` (в т.ч. `visibility`). Ответ: `TimetableCase[]` (события/заказы и интервалы расписания).\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n \"Передавай `from`/`to`; при уже выбранных ресурсах — `bookingResourceFilter.resourceGroupIdList`. Метод возвращает события/заказы и занятость, а не вычисленные свободные окна. Для доступных слотов записи используй `getCheckInSchedule` с `type: \\\"FreeTimeSlots\\\"`; для полных карточек событий — `visibility: \\\"View\\\"`.\",\n },\n getServiceResources: {\n description:\n \"`POST /api/v1/services/{serviceId}/resources`. Тело: `SearchServiceResourcesReq`. Список `ResourceView` для группы ресурсов шага мастера.\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Минимум `resourceGroupId` из `StepDescription`; при выборе времени до ресурсов — `timePeriod`.\",\n },\n getServiceResourcesWithDetalization: {\n description:\n \"`POST /api/v1/services/{serviceId}/resourceswithdetalization`. Как `getServiceResources`, плюс агрегаты (`guaranteedResourcesQuantity` и т.д.).\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Когда UI нужны количественные подсказки по группе.\",\n },\n getWorkloadInfo: {\n description:\n \"`PUT /api/v1/services/workloadinfo`. Тело: `GetServiceWorkloadInfoRequest` (`workloadOptions`, `timePeriod`). Ответ: `GetServiceWorkloadInfoResp` — `workloadInfoList` с вложенными `timetable`/`workload` по ресурсам, `serviceStructureList`.\",\n valueSchema: \"GetServiceWorkloadInfoRequest → GetServiceWorkloadInfoResp\",\n usage:\n \"Календарь владельца/исполнителя: список ресурсов услуги с вложенными `timetable` и `workload` за период без N запросов на каждый ресурс. Для плоского списка событий/заказов по услуге без разреза по ресурсам чаще достаточно `services.getTimetable` по `serviceId`.\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/services/timetable/statistics`. Тело: `GetTimetableStatisticsRequest`. Агрегаты по расписанию услуги.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n getCheckInSchedule: {\n description:\n \"`POST /api/v1/services/{serviceId}/checkinschedule`. Тело: `GetCheckInScheduleReq` (`timePeriod`, `resourceIdList`, …). Ответ: `GetCheckInScheduleResp` — окна `checkInSchedule`, детализация `workloadDetalization`.\",\n valueSchema: \"GetCheckInScheduleReq → GetCheckInScheduleResp\",\n usage:\n \"Для UI выбора свободного времени передавай `type: \\\"FreeTimeSlots\\\"`; `checkInSchedule` содержит `WorkloadPeriod` с `from`/`to`. Режим `AsIs` возвращает сырые периоды нагрузки (`FreeTime`, `BusyTime`, `NotWorkingTime` и др.), а не только выбираемые слоты.\",\n },\n getReCheckInSchedule: {\n description:\n \"`PUT /api/v1/services/{serviceId}/recheckinschedule`. Тело: `GetReCheckInScheduleReq` (обязателен `caseId`, опционально `securityToken`). Ответ как у `getCheckInSchedule`.\",\n valueSchema: \"GetReCheckInScheduleReq → GetCheckInScheduleResp\",\n usage: \"Пересчёт доступности после изменения события/заказа.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** `TorrowClient.resourceItems` — расписание и операции в домене ресурса. */\nexport const resourceItemsBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/resources/{id}` + парсинг managed параметров ресурса (`ResourceBehaviorSettings`) из `tags` (`marginTimeSec`, `lockId`).\",\n valueSchema: \"ResourceItem.tags → ResourceBehaviorSettings\",\n },\n updateBehaviorSettings: {\n description:\n \"Высокоуровневое обновление `ResourceBehaviorSettings` (внутри: `GET` -> merge patch по умолчанию -> `PUT /api/v1/resources/{id}`).\",\n valueSchema: \"Partial<ResourceBehaviorSettings> → ResourceItem\",\n },\n setBehaviorSettings: {\n description: \"Полная установка `ResourceBehaviorSettings` (`mergeParameters=false`).\",\n valueSchema: \"ResourceBehaviorSettings → ResourceItem\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/resources/{resourceId}/timetable`. Как расписание услуги, но якорь — ресурс. Тело `TimetableFilter`, query `TimetableQueryOptions` без `createDateFrom`/`createDateTo`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n \"Список событий/заказов ресурса (исполнитель, зал). Для полных деталей — `visibility: \\\"View\\\"` (см. `TimetableQueryOptions`).\",\n },\n getWorkload: {\n description:\n \"`GET /api/v1/resources/{resourceId}/workload`. Query: `From`, `To` (date-time), опционально `serviceId` — полосы занятости для фона календаря.\",\n valueSchema: \"query → WorkloadPeriod[]\",\n },\n pickOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/pickorder`. Тело: `PickOrderReq`. Исполнитель забирает заказ.\",\n valueSchema: \"PickOrderReq → PickOrderResp\",\n },\n returnOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/returnorder`. Тело: `ReturnOrderReq`. Откат pick.\",\n valueSchema: \"ReturnOrderReq → ReturnOrderResp\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/resources/timetable/statistics`. Как у услуги, но путь домена `resources`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полиморфное расписание: те же `TimetableFilter` / `TimetableCase`, что у услуги, но якорь — календарь или контакт. */\nexport const calendarContactTimetableSdkMethodFieldDocEntries = {\n calendarsGetTimetable: {\n description:\n \"`PUT /api/v1/calendars/{id}/timetable`. Тело `TimetableFilter`, query `TimetableQueryOptions` (без `createDate*`), ответ `TimetableCase[]`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: \"`TorrowClient.calendars.getTimetable`; для карточек событий — `visibility: \\\"View\\\"`.\",\n },\n calendarsGetTimetableStatistics: {\n description: \"`POST /api/v1/calendars/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n contactsGetTimetable: {\n description:\n \"`PUT /api/v1/contacts/{id}/timetable`. Расписание событий/заказов контакта (профиль/исполнитель). Query: `TimetableQueryOptions` без `createDate*`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: \"`TorrowClient.contacts.getTimetable`; для имён/сводок — `visibility: \\\"View\\\"`.\",\n },\n contactsGetTimetableStatistics: {\n description: \"`POST /api/v1/contacts/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Параметры `TorrowClient.cases.getById`, важные для билета и ссылки оплаты. */\nexport const casesPaymentSdkMethodFieldDocEntries = {\n getById: {\n description:\n \"`GET /api/v1/cases/{torrowId}`. Возвращает `CaseItem` с персональным контекстом. Для гостя после `createOrder` передавай `securityToken` (из `OrderResp.consumerSecurityToken`) и при необходимости `caseParticipantId`, иначе `personalInfo.ticketResource` может быть недоступен.\",\n valueSchema: \"query → CaseItem\",\n usage:\n \"Если `paymentUrl` ещё пуст, после короткой задержки повтори `cases.getById` с теми же параметрами доступа и снова прочитай `personalInfo.ticketResource.ticketProperties.paymentUrl` (асинхронное заполнение со стороны провайдера).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createOrderReqFieldDocEntries = {\n checkInProperties: {\n description:\n \"Один или несколько участников записи: слот `availabilityTime`, тип участника, контакты, выбранные `bookingResourceList`, напоминания.\",\n valueSchema: \"CheckInProps[]\",\n usage: \"Собирается из состояния мастера; обязательное поле запроса.\",\n },\n resourceList: {\n description:\n \"Плоский список выбранных ресурсов для заказа (`resourceId`, `resourceGroupId`, `amount`). Альтернатива/дополнение к вложенным `bookingResourceList` внутри `checkInProperties` — зависит от сценария API.\",\n valueSchema: \"BookingResourceReq[] | null\",\n },\n profileId: {\n description: \"Профиль инициатора записи (текущий пользователь), если отличается от токена или нужен явно.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n orderInfo: {\n description: \"Комментарий, место, общий `timePeriod` заказа (например выбранный диапазон дат).\",\n valueSchema: \"OrderInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsFieldDocEntries = {\n caseParticipantId: {\n description: \"Идентификатор участника кейса после создания/дозаписи; для обновления существующего участия.\",\n valueSchema: \"string | null\",\n },\n profileId: {\n description: \"Профиль участника, для которого формируется чек-ин.\",\n valueSchema: \"string | null\",\n },\n roadTimeBefore: {\n description: \"Запас времени «до» визита (секунды), если задан в услуге.\",\n examples: [\"900\"],\n },\n roadTimeAfter: {\n description: \"Запас времени «после» визита (секунды).\",\n examples: [\"600\"],\n },\n comment: {\n description: \"Комментарий участника к записи.\",\n },\n availabilityTime: {\n description:\n \"Статус доступности участника (`Free`/`Busy` и др.), не временной интервал. Выбранные границы слота передаются в `CreateOrderReq.orderInfo.timePeriod`.\",\n valueSchema: \"AvailabilityTime\",\n usage: \"Не копируй сюда `WorkloadPeriod`; это enum-поле внутри `checkInProperties`.\",\n },\n reminders: {\n description: \"Персональные напоминания участника.\",\n valueSchema: \"PersonalReminder[] | null\",\n },\n bookingResourceList: {\n description: \"Ресурсы, выбранные в мастере для этого участника (связь с группами услуги).\",\n valueSchema: \"BookingResource[] | null\",\n },\n caseParticipantType: {\n description: \"Роль в кейсе (потребитель, исполнитель и т.д.).\",\n valueSchema: \"CaseParticipantType\",\n examples: [\"Consumer\", \"Executor\"],\n },\n contactInformation: {\n description: \"Значения полей контакта при записи (телефон, ФИО), если требуются `participateFieldRequirements`.\",\n valueSchema: \"ContactInformation\",\n },\n showCaseInTimetableType: {\n description: \"Как отображать кейс в расписании пользователя.\",\n valueSchema: \"ShowCaseInTimetableType\",\n },\n participantTimeZone: {\n description: \"IANA или смещение часового пояса участника для интерпретации слотов.\",\n examples: [\"Europe/Moscow\"],\n },\n trackingInformation: {\n description: \"Данные трекинга/доставки, если сценарий услуги их собирает.\",\n valueSchema: \"TrackingInformation\",\n },\n loyaltyCardId: {\n description: \"Применяемая карта лояльности.\",\n },\n subscriptionId: {\n description: \"Привязанная подписка, если есть.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const availabilityTimeFieldDocEntries = {\n value: {\n description:\n \"Код доступности слота/участника (`Free`/`Busy`). В check-in flow по умолчанию часто используется `Busy` для подтверждённой записи.\",\n valueSchema: \"AvailabilityTime\",\n examples: [\"Free\", \"Busy\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactInformationFieldDocEntries = {\n fields: {\n description:\n \"Массив заполненных полей контакта участника (`ParticipateFieldValue[]`), собранных формой check-in.\",\n valueSchema: \"ParticipateFieldValue[] | null\",\n usage:\n \"В mobile flow (`contact-information-form.mapper.ts`) объединяется из профиля, query-string и ручного ввода перед отправкой.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldRequirementsFieldDocEntries = {\n participateFieldRequirementList: {\n description:\n \"Список требований к полям контакта (`RequiredField`/`OptionalField`/...). Определяет, какие поля показывать и валидировать в форме.\",\n valueSchema: \"ParticipateFieldRequirement[] | null\",\n usage:\n \"В `participate-field-requirements-form.mapper.ts` сейчас сохраняются в основном `RequiredField` (см. FIXME в коде).\",\n },\n commentFieldName: {\n description: \"Локализованное имя/лейбл поля комментария для формы контакта.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldRequirementFieldDocEntries = {\n participationFieldType: {\n description: \"Тип поля (`FirstName`, `MainPhone`, `MainEmail`, ...).\",\n valueSchema: \"ParticipationFieldType\",\n },\n participationFieldRequirementType: {\n description: \"Требование к полю (`NoneRequirement`, `OptionalField`, `RequiredField`).\",\n valueSchema: \"ParticipationFieldRequirementType\",\n },\n name: {\n description: \"Кастомное отображаемое имя поля (если задано на бэкенде).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldValueFieldDocEntries = {\n participationFieldType: {\n description: \"Тип заполненного поля.\",\n valueSchema: \"ParticipationFieldType\",\n },\n value: {\n description: \"Значение, введённое пользователем.\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Имя/лейбл поля в момент заполнения.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурса внутри услуги.\",\n valueSchema: \"string | null\",\n },\n id: {\n description: \"ID выбранного ресурса.\",\n valueSchema: \"string | null\",\n },\n amount: {\n description: \"Количество единиц ресурса.\",\n valueSchema: \"double | null\",\n },\n duration: {\n description: \"Длительность использования ресурса (мин/сек в зависимости от контракта сервиса).\",\n valueSchema: \"int32 | null\",\n },\n salePrice: { description: \"Цена ресурса с учётом правил продажи.\", valueSchema: \"double | null\" },\n discount: { description: \"Скидка на ресурс.\", valueSchema: \"double | null\" },\n usageAmount: { description: \"Фактический объём использования ресурса.\", valueSchema: \"double | null\" },\n consumerBookingComment: { description: \"Комментарий клиента к ресурсу.\", valueSchema: \"string | null\" },\n usageType: { description: \"Назначение ресурса (`Payment`, `Ticket`, ...).\", valueSchema: \"UsageType\" },\n processingDate: { description: \"Дата обработки/применения ресурса.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const personalReminderFieldDocEntries = {\n rid: { description: \"ID персонального напоминания.\", valueSchema: \"string | null\" },\n name: { description: \"Название напоминания.\", valueSchema: \"string | null\" },\n date: { description: \"Базовая дата срабатывания.\", valueSchema: \"date-time string | null\" },\n recurringConditions: { description: \"Правила повторения напоминания.\", valueSchema: \"RecurringConditions\" },\n notificationWay: { description: \"Канал уведомления (push/email/etc).\", valueSchema: \"NotificationWay\" },\n sound: { description: \"Звук уведомления (идентификатор/имя).\", valueSchema: \"string | null\" },\n vibrate: { description: \"Нужна ли вибрация при уведомлении.\", valueSchema: \"boolean | null\" },\n needConfirmation: { description: \"Требуется ли подтверждение напоминания.\", valueSchema: \"boolean | null\" },\n locationActivation: { description: \"Гео-условие срабатывания.\", valueSchema: \"LocationActivation\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const recurringConditionsFieldDocEntries = {\n cron: { description: \"CRON выражение повторения.\", valueSchema: \"string | null\" },\n remainingCount: { description: \"Оставшееся число повторов.\", valueSchema: \"int32 | null\" },\n endDate: { description: \"Дата окончания повторений.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала повторений.\", valueSchema: \"date-time string | null\" },\n firstWeekDate: { description: \"Опорная дата недели для weekly-логики.\", valueSchema: \"date-time string | null\" },\n weeklyCron: { description: \"Еженедельный CRON шаблон.\", valueSchema: \"string | null\" },\n repeatInterval: { description: \"Интервал повторения (контракт API).\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const locationActivationFieldDocEntries = {\n point: { description: \"Координата точки активации (`[lng, lat]`).\", valueSchema: \"number[] | null\" },\n radius: { description: \"Радиус гео-зоны активации.\", valueSchema: \"int32\" },\n direction: { description: \"Направление триггера (вход/выход).\", valueSchema: \"ReminderLocationDirection\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const trackingInformationFieldDocEntries = {\n partnerId: { description: \"ID партнёра (affiliate/source).\", valueSchema: \"string | null\" },\n referralProgramId: { description: \"ID реферальной программы.\", valueSchema: \"string | null\" },\n utm: { description: \"UTM-метки запроса, собранные из query-параметров.\", valueSchema: \"Utm\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const utmFieldDocEntries = {\n source: { description: \"UTM source.\", valueSchema: \"string | null\" },\n medium: { description: \"UTM medium.\", valueSchema: \"string | null\" },\n campaign: { description: \"UTM campaign.\", valueSchema: \"string | null\" },\n term: { description: \"UTM term.\", valueSchema: \"string | null\" },\n content: { description: \"UTM content.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceReqFieldDocEntries = {\n amount: {\n description: \"Количество единиц ресурса (например места, единицы услуги).\",\n examples: [\"1\", \"2\"],\n },\n resourceId: {\n description: \"Идентификатор выбранного ресурса из `getServiceResources*`.\",\n },\n resourceGroupId: {\n description: \"Идентификатор группы ресурсов услуги (`ResourceGroup.groupId`), совпадает с шагом мастера.\",\n },\n consumerComment: {\n description: \"Комментарий к конкретной позиции ресурса в заказе.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timePeriodFieldDocEntries = {\n from: { description: \"Начало временного интервала (ISO).\", valueSchema: \"date-time string | null\" },\n to: { description: \"Конец временного интервала (ISO).\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderInfoFieldDocEntries = {\n timePeriod: {\n description: \"Интервал `from`/`to` (ISO 8601) для всего заказа или выбранного диапазона в мастере.\",\n valueSchema: \"TimePeriod\",\n },\n place: {\n description: \"Текстовое место оказания услуги или адрес, если не привязан `placeId` на уровне кейса.\",\n },\n comment: {\n description: \"Общий комментарий к заказу.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepDescriptionFieldDocEntries = {\n stepOrder: {\n description: \"Порядок шага в мастере (сортировка как в `sortStepDescriptionsByOrder`).\",\n examples: [\"1\", \"2\", \"3\"],\n },\n stepType: {\n description:\n \"Тип шага в JSON — **число**: `0` Unknown, `1` Time, `2` Resource, `3` Payment. Не строка `\\\"Time\\\"`.\",\n examples: [\"0\", \"1\", \"2\", \"3\"],\n usage: \"Wire int из API; в SDK те же числа — `ServiceCheckInWizardStepType`.\",\n },\n description: {\n description: \"Человекочитаемый текст шага из настроек услуги (подсказка в UI).\",\n },\n stepParameterList: {\n description: \"Параметры шага (флаги и `ResourceGroupId` для типа Resource).\",\n valueSchema: \"StepParameter[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepParameterFieldDocEntries = {\n parameterName: {\n description:\n \"Имя параметра: для ресурса — `ResourceGroupId`, `HiddenStep`, `HideResourceDetail`, `AutoChoiceResource` (строки как в `ServiceCheckInWizardStepParameterName`).\",\n examples: [\"ResourceGroupId\", \"HiddenStep\", \"HideResourceDetail\", \"AutoChoiceResource\"],\n },\n parameterValue: {\n description: \"Значение: для флагов часто `\\\"true\\\"`; для группы — UUID группы ресурсов.\",\n examples: [\"true\", \"550e8400-e29b-41d4-a716-446655440000\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchServiceResourcesReqFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурсов услуги; обязательна для шага «Ресурс» мастера.\",\n usage: \"Берётся из `getResourceGroupIdFromStep(step)` в SDK.\",\n },\n text: {\n description: \"Поисковая строка по ресурсам (имя, описание — зависит от бэкенда).\",\n },\n resourceIds: {\n description: \"Ограничить выборку конкретными id ресурсов.\",\n valueSchema: \"string[] | null\",\n },\n timePeriod: {\n description: \"Фильтр доступности по времени до выбора слота в календаре.\",\n valueSchema: \"TimePeriod\",\n },\n caseIdsToExclude: {\n description: \"Исключить занятость указанных кейсов при расчёте доступности.\",\n valueSchema: \"string[] | null\",\n },\n distance: {\n description: \"Радиус поиска для геозависимых ресурсов (если поддерживается услугой).\",\n examples: [\"5000\"],\n },\n take: {\n description: \"Лимит записей (пагинация).\",\n examples: [\"20\"],\n },\n skip: {\n description: \"Смещение пагинации.\",\n examples: [\"0\"],\n },\n includeDeleted: {\n description: \"Включать ли удалённые элементы в выборку.\",\n examples: [\"false\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Query-параметры `TimetableQueryOptions` для `PUT .../{id}/timetable`\n * (`services` / `resourceItems` / `calendars` / `contacts.getTimetable`).\n */\nexport const timetableQueryOptionsFieldDocEntries = {\n visibility: {\n description:\n \"Глубина деталей ответа `TimetableCase[]` (`TimetableDetailsVisibility`). `View` — подгрузить CaseView + CaseSummary для событий/заказов (имена, сводки); в torrow-apps это дефолт календаря/списков и экспорта заказов. `Time` — в основном интервалы занятости без полного обогащения событий/заказов (фон календаря / busy-bars). Эхо режима — в `TimetableCase.detailsVisibility`.\",\n valueSchema: \"TimetableDetailsVisibility | null\",\n examples: [\"View\", \"Time\"],\n usage:\n \"Для UI списка событий и CSV-экспорта передавай `View`. Для лёгкой занятости без карточек — `Time`. См. каталог enum `TimetableDetailsVisibility`.\",\n },\n take: {\n description: \"Лимит записей расписания (пагинация query).\",\n valueSchema: \"number | null\",\n examples: [\"30\", \"50\"],\n },\n skip: {\n description: \"Смещение пагинации query.\",\n valueSchema: \"number | null\",\n examples: [\"0\"],\n },\n lmfrom: {\n description: \"Нижняя граница `lastModified` (date-time) для инкрементальной выборки.\",\n valueSchema: \"Date | null\",\n },\n lmto: {\n description: \"Верхняя граница `lastModified` (date-time).\",\n valueSchema: \"Date | null\",\n },\n includeDeleted: {\n description: \"Включать ли удалённые записи в выборку расписания.\",\n valueSchema: \"boolean | null\",\n examples: [\"false\"],\n },\n sort: {\n description: \"Сортировка списка (как в OpenAPI `ItemViewSortCondition`).\",\n valueSchema: \"ItemViewSortCondition | null\",\n },\n createDateFrom: {\n description:\n \"Нижняя граница по дате создания события/заказа. Только у расписания **услуги** (`services.getTimetable`, NSwag `ServiceClient.getTimetable`) — экспорт заказов и т.п.\",\n valueSchema: \"Date | null\",\n },\n createDateTo: {\n description: \"Верхняя граница по дате создания события/заказа. Только у `services.getTimetable`.\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableFilterFieldDocEntries = {\n from: {\n description: \"Начало интервала расписания событий/заказов (ISO 8601).\",\n examples: [\"2026-04-01T00:00:00.000Z\"],\n },\n to: {\n description: \"Конец интервала; может быть null в некоторых сценариях — уточняй по Swagger.\",\n examples: [\"2026-04-07T23:59:59.999Z\"],\n },\n caseStateList: {\n description: \"Фильтр по состояниям событий/заказов в слотах.\",\n valueSchema: \"CaseState[] | null\",\n },\n caseTypeList: {\n description: \"Фильтр по типам событий/заказов.\",\n valueSchema: \"CaseType[] | null\",\n },\n caseParticipantTypeList: {\n description: \"Фильтр по типам участников.\",\n valueSchema: \"CaseParticipantType[] | null\",\n },\n caseParticipantStateList: {\n description: \"Фильтр по состояниям участников.\",\n valueSchema: \"CaseParticipantState[] | null\",\n },\n availabilityTimeList: {\n description: \"Уточнение по конкретным интервалам доступности.\",\n valueSchema: \"AvailabilityTime[] | null\",\n },\n profileIdList: {\n description: \"Ограничение расписания по профилям (исполнители и т.д.).\",\n valueSchema: \"string[] | null\",\n },\n serviceIdList: {\n description: \"Фильтр по услугам в агрегированном расписании.\",\n valueSchema: \"string[] | null\",\n },\n caseIdListToExclude: {\n description: \"Исключить события/заказы из отображения занятости.\",\n valueSchema: \"string[] | null\",\n },\n hasService: {\n description: \"Флаг наличия услуги в записи (фильтр агрегатов).\",\n examples: [\"true\"],\n },\n strictlyInTimeRange: {\n description: \"Требовать полного вхождения событий/заказов в интервал `from`/`to`.\",\n examples: [\"true\", \"false\"],\n },\n bookingResourceFilter: {\n description: \"После выбора ресурсов — список `resourceGroupIdList` для учёта занятости групп.\",\n valueSchema: \"BookingResourceFilter\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFilterFieldDocEntries = {\n resourceGroupIdList: {\n description: \"Группы ресурсов, которые уже выбраны в мастере; передаются в `TimetableFilter` для уточнения слотов.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketPropertiesFieldDocEntries = {\n state: {\n description:\n \"Состояние билета: `Waiting` — ожидает оплаты; `Paid` / `Used` — оплачен или использован; `Canceled`, `Error` — терминальные.\",\n valueSchema: \"TicketState\",\n examples: [\"Waiting\", \"Paid\", \"Used\"],\n usage: \"UI решает, показывать ли кнопку оплаты и внешнюю ссылку.\",\n },\n ticketNumber: {\n description: \"Номер билета для отображения и поддержки.\",\n valueSchema: \"TicketNumber\",\n },\n paymentUrl: {\n description:\n \"URL внешней оплаты (платёжный шлюз). Может прийти без схемы — нормализуй через `normalizePaymentUrl` в SDK.\",\n examples: [\"https://pay.example.com/session/abc\", \"payment.example.com/path\"],\n usage:\n \"Источник: `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`. Наличие зависит от провайдера; для не-cash иногда заполняется после повторного `cases.getById`.\",\n },\n paymentExpirationDate: {\n description: \"Срок действия ссылки или сессии оплаты (ISO 8601).\",\n examples: [\"2026-04-15T12:00:00.000Z\"],\n },\n paymentConfirmationSource: {\n description:\n \"Источник подтверждения оплаты: `PaymentLink` — по ссылке, `Manager` — менеджером, `UnknownTicketPaymentConfirmationSource` — не определён.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n examples: [\"PaymentLink\", \"Manager\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentParametersFieldDocEntries = {\n text: {\n description: \"Общий текст в блоке оплаты (информационный дисклеймер рядом с кнопками).\",\n valueSchema: \"string | null\",\n },\n beforePayMessage: {\n description:\n \"Сообщение до оплаты. В мобильном flow показывается, пока `ticketProperties.state === Waiting`.\",\n valueSchema: \"string | null\",\n },\n afterPayMessage: {\n description:\n \"Сообщение после оплаты. В мобильном flow показывается, когда `ticketProperties.state === Paid`.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentPropertiesFieldDocEntries = {\n paymentProviderType: {\n description:\n \"Тип платёжного провайдера (`Cash`, `CustomLink`, `YooMoney`, ...). Определяет, нужен ли `paymentUrl` и какие кнопки показывать.\",\n valueSchema: \"PaymentProviderType\",\n usage:\n \"В `payment.process.state.ts` для `Cash` и `UnknownPaymentProviderType` переход к внешней форме оплаты не выполняется.\",\n },\n parameters: {\n description: \"Текстовые параметры UI оплаты (`beforePayMessage`, `afterPayMessage`, `text`).\",\n valueSchema: \"PaymentParameters\",\n },\n numeratorId: {\n description: \"ID нумератора/конфигурации провайдера (служебное поле API).\",\n valueSchema: \"string | null\",\n },\n waitForConfirmation: {\n description: \"Требуется подтверждение оплаты до финального статуса билета.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля `CasePersonalInfo`, критичные для оплаты и билета (подмножество схемы OpenAPI). */\nexport const casePersonalInfoPaymentFieldDocEntries = {\n ticketResource: {\n description:\n \"`ResourceItem` билета: `ticketProperties` содержит `paymentUrl`, `state`, `paymentExpirationDate`.\",\n valueSchema: \"ResourceItem\",\n usage: \"Читай через `getTicketPaymentUrl(caseItem)` в SDK.\",\n },\n paymentResource: {\n description: \"Ресурс с данными оплаты/провайдера в персональном контексте (параллельно билету).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"Альтернативный или дополнительный узел оплаты в персональном контексте: если основной URL в билете недоступен, приложение может проверить `paymentResource` (тип и поля — по ответу API и сценарию оплаты).\",\n },\n caseParticipant: {\n description: \"Текущий участник и его поля; нужен для гостевого сценария с `caseParticipantId` в query.\",\n valueSchema: \"CaseParticipant\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldDocEntries = {\n id: { description: \"ID участия в кейсе.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль участника.\", valueSchema: \"string | null\" },\n loyaltyCardId: {\n description:\n \"ID карты лояльности участника (чтение и запись).\",\n valueSchema: \"string | null\",\n },\n caseParticipantState: { description: \"Состояние участия (`Booking`, `Registered`, ...).\", valueSchema: \"CaseParticipantState\" },\n caseParticipantType: { description: \"Тип участия (`Consumer`, `Executor`, `Escort`).\", valueSchema: \"CaseParticipantType\" },\n roadTimeBefore: { description: \"Время в пути до визита.\", valueSchema: \"int32 | null\" },\n roadTimeAfter: { description: \"Время в пути после визита.\", valueSchema: \"int32 | null\" },\n availabilityTime: { description: \"Статус доступности участника: `Free`, `Busy` или системное неизвестное значение.\", valueSchema: \"AvailabilityTime\" },\n bookingResourceList: { description: \"Ресурсы, закреплённые за участником.\", valueSchema: \"BookingResource[] | null\" },\n comment: { description: \"Комментарий участника.\", valueSchema: \"string | null\" },\n contactInformation: { description: \"Контактные данные участника.\", valueSchema: \"ContactInformation\" },\n participantTimeZone: { description: \"Таймзона участника.\", valueSchema: \"string | null\" },\n trackingInformation: { description: \"Трекинг-данные источника регистрации.\", valueSchema: \"TrackingInformation\" },\n showCaseInTimetableType: { description: \"Режим отображения в расписании.\", valueSchema: \"ShowCaseInTimetableType\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsModelFieldDocEntries = {\n caseParticipantId: { description: \"ID существующего участника для обновления.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль, для которого создают/обновляют check-in.\", valueSchema: \"string | null\" },\n caseParticipantType: { description: \"Роль участника в кейсе.\", valueSchema: \"CaseParticipantType\" },\n contactInformation: { description: \"Контактные данные, собранные формой.\", valueSchema: \"ContactInformation\" },\n availabilityTime: { description: \"Статус доступности участника (`Free`/`Busy`), не границы выбранного слота.\", valueSchema: \"AvailabilityTime\" },\n bookingResourceList: { description: \"Выбранные ресурсы участника.\", valueSchema: \"BookingResource[] | null\" },\n reminders: { description: \"Персональные напоминания.\", valueSchema: \"PersonalReminder[] | null\" },\n participantTimeZone: { description: \"Таймзона участника.\", valueSchema: \"string | null\" },\n trackingInformation: { description: \"UTM и прочий tracking контекст.\", valueSchema: \"TrackingInformation\" },\n loyaltyCardId: { description: \"Применяемая карта лояльности.\", valueSchema: \"string | null\" },\n subscriptionId: { description: \"Применяемая подписка карты.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldsFieldDocEntries = {\n contactInformation: { description: \"Обновляемые контактные поля участия.\", valueSchema: \"ContactInformation\" },\n participantTimeZone: { description: \"Обновляемая таймзона участника.\", valueSchema: \"string | null\" },\n comment: { description: \"Обновляемый комментарий участника.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const casePersonalInfoFieldDocEntries = {\n caseParticipant: { description: \"Персональное участие текущего профиля в кейсе.\", valueSchema: \"CaseParticipant\" },\n ticketResource: { description: \"Ресурс билета участника.\", valueSchema: \"ResourceItem\" },\n paymentResource: { description: \"Ресурс оплаты участника.\", valueSchema: \"ResourceItem\" },\n profileId: { description: \"ID профиля в персональном контексте.\", valueSchema: \"string | null\" },\n participantState: { description: \"Состояние участия в персональном контексте.\", valueSchema: \"ParticipantState\" },\n participantType: { description: \"Тип участия в персональном контексте.\", valueSchema: \"ParticipantType\" },\n operationList: { description: \"Разрешённые операции в текущем контексте.\", valueSchema: \"OperationType[] | null\" },\n personalReminders: { description: \"Персональные напоминания пользователя по кейсу.\", valueSchema: \"PersonalReminder[] | null\" },\n subscriptionList: { description: \"Подписки пользователя на кейс.\", valueSchema: \"Subscription[] | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilePropertiesFieldDocEntries = {\n id: { description: \"ID профиля.\", valueSchema: \"string | null\" },\n profileUserAvailability: {\n description: \"Статус доступности пользователя/профиля (`Free`, `Busy`, ...).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: { description: \"Текст заметки о доступности.\", valueSchema: \"string | null\" },\n color: { description: \"Цвет профиля для UI.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantViewPaymentFieldDocEntries = {\n caseParticipation: {\n description: \"Участие в кейсе, связанное с текущим пользователем/профилем.\",\n valueSchema: \"CaseParticipant\",\n },\n ticketResource: {\n description: \"Ресурс билета участника (`ticketProperties.state`, `paymentUrl`, ...).\",\n valueSchema: \"ResourceItem\",\n },\n paymentResource: {\n description: \"Ресурс оплаты участника (`paymentProperties.paymentProviderType`, `parameters`).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"В `PaymentInfoStore` используется как fallback, когда `CaseItem.personalInfo.paymentResource` не заполнен.\",\n },\n profileType: {\n description: \"Тип профиля участника в контексте view.\",\n valueSchema: \"ProfileType\",\n },\n profileProperties: {\n description: \"Параметры профиля (цвет, иконка, настройки отображения).\",\n valueSchema: \"ProfileProperties\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderRespFieldDocEntries = {\n order: {\n description: \"Созданный или обновлённый кейс заказа; структура как у `CaseItem`.\",\n valueSchema: \"CaseItem\",\n },\n consumerSecurityToken: {\n description:\n \"Токен для анонимного/гостевого доступа к кейсу после создания заказа; передавай в `cases.getById(..., { securityToken })`.\",\n examples: [\"eyJhbGciOi...\"],\n usage: \"Без него гость не увидит `personalInfo.ticketResource` с `paymentUrl`.\",\n },\n beginDate: {\n description:\n \"Копии полей кейса на верхнем уровне ответа (дублирование вложенного `order` для обратной совместимости клиентов).\",\n valueSchema: \"string | null\",\n },\n endDate: {\n description: \"Конец интервала заказа на верхнем уровне ответа.\",\n valueSchema: \"string | null\",\n },\n personalInfo: {\n description: \"Персональный контекст на верхнем уровне `OrderResp` (дублирование с вложенным `order`).\",\n valueSchema: \"CasePersonalInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketSummaryFieldDocEntries = {\n state: { description: \"Сводное состояние билета.\", valueSchema: \"TicketState\" },\n sum: { description: \"Итоговая сумма к оплате.\", valueSchema: \"double | null\" },\n currencyCode: { description: \"Код валюты суммы.\", valueSchema: \"string | null\" },\n salePrice: { description: \"Цена продажи.\", valueSchema: \"double | null\" },\n prepayment: { description: \"Размер предоплаты.\", valueSchema: \"double | null\" },\n priceWithoutDiscount: { description: \"Цена без скидок.\", valueSchema: \"double | null\" },\n paymentConfirmationSource: {\n description: \"Источник подтверждения оплаты в сводке билета.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingWizardSdkFieldDocEntries = {\n ServiceResourceLinking: {\n description:\n \"Связь хранится с двух сторон: `ServiceItem.resourceGroupList` описывает доступные группы и порядок ресурсных шагов, а `ResourceItem.serviceDescriptions` связывает конкретный ресурс с группой по паре `serviceId + resourceGroupId`.\",\n valueSchema: \"ServiceItem.resourceGroupList + ResourceItem.serviceDescriptions\",\n usage:\n \"`ResourceBuilder.attachToService` берёт имена из актуальных услуги и группы, а `laterBinding` вычисляет как наличие `ResourceGroup.bookingProperties`. `parentId` и `resourceGroupList.resourceIdList` эту связь не заменяют.\",\n },\n ServiceBuilder: {\n description:\n \"Локальный builder тела услуги: согласует `resourceGroupList` и `stepDescriptionList`, добавляет несколько шагов до одного `services.create` или `services.update` и не выполняет HTTP.\",\n valueSchema: \"ServiceItemForCreateOrUpdate | ServiceItem → ServiceBuildResult\",\n },\n ResourceBuilder: {\n description:\n \"Локальный builder тела ресурса: по загруженному `ServiceItem` добавляет, обновляет и удаляет связи `serviceDescriptions` по паре `serviceId + resourceGroupId`, проверяет `usageType` и не выполняет HTTP. Результат сохраняется обычным `resourceItems.create` или `update`.\",\n valueSchema: \"ResourceItemForCreateOrUpdate | ResourceItem → ResourceBuildResult\",\n usage:\n \"Формирует `serviceName` и `resourceGroupName` из переданных данных; `laterBinding` равен признаку наличия `bookingProperties` у группы.\",\n },\n ResourceServiceBindingOptions: {\n description:\n \"Опциональные поля связи ресурса с группой услуги: `usageAmount` и `sortIndex`. Пропущенное значение сохраняется при обновлении связи, `null` очищает его.\",\n valueSchema: \"{ usageAmount?; sortIndex? }\",\n },\n expandBookingWizardSteps: {\n description:\n \"Функция SDK: по `ServiceItem` строит список шагов `{ kind: time | resource | payment, ... }` в порядке `stepDescriptionList`, с пропуском шагов ресурса при вырожденных лимитах группы (`minResources`/`maxResources`) и отсутствии `ResourceGroupId`.\",\n usage: \"Импорт из `@torrow/sdk-client`; не HTTP.\",\n },\n getTimeStepUiMode: {\n description:\n \"По `sessionDurationProperties` возвращает режим виджета времени: `selectDate` | `selectDateRange` | `selectTimeBegin` | `selectTime`.\",\n usage: \"См. `booking-wizard-hints.ts`.\",\n },\n getTicketPaymentUrl: {\n description:\n \"Извлекает и нормализует URL оплаты из `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`.\",\n usage: \"После `cases.getById` или из `order` в `OrderResp`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Типы услуг и прямое/обратное преобразование `SessionDurationProperties`. */\nexport const serviceTypePresetFieldDocEntries = {\n ServiceType: {\n description:\n \"Публичный тип услуги: пять известных конфигураций и `Custom` для любого другого сочетания трёх определяющих полей.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent | Custom\",\n },\n ServiceTypePresetValues: {\n description:\n \"Deprecated-совместимость для пяти прежних preset-значений, включая `AutoRent`; новый код использует `ServiceType`.\",\n valueSchema: \"Record<string, ServiceTypePreset>\",\n usage:\n \"Выбери бизнес-тип и передай значение в `createServiceSessionDurationProperties`; список не является полным перечислением внутренних типов torrow-apps.\",\n },\n ServiceTypePreset: {\n description:\n \"Union публичных preset-значений, для которых SDK знает подтверждённое сочетание `sessionDurationType`, `timeSelectionType` и `stateManagementType`.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent\",\n },\n ServiceSessionDurationOptions: {\n description:\n \"Дополнительные поля `SessionDurationProperties`: точность, длительности и границы времени. Три поля, определяющие тип услуги, намеренно исключены.\",\n valueSchema:\n \"Omit<SessionDurationProperties, sessionDurationType | timeSelectionType | stateManagementType>\",\n },\n createServiceSessionDurationProperties: {\n description:\n \"Чистый helper SDK, который строит согласованный `SessionDurationProperties` по известному `ServiceType`; `Custom` требует явных параметров.\",\n valueSchema: \"KnownServiceType + ServiceSessionDurationOptions → SessionDurationProperties\",\n usage:\n \"Используй при сборке `ServiceItemForCreateOrUpdate` перед `services.create` или `services.update`. Неизвестный runtime preset приводит к `TypeError`.\",\n },\n getServiceType: {\n description:\n \"Определяет `ServiceType` услуги по точному совпадению `sessionDurationType`, `timeSelectionType`, `stateManagementType`; остальные сочетания дают `Custom`.\",\n valueSchema: \"Pick<ServiceItem, sessionDurationProperties> → ServiceType\",\n },\n getServiceTypeFromSessionDurationProperties: {\n description:\n \"Обратное преобразование `SessionDurationProperties` в `ServiceType`. Не меняет данные и не считает `Custom` признаком валидности конфигурации.\",\n valueSchema: \"SessionDurationProperties | null | undefined → ServiceType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const servicesBookingSdkMethodFieldDocs = mapFieldDocsToStrings(servicesBookingSdkMethodFieldDocEntries);\nexport const casesPaymentSdkMethodFieldDocs = mapFieldDocsToStrings(casesPaymentSdkMethodFieldDocEntries);\n","/**\n * Каталог полей **записи на услугу, мастера и оплаты** для MCP и агентов.\n * Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n availabilityTimeFieldDocEntries,\n bookingResourceFieldDocEntries,\n bookingResourceFilterFieldDocEntries,\n bookingResourceReqFieldDocEntries,\n bookingWizardSdkFieldDocEntries,\n calendarContactTimetableSdkMethodFieldDocEntries,\n caseParticipantFieldDocEntries,\n caseParticipantFieldsFieldDocEntries,\n caseParticipantViewPaymentFieldDocEntries,\n casePersonalInfoFieldDocEntries,\n casePersonalInfoPaymentFieldDocEntries,\n casesPaymentSdkMethodFieldDocEntries,\n checkInPropsModelFieldDocEntries,\n checkInPropsFieldDocEntries,\n contactInformationFieldDocEntries,\n createOrderReqFieldDocEntries,\n locationActivationFieldDocEntries,\n orderInfoFieldDocEntries,\n orderRespFieldDocEntries,\n paymentParametersFieldDocEntries,\n paymentPropertiesFieldDocEntries,\n profilePropertiesFieldDocEntries,\n participateFieldRequirementFieldDocEntries,\n participateFieldRequirementsFieldDocEntries,\n participateFieldValueFieldDocEntries,\n personalReminderFieldDocEntries,\n resourceItemsBookingSdkMethodFieldDocEntries,\n recurringConditionsFieldDocEntries,\n searchServiceResourcesReqFieldDocEntries,\n serviceTypePresetFieldDocEntries,\n servicesBookingSdkMethodFieldDocEntries,\n stepDescriptionFieldDocEntries,\n stepParameterFieldDocEntries,\n ticketSummaryFieldDocEntries,\n ticketPropertiesFieldDocEntries,\n timePeriodFieldDocEntries,\n timetableFilterFieldDocEntries,\n timetableQueryOptionsFieldDocEntries,\n trackingInformationFieldDocEntries,\n utmFieldDocEntries,\n} from \"./booking-wizard-field-docs.js\";\nimport {\n checkinPermissionFieldDocEntries,\n sessionDurationPropertiesFieldDocEntries,\n} from \"./session-checkin-field-docs.js\";\n\nexport const mcpBookingFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ServicesBookingSdkMethods: { ...servicesBookingSdkMethodFieldDocEntries },\n ResourceItemsBookingSdkMethods: { ...resourceItemsBookingSdkMethodFieldDocEntries },\n CalendarContactTimetableSdkMethods: { ...calendarContactTimetableSdkMethodFieldDocEntries },\n CasesPaymentSdkMethods: { ...casesPaymentSdkMethodFieldDocEntries },\n BookingWizardSdkHelpers: { ...bookingWizardSdkFieldDocEntries },\n ServiceTypePresetSdk: { ...serviceTypePresetFieldDocEntries },\n CreateOrderReq: { ...createOrderReqFieldDocEntries },\n CheckInProps: { ...checkInPropsFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n BookingResource: { ...bookingResourceFieldDocEntries },\n BookingResourceReq: { ...bookingResourceReqFieldDocEntries },\n ContactInformation: { ...contactInformationFieldDocEntries },\n ParticipateFieldRequirements: { ...participateFieldRequirementsFieldDocEntries },\n ParticipateFieldRequirement: { ...participateFieldRequirementFieldDocEntries },\n ParticipateFieldValue: { ...participateFieldValueFieldDocEntries },\n OrderInfo: { ...orderInfoFieldDocEntries },\n OrderResp: { ...orderRespFieldDocEntries },\n StepDescription: { ...stepDescriptionFieldDocEntries },\n StepParameter: { ...stepParameterFieldDocEntries },\n SearchServiceResourcesReq: { ...searchServiceResourcesReqFieldDocEntries },\n TimetableFilter: { ...timetableFilterFieldDocEntries },\n TimetableQueryOptions: { ...timetableQueryOptionsFieldDocEntries },\n BookingResourceFilter: { ...bookingResourceFilterFieldDocEntries },\n TicketProperties: { ...ticketPropertiesFieldDocEntries },\n TicketSummary: { ...ticketSummaryFieldDocEntries },\n TimePeriod: { ...timePeriodFieldDocEntries },\n PersonalReminder: { ...personalReminderFieldDocEntries },\n RecurringConditions: { ...recurringConditionsFieldDocEntries },\n LocationActivation: { ...locationActivationFieldDocEntries },\n TrackingInformation: { ...trackingInformationFieldDocEntries },\n Utm: { ...utmFieldDocEntries },\n PaymentParameters: { ...paymentParametersFieldDocEntries },\n PaymentProperties: { ...paymentPropertiesFieldDocEntries },\n CheckInPropsModel: { ...checkInPropsModelFieldDocEntries },\n CaseParticipant: { ...caseParticipantFieldDocEntries },\n CaseParticipantFields: { ...caseParticipantFieldsFieldDocEntries },\n CasePersonalInfo: { ...casePersonalInfoFieldDocEntries },\n CasePersonalInfoPayment: { ...casePersonalInfoPaymentFieldDocEntries },\n CaseParticipantViewPayment: { ...caseParticipantViewPaymentFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n SessionDurationProperties: { ...sessionDurationPropertiesFieldDocEntries },\n CheckinPermission: { ...checkinPermissionFieldDocEntries },\n};\n","/**\n * Смыслы полей **AuthIdentity** (`/api/v1/auth/*`) для агентов и MCP.\n * Типы тел/ответов — `components.schemas` в `schema/generated.ts`; здесь только проза.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Ответ **`POST /api/v1/auth/token`** и **`POST /api/v1/auth/refresh`**. */\nexport const tokenRespFieldDocEntries = {\n accessToken: {\n description:\n \"JWT или иной Bearer для заголовка `Authorization` при вызовах API от имени пользователя.\",\n usage:\n \"Подставляй в `TorrowClientConfig.getAccessToken` (или вручную в `Authorization`). Не логируй целиком. При `status !== TokenReady` может быть пустым.\",\n examples: [\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…\"],\n },\n refreshToken: {\n description: \"Долгоживущий токен для выдачи новой пары без повторного логина.\",\n usage:\n \"Храни безопасно; отправляй только в теле `POST /api/v1/auth/refresh`. После refresh сервер может вернуть новый refresh — замени сохранённый. При `Pending`/`Failed` обычно пуст.\",\n examples: [\"opaque-refresh-string…\"],\n },\n expiration: {\n description:\n \"Срок жизни **access**-токена в **секундах**, отсчитанный от момента ответа (не Unix timestamp).\",\n usage:\n \"Абсолютное время истечения access: `Date.now() + expiration * 1000`. Учитывай запас (skew) до истечения, затем вызывай refresh.\",\n examples: [\"3600\", \"900\"],\n },\n status: {\n description:\n \"Статус выдачи токенов (`TokenStatus`). Классический OTP/`refresh` → `TokenReady`; для MTS Mobile ID возможны `Pending`, `AwaitingSmsCode`, `Failed` с пустыми токенами.\",\n usage:\n \"Пока `Pending` — полли `requestToken` с интервалом из `SendCodeResp.pollIntervalSeconds` (без кода или с уже принятым). `AwaitingSmsCode` — fallback на ввод SMS. `Failed` — новый `sendCode`.\",\n valueSchema: \"TokenStatus\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenRespFieldDocs = mapFieldDocsToStrings(tokenRespFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/refresh`**. */\nexport const refreshReqFieldDocEntries = {\n refreshToken: {\n description: \"Текущий refresh-токен пользователя.\",\n usage:\n \"Обязателен для обмена. Вызов идёт через `AuthFacade` без Bearer пользователя; на шлюзе обычно нужен `authIdentityBasic` (см. `examples/node/auth/auth-refresh.ts`).\",\n },\n deviceInfo: {\n description: \"Сведения об устройстве клиента (`DeviceInfo` в OpenAPI).\",\n usage:\n \"Минимум: непустые `deviceId` + `deviceType` (`DeviceTypeValues` из `@torrow/sdk-client`: Unknown|Mobile|Tablet|Desktop). На проде — ещё push/os.\",\n valueSchema: \"DeviceInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const refreshReqFieldDocs = mapFieldDocsToStrings(refreshReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/token`** (обмен кода/сессии на токены — зависит от способа входа). */\nexport const tokenReqFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии после шага отправки кода / создания сессии.\",\n usage: \"Часто приходит из потока `sendcode` / `session` до вызова `token`.\",\n },\n code: {\n description: \"Одноразовый код подтверждения (SMS, email и т.п.), если применимо.\",\n usage:\n \"Вместе с `sessionId` для классического OTP. Для MTS Mobile ID на фазе polling код может отсутствовать, пока `TokenResp.status === Pending`.\",\n },\n scopes: {\n description:\n \"Запрашиваемые области доступа. OpenAPI — `string[]`; в SDK известные значения — **`AuthScopeValues`**: `user_api`, `admin_api`, `offline_access` (дефолт OTP — **`DefaultAuthScopes`**).\",\n valueSchema: \"AuthScope[] | null\",\n examples: ['[\"user_api\",\"offline_access\"]'],\n },\n deviceInfo: {\n description: \"Сведения об устройстве (`DeviceInfo`).\",\n usage:\n \"`deviceType` — только OpenAPI enum; в SDK: **`DeviceTypeValues`** (`Desktop` по умолчанию в примерах).\",\n valueSchema: \"DeviceInfo\",\n },\n splitTokens: {\n description: \"Флаг разделения токенов в ответе (семантика на стороне сервиса identity).\",\n usage: \"Передавай только если контракт стенда это требует; иначе опусти.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenReqFieldDocs = mapFieldDocsToStrings(tokenReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/revoke`**. */\nexport const revokeReqFieldDocEntries = {\n token: {\n description: \"Refresh-токен, который нужно инвалидировать на сервере.\",\n usage: \"Вызывай при выходе пользователя или компрометации refresh.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const revokeReqFieldDocs = mapFieldDocsToStrings(revokeReqFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/sendcode`. */\nexport const sendCodeReqFieldDocEntries = {\n accountName: {\n description: \"Телефон/email/логин, куда отправляют код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description:\n \"Тип аккаунта (`AccountType`). Для OTP/`sendCode` в продукте и примерах — **`Phone`** или **`Email`**. **`Undefined`** Identity отвергает; **`Telegram`** — не этот эндпоинт (deep-link → `createSession`).\",\n valueSchema: \"AccountType\",\n usage: \"Примеры: `auth-send-code.ts` / `auth-login-with-otp.ts` (`SendCodeAccountType` = Phone|Email).\",\n },\n language: {\n description: \"Язык сообщений/кода.\",\n valueSchema: \"string | null\",\n },\n captcha: {\n description: \"Токен captcha, если включена антибот-проверка.\",\n valueSchema: \"string | null\",\n },\n captchaType: {\n description:\n \"Провайдер captcha, выдавший токен. OpenAPI — `string`; в SDK известные значения — **`AuthCaptchaTypeValues`**: `YandexSmartCaptcha`, `GoogleRecaptcha` (v2 invisible).\",\n valueSchema: \"AuthCaptchaType | null\",\n examples: [\"YandexSmartCaptcha\", \"GoogleRecaptcha\"],\n },\n inviteSessionId: {\n description: \"ID invite-сессии (вход по приглашению).\",\n valueSchema: \"string | null\",\n },\n regionStorageId: {\n description: \"Региональный storage ID (если используется backend identity).\",\n valueSchema: \"int32 | null\",\n },\n preferredMethod: {\n description:\n \"Желаемый способ доставки (`VerificationMethod`). `UnknownMethod` (дефолт) — выбор сервера; иначе — если доступен, иначе fallback по приоритету.\",\n valueSchema: \"VerificationMethod\",\n },\n supportedMethods: {\n description:\n \"Capability negotiation: методы, которые этот билд клиента умеет вести. Out-of-band вроде `MtsMobileId` выбираются только если перечислены здесь — старые клиенты без списка остаются на классическом вводе кода.\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeReqFieldDocs = mapFieldDocsToStrings(sendCodeReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/sendcode`. */\nexport const sendCodeRespFieldDocEntries = {\n sessionId: {\n description: \"ID auth-сессии для следующего шага (`requestToken`).\",\n valueSchema: \"string | null\",\n },\n codeLifetimeSeconds: {\n description: \"TTL кода в секундах (**deprecated** в OpenAPI — предпочитай `sessionLifeTimeInSeconds` / `codeLength`).\",\n valueSchema: \"int32\",\n },\n sessionLifeTimeInSeconds: {\n description: \"TTL auth-сессии в секундах.\",\n valueSchema: \"int32\",\n },\n nextAvailableUsageTime: {\n description: \"Когда можно снова запросить код (rate limit), если сервер вернул.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Сколько попыток ввода кода осталось/доступно для сессии (семантика стенда).\",\n valueSchema: \"int32\",\n },\n usedMethod: {\n description: \"Фактически выбранный сервером способ доставки/подтверждения.\",\n usage: \"UI: подпись «код в SMS» / Telegram / flash-call; при `MtsMobileId` — polling `requestToken` по `status`.\",\n valueSchema: \"VerificationMethod\",\n },\n availableMethods: {\n description: \"Методы, которые клиент может запросить для этого аккаунта (UX «другой способ»).\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n codeLength: {\n description: \"Длина доставленного кода — размер поля ввода в UI.\",\n valueSchema: \"int32\",\n },\n pollIntervalSeconds: {\n description:\n \"Для `usedMethod === MtsMobileId`: рекомендуемый интервал (сек) между повторными `requestToken` пока `TokenResp.status === Pending`.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeRespFieldDocs = mapFieldDocsToStrings(sendCodeRespFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/session`. */\nexport const createAuthSessionReqFieldDocEntries = {\n accountType: {\n description:\n \"Тип аккаунта для auth-сессии с **`authUrl`**. На шлюзе в `AuthUrlsByAccountType` обычно только **`Telegram`**; `Phone`/`Email` → часто 500.\",\n valueSchema: \"AccountType\",\n usage: \"Пример: `auth-login-with-link.ts` (env `TORROW_AUTH_CREATE_SESSION_ACCOUNT_TYPE`, дефолт Telegram).\",\n },\n regionStorageId: { description: \"Регион storage для identity (обязателен в OpenAPI).\", valueSchema: \"int32\" },\n language: { description: \"Язык интерфейса/сообщений сессии (обязателен в OpenAPI).\", valueSchema: \"string\" },\n inviteSessionId: { description: \"ID invite-сессии (если вход по приглашению).\", valueSchema: \"string | null\" },\n captcha: { description: \"Captcha token для защиты от ботов.\", valueSchema: \"string | null\" },\n deviceId: { description: \"Идентификатор устройства клиента.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionReqFieldDocs = mapFieldDocsToStrings(createAuthSessionReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/session`. */\nexport const createAuthSessionRespFieldDocEntries = {\n sessionId: { description: \"ID созданной auth-сессии.\", valueSchema: \"string | null\" },\n sessionLifeTimeInSeconds: { description: \"Срок жизни сессии в секундах.\", valueSchema: \"int32\" },\n nextAvailableUsageTime: {\n description: \"Когда сессию/код можно использовать снова (rate limit), если задано.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Счётчик попыток использования сессии.\",\n valueSchema: \"int32\",\n },\n code: { description: \"Код/секрет сессии, если сервер вернул сразу (редко; зависит от потока).\", valueSchema: \"string | null\" },\n authUrl: {\n description: \"URL внешнего шага аутентификации (deep link / redirect), если применимо.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionRespFieldDocs = mapFieldDocsToStrings(createAuthSessionRespFieldDocEntries);\n\n/**\n * Поверхность SDK, связанная с Bearer и гостевым доступом (не схема OpenAPI, а конфиг клиента).\n */\nexport const torrowClientAuthConfigFieldDocEntries = {\n getAccessToken: {\n description:\n \"Асинхронный колбэк: возвращает строку Bearer или `undefined` (тогда заголовок `Authorization` не ставится).\",\n usage:\n \"Предпочтительно **`@torrow/sdk-auth`** (`TokenSession` → `session.client`, storage + проактивный refresh + опциональный 401→retry). Вручную: кэш access + **`client.auth.refresh`** (без Bearer этого колбэка) — иначе рекурсия. Гостевой **`securityToken`** — только в опциях конкретного вызова фасада, не в конфиге клиента.\",\n },\n authIdentityBasic: {\n description:\n \"HTTP Basic приложения на шлюзе (`AuthIdentityBasic`: `username`/`password` ≈ `clientId`/`clientSecret`). Не user Bearer.\",\n usage:\n \"Нужен для **`client.auth.*`** на `torrow.net`. С сессией — **`TorrowAuth`** + **`appCredentials`** (маппинг внутри auth-пакета). Low-level: **`auth-send-code.ts`**.\",\n valueSchema: \"AuthIdentityBasic\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowClientAuthConfigFieldDocs = mapFieldDocsToStrings(\n torrowClientAuthConfigFieldDocEntries,\n);\n\n/** Методы **`TorrowClient.auth`** ↔ REST AuthIdentity. */\nexport const authSdkMethodFieldDocEntries = {\n refresh: {\n description: \"`POST /api/v1/auth/refresh` — тело `RefreshReq`, ответ `TokenResp`.\",\n usage:\n \"Безопасно вызывать с того же экземпляра `TorrowClient`, у которого задан `getAccessToken`: внутренний вызов не использует Bearer. На `torrow.net` задай `authIdentityBasic`, иначе часто `REQUEST_IS_INVALID`.\",\n },\n requestToken: {\n description: \"`POST /api/v1/auth/token` — тело `TokenReq`, ответ `TokenResp` (смотри `status`).\",\n usage:\n \"После **`sendCode`**: `sessionId` + код (классика) или polling без кода при `MtsMobileId`/`Pending`. Оркестрация — **`TorrowAuth.loginWithOtp`**; явный обмен — **`session.requestTokenWithCode`** (`auth-complete-with-code.ts`); low-level — **`auth-send-code.ts`**.\",\n },\n revoke: {\n description: \"`POST /api/v1/auth/revoke` — тело `RevokeReq`, ответ пустой при успехе.\",\n usage: \"Выход и инвалидация refresh на сервере. Предпочтительно **`session.logout()`**.\",\n },\n sendCode: {\n description: \"`POST /api/v1/auth/sendcode` — тело `SendCodeReq`, ответ `SendCodeResp`.\",\n usage:\n \"Первый шаг OTP: **`sessionId`**, **`usedMethod`**, **`codeLength`**, при Mobile ID — **`pollIntervalSeconds`**. Только sendCode — **`examples/node/auth/auth-send-code.ts`**; склейка с токенами — **`TorrowAuth.loginWithOtp`** / **`auth-login-with-otp.ts`**.\",\n },\n createSession: {\n description: \"`POST /api/v1/auth/session` — тело `CreateAuthSessionReq`, ответ `CreateAuthSessionResp`.\",\n usage:\n \"Не OTP-логин приложения: в torrow-apps вход — `sendCode`/`requestToken`. Этот метод — сессия под внешний deep-link (`authUrl`); на шлюзе в `AuthUrlsByAccountType` обычно только `Telegram`. Для `Phone`/`Email` часто 500 `KeyNotFoundException`. Оркестрация — **`TorrowAuth.loginWithLink`** / **`auth-login-with-link.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkMethodFieldDocs = mapFieldDocsToStrings(authSdkMethodFieldDocEntries);\n\n/**\n * Фасад **`TorrowAuth`** / advanced **`TokenSession`** (**`@torrow/sdk-auth`**).\n * MCP: **`mcpAuthFieldCatalog.AuthSdkHelpers`**.\n */\nexport const authSdkHelperFieldDocEntries = {\n \"TorrowAuth.connect\": {\n description:\n \"Restore из **`TokenStorage`**: при необходимости refresh → `{ client, session }`. **Без** OTP-hook.\",\n usage:\n \"`appCredentials` + `tokenStorage` + `deviceInfo`. Статус — **`session.status`**. Пример: **`auth-connect.ts`**.\",\n },\n \"TorrowAuth.loginWithOtp\": {\n description:\n \"`sendCode` → Mobile ID poll / classic код → persist → `{ client, session }`.\",\n usage:\n \"`account: { accountType, accountName }` (как SendCodeReq). UI: **`onSendCode({ accountName, accountType, usedMethod, codeLength, … })`**; **`getCode({ codeLength })`** только когда нужны цифры (экран уже из `onSendCode`). Примеры: **`auth-login-with-otp.ts`**, **`auth-login-with-otp-mobile-id.ts`**.\",\n },\n \"TorrowAuth.loginWithLink\": {\n description:\n \"Telegram deep-link: `createSession` → **`onLink(authUrl)`** → внутренний poll `requestToken` → persist.\",\n usage:\n \"Код OTP **не** вводить. Пример: **`auth-login-with-link.ts`**.\",\n },\n \"TorrowAuth.fromTokens\": {\n description:\n \"Сид `accessToken` [/ `refreshToken`] в storage → connect-семантика.\",\n usage:\n \"`appCredentials` опционален: без него нет refresh. Opaque/integration key: задай `accessExpiresAtMs` или бессрочно без TTL. У JWT runtime freshness AND-ит `exp` — будущий explicit `accessExpiresAtMs` не оживит просроченный JWT. Пример: **`auth-from-tokens.ts`**.\",\n },\n \"TorrowAuth.anonymous\": {\n description: \"`TorrowClient` без Bearer (`getAccessToken: undefined`).\",\n usage: \"Публичные GET. Пример: **`auth-anonymous-public-service.ts`**.\",\n },\n requestTokenWithCode: {\n description:\n \"**`TokenSession.requestTokenWithCode`**: токены по `sessionId` + OTP-коду (`requestToken`) → persist при TokenReady.\",\n usage:\n \"После `sendCode` + кода (UI/stdin). Не ready → **`AuthSessionNotReadyError`** (poll — внутри **`loginWithLink`**). Пример: **`auth-complete-with-code.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkHelperFieldDocs = mapFieldDocsToStrings(authSdkHelperFieldDocEntries);\n\n/**\n * Гостевой **`securityToken`**: не access JWT, не заголовок `Authorization`.\n * Ключи — подсказки для агентов (MCP: **`mcpAuthFieldCatalog.GuestAccessSecurityToken`**).\n */\nexport const guestAccessSecurityTokenFieldDocEntries = {\n purpose: {\n description:\n \"Одноразовый или контекстный **opaque**-токен, который сервер принимает **вместо или вместе с** полноценной пользовательской сессией, чтобы отдать данные по конкретной сущности (часто **событие/заказ**), не раскрывая всё дерево прав владельца.\",\n usage:\n \"Типичный UX: пользователь **не залогинен**, но открыл ссылку после записи на услугу; сервер выдал токен вместе с ответом **`createOrder`**, приложение подставляет его в следующие **чтения** этого кейса.\",\n },\n notBearer: {\n description:\n \"**Не** подставлять в `Authorization` и **не** путать с `TokenResp.accessToken` / env **`TORROW_ACCESS_TOKEN`**.\",\n usage:\n \"`TORROW_ACCESS_TOKEN` → `TorrowClientConfig.getAccessToken` → заголовок **`Authorization: Bearer …`**. `securityToken` → только поля **`securityToken`** в query или в теле запроса по OpenAPI.\",\n },\n openApiWire: {\n description:\n \"В OpenAPI параметр чаще всего называется **`securityToken`** (query на `GET/PUT/DELETE …` или поле в JSON-теле — сверяй конкретный путь в **`docs/torrow-swagger.json`**).\",\n usage:\n \"SDK не добавляет его глобально: передаёшь в **опциях** соответствующего метода фасада (например `cases.getById(id, { securityToken })`) или в свойстве тела (`GetReCheckInScheduleReq.securityToken` для `services.getReCheckInSchedule`).\",\n },\n afterCreateOrder: {\n description:\n \"После **`client.services.createOrder`** в ответе **`OrderResp`** часто есть строка, которую продукт кладёт в query как **`securityToken`** при открытии экрана события у гостя.\",\n usage:\n \"Возьми **`OrderResp.consumerSecurityToken`** (если пришёл) и передай тем же ключом в **`client.cases.getById(order.id, { securityToken: consumerSecurityToken, caseParticipantId: … })`** — иначе **`personalInfo.ticketResource`** и ссылка на оплату могут не вернуться.\",\n examples: [\"consumerSecurityToken из OrderResp\"],\n },\n envInExamples: {\n description:\n \"В актуальных примерах гостевой токен берётся из **`OrderResp`** и передаётся дальше в browser-потоке **`examples/browser/guest-order/`**; отдельный env с токеном несвязанного кейса не используется.\",\n usage:\n \"В своём коде приложения храни значение там же, где хранишь deep link / черновик заказа (state роутера), а не в общем `TorrowClient`-конфиге — конфиг клиента **не** содержит `securityToken`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const guestAccessSecurityTokenFieldDocs = mapFieldDocsToStrings(\n guestAccessSecurityTokenFieldDocEntries,\n);\n\n/** Значения OpenAPI **`DeviceType`** ↔ **`DeviceTypeValues`** в `@torrow/sdk-client`. */\nexport const deviceTypeValuesFieldDocEntries = {\n Unknown: {\n description: \"Тип устройства не определён / не передан явно.\",\n usage: \"`DeviceTypeValues.Unknown` → `DeviceInfo.deviceType`.\",\n },\n Mobile: {\n description: \"Мобильный клиент.\",\n usage: \"`DeviceTypeValues.Mobile`.\",\n },\n Tablet: {\n description: \"Планшет.\",\n usage: \"`DeviceTypeValues.Tablet`.\",\n },\n Desktop: {\n description: \"Десктоп / веб-десктоп (дефолт в примерах SDK).\",\n usage: \"`DeviceTypeValues.Desktop`. Парсинг env: `parseDeviceType`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deviceTypeValuesFieldDocs = mapFieldDocsToStrings(deviceTypeValuesFieldDocEntries);\n","/**\n * Описания схем токенов и конфигурации авторизации для MCP / агентов.\n * Ключи верхнего уровня: `TokenResp`, `RefreshReq`, `TokenReq`, `RevokeReq` совпадают с `components.schemas`;\n * `TorrowClientConfigAuth` — условное имя для поля {@link TorrowClientConfig.getAccessToken} в справочнике MCP.\n * `GuestAccessSecurityToken` — как и зачем передавать гостевой query/body **`securityToken`** (не Bearer).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n authSdkMethodFieldDocEntries,\n authSdkHelperFieldDocEntries,\n createAuthSessionReqFieldDocEntries,\n createAuthSessionRespFieldDocEntries,\n deviceTypeValuesFieldDocEntries,\n refreshReqFieldDocEntries,\n revokeReqFieldDocEntries,\n sendCodeReqFieldDocEntries,\n sendCodeRespFieldDocEntries,\n tokenReqFieldDocEntries,\n tokenRespFieldDocEntries,\n torrowClientAuthConfigFieldDocEntries,\n guestAccessSecurityTokenFieldDocEntries,\n} from \"./auth-token-field-docs.js\";\n\nexport const mcpAuthFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы `TorrowClient.auth` ↔ OpenAPI AuthIdentity. */\n AuthSdkMethods: { ...authSdkMethodFieldDocEntries },\n /** Хелперы `@torrow/sdk-auth` (OTP-оркестрация, Mobile ID, LoginTask). */\n AuthSdkHelpers: { ...authSdkHelperFieldDocEntries },\n TokenResp: { ...tokenRespFieldDocEntries },\n RefreshReq: { ...refreshReqFieldDocEntries },\n TokenReq: { ...tokenReqFieldDocEntries },\n RevokeReq: { ...revokeReqFieldDocEntries },\n SendCodeReq: { ...sendCodeReqFieldDocEntries },\n SendCodeResp: { ...sendCodeRespFieldDocEntries },\n CreateAuthSessionReq: { ...createAuthSessionReqFieldDocEntries },\n CreateAuthSessionResp: { ...createAuthSessionRespFieldDocEntries },\n /** Поле `getAccessToken` в `TorrowClientConfig` (Bearer приложения). */\n TorrowClientConfigAuth: { ...torrowClientAuthConfigFieldDocEntries },\n /** Гостевой `securityToken`: query/тело запроса, не конфиг `TorrowClient`. */\n GuestAccessSecurityToken: { ...guestAccessSecurityTokenFieldDocEntries },\n /** OpenAPI `DeviceType` ↔ `DeviceTypeValues` / `parseDeviceType`. */\n DeviceTypeValues: { ...deviceTypeValuesFieldDocEntries },\n};\n","/**\n * Описания методов **`TorrowClient.search`** и ключевых DTO поиска заказов для MCP / агентов.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общая текстовая выдача (`GET …/search/{contacts|notes|…}`), не `search.orders`. */\nconst TEXT_SEARCH_PUBLICITY =\n \"В выдаче только **`PublicAvailable`** / **`PublicWithRequest`** (`Personal` / `Private` / `Link` — нет). \" +\n \"`publicityType` не в теле create — **`updatePublicity`**. См. **`docs/agents/participation-flow.md`** §3, пример **`search-contacts.ts`**.\";\n\nexport const searchSdkMethodFieldDocEntries = {\n advisedItems: {\n description:\n \"`GET /api/v1/search/adviseditems` — подборка **`TorrowItem[]`**; query **`AdvisedItemsSearchQuery`** \" +\n \"(`type` **`AdvisedItemType`**, гео, `language`, `take`/`skip`).\",\n usage:\n \"**`NearLocation`**: обязательны `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`** (СПб). \" +\n \"**`Recommendation`**: персональные рекомендации. Не путать с текстовым `search.contacts` и т.п.\",\n },\n orders: {\n description:\n \"`PUT /api/v1/search/{torrowId}/orders` — список представлений заказов (**`CaseView[]`**) под родителем с **`OrderFilter`** в теле.\",\n usage: \"Альтернатива **`client.raw.put`**; см. **`examples/node/raw/search-orders-raw.ts`**.\",\n },\n contacts: {\n description: \"`GET /api/v1/search/contacts` — **`ContactView[]`** по тексту и опциям.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n notes: {\n description: \"`GET /api/v1/search/notes` — **`NoteView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n calendars: {\n description: \"`GET /api/v1/search/calendars` — **`CalendarView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n cases: {\n description: \"`GET /api/v1/search/cases` — **`CaseView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n resources: {\n description: \"`GET /api/v1/search/resources` — **`ResourceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n services: {\n description: \"`GET /api/v1/search/services` — **`ServiceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchSdkMethodFieldDocs = mapFieldDocsToStrings(searchSdkMethodFieldDocEntries);\n\n/** Query `GET /api/v1/search/adviseditems` (`AdvisedItemsSearchQuery` / OpenAPI). */\nexport const advisedItemsSearchQueryFieldDocEntries = {\n type: {\n description:\n \"Режим подборки: **`NearLocation`** (рядом с точкой) или **`Recommendation`** (персональные рекомендации).\",\n valueSchema: \"AdvisedItemType\",\n examples: [\"NearLocation\", \"Recommendation\"],\n },\n longitude: {\n description: \"Долгота WGS84. Для **`NearLocation`** задавай вместе с **`latitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"30.3141\"],\n },\n latitude: {\n description: \"Широта WGS84. Для **`NearLocation`** задавай вместе с **`longitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"59.9386\"],\n },\n language: {\n description: \"Язык локализации подборки (BCP-47).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум элементов в ответе (пагинация).\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const advisedItemsSearchQueryFieldDocs = mapFieldDocsToStrings(\n advisedItemsSearchQueryFieldDocEntries,\n);\n\nexport const orderFilterFieldDocEntries = {\n searchText: {\n description: \"Подстрока для фильтрации заказов (семантика на стороне API).\",\n },\n fuzzyDistance: {\n description: \"Допуск «размытия» для текстового поиска (int).\",\n },\n from: {\n description: \"Начало интервала по времени (**ISO date-time**).\",\n },\n to: {\n description: \"Конец интервала (**ISO date-time**).\",\n },\n strictlyInTimeRange: {\n description: \"Если true — строго внутри интервала.\",\n },\n orderStateList: {\n description: \"Список **`CaseState`** для фильтра.\",\n valueSchema: \"CaseState\",\n },\n orderTypeList: {\n description: \"Список **`CaseType`** для фильтра.\",\n valueSchema: \"CaseType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderFilterFieldDocs = mapFieldDocsToStrings(orderFilterFieldDocEntries);\n","/**\n * Каталог **Search** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n advisedItemsSearchQueryFieldDocEntries,\n orderFilterFieldDocEntries,\n searchSdkMethodFieldDocEntries,\n} from \"./search-field-docs.js\";\n\nexport const mcpSearchFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n SearchSdkMethods: { ...searchSdkMethodFieldDocEntries },\n AdvisedItemsSearchQuery: { ...advisedItemsSearchQueryFieldDocEntries },\n OrderFilter: { ...orderFilterFieldDocEntries },\n};\n","/**\n * Каталог методов **`client.notes`** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { notesSdkMethodFieldDocEntries } from \"./notes-field-docs.js\";\n\nexport const mcpNotesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n NotesSdkMethods: { ...notesSdkMethodFieldDocEntries },\n};\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const generateSecurityTokenReqFieldDocEntries = {\n forUser: {\n description: \"Токен ограничен текущим пользователем/профилем.\",\n valueSchema: \"boolean | null\",\n },\n expiresAt: {\n description: \"Срок действия security-token.\",\n valueSchema: \"date-time string | null\",\n },\n operationTypeList: {\n description: \"Список разрешённых операций для токена.\",\n valueSchema: \"OperationType[] | null\",\n },\n participantType: {\n description: \"Минимальная роль участия при использовании токена.\",\n valueSchema: \"ParticipantType\",\n },\n participantState: {\n description: \"Ожидаемое состояние участия для доступа по токену.\",\n valueSchema: \"ParticipantState\",\n },\n roleIdList: {\n description: \"Ограничение по role id (контракт API).\",\n valueSchema: \"int32[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenReqFieldDocs = mapFieldDocsToStrings(generateSecurityTokenReqFieldDocEntries);\n\nexport const generateSecurityTokenRespFieldDocEntries = {\n token: {\n description: \"Сгенерированный security-token для guest/limited access.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenRespFieldDocs = mapFieldDocsToStrings(generateSecurityTokenRespFieldDocEntries);\n\nexport const shareItemReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль-инициатор шаринга (если отличается от контекста токена).\",\n valueSchema: \"string | null\",\n },\n readerProfileIdList: {\n description:\n \"Список профилей-получателей (основное поле API). Каждый id должен уже быть в личном списке владельца, иначе `failedToParticipate` → `CONTACT_IS_NOT_IN_PERSONAL_LIST`.\",\n valueSchema: \"string[] | null\",\n },\n readerProfileIdsList: {\n description: \"Легаси-алиас списка получателей (встречается в старых контрактах).\",\n valueSchema: \"string[] | null\",\n },\n participantType: {\n description: \"Тип доступа, который выдают получателям.\",\n valueSchema: \"ParticipantType\",\n },\n userMessage: {\n description: \"Комментарий/сообщение получателю при шаринге.\",\n valueSchema: \"string | null\",\n },\n versionToCheck: {\n description: \"Версия объекта для optimistic lock.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Флаг генерации анонса после share.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const shareItemReqFieldDocs = mapFieldDocsToStrings(shareItemReqFieldDocEntries);\n\nexport const sendLinkOfItemReqFieldDocEntries = {\n profileId: {\n description: \"Профиль-инициатор отправки ссылки.\",\n valueSchema: \"string | null\",\n },\n recipientProfileIdList: {\n description: \"Список профилей-получателей ссылки.\",\n valueSchema: \"string[] | null\",\n },\n message: {\n description: \"Сопроводительное сообщение к ссылке.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemReqFieldDocs = mapFieldDocsToStrings(sendLinkOfItemReqFieldDocEntries);\n\nexport const getShareItemSessionReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль инициатора invite-session ссылки.\",\n valueSchema: \"string | null\",\n },\n expiredDate: {\n description: \"Срок действия session URL.\",\n valueSchema: \"Date\",\n },\n activateCount: {\n description: \"Сколько раз можно активировать session.\",\n valueSchema: \"number\",\n },\n code: {\n description: \"Опциональный код активации.\",\n valueSchema: \"string | null\",\n },\n userMessage: {\n description: \"Сообщение к invite-session.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const getShareItemSessionReqFieldDocs = mapFieldDocsToStrings(getShareItemSessionReqFieldDocEntries);\n\nexport const sendLinkOfItemRespFieldDocEntries = {\n isSuccess: {\n description: \"Итог отправки ссылки.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemRespFieldDocs = mapFieldDocsToStrings(sendLinkOfItemRespFieldDocEntries);\n\nexport const participationFieldDocEntries = {\n meta: {\n description: \"Мета участия (`version`, даты, системные атрибуты).\",\n valueSchema: \"ObjectInfo\",\n },\n profileId: {\n description: \"Профиль участника, для которого действует участие.\",\n valueSchema: \"string | null\",\n },\n participantState: {\n description: \"Состояние участия (`Requested`, `Approved`, ...).\",\n valueSchema: \"ParticipantState\",\n },\n participantType: {\n description: \"Роль участия (`Reader`, `Editor`, `Owner`, ...).\",\n valueSchema: \"ParticipantType\",\n },\n notificationWayList: {\n description: \"Каналы уведомлений участника по объекту.\",\n valueSchema: \"NotificationWay[] | null\",\n },\n subscriptionList: {\n description: \"Подписки/настройки подписок участника.\",\n valueSchema: \"Subscription[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationFieldDocs = mapFieldDocsToStrings(participationFieldDocEntries);\n\nexport const profileWithErrorFieldDocEntries = {\n profile: {\n description: \"ID профиля, по которому операция завершилась с ошибкой.\",\n valueSchema: \"string | null\",\n },\n torrowErrorClient: {\n description: \"Структура ошибки API для этого профиля.\",\n valueSchema: \"TorrowErrorClient\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileWithErrorFieldDocs = mapFieldDocsToStrings(profileWithErrorFieldDocEntries);\n\nexport const participationRespFieldDocEntries = {\n participationList: {\n description: \"Список успешных participation-изменений.\",\n valueSchema: \"Participation[] | null\",\n },\n failedToParticipate: {\n description: \"Профили, по которым операция не выполнена, с ошибками.\",\n valueSchema: \"ProfileWithError[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationRespFieldDocs = mapFieldDocsToStrings(participationRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const accountingTransactionFieldDocEntries = {\n accountId: { description: \"Счёт/баланс, к которому относится транзакция.\", valueSchema: \"string | null\" },\n transactionDate: { description: \"Дата проводки транзакции.\", valueSchema: \"date-time string\" },\n state: { description: \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\", valueSchema: \"AccountingTransactionState\" },\n type: { description: \"Тип транзакции (`Balance` или `Operation`).\", valueSchema: \"AccountingTransactionType\" },\n transactionValues: { description: \"Список изменений по продуктам/валютам.\", valueSchema: \"BalanceValue[] | null\" },\n comment: { description: \"Пояснение к операции (для UI/аудита).\", valueSchema: \"string | null\" },\n operationCategory: { description: \"Категория операции (int-код API).\", valueSchema: \"int32\" },\n operationCategoryName: { description: \"Человекочитаемое имя категории операции.\", valueSchema: \"string | null\" },\n validityDate: { description: \"Срок действия транзакции/резерва, если применимо.\", valueSchema: \"date-time string | null\" },\n transactionInfo: { description: \"Доп. служебные данные транзакции.\", valueSchema: \"TransactionInfo\" },\n id: { description: \"ID транзакции.\", valueSchema: \"string | null\" },\n meta: { description: \"Мета (`version`, даты изменения и т.д.).\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const accountingTransactionFieldDocs = mapFieldDocsToStrings(accountingTransactionFieldDocEntries);\n\nexport const balanceValueFieldDocEntries = {\n productId: { description: \"ID продукта/балансовой позиции.\", valueSchema: \"int32\" },\n amount: { description: \"Количество/сумма в этой позиции.\", valueSchema: \"double | null\" },\n productName: { description: \"Название продукта/единицы баланса.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const balanceValueFieldDocs = mapFieldDocsToStrings(balanceValueFieldDocEntries);\n\nexport const actionHistoryInfoFieldDocEntries = {\n actionHistoryType: { description: \"Тип действия в истории.\", valueSchema: \"ActionHistoryType\" },\n state: { description: \"Состояние записи истории.\", valueSchema: \"ActionHistoryState\" },\n userMessage: { description: \"Пользовательское сообщение (если передавалось в операции).\", valueSchema: \"string | null\" },\n text: { description: \"Системный/локализованный текст события.\", valueSchema: \"string | null\" },\n userProfileView: { description: \"Профиль пользователя, инициировавшего действие.\", valueSchema: \"ContactView\" },\n correspondentProfileViewList: { description: \"Профили корреспондентов/получателей события.\", valueSchema: \"ContactView[] | null\" },\n itemContactView: { description: \"Снимок контакта, к которому относится событие (если применимо).\", valueSchema: \"ContactView\" },\n itemContextView: { description: \"Снимок контекста, к которому относится событие (если применимо).\", valueSchema: \"ContextView\" },\n itemNoteView: { description: \"Снимок заметки, к которой относится событие (если применимо).\", valueSchema: \"NoteView\" },\n itemCaseView: { description: \"Снимок события/кейса, к которому относится запись (если применимо).\", valueSchema: \"CaseView\" },\n itemCalendarView: { description: \"Снимок календаря, к которому относится событие (если применимо).\", valueSchema: \"CalendarView\" },\n itemServiceView: { description: \"Снимок услуги, к которой относится событие (если применимо).\", valueSchema: \"ServiceView\" },\n itemResourceView: { description: \"Снимок ресурса, к которому относится событие (если применимо).\", valueSchema: \"ResourceView\" },\n itemLoyaltyCardView: {\n description: \"Снимок карты лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltyCardView\",\n },\n itemLoyaltySystemView: {\n description: \"Снимок программы лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltySystemView\",\n },\n id: { description: \"ID записи action-history.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект записи.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryInfoFieldDocs = mapFieldDocsToStrings(actionHistoryInfoFieldDocEntries);\n\n/** Query `GET /api/v1/actionhistory` (`ActionHistoryListQuery` / OpenAPI). */\nexport const actionHistoryListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста событий (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать записи по удалённым объектам. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка.\",\n valueSchema: \"ItemViewSortCondition\",\n },\n types: {\n description: \"Фильтр по типам действий (`CreateItem`, `UpdateItem`, …).\",\n valueSchema: \"ActionHistoryType[]\",\n },\n states: {\n description: \"Фильтр по состоянию записи (`Executing`, `Success`, …).\",\n valueSchema: \"ActionHistoryState[]\",\n },\n itemIds: {\n description:\n \"Фильтр по id элементов. Опционален: без параметра / `[]` — лента действий пользователя; непустой список — история по выбранным item (нужны существующие id с доступом). Невалидный id на шлюзе может дать HTTP 500.\",\n valueSchema: \"string[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryListQueryFieldDocs = mapFieldDocsToStrings(actionHistoryListQueryFieldDocEntries);\n\n/** Query `GET /api/v1/announcements` (`AnnouncementsListQuery` / OpenAPI). */\nexport const announcementsListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста уведомлений (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n state: {\n description:\n \"Один фильтр по состоянию (`New`, `Hidden`, `Read`, …). Если задан — имеет приоритет над **`stateList`**. Без **`state`** и **`stateList`** шлюз отдаёт **пустой** список (не ошибку).\",\n valueSchema: \"AnnouncementState\",\n examples: [\"New\", \"Hidden\"],\n },\n stateList: {\n description:\n \"Фильтр по нескольким состояниям. В приложении лента грузит **`New`** (новые) и **`Hidden`** (обработанные) отдельными запросами. Без **`state`** и **`stateList`** ответ пустой.\",\n valueSchema: \"AnnouncementState[]\",\n examples: ['[\"New\", \"Hidden\"]'],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать удалённые уведомления. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка (в приложении часто `LastModifiedDesc`).\",\n valueSchema: \"ItemViewSortCondition\",\n examples: [\"LastModifiedDesc\"],\n },\n profileId: {\n description: \"Опциональный фильтр по профилю-получателю уведомления.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementsListQueryFieldDocs = mapFieldDocsToStrings(announcementsListQueryFieldDocEntries);\n\nexport const announcementInfoFieldDocEntries = {\n type: { description: \"Тип анонса (share, grant access, create order, ...).\", valueSchema: \"AnnouncementType\" },\n state: { description: \"Состояние анонса (`New`, `Read`, `Hidden`).\", valueSchema: \"AnnouncementState\" },\n category: { description: \"Категория визуализации (`Action`, `Alert`, `Reminder`, ...).\", valueSchema: \"AnnouncementCategory\" },\n priority: { description: \"Приоритет показа (`Low`, `Normal`, `High`).\", valueSchema: \"AnnouncementPriority\" },\n senderProfileView: { description: \"Профиль отправителя анонса.\", valueSchema: \"ContactView\" },\n recipientProfileView: { description: \"Профиль получателя анонса.\", valueSchema: \"ContactView\" },\n userMessage: { description: \"Сообщение пользователя (если источник события его содержал).\", valueSchema: \"string | null\" },\n text: { description: \"Итоговый текст уведомления для ленты.\", valueSchema: \"string | null\" },\n creationDate: { description: \"Дата создания уведомления.\", valueSchema: \"date-time string | null\" },\n id: { description: \"ID уведомления.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект уведомления.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementInfoFieldDocs = mapFieldDocsToStrings(announcementInfoFieldDocEntries);\n\nexport const updateAnnouncementStateReqFieldDocEntries = {\n newState: { description: \"Новое состояние уведомления (`Read`/`Hidden`/...).\", valueSchema: \"AnnouncementState\" },\n announcementId: { description: \"ID анонса, состояние которого обновляют.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateAnnouncementStateReqFieldDocs = mapFieldDocsToStrings(updateAnnouncementStateReqFieldDocEntries);\n\nexport const exportRequestFieldDocEntries = {\n itemId: { description: \"Корневой item для экспорта подграфа.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина обхода связей при экспорте.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportRequestFieldDocs = mapFieldDocsToStrings(exportRequestFieldDocEntries);\n\nexport const exportGraphFieldDocEntries = {\n rootId: { description: \"ID корневого элемента экспортированного графа.\", valueSchema: \"string | null\" },\n items: { description: \"Снимок элементов подграфа (узлы).\", valueSchema: \"TorrowItem[] | null\" },\n views: { description: \"Экспортированные представления (views) для элементов графа.\", valueSchema: \"ItemView[] | null\" },\n timetableCases: {\n description: \"Связанные записи расписания/кейсы, попавшие в экспорт.\",\n valueSchema: \"TimetableCase[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportGraphFieldDocs = mapFieldDocsToStrings(exportGraphFieldDocEntries);\n\nexport const importByFileRequestFieldDocEntries = {\n exportGraph: { description: \"Граф, ранее полученный через export API.\", valueSchema: \"ExportGraph\" },\n parentId: { description: \"Куда импортировать корень графа.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль-владелец для импортируемых объектов.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импортировать только дочерние узлы графа без корня.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не дублировать root, если уже существует.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByFileRequestFieldDocs = mapFieldDocsToStrings(importByFileRequestFieldDocEntries);\n\nexport const importByUniqueNameRequestFieldDocEntries = {\n uniqueName: { description: \"Уникальное имя экспортированного набора/корня.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина импортируемого подграфа.\", valueSchema: \"int32 | null\" },\n parentId: { description: \"Родитель, куда включают импортированный граф.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль контекста импорта.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импорт без корневого узла.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не создавать дубль root при совпадении.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByUniqueNameRequestFieldDocs = mapFieldDocsToStrings(importByUniqueNameRequestFieldDocEntries);\n\nexport const generateReportReqFieldDocEntries = {\n options: { description: \"Опции доставки/локали отчёта.\", valueSchema: \"ReportOptions\" },\n properties: { description: \"Параметры формирования отчёта (контракт API).\", valueSchema: \"ReportProperties\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportReqFieldDocs = mapFieldDocsToStrings(generateReportReqFieldDocEntries);\n\nexport const reportPropertiesFieldDocEntries = {\n discriminator: {\n description:\n \"Subtype отчёта (NJsonSchema inheritance). Swagger описывает только базу; runtime требует одно из: `CaseReportProperties`, `ServiceReportProperties`, `ServicesResourcesReportProperties`, `ResourcesRentReportProperties`, `ResourceReportProperties`. Пустой `{}` → HTTP 500.\",\n valueSchema: \"string\",\n examples: [\"CaseReportProperties\", \"ServiceReportProperties\"],\n },\n fakeForTsGeneratorDoNotRemove: {\n description:\n \"Техническое поле OpenAPI для генератора типов. В бизнес-логике отчётов не используется и обычно не передаётся.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportPropertiesFieldDocs = mapFieldDocsToStrings(reportPropertiesFieldDocEntries);\n\nexport const reportOptionsFieldDocEntries = {\n reportDeliveryType: { description: \"Способ доставки отчёта: `Link` или `Email`.\", valueSchema: \"ReportDeliveryType\" },\n reportDeliveryAddresses: { description: \"Email-адреса получателей, если доставка через Email.\", valueSchema: \"string[] | null\" },\n language: { description: \"Язык отчёта (обычно BCP-47, напр. `ru`, `en`).\", valueSchema: \"string\" },\n timeZone: {\n description: \"Таймзона для дат отчёта (в приложении используется локальная IANA зона пользователя).\",\n valueSchema: \"string\",\n examples: [\"Europe/Moscow\", \"UTC\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportOptionsFieldDocs = mapFieldDocsToStrings(reportOptionsFieldDocEntries);\n\nexport const generateReportRespFieldDocEntries = {\n reportLink: { description: \"Ссылка на готовый отчёт.\", valueSchema: \"string | null\" },\n expirationTime: { description: \"Срок действия ссылки на отчёт.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportRespFieldDocs = mapFieldDocsToStrings(generateReportRespFieldDocEntries);\n\nexport const loyaltyCardSubscriptionFieldDocEntries = {\n subscriptionId: { description: \"ID подписки карты лояльности.\", valueSchema: \"string | null\" },\n name: { description: \"Название подписки (тариф/пакет).\", valueSchema: \"string | null\" },\n state: { description: \"Состояние подписки (int-код API).\", valueSchema: \"int32\" },\n createDate: { description: \"Дата создания подписки.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала действия подписки.\", valueSchema: \"date-time string | null\" },\n endDate: { description: \"Дата окончания действия подписки.\", valueSchema: \"date-time string | null\" },\n caseParticipantId: {\n description: \"ID участника кейса, на основе которого создана подписка.\",\n valueSchema: \"string | null\",\n },\n image: { description: \"Изображение/иконка подписки.\", valueSchema: \"FileInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltyCardSubscriptionFieldDocs = mapFieldDocsToStrings(loyaltyCardSubscriptionFieldDocEntries);\n\n/** Тело `POST .../loyaltysystems/{id}/loyaltycard` — **`CreateLoyaltyCardReq`**. */\nexport const createLoyaltyCardReqFieldDocEntries = {\n profileId: {\n description: \"Профиль владельца выпускаемой карты (обязателен).\",\n valueSchema: \"string\",\n usage: \"`client.loyaltySystems.createLoyaltyCard(systemId, { profileId, … })`.\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого создаются карта клиента и абонемент.\",\n valueSchema: \"string | null\",\n usage:\n \"Сценарий записи/оплаты → выпуск карты с привязкой к заказу; `null` — выпуск без элемента-основания.\",\n },\n contactInformation: {\n description: \"Контактные данные держателя карты при выпуске (если передаются отдельно от профиля).\",\n valueSchema: \"ContactInformation\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createLoyaltyCardReqFieldDocs = mapFieldDocsToStrings(createLoyaltyCardReqFieldDocEntries);\n\n/** Вложенный объект в **`CreateLoyaltyCardSubscriptionReq.initialTransaction`**. */\nexport const initialTransactionFieldDocEntries = {\n beginTransactionValues: {\n description: \"Начальные значения баланса/продуктов при создании абонемента.\",\n valueSchema: \"TransactionValue[]\",\n },\n state: {\n description: \"Состояние начальной транзакции (`Intended`, `Reserved`, `Commited`, …).\",\n valueSchema: \"AccountingTransactionState\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого созданы карта клиента и абонемент; связывается с начальной транзакцией подписки.\",\n valueSchema: \"string | null\",\n usage: \"Тот же смысл, что у **`CreateLoyaltyCardReq.basisItemId`**, в контексте `createSubscription`.\",\n },\n caseParticipantId: {\n description: \"ID участника кейса, связанного с начальной транзакцией (если применимо).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const initialTransactionFieldDocs = mapFieldDocsToStrings(initialTransactionFieldDocEntries);\n\nexport const loyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemIdList: {\n description: \"Список программ лояльности, по которым считают агрегаты.\",\n valueSchema: \"string[]\",\n },\n name: { description: \"Имя набора статистики/среза (лейбл запроса).\", valueSchema: \"string\" },\n filterList: { description: \"Фильтры карт/подписок для статистики.\", valueSchema: \"LoyaltyCardFilterCondition[] | null\" },\n includeDeleted: { description: \"Включать удалённые объекты в расчёт.\", valueSchema: \"boolean | null\" },\n take: { description: \"Лимит элементов при расчёте.\", valueSchema: \"int32 | null\" },\n skip: { description: \"Смещение для пакетной обработки.\", valueSchema: \"int32 | null\" },\n lastModifiedFrom: { description: \"Нижняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n lastModifiedTo: { description: \"Верхняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n createDateFrom: { description: \"Нижняя граница по дате создания.\", valueSchema: \"Date | null\" },\n createDateTo: { description: \"Верхняя граница по дате создания.\", valueSchema: \"Date | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsReqFieldDocEntries);\n\nexport const loyaltySystemsStatisticsRespFieldDocEntries = {\n name: { description: \"Имя среза статистики из запроса.\", valueSchema: \"string | null\" },\n count: { description: \"Рассчитанное количество элементов по срезу.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsRespFieldDocEntries);\n\nexport const getLoyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemsStatisticsReqList: {\n description: \"Пакет запросов статистики по программам лояльности.\",\n valueSchema: \"LoyaltySystemsStatisticsReq[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n);\n\nexport const getLoyaltySystemsStatisticsRespFieldDocEntries = {\n loyaltySystemsStatisticsRespList: {\n description: \"Пакет ответов статистики по каждому входному срезу.\",\n valueSchema: \"LoyaltySystemsStatisticsResp[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n);\n\nexport const transactionInfoFieldDocEntries = {\n basisItem: {\n description: \"Базовый объект-основание транзакции (например кейс/карта/подписка).\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const transactionInfoFieldDocs = mapFieldDocsToStrings(transactionInfoFieldDocEntries);\n\nexport const torrowErrorClientFieldDocEntries = {\n code: { description: \"Код ошибки API.\", valueSchema: \"int32\" },\n name: { description: \"Системное имя ошибки.\", valueSchema: \"string | null\" },\n message: { description: \"Пользовательское сообщение ошибки.\", valueSchema: \"string | null\" },\n systemMessage: { description: \"Техническое сообщение сервера.\", valueSchema: \"string | null\" },\n innerError: { description: \"Вложенная причина ошибки.\", valueSchema: \"TorrowErrorClient\" },\n traceUrl: { description: \"URL трейса/диагностики (если включено на сервере).\", valueSchema: \"string | null\" },\n traceIdentifier: { description: \"Идентификатор трассировки для саппорта.\", valueSchema: \"string | null\" },\n parameters: { description: \"Параметры ошибки (ключ-значение).\", valueSchema: \"Record<string, string | null> | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const torrowErrorClientFieldDocs = mapFieldDocsToStrings(torrowErrorClientFieldDocEntries);\n\nexport const getParticipationCountRespFieldDocEntries = {\n count: { description: \"Количество участников по текущему фильтру.\", valueSchema: \"int32\" },\n isExactValue: {\n description: \"Точное ли это значение (`false` — сервер мог вернуть приближённую оценку).\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getParticipationCountRespFieldDocs = mapFieldDocsToStrings(getParticipationCountRespFieldDocEntries);\n\nexport const fileInfoFieldDocEntries = {\n id: {\n description: \"ID файла в хранилище.\",\n valueSchema: \"string | null\",\n usage:\n \"В теле **create**/**update** item (`image`, `files[]`, …) достаточно только **`id`** — в БД сохраняется ссылка на файл. **`fileName`** / **`fileSize`** для puturl — query **`getImagePutUrl`** / **`getFilePutUrl`**, не обязательны в теле item.\",\n },\n url: {\n description: \"Текущий URL файла (может быть временным).\",\n valueSchema: \"string | null\",\n usage: \"Только в ответах (**getById**, **getFileInfo**, …); в write-тело не передаётся.\",\n },\n urlExpiration: {\n description: \"Срок действия `url`.\",\n valueSchema: \"date-time string | null\",\n usage: \"Только read; presigned download URL из ответа сервера.\",\n },\n eTag: { description: \"ETag файла для кеша/валидации.\", valueSchema: \"string | null\" },\n fileName: {\n description: \"Имя файла.\",\n valueSchema: \"string | null\",\n usage: \"Read и query puturl; в create/update item не обязателен (как в torrow-apps).\",\n },\n fileSize: {\n description: \"Размер файла в байтах.\",\n valueSchema: \"int64 | null\",\n usage: \"Read и query puturl; в create/update item не обязателен.\",\n },\n refreshUrl: {\n description: \"URL для обновления/рефреша ссылки.\",\n valueSchema: \"string | null\",\n usage: \"Только read; альтернатива явному **getFileInfo** / **getImageInfo** при протухшем `url`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const fileInfoFieldDocs = mapFieldDocsToStrings(fileInfoFieldDocEntries);\n\nexport const putUrlRespFieldDocEntries = {\n url: { description: \"Presigned URL для загрузки файла.\", valueSchema: \"string | null\" },\n urlExpiration: { description: \"Срок действия presigned URL.\", valueSchema: \"date-time string\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const putUrlRespFieldDocs = mapFieldDocsToStrings(putUrlRespFieldDocEntries);\n\nexport const updateFileIdRespFieldDocEntries = {\n fileInfo: { description: \"Актуальная информация о привязанном файле.\", valueSchema: \"FileInfo\" },\n meta: { description: \"Мета объекта после обновления file id.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateFileIdRespFieldDocs = mapFieldDocsToStrings(updateFileIdRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const blockReasonFieldDocEntries = {\n id: {\n description: \"Числовой идентификатор причины блокировки в справочнике.\",\n valueSchema: \"int32\",\n },\n defaultName: {\n description: \"Отображаемое имя по умолчанию (часто мультиязычное имя на стороне сервиса словарей).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок сортировки в списке причин.\",\n valueSchema: \"int32\",\n },\n isDeleted: {\n description: \"Мягкое удаление записи справочника.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonFieldDocs = mapFieldDocsToStrings(blockReasonFieldDocEntries);\n\nexport const blockReasonsSdkMethodFieldDocEntries = {\n create: {\n description:\n \"`POST /api/v1/blockreason` — создать причину; ответ: id. Только **администратор Torrow**.\",\n },\n getById: {\n description:\n \"`GET /api/v1/blockreason/{id}` — одна причина, query `lng`. Только **администратор Torrow**.\",\n },\n listAll: {\n description:\n \"`GET /api/v1/blockreason/all` — список с пагинацией и сортировкой словаря. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n delete: {\n description: \"`DELETE /api/v1/blockreason/{id}`. Только **администратор Torrow**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonsSdkMethodFieldDocs = mapFieldDocsToStrings(blockReasonsSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const apiKeyInfoFieldDocEntries = {\n keyId: {\n description: \"Идентификатор API-ключа (для `delete` и отображения в списке).\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Человекочитаемое имя ключа.\",\n valueSchema: \"string | null\",\n },\n creationTime: {\n description: \"Время создания ключа (`date-time` → `Date`).\",\n valueSchema: \"Date\",\n },\n expiration: {\n description: \"Срок действия ключа (`date-time` → `Date | null`).\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeyInfoFieldDocs = mapFieldDocsToStrings(apiKeyInfoFieldDocEntries);\n\nexport const createApiKeyRequestFieldDocEntries = {\n name: {\n description: \"Имя ключа (maxLength 100).\",\n valueSchema: \"string | null\",\n },\n lifetimeDays: {\n description: \"Срок жизни ключа в днях (1…int32); `null` — по правилам сервера.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyRequestFieldDocs = mapFieldDocsToStrings(createApiKeyRequestFieldDocEntries);\n\nexport const createApiKeyResponseFieldDocEntries = {\n apiKey: {\n description: \"Метаданные созданного ключа (`ApiKeyInfo`).\",\n valueSchema: \"ApiKeyInfo\",\n },\n key: {\n description:\n \"Секрет API-ключа. Возвращается **один раз** при `create`. Не логировать и не сохранять в открытых логах/телеметрии.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyResponseFieldDocs = mapFieldDocsToStrings(createApiKeyResponseFieldDocEntries);\n\nexport const apiKeysSdkMethodFieldDocEntries = {\n list: {\n description: \"`GET /api/v1/apikeys` — список API-ключей текущего пользователя (`ApiKeyInfo[]`).\",\n },\n create: {\n description:\n \"`POST /api/v1/apikeys` — создать ключ; body `CreateApiKeyRequest` → `CreateApiKeyResponse` (поле `key` — секрет, один раз).\",\n },\n delete: {\n description: \"`DELETE /api/v1/apikeys/{keyId}` — отозвать ключ; ответ без тела.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeysSdkMethodFieldDocs = mapFieldDocsToStrings(apiKeysSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sendCommunicationCodeReqFieldDocEntries = {\n value: {\n description: \"Телефон, email или иное значение канала, на которое отправляется код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description: \"Тип коммуникации (`CommunicationType`: Phone, Email, Telegram, Max, …).\",\n valueSchema: \"CommunicationType\",\n },\n language: {\n description: \"Язык шаблона сообщения / UI.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeReqFieldDocEntries);\n\nexport const sendCommunicationCodeRespFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии подтверждения для `verifyCommunicationCode`.\",\n valueSchema: \"string | null\",\n },\n sessionLifeTimeSeconds: {\n description: \"TTL сессии в секундах.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeRespFieldDocEntries);\n\nexport const verifyCommunicationCodeReqFieldDocEntries = {\n sessionId: {\n description: \"Сессия из ответа sendCode.\",\n valueSchema: \"string | null\",\n },\n code: {\n description: \"Код из SMS/email.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeReqFieldDocEntries);\n\nexport const verifyCommunicationCodeRespFieldDocEntries = {\n success: {\n description: \"Успех проверки кода.\",\n valueSchema: \"boolean\",\n },\n value: {\n description: \"Нормализованное подтверждённое значение (например E.164).\",\n valueSchema: \"string | null\",\n },\n channel: {\n description: \"Канал доставки после верификации (`DeliveryChannel`, включая Telegram/Max).\",\n valueSchema: \"DeliveryChannel\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeRespFieldDocEntries);\n\nexport const contactsCommunicationSdkMethodFieldDocEntries = {\n sendCommunicationCode: {\n description: \"`POST /api/v1/contacts/communication/sendcode` — отправить код на канал (`SendCommunicationCodeReq`).\",\n },\n verifyCommunicationCode: {\n description: \"`POST /api/v1/contacts/communication/verify` — проверить код (`VerifyCommunicationCodeReq`).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactsCommunicationSdkMethodFieldDocs = mapFieldDocsToStrings(\n contactsCommunicationSdkMethodFieldDocEntries,\n);\n","/**\n * Query-параметры `DELETE /api/v1/{domain}/{torrowId}` для item-фасадов\n * (contacts, notes, cases, calendars, contexts, services, resourceItems, loyalty*).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общее описание item-delete для MCP-записей методов `delete`. */\nexport const itemDeleteMethodDescription =\n \"Обязательные query **`cascade`**, **`withPinnedItems`** (см. **`ItemDeleteQuery`**); SDK возвращает число **`deleteCount`**.\";\n\nexport const itemDeleteQueryFieldDocEntries = {\n cascade: {\n description:\n \"Каскадное удаление вложенных дочерних элементов в иерархии (mind map / include). `false` — удалить только сам элемент, без дочерних; `true` — вместе с вложенными (в приложении: «удалить с вложенными элементами»).\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n withPinnedItems: {\n description:\n \"Удалять закреплённые (pinned) дочерние представления/элементы вместе с родителем. `false` — не трогать закреплённые вложения; `true` — удалить и их.\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemDeleteQueryFieldDocs = mapFieldDocsToStrings(itemDeleteQueryFieldDocEntries);\n","/**\n * MCP: единое описание методов {@link TorrowItemCoreFacade} и {@link TorrowItemFacade} (пути относительно `/api/v1/{domain}/`).\n * **Loyalty*** подмешивают только **Core** (без photo); **contacts** / **cases** / **notes** / **services** / **calendars** / **contexts** / **resourceItems** — полный **Base** (см. **`TorrowItemFacadeSdkMethods`**; у **contacts** ещё photo → **`TorrowItemFacadeContactsItemSdkMethods`**).\n *\n * **`getPhotoInfo` / `getPhotoPutUrl`** вынесены отдельно: в проде только **contacts** (`withPhotoEndpoints`).\n *\n * @see docs/sdk-development-plan.md §1.3.3 (вариант MCP «максимально DRY»).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Методы Core, общие для loyalty-доменов (без photo-endpoints). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto = {\n updatePublicity: {\n description: \"`PUT .../{torrowId}/publicity` — тело **`PublicityType`**; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateImageId: {\n description: \"`PUT .../{torrowId}/image/id` — тело JSON-string **`fileId`**.\",\n },\n updateTorrowAccountId: {\n description: \"`PUT .../{torrowId}/torrowaccount/id` — тело JSON-string id аккаунта.\",\n },\n updateMasterInfo: {\n description: \"`PUT .../{torrowId}/masterinfo` — **`UpdateMasterInfoReq`**.\",\n },\n updateIntegrations: {\n description: \"`PUT .../{torrowId}/integrations` — body: `string[]` (**integrationIds**).\",\n },\n listParticipants: {\n description:\n \"`GET .../{torrowId}/participants` — фильтры **`participantStateList`** (`Offered`/`Requested`/`Accepted`/…) / **`participantTypeList`**, пагинация; у **loyalty*** query **`lmFrom`/`lmTo`**, у **contact/case** — **`lmfrom`/`lmto`**. Флоу статусов: **`docs/agents/participation-flow.md`**.\",\n },\n generateSecurityToken: {\n description:\n \"`POST .../{torrowId}/generatesecuritytoken` — **`GenerateSecurityTokenReq`** → **`GenerateSecurityTokenResp`**. Внешняя ссылка: `participantType` **Reader** (обычная) или **Owner** (ссылка управления); получатель сохраняет через **`saveToMindMap({ securityToken })`**. Apps: `ShareWithRightsService`.\",\n },\n updateParticipationType: {\n description:\n \"`PUT .../{torrowId}/participation/{participantProfileId}/type` — body: **`ParticipantType`** (в path id профиля участника).\",\n },\n requestAccess: {\n description:\n \"`PUT .../participation/requestaccess` — body: **`profileId`**; query **`userMessage`**. State → **`Requested`**; владельцу — announcement **`RequestAccessToItem`**. Не для владельца своего item. Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeAccessRequest: {\n description:\n \"`PUT .../participation/revokerequest` — requester отменяет свой **`Requested`** → **`Revoked`**.\",\n },\n setGroup: { description: \"`PUT .../group/set` — **`SetGroupItemReq`**.\" },\n unsetGroup: { description: \"`PUT .../group/unset` — **`UnsetGroupItemReq`**.\" },\n updateTags: {\n description: \"`PUT .../{torrowId}/tags` — body: `string[]`; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n listGroups: {\n description:\n \"`GET .../{parentId}/group/list` — **группы родительского элемента, доступные для включения дочерних элементов** (torrow-apps: `getGroups(parentId)`). В apps при пустом `group/list` UI часто даёт `[parent]`. **Не** члены группы. Члены: `search.*(…, { groupIds })`. У **loyaltycards** пути нет → SDK бросает (`withGroupListEndpoint: false`).\",\n },\n updateGroups: {\n description:\n \"`PUT .../{torrowId}/updategroups` — **`UpdateItemGroupsReq[]`**; query **`parentId`**, **`tags`**, **`alias`**, **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n includeToGroups: {\n description:\n \"`PUT .../include/togroups` — **`IncludeToGroupsReq`**. После include члены группы проверяй через `search.*(…, { groupIds })`, не через `listGroups`.\",\n },\n excludeFromGroups: { description: \"`PUT .../exclude/fromgroups` — **`ExcludeFromGroupsReq`**.\" },\n includeToParent: { description: \"`PUT .../{parentId}/include/items` — **`IncludeToParentReq`**.\" },\n excludeFromParent: { description: \"`PUT .../{parentId}/exclude/items` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\" },\n includeForUser: { description: \"`PUT .../{parentId}/include/foruser` — **`IncludeForUserReq`**.\" },\n excludeFromUser: { description: \"`PUT .../{parentId}/exclude/fromuser` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\" },\n rejectOffer: {\n description:\n \"`PUT .../participation/rejectoffer` — invitee отклоняет **`Offered`** → **`Rejected`**; body: **`profileId`**; query **`userMessage`**.\",\n },\n reject: { description: \"`PUT .../participation/reject` — body: **`profileId`**.\" },\n share: {\n description:\n \"`PUT .../participation/share` — **`ShareItemReq`** → **`ParticipationResp`**. Создаёт **`Offered`**; invitee — announcement **`ShareItem`**. Принять = **`saveToMindMap`** (нет `acceptOffer`). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeOffer: {\n description:\n \"`PUT .../participation/revokeoffer` — владелец отзывает **`Offered`** → **`Revoked`**; body: `string[]` (**profileIds**).\",\n },\n grantAccess: {\n description:\n \"`PUT .../participation/grantaccess` — владелец принимает **`Requested`** → **`Accepted`**; body: `string[]` (**profileIds**).\",\n },\n declineAccess: {\n description:\n \"`PUT .../participation/declineaccess` — владелец отклоняет **`Requested`** → **`Declined`**; body: `string[]`; query **`userMessage`**.\",\n },\n updatePersonalListOrder: {\n description: \"`POST .../personallist/updateorder` — **`UpdatePersonalListOrderReq`** → **`UpdatePersonalListOrderResp`**.\",\n },\n updateAlias: {\n description: \"`PUT .../{itemId}/alias` — body: string (**alias**); query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateLastUsageTime: {\n description: \"`PUT .../{itemId}/lastusagetime` — body: ISO date-time string.\",\n },\n updateParticipationProfile: {\n description: \"`PUT .../{itemId}/participation/profile` — body: **`profileId`** (string).\",\n },\n sendLink: {\n description:\n \"`PUT .../{itemId}/sendlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**. In-app ссылка (**`SendLinkOfItem`**); **не** создаёт `Offered`.\",\n },\n getShortUrl: { description: \"`POST .../{torrowId}/shorturl` → `string` (короткая URL элемента).\" },\n updateUniqueName: { description: \"`PUT .../{itemId}/uniquename` — body: string (**uniqueName**).\" },\n getByUniqueName: {\n description:\n \"`GET .../uniquename/{uniqueName}` — у **cases** доп. query **`profileId`** (override); иначе только **`signal`**.\",\n },\n getImageInfo: { description: \"`GET .../{torrowId}/image/info` → **`FileInfo`**.\" },\n getImagePutUrl: {\n description:\n \"`GET .../{torrowId}/image/puturl` — presigned upload; параметры **`fileId`**, **`fileName?`**, **`fileSize?`** (query). SDK: **`{ url, urlExpiration }`**.\",\n },\n saveToMindMap: {\n description:\n \"`PUT .../{torrowId}/savetomindmap` — **`SaveItemToMindMapReq`** → **`Participation`**. Accept invite (`Offered`→`Accepted`), open/link save, или save с **`securityToken`** (Reader/Owner link). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n updateSolutionData: {\n description: \"`PUT .../{torrowId}/solutiondata` — **`SolutionData`**; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updatePersonalSolutionData: {\n description: \"`PUT .../{itemId}/personalsolutiondata` — **`PersonalSolutionData`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Только **contacts** (`TorrowItemFacadeOptions.withPhotoEndpoints`). */\nexport const torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries = {\n getPhotoInfo: {\n description:\n \"`GET .../{torrowId}/photo/info` — **`FileInfo`**; только при **`withPhotoEndpoints`** (сейчас **contacts**), иначе SDK бросает ошибку.\",\n },\n getPhotoPutUrl: {\n description:\n \"`GET .../{torrowId}/photo/puturl` — presigned; **`fileId`**, **`fileName?`**, **`fileSize?`**; только при **`withPhotoEndpoints`** (сейчас **contacts**). SDK: **`{ url, urlExpiration }`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Методы только **`TorrowItemFacade`** (нет у **loyalty*** на **`TorrowItemCoreFacade`**).\n * Домены: **contacts**, **cases**, **services**, **notes**, **calendars**, **contexts**, **resourceItems** — общий HTTP-слой совпадает; доменные CRUD/сценарии описываются отдельно (booking, payment, search, …).\n */\nexport const torrowItemFacadeExtensionSdkMethodFieldDocEntries = {\n updateFeedbackOptions: {\n description: \"`PUT .../{torrowId}/feedbacks/options` — **`FeedbackOptions`**.\",\n },\n getParticipantsAnonymousCount: {\n description: \"`GET .../{torrowId}/participants/anonymous` → **`GetParticipationCountResp`**.\",\n },\n getParticipantsNonAnonymousCount: {\n description:\n \"`GET .../{torrowId}/participants/nonanonymous` — query **`participantStateList`**, **`participantTypeList`**.\",\n },\n listTags: {\n description: \"`GET .../{torrowId}/tags` — фильтры **`ItemTagsListQuery`** → `string[]`.\",\n },\n listItemGroups: {\n description:\n \"`GET .../{itemId}/groups?parentId=` — **`GroupStatus[]`**: в каких группах родителя состоит child (torrow-apps: `getItemGroups(itemId, parentId)`). Каталог групп родителя для include — `listGroups(parentId)` (`…/group/list`). Члены группы — `search.*(groupIds)`.\",\n },\n updateAccounts: {\n description: \"`PUT .../{torrowId}/updateaccounts` — **`UpdateItemAccountsReq[]`** → **`IncludeExcludeResp`**.\",\n },\n shareItemLink: {\n description:\n \"**WIP / do not use in product.** `POST .../{torrowId}/participation/shareitemlink` — **`GetShareItemSessionReq`** → URL `string`. Invite-session (срок/лимит); activate: **`client.item.activateShareItemSession`**. Gateway stub (`Task.FromResult(\\\"\\\")`, HTTP 200) — пустой URL не баг SDK; apps InvitationLink (ContactItem) копирует `\\\"\\\"`. Activate stub, unused in apps UI. Не путать с **`sendLink`** / **`share`** / **`generateSecurityToken`** (продуктовая альтернатива + client URI). Не клеить URL из shortUrl/item path.\",\n },\n updateOfflinable: {\n description: \"`PUT .../{itemId}/offlinable` — body: boolean.\",\n },\n updateReminders: {\n description: \"`PUT .../{itemId}/reminders` — **`PersonalReminder[]`**.\",\n },\n updateNotificationWayList: {\n description: \"`PUT .../{itemId}/notificationwaylist` — **`NotificationWay[]`** (у **loyaltycards** тот же путь, но класс не от **Base** — см. **`LoyaltyCardsSdkMethods`**).\",\n },\n block: {\n description:\n \"`POST .../{itemId}/block` — query **`reasonId`**, **`reasonNote`**, **`language`**, … → **`TorrowItem`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n unblock: {\n description:\n \"`POST .../{itemId}/unblock` — query **`versionToCheck`**, **`isNeedAnnouncement`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный общий слой **`TorrowItemFacade`** без photo-endpoints (`GET .../participants` — **`lmfrom`/`lmto`**). */\nexport const torrowItemFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadeExtensionSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** То же + **`getPhotoInfo`/`getPhotoPutUrl`** — как у **`client.contacts`** (`withPhotoEndpoints`). */\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocEntries = {\n ...torrowItemFacadeSdkMethodFieldDocEntries,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный набор методов Core для каталога **`TorrowItemCoreFacadeSdkMethods`** (включая photo). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemCoreFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemCoreFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n);\n","/**\n * Неявные параметры, кодируемые в `tags` элементов (в основном ServiceItem).\n *\n * Источник логики: поведение в клиентских потоках `torrow-apps` (time zone, order name,\n * ограничения по времени, тексты unavailable booking, автозапуск уведомлений, discount field tag).\n */\n\nexport const SERVICE_IMPLICIT_TAG_SUFFIX = {\n orderNameLegacy: \":ordername\",\n orderName: \":OrderName\",\n timeZoneLegacy: \":timeZone\",\n timeZone: \":timezone\",\n disableCancelMyParticipation: \":DisableCancelMyParticipation\",\n disableUpdateOrderTime: \":DisableUpdateOrderTime\",\n unavailableBookingMessage: \":UnavailableBookingMessage\",\n discountPercentage: \":DiscountPercentage\",\n agreementText: \":AgreementText\",\n agreementLink: \":AgreementLink\",\n marginTime: \":MarginTime\",\n lockId: \":lockId\",\n autoStartTelegramNotificationBot: \"AutoStartTelegramNotificationBot\",\n autoStartTelegramNotificationBotTypo: \"AutoStartTelegramNotifcationBot\",\n autoStartConnectNotifications: \"AutoStartConnectNotifications\",\n hideMessengerConnectUiLegacy: \"HideTelegramNotificationBot\",\n hideMessengerConnectUi: \"HideMessengerNotifications\",\n /**\n * Резерв под серверную договоренность. Формат в `tags`: `NNN:payment_redirect_timeout_sec`.\n * Непосредственно в текущем `torrow-apps` литерал пока не используется.\n */\n paymentRedirectTimeoutSec: \":payment_redirect_timeout_sec\",\n} as const;\n\ntype PrimitiveTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: \"string\" | \"positiveInt\";\n suffixes: readonly string[];\n caseInsensitive?: boolean;\n};\n\ntype ContainsTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: \"containsFlag\";\n tokens: readonly string[];\n};\n\ntype AutoStartTagConfig = {\n field: \"autoStartNotificationDelaySeconds\";\n kind: \"autoStart\";\n suffixes: readonly string[];\n};\n\ntype AgreementTagConfig = {\n field: \"agreementItems\";\n kind: \"agreement\";\n textSuffix: string;\n linkSuffix: string;\n};\n\ntype ServiceImplicitTagConfig = PrimitiveTagConfig | ContainsTagConfig | AutoStartTagConfig | AgreementTagConfig;\n\n/**\n * Единый реестр тегов (registry-driven). Это источник правды для parse/build/isImplicit.\n */\nexport const SERVICE_IMPLICIT_TAG_REGISTRY = {\n orderName: {\n field: \"orderName\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.orderName, SERVICE_IMPLICIT_TAG_SUFFIX.orderNameLegacy],\n caseInsensitive: true,\n },\n timeZone: {\n field: \"timeZone\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.timeZone, SERVICE_IMPLICIT_TAG_SUFFIX.timeZoneLegacy],\n caseInsensitive: true,\n },\n disableCancelMyParticipationBeforeMinutes: {\n field: \"disableCancelMyParticipationBeforeMinutes\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.disableCancelMyParticipation],\n },\n disableUpdateOrderTimeBeforeMinutes: {\n field: \"disableUpdateOrderTimeBeforeMinutes\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.disableUpdateOrderTime],\n },\n unavailableBookingMessage: {\n field: \"unavailableBookingMessage\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.unavailableBookingMessage],\n },\n discountPercentageFieldName: {\n field: \"discountPercentageFieldName\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.discountPercentage],\n },\n marginTimeSec: {\n field: \"marginTimeSec\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.marginTime],\n },\n paymentRedirectTimeoutSec: {\n field: \"paymentRedirectTimeoutSec\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.paymentRedirectTimeoutSec],\n },\n hideMessengerConnectUi: {\n field: \"hideMessengerConnectUi\",\n kind: \"containsFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUi, SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUiLegacy],\n },\n hideTelegramNotificationBot: {\n field: \"hideTelegramNotificationBot\",\n kind: \"containsFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUiLegacy],\n },\n autoStartNotificationDelaySeconds: {\n field: \"autoStartNotificationDelaySeconds\",\n kind: \"autoStart\",\n suffixes: [\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications,\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBot,\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBotTypo,\n ],\n },\n agreementItems: {\n field: \"agreementItems\",\n kind: \"agreement\",\n textSuffix: SERVICE_IMPLICIT_TAG_SUFFIX.agreementText,\n linkSuffix: SERVICE_IMPLICIT_TAG_SUFFIX.agreementLink,\n },\n} as const satisfies Record<string, ServiceImplicitTagConfig>;\n\nexport type ServiceImplicitTagParams = {\n orderName?: string;\n timeZone?: string;\n disableCancelMyParticipationBeforeMinutes?: number;\n disableUpdateOrderTimeBeforeMinutes?: number;\n unavailableBookingMessage?: string;\n discountPercentageFieldName?: string;\n marginTimeSec?: number;\n autoStartNotificationDelaySeconds?: number;\n hideMessengerConnectUi?: boolean;\n hideTelegramNotificationBot?: boolean;\n agreementItems?: { index: number; text?: string; link?: string }[];\n paymentRedirectTimeoutSec?: number;\n};\n\n/** Минимальная структура поведения ресурса (сейчас: только margin between events). */\nexport type ResourceBehaviorSettings = {\n marginTimeSec?: number;\n /**\n * Идентификатор TTLock-замка в формате тега `<lockNumber>:lockId`.\n */\n lockId?: number;\n};\n\nfunction isPositiveInt(value: number | undefined): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction splitBySuffix(tag: string, suffix: string, caseInsensitive = false): string | undefined {\n if (caseInsensitive) {\n const lowerTag = tag.toLowerCase();\n const lowerSuffix = suffix.toLowerCase();\n if (!lowerTag.endsWith(lowerSuffix)) return undefined;\n return tag.slice(0, tag.length - suffix.length);\n }\n if (!tag.endsWith(suffix)) return undefined;\n return tag.slice(0, tag.length - suffix.length);\n}\n\nfunction firstPrefixBySuffix(\n tags: readonly string[],\n suffix: string,\n options?: { caseInsensitive?: boolean },\n): string | undefined {\n for (const tag of tags) {\n const prefix = splitBySuffix(tag, suffix, options?.caseInsensitive ?? false);\n if (prefix !== undefined) return prefix;\n }\n return undefined;\n}\n\nfunction toPositiveInt(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const value = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction parseAutoStartDelay(tag: string): number | undefined {\n const suffixes = SERVICE_IMPLICIT_TAG_REGISTRY.autoStartNotificationDelaySeconds.suffixes;\n for (const suffix of suffixes) {\n const match = tag.match(new RegExp(`^(\\\\d+):${suffix}$`));\n if (match?.[1]) {\n const sec = Number.parseInt(match[1], 10);\n if (Number.isFinite(sec) && sec > 0) return sec;\n }\n }\n return undefined;\n}\n\nfunction parseAgreementIndexedTag(tag: string, baseSuffix: string): { index: number; value: string } | undefined {\n const escaped = baseSuffix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const match = tag.match(new RegExp(`^(.*)${escaped}(\\\\d+)$`));\n if (!match?.[1] || !match[2]) return undefined;\n const index = Number.parseInt(match[2], 10);\n if (!Number.isFinite(index) || index <= 0) return undefined;\n return { index, value: match[1] };\n}\n\nfunction decodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https//\")) return `https://${trimmed.slice(\"https//\".length)}`;\n if (trimmed.startsWith(\"http//\")) return `http://${trimmed.slice(\"http//\".length)}`;\n return trimmed;\n}\n\nfunction encodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https://\")) return `https//${trimmed.slice(\"https://\".length)}`;\n if (trimmed.startsWith(\"http://\")) return `http//${trimmed.slice(\"http://\".length)}`;\n return trimmed;\n}\n\n/**\n * Парсинг используемых в продукте неявных \"тег-параметров\" сервиса.\n */\nexport function parseServiceImplicitTagParams(tags: readonly string[] | undefined | null): ServiceImplicitTagParams {\n const safeTags = tags ?? [];\n const result: ServiceImplicitTagParams = {};\n const mutable = result as Record<string, unknown>;\n\n for (const config of Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]) {\n if (config.kind === \"string\" || config.kind === \"positiveInt\") {\n const raw = config.suffixes\n .map((suffix) => firstPrefixBySuffix(safeTags, suffix, { caseInsensitive: config.caseInsensitive ?? false }))\n .find((x) => x !== undefined);\n if (config.kind === \"string\") {\n if (raw?.trim()) mutable[config.field] = raw.trim();\n } else {\n const value = toPositiveInt(raw);\n if (value !== undefined) mutable[config.field] = value;\n }\n }\n if (config.kind === \"containsFlag\") {\n const hasAny = safeTags.some((tag) => config.tokens.some((token) => tag.includes(token)));\n if (hasAny) mutable[config.field] = true;\n }\n }\n\n let autoStartNotificationDelaySeconds: number | undefined = result.autoStartNotificationDelaySeconds;\n if (autoStartNotificationDelaySeconds === undefined) {\n for (const tag of safeTags) {\n autoStartNotificationDelaySeconds = parseAutoStartDelay(tag);\n if (autoStartNotificationDelaySeconds !== undefined) break;\n }\n }\n if (autoStartNotificationDelaySeconds !== undefined) {\n mutable.autoStartNotificationDelaySeconds = autoStartNotificationDelaySeconds;\n }\n\n const agreementsMap = new Map<number, { index: number; text?: string; link?: string }>();\n const agreementConfig = SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems;\n for (const tag of safeTags) {\n const textTag = parseAgreementIndexedTag(tag, agreementConfig.textSuffix);\n if (textTag) {\n agreementsMap.set(textTag.index, {\n index: textTag.index,\n ...(agreementsMap.get(textTag.index) ?? {}),\n text: textTag.value.trim() || undefined,\n });\n }\n const linkTag = parseAgreementIndexedTag(tag, agreementConfig.linkSuffix);\n if (linkTag) {\n agreementsMap.set(linkTag.index, {\n index: linkTag.index,\n ...(agreementsMap.get(linkTag.index) ?? {}),\n link: decodeAgreementLink(linkTag.value),\n });\n }\n }\n const agreementItems = [...agreementsMap.values()]\n .sort((a, b) => a.index - b.index)\n .filter((x) => x.text || x.link);\n if (agreementItems.length) mutable.agreementItems = agreementItems;\n return result;\n}\n\n/**\n * Генерация service-тегов из явной структуры параметров.\n * Удобно для create/update запросов и codegen-агентов.\n */\nexport function buildServiceImplicitTags(\n params: ServiceImplicitTagParams,\n options?: {\n /**\n * Какой suffix использовать для auto-start delay.\n * По умолчанию новый: `AutoStartConnectNotifications`.\n */\n autoStartNotificationSuffix?:\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBot\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBotTypo;\n },\n): string[] {\n const tags: string[] = [];\n const singleValueConfigs = (Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]).filter(\n (x) => x.kind === \"string\" || x.kind === \"positiveInt\",\n ) as PrimitiveTagConfig[];\n for (const config of singleValueConfigs) {\n const value = params[config.field] as unknown;\n const writeSuffix = config.suffixes[0];\n if (config.kind === \"string\") {\n if (typeof value === \"string\" && value.trim()) {\n tags.push(`${value.trim()}${writeSuffix}`);\n }\n } else if (isPositiveInt(typeof value === \"number\" ? value : undefined)) {\n tags.push(`${value}${writeSuffix}`);\n }\n }\n\n for (const agreement of params.agreementItems ?? []) {\n if (!isPositiveInt(agreement.index)) continue;\n if (agreement.text?.trim()) {\n tags.push(\n `${agreement.text.trim()}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.textSuffix}${agreement.index}`,\n );\n }\n if (agreement.link?.trim()) {\n tags.push(\n `${encodeAgreementLink(agreement.link)}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.linkSuffix}${agreement.index}`,\n );\n }\n }\n if (isPositiveInt(params.autoStartNotificationDelaySeconds)) {\n tags.push(\n `${params.autoStartNotificationDelaySeconds}:${\n options?.autoStartNotificationSuffix ?? SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications\n }`,\n );\n }\n if (params.hideMessengerConnectUi) {\n tags.push(SERVICE_IMPLICIT_TAG_REGISTRY.hideMessengerConnectUi.tokens[0]);\n }\n if (params.hideTelegramNotificationBot) {\n tags.push(SERVICE_IMPLICIT_TAG_REGISTRY.hideTelegramNotificationBot.tokens[0]);\n }\n\n return tags;\n}\n\nfunction isImplicitServiceTag(tag: string): boolean {\n for (const config of Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]) {\n if (config.kind === \"string\" || config.kind === \"positiveInt\") {\n const matched = config.suffixes.some(\n (suffix) => splitBySuffix(tag, suffix, config.caseInsensitive ?? false) !== undefined,\n );\n if (matched) return true;\n }\n if (config.kind === \"containsFlag\") {\n if (config.tokens.some((token) => tag.includes(token))) return true;\n }\n if (config.kind === \"autoStart\") {\n const isAutoStart = config.suffixes.some((suffix) => tag.match(new RegExp(`^\\\\d+:${suffix}$`)) !== null);\n if (isAutoStart) return true;\n }\n if (config.kind === \"agreement\") {\n if (\n parseAgreementIndexedTag(tag, config.textSuffix) !== undefined ||\n parseAgreementIndexedTag(tag, config.linkSuffix) !== undefined\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Обновляет только implicit service tags, не трогая \"обычные\" пользовательские теги.\n * Полезно для patch/update сценариев поверх существующего массива tags.\n */\nexport function mergeServiceImplicitTags(\n baseTags: readonly string[] | undefined | null,\n params: ServiceImplicitTagParams,\n options?: Parameters<typeof buildServiceImplicitTags>[1],\n): string[] {\n const safeBase = baseTags ?? [];\n const preservedNonImplicit = safeBase.filter((tag) => !isImplicitServiceTag(tag));\n const nextImplicit = buildServiceImplicitTags(params, options);\n return [...preservedNonImplicit, ...nextImplicit];\n}\n\n/**\n * One-liner для частичного обновления implicit service params.\n * Сценарий: parse(existing) -> apply patch -> mergeServiceImplicitTags(baseTags, next).\n */\nexport function upsertServiceImplicitTagParams(\n baseTags: readonly string[] | undefined | null,\n patch: Partial<ServiceImplicitTagParams>,\n options?: Parameters<typeof buildServiceImplicitTags>[1],\n): string[] {\n const current = parseServiceImplicitTagParams(baseTags);\n const next: ServiceImplicitTagParams = {\n ...current,\n ...patch,\n };\n return mergeServiceImplicitTags(baseTags, next, options);\n}\n\n/**\n * Конвенция сервера по шагам услуги:\n * если название шага начинается с `*`, выбранный ресурс из этого шага считается \"первичным\".\n */\nexport function isPrimaryServiceStepName(stepName: string | undefined | null): boolean {\n return !!stepName && stepName.trimStart().startsWith(\"*\");\n}\n\n/**\n * Возвращает \"чистое\" название шага без префикса `*`.\n */\nexport function getServiceStepDisplayName(stepName: string | undefined | null): string {\n if (!stepName) return \"\";\n const normalized = stepName.trimStart();\n return normalized.startsWith(\"*\") ? normalized.slice(1).trimStart() : stepName;\n}\n\n/** Парсинг поведения ресурса из `resource.tags`. */\nexport function parseResourceBehaviorSettings(tags: readonly string[] | undefined | null): ResourceBehaviorSettings {\n const parsed = parseServiceImplicitTagParams(tags);\n const lockId = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.lockId));\n const result: ResourceBehaviorSettings = {};\n if (parsed.marginTimeSec !== undefined) result.marginTimeSec = parsed.marginTimeSec;\n if (lockId !== undefined) result.lockId = lockId;\n return result;\n}\n\n/** Сериализация/merge behavior параметров ресурса в `resource.tags`. */\nexport function mergeResourceBehaviorTags(\n baseTags: readonly string[] | undefined | null,\n settings: ResourceBehaviorSettings,\n): string[] {\n const safeBase = baseTags ?? [];\n const nonManaged = safeBase.filter(\n (tag) =>\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.marginTime) === undefined &&\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.lockId) === undefined,\n );\n const managed: string[] = [];\n if (isPositiveInt(settings.marginTimeSec)) {\n managed.push(`${settings.marginTimeSec}${SERVICE_IMPLICIT_TAG_SUFFIX.marginTime}`);\n }\n if (isPositiveInt(settings.lockId)) {\n managed.push(`${settings.lockId}${SERVICE_IMPLICIT_TAG_SUFFIX.lockId}`);\n }\n return [...nonManaged, ...managed];\n}\n\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { SERVICE_IMPLICIT_TAG_REGISTRY } from \"../resources/common/implicit-tag-params.js\";\n\ntype ServiceImplicitRegistryKey = keyof typeof SERVICE_IMPLICIT_TAG_REGISTRY;\n\nconst serviceImplicitTagRegistryDocByKey = {\n orderName: {\n description:\n \"Кастомное название заказа из `\\\"<value>:OrderName\\\"` (поддерживается и legacy `:ordername`, case-insensitive).\",\n examples: [\"Запись:OrderName\", \"Консультация:ordername\"],\n },\n timeZone: {\n description:\n \"Таймзона сервиса из `\\\"<ianaTimeZone>:timezone\\\"` (поддерживается и legacy `:timeZone`), перекрывает timezone пользователя.\",\n examples: [\"Asia/Almaty:timezone\", \"Europe/Moscow:timezone\", \"Asia/Yekaterinburg:timezone\"],\n },\n disableCancelMyParticipationBeforeMinutes: {\n description:\n \"Ограничение отмены участия: `\\\"<minutes>:DisableCancelMyParticipation\\\"`; если дедлайн прошел, UI блокирует cancel.\",\n examples: [\"60:DisableCancelMyParticipation\"],\n },\n disableUpdateOrderTimeBeforeMinutes: {\n description:\n \"Ограничение переноса записи: `\\\"<minutes>:DisableUpdateOrderTime\\\"`; при истечении дедлайна hide/disable update-order-time.\",\n examples: [\"30:DisableUpdateOrderTime\"],\n },\n unavailableBookingMessage: {\n description:\n \"Текст для пустых слотов из `\\\"<message>:UnavailableBookingMessage\\\"` (показывается в change-time/check-in timetable).\",\n examples: [\"Нет слотов на выбранную дату:UnavailableBookingMessage\"],\n },\n discountPercentageFieldName: {\n description:\n \"Имя поля loyalty card для процента скидки из `\\\"<fieldName>:DiscountPercentage\\\"` (используется в расчете цены ресурса).\",\n examples: [\"loyaltyDiscount:DiscountPercentage\"],\n },\n marginTimeSec: {\n description:\n \"Отступ между событиями ресурса в секундах: `\\\"<sec>:MarginTime\\\"` (resource/service logic).\",\n examples: [\"3600:MarginTime\"],\n },\n autoStartNotificationDelaySeconds: {\n description:\n \"Задержка автопромпта подключения уведомлений: `\\\"<sec>:AutoStartConnectNotifications\\\"` (или legacy Telegram-теги).\",\n examples: [\n \"1800:AutoStartConnectNotifications\",\n \"1200:AutoStartTelegramNotificationBot\",\n \"1200:AutoStartTelegramNotifcationBot\",\n ],\n },\n hideMessengerConnectUi: {\n description:\n \"Флаг скрытия UI подключения уведомлений; true, если тег содержит `HideMessengerNotifications` или legacy `HideTelegramNotificationBot`.\",\n examples: [\"HideMessengerNotifications\", \"x-HideTelegramNotificationBot-y\"],\n },\n hideTelegramNotificationBot: {\n description:\n \"Серверный флаг скрытия кнопки Telegram-бота: true, если тег содержит `HideTelegramNotificationBot`.\",\n examples: [\"HideTelegramNotificationBot\"],\n },\n agreementItems: {\n description:\n \"Пары соглашений: `<text>:AgreementTextN` + `<link>:AgreementLinkN` (N=1..k); link в тегах хранится без `:` в схеме (`https//...`).\",\n examples: [\n \"Даю согласие __на обработку персональных данных__:AgreementText1\",\n \"https//example.org/pd:AgreementLink1\",\n ],\n },\n paymentRedirectTimeoutSec: {\n description:\n \"Резервный параметр TTL payment redirect из `\\\"<sec>:payment_redirect_timeout_sec\\\"` (пример: 1800 сек = 30 мин).\",\n examples: [\"1800:payment_redirect_timeout_sec\"],\n },\n} as const satisfies Record<ServiceImplicitRegistryKey, ItemFieldDoc>;\n\nexport const serviceImplicitTagParamsFieldDocEntries = Object.fromEntries(\n (Object.keys(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitRegistryKey[]).map((registryKey) => [\n SERVICE_IMPLICIT_TAG_REGISTRY[registryKey].field,\n serviceImplicitTagRegistryDocByKey[registryKey],\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const serviceImplicitTagParamsFieldDocs = mapFieldDocsToStrings(serviceImplicitTagParamsFieldDocEntries);\n\nconst serviceImplicitTagMethodDocByName = {\n parseServiceImplicitTagParams: {\n description:\n \"Парсер неявных service tag params: `parseServiceImplicitTagParams(tags)` -> `ServiceImplicitTagParams`.\",\n examples: [\n \"const params = parseServiceImplicitTagParams(service.tags);\",\n \"if (params.paymentRedirectTimeoutSec) { /* apply payment link TTL */ }\",\n ],\n },\n buildServiceImplicitTags: {\n description:\n \"Генератор service tag params: `buildServiceImplicitTags(params)` -> `string[]` (для create/update и codegen).\",\n examples: [\n \"const tags = buildServiceImplicitTags({ paymentRedirectTimeoutSec: 1800, orderName: 'Online booking' });\",\n \"const next = buildServiceImplicitTags(params, { autoStartNotificationSuffix: 'AutoStartTelegramNotificationBot' });\",\n ],\n },\n mergeServiceImplicitTags: {\n description:\n \"Merge helper: `mergeServiceImplicitTags(baseTags, params)` сохраняет обычные теги и пересобирает только implicit-теги.\",\n examples: [\n \"const nextTags = mergeServiceImplicitTags(service.tags, { paymentRedirectTimeoutSec: 1800 });\",\n \"const nextTags = mergeServiceImplicitTags(existingTags, parsedParams);\",\n ],\n },\n upsertServiceImplicitTagParams: {\n description:\n \"Patch-helper: `upsertServiceImplicitTagParams(baseTags, patch)` — обновляет только указанные implicit-параметры.\",\n examples: [\n \"const next = upsertServiceImplicitTagParams(service.tags, { paymentRedirectTimeoutSec: 1800 });\",\n \"const next = upsertServiceImplicitTagParams(tags, { orderName: 'Updated name' });\",\n ],\n },\n isPrimaryServiceStepName: {\n description:\n \"Конвенция шага услуги: `isPrimaryServiceStepName('*Кабинет') === true`; `*` помечает 'первичный' ресурс в списках.\",\n examples: [\"isPrimaryServiceStepName('*Кабинет')\"],\n },\n getServiceStepDisplayName: {\n description:\n \"Убирает префикс `*` из имени шага для отображения: `getServiceStepDisplayName('*Кабинет') -> 'Кабинет'`.\",\n examples: [\"getServiceStepDisplayName('*Кабинет')\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceBehaviorSettingsFieldDocEntries = {\n marginTimeSec: {\n description: \"Отступ между событиями ресурса в секундах (`\\\"<sec>:MarginTime\\\"`).\",\n examples: [\"3600:MarginTime\"],\n },\n lockId: {\n description:\n \"Идентификатор TTLock-замка в `resource.tags` (`\\\"<lockNumber>:lockId\\\"`). Используется для интеграции с TTLock.\",\n examples: [\"11432744:lockId\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceBehaviorSettingsFieldDocs = mapFieldDocsToStrings(resourceBehaviorSettingsFieldDocEntries);\n\nconst resourceImplicitTagMethodDocByName = {\n parseResourceBehaviorSettings: {\n description:\n \"Парсер managed параметров ресурса: `parseResourceBehaviorSettings(tags)` -> `ResourceBehaviorSettings` (`marginTimeSec`, `lockId`).\",\n examples: [\"const settings = parseResourceBehaviorSettings(resource.tags);\"],\n },\n mergeResourceBehaviorTags: {\n description:\n \"Merge helper для managed resource tags: `mergeResourceBehaviorTags(baseTags, settings)` сохраняет пользовательские теги и пересобирает `MarginTime`/`lockId`.\",\n examples: [\n \"const tags = mergeResourceBehaviorTags(resource.tags, { marginTimeSec: 3600, lockId: 11432744 });\",\n ],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Явный индекс публичных helper-методов для MCP-каталога.\n * Если добавляем новый helper в implicit-tag-слой — добавляем имя сюда,\n * и TS проверит, что описание в `serviceImplicitTagMethodDocByName` есть.\n */\nexport const SERVICE_IMPLICIT_TAG_METHOD_NAMES = [\n \"parseServiceImplicitTagParams\",\n \"buildServiceImplicitTags\",\n \"mergeServiceImplicitTags\",\n \"upsertServiceImplicitTagParams\",\n \"isPrimaryServiceStepName\",\n \"getServiceStepDisplayName\",\n] as const;\n\nexport const serviceImplicitTagMethodsFieldDocEntries = Object.fromEntries(\n SERVICE_IMPLICIT_TAG_METHOD_NAMES.map((name) => [name, serviceImplicitTagMethodDocByName[name]]),\n) as unknown as Record<(typeof SERVICE_IMPLICIT_TAG_METHOD_NAMES)[number], ItemFieldDoc>;\n\nexport const serviceImplicitTagMethodsFieldDocs = mapFieldDocsToStrings(serviceImplicitTagMethodsFieldDocEntries);\n\nexport const RESOURCE_IMPLICIT_TAG_METHOD_NAMES = [\"parseResourceBehaviorSettings\", \"mergeResourceBehaviorTags\"] as const;\n\nexport const resourceImplicitTagMethodsFieldDocEntries = Object.fromEntries(\n RESOURCE_IMPLICIT_TAG_METHOD_NAMES.map((name) => [name, resourceImplicitTagMethodDocByName[name]]),\n) as unknown as Record<(typeof RESOURCE_IMPLICIT_TAG_METHOD_NAMES)[number], ItemFieldDoc>;\n\nexport const resourceImplicitTagMethodsFieldDocs = mapFieldDocsToStrings(resourceImplicitTagMethodsFieldDocEntries);\n\n","/**\n * MCP / агенты: методы фасадов ActionHistory / Accounting / Announcement / ExportImport / Report / Loyalty*.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { itemDeleteMethodDescription } from \"./item-delete-query-field-docs.js\";\nimport { torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto } from \"./item-social-facet-field-docs.js\";\n\nexport const accountingTransactionsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/accountingtransactions` — тело **`AccountingTransaction`**; query **`securityToken`**.\",\n },\n update: {\n description: \"`PUT /api/v1/accountingtransactions/{torrowId}` — полное обновление DTO.\",\n },\n delete: {\n description: \"`DELETE /api/v1/accountingtransactions/{torrowId}` → число **`deleteCount`**.\",\n },\n updateState: {\n description: \"`PUT .../state` — смена состояния через query **`state`** (`AccountingTransactionState`).\",\n },\n getBalance: {\n description: \"`GET .../balance` — массив **`BalanceValue`**; опционально **`balanceDate`**.\",\n },\n listTransactions: {\n description:\n \"`GET .../transactions` — список **`AccountingTransaction`** с фильтрами и пагинацией. \" +\n \"**`torrowId`** должен быть id **`LoyaltyCard`** или **`LoyaltyCardSubscription`**; \" +\n \"для **`Case`**, **`Service`**, **`Resource`** и других элементов отдельного счёта транзакций нет.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const accountingTransactionsSdkMethodFieldDocs = mapFieldDocsToStrings(\n accountingTransactionsSdkMethodFieldDocEntries,\n);\n\nexport const announcementsSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/announcements` — **`AnnouncementInfo[]`**; query **`AnnouncementsListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT` / `Language is null or empty`). \" +\n \"Без **`state`** / **`stateList`** список пустой — передавай фильтр (в приложении: **`New`**, **`Hidden`**). \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n updateState: {\n description: \"`POST /api/v1/announcements/updatestate` — массив **`UpdateAnnouncementStateReq`** → **`TorrowObject[]`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const announcementsSdkMethodFieldDocs = mapFieldDocsToStrings(announcementsSdkMethodFieldDocEntries);\n\nexport const exportImportSdkMethodFieldDocEntries = {\n exportSubgraph: {\n description: \"`POST /api/v1/export` — тело **`ExportRequest`** (`itemId`, `depth`) → **`ExportGraph`**.\",\n },\n importFromFile: {\n description: \"`POST /api/v1/import` — тело **`ImportByFileRequest`** (граф + `parentId` / флаги) → **`TorrowItem`**.\",\n },\n importByUniqueName: {\n description: \"`POST /api/v1/importbyuniquename` — **`ImportByUniqueNameRequest`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const exportImportSdkMethodFieldDocs = mapFieldDocsToStrings(exportImportSdkMethodFieldDocEntries);\n\nexport const reportsSdkMethodFieldDocEntries = {\n generate: {\n description: \"`POST /api/v1/reports` — **`GenerateReportReq`**; опционально **`profileId`** в query.\",\n },\n generateForProfile: {\n description: \"`POST /api/v1/reports/{profileId}` — то же тело, профиль в path.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const reportsSdkMethodFieldDocs = mapFieldDocsToStrings(reportsSdkMethodFieldDocEntries);\n\nexport const actionHistorySdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/actionhistory` — **`ActionHistoryInfo[]`**; query **`ActionHistoryListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT`). \" +\n \"**`itemIds`** опционален: без него / с `[]` — лента пользователя; с id — история по выбранным элементам. \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const actionHistorySdkMethodFieldDocs = mapFieldDocsToStrings(actionHistorySdkMethodFieldDocEntries);\n\nexport const loyaltySystemsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n create: {\n description: \"`POST /api/v1/loyaltysystems` — тело **`LoyaltySystemItem`**; query **`parentId`**, **`profileId`**.\",\n },\n update: { description: \"`PUT /api/v1/loyaltysystems/{torrowId}`.\" },\n delete: {\n description: \"`DELETE /api/v1/loyaltysystems/{torrowId}` — как у элементов: \" + itemDeleteMethodDescription,\n },\n getById: { description: \"`GET /api/v1/loyaltysystems/{torrowId}`.\" },\n listPersonal: {\n description:\n \"`GET .../personallist` — query с **`lmFrom`** / **`lmTo`** (camelCase в OpenAPI), не `lmfrom`.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createLoyaltyCard: {\n description:\n \"`POST .../{loyaltySystemId}/loyaltycard` — тело **`CreateLoyaltyCardReq`** (`profileId` обязателен; опционально **`basisItemId`** — элемент-основание карты/абонемента, напр. заказ). Поля: каталог MCP **`CreateLoyaltyCardReq`**.\",\n },\n searchLoyaltyCards: {\n description:\n \"`POST .../{torrowId}/loyaltycards` — поиск карт в программе; тело **`SearchLoyaltyCardsReq`** (`text`, `filter`, `sort`, `take`/`skip`). В apps: `SearchLoyaltyCardsTask`.\",\n },\n postStatistics: {\n description:\n \"`POST /api/v1/loyaltysystems/statistics` — тело **`GetLoyaltySystemsStatisticsReq`**; ответ SDK: **`LoyaltySystemsStatisticsResp[]`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltySystemsSdkMethodFieldDocEntries);\n\nexport const loyaltyCardsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n update: { description: \"`PUT /api/v1/loyaltycards/{torrowId}` — **`LoyaltyCardItem`**.\" },\n delete: { description: \"`DELETE ...` — \" + itemDeleteMethodDescription },\n getById: {\n description: \"`GET ...` — опционально **`includeBalance`** (по умолчанию в API true).\",\n },\n listPersonal: {\n description: \"`GET .../personallist` — как у систем, плюс **`includeBalance`** в query.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createSubscription: {\n description:\n \"`POST /api/v1/loyaltycards/{loyaltyCardId}/subscription` — **`CreateLoyaltyCardSubscriptionReq`** → **`LoyaltyCardSubscription`**; у **`initialTransaction.basisItemId`** — то же основание (заказ и т.п.), см. MCP **`InitialTransaction`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n getBalance: { description: \"`GET .../{torrowId}/balance` — query: `balanceDate`, `securityToken`.\" },\n listTransactions: { description: \"`GET .../{torrowId}/transactions` — query как у accounting list.\" },\n getSubscriptionBalance: { description: \"`GET .../subscriptions/{subscriptionId}/balance`.\" },\n getSubscriptionTransactions: { description: \"`GET .../subscriptions/{subscriptionId}/transactions`.\" },\n getTimetable: {\n description:\n \"`PUT /api/v1/loyaltycards/{torrowId}/timetable` — тело **`TimetableFilter`**, query **`TimetableQueryOptions`**; ответ **`TimetableCase[]`**. В apps: `LoyaltyCardClient.getTimetable`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/loyaltycards/timetable/statistics` — **`GetTimetableStatisticsRequest`**; SDK: **`TimetableStatisticsResp[]`**.\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — у **loyaltycards** в OpenAPI есть путь; у **loyaltysystems** нет — метод только на **`LoyaltyCards`**.\",\n },\n getImagePutUrl: { description: \"Presigned загрузка изображения карты (`GET .../image/puturl`).\" },\n getImageInfo: { description: \"Метаданные изображения карты (`GET .../image/info`).\" },\n getByUniqueName: { description: \"`GET .../uniquename/{uniqueName}` — без доп. query (в отличие от **cases**).\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltyCardsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltyCardsSdkMethodFieldDocEntries);\n\nexport const userSettingsSdkMethodFieldDocEntries = {\n get: {\n description: \"`GET /api/v1/user/settings` — прочитать `UserSettingsInfo` текущего пользователя.\",\n },\n update: {\n description: \"`PUT /api/v1/user/settings/update` — сохранить `UserSettingsInfo` и получить `TorrowObject`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSettingsSdkMethodFieldDocs = mapFieldDocsToStrings(userSettingsSdkMethodFieldDocEntries);\n\nexport const userSdkMethodFieldDocEntries = {\n getLoyaltyCard: { description: \"`GET /api/v1/user/loyaltycard` — карта лояльности текущего пользователя.\" },\n listAccounts: { description: \"`GET /api/v1/user/accounts` — список аккаунтов пользователя.\" },\n initAddAccount: { description: \"`POST /api/v1/user/accounts/add/init` — старт подтверждения добавления аккаунта.\" },\n completeAddAccount: { description: \"`POST /api/v1/user/accounts/add/complete` — завершение добавления аккаунта по коду.\" },\n deleteAccount: {\n description: \"`DELETE /api/v1/user/accounts/delete` — удаление аккаунта; SDK возвращает **`deletedCount`** (`number`).\",\n },\n listDevices: { description: \"`GET /api/v1/user/devices` — список устройств (`DeviceInfo[]`).\" },\n deleteDevice: { description: \"`DELETE /api/v1/user/devices/{deviceId}` — удалить устройство; SDK: **`deleteCount`** (`number`).\" },\n getDeviceSettings: {\n description:\n \"`GET /api/v1/user/devices/{deviceId}/settings` — читать настройки (SDK: wire string → JSON, битое → `null`).\",\n },\n updateDeviceSettings: {\n description:\n \"`PUT /api/v1/user/devices/{deviceId}/settings` — сохранить настройки (SDK: JSON → wire string в query).\",\n },\n getDefaultProfile: { description: \"`GET /api/v1/user/defaultprofile` — дефолтный профиль пользователя.\" },\n setDefaultProfileByContactId: {\n description: \"`PUT /api/v1/user/defaultprofile` — выбрать дефолтный профиль по contactId; SDK: **`ContactItem`**.\",\n },\n createDefaultProfile: {\n description:\n \"`POST /api/v1/user/defaultprofile` — создать и назначить дефолтный профиль; тело: **`UserProfileItemForAdd`**; ответ: **`ContactItem`**. Перед POST фасад добивает `discriminator` / `publicityType` / non-empty `name` и contact write normalizations including `visitCard` — как у `profiles.add`.\",\n },\n listDeliveryWays: { description: \"`GET /api/v1/user/deliveryways` — пользовательские способы доставки.\" },\n listDefaultNotificationWays: { description: \"`GET /api/v1/user/defaultnotificationways` — дефолтные notification rules.\" },\n updateDefaultNotificationWays: { description: \"`PUT /api/v1/user/defaultnotificationways` — обновить notification rules.\" },\n updatePlace: { description: \"`PUT /api/v1/user/place` — обновить place для профиля/пользователя.\" },\n register: { description: \"`POST /api/v1/user/register` — регистрация пользователя в аккаунте.\" },\n getTimetable: { description: \"`PUT /api/v1/user/timetable` — расписание текущего пользователя.\" },\n listCalendars: { description: \"`GET /api/v1/user/calendars` — подключенные календари.\" },\n updateCalendars: { description: \"`PUT /api/v1/user/calendars/update` — сохранить календари пользователя.\" },\n initDelete: { description: \"`DELETE /api/v1/user/delete/init` — старт удаления пользователя (session).\" },\n completeDelete: { description: \"`DELETE /api/v1/user/delete/complete` — завершить удаление по коду.\" },\n count: {\n description:\n \"`GET /api/v1/user/count` — число пользователей. Публичный endpoint: доступен без Bearer (и с сессией).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSdkMethodFieldDocs = mapFieldDocsToStrings(userSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userSettingsInfoFieldDocEntries = {\n settings: {\n description:\n \"JSON пользовательских настроек в SDK (wire OpenAPI — `string | null`). При чтении: `JSON.parse`, пустое/битое → `null`; при записи: `JSON.stringify`.\",\n valueSchema: \"JsonValue | null\",\n usage:\n \"Структуру внутри `settings` приложение задаёт само и версионирует; SDK парсит/сериализует JSON без схемы объекта.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userSettingsInfoFieldDocs = mapFieldDocsToStrings(userSettingsInfoFieldDocEntries);\n\nexport const solutionDataFieldDocEntries = {\n quickFilterTags: {\n description: \"Теги быстрых фильтров отображаемых при поиске элементов, которые вложенны в данную группу карточки.\",\n valueSchema: \"string[] | null\",\n usage:\n \"В продукте обновляется через setQuickFilters и синхронизируется с `tags`: при удалении тегов из элемента лишние quick-filters удаляются из `solutionData.quickFilterTags`.\",\n },\n metrics: {\n description: \"Переопределение счетчиков аналитики для конкретного элемента.\",\n valueSchema: \"Metrics\",\n usage:\n \"Форма Analytics Tools пишет в `solutionData.metrics`; при page open/event отправляются hit/event в глобальные счетчики и дополнительно в элементные счетчики из `metrics`.\",\n },\n surveyId: {\n description: \"ID привязанного опроса/анкеты.\",\n valueSchema: \"string | null\",\n },\n viewBlockSettings: {\n description: \"Конфигурация блоков/секций карточки дочерних элементов.\",\n valueSchema: \"ViewBlockSettings\",\n usage:\n \"Форма item appearance сохраняет `viewBlockSettings.blockSettings[]`; порядок секций берется из `order`, а `filter.tags` используется для отдельных выборок child-views с фильтрацией по тегам.\",\n },\n layoutType: {\n description:\n \"Тип layout карточки (int-код UI раскладки/обложки). Известные коды и смысл — каталог MCP **`LayoutTypeValues`** / константы `LayoutTypeValues` в `@torrow/sdk-client` (torrow-apps `LayoutType`).\",\n valueSchema: \"LayoutTypeValues | int32 | null\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"],\n usage:\n \"Пишется формой item appearance (`updateSolutionData`). В UI выбора обложки: NonImage / SideImage / SmallImagePanel / MediumImagePanel / BigImagePanel. На мобильном `BigImagePanel` + image включает image-view с opacity toolbar. Поле не enum OpenAPI — допустим любой int; агенту для выбора значения смотреть `LayoutTypeValues.*`.\",\n },\n homeItemIds: {\n description: \"Закрепленные home-элементы (обычно один выбранный id).\",\n valueSchema: \"string[] | null\",\n usage:\n \"Выбираются в item appearance через picker родительского элемента; сохраняются в solutionData и используются как persisted-настройка навигации/точки входа.\",\n },\n vk: {\n description: \"Параметры интеграции/виджета VK в решении.\",\n valueSchema: \"Vk\",\n },\n zoom: {\n description: \"Состояние масштаба/viewport для mind map и визуализаций.\",\n valueSchema: \"Zoom\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const solutionDataFieldDocs = mapFieldDocsToStrings(solutionDataFieldDocEntries);\n\n/**\n * Известные int-коды `SolutionData.layoutType` для MCP/ИИ (torrow-apps `LayoutType`, UI «Обложка элемента»).\n * Wire-значение — число в JSON; ключи совпадают с `LayoutTypeValues` в `@torrow/sdk-client`.\n */\nexport const layoutTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник известных кодов обложки карточки (`SolutionData.layoutType`). Не OpenAPI-enum: поле остаётся `number | null`, список ниже — продуктовый контракт UI.\",\n valueSchema: \"LayoutTypeValues\",\n usage:\n \"Константы SDK: `LayoutTypeValues.<Name>` → int в теле `updateSolutionData`. Appearance form предлагает NonImage, SideImage, SmallImagePanel, MediumImagePanel, BigImagePanel. Дефолт контакта/заметки — SideImage; case/service/resource — MediumImagePanel (`TorrowItemHelper.getDefaultLayoutType`).\",\n },\n Unknown: {\n description: \"`0` — служебное/не задано; клиент обычно подставляет default layout по типу item, а не показывает Unknown в селекторе обложки.\",\n examples: [\"0\"],\n valueSchema: \"LayoutTypeValues\",\n },\n SideImage: {\n description:\n \"`1` — «Изображение» (side image): компактная картинка сбоку от заголовка/карточки. Дефолт для Contact/Note/Context и прочих не-case/service/resource.\",\n examples: [\"1\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Виджет `ttSideImage`; показывается при наличии `item.image`.\",\n },\n SmallImagePanel: {\n description: \"`2` — «Маленький баннер»: небольшой image-panel в шапке карточки.\",\n examples: [\"2\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Слот `ttSmallImageMobilePanelSlot`; видим при `layoutType === SmallImagePanel` и наличии image.\",\n },\n MediumImagePanel: {\n description:\n \"`3` — «Средний баннер»: средний image-panel. Дефолт для Case/Service/Resource (и их view) в torrow-apps.\",\n examples: [\"3\"],\n valueSchema: \"LayoutTypeValues\",\n },\n BigImagePanel: {\n description:\n \"`4` — «Большой баннер»: крупная обложка; на мобильном с image включает fullscreen-like image view и toolbar с меняющейся opacity при скролле.\",\n examples: [\"4\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Имя может «прибиваться» поверх большого баннера (`isVisibleNailedName`).\",\n },\n SmallSlider: {\n description:\n \"`5` — layout со слайдером изображений (small). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"5\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.SmallSlider`) — это другое поле.\",\n },\n BigSlider: {\n description:\n \"`6` — layout со слайдером изображений (big). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"6\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.*Slider`).\",\n },\n NonImage: {\n description: \"`7` — «Нет изображения»: шапка без обложки/баннера (`ttNonImagePanel`), даже если у item есть `image`.\",\n examples: [\"7\"],\n valueSchema: \"LayoutTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const layoutTypeValuesFieldDocs = mapFieldDocsToStrings(layoutTypeValuesFieldDocEntries);\n\nexport const blockInfoFieldDocEntries = {\n reasonId: {\n description: \"Код причины блокировки.\",\n valueSchema: \"int32\",\n },\n blockDate: {\n description: \"Дата и время блокировки.\",\n valueSchema: \"date-time string | null\",\n },\n reasonNote: {\n description: \"Свободный комментарий к причине блокировки.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockInfoFieldDocs = mapFieldDocsToStrings(blockInfoFieldDocEntries);\n\nexport const usageConditionFieldDocEntries = {\n usageConditionType: {\n description: \"Тип условия (`None`, `Exclusion`, `Additional`, ...).\",\n valueSchema: \"UsageConditionType\",\n },\n conditionIdList: {\n description: \"Ссылки на условия/правила, участвующие в ограничении использования.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionFieldDocs = mapFieldDocsToStrings(usageConditionFieldDocEntries);\n\nexport const usageTypeFieldDocEntries = {\n value: {\n description: \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n valueSchema: \"UsageType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = {\n value: {\n description: \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n valueSchema: \"UsageConditionType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const viewBlockSettingsFieldDocEntries = {\n blockSettings: {\n description: \"Список настроек секций карточки (по типам дочерних элементов).\",\n valueSchema: \"BlockSettings[] | null\",\n usage:\n \"При рендере карточки секции сортируются по `order`; если каких-то дефолтных типов нет, UI добавляет fallback-секции (contact/note/case/service/calendar/resource).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewBlockSettingsFieldDocs = mapFieldDocsToStrings(viewBlockSettingsFieldDocEntries);\n\nexport const blockSettingsFieldDocEntries = {\n objectType: {\n description: \"Тип дочернего элемента для секции (числовой objectType из API).\",\n valueSchema: \"TorrowObjectType\",\n usage:\n \"Сопоставляется с enum-типом в клиенте (`getTorrowObjectTypeByNumber`) и используется для загрузки соответствующего view (contacts/notes/services/cases/calendars/resources).\",\n },\n name: {\n description: \"Название блока (label в UI).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок блока в раскладке.\",\n valueSchema: \"int32 | null\",\n },\n filter: {\n description: \"Дополнительный фильтр секции.\",\n valueSchema: \"Filter\",\n usage:\n \"Для секции поддерживается `filter.tags`: при наличии запускается дополнительный запрос child-view c `listOptions.tags`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockSettingsFieldDocs = mapFieldDocsToStrings(blockSettingsFieldDocEntries);\n\nexport const metricsFieldDocEntries = {\n yandexMetrics: {\n description: \"ID счетчика Яндекс.Метрики для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"При наличии инициализируется отдельный счетчик и получает page hit / reachGoal в дополнение к глобальному счетчику приложения.\",\n },\n googleAnalytics: {\n description: \"GA measurement id для элемента.\",\n valueSchema: \"string | null\",\n usage: \"При наличии отправляются page view / events в GA именно этого элемента.\",\n },\n facebookPixel: {\n description: \"Facebook Pixel id для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"Поле есть в API/SDK и в форме редактирования; в продукте может быть скрыто feature/policy флагами, но сохраняется в `solutionData.metrics`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const metricsFieldDocs = mapFieldDocsToStrings(metricsFieldDocEntries);\n\nexport const filterFieldDocEntries = {\n tags: {\n description: \"Теги для фильтрации дочерних элементов внутри секции.\",\n valueSchema: \"string[] | null\",\n usage:\n \"Заполняется в форме секции (`quickFilterTags`) и маппится в `BlockSettings.filter.tags`; влияет на состав элементов в конкретном блоке карточки.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const filterFieldDocs = mapFieldDocsToStrings(filterFieldDocEntries);\n\nexport const personalSolutionDataFieldDocEntries = {\n favoriteOrder: {\n description: \"Персональный порядок/приоритет элемента для текущего профиля.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const personalSolutionDataFieldDocs = mapFieldDocsToStrings(personalSolutionDataFieldDocEntries);\n\nexport const notificationPropertiesFieldDocEntries = {\n deliveryStrategy: {\n description: \"Стратегия отправки уведомлений (`Always`, `Schedule`, ... по enum API).\",\n valueSchema: \"DeliveryStrategy\",\n },\n deliveryChannelMessageList: {\n description: \"Шаблоны сообщений по каналам доставки.\",\n valueSchema: \"DeliveryChannelMessage[] | null\",\n },\n beginAcceptableTime: {\n description: \"Начало допустимого окна отправки (минуты/код времени API).\",\n valueSchema: \"int32 | null\",\n },\n endAcceptableTime: {\n description: \"Конец допустимого окна отправки.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const notificationPropertiesFieldDocs = mapFieldDocsToStrings(notificationPropertiesFieldDocEntries);\n\nexport const userDeliveryWayFieldDocEntries = {\n deliveryChannel: {\n description: \"Канал доставки (`Sms`, `Email`, `Push`, `Telegram`, `Max` и т.п.).\",\n valueSchema: \"DeliveryChannel\",\n },\n searchValue: {\n description: \"Поисковое/идентификационное значение получателя (телефон, email).\",\n valueSchema: \"string | null\",\n },\n deliveryParameters: {\n description: \"Параметры канала в сериализованной форме.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userDeliveryWayFieldDocs = mapFieldDocsToStrings(userDeliveryWayFieldDocEntries);\n\nexport const deviceSettingsInfoFieldDocEntries = {\n deviceId: {\n description: \"ID устройства пользователя.\",\n valueSchema: \"string | null\",\n },\n settings: {\n description:\n \"Настройки устройства как JSON. Wire OpenAPI — `string | null` (query/тело); SDK: parse при чтении (`null` если не JSON), stringify при записи.\",\n valueSchema: \"JsonValue | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const deviceSettingsInfoFieldDocs = mapFieldDocsToStrings(deviceSettingsInfoFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nconst ENUM_VALUES = {\n AccountType: [\"Undefined\", \"Phone\", \"Email\", \"Telegram\"],\n AdvisedItemType: [\"UnknownAdvisedItemType\", \"NearLocation\", \"Recommendation\"],\n AccountingTransactionState: [\"UnknownState\", \"Intended\", \"Preparing\", \"Cancelled\", \"Reserved\", \"Commited\"],\n AccountingTransactionType: [\"UnknownType\", \"Balance\", \"Operation\"],\n ActionHistoryState: [\"Undefined\", \"Executing\", \"Success\", \"Error\", \"Canceled\"],\n ActionHistoryType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"RequestAccessToItem\",\n \"RevokeRequestAccessToItem\",\n \"AcceptOfferToItem\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"CancelCaseParticipation\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"CaseActionReminder\",\n ],\n AnnouncementCategory: [\n \"UnknownAnnouncementCategory\",\n \"Action\",\n \"Alert\",\n \"Inform\",\n \"Success\",\n \"Deleted\",\n \"Analytics\",\n \"Reminder\",\n ],\n AnnouncementPriority: [\"UnknownAnnouncementPriority\", \"Low\", \"Normal\", \"High\"],\n AnnouncementState: [\"Undefined\", \"New\", \"Read\", \"Hidden\"],\n AnnouncementType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"InviteToParticipate\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"BlockItem\",\n \"UnblockItem\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"ConfirmMyCaseParticipation\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"CreateServiceSession\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"LoyaltyCardExpired\",\n \"SubscriptionExpired\",\n \"LoyaltyCardExpiresSoon\",\n \"SubscriptionExpiresSoon\",\n \"AccountBalanceReachedNotificationLevel\",\n \"AccountBalanceReachedMinimumLevel\",\n ],\n AnyoneAccess: [\"UnknownAnyoneAccess\", \"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n ArchiveState: [\"None\", \"Marked\", \"Archived\"],\n AvailabilityTime: [\"UnknownSystemAvailabilityTime\", \"Free\", \"Busy\"],\n AvailableResources: [\"Unknown\", \"Free\", \"Booked\", \"Busy\"],\n CaseParticipantState: [\"UnknownCaseParticipantState\", \"Booking\", \"Registered\", \"Canceled\", \"Approving\"],\n CaseParticipantType: [\"UnknownCaseParticipantType\", \"Consumer\", \"Executor\", \"Escort\"],\n CaseState: [\n \"UnknownCaseState\",\n \"Verifying\",\n \"Waiting\",\n \"Processing\",\n \"Preparing\",\n \"Completed\",\n \"Closed\",\n \"Rejected\",\n \"Canceled\",\n \"TimeControlled\",\n \"TaskNotCompleted\",\n \"TaskCompleted\",\n ],\n CaseType: [\"UnknownTimeType\", \"Time\", \"RepeatedTime\", \"Today\", \"Week\", \"Later\", \"Date\", \"State\"],\n CommunicationType: [\n \"UnknownCommunicationType\",\n \"Phone\",\n \"Sms\",\n \"Email\",\n \"WebSite\",\n \"Telegram\",\n \"WhatsApp\",\n \"Viber\",\n \"Facebook\",\n \"Instagram\",\n \"Vkontakte\",\n \"Odnoklassniki\",\n \"Skype\",\n \"Youtube\",\n \"Twitter\",\n \"LinkedIn\",\n \"Max\",\n \"Other\",\n ],\n TokenStatus: [\"TokenReady\", \"Pending\", \"AwaitingSmsCode\", \"Failed\"],\n VerificationMethod: [\"UnknownMethod\", \"Sms\", \"TelegramGateway\", \"FlashCall\", \"MtsMobileId\"],\n DeleteState: [\"None\", \"Marked\", \"Deleted\"],\n DeliveryChannel: [\n \"UnknownDeliveryChannel\",\n \"Push\",\n \"Email\",\n \"Sms\",\n \"InApp\",\n \"Phone\",\n \"Announcement\",\n \"Telegram\",\n \"Max\",\n ],\n DeliveryStrategy: [\"UnknownDeliveryStrategy\", \"All\", \"FirstDelivered\"],\n Gender: [\"UnknownGender\", \"Male\", \"Female\", \"OtherGender\"],\n ImagePreviewSize: [\"Undefined\", \"Hidden\", \"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\"],\n ItemSortCondition: [\n \"CreateDateAsc\",\n \"CreateDateDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"CreateDateAscLastModifiedAsc\",\n \"CreateDateDescLastModifiedAsc\",\n \"CreateDateAscLastModifiedDesc\",\n \"CreateDateDescLastModifiedDesc\",\n \"LastModifiedAscCreateDateAsc\",\n \"LastModifiedAscCreateDateDesc\",\n \"LastModifiedDescCreateDateAsc\",\n \"LastModifiedDescCreateDateDesc\",\n ],\n ItemViewSortCondition: [\n \"OrderAsc\",\n \"OrderDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"OrderAscLastModifiedAsc\",\n \"OrderDescLastModifiedAsc\",\n \"OrderAscLastModifiedDesc\",\n \"OrderDescLastModifiedDesc\",\n \"LastModifiedAscOrderAsc\",\n \"LastModifiedAscOrderDesc\",\n \"LastModifiedDescOrderAsc\",\n \"LastModifiedDescOrderDesc\",\n ],\n LinkType: [\"Unknown\", \"User\", \"Pinned\", \"Group\"],\n NoteType: [\"Unknown\", \"Text\", \"Html\", \"Markdown\", \"Hlink\", \"File\", \"Photo\", \"Voice\", \"Geolocation\", \"Qr\", \"ServiceSpecification\"],\n ObjectSortCondition: [\n \"CreateDateAsc\",\n \"CreateDateDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"CreateDateAscLastModifiedAsc\",\n \"CreateDateDescLastModifiedAsc\",\n \"CreateDateAscLastModifiedDesc\",\n \"CreateDateDescLastModifiedDesc\",\n \"LastModifiedAscCreateDateAsc\",\n \"LastModifiedAscCreateDateDesc\",\n \"LastModifiedDescCreateDateAsc\",\n \"LastModifiedDescCreateDateDesc\",\n ],\n OperationType: [\n \"UnknownOperation\",\n \"Verification\",\n \"ConfirmCommunication\",\n \"AcceptInvite\",\n \"SendPersonalReminder\",\n \"DeleteUser\",\n \"AddAccount\",\n \"DeleteAccount\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"ReadItem\",\n \"SearchItem\",\n \"ReadChildItems\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"ReadParticipants\",\n \"CanUseAsProfile\",\n \"CopyLink\",\n \"SocialSharing\",\n \"InviteToParticipate\",\n \"ReadCaseParticipants\",\n \"UpdateUniqueName\",\n \"ReadItemOwners\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SetItemTags\",\n \"GetActionHistory\",\n \"UpdateFeedbackOptions\",\n \"SendAnnouncementsToParticipants\",\n \"SetItemMetrics\",\n \"GetFeedbackMessage\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"FullViewOfActionHistory\",\n \"GenerateSecurityToken\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"FullReadCaseParticipants\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"Invite\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"RejectItem\",\n \"BlockItem\",\n \"UnblockItem\",\n \"ReaderTestFunction\",\n \"EditorTestFunction\",\n \"OwnerTestFunction\",\n \"PotentialReaderTestFunction\",\n \"AdministratorTestFunction\",\n \"PublicReaderTestFunction\",\n \"ManagerTestFunction\",\n \"DeletedTestFunction\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CreateSingleCaseForGroupCase\",\n \"GenerateCaseReport\",\n \"ConfirmOtherCaseParticipationReminderNotif\",\n \"SendClaimAboutOtherCaseParticipationNotif\",\n \"GetTimetable\",\n \"GetTimetableView\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ConfirmCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"GetTimetableStatistics\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"GetCalendarCase\",\n \"GetCalendarTask\",\n \"IncludeSpecifications\",\n \"ExcludeSpecifications\",\n \"CreateServiceSession\",\n \"GetCheckInSchedule\",\n \"CreateOrder\",\n \"CreateSpecification\",\n \"ServiceDashboard\",\n \"GenerateServiceReport\",\n \"GenerateServicesResourcesReport\",\n \"GenerateResourcesRentReport\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"GetReCheckInSchedule\",\n \"ChangeOrderService\",\n \"GetServiceWorkloadInfo\",\n \"GenerateResourceReport\",\n \"UpdateContactProperties\",\n \"PickOrder\",\n \"ReturnOrder\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"GetLoyaltySystemCards\",\n \"GetLoyaltySystemsStatistics\",\n \"ConsumerTestFunction\",\n \"ExecutorTestFunction\",\n \"PotentialConsumerTestFunction\",\n \"CaseActionReminder\",\n ],\n ParticipantState: [\"UnknownParticipantState\", \"Requested\", \"Offered\", \"Revoked\", \"Accepted\", \"Rejected\", \"Declined\"],\n ParticipantType: [\"UnknownParticipantType\", \"Owner\", \"Editor\", \"Reader\", \"Publisher\", \"Manager\", \"PublicReader\"],\n ParticipationFieldRequirementType: [\n \"UnknownParticipationFieldRequirement\",\n \"NoneRequirement\",\n \"OptionalField\",\n \"RequiredField\",\n ],\n ParticipationFieldType: [\n \"UnknownParticipationField\",\n \"FullName\",\n \"LastName\",\n \"FirstName\",\n \"MiddleName\",\n \"Company\",\n \"Position\",\n \"MainPhone\",\n \"VerifiedMainPhone\",\n \"AdditionalPhone\",\n \"MainEmail\",\n \"VerifiedMainEmail\",\n \"AdditionalEmail\",\n \"Address\",\n \"AddressLocation\",\n \"PaymentAccount\",\n \"CustomString\",\n \"CustomBoolean\",\n \"CustomInt32\",\n \"CustomDouble\",\n \"CustomMoney\",\n \"CustomDate\",\n \"CustomTime\",\n \"CustomDateTime\",\n ],\n PaymentProviderType: [\n \"UnknownPaymentProviderType\",\n \"Cash\",\n \"CustomLink\",\n \"YooMoney\",\n \"QiwiP2P\",\n \"QiwiB2B\",\n \"YooKassa\",\n \"Sberbank\",\n \"Uralsib\",\n \"Alfabank\",\n \"RoboKassa\",\n \"PayKeeper\",\n \"GateLine\",\n \"Tinkoff\",\n \"Prodamus\",\n \"MockPaymentProvider\",\n ],\n ProfileType: [\"UnknownProfile\", \"None\", \"MyProfile\", \"AnyProfile\", \"CopyProfile\"],\n ProfileUserAvailability: [\"Unknown\", \"Free\", \"Busy\", \"Hidden\", \"ProfileAuto\", \"UserAuto\"],\n ReminderLocationDirection: [\"In\", \"Out\"],\n ReportDeliveryType: [\"UnknownReportDeliveryType\", \"Link\", \"Email\"],\n ShowCaseInTimetableType: [\"All\", \"ExcludeUser\"],\n TimetableDetailsVisibility: [\"Time\", \"View\"],\n TicketState: [\"UnknownTicketState\", \"Canceled\", \"Waiting\", \"Paid\", \"Used\", \"Error\"],\n TicketPaymentConfirmationSource: [\n \"UnknownTicketPaymentConfirmationSource\",\n \"PaymentLink\",\n \"Manager\",\n ],\n TorrowObjectType: [\n \"Unknown\",\n \"Account\",\n \"User\",\n \"Participant\",\n \"PersonalLink\",\n \"Event\",\n \"Subscription\",\n \"Announcement\",\n \"Review\",\n \"Reminder\",\n \"File\",\n \"ItemLink\",\n \"ActionHistory\",\n \"Device\",\n \"ShortUrl\",\n \"UserDeliveryWay\",\n \"UserLink\",\n \"FileHash\",\n \"FeedbackMessage\",\n \"FeedbackScore\",\n \"Numerator\",\n \"Payment\",\n \"IntegrationConfig\",\n \"ExternalAuth\",\n \"AccountingTransaction\",\n \"Context\",\n \"Contact\",\n \"Note\",\n \"Case\",\n \"Service\",\n \"CaseParticipant\",\n \"Goal\",\n \"Resource\",\n \"Calendar\",\n \"OrderPart\",\n \"Survey\",\n \"SurveyResponse\",\n \"AdvisedItem\",\n \"LoyaltySystem\",\n \"LoyaltyCard\",\n \"ReferralProgram\",\n \"LoyaltyCardSubscription\",\n \"DictHobby\",\n ],\n UsageConditionType: [\"UnknownUsageConditionType\", \"None\", \"Exclusion\", \"Additional\"],\n UsageType: [\"UnknownUsageType\", \"Specification\", \"Rent\", \"Sale\", \"Payment\", \"Ticket\"],\n SessionDurationType: [\n \"UnknownSessionDurationType\",\n \"SessionDurationNone\",\n \"Custom\",\n \"Constant\",\n \"Sum\",\n ],\n TimeSelectionType: [\"UnknownTimeSelectionType\", \"TimeSelectionNone\", \"Consumer\", \"Executor\"],\n StateManagementType: [\"UnknownStateManagementType\", \"Auto\", \"Manual\"],\n SessionPrecisionType: [\"UnknownSessionPrecisionType\", \"SessionPrecisionNone\", \"DateTime\", \"Date\"],\n UserAccessLevel: [\"UnknownUserAccessLevel\", \"Authenticated\", \"Unauthenticated\"],\n LoyaltyCardIssueType: [\"UnknownLoyaltyCardIssueType\", \"Manual\", \"AutoActive\", \"AutoIssued\"],\n LoyaltyCardUpdateKeyInformation: [\n \"UnknownLoyaltyCardUpdateKeyInformation\",\n \"NonKeyDisallowed\",\n \"NonKeyAllowed\",\n ],\n LoyaltyCardUpdateNonKeyInformation: [\n \"UnknownLoyaltyCardUpdateNonKeyInformation\",\n \"KeyDisallowed\",\n \"KeyAllowed\",\n ],\n} as const;\n\ntype EnumName = keyof typeof ENUM_VALUES;\n\nconst SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS: Partial<Record<EnumName, Record<string, string>>> = {\n AdvisedItemType: {\n UnknownAdvisedItemType: \"Служебное/неопределённое значение режима подборки adviseditems.\",\n NearLocation:\n \"Элементы рядом с точкой: обязательны query `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`**.\",\n Recommendation: \"Персональные рекомендации пользователя (без обязательной геопозиции).\",\n },\n VerificationMethod: {\n UnknownMethod: \"Сервер сам выбирает способ доставки кода (дефолт, если клиент не указал предпочтение).\",\n Sms: \"Код доставляется SMS на телефон.\",\n TelegramGateway: \"Код через Telegram Gateway (не путать с AccountType.Telegram).\",\n FlashCall: \"Flash-call: пользователь вводит последние цифры входящего номера.\",\n MtsMobileId:\n \"МТС Mobile ID: out-of-band подтверждение без классического ввода кода; клиент поллит `requestToken` по `TokenResp.status`. Документация МТС: https://developers.mts.ru/mobile-id/documentation/autentifikatsiya\",\n },\n TokenStatus: {\n TokenReady: \"Токены готовы: в ответе есть access/refresh (классический OTP и успешный Mobile ID).\",\n Pending: \"Выдача ещё идёт (типично MTS Mobile ID) — полли `requestToken` с интервалом `SendCodeResp.pollIntervalSeconds`.\",\n AwaitingSmsCode: \"Mobile ID не завершился — нужен fallback: ввод SMS-кода и повторный `requestToken` с `code`.\",\n Failed: \"Выдача токенов не удалась; токены пустые — начать заново с `sendCode`.\",\n },\n LinkType: {\n Unknown: \"Служебный/неопределённый тип связи parent↔child (`ItemLink.linkType`).\",\n User: \"User link: личная ветка mind map; видит владелец связи. Канон create — `saveToMindMap` (не `includeForUser`).\",\n Pinned: \"Pinned link: структурное прикрепление к родителю; видно участникам родителя. Create — `includeToParent`.\",\n Group:\n \"Значение enum в OpenAPI; UI apps не строит ItemLink этого типа. Членство групп — `includeToGroups` / `updateGroups`, не `LinkType.Group`.\",\n },\n CaseState: {\n UnknownCaseState: \"Служебное/неопределенное состояние кейса.\",\n Verifying: \"Кейс на этапе проверки/подтверждения перед исполнением.\",\n Waiting: \"Кейс создан и ожидает начала выполнения или подтверждения.\",\n Processing: \"Кейс находится в активной работе.\",\n Preparing: \"Подготовительный этап перед основным выполнением кейса.\",\n Completed: \"Кейс успешно завершен.\",\n Closed: \"Кейс окончательно закрыт и больше не участвует в активном процессе.\",\n Rejected: \"Кейс отклонен (не принят к выполнению).\",\n Canceled: \"Кейс отменен (инициатором, исполнителем или системой по правилам).\",\n TimeControlled: \"Кейс находится под контролем временных ограничений/таймингов.\",\n TaskNotCompleted: \"Задача по кейсу не выполнена в требуемом объеме/срок.\",\n TaskCompleted: \"Задача по кейсу отмечена как выполненная.\",\n },\n CaseType: {\n UnknownTimeType: \"Служебный/неопределенный тип кейса по времени.\",\n Time: \"Одиночный кейс с конкретным временем.\",\n RepeatedTime: \"Повторяющийся кейс (серия по расписанию).\",\n Today: \"Кейс, относящийся к текущему дню.\",\n Week: \"Кейс/вид, агрегированный на недельном горизонте.\",\n Later: \"Кейс, отложенный на более поздний период.\",\n Date: \"Кейс, привязанный к конкретной дате (без детальной периодики).\",\n State: \"Кейс, фильтруемый/представляемый по состоянию, а не по времени.\",\n },\n TimetableDetailsVisibility: {\n Time:\n \"Только интервалы занятости (begin/end). Сервер не подгружает CaseView/CaseSummary для всех событий/заказов — лёгкий ответ для фона календаря / busy-bars. В ответе `detailsVisibility` остаётся `Time`, пока запись не обогащена.\",\n View:\n \"Полные детали событий/заказов: сервер подгружает CaseView и CaseSummary (`name`, `caseSummary`, …). Дефолт в torrow-apps (`TimetableCaseService.getTimetable`, экспорт заказов). В ответе обогащённые записи получают `detailsVisibility=View`.\",\n },\n TicketState: {\n UnknownTicketState: \"Служебное/неопределенное состояние билета.\",\n Canceled: \"Билет отменен и не может быть использован.\",\n Waiting: \"Билет ожидает оплаты или подтверждения.\",\n Paid: \"Билет оплачен и активен для использования.\",\n Used: \"Билет уже использован (услуга/доступ оказаны).\",\n Error: \"Ошибка обработки билета/платежного состояния.\",\n },\n AvailabilityTime: {\n UnknownSystemAvailabilityTime: \"Не удалось определить доступность временного слота.\",\n Free: \"Слот свободен для записи/бронирования.\",\n Busy: \"Слот занят и недоступен для новой записи.\",\n },\n AvailableResources: {\n Unknown: \"Служебное/неопределенное состояние ресурса в выборке.\",\n Free: \"Ресурс свободен.\",\n Booked: \"Ресурс забронирован.\",\n Busy: \"Ресурс занят и недоступен.\",\n },\n AnyoneAccess: {\n UnknownAnyoneAccess: \"Служебное/неопределенное значение уровня публичного доступа.\",\n NoneAnyoneAccess: \"Публичный доступ для «любого пользователя» не задан.\",\n Read: \"Любой пользователь может только читать объект.\",\n ReadWrite: \"Любой пользователь может читать и изменять объект.\",\n Denied: \"Публичный доступ явно запрещен.\",\n },\n DeliveryChannel: {\n UnknownDeliveryChannel: \"Служебный/неопределенный канал доставки.\",\n Push: \"Push-уведомление в приложение.\",\n Email: \"Доставка уведомления по email.\",\n Sms: \"Доставка уведомления через SMS.\",\n InApp: \"Внутреннее уведомление внутри приложения.\",\n Phone: \"Голосовой/телефонный канал.\",\n Announcement: \"Доставка через системное объявление.\",\n Telegram: \"Доставка через Telegram-канал/бот.\",\n Max: \"Доставка через мессенджер Max.\",\n },\n DeliveryStrategy: {\n UnknownDeliveryStrategy: \"Служебная/неопределенная стратегия доставки.\",\n All: \"Отправлять по всем доступным каналам.\",\n FirstDelivered: \"Остановиться после первой успешной доставки.\",\n },\n ProfileUserAvailability: {\n Unknown: \"Служебное/неопределенное состояние доступности профиля.\",\n Free: \"Профиль свободен и доступен для назначения.\",\n Busy: \"Профиль занят.\",\n Hidden: \"Профиль скрыт из сценариев подбора/расписания.\",\n ProfileAuto: \"Доступность определяется автоматически на уровне профиля.\",\n UserAuto: \"Доступность наследуется/рассчитывается автоматически от пользователя.\",\n },\n SessionDurationType: {\n UnknownSessionDurationType: \"Служебный/неопределенный тип длительности сессии.\",\n SessionDurationNone: \"Длительность сессии не используется (например Appeal).\",\n Custom: \"Длительность задаёт потребитель/исполнитель (аренда, кастомный интервал).\",\n Constant: \"Фиксированная длительность (`defaultDuration`).\",\n Sum: \"Длительность = сумма длительностей выбранных ресурсов/шагов (типично RegisterOnTime).\",\n },\n TimeSelectionType: {\n UnknownTimeSelectionType: \"Служебный/неопределенный тип выбора времени.\",\n TimeSelectionNone: \"Время не выбирается.\",\n Consumer: \"Время выбирает потребитель (клиент).\",\n Executor: \"Время выбирает исполнитель.\",\n },\n StateManagementType: {\n UnknownStateManagementType: \"Служебный/неопределенный режим управления состоянием сессии.\",\n Auto: \"Состояния сессии/кейса ведутся автоматически.\",\n Manual: \"Состояния меняет исполнитель вручную.\",\n },\n SessionPrecisionType: {\n UnknownSessionPrecisionType: \"Служебная/неопределенная точность сессии.\",\n SessionPrecisionNone: \"Точность не задана.\",\n DateTime: \"Выбор даты и времени.\",\n Date: \"Выбор только даты (без времени суток).\",\n },\n UserAccessLevel: {\n UnknownUserAccessLevel: \"Служебный/неопределенный уровень доступа для check-in/записи.\",\n Authenticated: \"Только аутентифицированные пользователи.\",\n Unauthenticated: \"Допускаются гости без полноценной сессии.\",\n },\n LoyaltyCardIssueType: {\n UnknownLoyaltyCardIssueType: \"Служебный/неопределенный способ выпуска карты.\",\n Manual: \"Карту выпускает оператор вручную.\",\n AutoActive: \"Карта выпускается и активируется автоматически (дефолт create в apps).\",\n AutoIssued: \"Карта выпускается автоматически без авто-активации.\",\n },\n LoyaltyCardUpdateKeyInformation: {\n UnknownLoyaltyCardUpdateKeyInformation: \"Служебное/неопределенное правило обновления key-полей карты.\",\n NonKeyDisallowed: \"Ключевые поля карты нельзя обновлять через non-key путь (дефолт create).\",\n NonKeyAllowed: \"Обновление ключевых полей через non-key путь разрешено.\",\n },\n LoyaltyCardUpdateNonKeyInformation: {\n UnknownLoyaltyCardUpdateNonKeyInformation: \"Служебное/неопределенное правило обновления non-key полей.\",\n KeyDisallowed: \"Non-key поля карты не обновляются (дефолт create, если чекбокс выключен).\",\n KeyAllowed: \"Non-key поля карты можно обновлять.\",\n },\n};\n\nconst DETAILED_TYPE_STATE_ENUMS = new Set<EnumName>(\n (Object.keys(ENUM_VALUES) as EnumName[]).filter(\n (name) =>\n (name.endsWith(\"Type\") || name.endsWith(\"State\")) &&\n name !== \"ActionHistoryType\" &&\n name !== \"AnnouncementType\",\n ),\n);\n\nconst EXTRA_DETAILED_ENUMS = new Set<EnumName>([\n \"ProfileUserAvailability\",\n \"DeliveryChannel\",\n \"DeliveryStrategy\",\n \"AvailableResources\",\n \"AnyoneAccess\",\n]);\n\nfunction toReadableToken(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/_/g, \" \")\n .trim();\n}\n\nfunction getPaymentProviderTypeDescription(value: string): string {\n const byValue: Record<string, string> = {\n UnknownPaymentProviderType: \"Служебное/неопределенное значение провайдера оплаты.\",\n Cash: \"Оплата наличными без перехода на внешний платежный шлюз.\",\n CustomLink: \"Оплата по кастомной внешней ссылке, заданной в настройках.\",\n YooMoney: \"Оплата через провайдера YooMoney.\",\n QiwiP2P: \"Оплата через Qiwi P2P.\",\n QiwiB2B: \"Оплата через Qiwi B2B.\",\n YooKassa: \"Оплата через YooKassa.\",\n Sberbank: \"Оплата через Сбербанк.\",\n Uralsib: \"Оплата через Уралсиб.\",\n Alfabank: \"Оплата через Альфа-Банк.\",\n RoboKassa: \"Оплата через RoboKassa.\",\n PayKeeper: \"Оплата через PayKeeper.\",\n GateLine: \"Оплата через GateLine.\",\n Tinkoff: \"Оплата через Тинькофф.\",\n Prodamus: \"Оплата через Prodamus.\",\n MockPaymentProvider: \"Тестовый/эмуляционный провайдер оплаты для стендов и отладки.\",\n };\n return byValue[value] ?? `Платежный провайдер \\`${value}\\`.`;\n}\n\nfunction getParticipationFieldTypeDescription(value: string): string {\n const byValue: Record<string, string> = {\n UnknownParticipationField: \"Служебный/неопределенный тип поля участника.\",\n FullName: \"Полное имя участника одной строкой.\",\n LastName: \"Фамилия участника.\",\n FirstName: \"Имя участника.\",\n MiddleName: \"Отчество/второе имя участника.\",\n Company: \"Название компании участника.\",\n Position: \"Должность участника в компании.\",\n MainPhone: \"Основной телефон участника.\",\n VerifiedMainPhone: \"Основной телефон, подтвержденный проверкой кода.\",\n AdditionalPhone: \"Дополнительный телефон участника.\",\n MainEmail: \"Основной email участника.\",\n VerifiedMainEmail: \"Основной email, подтвержденный проверкой кода.\",\n AdditionalEmail: \"Дополнительный email участника.\",\n Address: \"Текстовый адрес участника.\",\n AddressLocation: \"Геолокация/координаты адреса участника.\",\n PaymentAccount: \"Платежный счет/реквизиты участника для расчетов.\",\n CustomString: \"Пользовательское строковое поле анкеты.\",\n CustomBoolean: \"Пользовательское поле-флаг (true/false).\",\n CustomInt32: \"Пользовательское целочисленное поле.\",\n CustomDouble: \"Пользовательское числовое поле с дробной частью.\",\n CustomMoney: \"Пользовательское денежное поле.\",\n CustomDate: \"Пользовательское поле даты.\",\n CustomTime: \"Пользовательское поле времени.\",\n CustomDateTime: \"Пользовательское поле даты и времени.\",\n };\n return byValue[value] ?? `Тип поля участника \\`${value}\\`.`;\n}\n\nfunction getOperationTypeDescription(value: string): string {\n const explicit: Record<string, string> = {\n UnknownOperation: \"Служебный/неопределенный тип операции.\",\n Verification: \"Операция верификации пользователя/сущности.\",\n ConfirmCommunication: \"Подтверждение канала связи (email/телефон и т.п.).\",\n AcceptInvite: \"Принятие приглашения на участие.\",\n SendPersonalReminder: \"Отправка персонального напоминания.\",\n ReadItem: \"Чтение карточки элемента.\",\n SearchItem: \"Поиск элементов по условиям.\",\n ReadChildItems: \"Чтение дочерних элементов в иерархии.\",\n EditChildItems: \"Изменение состава/связей дочерних элементов.\",\n SortChildItems: \"Изменение порядка дочерних элементов.\",\n ReadParticipants: \"Просмотр участников элемента.\",\n ReadCaseParticipants: \"Просмотр участников события/кейса.\",\n FullReadCaseParticipants: \"Расширенный просмотр участников кейса с полным набором данных.\",\n CopyLink: \"Копирование ссылки на элемент/ресурс.\",\n SocialSharing: \"Шаринг через внешние соцканалы.\",\n InviteToParticipate: \"Приглашение пользователя к участию.\",\n HaveNotNotificationWays: \"Сигнал, что у пользователя нет доступных каналов уведомлений.\",\n RegisterDevice: \"Регистрация устройства пользователя для уведомлений/сессии.\",\n SetItemTags: \"Изменение тегов элемента.\",\n GetActionHistory: \"Просмотр истории действий.\",\n UpdateFeedbackOptions: \"Изменение настроек обратной связи.\",\n SendAnnouncementsToParticipants: \"Рассылка объявлений участникам.\",\n SetItemMetrics: \"Настройка метрик/аналитики для элемента.\",\n GetFeedbackMessage: \"Получение сообщения обратной связи.\",\n SaveFeedbackMessage: \"Сохранение сообщения обратной связи.\",\n DeleteFeedbackMessage: \"Удаление сообщения обратной связи.\",\n FullViewOfActionHistory: \"Полный просмотр истории действий.\",\n GenerateSecurityToken: \"Генерация security token для гостевого/ограниченного доступа.\",\n ReaderTestFunction: \"Тестовая операция для роли Reader.\",\n EditorTestFunction: \"Тестовая операция для роли Editor.\",\n OwnerTestFunction: \"Тестовая операция для роли Owner.\",\n PotentialReaderTestFunction: \"Тестовая операция для потенциального Reader.\",\n AdministratorTestFunction: \"Тестовая операция для администратора.\",\n PublicReaderTestFunction: \"Тестовая операция для публичного чтения.\",\n ManagerTestFunction: \"Тестовая операция для менеджера.\",\n DeletedTestFunction: \"Тестовая операция для удаленного состояния.\",\n ConsumerTestFunction: \"Тестовая операция для роли Consumer.\",\n ExecutorTestFunction: \"Тестовая операция для роли Executor.\",\n PotentialConsumerTestFunction: \"Тестовая операция для потенциального Consumer.\",\n };\n if (explicit[value]) return explicit[value];\n\n const readable = toReadableToken(value);\n if (value.startsWith(\"Create\")) return `Создание сущности/объекта в сценарии \"${readable}\".`;\n if (value.startsWith(\"Update\")) return `Обновление данных в сценарии \"${readable}\".`;\n if (value.startsWith(\"Delete\") || value.startsWith(\"Remove\")) return `Удаление/снятие привязки в сценарии \"${readable}\".`;\n if (value.startsWith(\"Get\") || value.startsWith(\"Read\")) return `Чтение/получение данных в сценарии \"${readable}\".`;\n if (value.startsWith(\"Generate\")) return `Генерация данных/отчета/токена в сценарии \"${readable}\".`;\n if (value.startsWith(\"Include\")) return `Включение/добавление связи в сценарии \"${readable}\".`;\n if (value.startsWith(\"Exclude\")) return `Исключение/удаление связи в сценарии \"${readable}\".`;\n if (value.startsWith(\"Case\")) return `Операция жизненного цикла события (кейса): \"${readable}\".`;\n if (value.startsWith(\"Confirm\")) return `Подтверждение действия/состояния: \"${readable}\".`;\n if (value.startsWith(\"Reject\") || value.startsWith(\"Decline\")) return `Отклонение/отказ в сценарии \"${readable}\".`;\n if (value.startsWith(\"Approve\")) return `Подтверждение/аппрув в сценарии \"${readable}\".`;\n if (value.startsWith(\"Request\")) return `Запрос действия/доступа в сценарии \"${readable}\".`;\n if (value.startsWith(\"Revoke\")) return `Отзыв ранее выданного доступа/предложения в сценарии \"${readable}\".`;\n if (value.startsWith(\"Send\")) return `Отправка сообщения/уведомления/ссылки в сценарии \"${readable}\".`;\n if (value.startsWith(\"Set\") || value.startsWith(\"Unset\")) return `Установка/сброс параметра или связи: \"${readable}\".`;\n if (value.startsWith(\"Pick\") || value.startsWith(\"Return\")) return `Операция движения заказа/ресурса: \"${readable}\".`;\n if (value.startsWith(\"Book\") || value.startsWith(\"CheckIn\")) return `Операция записи/чекина: \"${readable}\".`;\n\n return `Операция доступа/изменения в домене Torrow: \"${readable}\".`;\n}\n\nfunction getDetailedEnumValueDescription(enumName: EnumName, value: string): string {\n const readableValue = toReadableToken(value);\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Служебное/неопределенное значение для \\`${enumName}\\` (\\`${value}\\`). Обычно означает, что сервер не смог однозначно определить тип/состояние.`;\n }\n if (value === \"None\") {\n return `Явное отсутствие установленного типа/состояния для \\`${enumName}\\`.`;\n }\n return `Значение \\`${value}\\` в enum \\`${enumName}\\` определяет режим/категорию \"${readableValue}\" в соответствующем API-сценарии.`;\n}\n\nfunction getEnumValueDescription(enumName: EnumName, value: string): string {\n if (enumName === \"NoteType\") {\n if (value === \"Html\") return \"HTML-заметка: data содержит HTML-строку. Поддерживаемый сценарий SDK.\";\n if (value === \"Markdown\") return \"Markdown-заметка: data содержит исходный Markdown с сохранением пробелов и переносов. Поддерживаемый сценарий SDK.\";\n return \"Серверное значение \" + value + \": сохранено для совместимости; вне поддерживаемых сценариев создания Html/Markdown.\";\n }\n const explicitDescription = SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS[enumName]?.[value];\n if (explicitDescription) {\n return explicitDescription;\n }\n if (enumName === \"PaymentProviderType\") {\n return getPaymentProviderTypeDescription(value);\n }\n if (enumName === \"ParticipationFieldType\") {\n return getParticipationFieldTypeDescription(value);\n }\n if (enumName === \"OperationType\") {\n return getOperationTypeDescription(value);\n }\n if (DETAILED_TYPE_STATE_ENUMS.has(enumName) || EXTRA_DETAILED_ENUMS.has(enumName)) {\n return getDetailedEnumValueDescription(enumName, value);\n }\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Неопределенное/служебное значение enum \\`${enumName}\\` (\\`${value}\\`).`;\n }\n if (value === \"None\") {\n return `Явное отсутствие выбранного значения для enum \\`${enumName}\\`.`;\n }\n return `Значение enum \\`${enumName}\\`: \\`${value}\\`.`;\n}\n\nfunction createEnumFieldDocEntries(enumName: EnumName, summary: string): Record<string, ItemFieldDoc> {\n const valueEntries = Object.fromEntries(\n ENUM_VALUES[enumName].map((value) => [\n value,\n {\n description: getEnumValueDescription(enumName, value),\n examples: [value],\n valueSchema: enumName,\n } as ItemFieldDoc,\n ]),\n );\n return {\n value: {\n description: summary,\n valueSchema: enumName,\n },\n ...valueEntries,\n };\n}\n\nexport const actionHistoryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryType\",\n \"Тип события истории действий (создание, обновление, удаление, участие и пр.).\",\n);\nexport const actionHistoryTypeFieldDocs = mapFieldDocsToStrings(actionHistoryTypeFieldDocEntries);\n\nexport const actionHistoryStateFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryState\",\n \"Состояние записи action-history (актуальна/архив/служебные состояния API).\",\n);\nexport const actionHistoryStateFieldDocs = mapFieldDocsToStrings(actionHistoryStateFieldDocEntries);\n\nexport const announcementStateFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementState\",\n \"Состояние уведомления (`New`, `Read`, `Hidden` и др.).\",\n);\nexport const announcementStateFieldDocs = mapFieldDocsToStrings(announcementStateFieldDocEntries);\n\nexport const itemViewSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemViewSortCondition\",\n \"Условие сортировки списков view в API (`/views/*`).\",\n);\nexport const itemViewSortConditionFieldDocs = mapFieldDocsToStrings(itemViewSortConditionFieldDocEntries);\n\nexport const participantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantType\",\n \"Тип/роль участника в participation-модели (владелец, гость, подписчик и т.п.).\",\n);\nexport const participantTypeFieldDocs = mapFieldDocsToStrings(participantTypeFieldDocEntries);\n\nexport const participantStateFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantState\",\n \"Состояние участия (ожидание, активен, отклонён, отозван и т.п.).\",\n);\nexport const participantStateFieldDocs = mapFieldDocsToStrings(participantStateFieldDocEntries);\n\nexport const accountingTransactionStateFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionState\",\n \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n);\nexport const accountingTransactionStateFieldDocs = mapFieldDocsToStrings(accountingTransactionStateFieldDocEntries);\n\nexport const operationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"OperationType\",\n \"Тип операции над объектом в связях/participation (по OpenAPI enum).\",\n);\nexport const operationTypeFieldDocs = mapFieldDocsToStrings(operationTypeFieldDocEntries);\n\nexport const torrowObjectTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TorrowObjectType\",\n \"Доменный тип объекта Torrow (`Contact`, `Case`, `Service`, `LoyaltyCard`, ...).\",\n);\nexport const torrowObjectTypeFieldDocs = mapFieldDocsToStrings(torrowObjectTypeFieldDocEntries);\n\nexport const itemSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemSortCondition\",\n \"Условие сортировки элементов в group/list API.\",\n);\nexport const itemSortConditionFieldDocs = mapFieldDocsToStrings(itemSortConditionFieldDocEntries);\n\nexport const objectSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ObjectSortCondition\",\n \"Условие сортировки объектов (`lm`, `cd`, кастомные поля — по OpenAPI).\",\n);\nexport const objectSortConditionFieldDocs = mapFieldDocsToStrings(objectSortConditionFieldDocEntries);\n\nexport const accountTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountType\",\n \"Тип аккаунта в auth-потоке (`Phone`, `Email`, ...).\",\n);\nexport const accountTypeFieldDocs = mapFieldDocsToStrings(accountTypeFieldDocEntries);\n\nexport const advisedItemTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AdvisedItemType\",\n \"Режим `GET /api/v1/search/adviseditems` (`NearLocation` / `Recommendation`). Query: **`AdvisedItemsSearchQuery`**.\",\n);\nexport const advisedItemTypeFieldDocs = mapFieldDocsToStrings(advisedItemTypeFieldDocEntries);\n\nexport const verificationMethodFieldDocEntries = createEnumFieldDocEntries(\n \"VerificationMethod\",\n \"Способ доставки/подтверждения кода входа (`SendCodeReq.preferredMethod`, `SendCodeResp.usedMethod`).\",\n);\nexport const verificationMethodFieldDocs = mapFieldDocsToStrings(verificationMethodFieldDocEntries);\n\nexport const tokenStatusFieldDocEntries = createEnumFieldDocEntries(\n \"TokenStatus\",\n \"Статус выдачи токенов в `TokenResp.status` (классический OTP → `TokenReady`; Mobile ID — polling).\",\n);\nexport const tokenStatusFieldDocs = mapFieldDocsToStrings(tokenStatusFieldDocEntries);\n\nexport const communicationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CommunicationType\",\n \"Канал коммуникации для подтверждения (`Sms`, `Email`, ...).\",\n);\nexport const communicationTypeFieldDocs = mapFieldDocsToStrings(communicationTypeFieldDocEntries);\n\nexport const accountingTransactionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionType\",\n \"Тип учетной транзакции (`Balance`, `Operation`).\",\n);\nexport const accountingTransactionTypeFieldDocs = mapFieldDocsToStrings(accountingTransactionTypeFieldDocEntries);\n\nexport const announcementCategoryFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementCategory\",\n \"Категория объявления/уведомления.\",\n);\nexport const announcementCategoryFieldDocs = mapFieldDocsToStrings(announcementCategoryFieldDocEntries);\n\nexport const announcementPriorityFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementPriority\",\n \"Приоритет объявления.\",\n);\nexport const announcementPriorityFieldDocs = mapFieldDocsToStrings(announcementPriorityFieldDocEntries);\n\nexport const announcementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementType\",\n \"Тип объявления (доменное событие, которое вызвало нотификацию).\",\n);\nexport const announcementTypeFieldDocs = mapFieldDocsToStrings(announcementTypeFieldDocEntries);\n\nexport const anyoneAccessFieldDocEntries = createEnumFieldDocEntries(\n \"AnyoneAccess\",\n \"Уровень доступа для «любого пользователя».\",\n);\nexport const anyoneAccessFieldDocs = mapFieldDocsToStrings(anyoneAccessFieldDocEntries);\n\nexport const archiveStateFieldDocEntries = createEnumFieldDocEntries(\n \"ArchiveState\",\n \"Состояние архивации объекта.\",\n);\nexport const archiveStateFieldDocs = mapFieldDocsToStrings(archiveStateFieldDocEntries);\n\nexport const availabilityTimeFieldDocEntries = createEnumFieldDocEntries(\n \"AvailabilityTime\",\n \"Доступность слота времени.\",\n);\nexport const availabilityTimeFieldDocs = mapFieldDocsToStrings(availabilityTimeFieldDocEntries);\n\nexport const availableResourcesFieldDocEntries = createEnumFieldDocEntries(\n \"AvailableResources\",\n \"Доступность ресурса в периоде.\",\n);\nexport const availableResourcesFieldDocs = mapFieldDocsToStrings(availableResourcesFieldDocEntries);\n\nexport const caseParticipantStateFieldDocEntries = createEnumFieldDocEntries(\n \"CaseParticipantState\",\n \"Состояние участника кейса.\",\n);\nexport const caseParticipantStateFieldDocs = mapFieldDocsToStrings(caseParticipantStateFieldDocEntries);\n\nexport const caseParticipantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseParticipantType\",\n \"Роль участника в кейсе.\",\n);\nexport const caseParticipantTypeFieldDocs = mapFieldDocsToStrings(caseParticipantTypeFieldDocEntries);\n\nexport const caseStateFieldDocEntries = createEnumFieldDocEntries(\n \"CaseState\",\n \"Жизненный цикл события/кейса.\",\n);\nexport const caseStateFieldDocs = mapFieldDocsToStrings(caseStateFieldDocEntries);\n\nexport const caseTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseType\",\n \"Тип кейса по времени/формату отображения.\",\n);\nexport const caseTypeFieldDocs = mapFieldDocsToStrings(caseTypeFieldDocEntries);\n\nexport const deleteStateFieldDocEntries = createEnumFieldDocEntries(\n \"DeleteState\",\n \"Состояние удаления объекта.\",\n);\nexport const deleteStateFieldDocs = mapFieldDocsToStrings(deleteStateFieldDocEntries);\n\nexport const deliveryChannelFieldDocEntries = createEnumFieldDocEntries(\n \"DeliveryChannel\",\n \"Канал доставки уведомлений.\",\n);\nexport const deliveryChannelFieldDocs = mapFieldDocsToStrings(deliveryChannelFieldDocEntries);\n\nexport const deliveryStrategyFieldDocEntries = createEnumFieldDocEntries(\n \"DeliveryStrategy\",\n \"Стратегия доставки уведомления по каналам.\",\n);\nexport const deliveryStrategyFieldDocs = mapFieldDocsToStrings(deliveryStrategyFieldDocEntries);\n\nexport const genderFieldDocEntries = createEnumFieldDocEntries(\n \"Gender\",\n \"Пол контакта/пользователя.\",\n);\nexport const genderFieldDocs = mapFieldDocsToStrings(genderFieldDocEntries);\n\nexport const imagePreviewSizeFieldDocEntries = createEnumFieldDocEntries(\n \"ImagePreviewSize\",\n \"Размер превью изображения в UI.\",\n);\nexport const imagePreviewSizeFieldDocs = mapFieldDocsToStrings(imagePreviewSizeFieldDocEntries);\n\nexport const noteTypeFieldDocEntries = createEnumFieldDocEntries(\n \"NoteType\",\n \"Тип содержимого заметки. Поддерживаемые сценарии: Html и Markdown; остальные значения — совместимость с серверным контрактом.\",\n);\nexport const noteTypeFieldDocs = mapFieldDocsToStrings(noteTypeFieldDocEntries);\n\nexport const linkTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LinkType\",\n \"Тип связи parent↔child в `ItemLink` (User / Pinned). Флоу: `docs/agents/relations-flow.md`.\",\n);\nexport const linkTypeFieldDocs = mapFieldDocsToStrings(linkTypeFieldDocEntries);\n\nexport const participationFieldRequirementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldRequirementType\",\n \"Требование к полю участника (`OptionalField`/`RequiredField`).\",\n);\nexport const participationFieldRequirementTypeFieldDocs = mapFieldDocsToStrings(\n participationFieldRequirementTypeFieldDocEntries,\n);\n\nexport const participationFieldTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldType\",\n \"Тип поля анкеты/контактных данных участника.\",\n);\nexport const participationFieldTypeFieldDocs = mapFieldDocsToStrings(participationFieldTypeFieldDocEntries);\n\nexport const paymentProviderTypeFieldDocEntries = createEnumFieldDocEntries(\n \"PaymentProviderType\",\n \"Провайдер оплаты для билета/заказа.\",\n);\nexport const paymentProviderTypeFieldDocs = mapFieldDocsToStrings(paymentProviderTypeFieldDocEntries);\n\nexport const profileTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileType\",\n \"Роль контакта как профиля пользователя.\",\n);\nexport const profileTypeFieldDocs = mapFieldDocsToStrings(profileTypeFieldDocEntries);\n\nexport const profileUserAvailabilityFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileUserAvailability\",\n \"Доступность профиля/пользователя в расписании.\",\n);\nexport const profileUserAvailabilityFieldDocs = mapFieldDocsToStrings(profileUserAvailabilityFieldDocEntries);\n\nexport const reminderLocationDirectionFieldDocEntries = createEnumFieldDocEntries(\n \"ReminderLocationDirection\",\n \"Направление гео-триггера напоминания (вход/выход).\",\n);\nexport const reminderLocationDirectionFieldDocs = mapFieldDocsToStrings(reminderLocationDirectionFieldDocEntries);\n\nexport const reportDeliveryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ReportDeliveryType\",\n \"Способ доставки отчета.\",\n);\nexport const reportDeliveryTypeFieldDocs = mapFieldDocsToStrings(reportDeliveryTypeFieldDocEntries);\n\nexport const showCaseInTimetableTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ShowCaseInTimetableType\",\n \"Режим показа события в расписании.\",\n);\nexport const showCaseInTimetableTypeFieldDocs = mapFieldDocsToStrings(showCaseInTimetableTypeFieldDocEntries);\n\nexport const timetableDetailsVisibilityFieldDocEntries = createEnumFieldDocEntries(\n \"TimetableDetailsVisibility\",\n \"Глубина деталей в `getTimetable` query `visibility` и в ответе `TimetableCase.detailsVisibility`: `Time` — интервалы, `View` — полные события/заказы.\",\n);\nexport const timetableDetailsVisibilityFieldDocs = mapFieldDocsToStrings(timetableDetailsVisibilityFieldDocEntries);\n\nexport const ticketStateFieldDocEntries = createEnumFieldDocEntries(\n \"TicketState\",\n \"Состояние билета/оплаты.\",\n);\nexport const ticketStateFieldDocs = mapFieldDocsToStrings(ticketStateFieldDocEntries);\n\nexport const ticketPaymentConfirmationSourceFieldDocEntries = createEnumFieldDocEntries(\n \"TicketPaymentConfirmationSource\",\n \"Источник подтверждения оплаты билета (`PaymentLink`, `Manager`, …).\",\n);\nexport const ticketPaymentConfirmationSourceFieldDocs = mapFieldDocsToStrings(\n ticketPaymentConfirmationSourceFieldDocEntries,\n);\n\nexport const usageTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageType\",\n \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n);\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageConditionType\",\n \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n);\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const sessionDurationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionDurationType\",\n \"Тип длительности сессии услуги (`SessionDurationProperties.sessionDurationType`). В JSON — строковый литерал OpenAPI.\",\n);\nexport const sessionDurationTypeFieldDocs = mapFieldDocsToStrings(sessionDurationTypeFieldDocEntries);\n\nexport const timeSelectionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TimeSelectionType\",\n \"Кто выбирает время сессии (`Consumer` / `Executor`). В JSON — строка OpenAPI.\",\n);\nexport const timeSelectionTypeFieldDocs = mapFieldDocsToStrings(timeSelectionTypeFieldDocEntries);\n\nexport const stateManagementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"StateManagementType\",\n \"Режим управления состоянием сессии (`Auto` / `Manual`). В JSON — строка OpenAPI.\",\n);\nexport const stateManagementTypeFieldDocs = mapFieldDocsToStrings(stateManagementTypeFieldDocEntries);\n\nexport const sessionPrecisionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionPrecisionType\",\n \"Точность сессии (`DateTime` / `Date`). В JSON — строка OpenAPI.\",\n);\nexport const sessionPrecisionTypeFieldDocs = mapFieldDocsToStrings(sessionPrecisionTypeFieldDocEntries);\n\nexport const userAccessLevelFieldDocEntries = createEnumFieldDocEntries(\n \"UserAccessLevel\",\n \"Уровень доступа для check-in/записи (`Authenticated` / `Unauthenticated`). В JSON — строка OpenAPI.\",\n);\nexport const userAccessLevelFieldDocs = mapFieldDocsToStrings(userAccessLevelFieldDocEntries);\n\nexport const loyaltyCardIssueTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardIssueType\",\n \"Способ выпуска карты лояльности (`Manual` / `AutoActive` / `AutoIssued`). В JSON — строка OpenAPI.\",\n);\nexport const loyaltyCardIssueTypeFieldDocs = mapFieldDocsToStrings(loyaltyCardIssueTypeFieldDocEntries);\n\nexport const loyaltyCardUpdateKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateKeyInformation\",\n \"Правило обновления ключевых полей карты. В JSON — строка OpenAPI (`NonKeyDisallowed`, …).\",\n);\nexport const loyaltyCardUpdateKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n);\n\nexport const loyaltyCardUpdateNonKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateNonKeyInformation\",\n \"Правило обновления non-key полей карты. В JSON — строка OpenAPI (`KeyDisallowed`, `KeyAllowed`).\",\n);\nexport const loyaltyCardUpdateNonKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n);\n","import { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowIdHelperFieldDocEntries = {\n getTorrowObjectTypeFromTorrowId: {\n description:\n \"Строго проверяет Torrow ID и возвращает известный SDK `TorrowObjectType` из числового кода ID.\",\n valueSchema: \"string → TorrowObjectType\",\n usage:\n \"Неизвестный numeric code даёт `TorrowIdError` с reason `unknown-object-type-code`; SDK не угадывает соответствие по порядку OpenAPI enum.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemTypeHelperFieldDocEntries = {\n getTorrowItemTypeFromTorrowId: {\n description: \"Возвращает `TorrowItemType`, закодированный в одном каноническом Torrow ID.\",\n valueSchema: \"string → TorrowItemType\",\n usage: \"Известные non-item типы (`User`, `File`) дают `unsupported-item-type`.\",\n },\n getTorrowItemTypeFromTorrowIds: {\n description: \"Возвращает общий `TorrowItemType` непустого однотипного списка Torrow ID.\",\n valueSchema: \"readonly string[] → TorrowItemType\",\n usage: \"Пустой список и смешанные item types дают типизированный `TorrowIdError`.\",\n },\n isTorrowItemType: {\n description: \"Runtime guard для внешней строки с семантическим item type (`Note`, `Contact`, ...).\",\n valueSchema: \"string → boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowIdHelperFieldDocs = mapFieldDocsToStrings(torrowIdHelperFieldDocEntries);\nexport const torrowItemTypeHelperFieldDocs = mapFieldDocsToStrings(\n torrowItemTypeHelperFieldDocEntries,\n);\n","/**\n * Каталоги операций (**TorrowItemCoreFacade**, ActionHistory, Accounting, Announcement, ExportImport, Report, Loyalty*, BlockReason, Contacts communication) для {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n generateSecurityTokenReqFieldDocEntries,\n generateSecurityTokenRespFieldDocEntries,\n getShareItemSessionReqFieldDocEntries,\n participationFieldDocEntries,\n participationRespFieldDocEntries,\n profileWithErrorFieldDocEntries,\n sendLinkOfItemReqFieldDocEntries,\n sendLinkOfItemRespFieldDocEntries,\n shareItemReqFieldDocEntries,\n} from \"./loyalty-access-field-docs.js\";\nimport {\n accountingTransactionFieldDocEntries,\n actionHistoryInfoFieldDocEntries,\n actionHistoryListQueryFieldDocEntries,\n announcementInfoFieldDocEntries,\n announcementsListQueryFieldDocEntries,\n balanceValueFieldDocEntries,\n exportRequestFieldDocEntries,\n exportGraphFieldDocEntries,\n generateReportReqFieldDocEntries,\n generateReportRespFieldDocEntries,\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n getParticipationCountRespFieldDocEntries,\n fileInfoFieldDocEntries,\n putUrlRespFieldDocEntries,\n updateFileIdRespFieldDocEntries,\n importByFileRequestFieldDocEntries,\n importByUniqueNameRequestFieldDocEntries,\n loyaltyCardSubscriptionFieldDocEntries,\n createLoyaltyCardReqFieldDocEntries,\n initialTransactionFieldDocEntries,\n loyaltySystemsStatisticsReqFieldDocEntries,\n loyaltySystemsStatisticsRespFieldDocEntries,\n reportPropertiesFieldDocEntries,\n reportOptionsFieldDocEntries,\n torrowErrorClientFieldDocEntries,\n transactionInfoFieldDocEntries,\n updateAnnouncementStateReqFieldDocEntries,\n} from \"./operations-struct-field-docs.js\";\nimport {\n blockReasonFieldDocEntries,\n blockReasonsSdkMethodFieldDocEntries,\n} from \"./block-reason-field-docs.js\";\nimport {\n apiKeyInfoFieldDocEntries,\n apiKeysSdkMethodFieldDocEntries,\n createApiKeyRequestFieldDocEntries,\n createApiKeyResponseFieldDocEntries,\n} from \"./api-keys-field-docs.js\";\nimport {\n contactsCommunicationSdkMethodFieldDocEntries,\n sendCommunicationCodeReqFieldDocEntries,\n sendCommunicationCodeRespFieldDocEntries,\n verifyCommunicationCodeReqFieldDocEntries,\n verifyCommunicationCodeRespFieldDocEntries,\n} from \"./contact-communication-field-docs.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\nimport {\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n torrowItemFacadeSdkMethodFieldDocEntries,\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n} from \"./item-social-facet-field-docs.js\";\nimport {\n resourceBehaviorSettingsFieldDocEntries,\n resourceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagParamsFieldDocEntries,\n} from \"./implicit-tag-params-field-docs.js\";\nimport {\n actionHistorySdkMethodFieldDocEntries,\n accountingTransactionsSdkMethodFieldDocEntries,\n announcementsSdkMethodFieldDocEntries,\n exportImportSdkMethodFieldDocEntries,\n loyaltyCardsSdkMethodFieldDocEntries,\n loyaltySystemsSdkMethodFieldDocEntries,\n reportsSdkMethodFieldDocEntries,\n userSdkMethodFieldDocEntries,\n userSettingsSdkMethodFieldDocEntries,\n} from \"./operations-field-docs.js\";\nimport {\n blockInfoFieldDocEntries,\n blockSettingsFieldDocEntries,\n deviceSettingsInfoFieldDocEntries,\n filterFieldDocEntries,\n layoutTypeValuesFieldDocEntries,\n metricsFieldDocEntries,\n notificationPropertiesFieldDocEntries,\n personalSolutionDataFieldDocEntries,\n solutionDataFieldDocEntries,\n userDeliveryWayFieldDocEntries,\n usageConditionFieldDocEntries,\n userSettingsInfoFieldDocEntries,\n viewBlockSettingsFieldDocEntries,\n} from \"./solution-user-settings-field-docs.js\";\nimport {\n accountTypeFieldDocEntries,\n accountingTransactionTypeFieldDocEntries,\n accountingTransactionStateFieldDocEntries,\n actionHistoryStateFieldDocEntries,\n actionHistoryTypeFieldDocEntries,\n advisedItemTypeFieldDocEntries,\n tokenStatusFieldDocEntries,\n verificationMethodFieldDocEntries,\n announcementCategoryFieldDocEntries,\n announcementPriorityFieldDocEntries,\n announcementStateFieldDocEntries,\n announcementTypeFieldDocEntries,\n anyoneAccessFieldDocEntries,\n archiveStateFieldDocEntries,\n availabilityTimeFieldDocEntries,\n availableResourcesFieldDocEntries,\n caseParticipantStateFieldDocEntries,\n caseParticipantTypeFieldDocEntries,\n caseStateFieldDocEntries,\n caseTypeFieldDocEntries,\n communicationTypeFieldDocEntries,\n deleteStateFieldDocEntries,\n deliveryChannelFieldDocEntries,\n deliveryStrategyFieldDocEntries,\n genderFieldDocEntries,\n imagePreviewSizeFieldDocEntries,\n itemSortConditionFieldDocEntries,\n itemViewSortConditionFieldDocEntries,\n noteTypeFieldDocEntries,\n objectSortConditionFieldDocEntries,\n operationTypeFieldDocEntries,\n participantStateFieldDocEntries,\n participantTypeFieldDocEntries,\n participationFieldRequirementTypeFieldDocEntries,\n participationFieldTypeFieldDocEntries,\n paymentProviderTypeFieldDocEntries,\n profileTypeFieldDocEntries,\n profileUserAvailabilityFieldDocEntries,\n reminderLocationDirectionFieldDocEntries,\n reportDeliveryTypeFieldDocEntries,\n showCaseInTimetableTypeFieldDocEntries,\n timetableDetailsVisibilityFieldDocEntries,\n ticketStateFieldDocEntries,\n ticketPaymentConfirmationSourceFieldDocEntries,\n torrowObjectTypeFieldDocEntries,\n usageConditionTypeFieldDocEntries as usageConditionTypeEnumFieldDocEntries,\n usageTypeFieldDocEntries as usageTypeEnumFieldDocEntries,\n sessionDurationTypeFieldDocEntries,\n timeSelectionTypeFieldDocEntries,\n stateManagementTypeFieldDocEntries,\n sessionPrecisionTypeFieldDocEntries,\n userAccessLevelFieldDocEntries,\n loyaltyCardIssueTypeFieldDocEntries,\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n} from \"./shared-enum-field-docs.js\";\nimport { timetableViewTypeValuesFieldDocEntries } from \"./calendar-item.js\";\nimport { contextIconPresetValuesFieldDocEntries } from \"./context-item.js\";\nimport {\n torrowIdHelperFieldDocEntries,\n torrowItemTypeHelperFieldDocEntries,\n} from \"./torrow-id-field-docs.js\";\n\nexport const mcpOperationsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowIdHelpers: { ...torrowIdHelperFieldDocEntries },\n TorrowItemTypeHelpers: { ...torrowItemTypeHelperFieldDocEntries },\n /** Общие методы {@link TorrowItemCoreFacade} — один источник правды; **Loyalty*SdkMethods** подмешивают подмножество + доменные методы. */\n TorrowItemCoreFacadeSdkMethods: { ...torrowItemCoreFacadeSdkMethodFieldDocEntries },\n /** {@link TorrowItemFacade} без photo: **cases**, **notes**, **services**, **calendars**, **contexts**, **resourceItems** (+ **contacts** кроме photo). Отдельно: booking/search/CRUD в других каталогах. */\n TorrowItemFacadeSdkMethods: { ...torrowItemFacadeSdkMethodFieldDocEntries },\n /** Как **Base**, плюс **`getPhotoInfo`/`getPhotoPutUrl`** — item-слой **`client.contacts`**. */\n TorrowItemFacadeContactsItemSdkMethods: { ...torrowItemFacadeContactsItemSdkMethodFieldDocEntries },\n /** Query `cascade` / `withPinnedItems` для `client.*.delete` (contacts, notes, cases, …). */\n ItemDeleteQuery: { ...itemDeleteQueryFieldDocEntries },\n /** Явный контракт неявных параметров из service.tags (формат `<value>:Suffix`). */\n ServiceImplicitTagParams: { ...serviceImplicitTagParamsFieldDocEntries },\n /** Утилиты SDK для парсинга параметров из service tags. */\n ServiceImplicitTagMethods: { ...serviceImplicitTagMethodsFieldDocEntries },\n /** Явный контракт managed параметров из resource.tags (`MarginTime`, `lockId`). */\n ResourceBehaviorSettings: { ...resourceBehaviorSettingsFieldDocEntries },\n /** Утилиты SDK для парсинга/merge managed resource tags. */\n ResourceImplicitTagMethods: { ...resourceImplicitTagMethodsFieldDocEntries },\n ActionHistorySdkMethods: { ...actionHistorySdkMethodFieldDocEntries },\n ActionHistoryListQuery: { ...actionHistoryListQueryFieldDocEntries },\n AccountingTransactionsSdkMethods: { ...accountingTransactionsSdkMethodFieldDocEntries },\n AnnouncementsSdkMethods: { ...announcementsSdkMethodFieldDocEntries },\n AnnouncementsListQuery: { ...announcementsListQueryFieldDocEntries },\n ExportImportSdkMethods: { ...exportImportSdkMethodFieldDocEntries },\n ReportsSdkMethods: { ...reportsSdkMethodFieldDocEntries },\n LoyaltySystemsSdkMethods: { ...loyaltySystemsSdkMethodFieldDocEntries },\n LoyaltyCardsSdkMethods: { ...loyaltyCardsSdkMethodFieldDocEntries },\n UserSdkMethods: { ...userSdkMethodFieldDocEntries },\n UserSettingsSdkMethods: { ...userSettingsSdkMethodFieldDocEntries },\n BlockReasonsSdkMethods: { ...blockReasonsSdkMethodFieldDocEntries },\n ContactsCommunicationSdkMethods: { ...contactsCommunicationSdkMethodFieldDocEntries },\n BlockReason: { ...blockReasonFieldDocEntries },\n ApiKeysSdkMethods: { ...apiKeysSdkMethodFieldDocEntries },\n ApiKeyInfo: { ...apiKeyInfoFieldDocEntries },\n CreateApiKeyRequest: { ...createApiKeyRequestFieldDocEntries },\n CreateApiKeyResponse: { ...createApiKeyResponseFieldDocEntries },\n SendCommunicationCodeReq: { ...sendCommunicationCodeReqFieldDocEntries },\n SendCommunicationCodeResp: { ...sendCommunicationCodeRespFieldDocEntries },\n VerifyCommunicationCodeReq: { ...verifyCommunicationCodeReqFieldDocEntries },\n VerifyCommunicationCodeResp: { ...verifyCommunicationCodeRespFieldDocEntries },\n GenerateSecurityTokenReq: { ...generateSecurityTokenReqFieldDocEntries },\n GenerateSecurityTokenResp: { ...generateSecurityTokenRespFieldDocEntries },\n ShareItemReq: { ...shareItemReqFieldDocEntries },\n GetShareItemSessionReq: { ...getShareItemSessionReqFieldDocEntries },\n SendLinkOfItemReq: { ...sendLinkOfItemReqFieldDocEntries },\n SendLinkOfItemResp: { ...sendLinkOfItemRespFieldDocEntries },\n Participation: { ...participationFieldDocEntries },\n ProfileWithError: { ...profileWithErrorFieldDocEntries },\n ParticipationResp: { ...participationRespFieldDocEntries },\n AccountingTransaction: { ...accountingTransactionFieldDocEntries },\n BalanceValue: { ...balanceValueFieldDocEntries },\n ActionHistoryInfo: { ...actionHistoryInfoFieldDocEntries },\n AnnouncementInfo: { ...announcementInfoFieldDocEntries },\n UpdateAnnouncementStateReq: { ...updateAnnouncementStateReqFieldDocEntries },\n ExportRequest: { ...exportRequestFieldDocEntries },\n ExportGraph: { ...exportGraphFieldDocEntries },\n ImportByFileRequest: { ...importByFileRequestFieldDocEntries },\n ImportByUniqueNameRequest: { ...importByUniqueNameRequestFieldDocEntries },\n GenerateReportReq: { ...generateReportReqFieldDocEntries },\n ReportOptions: { ...reportOptionsFieldDocEntries },\n ReportProperties: { ...reportPropertiesFieldDocEntries },\n GenerateReportResp: { ...generateReportRespFieldDocEntries },\n LoyaltyCardSubscription: { ...loyaltyCardSubscriptionFieldDocEntries },\n CreateLoyaltyCardReq: { ...createLoyaltyCardReqFieldDocEntries },\n InitialTransaction: { ...initialTransactionFieldDocEntries },\n LoyaltySystemsStatisticsReq: { ...loyaltySystemsStatisticsReqFieldDocEntries },\n LoyaltySystemsStatisticsResp: { ...loyaltySystemsStatisticsRespFieldDocEntries },\n GetLoyaltySystemsStatisticsReq: { ...getLoyaltySystemsStatisticsReqFieldDocEntries },\n GetLoyaltySystemsStatisticsResp: { ...getLoyaltySystemsStatisticsRespFieldDocEntries },\n GetParticipationCountResp: { ...getParticipationCountRespFieldDocEntries },\n FileInfo: { ...fileInfoFieldDocEntries },\n PutUrlResp: { ...putUrlRespFieldDocEntries },\n UpdateFileIdResp: { ...updateFileIdRespFieldDocEntries },\n TransactionInfo: { ...transactionInfoFieldDocEntries },\n TorrowErrorClient: { ...torrowErrorClientFieldDocEntries },\n ActionHistoryType: { ...actionHistoryTypeFieldDocEntries },\n ActionHistoryState: { ...actionHistoryStateFieldDocEntries },\n AnnouncementState: { ...announcementStateFieldDocEntries },\n ItemViewSortCondition: { ...itemViewSortConditionFieldDocEntries },\n ParticipantType: { ...participantTypeFieldDocEntries },\n ParticipantState: { ...participantStateFieldDocEntries },\n AccountingTransactionState: { ...accountingTransactionStateFieldDocEntries },\n AccountingTransactionType: { ...accountingTransactionTypeFieldDocEntries },\n OperationType: { ...operationTypeFieldDocEntries },\n TorrowObjectType: { ...torrowObjectTypeFieldDocEntries },\n ItemSortCondition: { ...itemSortConditionFieldDocEntries },\n ObjectSortCondition: { ...objectSortConditionFieldDocEntries },\n AccountType: { ...accountTypeFieldDocEntries },\n AdvisedItemType: { ...advisedItemTypeFieldDocEntries },\n VerificationMethod: { ...verificationMethodFieldDocEntries },\n TokenStatus: { ...tokenStatusFieldDocEntries },\n CommunicationType: { ...communicationTypeFieldDocEntries },\n AnnouncementCategory: { ...announcementCategoryFieldDocEntries },\n AnnouncementPriority: { ...announcementPriorityFieldDocEntries },\n AnnouncementType: { ...announcementTypeFieldDocEntries },\n AnyoneAccess: { ...anyoneAccessFieldDocEntries },\n ArchiveState: { ...archiveStateFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n AvailableResources: { ...availableResourcesFieldDocEntries },\n CaseParticipantState: { ...caseParticipantStateFieldDocEntries },\n CaseParticipantType: { ...caseParticipantTypeFieldDocEntries },\n CaseState: { ...caseStateFieldDocEntries },\n CaseType: { ...caseTypeFieldDocEntries },\n DeleteState: { ...deleteStateFieldDocEntries },\n DeliveryChannel: { ...deliveryChannelFieldDocEntries },\n DeliveryStrategy: { ...deliveryStrategyFieldDocEntries },\n Gender: { ...genderFieldDocEntries },\n ImagePreviewSize: { ...imagePreviewSizeFieldDocEntries },\n NoteType: { ...noteTypeFieldDocEntries },\n ParticipationFieldRequirementType: { ...participationFieldRequirementTypeFieldDocEntries },\n ParticipationFieldType: { ...participationFieldTypeFieldDocEntries },\n PaymentProviderType: { ...paymentProviderTypeFieldDocEntries },\n ProfileType: { ...profileTypeFieldDocEntries },\n ProfileUserAvailability: { ...profileUserAvailabilityFieldDocEntries },\n ReminderLocationDirection: { ...reminderLocationDirectionFieldDocEntries },\n ReportDeliveryType: { ...reportDeliveryTypeFieldDocEntries },\n ShowCaseInTimetableType: { ...showCaseInTimetableTypeFieldDocEntries },\n TimetableDetailsVisibility: { ...timetableDetailsVisibilityFieldDocEntries },\n TicketState: { ...ticketStateFieldDocEntries },\n TicketPaymentConfirmationSource: { ...ticketPaymentConfirmationSourceFieldDocEntries },\n UserSettingsInfo: { ...userSettingsInfoFieldDocEntries },\n SolutionData: { ...solutionDataFieldDocEntries },\n LayoutTypeValues: { ...layoutTypeValuesFieldDocEntries },\n TimetableViewTypeValues: { ...timetableViewTypeValuesFieldDocEntries },\n ContextIconPresetValues: { ...contextIconPresetValuesFieldDocEntries },\n BlockInfo: { ...blockInfoFieldDocEntries },\n UsageCondition: { ...usageConditionFieldDocEntries },\n UsageType: { ...usageTypeEnumFieldDocEntries },\n UsageConditionType: { ...usageConditionTypeEnumFieldDocEntries },\n SessionDurationType: { ...sessionDurationTypeFieldDocEntries },\n TimeSelectionType: { ...timeSelectionTypeFieldDocEntries },\n StateManagementType: { ...stateManagementTypeFieldDocEntries },\n SessionPrecisionType: { ...sessionPrecisionTypeFieldDocEntries },\n UserAccessLevel: { ...userAccessLevelFieldDocEntries },\n LoyaltyCardIssueType: { ...loyaltyCardIssueTypeFieldDocEntries },\n LoyaltyCardUpdateKeyInformation: { ...loyaltyCardUpdateKeyInformationFieldDocEntries },\n LoyaltyCardUpdateNonKeyInformation: { ...loyaltyCardUpdateNonKeyInformationFieldDocEntries },\n ViewBlockSettings: { ...viewBlockSettingsFieldDocEntries },\n BlockSettings: { ...blockSettingsFieldDocEntries },\n Filter: { ...filterFieldDocEntries },\n Metrics: { ...metricsFieldDocEntries },\n PersonalSolutionData: { ...personalSolutionDataFieldDocEntries },\n NotificationProperties: { ...notificationPropertiesFieldDocEntries },\n UserDeliveryWay: { ...userDeliveryWayFieldDocEntries },\n DeviceSettingsInfo: { ...deviceSettingsInfoFieldDocEntries },\n};\n","/**\n * Профили пользователя (**User** `/api/v1/user/profiles`): ответы и методы класса `Profiles`.\n * Сам Профиль в данных — `ContactItem`; смысл `profileType` см. в `contactItemFieldDocEntries.profileType`.\n * Тело **`POST /api/v1/user/profiles`** в типах SDK — **`UserProfileItemForAdd`**.\n */\n// MCP method descriptions: write-prep by effects only; do not name the internal\n// profile write-defaults helper (not a public package export). Helper symbol stays\n// intentional in docs/sdk-maintenance-guide.md and facade @link JSDoc.\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const profilesSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/user/profiles`. Разворачивает ответ **`ProfileListResp`**: возвращает **`ContactItem[]`** (Профили текущего пользователя; не общий CRUD `/api/v1/contacts`). Пустой массив, если **`profileList`** отсутствует или **`null`**. Требуется Bearer пользователя.\",\n valueSchema: \"→ ContactItem[]\",\n },\n add: {\n description:\n \"`POST /api/v1/user/profiles`. Тело: **`UserProfileItemForAdd`** (поля контакта для write из **`ContactItemForCreateOrUpdate`** плюс **`profileType`**, **`profileProperties`**, **`hasTimetable`**). OpenAPI ссылается на **`ContactItem`**. Фасад разворачивает **`AddProfileResp.profile`** и возвращает **`ContactItem`**. Мутация учётки: создаёт Профиль; не путать с CRUD `/api/v1/contacts`. Перед POST фасад добивает `discriminator` / `publicityType` / non-empty `name` и contact write normalizations including `visitCard`.\",\n valueSchema: \"UserProfileItemForAdd → ContactItem\",\n },\n addByContactId: {\n description:\n \"`PUT /api/v1/user/profiles`. Тело в OpenAPI — **строка** (JSON-строка): `torrow id` уже существующего контакта, который нужно зарегистрировать как Профиль. Фасад возвращает **`ContactItem`** (`AddProfileResp.profile`). Не путать с `PUT` обновления обычного контакта по `/api/v1/contacts/{id}`.\",\n valueSchema: \"string (contactId) → ContactItem\",\n usage: \"Передай строку id существующего контакта; SDK сериализует её как JSON string.\",\n },\n updateProfileProperties: {\n description:\n \"`PUT /api/v1/user/profiles/{profileId}/profileproperties`. Тело: **`ProfileProperties`** (цвет карточки, доступность, заметка). Фасад возвращает **`torrowObject`** из ответа (если сервер его прислал), иначе `undefined`.\",\n valueSchema: \"ProfileProperties → TorrowObject | undefined\",\n },\n remove: {\n description:\n \"`DELETE /api/v1/user/profiles/{profileId}`. Удалить Профиль по id контакта. Фасад возвращает актуальный **`personalContactList`** как **`ContactItem[]`**. Не удаляй последний Профиль учётки и Профиль с живыми personal-link (как в apps).\",\n valueSchema: \"→ ContactItem[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileListRespFieldDocEntries = {\n profileList: {\n description:\n \"Массив контактов — **Профили** пользователя (`ContactItem`, ожидаемо с `profileType` вроде `MyProfile`). Пустой или отсутствует, если профилей нет.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const addProfileRespFieldDocEntries = {\n profile: {\n description: \"Созданный или связанный **Профиль** после операции добавления.\",\n valueSchema: \"ContactItem\",\n },\n personalContactList: {\n description: \"Устаревшее поле в схеме OpenAPI; предпочитай `profile` и актуальный список через `list`.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const removeProfileRespFieldDocEntries = {\n personalContactList: {\n description:\n \"Список контактов-Профилей после удаления (в том числе пустой), в форме ответа сервера на эту операцию.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateProfilePropertiesRespFieldDocEntries = {\n torrowObject: {\n description: \"Обёртка сервера над обновлённым объектом после смены свойств профиля (если вернулась).\",\n valueSchema: \"TorrowObject\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля тела `PUT .../profileproperties` — те же `ProfileProperties`, что у `ContactItem.profileProperties`. */\nexport const profilePropertiesFieldDocEntries = {\n id: {\n description: \"Идентификатор сущности свойств профиля (если задан в API).\",\n valueSchema: \"string | null\",\n },\n profileUserAvailability: {\n description: \"Доступность владельца профиля для отображения (занят, свободен, скрыт и т.д.).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: {\n description: \"Текстовая заметка к доступности.\",\n valueSchema: \"string | null\",\n },\n color: {\n description: \"Цвет акцента карточки Профиля в UI (часто hex).\",\n valueSchema: \"string | null\",\n examples: [\"#4a90d9\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilesSdkMethodFieldDocs = mapFieldDocsToStrings(profilesSdkMethodFieldDocEntries);\nexport const profileListRespFieldDocs = mapFieldDocsToStrings(profileListRespFieldDocEntries);\nexport const addProfileRespFieldDocs = mapFieldDocsToStrings(addProfileRespFieldDocEntries);\nexport const removeProfileRespFieldDocs = mapFieldDocsToStrings(removeProfileRespFieldDocEntries);\nexport const updateProfilePropertiesRespFieldDocs = mapFieldDocsToStrings(\n updateProfilePropertiesRespFieldDocEntries,\n);\nexport const profilePropertiesFieldDocs = mapFieldDocsToStrings(profilePropertiesFieldDocEntries);\n","/**\n * Каталог **Профилей пользователя** (User API) для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n addProfileRespFieldDocEntries,\n profileListRespFieldDocEntries,\n profilePropertiesFieldDocEntries,\n profilesSdkMethodFieldDocEntries,\n removeProfileRespFieldDocEntries,\n updateProfilePropertiesRespFieldDocEntries,\n} from \"./user-profiles-field-docs.js\";\n\nexport const mcpUserProfilesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ProfilesSdkMethods: { ...profilesSdkMethodFieldDocEntries },\n ProfileListResp: { ...profileListRespFieldDocEntries },\n AddProfileResp: { ...addProfileRespFieldDocEntries },\n RemoveProfileResp: { ...removeProfileRespFieldDocEntries },\n UpdateProfilePropertiesResp: { ...updateProfilePropertiesRespFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n};\n","/**\n * Описания **представлений (views)** и тел запросов для MCP / агентов.\n * REST: `/api/v1/{domain}/.../views/...`; public SDK скрывает domain и выводит его из child ID, когда это возможно.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.user.listForParent`: `GET /api/v1/{domain}/{parentId}/views/user`. Список пользовательских представлений дочерних элементов под родителем (mind map). Query: `tags`, `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`. Ответ: массив `*View` по домену (`ContactView`, `NoteView`, …).\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.user.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/user`. Прямое создание User view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.saveToMindMap`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: массив **`ViewInfo`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n listAll: {\n description:\n \"`client.views.user.listAll`: `GET /api/v1/{domain}/views/user`. Все пользовательские представления по типу элемента без фильтра по одному `parentId`. Query: `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`.\",\n valueSchema: \"TorrowItemType + ViewListRootQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n get: {\n description:\n \"`client.views.user.get`: `GET /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.user.delete`: `DELETE /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`** (`DeleteResponse.deleteCount`).\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.user.updateOrder(parentId, orderedViews)`: `POST .../views/user/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const pinnedViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.pinned.listForParent`: `GET /api/v1/{domain}/{parentId}/views/pinned`. Список закреплённых; query как у `client.views.user.listForParent`.\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.pinned.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/pinned`. Прямое создание Pinned view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.includeToParent`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n get: {\n description:\n \"`client.views.pinned.get`: `GET .../views/pinned/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.pinned.delete`: `DELETE .../views/pinned/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`**.\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.pinned.updateOrder(parentId, orderedViews)`: `POST .../views/pinned/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocEntries = {\n pin: {\n description:\n \"`client.views.pin`: `POST .../views/user/{childId}/pin`. Query `alias`. Ответ: `ObjectInfo`. Конвертация **User → Pinned** (`LinkType`).\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`. Это переход User → Pinned, а не первоначальное создание связи. Для доменного создания используй `client.relations.saveToMindMap` / `includeToParent`; для списков и порядка — `client.views.*`. Связи: `docs/agents/relations-flow.md`.\",\n },\n unpin: {\n description:\n \"`client.views.unpin`: `POST .../unpin`. Для домена **`contacts`** путь: `.../views/pinned/{childId}/unpin`; для остальных (`notes`, `contexts`, `resources`, `services`, `cases`, `calendars`): `.../views/user/{childId}/unpin`. Query `alias`. Ответ: `ObjectInfo`. **Pinned → User**.\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`; затем выбирает сегмент `user` или `pinned`. Это переход Pinned → User, не замена `relations.exclude*`; не дублируется на `RelationsFacade`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createViewListReqFieldDocEntries = {\n childIdList: {\n description: \"Список id дочерних элементов, для которых создаются представления под выбранным родителем. В SDK facade список должен быть непустым и однотипным, поскольку определяет REST domain.\",\n valueSchema: \"string[] | null\",\n examples: ['[\"550e8400-e29b-41d4-a716-446655440000\"]'],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createViewListReqFieldDocs = mapFieldDocsToStrings(createViewListReqFieldDocEntries);\n\nexport const updateViewListOrderReqFieldDocEntries = {\n orderedViewList: {\n description: \"Новый порядок: пары `childId` и числовой `order` для сортировки в UI.\",\n valueSchema: \"ViewOrder[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateViewListOrderReqFieldDocs = mapFieldDocsToStrings(updateViewListOrderReqFieldDocEntries);\n\nexport const viewInfoFieldDocEntries = {\n itemLinkKey: {\n description: \"Ключ связи родитель–потомок для созданного представления.\",\n valueSchema: \"ItemLinkKey\",\n },\n itemLinkInfo: {\n description: \"Мета связи и объекта после операции.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewInfoFieldDocs = mapFieldDocsToStrings(viewInfoFieldDocEntries);\n\nexport const createViewListRespFieldDocEntries = {\n createdViewInfoList: {\n description: \"Список созданных view-записей с линками и метаданными.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateViewListOrderRespFieldDocEntries = {\n updatedViewInfoList: {\n description: \"Список view, для которых успешно обновился `order`.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deleteResponseFieldDocEntries = {\n deleteCount: {\n description:\n \"Количество удалённых записей. Для view-операций обычно 0 или 1; для `client.*.delete` — 1 при удалении только элемента, больше при `cascade: true` и/или `withPinnedItems: true` (см. **`ItemDeleteQuery`**).\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocs = mapFieldDocsToStrings(viewsSdkMethodFieldDocEntries);\nexport const userViewsSdkMethodFieldDocs = mapFieldDocsToStrings(userViewsSdkMethodFieldDocEntries);\nexport const pinnedViewsSdkMethodFieldDocs = mapFieldDocsToStrings(pinnedViewsSdkMethodFieldDocEntries);\nexport const createViewListRespFieldDocs = mapFieldDocsToStrings(createViewListRespFieldDocEntries);\nexport const updateViewListOrderRespFieldDocs = mapFieldDocsToStrings(updateViewListOrderRespFieldDocEntries);\nexport const deleteResponseFieldDocs = mapFieldDocsToStrings(deleteResponseFieldDocEntries);\n","/**\n * Каталог полей **представлений (views)** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n createViewListReqFieldDocEntries,\n createViewListRespFieldDocEntries,\n deleteResponseFieldDocEntries,\n updateViewListOrderRespFieldDocEntries,\n updateViewListOrderReqFieldDocEntries,\n viewInfoFieldDocEntries,\n pinnedViewsSdkMethodFieldDocEntries,\n userViewsSdkMethodFieldDocEntries,\n viewsSdkMethodFieldDocEntries,\n} from \"./views-field-docs.js\";\n\nexport const mcpViewsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ViewsSdkMethods: { ...viewsSdkMethodFieldDocEntries },\n UserViewsSdkMethods: { ...userViewsSdkMethodFieldDocEntries },\n PinnedViewsSdkMethods: { ...pinnedViewsSdkMethodFieldDocEntries },\n CreateViewListReq: { ...createViewListReqFieldDocEntries },\n CreateViewListResp: { ...createViewListRespFieldDocEntries },\n UpdateViewListOrderReq: { ...updateViewListOrderReqFieldDocEntries },\n UpdateViewListOrderResp: { ...updateViewListOrderRespFieldDocEntries },\n DeleteResponse: { ...deleteResponseFieldDocEntries },\n ViewInfo: { ...viewInfoFieldDocEntries },\n};\n","/**\n * Описания полей **запросов/ответов связей и mind map** (`components.schemas` в OpenAPI),\n * в том же формате {@link ItemFieldDoc}, что и у *Item — для промптов и MCP `inputSchema`.\n *\n * Соответствие REST: {@link RelationsFacade} в `src/resources/relations/RelationsFacade.ts`.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/**\n * Соответствие методов `TorrowClient.relations` телам запросов и путям REST.\n * Удобно для MCP-инструментов с именами `torrow_relations_include_to_parent` и т.д.\n */\nexport const relationsSdkMethodFieldDocEntries = {\n includeToParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/items`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order` и свойства item), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. **Pinned link** (`LinkType.Pinned`): доменная операция создания связи parent → child. Для чтения и порядка результата используй `client.views.pinned.*`.\",\n valueSchema: \"parentId + ItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage: \"Domain SDK выводит из `parentId`. Канон apps AttachItemTask. Pin User→Pinned — `client.views.pin`, не этот метод. Не путай с прямым `views.pinned.create`. См. `docs/agents/relations-flow.md`.\",\n },\n includeForUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/foruser`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order`), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. Batch-операция создания нескольких User-связей под parent (`LinkType.User`). Для одного item предпочитай `saveToMindMap`; для чтения используй `client.views.user.*`.\",\n valueSchema: \"parentId + BaseItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. OpenAPI batch. torrow-apps для user link вызывает `saveToMindMap`, не этот эндпоинт. Предпочитай `saveToMindMap` в продукте.\",\n },\n excludeFromParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/items`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия Pinned-связи с родителя; для удаления конкретного view есть отдельный `client.views.pinned.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n excludeFromUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/fromuser`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия User-связи; для удаления конкретного view есть отдельный `client.views.user.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n includeToGroups: {\n description:\n \"`PUT /api/v1/{domain}/include/togroups`. Тело: `IncludeToGroupsReq`. Ответ: `IncludeExcludeResp`. Массовое включение в группы (ACL).\",\n valueSchema: \"IncludeToGroupsReq → IncludeExcludeResp\",\n usage: \"Domain SDK выводит из `groupIds`; список должен быть непустым и однотипным. Члены группы — `search.*(groupIds)`, не `listGroups`. UI apps часто `updateGroups` на item.\",\n },\n excludeFromGroups: {\n description:\n \"`PUT /api/v1/{domain}/exclude/fromgroups`. Тело: `ExcludeFromGroupsReq`. Ответ: `ExcludeResp`.\",\n valueSchema: \"ExcludeFromGroupsReq → ExcludeResp\",\n usage: \"Domain SDK выводит из `itemIds`; список должен быть непустым и однотипным.\",\n },\n saveToMindMap: {\n description:\n \"`PUT /api/v1/{domain}/{itemId}/savetomindmap`. Тело: `SaveItemToMindMapReq`. Ответ: `Participation`. Доменная операция сохранения **одного item** в личную структуру (`LinkType.User`); для чтения результата используй `client.views.user.*`.\",\n valueSchema: \"SaveItemToMindMapReq → Participation\",\n usage:\n \"Domain SDK выводит из `itemId` аргумента. Передавай `offlinable: true`, `parentItemId`, `userProfileId`. Не путать с participation accept на item-фасаде.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemLinkKeyFieldDocEntries = {\n parentId: {\n description: \"Идентификатор родительского элемента в связи (mind map / иерархия).\",\n valueSchema: \"string (torrow id)\",\n },\n itemId: {\n description: \"Идентификатор дочернего или связанного элемента.\",\n valueSchema: \"string (torrow id)\",\n },\n ownerId: {\n description: \"Владелец связи (профиль/пользователь), если применимо к персональному представлению.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** OpenAPI `ItemLink` — связь parent↔child в view/hit (`NoteView.itemLink` и т.п.). */\nexport const itemLinkFieldDocEntries = {\n parentId: {\n description: \"Родительский элемент связи.\",\n valueSchema: \"string | null\",\n },\n meta: {\n description: \"Метаданные связи (версия и т.п.).\",\n valueSchema: \"ObjectInfo\",\n },\n itemId: {\n description: \"Дочерний / связанный элемент.\",\n valueSchema: \"string | null\",\n },\n linkType: {\n description: \"Тип связи User / Pinned (и пр.). Флоу: `docs/agents/relations-flow.md`.\",\n valueSchema: \"LinkType\",\n usage: \"Assert в examples — best-effort; membership в listUser/listPinned — канон проверки.\",\n },\n order: {\n description: \"Порядок среди соседей под родителем.\",\n valueSchema: \"int32 | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для этой связи.\",\n valueSchema: \"string | null\",\n },\n tags: {\n description: \"Теги связи.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includedLinkMetaFieldDocEntries = {\n key: {\n description: \"Составной ключ созданной или обновлённой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n info: {\n description: \"Мета связи (версия и т.п.) после include.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludedLinkMetaFieldDocEntries = {\n key: {\n description: \"Ключ удалённой или затронутой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n count: {\n description: \"Число затронутых связей/записей для данного ключа (контракт API).\",\n examples: [\"1\", \"0\"],\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Torrow id элемента, который включают под родителя в иерархии.\",\n usage: \"Обязательное поле в каждом элементе `itemPropertiesList` для `includeToParent`.\",\n },\n order: {\n description: \"Порядок сортировки среди детей одного родителя (меньше — выше в списке, согласно клиенту).\",\n examples: [\"0\", \"1\", \"10\"],\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги связи элемента с родителем (фильтры, группировка в UI).\",\n examples: ['[\"важное\"]', \"[]\"],\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для данной связи.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее: теги по id элемента. Предпочитать `tags`.\",\n valueSchema: \"deprecated map\",\n },\n aliasByItemId: {\n description: \"Устаревшее: псевдонимы по id. Предпочитать `alias`.\",\n valueSchema: \"deprecated map\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const baseItemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Элемент, который добавляют в персональное представление пользователя под `parentId` маршрута.\",\n usage: \"Используется в `IncludeForUserReq` (include/foruser).\",\n },\n order: {\n description: \"Порядок узла в списке представления пользователя.\",\n examples: [\"0\", \"1\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const groupItemPropertiesFieldDocEntries = {\n itemId: {\n description:\n \"Элемент, включаемый в каждую из групп из `IncludeToGroupsReq.groupIds` (список id групп задаётся на уровне запроса, не здесь).\",\n },\n participantType: {\n description: \"Роль участия элемента в группе (Owner, Editor, Reader, …).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"Editor\", \"Owner\"],\n },\n order: {\n description: \"Порядок внутри группы.\",\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги для связи элемент–группа.\",\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним в группе.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n aliasByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToParentReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Список детей, привязываемых к `parentId` из URL (`PUT .../{parentId}/include/items`).\",\n valueSchema: \"ItemProperties[]\",\n usage: \"Сценарий «прикрепить элемент к контакту/контексту/…» в продукте.\",\n },\n versionToCheck: {\n description: \"Ожидаемая версия родителя для оптимистичной блокировки; несовпадение — конфликт.\",\n examples: [\"1\", \"18\"],\n valueSchema: \"int32 | null\",\n usage: \"Берётся из `parent.meta.version`, если нужна проверка.\",\n },\n isNeedAnnouncement: {\n description: \"Сгенерировать уведомление/анонс об изменении для подписчиков.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeForUserReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы и порядок для добавления в mind map **текущего пользователя** под родителем из пути.\",\n valueSchema: \"BaseItemProperties[]\",\n usage: \"Маршрут `include/foruser`; отличается от include/items тем, что работает с персональным представлением.\",\n },\n versionToCheck: {\n description: \"Версия родителя для проверки при изменении (если API ожидает).\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Нужен ли анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeReqFieldDocEntries = {\n itemIds: {\n description: \"Список id элементов, которые отвязывают от родителя (`exclude/items`) или убирают из персонального вида (`exclude/fromuser`).\",\n valueSchema: \"string[]\",\n usage: \"Путь задаёт контекст: исключение из иерархии родителя vs из mind map пользователя.\",\n },\n versionToCheck: {\n description: \"Версия родителя для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс об изменении.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToGroupsReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы с опциональной ролью (`participantType`), порядком и тегами; каждый `itemId` будет связан со **всеми** `groupIds`.\",\n valueSchema: \"GroupItemProperties[]\",\n },\n parentId: {\n description: \"Общий родительский контекст для операции (если задан в API).\",\n valueSchema: \"string | null\",\n },\n groupIds: {\n description: \"Идентификаторы групп (элементов-групп), в которые включают перечисленные `itemId`.\",\n valueSchema: \"string[]\",\n usage: \"Маршрут без `{parentId}` в пути: `PUT /api/v1/{domain}/include/togroups`.\",\n },\n recursive: {\n description: \"Рекурсивное включение в подгруппы (семантика сервера).\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n versionToCheck: {\n description: \"Версия для проверки согласованности.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeFromGroupsReqFieldDocEntries = {\n groupIds: {\n description: \"Группы, из которых убирают элементы.\",\n valueSchema: \"string[]\",\n },\n itemIds: {\n description: \"Элементы для исключения из указанных групп.\",\n valueSchema: \"string[]\",\n },\n versionToCheck: {\n description: \"Версия для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const saveItemToMindMapReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль пользователя, для чьего mind map применяется операция (если отличается от токена).\",\n valueSchema: \"string | null\",\n },\n parentItemId: {\n description:\n \"Родитель для **User-link placement** (`client.relations.saveToMindMap`). Для participation accept часто не нужен — см. `participation-flow.md`. `null` — по правилам API (корень / снятие).\",\n valueSchema: \"string | null\",\n },\n alias: {\n description: \"Отображаемый псевдоним узла в карте.\",\n valueSchema: \"string | null\",\n },\n offlinable: {\n description:\n \"Офлайн-доступность узла. Для placement apps обычно `true`; не обязателен для accept offer / `securityToken` — см. `participation-flow.md`.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n order: {\n description: \"Позиция среди соседей в ветке.\",\n valueSchema: \"int32 | null\",\n },\n versionToCheck: {\n description: \"Версия **самого элемента** `itemId` из пути, если требуется проверка.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n securityToken: {\n description: \"Гостевой или ограниченный доступ по токену (как в других операциях API).\",\n valueSchema: \"string | null\",\n },\n participantType: {\n description: \"Тип участия при сохранении в mind map (например PublicReader для публичной карточки).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"PublicReader\", \"Owner\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeRespFieldDocEntries = {\n success: {\n description: \"Признак успешного include на стороне сервера.\",\n examples: [\"true\"],\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Метаданные по созданным/изменённым связям.\",\n valueSchema: \"IncludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeRespFieldDocEntries = {\n success: {\n description: \"Успешность exclude.\",\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Сводка по исключённым связям (ключи и счётчики).\",\n valueSchema: \"ExcludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeExcludeRespFieldDocEntries = {\n includeResp: {\n description: \"Результат части include, если в одном ответе объединены операции.\",\n valueSchema: \"IncludeResp\",\n },\n excludeResp: {\n description: \"Результат части exclude.\",\n valueSchema: \"ExcludeResp\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const relationsSdkMethodFieldDocs = mapFieldDocsToStrings(\n relationsSdkMethodFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const itemPropertiesFieldDocs = mapFieldDocsToStrings(\n itemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const baseItemPropertiesFieldDocs = mapFieldDocsToStrings(\n baseItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const groupItemPropertiesFieldDocs = mapFieldDocsToStrings(\n groupItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeToParentReqFieldDocs = mapFieldDocsToStrings(\n includeToParentReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeForUserReqFieldDocs = mapFieldDocsToStrings(\n includeForUserReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeReqFieldDocs = mapFieldDocsToStrings(excludeReqFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeToGroupsReqFieldDocs = mapFieldDocsToStrings(\n includeToGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeFromGroupsReqFieldDocs = mapFieldDocsToStrings(\n excludeFromGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const saveItemToMindMapReqFieldDocs = mapFieldDocsToStrings(\n saveItemToMindMapReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const includeRespFieldDocs = mapFieldDocsToStrings(\n includeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeRespFieldDocs = mapFieldDocsToStrings(\n excludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeExcludeRespFieldDocs = mapFieldDocsToStrings(\n includeExcludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkKeyFieldDocs = mapFieldDocsToStrings(\n itemLinkKeyFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkFieldDocs = mapFieldDocsToStrings(\n itemLinkFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includedLinkMetaFieldDocs = mapFieldDocsToStrings(\n includedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludedLinkMetaFieldDocs = mapFieldDocsToStrings(\n excludedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * Каталог описаний схем **связей и mind map** для MCP / агентов.\n * Имена верхнего уровня совпадают с `components.schemas` в OpenAPI (кроме `RelationsSdkMethods`).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mcpBookingFieldCatalog } from \"./mcp-booking-catalog.js\";\nimport { mcpItemFieldCatalog } from \"./mcp-field-catalog.js\";\nimport { mcpAuthFieldCatalog } from \"./mcp-auth-catalog.js\";\nimport { mcpSearchFieldCatalog } from \"./mcp-search-catalog.js\";\nimport { mcpNotesFieldCatalog } from \"./mcp-notes-catalog.js\";\nimport { mcpOperationsFieldCatalog } from \"./mcp-operations-catalog.js\";\nimport { mcpUserProfilesFieldCatalog } from \"./mcp-user-profiles-catalog.js\";\nimport { mcpViewsFieldCatalog } from \"./mcp-views-catalog.js\";\nimport {\n baseItemPropertiesFieldDocEntries,\n excludedLinkMetaFieldDocEntries,\n excludeFromGroupsReqFieldDocEntries,\n excludeReqFieldDocEntries,\n excludeRespFieldDocEntries,\n includeExcludeRespFieldDocEntries,\n includeForUserReqFieldDocEntries,\n includedLinkMetaFieldDocEntries,\n includeRespFieldDocEntries,\n includeToGroupsReqFieldDocEntries,\n includeToParentReqFieldDocEntries,\n itemLinkKeyFieldDocEntries,\n itemLinkFieldDocEntries,\n itemPropertiesFieldDocEntries,\n groupItemPropertiesFieldDocEntries,\n relationsSdkMethodFieldDocEntries,\n saveItemToMindMapReqFieldDocEntries,\n} from \"./relations-field-docs.js\";\nimport { linkTypeFieldDocEntries } from \"./shared-enum-field-docs.js\";\n\nexport const mcpRelationFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы класса `TorrowClient.relations` ↔ OpenAPI пути и схемы тел. */\n RelationsSdkMethods: { ...relationsSdkMethodFieldDocEntries },\n /** `ItemLink.linkType` — User / Pinned (флоу: `docs/agents/relations-flow.md`). */\n LinkType: { ...linkTypeFieldDocEntries },\n ItemLink: { ...itemLinkFieldDocEntries },\n ItemLinkKey: { ...itemLinkKeyFieldDocEntries },\n IncludedLinkMeta: { ...includedLinkMetaFieldDocEntries },\n ExcludedLinkMeta: { ...excludedLinkMetaFieldDocEntries },\n ItemProperties: { ...itemPropertiesFieldDocEntries },\n BaseItemProperties: { ...baseItemPropertiesFieldDocEntries },\n GroupItemProperties: { ...groupItemPropertiesFieldDocEntries },\n IncludeToParentReq: { ...includeToParentReqFieldDocEntries },\n IncludeForUserReq: { ...includeForUserReqFieldDocEntries },\n ExcludeReq: { ...excludeReqFieldDocEntries },\n IncludeToGroupsReq: { ...includeToGroupsReqFieldDocEntries },\n ExcludeFromGroupsReq: { ...excludeFromGroupsReqFieldDocEntries },\n SaveItemToMindMapReq: { ...saveItemToMindMapReqFieldDocEntries },\n IncludeResp: { ...includeRespFieldDocEntries },\n ExcludeResp: { ...excludeRespFieldDocEntries },\n IncludeExcludeResp: { ...includeExcludeRespFieldDocEntries },\n};\n\n/** Объединение каталогов *Item, связей, записи/оплаты и представлений — один объект для генерации MCP. */\nexport const mcpFullFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ...mcpItemFieldCatalog,\n ...mcpRelationFieldCatalog,\n ...mcpBookingFieldCatalog,\n ...mcpViewsFieldCatalog,\n ...mcpUserProfilesFieldCatalog,\n ...mcpAuthFieldCatalog,\n ...mcpSearchFieldCatalog,\n ...mcpNotesFieldCatalog,\n ...mcpOperationsFieldCatalog,\n};\n\nexport { mcpAuthFieldCatalog };\nexport { mcpSearchFieldCatalog };\nexport { mcpNotesFieldCatalog };\nexport { mcpOperationsFieldCatalog };\nexport { mcpBookingFieldCatalog };\nexport { mcpViewsFieldCatalog };\nexport { mcpUserProfilesFieldCatalog };\n"],"mappings":"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;AAAA,EAChI,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,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","names":["availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageTypeFieldDocs","usageConditionTypeFieldDocEntries","usageConditionTypeFieldDocs","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageConditionTypeFieldDocEntries","profilePropertiesFieldDocEntries","profilePropertiesFieldDocEntries"]}
1
+ {"version":3,"sources":["../../../src/field-docs/field-doc-entry.ts","../../../src/field-docs/torrow-item-base.ts","../../../src/field-docs/nested/contact-visit-card.ts","../../../src/field-docs/contact-item.ts","../../../src/field-docs/note-item.ts","../../../src/field-docs/notes-field-docs.ts","../../../src/resources/contexts/context-icon-preset.ts","../../../src/field-docs/context-item.ts","../../../src/field-docs/calendar-item.ts","../../../src/field-docs/loyalty-system-item.ts","../../../src/field-docs/session-checkin-field-docs.ts","../../../src/field-docs/resource-item.ts","../../../src/field-docs/service-item.ts","../../../src/field-docs/case-item.ts","../../../src/field-docs/nested/object-info.ts","../../../src/field-docs/mcp-field-catalog.ts","../../../src/field-docs/booking-wizard-field-docs.ts","../../../src/field-docs/mcp-booking-catalog.ts","../../../src/field-docs/auth-token-field-docs.ts","../../../src/field-docs/mcp-auth-catalog.ts","../../../src/field-docs/search-field-docs.ts","../../../src/field-docs/mcp-search-catalog.ts","../../../src/field-docs/mcp-notes-catalog.ts","../../../src/field-docs/loyalty-access-field-docs.ts","../../../src/field-docs/operations-struct-field-docs.ts","../../../src/field-docs/block-reason-field-docs.ts","../../../src/field-docs/api-keys-field-docs.ts","../../../src/field-docs/contact-communication-field-docs.ts","../../../src/field-docs/item-delete-query-field-docs.ts","../../../src/field-docs/item-social-facet-field-docs.ts","../../../src/resources/common/implicit-tag-params.ts","../../../src/field-docs/implicit-tag-params-field-docs.ts","../../../src/field-docs/operations-field-docs.ts","../../../src/field-docs/solution-user-settings-field-docs.ts","../../../src/field-docs/shared-enum-field-docs.ts","../../../src/field-docs/torrow-id-field-docs.ts","../../../src/field-docs/mcp-operations-catalog.ts","../../../src/field-docs/user-profiles-field-docs.ts","../../../src/field-docs/mcp-user-profiles-catalog.ts","../../../src/field-docs/views-field-docs.ts","../../../src/field-docs/mcp-views-catalog.ts","../../../src/field-docs/relations-field-docs.ts","../../../src/field-docs/mcp-relation-catalog.ts"],"sourcesContent":["/**\n * Структурированное описание поля DTO для **ИИ и генерации MCP-инструментов**\n * (параметры `inputSchema`, описания аргументов, few-shot).\n *\n * Строковый вид для промптов: {@link fieldDocToString}.\n */\nexport type ItemFieldDoc = {\n /** Смысл поля и формат значения. */\n description: string;\n /** Примеры литералов (как в API/JSON), не выдумывать формат id — только иллюстрация. */\n examples?: readonly string[];\n /** Коротко: типичный сценарий использования в клиенте (UI, права, бизнес-поток). */\n usage?: string;\n /** Ссылка на вложенную схему OpenAPI `components.schemas.*`. */\n valueSchema?: string;\n};\n\nexport function fieldDocToString(doc: ItemFieldDoc): string {\n const parts = [doc.description.trim()];\n if (doc.examples?.length) {\n parts.push(`Примеры: ${doc.examples.join(\"; \")}.`);\n }\n if (doc.usage) {\n parts.push(`В продукте: ${doc.usage}`);\n }\n if (doc.valueSchema) {\n parts.push(`Схема значения: ${doc.valueSchema}.`);\n }\n return parts.join(\" \");\n}\n\n/** Сводка в одну строку для обратной совместимости и простых промптов. */\nexport function mapFieldDocsToStrings<const T extends Record<string, ItemFieldDoc>>(\n entries: T,\n): { [K in keyof T]: string } {\n const out = {} as { [K in keyof T]: string };\n for (const key of Object.keys(entries) as (keyof T)[]) {\n out[key] = fieldDocToString(entries[key]);\n }\n return out;\n}\n","/**\n * База **`TorrowItem`** — структурированные записи + строковая проекция.\n * @see components.schemas.TorrowItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowItemBaseFieldDocEntries = {\n id: {\n description:\n \"Стабильный идентификатор элемента в Torrow (torrow id), строка. В путях REST: `/api/v1/{domain}/{torrowId}`.\",\n examples: [\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"],\n usage:\n \"При create/update передаётся в URL/теле; клиент хранит id после ответа сервера. Связь с операциями блокировки/удаления по itemId.\",\n },\n name: {\n description: \"Отображаемое имя элемента в списках, карточке и поиске.\",\n examples: [\"Моя услуга\", \"Иван Иванов\", \"Каталог услуг\"],\n usage:\n \"Заголовок в mind-map и списках; часто редактируется вместе с masterInfo. У контактов с заполненным `visitCard` часто совпадает с отображаемым именем в слоте FullName.\",\n },\n uniqueName: {\n description:\n \"Уникальное имя в рамках правил продукта (slug для публичной ссылки на хостинге продукта). Может быть пустым.\",\n examples: [\"demo_booking\", \"city_services\"],\n usage:\n \"Проверка уникальности на сервере; используется в URL публичной карточки. Не путать с id элемента.\",\n },\n image: {\n description: \"Метаданные основного изображения/аватара элемента.\",\n valueSchema: \"FileInfo\",\n usage:\n \"Превью в карточке; загрузка байтов через `.../image/puturl` (`fileId`, опционально `fileName`/`fileSize` в query), затем в теле **`create`**/**`update`** — **`{ id }`** (как torrow-apps). В ответах GET — полный **FileInfo** (`url`, `fileName`, …). **image/info**, **updateImageId** — после создания.\",\n },\n masterInfo: {\n description: \"Заголовок, подзаголовок, локализованные строки для карточки и анонса.\",\n valueSchema: \"MasterInfo\",\n usage: \"Отображение в шапке элемента; различается по типам элементов.\",\n },\n publicityType: {\n description: \"Кто может видеть элемент и как выдаётся доступ (персональный, по ссылке, публичный и т.д.).\",\n examples: [\n \"Personal\",\n \"Link\",\n \"PublicAvailable\",\n \"PublicWithRequest\",\n \"Private\",\n \"Undefined\",\n ],\n usage:\n \"Пайп `ttPublicityType` и настройки создания: Personal по умолчанию в формах; Link при создании дочернего ресурса от родителя (см. resource-item-business). Для карточек «только по ссылке» часто сочетается с `anyoneAccess: Read` и отключённым поиском (`searchMode: NoneSearchMode`). Текстовый **`client.search.*`** (contacts/notes/…) индексирует только **`PublicAvailable`** / **`PublicWithRequest`**; смена — **`updatePublicity`** (см. **`docs/agents/participation-flow.md`** §3).\",\n },\n searchMode: {\n description: \"Участие элемента в поиске/выдаче (контракт API).\",\n examples: [\"UnknownSearchMode\", \"NoneSearchMode\", \"Partial\", \"Full\"],\n usage:\n \"Фильтрация в списках и индексация. `NoneSearchMode` — элемент не ищется в общей выдаче, но может открываться по прямой ссылке/uniqueName. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n anyoneAccess: {\n description: \"Параметры анонимного или широкого доступа без явного участия.\",\n valueSchema: \"AnyoneAccess\",\n examples: [\"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n usage:\n \"С `publicityType: Link` и `Read` аноним может читать карточку по ссылке в пределах прав сервера. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n tags: {\n description: \"Список строковых тегов (хэштеги) для группировки и фильтров.\",\n examples: [\"работа\", \"семья\", \"срочно\"],\n },\n rating: {\n description: \"Агрегированный рейтинг/оценки, если включены для типа.\",\n valueSchema: \"Rating\",\n },\n personalInfo: {\n description:\n \"Персональное участие текущего профиля в элементе: роль участника, порядок сортировки, напоминания, тип контента.\",\n valueSchema: \"PersonalInfo\",\n usage:\n \"В сервисе проверяется itemContentType Full для сценариев check-in; права через OperationType на item.\",\n },\n blockInfo: {\n description: \"Состояние и причина блокировки элемента.\",\n valueSchema: \"BlockInfo\",\n usage:\n \"Методы block/unblock по типу объекта (Case, Contact, Note, …). Выполняет только **администратор Torrow**; обычная сессия — HTTP 403.\",\n },\n groupInfo: {\n description: \"Связь с группами, родителями, иерархией mind-map.\",\n valueSchema: \"GroupInfo\",\n },\n solutionData: {\n description: \"Предметная конфигурация «решения» под тип элемента.\",\n valueSchema: \"SolutionData\",\n usage:\n \"У контакта часто задаёт раскладку карточки: `viewBlockSettings.blockSettings[]` с `name`, `order` и **числовым** `objectType` (в продукте: 1003 — заметка, 1005 — услуга и т.д.; см. константы клиента `NOTE`/`SERVICE`). Строковые имена типов в других полях (`childItemStats.objectType`) приходят как enum-строки.\",\n },\n childItemStats: {\n description: \"Агрегированная статистика по дочерним элементам (количества по типам).\",\n valueSchema: \"ChildItemStat[]\",\n examples: [\n '[{\"objectType\":\"Service\",\"itemCount\":2},{\"objectType\":\"Note\",\"itemCount\":1}]',\n ],\n usage:\n \"На странице услуги: решение показывать ли check-in при отсутствии детей. Для контакта обычно приходит при `GET .../contacts/{id}?includeChildTypes=true` (см. OpenAPI). Без авторизации список дочерних id через отдельные эндпоинты mind-map может быть недоступен.\",\n },\n feedbackOptions: {\n description: \"Настройки сбора отзывов и обратной связи.\",\n valueSchema: \"FeedbackOptions\",\n },\n integrationIds: {\n description: \"Идентификаторы подключённых интеграций (внешние системы).\",\n examples: [\"integration-uuid-1\"],\n },\n meta: {\n description:\n \"Служебная мета: версия объекта для оптимистичных обновлений, soft-delete, архив, даты.\",\n valueSchema: \"ObjectInfo\",\n usage: \"При update/delete передаётся `versionToCheck` из `meta.version` в query (см. описание метода в OpenAPI).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemBaseFieldDocs = mapFieldDocsToStrings(torrowItemBaseFieldDocEntries);\n","/**\n * Подробности **`ContactItem.visitCard`** и полей **`ContactVisitCardField`**.\n *\n * Это поле задаёт **слоты отображения** (визитная вёрстка контакта), а не сущность «Профиль пользователя».\n * Профиль — отдельный продуктовый и API-контур (`profileType`, операции **`/api/v1/user/profiles`**).\n *\n * `expression` в API — JSON в виде **строки**: парсинг на стороне клиента, тип слота задаёт источник данных\n * (поля контакта, `communications`, `addresses`). Клиент может пересчитывать отображаемую строку `value`\n * из `expression` и актуальных полей контакта перед сохранением.\n */\nimport type { ItemFieldDoc } from \"../field-doc-entry.js\";\n\nexport const contactVisitCardFieldDoc: ItemFieldDoc = {\n valueSchema: \"ContactVisitCard\",\n description:\n \"Структура **слотов отображения** контакта (массив `fields`): что показать в блоке «визитка» в UI. Для **контакта** в продукте длина `fields` фиксирована: **ровно три элемента** (слоты с `number` 0…2); лишние записи не используйте при сохранении через API. Заполняется у обычных контактов и у **Профиля** пользователя (контакт с `profileType`, напр. `MyProfile`), но **не заменяет** Профиль: Профиль — это контакт, привязанный к пользователю и получаемый через API **User** (`/api/v1/user/profiles`), см. `ContactItem.profileType`. У каждого слота есть порядковый номер (`number` в API), сохранённая строка `value` и поле `expression` — **отдельная JSON-строка** (в OpenAPI тип string), внутри объект с полем `type` и при необходимости `rid`. Тип задаёт, **из каких полей контакта** (или из какой записи в `communications`/`addresses`) брать текст при показе и при пересчёте на клиенте.\",\n examples: [\n '{\"type\":\"FullName\"}',\n '{\"type\":\"LastNameFirstName\"}',\n '{\"type\":\"Description\"}',\n '{\"type\":\"Phone\",\"rid\":\"0123456789abcdef01234567\"}',\n '{\"type\":\"Email\",\"rid\":\"abcdef0123456789abcdef01\"}',\n '{\"type\":\"Website\",\"rid\":\"fedcba9876543210fedcba98\"}',\n ],\n usage:\n \"В теле API `expression` — строка: `JSON.parse` даёт объект с полем `type` (enum в OpenAPI — `VisitCardExpressionType` и родственные значения для карточек кейса). Для контакта типичны FullName, LastNameFirstName, Initials, ShortName, Name, Organization, OrganizationPosition, Position, Description, Phone, Email, Website, Address, PlaceAddress. Для Phone/Email/Website/Address в JSON указывают `rid`, совпадающий с `rid` в `communications` или `addresses`. Для вычисляемых типов подпись строится из `firstName`/`lastName`/`middleName`, `company`, `position`, `description`. `value` — сохранённое отображаемое значение слота. **Не отправляйте больше трёх элементов в `fields` для контакта** — три слота соответствуют форме клиента; контакты/телефоны вынесены в `communications`, а не в четвёртый слот визитки. Разметка на экране: слоты по `number` 0…2; по типу выбирают иконку и действие (например, открыть адрес). На **`contacts.create`** и **`contacts.update`** SDK при наличии объекта **`visitCard`** в теле дополняет недостающие слоты 0…2 пустыми `{ number, value: \\\"\\\" }`, чтобы снять отказы схемы БД при неполном массиве. Добавление **Профиля** (привязка контакта к пользователю) — через операции **User** над **`/api/v1/user/profiles`**, не через заполнение только этого поля; после сохранения у Профиля может быть и `visitCard`, и нужный `profileType`.\",\n};\n","/**\n * **`ContactItem`** — структурированные описания полей.\n * @see components.schemas.ContactItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { contactVisitCardFieldDoc } from \"./nested/contact-visit-card.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const contactItemSpecificFieldDocEntries = {\n addresses: {\n description: \"Почтовые и другие адреса контакта.\",\n valueSchema: \"Address[]\",\n usage: \"Отображение адреса в карточке; клик открывает карту/детали.\",\n },\n birthday: {\n description: \"Дата рождения контакта.\",\n examples: [\"1990-05-15T00:00:00.000Z\"],\n },\n communications: {\n description:\n \"Каналы связи: телефон, email, сайты, мессенджеры и т.д. У одного типа может быть несколько записей (например, несколько WebSite) — различаются полем order.\",\n valueSchema: \"Communication[]\",\n usage:\n \"У телефона в `value` — отображаемый формат, в `valueForSearch` — нормализованные цифры для поиска. У мессенджеров (`Telegram`, `Max`) `value` часто хранит идентификатор/handle. `checkDate` — read-only (ответ GET), в **`CommunicationForCreateOrUpdate`** нет. `checkState` опционален при create/update; если не передан — SDK подставляет `Unchecked`. Основной канал для уведомлений — `personalInfo.defaultCommunication`.\",\n },\n dates: {\n description: \"Памятные даты (именины, юбилеи).\",\n valueSchema: \"MemorableDate[]\",\n },\n firstName: {\n description: \"Имя (поле визитки; для человека — имя, для «организации как контакта» может хранить часть названия).\",\n examples: [\"Иван\", \"Студия\"],\n usage: \"Вместе с lastName/middleName может заполняться даже у бизнес-контактов; отображаемый заголовок чаще смотри в `name` и visitCard.\",\n },\n lastName: {\n description: \"Фамилия или вторая часть названия визитки.\",\n examples: [\"Иванов\", \"Запись\"],\n usage: \"Смысл поля тот же, что у firstName: не всегда классическое ФИО физлица.\",\n },\n middleName: { description: \"Отчество.\", examples: [\"Иванович\"] },\n company: { description: \"Организация / место работы.\", examples: [\"ООО Ромашка\"] },\n position: { description: \"Должность.\", examples: [\"Врач\"] },\n description: {\n description: \"Свободный текст описания контакта (биография, заметки).\",\n },\n gender: {\n description: \"Пол.\",\n valueSchema: \"Gender\",\n },\n registerInfo: {\n description:\n \"Дополнительные поля, связанные с регистрацией пользователя (хобби, география и т.д. — см. схему `RegisterInfo` в OpenAPI), если контакт участвует в **Профиле** при регистрации.\",\n valueSchema: \"RegisterInfo\",\n usage: \"Может заполняться при первичной регистрации вместе с контактными данными **Профиля** (контакта пользователя).\",\n },\n photos: {\n description: \"Дополнительные фотографии помимо image.\",\n valueSchema: \"FileInfo[]\",\n },\n visitCard: contactVisitCardFieldDoc,\n profileType: {\n description:\n \"Роль контакта относительно учётной записи пользователя Torrow. Значения — строковый enum в OpenAPI (`ProfileType`). **Не путать с полем `visitCard`:** это разные вещи (см. ниже).\",\n valueSchema: \"ProfileType\",\n usage:\n \"**Профиль** в продукте — это `ContactItem`, который описывает самого пользователя Torrow и привязан к его учётной записи. В API такой контакт помечается, в частности, значением **`MyProfile`**: участие в записях, обратная связь, выбор «с какого профиля действовать», личный кабинет. У одного пользователя может быть несколько таких контактов (лимит задаёт продукт). Список и добавление **Профилей** выполняются **отдельными операциями раздела User** в OpenAPI (например `GET`/`POST` **`/api/v1/user/profiles`**, ответы `ProfileListResp` / `AddProfileResp`), а не только общим CRUD контактов по `/api/v1/contacts/...`. В SDK: **`TorrowClient.profiles.list()`** возвращает **`ContactItem[]`** (ответ HTTP — **`ProfileListResp`**); описания — **`ProfilesSdkMethods`**, **`ProfileListResp`**, **`AddProfileResp`** в `mcpUserProfilesFieldCatalog`. Обычный контакт в адресной книге без роли профиля владельца — как правило **`None`** или отсутствие значения. **`AnyProfile`**, **`CopyProfile`**, **`UnknownProfile`** — прочие значения enum; уточняй по спецификации и ответам сервера. Поле **`visitCard`** — это **не** Профиль: это структура слотов отображения (как визитка на экране) и может быть у разных контактов, включая Профиль; сам факт «это Профиль пользователя» задаётся **`profileType`** и связью через API пользователя. Для **`POST /api/v1/contacts`** поля **`profileType`**, **`profileProperties`**, **`hasTimetable`** в типе **`ContactItemForCreateOrUpdate`** нет — они передаются при **`client.profiles.add`** в типе **`UserProfileItemForAdd`**.\",\n },\n activityStatus: {\n description:\n \"Статус активности контакта в UI. **Только для чтения:** в теле `POST`/`PUT` контактов не задаётся; в **`TorrowItemForCreateOrUpdate`** / **`ContactItemForCreateOrUpdate`** поля нет (ключ **`activityStatus`** в `TorrowItemKeysExcludedFromItemWriteBody`).\",\n valueSchema: \"ActivityStatus\",\n },\n profileProperties: {\n description: \"Расширенные свойства профиля.\",\n valueSchema: \"ProfileProperties\",\n usage: \"Часто содержит цвет акцента карточки (`color`, hex) и доступность владельца (`profileUserAvailability`). В **`ContactItemForCreateOrUpdate`** поля нет — передаётся в **`UserProfileItemForAdd`** при **`client.profiles.add`**.\",\n },\n contactProperties: {\n description:\n \"Настройки контакта: видимость расписания контакта (`timetableVisibility`), кто может приглашать (`invitationRight`), право видеть расписание (`timetableVisibilityRight`).\",\n valueSchema: \"ContactProperties\",\n usage:\n \"Маппинг из форм создания/настроек. Расписание может быть скрыто на уровне контакта, при этом дочерние услуги всё равно ведут свою запись и слоты.\",\n },\n hasTimetable: {\n description: \"Признак: у контакта заведено расписание (слоты).\",\n examples: [\"true\", \"false\"],\n usage:\n \"Может быть false, даже если у вложенных услуг есть бронирование: расписание живёт на услуге, а не на контакте. В **`ContactItemForCreateOrUpdate`** поля нет — в **`UserProfileItemForAdd`** при создании Профиля.\",\n },\n loyaltyCard: {\n description: \"Вложенный элемент — карта лояльности, привязанная к контакту.\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contactItemSpecificFieldDocEntries,\n personalInfo: {\n description:\n \"Участие профиля пользователя в контакте: роль участника, способы уведомлений, подписки, псевдоним.\",\n valueSchema: \"ContactPersonalInfo\",\n usage:\n \"Отличается от базового PersonalInfo других элементов; хранит profileId, participantState/Type. Для открытия карточки по ссылке без входа в ответе может быть сценарий с `participantType` вроде PublicReader и списком `operationList` (в т.ч. чтение дочерних элементов при наличии прав сервера).\",\n },\n};\n\nexport const contactItemFieldDocs = mapFieldDocsToStrings(\n contactItemFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const contactItemSpecificFieldDocs = mapFieldDocsToStrings(\n contactItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`NoteItem`**\n * @see components.schemas.NoteItem; UI: `libs/mobile/mind-map/.../note-info.component`\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst noteSpecificFieldDocEntries = {\n publicityType: {\n ...torrowItemBaseFieldDocEntries.publicityType,\n usage: \"notes.create принимает publicityType в исходном теле (например Link); без значения используется Personal. Дополнительный updatePublicity при создании не требуется.\",\n },\n meta: {\n ...torrowItemBaseFieldDocEntries.meta,\n usage: \"notes.update принимает meta.version из прочитанной заметки в теле запроса; сервер использует его для проверки конкурирующих изменений. SDK сохраняет переданный checkVersion и не подставляет false. Для delete версия передаётся как versionToCheck в query.\",\n },\n noteType: {\n description: \"Тип содержимого заметки. Поддерживаемые сценарии SDK: Html и Markdown; остальные серверные значения сохранены для совместимости.\",\n examples: [\n \"Html\",\n \"Markdown\",\n ],\n valueSchema: \"NoteType\",\n usage:\n \"Для нового содержимого явно задавайте Html или Markdown. Файлы прикладываются через files независимо от формата текста; imagePreviewSize задаёт отображение вложений. Заметки на карточке контакта могут попадать в отдельный блок ContactItem.solutionData.viewBlockSettings.\",\n },\n data: {\n description:\n \"Содержимое: HTML-строка для Html, исходный Markdown для Markdown (тип unknown в OpenAPI сохранён для совместимости).\",\n examples: ['\"<p>Заметка</p>\"', '\"# Заметка\\\\n\\\\nТекст\\\\n\"'],\n usage: \"SDK сохраняет исходную строку, пробелы и переносы без преобразования разметки. Рендеринг и очистка HTML относятся к приложению.\",\n },\n files: {\n description: \"Вложенные файлы (не основное image).\",\n valueSchema: \"FileInfo[]\",\n examples: ['[ { \"id\": \"…\" } ]', '[ { \"id\": \"…\", \"fileName\": \"a.pdf\", \"url\": \"…\", … } ]'],\n usage:\n \"**create**/**update**: элементы с **`id`** достаточно. **getById** / read — полный **FileInfo** (url, fileName, fileSize, urlExpiration, refreshUrl).\",\n },\n imagePreviewSize: {\n description: \"Размер превью в списке/слайдере.\",\n examples: [\"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\", \"Hidden\"],\n valueSchema: \"ImagePreviewSize\",\n usage: \"Hidden скрывает файлы в UI; Slider — режим карусели.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const noteItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...noteSpecificFieldDocEntries,\n};\n\nexport const noteItemFieldDocs = mapFieldDocsToStrings(noteItemFieldDocEntries);\n","/**\n * MCP: методы **`client.notes`** (`NotesFacade`), не покрытые общим **`TorrowItemFacadeSdkMethods`**.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const notesSdkMethodFieldDocEntries = {\n getFileInfo: {\n description:\n \"`GET /api/v1/notes/{torrowId}/file/info` → **`FileInfo`**. Query **`fileId`** — id вложения из `files[]` (обязателен при нескольких файлах).\",\n valueSchema: \"(torrowId: string, fileId: string, options?: { signal? }) → FileInfo\",\n usage:\n \"Скачивание вложения: если в **`NoteItem.files`** у элемента с этим `id` есть живой `url` (`urlExpiration` > now), можно брать URL оттуда; иначе **`client.notes.getFileInfo(noteId, fileId)`**. Пример: **`notes-file-text-urls.ts`**, **`notes-file-image-urls.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const notesSdkMethodFieldDocs = mapFieldDocsToStrings(notesSdkMethodFieldDocEntries);\n","/**\n * Пресеты иконок контекста (torrow-apps `IconSetService` + `ContextFormMapper`).\n *\n * На wire нет поля `iconName`: пресет = SVG-файл в `ContextItem.image`\n * с `fileName` вида `{preset}.svg` (и заливка из `color`). Произвольные\n * JPEG/PNG/прочие SVG тоже допустимы через обычный upload `image`.\n */\nimport {\n CONTEXT_ICON_PRESET_PATHS,\n type ContextIconPresetPathKey,\n} from \"./context-icon-preset-paths.js\";\n\n/** Ключи пресетов — значения совпадают с `IconSetService.icons` / basename `*.svg`. */\nexport const ContextIconPresetValues = {\n Anchor: \"anchor\",\n Animals: \"animals\",\n Auto: \"auto\",\n Beauty: \"beauty\",\n Beauty2: \"beauty2\",\n Botanical: \"botanical\",\n Children: \"children\",\n Devices: \"devices\",\n Entertainment: \"entertainment\",\n Evolution: \"evolution\",\n Family: \"family\",\n Friends: \"friends\",\n Gamepad: \"gamepad\",\n Health: \"health\",\n Hobbies: \"hobbies\",\n Home: \"home\",\n Idea: \"idea\",\n Money: \"money\",\n Music: \"music\",\n Palm: \"palm\",\n Party: \"party\",\n ReparingService: \"reparingService\",\n Security: \"security\",\n Smile: \"smile\",\n Sport: \"sport\",\n Theater: \"theater\",\n Travel: \"travel\",\n Work: \"work\",\n World: \"world\",\n RegisterOrder: \"register_order\",\n} as const satisfies Record<string, ContextIconPresetPathKey>;\n\nexport type ContextIconPresetValue =\n (typeof ContextIconPresetValues)[keyof typeof ContextIconPresetValues];\n\nconst PRESET_SET = new Set<string>(Object.values(ContextIconPresetValues));\n\nlet nextSvgId = 0;\n\nexport function isContextIconPreset(value: string | null | undefined): value is ContextIconPresetValue {\n return typeof value === \"string\" && PRESET_SET.has(value);\n}\n\n/** Имя файла image для пресета — как в `ContextFormMapper` (`iconName + \".svg\"`). */\nexport function getContextIconPresetFileName(preset: ContextIconPresetValue): string {\n return `${preset}.svg`;\n}\n\n/**\n * Восстановить ключ пресета из `image.fileName` (basename без `.svg`).\n * Для кастомных картинок / неизвестных имён — `undefined`.\n */\nexport function parseContextIconPresetFromImage(\n image: { fileName?: string | null } | null | undefined,\n): ContextIconPresetValue | undefined {\n const fileName = image?.fileName;\n if (!fileName) {\n return undefined;\n }\n const base = fileName.split(/[/\\\\]/).pop() ?? fileName;\n const withoutExt = base.replace(/\\.svg$/i, \"\");\n return isContextIconPreset(withoutExt) ? withoutExt : undefined;\n}\n\nexport type BuildContextIconSvgOptions = {\n /** Заливка path; в apps обычно `ContextItem.color`. */\n color?: string;\n backgroundColor?: string;\n /** Атрибут `inversed` на path — как в `IconSetService.createSvg`. */\n inversed?: boolean;\n};\n\n/**\n * SVG-разметка пресета (без DOM) — эквивалент `IconSetService.getIcon` / blob из `getIconUrl`.\n * Готово к upload как `image/svg+xml` с именем {@link getContextIconPresetFileName}.\n */\nexport function buildContextIconSvg(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): string {\n const d = CONTEXT_ICON_PRESET_PATHS[preset];\n const id = `iconSet${(nextSvgId += 1)}`;\n const colorAttr = options?.color ? ` fill=\"${escapeXmlAttr(options.color)}\"` : \"\";\n const inversedAttr =\n options?.inversed !== undefined ? ` inversed=\"${options.inversed ? \"true\" : \"false\"}\"` : \"\";\n const styleAttr = options?.backgroundColor\n ? ` style=\"background-color: ${escapeXmlAttr(options.backgroundColor)};\"`\n : \"\";\n\n return (\n `<svg viewBox=\"7 7 40 40\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"${styleAttr}>` +\n `<defs><path d=\"${escapeXmlAttr(d)}\" id=\"${id}\"${colorAttr}${inversedAttr}/></defs>` +\n `<use xlink:href=\"#${id}\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\"/>` +\n `</svg>`\n );\n}\n\n/** UTF-8 bytes SVG для `uploadBytes` / `getImagePutUrl`. */\nexport function buildContextIconSvgBytes(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): Uint8Array {\n return new TextEncoder().encode(buildContextIconSvg(preset, options));\n}\n\nfunction escapeXmlAttr(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n","/**\n * **`ContextItem`** — группа/метка для организации элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\nimport { ContextIconPresetValues } from \"../resources/contexts/context-icon-preset.js\";\n\nconst contextSpecificFieldDocEntries = {\n color: {\n description:\n \"Цвет метки контекста в UI; для пресет-иконки apps также заливают этим цветом SVG path (`buildContextIconSvg(..., { color })`).\",\n examples: [\"#FF5722\", \"#2E7D32\", \"rgb(255,0,0)\"],\n usage: \"Визуальная группировка в mind-map и списках; вместе с `image` для пресета.\",\n },\n description: {\n description: \"Текстовое описание назначения контекста.\",\n examples: [\"Рабочие контакты\", \"Личное\"],\n },\n image: {\n description:\n \"Файл аватара/иконки. В apps выбор пресета = upload SVG с `fileName` `{preset}.svg` (см. MCP **`ContextIconPresetValues`**); произвольный JPEG/PNG тоже допустим через тот же `image`.\",\n examples: ['{ id, fileName: \"home.svg\" }', '{ id, fileName: \"custom.jpg\" }'],\n usage:\n \"Пресет: `buildContextIconSvg` + `getImagePutUrl` + `image: { id }`. Кастом: обычный upload. Обратно: `parseContextIconPresetFromImage(image)`.\",\n valueSchema: \"FileInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Справочник ключей пресет-иконок (wire — basename `*.svg`, не отдельное поле DTO). */\nexport const contextIconPresetValuesFieldDocEntries = Object.fromEntries(\n Object.entries(ContextIconPresetValues).map(([pascal, key]) => [\n pascal,\n {\n description: `Пресет иконки контекста \\`${key}\\` (torrow-apps IconSetService). На API уходит как image-файл \\`${key}.svg\\`.`,\n examples: [key, `${key}.svg`],\n usage: `ContextIconPresetValues.${pascal}; buildContextIconSvg / getContextIconPresetFileName.`,\n valueSchema: \"ContextIconPresetValues\",\n } satisfies ItemFieldDoc,\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const contextIconPresetValuesFieldDocs = mapFieldDocsToStrings(contextIconPresetValuesFieldDocEntries);\n\nexport const contextItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contextSpecificFieldDocEntries,\n};\n\nexport const contextItemFieldDocs = mapFieldDocsToStrings(contextItemFieldDocEntries);\n","/**\n * **`CalendarItem`**\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\n/**\n * Индексы вида расписания (`calendarViewIndex` / `timetableView`) для MCP.\n * В JSON — **число**; имена Day/Schedule — только подписи (как `LayoutTypeValues`).\n */\nexport const timetableViewTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник int-кодов вида расписания по умолчанию (`CalendarItem.calendarViewIndex`, `ServiceItem.timetableView`). Не OpenAPI-enum: в теле API передавай **число** (`0`…`5`).\",\n valueSchema: \"TimetableViewTypeValues\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"],\n usage:\n \"UI apps: Day / Poster / Schedule. В TypeScript SDK — `TimetableViewTypeValues.*` (то же число). Не передавай имя `Schedule` строкой — только int.\",\n },\n Day: {\n description: \"`0` — вид «День» (дефолт формы календаря в apps, если тип не выбран явно).\",\n examples: [\"0\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Month: {\n description: \"`1` — вид «Месяц» (в UI календаря часто скрыт).\",\n examples: [\"1\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n MonthEventList: {\n description: \"`2` — список событий месяца.\",\n examples: [\"2\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n ConnectCalendar: {\n description: \"`3` — подключённый/внешний календарь.\",\n examples: [\"3\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Poster: {\n description: \"`4` — «Афиша».\",\n examples: [\"4\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Schedule: {\n description: \"`5` — «Список событий» / Schedule.\",\n examples: [\"5\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableViewTypeValuesFieldDocs = mapFieldDocsToStrings(timetableViewTypeValuesFieldDocEntries);\n\nconst calendarSpecificFieldDocEntries = {\n description: {\n description: \"Описание календаря для пользователя.\",\n examples: [\"Рабочий календарь 2025\"],\n },\n calendarViewIndex: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day, `1` Month, `2` MonthEventList, `3` ConnectCalendar, `4` Poster, `5` Schedule. Полный справочник — MCP **`TimetableViewTypeValues`**.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage:\n \"UI: `CALENDAR_FORM.TYPE_INPUT`. То же число, что `ServiceItem.timetableView`. Apps проверяют truthy — `0` (Day) неотличим от «не задано» при чтении в UI.\",\n },\n scheduleRangeExceptions: {\n description: \"Исключения из базового расписания: замены и исключённые интервалы.\",\n valueSchema: \"ScheduleRangeExceptions\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const calendarItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...calendarSpecificFieldDocEntries,\n};\n\nexport const calendarItemFieldDocs = mapFieldDocsToStrings(calendarItemFieldDocEntries);\n","/**\n * **`LoyaltySystemItem`** — поля create/update, критичные для MCP\n * (wire-строки OpenAPI в `examples`, не имена TS-констант).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst loyaltySystemSpecificFieldDocEntries = {\n description: {\n description: \"Описание программы лояльности.\",\n examples: [\"Программа скидок 2025\"],\n },\n startDate: {\n description: \"Дата начала программы (ISO date-time).\",\n examples: [\"2025-01-01T00:00:00.000Z\"],\n },\n expiredDate: {\n description: \"Дата окончания программы (ISO date-time).\",\n examples: [\"2026-01-01T00:00:00.000Z\"],\n },\n loyaltyCardIssueType: {\n description:\n \"Способ выпуска карты. В JSON — **строка**: `Manual`, `AutoActive`, `AutoIssued`. Каталог MCP **`LoyaltyCardIssueType`**. Дефолт apps create: `AutoActive`.\",\n examples: [\"AutoActive\", \"Manual\", \"AutoIssued\"],\n valueSchema: \"LoyaltyCardIssueType\",\n },\n loyaltyCardAnyoneAccess: {\n description:\n \"Публичный доступ к карте. В JSON — **строка** `AnyoneAccess`: `Read`, `NoneAnyoneAccess`, `ReadWrite`, `Denied`. Каталог **`AnyoneAccess`**. Дефолт apps: `Read`.\",\n examples: [\"Read\", \"NoneAnyoneAccess\", \"ReadWrite\", \"Denied\"],\n valueSchema: \"AnyoneAccess\",\n },\n loyaltyCardUpdateKeyInformation: {\n description:\n \"Правило key-полей карты. В JSON — **строка**: `NonKeyDisallowed`, `NonKeyAllowed`. Каталог **`LoyaltyCardUpdateKeyInformation`**. Дефолт apps: `NonKeyDisallowed`.\",\n examples: [\"NonKeyDisallowed\", \"NonKeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateKeyInformation\",\n },\n loyaltyCardUpdateNonKeyInformation: {\n description:\n \"Правило non-key полей. В JSON — **строка**: `KeyDisallowed`, `KeyAllowed`. Каталог **`LoyaltyCardUpdateNonKeyInformation`**.\",\n examples: [\"KeyDisallowed\", \"KeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateNonKeyInformation\",\n },\n loyaltyCardUsagePeriod: {\n description: \"Срок действия карты в днях.\",\n examples: [\"365\", \"30\"],\n },\n beginTransactionValues: {\n description: \"Стартовые начисления на карту (`TransactionValue[]`).\",\n valueSchema: \"TransactionValue[]\",\n },\n initialSubscription: {\n description: \"Опциональная стартовая подписка программы.\",\n valueSchema: \"InitialSubscription\",\n },\n accountingProductNames: {\n description: \"Имена учётных продуктов программы (обязательны вместе с `beginTransactionValues`).\",\n valueSchema: \"AccountingProductName[]\",\n },\n numeratorInfo: {\n description: \"Нумерация карт.\",\n valueSchema: \"NumeratorInfo\",\n },\n businessCardId: {\n description: \"Id визитки/контакта, привязанного к программе.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n contactInformationFieldsRequirements: {\n description: \"Требования к полям контакта при выпуске карты.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...loyaltySystemSpecificFieldDocEntries,\n};\n\nexport const loyaltySystemItemFieldDocs = mapFieldDocsToStrings(loyaltySystemItemFieldDocEntries);\n","/**\n * Вложенные схемы услуги/кейса, нужные MCP для сборки create/update body\n * (wire-литералы строк/чисел, не имена TS-констант).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sessionDurationPropertiesFieldDocEntries = {\n sessionDurationType: {\n description:\n \"Тип длительности сессии. В JSON — **строка** OpenAPI: `Sum`, `Constant`, `Custom`, `SessionDurationNone`, … Каталог MCP **`SessionDurationType`**.\",\n examples: [\"Sum\", \"Constant\", \"Custom\", \"SessionDurationNone\"],\n valueSchema: \"SessionDurationType\",\n },\n timeSelectionType: {\n description:\n \"Кто выбирает время. В JSON — **строка**: `Consumer`, `Executor`, `TimeSelectionNone`. Каталог **`TimeSelectionType`**.\",\n examples: [\"Consumer\", \"Executor\", \"TimeSelectionNone\"],\n valueSchema: \"TimeSelectionType\",\n },\n stateManagementType: {\n description:\n \"Авто/ручное управление состоянием. В JSON — **строка**: `Auto`, `Manual`. Каталог **`StateManagementType`**.\",\n examples: [\"Auto\", \"Manual\"],\n valueSchema: \"StateManagementType\",\n },\n sessionPrecisionType: {\n description:\n \"Точность слота. В JSON — **строка**: `DateTime`, `Date`. Каталог **`SessionPrecisionType`**.\",\n examples: [\"DateTime\", \"Date\"],\n valueSchema: \"SessionPrecisionType\",\n },\n defaultDuration: {\n description: \"Длительность по умолчанию в секундах (для `Constant` / кастомных сценариев).\",\n examples: [\"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sessionDurationPropertiesFieldDocs = mapFieldDocsToStrings(\n sessionDurationPropertiesFieldDocEntries,\n);\n\nexport const checkinPermissionFieldDocEntries = {\n userAccessLevel: {\n description:\n \"Кто может check-in / запись. В JSON — **строка** OpenAPI: `Authenticated`, `Unauthenticated`. Каталог MCP **`UserAccessLevel`**.\",\n examples: [\"Authenticated\", \"Unauthenticated\"],\n valueSchema: \"UserAccessLevel\",\n },\n consumerMinTimeSecBetweenCasesInService: {\n description: \"Минимальный интервал (сек) между кейсами одного потребителя в услуге.\",\n examples: [\"0\", \"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkinPermissionFieldDocs = mapFieldDocsToStrings(checkinPermissionFieldDocEntries);\n","/**\n * **`ResourceItem`** — продуктовый ресурс (слот, аренда, билет и т.д.).\n * @see resource-item-business: publicity Link при создании с parentId\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const resourceItemSpecificFieldDocEntries = {\n description: {\n description: \"Текстовое описание ресурса в каталоге и при записи.\",\n },\n itemId: {\n description: \"Связь с элементом-представлением ресурса в модели API.\",\n examples: [\"uuid\"],\n },\n parentResourceId: {\n description: \"Родительский ресурс в иерархии (подресурсы).\",\n usage: \"Иерархия resource group / вложенные услуги.\",\n },\n timetableId: {\n description: \"Идентификатор расписания, к которому привязан ресурс.\",\n },\n schedule: {\n description: \"Расписание доступности.\",\n valueSchema: \"Schedule\",\n },\n priceInfo: {\n description: \"Отображаемая и расчётная ценовая информация.\",\n valueSchema: \"PriceInfo\",\n },\n item: {\n description: \"Вложенный TorrowItem с контентом ресурса.\",\n valueSchema: \"TorrowItem\",\n },\n parentResource: {\n description: \"Родитель как TorrowItem.\",\n valueSchema: \"TorrowItem\",\n },\n usageType: {\n description: \"Тип потребления ресурса (время, количество и т.д.).\",\n valueSchema: \"UsageType\",\n },\n serviceDescriptions: {\n description:\n \"Связи ресурса с группами услуг. Каждая связь определяется парой `id` услуги + `resourceGroupId`; `ResourceBuilder` формирует имена и `laterBinding` из актуальной услуги и группы.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: {\n description: \"Код номенклатуры или внешний артикул.\",\n examples: [\"SRV-001\"],\n },\n duration: {\n description: \"Длительность в единицах API (часто минуты).\",\n examples: [\"30\", \"60\"],\n },\n priceProperties: {\n description: \"Правила цены.\",\n valueSchema: \"PriceProperties\",\n },\n amountProperties: {\n description:\n \"Количество и лимиты списания. Для записи `totalAmount` передавайте согласованный объект формы: `measure`, `firstValue`, `plusStep`, `minusStep`, `digitsInMeasure`; сокращённый `{ totalAmount }` отклоняется фактической DB-схемой.\",\n valueSchema: \"AmountProperties\",\n },\n usageCondition: {\n description: \"Условия допустимого использования.\",\n valueSchema: \"UsageCondition\",\n },\n appendixList: {\n description: \"Приложения и дополнительные материалы.\",\n valueSchema: \"Appendix[]\",\n },\n paymentProperties: {\n description: \"Настройки оплаты по ресурсу.\",\n valueSchema: \"PaymentProperties\",\n },\n ticketProperties: {\n description: \"Параметры билета/пропуска (в т.ч. state оплаты в кейсе).\",\n valueSchema: \"TicketProperties\",\n usage: \"В кейсе читается ticketProperties.state (Paid/Used) для кнопки оплаты.\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Параметры транзакций лояльности.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n behaviorSettings: {\n description:\n \"SDK-слой поверх `tags`: типизированные параметры поведения ресурса (`ResourceBehaviorSettings`): `marginTimeSec` (`<sec>:MarginTime`) и `lockId` (`<lockNumber>:lockId`) для TTLock.\",\n usage:\n \"Заполняется SDK при чтении (`resourceItems.getById`, `resourceItems.listPersonal`) и сериализуется в `tags` при `resourceItems.create/update`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...resourceItemSpecificFieldDocEntries,\n};\n\nexport const resourceItemFieldDocs = mapFieldDocsToStrings(resourceItemFieldDocEntries);\n\nexport const resourceItemSpecificFieldDocs = mapFieldDocsToStrings(\n resourceItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`ServiceItem`** — услуга с записью и расписанием.\n * @see ServicePage useEffectStartCheckInProcessOnOpen, childItemStats\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const serviceItemSpecificFieldDocEntries = {\n description: {\n description: \"Описание услуги для клиента.\",\n usage:\n \"Текст бронирования, предоплаты и т.п. в списке услуг контакта часто собирается из `buttonName`, `priceInfo`/`priceProperties`, `stepDescriptionList`, а не только из этого поля и `TorrowItem.name`.\",\n },\n placeId: {\n description: \"Идентификатор места оказания.\",\n examples: [\"uuid-place\"],\n },\n place: {\n description: \"Текстовое название или адрес места.\",\n examples: [\"ул. Ленина, 1\"],\n },\n schedule: {\n description: \"Расписание слотов/доступности.\",\n valueSchema: \"Schedule\",\n },\n bookingDuration: {\n description: \"Длительность брони слота (единицы по контракту API, часто секунды/минуты в int64).\",\n examples: [\"3600\"],\n },\n timetableView: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day … `5` Schedule (см. MCP **`TimetableViewTypeValues`**). Не строка.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage: \"UI: `SERVICE_FORM.TYPE_INPUT`. То же число, что `CalendarItem.calendarViewIndex`.\",\n },\n registrationOpen: {\n description: \"Граница открытия записи (смещение или метка — уточнять по Swagger).\",\n },\n registrationClose: {\n description: \"Граница закрытия записи.\",\n },\n maxConsumerQuantity: {\n description: \"Максимум клиентов на слот/услугу.\",\n examples: [\"1\", \"10\"],\n },\n executorIdList: {\n description: \"Список профилей исполнителей.\",\n examples: [\"[uuid1, uuid2]\"],\n },\n needApproval: {\n description: \"Требуется подтверждение заявки исполнителем.\",\n examples: [\"true\", \"false\"],\n },\n timeAlignment: {\n description: \"Шаг сетки времени для слотов.\",\n },\n orderQuote: {\n description:\n \"Квота использования услуги: максимальное число одновременно действующих заказов на пересекающемся интервале. `null` или отсутствие поля означает, что общего лимита услуги нет.\",\n examples: [\"1\", \"10\", \"null\"],\n usage:\n \"Ограничение применяется ко всей услуге независимо от выбранных ресурсов. Не смешивать с `ResourceItem.amountProperties.totalAmount`, которое ограничивает количество конкретного ресурса `Rent`.\",\n },\n marginTime: {\n description: \"Пауза между слотами.\",\n },\n executorUsagePercent: {\n description: \"Доля загрузки исполнителя (0–100 или 0–1 — по контракту).\",\n examples: [\"0.75\"],\n },\n firstWeekDate: {\n description: \"Опорная дата первой недели для построения расписания.\",\n examples: [\"2025-04-07T00:00:00.000Z\"],\n },\n clientGroupId: {\n description: \"Ограничение услуги группой клиентов.\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов (что именно бронируется).\",\n valueSchema: \"ResourceGroup[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при записи (телефон, email и т.д.).\",\n valueSchema: \"ParticipateFieldRequirements\",\n usage: \"TorrowItemHelper.hasRequiredPhoneOrEmail для валидации формы.\",\n },\n appendixList: {\n description: \"Приложения к услуге.\",\n valueSchema: \"Appendix[]\",\n },\n sessionDurationProperties: {\n description:\n \"Правила длительности сессии. Поля-enum — **строки OpenAPI** (`Sum`, `Consumer`, `Auto`, `DateTime`, …); каталоги MCP: `SessionDurationType`, `TimeSelectionType`, `StateManagementType`, `SessionPrecisionType`.\",\n valueSchema: \"SessionDurationProperties\",\n },\n checkInAllCases: {\n description: \"Автоматический чек-ин по всем связанным кейсам.\",\n examples: [\"true\", \"false\"],\n },\n stepDescriptionList: {\n description:\n \"Пошаговое описание сценария услуги. `stepType` — **число** (`1` Time, `2` Resource, `3` Payment); см. `StepDescription`.\",\n valueSchema: \"StepDescription[]\",\n },\n buttonName: {\n description: \"Подпись основной кнопки действия (запись, оформить).\",\n examples: [\"Записаться\"],\n },\n numeratorInfo: {\n description: \"Нумерация заказов/документов.\",\n valueSchema: \"NumeratorInfo\",\n },\n priceProperties: {\n description: \"Правила ценообразования.\",\n valueSchema: \"PriceProperties\",\n },\n priceInfo: {\n description: \"Итоговая ценовая информация.\",\n valueSchema: \"PriceInfo\",\n },\n checkinPermission: {\n description:\n \"Кто и когда может отметить прибытие. `userAccessLevel` — строка OpenAPI (`Authenticated` / `Unauthenticated`); каталог MCP **`UserAccessLevel`** / схема **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n caseActionList: {\n description: \"Автоматические действия при смене состояния кейса.\",\n valueSchema: \"CaseAction[]\",\n },\n packingStrategyProperties: {\n description: \"Упаковка слотов/ресурсов в расписании.\",\n valueSchema: \"PackingStrategyProperties\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Настройки лояльности для услуги.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n behaviorSettings: {\n description:\n \"SDK-слой поверх `tags`: типизированные параметры поведения услуги (`ServiceBehaviorSettings`) для чтения/обновления без ручной работы со строковыми тегами.\",\n usage:\n \"Заполняется SDK при чтении (`services.getById`, `services.listPersonal`) и сериализуется обратно в `tags` при `services.create/update`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const serviceItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...serviceItemSpecificFieldDocEntries,\n};\n\nexport const serviceItemFieldDocs = mapFieldDocsToStrings(serviceItemFieldDocEntries);\n\nexport const serviceItemSpecificFieldDocs = mapFieldDocsToStrings(\n serviceItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`CaseItem`** — **событие** в продукте (визит, запись и т.д.); **заказ** — частный случай события после записи на **услугу** (`createOrder`).\n * @see CasePage getPayButtonType — ticketState, paymentProvider\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const caseItemSpecificFieldDocEntries = {\n beginDate: {\n description: \"Начало периода оказания услуги / визита.\",\n examples: [\"2025-04-12T09:00:00.000Z\"],\n },\n endDate: {\n description: \"Окончание периода.\",\n examples: [\"2025-04-12T10:00:00.000Z\"],\n },\n description: {\n description: \"Комментарий к заказу, пожелания клиента или заметка исполнителя.\",\n },\n placeId: {\n description: \"Идентификатор места.\",\n examples: [\"uuid\"],\n },\n serviceId: {\n description: \"Идентификатор услуги, к которой относится кейс.\",\n examples: [\"uuid\"],\n usage: \"Навигация к карточке услуги; сценарии записи.\",\n },\n groupId: {\n description: \"Идентификатор группового события/пакета кейсов.\",\n },\n place: {\n description: \"Текстовое описание места (если placeId не задан или для отображения).\",\n examples: [\"Кабинет 3\"],\n },\n caseState: {\n description: \"Состояние жизненного цикла заказа.\",\n examples: [\n \"Verifying\",\n \"Waiting\",\n \"Processing\",\n \"Preparing\",\n \"Completed\",\n \"Closed\",\n \"Rejected\",\n \"Canceled\",\n \"TimeControlled\",\n \"TaskNotCompleted\",\n \"TaskCompleted\",\n \"UnknownCaseState\",\n ],\n valueSchema: \"CaseState\",\n usage: \"Отображение статуса в карточке и триггеры case actions.\",\n },\n caseType: {\n description: \"Тип планирования кейса по времени.\",\n examples: [\"Time\", \"RepeatedTime\", \"Today\", \"Week\", \"Later\", \"Date\", \"State\", \"UnknownTimeType\"],\n valueSchema: \"CaseType\",\n },\n caseStateDate: {\n description: \"Момент последнего изменения caseState.\",\n examples: [\"2025-04-12T11:00:00.000Z\"],\n },\n personalInfo: {\n description:\n \"Участие текущего профиля в кейсе: участник, билет, оплата, связанные ResourceItem.\",\n valueSchema: \"CasePersonalInfo\",\n usage:\n \"Для оплаты: personalInfo.caseParticipant, ticketResource.ticketProperties.state (Paid/Used), paymentProperties.paymentProviderType (Cash и т.д.) — см. CasePage.\",\n },\n bookingResourceList: {\n description: \"Забронированные ресурсы (слоты, услуги).\",\n valueSchema: \"BookingResource[]\",\n },\n schedule: {\n description: \"Расписание, связанное с кейсом.\",\n valueSchema: \"Schedule\",\n },\n registrationOpen: {\n description: \"Параметр окна регистрации на кейс (см. Swagger).\",\n },\n registrationClose: {\n description: \"Параметр закрытия регистрации.\",\n },\n visitCard: {\n description: \"Поля визитки/карточки заказа.\",\n valueSchema: \"CaseVisitCard\",\n },\n bookingDuration: {\n description: \"Длительность брони.\",\n examples: [\"60\"],\n },\n maxConsumerQuantity: {\n description: \"Лимит участников.\",\n examples: [\"5\"],\n },\n bookingConsumerQuantity: {\n description: \"Фактическое число записанных.\",\n examples: [\"3\"],\n },\n executorUsagePercent: {\n description: \"Загрузка исполнителя.\",\n },\n availableResources: {\n description: \"Доступные для выбора ресурсы при записи.\",\n valueSchema: \"AvailableResources\",\n },\n needApproval: {\n description: \"Ожидается подтверждение.\",\n examples: [\"true\", \"false\"],\n },\n createSingleCases: {\n description: \"Порождение одиночных кейсов в групповом режиме.\",\n examples: [\"true\", \"false\"],\n },\n orderNumber: {\n description: \"Человекочитаемый номер заказа.\",\n valueSchema: \"OrderNumber\",\n examples: [\"ORD-2025-0042\"],\n },\n checkinPermission: {\n description:\n \"Права на чек-ин. `userAccessLevel` — строка OpenAPI (`Authenticated` / …); см. MCP **`UserAccessLevel`** / **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: {\n description: \"Скрыть кейс в списках пользователя.\",\n examples: [\"true\", \"false\"],\n },\n consumersCount: {\n description: \"Число потребителей (агрегат для UI).\",\n examples: [\"2\"],\n },\n caseSummary: {\n description: \"Краткая сводка по заказу.\",\n valueSchema: \"CaseSummary\",\n },\n appendixList: {\n description: \"Приложения.\",\n valueSchema: \"Appendix[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при участии.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priceProperties: {\n description: \"Ценообразование.\",\n valueSchema: \"PriceProperties\",\n },\n priceInfo: {\n description: \"Цена.\",\n valueSchema: \"PriceInfo\",\n },\n priority: {\n description: \"Приоритет в очереди/обработке.\",\n examples: [\"1.0\"],\n },\n clientGroupId: {\n description: \"Группа клиентов.\",\n },\n caseActionList: {\n description: \"Автоматизации и напоминания.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Лояльность.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...caseItemSpecificFieldDocEntries,\n personalInfo: {\n description:\n \"Для кейса: участие профиля, билет (ticketResource), оплата, caseParticipant — не путать с PersonalInfo базового TorrowItem.\",\n valueSchema: \"CasePersonalInfo\",\n usage: \"Кнопка оплаты vs детали: ticketProperties.state, paymentProviderType.\",\n },\n};\n\nexport const caseItemFieldDocs = mapFieldDocsToStrings(caseItemFieldDocEntries);\n\nexport const caseItemSpecificFieldDocs = mapFieldDocsToStrings(\n caseItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`ObjectInfo`** — обычно `meta` у элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"../field-doc-entry.js\";\n\nexport const objectInfoFieldDocEntries = {\n deleteState: {\n description: \"Состояние мягкого удаления.\",\n valueSchema: \"DeleteState\",\n },\n archiveState: {\n description: \"Состояние архивации.\",\n valueSchema: \"ArchiveState\",\n },\n version: {\n description: \"Версия сущности для оптимистичной блокировки при update/delete.\",\n examples: [\"1\", \"42\"],\n usage: \"Передаётся как versionToCheck в query; несовпадение — конфликт на сервере.\",\n },\n lastModified: {\n description: \"Время последнего изменения (ISO 8601).\",\n examples: [\"2025-04-12T10:30:00.000Z\"],\n },\n createDate: {\n description: \"Время создания (ISO 8601).\",\n examples: [\"2025-01-01T08:00:00.000Z\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const objectInfoFieldDocs = mapFieldDocsToStrings(objectInfoFieldDocEntries);\n","/**\n * Агрегат описаний полей **элементов** (*Item) для **генерации MCP-сервера** и внешних тулов:\n * каждый ключ — имя схемы в OpenAPI, значение — карта полей → {@link ItemFieldDoc}.\n *\n * Связи и mind map: {@link mcpRelationFieldCatalog}; запись и оплата: `mcpBookingFieldCatalog` в `mcp-booking-catalog.ts`;\n * представления: `mcpViewsFieldCatalog` в `mcp-views-catalog.ts`; объединение: {@link mcpFullFieldCatalog}.\n *\n * Строковые плоские карты (`*FieldDocs`) получайте через {@link fieldDocToString} при необходимости\n * или используйте готовые `contactItemFieldDocs` из пакета.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { calendarItemFieldDocEntries } from \"./calendar-item.js\";\nimport { caseItemFieldDocEntries } from \"./case-item.js\";\nimport { contactItemFieldDocEntries } from \"./contact-item.js\";\nimport { contextItemFieldDocEntries } from \"./context-item.js\";\nimport { loyaltySystemItemFieldDocEntries } from \"./loyalty-system-item.js\";\nimport { noteItemFieldDocEntries } from \"./note-item.js\";\nimport { objectInfoFieldDocEntries } from \"./nested/object-info.js\";\nimport { resourceItemFieldDocEntries } from \"./resource-item.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const mcpItemFieldCatalog: {\n TorrowItem: Record<string, ItemFieldDoc>;\n ContactItem: Record<string, ItemFieldDoc>;\n NoteItem: Record<string, ItemFieldDoc>;\n ContextItem: Record<string, ItemFieldDoc>;\n CalendarItem: Record<string, ItemFieldDoc>;\n ResourceItem: Record<string, ItemFieldDoc>;\n ServiceItem: Record<string, ItemFieldDoc>;\n CaseItem: Record<string, ItemFieldDoc>;\n LoyaltySystemItem: Record<string, ItemFieldDoc>;\n ObjectInfo: Record<string, ItemFieldDoc>;\n} = {\n TorrowItem: { ...torrowItemBaseFieldDocEntries },\n ContactItem: { ...contactItemFieldDocEntries },\n NoteItem: { ...noteItemFieldDocEntries },\n ContextItem: { ...contextItemFieldDocEntries },\n CalendarItem: { ...calendarItemFieldDocEntries },\n ResourceItem: { ...resourceItemFieldDocEntries },\n ServiceItem: { ...serviceItemFieldDocEntries },\n CaseItem: { ...caseItemFieldDocEntries },\n LoyaltySystemItem: { ...loyaltySystemItemFieldDocEntries },\n ObjectInfo: { ...objectInfoFieldDocEntries },\n};\n","/**\n * Описания полей **записи на услугу, мастера шагов и оплаты** (`components.schemas` + виртуальные карты методов SDK).\n * Формат {@link ItemFieldDoc} — для MCP `inputSchema` и промптов.\n *\n * Согласовано с публичным REST API Torrow и типичными сценариями: мастер записи, расписание, оплата билета.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Методы `TorrowClient.services`, участвующие в мастере записи. */\nexport const servicesBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/services/{serviceId}` + парсинг managed параметров из `service.tags` в `ServiceBehaviorSettings`.\",\n valueSchema: \"ServiceItem.tags → ServiceBehaviorSettings\",\n usage: \"Чтение текущих настроек поведения услуги перед patch/update.\",\n },\n updateBehaviorSettings: {\n description:\n \"Высокоуровневое обновление `ServiceBehaviorSettings` (внутри: `GET` сервиса -> merge patch (по умолчанию) -> `PUT /api/v1/services/{id}`).\",\n valueSchema: \"Partial<ServiceBehaviorSettings> → ServiceItem\",\n usage:\n \"Основной путь для приложений: передай только нужные поля; `mergeParameters=true` (default) сохранит остальные параметры и произвольные пользовательские tags.\",\n },\n setBehaviorSettings: {\n description:\n \"Полная установка `ServiceBehaviorSettings` (`mergeParameters=false`): заменяет managed-параметры, оставляя неуправляемые tags.\",\n valueSchema: \"ServiceBehaviorSettings → ServiceItem\",\n },\n createOrder: {\n description:\n \"`POST /api/v1/services/{serviceId}/order`. Тело: `CreateOrderReq`. Ответ: `OrderResp` (часто содержит `order` как `CaseItem` и `consumerSecurityToken` для последующих гостевых запросов). Создаёт заказ/кейс по выбранным слотам и ресурсам.\",\n valueSchema: \"CreateOrderReq → OrderResp\",\n usage:\n \"Финальный шаг мастера записи после выбора времени и ресурсов: отправка собранного тела `CreateOrderReq` на сервер.\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/services/{serviceId}/timetable`. Тело: `TimetableFilter`. Query: `TimetableQueryOptions` (в т.ч. `visibility`). Ответ: `TimetableCase[]` (события/заказы и интервалы расписания).\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n \"Передавай `from`/`to`; при уже выбранных ресурсах — `bookingResourceFilter.resourceGroupIdList`. Метод возвращает события/заказы и занятость, а не вычисленные свободные окна. Для доступных слотов записи используй `getCheckInSchedule` с `type: \\\"FreeTimeSlots\\\"`; для полных карточек событий — `visibility: \\\"View\\\"`.\",\n },\n getServiceResources: {\n description:\n \"`POST /api/v1/services/{serviceId}/resources`. Тело: `SearchServiceResourcesReq`. Список `ResourceView` для группы ресурсов шага мастера.\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Минимум `resourceGroupId` из `StepDescription`; при выборе времени до ресурсов — `timePeriod`.\",\n },\n getServiceResourcesWithDetalization: {\n description:\n \"`POST /api/v1/services/{serviceId}/resourceswithdetalization`. Как `getServiceResources`, плюс агрегаты (`guaranteedResourcesQuantity` и т.д.).\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Когда UI нужны количественные подсказки по группе.\",\n },\n getWorkloadInfo: {\n description:\n \"`PUT /api/v1/services/workloadinfo`. Тело: `GetServiceWorkloadInfoRequest` (`workloadOptions`, `timePeriod`). Ответ: `GetServiceWorkloadInfoResp` — `workloadInfoList` с вложенными `timetable`/`workload` по ресурсам, `serviceStructureList`.\",\n valueSchema: \"GetServiceWorkloadInfoRequest → GetServiceWorkloadInfoResp\",\n usage:\n \"Календарь владельца/исполнителя: список ресурсов услуги с вложенными `timetable` и `workload` за период без N запросов на каждый ресурс. Для плоского списка событий/заказов по услуге без разреза по ресурсам чаще достаточно `services.getTimetable` по `serviceId`.\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/services/timetable/statistics`. Тело: `GetTimetableStatisticsRequest`. Агрегаты по расписанию услуги.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n getCheckInSchedule: {\n description:\n \"`POST /api/v1/services/{serviceId}/checkinschedule`. Тело: `GetCheckInScheduleReq` (`timePeriod`, `resourceIdList`, …). Ответ: `GetCheckInScheduleResp` — окна `checkInSchedule`, детализация `workloadDetalization`.\",\n valueSchema: \"GetCheckInScheduleReq → GetCheckInScheduleResp\",\n usage:\n \"Для UI выбора свободного времени передавай `type: \\\"FreeTimeSlots\\\"`; `checkInSchedule` содержит `WorkloadPeriod` с `from`/`to`. Режим `AsIs` возвращает сырые периоды нагрузки (`FreeTime`, `BusyTime`, `NotWorkingTime` и др.), а не только выбираемые слоты.\",\n },\n getReCheckInSchedule: {\n description:\n \"`PUT /api/v1/services/{serviceId}/recheckinschedule`. Тело: `GetReCheckInScheduleReq` (обязателен `caseId`, опционально `securityToken`). Ответ как у `getCheckInSchedule`.\",\n valueSchema: \"GetReCheckInScheduleReq → GetCheckInScheduleResp\",\n usage: \"Пересчёт доступности после изменения события/заказа.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** `TorrowClient.resourceItems` — расписание и операции в домене ресурса. */\nexport const resourceItemsBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/resources/{id}` + парсинг managed параметров ресурса (`ResourceBehaviorSettings`) из `tags` (`marginTimeSec`, `lockId`).\",\n valueSchema: \"ResourceItem.tags → ResourceBehaviorSettings\",\n },\n updateBehaviorSettings: {\n description:\n \"Высокоуровневое обновление `ResourceBehaviorSettings` (внутри: `GET` -> merge patch по умолчанию -> `PUT /api/v1/resources/{id}`).\",\n valueSchema: \"Partial<ResourceBehaviorSettings> → ResourceItem\",\n },\n setBehaviorSettings: {\n description: \"Полная установка `ResourceBehaviorSettings` (`mergeParameters=false`).\",\n valueSchema: \"ResourceBehaviorSettings → ResourceItem\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/resources/{resourceId}/timetable`. Как расписание услуги, но якорь — ресурс. Тело `TimetableFilter`, query `TimetableQueryOptions` без `createDateFrom`/`createDateTo`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n \"Список событий/заказов ресурса (исполнитель, зал). Для полных деталей — `visibility: \\\"View\\\"` (см. `TimetableQueryOptions`).\",\n },\n getWorkload: {\n description:\n \"`GET /api/v1/resources/{resourceId}/workload`. Query: `From`, `To` (date-time), опционально `serviceId` — полосы занятости для фона календаря.\",\n valueSchema: \"query → WorkloadPeriod[]\",\n },\n pickOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/pickorder`. Тело: `PickOrderReq`. Исполнитель забирает заказ.\",\n valueSchema: \"PickOrderReq → PickOrderResp\",\n },\n returnOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/returnorder`. Тело: `ReturnOrderReq`. Откат pick.\",\n valueSchema: \"ReturnOrderReq → ReturnOrderResp\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/resources/timetable/statistics`. Как у услуги, но путь домена `resources`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полиморфное расписание: те же `TimetableFilter` / `TimetableCase`, что у услуги, но якорь — календарь или контакт. */\nexport const calendarContactTimetableSdkMethodFieldDocEntries = {\n calendarsGetTimetable: {\n description:\n \"`PUT /api/v1/calendars/{id}/timetable`. Тело `TimetableFilter`, query `TimetableQueryOptions` (без `createDate*`), ответ `TimetableCase[]`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: \"`TorrowClient.calendars.getTimetable`; для карточек событий — `visibility: \\\"View\\\"`.\",\n },\n calendarsGetTimetableStatistics: {\n description: \"`POST /api/v1/calendars/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n contactsGetTimetable: {\n description:\n \"`PUT /api/v1/contacts/{id}/timetable`. Расписание событий/заказов контакта (профиль/исполнитель). Query: `TimetableQueryOptions` без `createDate*`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: \"`TorrowClient.contacts.getTimetable`; для имён/сводок — `visibility: \\\"View\\\"`.\",\n },\n contactsGetTimetableStatistics: {\n description: \"`POST /api/v1/contacts/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Параметры `TorrowClient.cases.getById`, важные для билета и ссылки оплаты. */\nexport const casesPaymentSdkMethodFieldDocEntries = {\n getById: {\n description:\n \"`GET /api/v1/cases/{torrowId}`. Возвращает `CaseItem` с персональным контекстом. Для гостя после `createOrder` передавай `securityToken` (из `OrderResp.consumerSecurityToken`) и при необходимости `caseParticipantId`, иначе `personalInfo.ticketResource` может быть недоступен.\",\n valueSchema: \"query → CaseItem\",\n usage:\n \"Если `paymentUrl` ещё пуст, после короткой задержки повтори `cases.getById` с теми же параметрами доступа и снова прочитай `personalInfo.ticketResource.ticketProperties.paymentUrl` (асинхронное заполнение со стороны провайдера).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createOrderReqFieldDocEntries = {\n checkInProperties: {\n description:\n \"Один или несколько участников записи: слот `availabilityTime`, тип участника, контакты, выбранные `bookingResourceList`, напоминания.\",\n valueSchema: \"CheckInProps[]\",\n usage: \"Собирается из состояния мастера; обязательное поле запроса.\",\n },\n resourceList: {\n description:\n \"Плоский список выбранных ресурсов для заказа (`resourceId`, `resourceGroupId`, `amount`). Альтернатива/дополнение к вложенным `bookingResourceList` внутри `checkInProperties` — зависит от сценария API.\",\n valueSchema: \"BookingResourceReq[] | null\",\n },\n profileId: {\n description: \"Профиль инициатора записи (текущий пользователь), если отличается от токена или нужен явно.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n orderInfo: {\n description: \"Комментарий, место, общий `timePeriod` заказа (например выбранный диапазон дат).\",\n valueSchema: \"OrderInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsFieldDocEntries = {\n caseParticipantId: {\n description: \"Идентификатор участника кейса после создания/дозаписи; для обновления существующего участия.\",\n valueSchema: \"string | null\",\n },\n profileId: {\n description: \"Профиль участника, для которого формируется чек-ин.\",\n valueSchema: \"string | null\",\n },\n roadTimeBefore: {\n description: \"Запас времени «до» визита (секунды), если задан в услуге.\",\n examples: [\"900\"],\n },\n roadTimeAfter: {\n description: \"Запас времени «после» визита (секунды).\",\n examples: [\"600\"],\n },\n comment: {\n description: \"Комментарий участника к записи.\",\n },\n availabilityTime: {\n description:\n \"Статус доступности участника (`Free`/`Busy` и др.), не временной интервал. Выбранные границы слота передаются в `CreateOrderReq.orderInfo.timePeriod`.\",\n valueSchema: \"AvailabilityTime\",\n usage: \"Не копируй сюда `WorkloadPeriod`; это enum-поле внутри `checkInProperties`.\",\n },\n reminders: {\n description: \"Персональные напоминания участника.\",\n valueSchema: \"PersonalReminder[] | null\",\n },\n bookingResourceList: {\n description: \"Ресурсы, выбранные в мастере для этого участника (связь с группами услуги).\",\n valueSchema: \"BookingResource[] | null\",\n },\n caseParticipantType: {\n description: \"Роль в кейсе (потребитель, исполнитель и т.д.).\",\n valueSchema: \"CaseParticipantType\",\n examples: [\"Consumer\", \"Executor\"],\n },\n contactInformation: {\n description: \"Значения полей контакта при записи (телефон, ФИО), если требуются `participateFieldRequirements`.\",\n valueSchema: \"ContactInformation\",\n },\n showCaseInTimetableType: {\n description: \"Как отображать кейс в расписании пользователя.\",\n valueSchema: \"ShowCaseInTimetableType\",\n },\n participantTimeZone: {\n description: \"IANA или смещение часового пояса участника для интерпретации слотов.\",\n examples: [\"Europe/Moscow\"],\n },\n trackingInformation: {\n description: \"Данные трекинга/доставки, если сценарий услуги их собирает.\",\n valueSchema: \"TrackingInformation\",\n },\n loyaltyCardId: {\n description: \"Применяемая карта лояльности.\",\n },\n subscriptionId: {\n description: \"Привязанная подписка, если есть.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const availabilityTimeFieldDocEntries = {\n value: {\n description:\n \"Код доступности слота/участника (`Free`/`Busy`). В check-in flow по умолчанию часто используется `Busy` для подтверждённой записи.\",\n valueSchema: \"AvailabilityTime\",\n examples: [\"Free\", \"Busy\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactInformationFieldDocEntries = {\n fields: {\n description:\n \"Массив заполненных полей контакта участника (`ParticipateFieldValue[]`), собранных формой check-in.\",\n valueSchema: \"ParticipateFieldValue[] | null\",\n usage:\n \"В mobile flow (`contact-information-form.mapper.ts`) объединяется из профиля, query-string и ручного ввода перед отправкой.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldRequirementsFieldDocEntries = {\n participateFieldRequirementList: {\n description:\n \"Список требований к полям контакта (`RequiredField`/`OptionalField`/...). Определяет, какие поля показывать и валидировать в форме.\",\n valueSchema: \"ParticipateFieldRequirement[] | null\",\n usage:\n \"В `participate-field-requirements-form.mapper.ts` сейчас сохраняются в основном `RequiredField` (см. FIXME в коде).\",\n },\n commentFieldName: {\n description: \"Локализованное имя/лейбл поля комментария для формы контакта.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldRequirementFieldDocEntries = {\n participationFieldType: {\n description: \"Тип поля (`FirstName`, `MainPhone`, `MainEmail`, ...).\",\n valueSchema: \"ParticipationFieldType\",\n },\n participationFieldRequirementType: {\n description: \"Требование к полю (`NoneRequirement`, `OptionalField`, `RequiredField`).\",\n valueSchema: \"ParticipationFieldRequirementType\",\n },\n name: {\n description: \"Кастомное отображаемое имя поля (если задано на бэкенде).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participateFieldValueFieldDocEntries = {\n participationFieldType: {\n description: \"Тип заполненного поля.\",\n valueSchema: \"ParticipationFieldType\",\n },\n value: {\n description: \"Значение, введённое пользователем.\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Имя/лейбл поля в момент заполнения.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурса внутри услуги.\",\n valueSchema: \"string | null\",\n },\n id: {\n description: \"ID выбранного ресурса.\",\n valueSchema: \"string | null\",\n },\n amount: {\n description: \"Количество единиц ресурса.\",\n valueSchema: \"double | null\",\n },\n duration: {\n description: \"Длительность использования ресурса (мин/сек в зависимости от контракта сервиса).\",\n valueSchema: \"int32 | null\",\n },\n salePrice: { description: \"Цена ресурса с учётом правил продажи.\", valueSchema: \"double | null\" },\n discount: { description: \"Скидка на ресурс.\", valueSchema: \"double | null\" },\n usageAmount: { description: \"Фактический объём использования ресурса.\", valueSchema: \"double | null\" },\n consumerBookingComment: { description: \"Комментарий клиента к ресурсу.\", valueSchema: \"string | null\" },\n usageType: { description: \"Назначение ресурса (`Payment`, `Ticket`, ...).\", valueSchema: \"UsageType\" },\n processingDate: { description: \"Дата обработки/применения ресурса.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const personalReminderFieldDocEntries = {\n rid: { description: \"ID персонального напоминания.\", valueSchema: \"string | null\" },\n name: { description: \"Название напоминания.\", valueSchema: \"string | null\" },\n date: { description: \"Базовая дата срабатывания.\", valueSchema: \"date-time string | null\" },\n recurringConditions: { description: \"Правила повторения напоминания.\", valueSchema: \"RecurringConditions\" },\n notificationWay: { description: \"Канал уведомления (push/email/etc).\", valueSchema: \"NotificationWay\" },\n sound: { description: \"Звук уведомления (идентификатор/имя).\", valueSchema: \"string | null\" },\n vibrate: { description: \"Нужна ли вибрация при уведомлении.\", valueSchema: \"boolean | null\" },\n needConfirmation: { description: \"Требуется ли подтверждение напоминания.\", valueSchema: \"boolean | null\" },\n locationActivation: { description: \"Гео-условие срабатывания.\", valueSchema: \"LocationActivation\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const recurringConditionsFieldDocEntries = {\n cron: { description: \"CRON выражение повторения.\", valueSchema: \"string | null\" },\n remainingCount: { description: \"Оставшееся число повторов.\", valueSchema: \"int32 | null\" },\n endDate: { description: \"Дата окончания повторений.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала повторений.\", valueSchema: \"date-time string | null\" },\n firstWeekDate: { description: \"Опорная дата недели для weekly-логики.\", valueSchema: \"date-time string | null\" },\n weeklyCron: { description: \"Еженедельный CRON шаблон.\", valueSchema: \"string | null\" },\n repeatInterval: { description: \"Интервал повторения (контракт API).\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const locationActivationFieldDocEntries = {\n point: { description: \"Координата точки активации (`[lng, lat]`).\", valueSchema: \"number[] | null\" },\n radius: { description: \"Радиус гео-зоны активации.\", valueSchema: \"int32\" },\n direction: { description: \"Направление триггера (вход/выход).\", valueSchema: \"ReminderLocationDirection\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const trackingInformationFieldDocEntries = {\n partnerId: { description: \"ID партнёра (affiliate/source).\", valueSchema: \"string | null\" },\n referralProgramId: { description: \"ID реферальной программы.\", valueSchema: \"string | null\" },\n utm: { description: \"UTM-метки запроса, собранные из query-параметров.\", valueSchema: \"Utm\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const utmFieldDocEntries = {\n source: { description: \"UTM source.\", valueSchema: \"string | null\" },\n medium: { description: \"UTM medium.\", valueSchema: \"string | null\" },\n campaign: { description: \"UTM campaign.\", valueSchema: \"string | null\" },\n term: { description: \"UTM term.\", valueSchema: \"string | null\" },\n content: { description: \"UTM content.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceReqFieldDocEntries = {\n amount: {\n description: \"Количество единиц ресурса (например места, единицы услуги).\",\n examples: [\"1\", \"2\"],\n },\n resourceId: {\n description: \"Идентификатор выбранного ресурса из `getServiceResources*`.\",\n },\n resourceGroupId: {\n description: \"Идентификатор группы ресурсов услуги (`ResourceGroup.groupId`), совпадает с шагом мастера.\",\n },\n consumerComment: {\n description: \"Комментарий к конкретной позиции ресурса в заказе.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timePeriodFieldDocEntries = {\n from: { description: \"Начало временного интервала (ISO).\", valueSchema: \"date-time string | null\" },\n to: { description: \"Конец временного интервала (ISO).\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderInfoFieldDocEntries = {\n timePeriod: {\n description: \"Интервал `from`/`to` (ISO 8601) для всего заказа или выбранного диапазона в мастере.\",\n valueSchema: \"TimePeriod\",\n },\n place: {\n description: \"Текстовое место оказания услуги или адрес, если не привязан `placeId` на уровне кейса.\",\n },\n comment: {\n description: \"Общий комментарий к заказу.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepDescriptionFieldDocEntries = {\n stepOrder: {\n description: \"Порядок шага в мастере (сортировка как в `sortStepDescriptionsByOrder`).\",\n examples: [\"1\", \"2\", \"3\"],\n },\n stepType: {\n description:\n \"Тип шага в JSON — **число**: `0` Unknown, `1` Time, `2` Resource, `3` Payment. Не строка `\\\"Time\\\"`.\",\n examples: [\"0\", \"1\", \"2\", \"3\"],\n usage: \"Wire int из API; в SDK те же числа — `ServiceCheckInWizardStepType`.\",\n },\n description: {\n description: \"Человекочитаемый текст шага из настроек услуги (подсказка в UI).\",\n },\n stepParameterList: {\n description: \"Параметры шага (флаги и `ResourceGroupId` для типа Resource).\",\n valueSchema: \"StepParameter[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepParameterFieldDocEntries = {\n parameterName: {\n description:\n \"Имя параметра: для ресурса — `ResourceGroupId`, `HiddenStep`, `HideResourceDetail`, `AutoChoiceResource` (строки как в `ServiceCheckInWizardStepParameterName`).\",\n examples: [\"ResourceGroupId\", \"HiddenStep\", \"HideResourceDetail\", \"AutoChoiceResource\"],\n },\n parameterValue: {\n description: \"Значение: для флагов часто `\\\"true\\\"`; для группы — UUID группы ресурсов.\",\n examples: [\"true\", \"550e8400-e29b-41d4-a716-446655440000\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchServiceResourcesReqFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурсов услуги; обязательна для шага «Ресурс» мастера.\",\n usage: \"Берётся из `getResourceGroupIdFromStep(step)` в SDK.\",\n },\n text: {\n description: \"Поисковая строка по ресурсам (имя, описание — зависит от бэкенда).\",\n },\n resourceIds: {\n description: \"Ограничить выборку конкретными id ресурсов.\",\n valueSchema: \"string[] | null\",\n },\n timePeriod: {\n description: \"Фильтр доступности по времени до выбора слота в календаре.\",\n valueSchema: \"TimePeriod\",\n },\n caseIdsToExclude: {\n description: \"Исключить занятость указанных кейсов при расчёте доступности.\",\n valueSchema: \"string[] | null\",\n },\n distance: {\n description: \"Радиус поиска для геозависимых ресурсов (если поддерживается услугой).\",\n examples: [\"5000\"],\n },\n take: {\n description: \"Лимит записей (пагинация).\",\n examples: [\"20\"],\n },\n skip: {\n description: \"Смещение пагинации.\",\n examples: [\"0\"],\n },\n includeDeleted: {\n description: \"Включать ли удалённые элементы в выборку.\",\n examples: [\"false\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Query-параметры `TimetableQueryOptions` для `PUT .../{id}/timetable`\n * (`services` / `resourceItems` / `calendars` / `contacts.getTimetable`).\n */\nexport const timetableQueryOptionsFieldDocEntries = {\n visibility: {\n description:\n \"Глубина деталей ответа `TimetableCase[]` (`TimetableDetailsVisibility`). `View` — подгрузить CaseView + CaseSummary для событий/заказов (имена, сводки); в torrow-apps это дефолт календаря/списков и экспорта заказов. `Time` — в основном интервалы занятости без полного обогащения событий/заказов (фон календаря / busy-bars). Эхо режима — в `TimetableCase.detailsVisibility`.\",\n valueSchema: \"TimetableDetailsVisibility | null\",\n examples: [\"View\", \"Time\"],\n usage:\n \"Для UI списка событий и CSV-экспорта передавай `View`. Для лёгкой занятости без карточек — `Time`. См. каталог enum `TimetableDetailsVisibility`.\",\n },\n take: {\n description: \"Лимит записей расписания (пагинация query).\",\n valueSchema: \"number | null\",\n examples: [\"30\", \"50\"],\n },\n skip: {\n description: \"Смещение пагинации query.\",\n valueSchema: \"number | null\",\n examples: [\"0\"],\n },\n lmfrom: {\n description: \"Нижняя граница `lastModified` (date-time) для инкрементальной выборки.\",\n valueSchema: \"Date | null\",\n },\n lmto: {\n description: \"Верхняя граница `lastModified` (date-time).\",\n valueSchema: \"Date | null\",\n },\n includeDeleted: {\n description: \"Включать ли удалённые записи в выборку расписания.\",\n valueSchema: \"boolean | null\",\n examples: [\"false\"],\n },\n sort: {\n description: \"Сортировка списка (как в OpenAPI `ItemViewSortCondition`).\",\n valueSchema: \"ItemViewSortCondition | null\",\n },\n createDateFrom: {\n description:\n \"Нижняя граница по дате создания события/заказа. Только у расписания **услуги** (`services.getTimetable`, NSwag `ServiceClient.getTimetable`) — экспорт заказов и т.п.\",\n valueSchema: \"Date | null\",\n },\n createDateTo: {\n description: \"Верхняя граница по дате создания события/заказа. Только у `services.getTimetable`.\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableFilterFieldDocEntries = {\n from: {\n description: \"Начало интервала расписания событий/заказов (ISO 8601).\",\n examples: [\"2026-04-01T00:00:00.000Z\"],\n },\n to: {\n description: \"Конец интервала; может быть null в некоторых сценариях — уточняй по Swagger.\",\n examples: [\"2026-04-07T23:59:59.999Z\"],\n },\n caseStateList: {\n description: \"Фильтр по состояниям событий/заказов в слотах.\",\n valueSchema: \"CaseState[] | null\",\n },\n caseTypeList: {\n description: \"Фильтр по типам событий/заказов.\",\n valueSchema: \"CaseType[] | null\",\n },\n caseParticipantTypeList: {\n description: \"Фильтр по типам участников.\",\n valueSchema: \"CaseParticipantType[] | null\",\n },\n caseParticipantStateList: {\n description: \"Фильтр по состояниям участников.\",\n valueSchema: \"CaseParticipantState[] | null\",\n },\n availabilityTimeList: {\n description: \"Уточнение по конкретным интервалам доступности.\",\n valueSchema: \"AvailabilityTime[] | null\",\n },\n profileIdList: {\n description: \"Ограничение расписания по профилям (исполнители и т.д.).\",\n valueSchema: \"string[] | null\",\n },\n serviceIdList: {\n description: \"Фильтр по услугам в агрегированном расписании.\",\n valueSchema: \"string[] | null\",\n },\n caseIdListToExclude: {\n description: \"Исключить события/заказы из отображения занятости.\",\n valueSchema: \"string[] | null\",\n },\n hasService: {\n description: \"Флаг наличия услуги в записи (фильтр агрегатов).\",\n examples: [\"true\"],\n },\n strictlyInTimeRange: {\n description: \"Требовать полного вхождения событий/заказов в интервал `from`/`to`.\",\n examples: [\"true\", \"false\"],\n },\n bookingResourceFilter: {\n description: \"После выбора ресурсов — список `resourceGroupIdList` для учёта занятости групп.\",\n valueSchema: \"BookingResourceFilter\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFilterFieldDocEntries = {\n resourceGroupIdList: {\n description: \"Группы ресурсов, которые уже выбраны в мастере; передаются в `TimetableFilter` для уточнения слотов.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketPropertiesFieldDocEntries = {\n state: {\n description:\n \"Состояние билета: `Waiting` — ожидает оплаты; `Paid` / `Used` — оплачен или использован; `Canceled`, `Error` — терминальные.\",\n valueSchema: \"TicketState\",\n examples: [\"Waiting\", \"Paid\", \"Used\"],\n usage: \"UI решает, показывать ли кнопку оплаты и внешнюю ссылку.\",\n },\n ticketNumber: {\n description: \"Номер билета для отображения и поддержки.\",\n valueSchema: \"TicketNumber\",\n },\n paymentUrl: {\n description:\n \"URL внешней оплаты (платёжный шлюз). Может прийти без схемы — нормализуй через `normalizePaymentUrl` в SDK.\",\n examples: [\"https://pay.example.com/session/abc\", \"payment.example.com/path\"],\n usage:\n \"Источник: `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`. Наличие зависит от провайдера; для не-cash иногда заполняется после повторного `cases.getById`.\",\n },\n paymentExpirationDate: {\n description: \"Срок действия ссылки или сессии оплаты (ISO 8601).\",\n examples: [\"2026-04-15T12:00:00.000Z\"],\n },\n paymentConfirmationSource: {\n description:\n \"Источник подтверждения оплаты: `PaymentLink` — по ссылке, `Manager` — менеджером, `UnknownTicketPaymentConfirmationSource` — не определён.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n examples: [\"PaymentLink\", \"Manager\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentParametersFieldDocEntries = {\n text: {\n description: \"Общий текст в блоке оплаты (информационный дисклеймер рядом с кнопками).\",\n valueSchema: \"string | null\",\n },\n beforePayMessage: {\n description:\n \"Сообщение до оплаты. В мобильном flow показывается, пока `ticketProperties.state === Waiting`.\",\n valueSchema: \"string | null\",\n },\n afterPayMessage: {\n description:\n \"Сообщение после оплаты. В мобильном flow показывается, когда `ticketProperties.state === Paid`.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentPropertiesFieldDocEntries = {\n paymentProviderType: {\n description:\n \"Тип платёжного провайдера (`Cash`, `CustomLink`, `YooMoney`, ...). Определяет, нужен ли `paymentUrl` и какие кнопки показывать.\",\n valueSchema: \"PaymentProviderType\",\n usage:\n \"В `payment.process.state.ts` для `Cash` и `UnknownPaymentProviderType` переход к внешней форме оплаты не выполняется.\",\n },\n parameters: {\n description: \"Текстовые параметры UI оплаты (`beforePayMessage`, `afterPayMessage`, `text`).\",\n valueSchema: \"PaymentParameters\",\n },\n numeratorId: {\n description: \"ID нумератора/конфигурации провайдера (служебное поле API).\",\n valueSchema: \"string | null\",\n },\n waitForConfirmation: {\n description: \"Требуется подтверждение оплаты до финального статуса билета.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля `CasePersonalInfo`, критичные для оплаты и билета (подмножество схемы OpenAPI). */\nexport const casePersonalInfoPaymentFieldDocEntries = {\n ticketResource: {\n description:\n \"`ResourceItem` билета: `ticketProperties` содержит `paymentUrl`, `state`, `paymentExpirationDate`.\",\n valueSchema: \"ResourceItem\",\n usage: \"Читай через `getTicketPaymentUrl(caseItem)` в SDK.\",\n },\n paymentResource: {\n description: \"Ресурс с данными оплаты/провайдера в персональном контексте (параллельно билету).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"Альтернативный или дополнительный узел оплаты в персональном контексте: если основной URL в билете недоступен, приложение может проверить `paymentResource` (тип и поля — по ответу API и сценарию оплаты).\",\n },\n caseParticipant: {\n description: \"Текущий участник и его поля; нужен для гостевого сценария с `caseParticipantId` в query.\",\n valueSchema: \"CaseParticipant\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldDocEntries = {\n id: { description: \"ID участия в кейсе.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль участника.\", valueSchema: \"string | null\" },\n loyaltyCardId: {\n description:\n \"ID карты лояльности участника (чтение и запись).\",\n valueSchema: \"string | null\",\n },\n caseParticipantState: { description: \"Состояние участия (`Booking`, `Registered`, ...).\", valueSchema: \"CaseParticipantState\" },\n caseParticipantType: { description: \"Тип участия (`Consumer`, `Executor`, `Escort`).\", valueSchema: \"CaseParticipantType\" },\n roadTimeBefore: { description: \"Время в пути до визита.\", valueSchema: \"int32 | null\" },\n roadTimeAfter: { description: \"Время в пути после визита.\", valueSchema: \"int32 | null\" },\n availabilityTime: { description: \"Статус доступности участника: `Free`, `Busy` или системное неизвестное значение.\", valueSchema: \"AvailabilityTime\" },\n bookingResourceList: { description: \"Ресурсы, закреплённые за участником.\", valueSchema: \"BookingResource[] | null\" },\n comment: { description: \"Комментарий участника.\", valueSchema: \"string | null\" },\n contactInformation: { description: \"Контактные данные участника.\", valueSchema: \"ContactInformation\" },\n participantTimeZone: { description: \"Таймзона участника.\", valueSchema: \"string | null\" },\n trackingInformation: { description: \"Трекинг-данные источника регистрации.\", valueSchema: \"TrackingInformation\" },\n showCaseInTimetableType: { description: \"Режим отображения в расписании.\", valueSchema: \"ShowCaseInTimetableType\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsModelFieldDocEntries = {\n caseParticipantId: { description: \"ID существующего участника для обновления.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль, для которого создают/обновляют check-in.\", valueSchema: \"string | null\" },\n caseParticipantType: { description: \"Роль участника в кейсе.\", valueSchema: \"CaseParticipantType\" },\n contactInformation: { description: \"Контактные данные, собранные формой.\", valueSchema: \"ContactInformation\" },\n availabilityTime: { description: \"Статус доступности участника (`Free`/`Busy`), не границы выбранного слота.\", valueSchema: \"AvailabilityTime\" },\n bookingResourceList: { description: \"Выбранные ресурсы участника.\", valueSchema: \"BookingResource[] | null\" },\n reminders: { description: \"Персональные напоминания.\", valueSchema: \"PersonalReminder[] | null\" },\n participantTimeZone: { description: \"Таймзона участника.\", valueSchema: \"string | null\" },\n trackingInformation: { description: \"UTM и прочий tracking контекст.\", valueSchema: \"TrackingInformation\" },\n loyaltyCardId: { description: \"Применяемая карта лояльности.\", valueSchema: \"string | null\" },\n subscriptionId: { description: \"Применяемая подписка карты.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldsFieldDocEntries = {\n contactInformation: { description: \"Обновляемые контактные поля участия.\", valueSchema: \"ContactInformation\" },\n participantTimeZone: { description: \"Обновляемая таймзона участника.\", valueSchema: \"string | null\" },\n comment: { description: \"Обновляемый комментарий участника.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const casePersonalInfoFieldDocEntries = {\n caseParticipant: { description: \"Персональное участие текущего профиля в кейсе.\", valueSchema: \"CaseParticipant\" },\n ticketResource: { description: \"Ресурс билета участника.\", valueSchema: \"ResourceItem\" },\n paymentResource: { description: \"Ресурс оплаты участника.\", valueSchema: \"ResourceItem\" },\n profileId: { description: \"ID профиля в персональном контексте.\", valueSchema: \"string | null\" },\n participantState: { description: \"Состояние участия в персональном контексте.\", valueSchema: \"ParticipantState\" },\n participantType: { description: \"Тип участия в персональном контексте.\", valueSchema: \"ParticipantType\" },\n operationList: { description: \"Разрешённые операции в текущем контексте.\", valueSchema: \"OperationType[] | null\" },\n personalReminders: { description: \"Персональные напоминания пользователя по кейсу.\", valueSchema: \"PersonalReminder[] | null\" },\n subscriptionList: { description: \"Подписки пользователя на кейс.\", valueSchema: \"Subscription[] | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilePropertiesFieldDocEntries = {\n id: { description: \"ID профиля.\", valueSchema: \"string | null\" },\n profileUserAvailability: {\n description: \"Статус доступности пользователя/профиля (`Free`, `Busy`, ...).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: { description: \"Текст заметки о доступности.\", valueSchema: \"string | null\" },\n color: { description: \"Цвет профиля для UI.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantViewPaymentFieldDocEntries = {\n caseParticipation: {\n description: \"Участие в кейсе, связанное с текущим пользователем/профилем.\",\n valueSchema: \"CaseParticipant\",\n },\n ticketResource: {\n description: \"Ресурс билета участника (`ticketProperties.state`, `paymentUrl`, ...).\",\n valueSchema: \"ResourceItem\",\n },\n paymentResource: {\n description: \"Ресурс оплаты участника (`paymentProperties.paymentProviderType`, `parameters`).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"В `PaymentInfoStore` используется как fallback, когда `CaseItem.personalInfo.paymentResource` не заполнен.\",\n },\n profileType: {\n description: \"Тип профиля участника в контексте view.\",\n valueSchema: \"ProfileType\",\n },\n profileProperties: {\n description: \"Параметры профиля (цвет, иконка, настройки отображения).\",\n valueSchema: \"ProfileProperties\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderRespFieldDocEntries = {\n order: {\n description: \"Созданный или обновлённый кейс заказа; структура как у `CaseItem`.\",\n valueSchema: \"CaseItem\",\n },\n consumerSecurityToken: {\n description:\n \"Токен для анонимного/гостевого доступа к кейсу после создания заказа; передавай в `cases.getById(..., { securityToken })`.\",\n examples: [\"eyJhbGciOi...\"],\n usage: \"Без него гость не увидит `personalInfo.ticketResource` с `paymentUrl`.\",\n },\n beginDate: {\n description:\n \"Копии полей кейса на верхнем уровне ответа (дублирование вложенного `order` для обратной совместимости клиентов).\",\n valueSchema: \"string | null\",\n },\n endDate: {\n description: \"Конец интервала заказа на верхнем уровне ответа.\",\n valueSchema: \"string | null\",\n },\n personalInfo: {\n description: \"Персональный контекст на верхнем уровне `OrderResp` (дублирование с вложенным `order`).\",\n valueSchema: \"CasePersonalInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketSummaryFieldDocEntries = {\n state: { description: \"Сводное состояние билета.\", valueSchema: \"TicketState\" },\n sum: { description: \"Итоговая сумма к оплате.\", valueSchema: \"double | null\" },\n currencyCode: { description: \"Код валюты суммы.\", valueSchema: \"string | null\" },\n salePrice: { description: \"Цена продажи.\", valueSchema: \"double | null\" },\n prepayment: { description: \"Размер предоплаты.\", valueSchema: \"double | null\" },\n priceWithoutDiscount: { description: \"Цена без скидок.\", valueSchema: \"double | null\" },\n paymentConfirmationSource: {\n description: \"Источник подтверждения оплаты в сводке билета.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingWizardSdkFieldDocEntries = {\n ServiceResourceLinking: {\n description:\n \"Связь хранится с двух сторон: `ServiceItem.resourceGroupList` описывает доступные группы и порядок ресурсных шагов, а `ResourceItem.serviceDescriptions` связывает конкретный ресурс с группой по паре `serviceId + resourceGroupId`.\",\n valueSchema: \"ServiceItem.resourceGroupList + ResourceItem.serviceDescriptions\",\n usage:\n \"`ResourceBuilder.attachToService` берёт имена из актуальных услуги и группы, а `laterBinding` вычисляет как наличие `ResourceGroup.bookingProperties`. `parentId` и `resourceGroupList.resourceIdList` эту связь не заменяют.\",\n },\n ServiceBuilder: {\n description:\n \"Локальный builder тела услуги: согласует `resourceGroupList` и `stepDescriptionList`, добавляет несколько шагов до одного `services.create` или `services.update` и не выполняет HTTP.\",\n valueSchema: \"ServiceItemForCreateOrUpdate | ServiceItem → ServiceBuildResult\",\n },\n ResourceBuilder: {\n description:\n \"Локальный builder тела ресурса: по загруженному `ServiceItem` добавляет, обновляет и удаляет связи `serviceDescriptions` по паре `serviceId + resourceGroupId`, проверяет `usageType` и не выполняет HTTP. Результат сохраняется обычным `resourceItems.create` или `update`.\",\n valueSchema: \"ResourceItemForCreateOrUpdate | ResourceItem → ResourceBuildResult\",\n usage:\n \"Формирует `serviceName` и `resourceGroupName` из переданных данных; `laterBinding` равен признаку наличия `bookingProperties` у группы.\",\n },\n ResourceServiceBindingOptions: {\n description:\n \"Опциональные поля связи ресурса с группой услуги: `usageAmount` и `sortIndex`. Пропущенное значение сохраняется при обновлении связи, `null` очищает его.\",\n valueSchema: \"{ usageAmount?; sortIndex? }\",\n },\n expandBookingWizardSteps: {\n description:\n \"Функция SDK: по `ServiceItem` строит список шагов `{ kind: time | resource | payment, ... }` в порядке `stepDescriptionList`, с пропуском шагов ресурса при вырожденных лимитах группы (`minResources`/`maxResources`) и отсутствии `ResourceGroupId`.\",\n usage: \"Импорт из `@torrow/sdk-client`; не HTTP.\",\n },\n getTimeStepUiMode: {\n description:\n \"По `sessionDurationProperties` возвращает режим виджета времени: `selectDate` | `selectDateRange` | `selectTimeBegin` | `selectTime`.\",\n usage: \"См. `booking-wizard-hints.ts`.\",\n },\n getTicketPaymentUrl: {\n description:\n \"Извлекает и нормализует URL оплаты из `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`.\",\n usage: \"После `cases.getById` или из `order` в `OrderResp`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Типы услуг и прямое/обратное преобразование `SessionDurationProperties`. */\nexport const serviceTypePresetFieldDocEntries = {\n ServiceType: {\n description:\n \"Публичный тип услуги: пять известных конфигураций и `Custom` для любого другого сочетания трёх определяющих полей.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent | Custom\",\n },\n ServiceTypePresetValues: {\n description:\n \"Deprecated-совместимость для пяти прежних preset-значений, включая `AutoRent`; новый код использует `ServiceType`.\",\n valueSchema: \"Record<string, ServiceTypePreset>\",\n usage:\n \"Выбери бизнес-тип и передай значение в `createServiceSessionDurationProperties`; список не является полным перечислением внутренних типов torrow-apps.\",\n },\n ServiceTypePreset: {\n description:\n \"Union публичных preset-значений, для которых SDK знает подтверждённое сочетание `sessionDurationType`, `timeSelectionType` и `stateManagementType`.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent\",\n },\n ServiceSessionDurationOptions: {\n description:\n \"Дополнительные поля `SessionDurationProperties`: точность, длительности и границы времени. Три поля, определяющие тип услуги, намеренно исключены.\",\n valueSchema:\n \"Omit<SessionDurationProperties, sessionDurationType | timeSelectionType | stateManagementType>\",\n },\n createServiceSessionDurationProperties: {\n description:\n \"Чистый helper SDK, который строит согласованный `SessionDurationProperties` по известному `ServiceType`; `Custom` требует явных параметров.\",\n valueSchema: \"KnownServiceType + ServiceSessionDurationOptions → SessionDurationProperties\",\n usage:\n \"Используй при сборке `ServiceItemForCreateOrUpdate` перед `services.create` или `services.update`. Неизвестный runtime preset приводит к `TypeError`.\",\n },\n getServiceType: {\n description:\n \"Определяет `ServiceType` услуги по точному совпадению `sessionDurationType`, `timeSelectionType`, `stateManagementType`; остальные сочетания дают `Custom`.\",\n valueSchema: \"Pick<ServiceItem, sessionDurationProperties> → ServiceType\",\n },\n getServiceTypeFromSessionDurationProperties: {\n description:\n \"Обратное преобразование `SessionDurationProperties` в `ServiceType`. Не меняет данные и не считает `Custom` признаком валидности конфигурации.\",\n valueSchema: \"SessionDurationProperties | null | undefined → ServiceType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const servicesBookingSdkMethodFieldDocs = mapFieldDocsToStrings(servicesBookingSdkMethodFieldDocEntries);\nexport const casesPaymentSdkMethodFieldDocs = mapFieldDocsToStrings(casesPaymentSdkMethodFieldDocEntries);\n","/**\n * Каталог полей **записи на услугу, мастера и оплаты** для MCP и агентов.\n * Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n availabilityTimeFieldDocEntries,\n bookingResourceFieldDocEntries,\n bookingResourceFilterFieldDocEntries,\n bookingResourceReqFieldDocEntries,\n bookingWizardSdkFieldDocEntries,\n calendarContactTimetableSdkMethodFieldDocEntries,\n caseParticipantFieldDocEntries,\n caseParticipantFieldsFieldDocEntries,\n caseParticipantViewPaymentFieldDocEntries,\n casePersonalInfoFieldDocEntries,\n casePersonalInfoPaymentFieldDocEntries,\n casesPaymentSdkMethodFieldDocEntries,\n checkInPropsModelFieldDocEntries,\n checkInPropsFieldDocEntries,\n contactInformationFieldDocEntries,\n createOrderReqFieldDocEntries,\n locationActivationFieldDocEntries,\n orderInfoFieldDocEntries,\n orderRespFieldDocEntries,\n paymentParametersFieldDocEntries,\n paymentPropertiesFieldDocEntries,\n profilePropertiesFieldDocEntries,\n participateFieldRequirementFieldDocEntries,\n participateFieldRequirementsFieldDocEntries,\n participateFieldValueFieldDocEntries,\n personalReminderFieldDocEntries,\n resourceItemsBookingSdkMethodFieldDocEntries,\n recurringConditionsFieldDocEntries,\n searchServiceResourcesReqFieldDocEntries,\n serviceTypePresetFieldDocEntries,\n servicesBookingSdkMethodFieldDocEntries,\n stepDescriptionFieldDocEntries,\n stepParameterFieldDocEntries,\n ticketSummaryFieldDocEntries,\n ticketPropertiesFieldDocEntries,\n timePeriodFieldDocEntries,\n timetableFilterFieldDocEntries,\n timetableQueryOptionsFieldDocEntries,\n trackingInformationFieldDocEntries,\n utmFieldDocEntries,\n} from \"./booking-wizard-field-docs.js\";\nimport {\n checkinPermissionFieldDocEntries,\n sessionDurationPropertiesFieldDocEntries,\n} from \"./session-checkin-field-docs.js\";\n\nexport const mcpBookingFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ServicesBookingSdkMethods: { ...servicesBookingSdkMethodFieldDocEntries },\n ResourceItemsBookingSdkMethods: { ...resourceItemsBookingSdkMethodFieldDocEntries },\n CalendarContactTimetableSdkMethods: { ...calendarContactTimetableSdkMethodFieldDocEntries },\n CasesPaymentSdkMethods: { ...casesPaymentSdkMethodFieldDocEntries },\n BookingWizardSdkHelpers: { ...bookingWizardSdkFieldDocEntries },\n ServiceTypePresetSdk: { ...serviceTypePresetFieldDocEntries },\n CreateOrderReq: { ...createOrderReqFieldDocEntries },\n CheckInProps: { ...checkInPropsFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n BookingResource: { ...bookingResourceFieldDocEntries },\n BookingResourceReq: { ...bookingResourceReqFieldDocEntries },\n ContactInformation: { ...contactInformationFieldDocEntries },\n ParticipateFieldRequirements: { ...participateFieldRequirementsFieldDocEntries },\n ParticipateFieldRequirement: { ...participateFieldRequirementFieldDocEntries },\n ParticipateFieldValue: { ...participateFieldValueFieldDocEntries },\n OrderInfo: { ...orderInfoFieldDocEntries },\n OrderResp: { ...orderRespFieldDocEntries },\n StepDescription: { ...stepDescriptionFieldDocEntries },\n StepParameter: { ...stepParameterFieldDocEntries },\n SearchServiceResourcesReq: { ...searchServiceResourcesReqFieldDocEntries },\n TimetableFilter: { ...timetableFilterFieldDocEntries },\n TimetableQueryOptions: { ...timetableQueryOptionsFieldDocEntries },\n BookingResourceFilter: { ...bookingResourceFilterFieldDocEntries },\n TicketProperties: { ...ticketPropertiesFieldDocEntries },\n TicketSummary: { ...ticketSummaryFieldDocEntries },\n TimePeriod: { ...timePeriodFieldDocEntries },\n PersonalReminder: { ...personalReminderFieldDocEntries },\n RecurringConditions: { ...recurringConditionsFieldDocEntries },\n LocationActivation: { ...locationActivationFieldDocEntries },\n TrackingInformation: { ...trackingInformationFieldDocEntries },\n Utm: { ...utmFieldDocEntries },\n PaymentParameters: { ...paymentParametersFieldDocEntries },\n PaymentProperties: { ...paymentPropertiesFieldDocEntries },\n CheckInPropsModel: { ...checkInPropsModelFieldDocEntries },\n CaseParticipant: { ...caseParticipantFieldDocEntries },\n CaseParticipantFields: { ...caseParticipantFieldsFieldDocEntries },\n CasePersonalInfo: { ...casePersonalInfoFieldDocEntries },\n CasePersonalInfoPayment: { ...casePersonalInfoPaymentFieldDocEntries },\n CaseParticipantViewPayment: { ...caseParticipantViewPaymentFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n SessionDurationProperties: { ...sessionDurationPropertiesFieldDocEntries },\n CheckinPermission: { ...checkinPermissionFieldDocEntries },\n};\n","/**\n * Смыслы полей **AuthIdentity** (`/api/v1/auth/*`) для агентов и MCP.\n * Типы тел/ответов — `components.schemas` в `schema/generated.ts`; здесь только проза.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Ответ **`POST /api/v1/auth/token`** и **`POST /api/v1/auth/refresh`**. */\nexport const tokenRespFieldDocEntries = {\n accessToken: {\n description:\n \"JWT или иной Bearer для заголовка `Authorization` при вызовах API от имени пользователя.\",\n usage:\n \"Подставляй в `TorrowClientConfig.getAccessToken` (или вручную в `Authorization`). Не логируй целиком. При `status !== TokenReady` может быть пустым.\",\n examples: [\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…\"],\n },\n refreshToken: {\n description: \"Долгоживущий токен для выдачи новой пары без повторного логина.\",\n usage:\n \"Храни безопасно; отправляй только в теле `POST /api/v1/auth/refresh`. После refresh сервер может вернуть новый refresh — замени сохранённый. При `Pending`/`Failed` обычно пуст.\",\n examples: [\"opaque-refresh-string…\"],\n },\n expiration: {\n description:\n \"Срок жизни **access**-токена в **секундах**, отсчитанный от момента ответа (не Unix timestamp).\",\n usage:\n \"Абсолютное время истечения access: `Date.now() + expiration * 1000`. Учитывай запас (skew) до истечения, затем вызывай refresh.\",\n examples: [\"3600\", \"900\"],\n },\n status: {\n description:\n \"Статус выдачи токенов (`TokenStatus`). Классический OTP/`refresh` → `TokenReady`; для MTS Mobile ID возможны `Pending`, `AwaitingSmsCode`, `Failed` с пустыми токенами.\",\n usage:\n \"Пока `Pending` — полли `requestToken` с интервалом из `SendCodeResp.pollIntervalSeconds` (без кода или с уже принятым). `AwaitingSmsCode` — fallback на ввод SMS. `Failed` — новый `sendCode`.\",\n valueSchema: \"TokenStatus\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenRespFieldDocs = mapFieldDocsToStrings(tokenRespFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/refresh`**. */\nexport const refreshReqFieldDocEntries = {\n refreshToken: {\n description: \"Текущий refresh-токен пользователя.\",\n usage:\n \"Обязателен для обмена. Вызов идёт через `AuthFacade` без Bearer пользователя; на шлюзе обычно нужен `authIdentityBasic` (см. `examples/node/auth/auth-refresh.ts`).\",\n },\n deviceInfo: {\n description: \"Сведения об устройстве клиента (`DeviceInfo` в OpenAPI).\",\n usage:\n \"Минимум: непустые `deviceId` + `deviceType` (`DeviceTypeValues` из `@torrow/sdk-client`: Unknown|Mobile|Tablet|Desktop). На проде — ещё push/os.\",\n valueSchema: \"DeviceInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const refreshReqFieldDocs = mapFieldDocsToStrings(refreshReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/token`** (обмен кода/сессии на токены — зависит от способа входа). */\nexport const tokenReqFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии после шага отправки кода / создания сессии.\",\n usage: \"Часто приходит из потока `sendcode` / `session` до вызова `token`.\",\n },\n code: {\n description: \"Одноразовый код подтверждения (SMS, email и т.п.), если применимо.\",\n usage:\n \"Вместе с `sessionId` для классического OTP. Для MTS Mobile ID на фазе polling код может отсутствовать, пока `TokenResp.status === Pending`.\",\n },\n scopes: {\n description:\n \"Запрашиваемые области доступа. OpenAPI — `string[]`; в SDK известные значения — **`AuthScopeValues`**: `user_api`, `admin_api`, `offline_access` (дефолт OTP — **`DefaultAuthScopes`**).\",\n valueSchema: \"AuthScope[] | null\",\n examples: ['[\"user_api\",\"offline_access\"]'],\n },\n deviceInfo: {\n description: \"Сведения об устройстве (`DeviceInfo`).\",\n usage:\n \"`deviceType` — только OpenAPI enum; в SDK: **`DeviceTypeValues`** (`Desktop` по умолчанию в примерах).\",\n valueSchema: \"DeviceInfo\",\n },\n splitTokens: {\n description: \"Флаг разделения токенов в ответе (семантика на стороне сервиса identity).\",\n usage: \"Передавай только если контракт стенда это требует; иначе опусти.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenReqFieldDocs = mapFieldDocsToStrings(tokenReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/revoke`**. */\nexport const revokeReqFieldDocEntries = {\n token: {\n description: \"Refresh-токен, который нужно инвалидировать на сервере.\",\n usage: \"Вызывай при выходе пользователя или компрометации refresh.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const revokeReqFieldDocs = mapFieldDocsToStrings(revokeReqFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/sendcode`. */\nexport const sendCodeReqFieldDocEntries = {\n accountName: {\n description: \"Телефон/email/логин, куда отправляют код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description:\n \"Тип аккаунта (`AccountType`). Для OTP/`sendCode` в продукте и примерах — **`Phone`** или **`Email`**. **`Undefined`** Identity отвергает; **`Telegram`** — не этот эндпоинт (deep-link → `createSession`).\",\n valueSchema: \"AccountType\",\n usage: \"Примеры: `auth-send-code.ts` / `auth-login-with-otp.ts` (`SendCodeAccountType` = Phone|Email).\",\n },\n language: {\n description: \"Язык сообщений/кода.\",\n valueSchema: \"string | null\",\n },\n captcha: {\n description: \"Токен captcha, если включена антибот-проверка.\",\n valueSchema: \"string | null\",\n },\n captchaType: {\n description:\n \"Провайдер captcha, выдавший токен. OpenAPI — `string`; в SDK известные значения — **`AuthCaptchaTypeValues`**: `YandexSmartCaptcha`, `GoogleRecaptcha` (v2 invisible).\",\n valueSchema: \"AuthCaptchaType | null\",\n examples: [\"YandexSmartCaptcha\", \"GoogleRecaptcha\"],\n },\n inviteSessionId: {\n description: \"ID invite-сессии (вход по приглашению).\",\n valueSchema: \"string | null\",\n },\n regionStorageId: {\n description: \"Региональный storage ID (если используется backend identity).\",\n valueSchema: \"int32 | null\",\n },\n preferredMethod: {\n description:\n \"Желаемый способ доставки (`VerificationMethod`). `UnknownMethod` (дефолт) — выбор сервера; иначе — если доступен, иначе fallback по приоритету.\",\n valueSchema: \"VerificationMethod\",\n },\n supportedMethods: {\n description:\n \"Capability negotiation: методы, которые этот билд клиента умеет вести. Out-of-band вроде `MtsMobileId` выбираются только если перечислены здесь — старые клиенты без списка остаются на классическом вводе кода.\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeReqFieldDocs = mapFieldDocsToStrings(sendCodeReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/sendcode`. */\nexport const sendCodeRespFieldDocEntries = {\n sessionId: {\n description: \"ID auth-сессии для следующего шага (`requestToken`).\",\n valueSchema: \"string | null\",\n },\n codeLifetimeSeconds: {\n description: \"TTL кода в секундах (**deprecated** в OpenAPI — предпочитай `sessionLifeTimeInSeconds` / `codeLength`).\",\n valueSchema: \"int32\",\n },\n sessionLifeTimeInSeconds: {\n description: \"TTL auth-сессии в секундах.\",\n valueSchema: \"int32\",\n },\n nextAvailableUsageTime: {\n description: \"Когда можно снова запросить код (rate limit), если сервер вернул.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Сколько попыток ввода кода осталось/доступно для сессии (семантика стенда).\",\n valueSchema: \"int32\",\n },\n usedMethod: {\n description: \"Фактически выбранный сервером способ доставки/подтверждения.\",\n usage: \"UI: подпись «код в SMS» / Telegram / flash-call; при `MtsMobileId` — polling `requestToken` по `status`.\",\n valueSchema: \"VerificationMethod\",\n },\n availableMethods: {\n description: \"Методы, которые клиент может запросить для этого аккаунта (UX «другой способ»).\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n codeLength: {\n description: \"Длина доставленного кода — размер поля ввода в UI.\",\n valueSchema: \"int32\",\n },\n pollIntervalSeconds: {\n description:\n \"Для `usedMethod === MtsMobileId`: рекомендуемый интервал (сек) между повторными `requestToken` пока `TokenResp.status === Pending`.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeRespFieldDocs = mapFieldDocsToStrings(sendCodeRespFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/session`. */\nexport const createAuthSessionReqFieldDocEntries = {\n accountType: {\n description:\n \"Тип аккаунта для auth-сессии с **`authUrl`**. На шлюзе в `AuthUrlsByAccountType` обычно только **`Telegram`**; `Phone`/`Email` → часто 500.\",\n valueSchema: \"AccountType\",\n usage: \"Пример: `auth-login-with-link.ts` (env `TORROW_AUTH_CREATE_SESSION_ACCOUNT_TYPE`, дефолт Telegram).\",\n },\n regionStorageId: { description: \"Регион storage для identity (обязателен в OpenAPI).\", valueSchema: \"int32\" },\n language: { description: \"Язык интерфейса/сообщений сессии (обязателен в OpenAPI).\", valueSchema: \"string\" },\n inviteSessionId: { description: \"ID invite-сессии (если вход по приглашению).\", valueSchema: \"string | null\" },\n captcha: { description: \"Captcha token для защиты от ботов.\", valueSchema: \"string | null\" },\n deviceId: { description: \"Идентификатор устройства клиента.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionReqFieldDocs = mapFieldDocsToStrings(createAuthSessionReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/session`. */\nexport const createAuthSessionRespFieldDocEntries = {\n sessionId: { description: \"ID созданной auth-сессии.\", valueSchema: \"string | null\" },\n sessionLifeTimeInSeconds: { description: \"Срок жизни сессии в секундах.\", valueSchema: \"int32\" },\n nextAvailableUsageTime: {\n description: \"Когда сессию/код можно использовать снова (rate limit), если задано.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Счётчик попыток использования сессии.\",\n valueSchema: \"int32\",\n },\n code: { description: \"Код/секрет сессии, если сервер вернул сразу (редко; зависит от потока).\", valueSchema: \"string | null\" },\n authUrl: {\n description: \"URL внешнего шага аутентификации (deep link / redirect), если применимо.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionRespFieldDocs = mapFieldDocsToStrings(createAuthSessionRespFieldDocEntries);\n\n/**\n * Поверхность SDK, связанная с Bearer и гостевым доступом (не схема OpenAPI, а конфиг клиента).\n */\nexport const torrowClientAuthConfigFieldDocEntries = {\n getAccessToken: {\n description:\n \"Асинхронный колбэк: возвращает строку Bearer или `undefined` (тогда заголовок `Authorization` не ставится).\",\n usage:\n \"Предпочтительно **`@torrow/sdk-auth`** (`TokenSession` → `session.client`, storage + проактивный refresh + опциональный 401→retry). Вручную: кэш access + **`client.auth.refresh`** (без Bearer этого колбэка) — иначе рекурсия. Гостевой **`securityToken`** — только в опциях конкретного вызова фасада, не в конфиге клиента.\",\n },\n authIdentityBasic: {\n description:\n \"HTTP Basic приложения на шлюзе (`AuthIdentityBasic`: `username`/`password` ≈ `clientId`/`clientSecret`). Не user Bearer.\",\n usage:\n \"Нужен для **`client.auth.*`** на `torrow.net`. С сессией — **`TorrowAuth`** + **`appCredentials`** (маппинг внутри auth-пакета). Low-level: **`auth-send-code.ts`**.\",\n valueSchema: \"AuthIdentityBasic\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowClientAuthConfigFieldDocs = mapFieldDocsToStrings(\n torrowClientAuthConfigFieldDocEntries,\n);\n\n/** Методы **`TorrowClient.auth`** ↔ REST AuthIdentity. */\nexport const authSdkMethodFieldDocEntries = {\n refresh: {\n description: \"`POST /api/v1/auth/refresh` — тело `RefreshReq`, ответ `TokenResp`.\",\n usage:\n \"Безопасно вызывать с того же экземпляра `TorrowClient`, у которого задан `getAccessToken`: внутренний вызов не использует Bearer. На `torrow.net` задай `authIdentityBasic`, иначе часто `REQUEST_IS_INVALID`.\",\n },\n requestToken: {\n description: \"`POST /api/v1/auth/token` — тело `TokenReq`, ответ `TokenResp` (смотри `status`).\",\n usage:\n \"После **`sendCode`**: `sessionId` + код (классика) или polling без кода при `MtsMobileId`/`Pending`. Оркестрация — **`TorrowAuth.loginWithOtp`**; явный обмен — **`session.requestTokenWithCode`** (`auth-complete-with-code.ts`); low-level — **`auth-send-code.ts`**.\",\n },\n revoke: {\n description: \"`POST /api/v1/auth/revoke` — тело `RevokeReq`, ответ пустой при успехе.\",\n usage: \"Выход и инвалидация refresh на сервере. Предпочтительно **`session.logout()`**.\",\n },\n sendCode: {\n description: \"`POST /api/v1/auth/sendcode` — тело `SendCodeReq`, ответ `SendCodeResp`.\",\n usage:\n \"Первый шаг OTP: **`sessionId`**, **`usedMethod`**, **`codeLength`**, при Mobile ID — **`pollIntervalSeconds`**. Только sendCode — **`examples/node/auth/auth-send-code.ts`**; склейка с токенами — **`TorrowAuth.loginWithOtp`** / **`auth-login-with-otp.ts`**.\",\n },\n createSession: {\n description: \"`POST /api/v1/auth/session` — тело `CreateAuthSessionReq`, ответ `CreateAuthSessionResp`.\",\n usage:\n \"Не OTP-логин приложения: в torrow-apps вход — `sendCode`/`requestToken`. Этот метод — сессия под внешний deep-link (`authUrl`); на шлюзе в `AuthUrlsByAccountType` обычно только `Telegram`. Для `Phone`/`Email` часто 500 `KeyNotFoundException`. Оркестрация — **`TorrowAuth.loginWithLink`** / **`auth-login-with-link.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkMethodFieldDocs = mapFieldDocsToStrings(authSdkMethodFieldDocEntries);\n\n/**\n * Фасад **`TorrowAuth`** / advanced **`TokenSession`** (**`@torrow/sdk-auth`**).\n * MCP: **`mcpAuthFieldCatalog.AuthSdkHelpers`**.\n */\nexport const authSdkHelperFieldDocEntries = {\n \"TorrowAuth.connect\": {\n description:\n \"Restore из **`TokenStorage`**: при необходимости refresh → `{ client, session }`. **Без** OTP-hook.\",\n usage:\n \"`appCredentials` + `tokenStorage` + `deviceInfo`. Статус — **`session.status`**. Пример: **`auth-connect.ts`**.\",\n },\n \"TorrowAuth.loginWithOtp\": {\n description:\n \"`sendCode` → Mobile ID poll / classic код → persist → `{ client, session }`.\",\n usage:\n \"`account: { accountType, accountName }` (как SendCodeReq). UI: **`onSendCode({ accountName, accountType, usedMethod, codeLength, … })`**; **`getCode({ codeLength })`** только когда нужны цифры (экран уже из `onSendCode`). Примеры: **`auth-login-with-otp.ts`**, **`auth-login-with-otp-mobile-id.ts`**.\",\n },\n \"TorrowAuth.loginWithLink\": {\n description:\n \"Telegram deep-link: `createSession` → **`onLink(authUrl)`** → внутренний poll `requestToken` → persist.\",\n usage:\n \"Код OTP **не** вводить. Пример: **`auth-login-with-link.ts`**.\",\n },\n \"TorrowAuth.fromTokens\": {\n description:\n \"Сид `accessToken` [/ `refreshToken`] в storage → connect-семантика.\",\n usage:\n \"`appCredentials` опционален: без него нет refresh. Opaque/integration key: задай `accessExpiresAtMs` или бессрочно без TTL. У JWT runtime freshness AND-ит `exp` — будущий explicit `accessExpiresAtMs` не оживит просроченный JWT. Пример: **`auth-from-tokens.ts`**.\",\n },\n \"TorrowAuth.anonymous\": {\n description: \"`TorrowClient` без Bearer (`getAccessToken: undefined`).\",\n usage: \"Публичные GET. Пример: **`auth-anonymous-public-service.ts`**.\",\n },\n requestTokenWithCode: {\n description:\n \"**`TokenSession.requestTokenWithCode`**: токены по `sessionId` + OTP-коду (`requestToken`) → persist при TokenReady.\",\n usage:\n \"После `sendCode` + кода (UI/stdin). Не ready → **`AuthSessionNotReadyError`** (poll — внутри **`loginWithLink`**). Пример: **`auth-complete-with-code.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkHelperFieldDocs = mapFieldDocsToStrings(authSdkHelperFieldDocEntries);\n\n/**\n * Гостевой **`securityToken`**: не access JWT, не заголовок `Authorization`.\n * Ключи — подсказки для агентов (MCP: **`mcpAuthFieldCatalog.GuestAccessSecurityToken`**).\n */\nexport const guestAccessSecurityTokenFieldDocEntries = {\n purpose: {\n description:\n \"Одноразовый или контекстный **opaque**-токен, который сервер принимает **вместо или вместе с** полноценной пользовательской сессией, чтобы отдать данные по конкретной сущности (часто **событие/заказ**), не раскрывая всё дерево прав владельца.\",\n usage:\n \"Типичный UX: пользователь **не залогинен**, но открыл ссылку после записи на услугу; сервер выдал токен вместе с ответом **`createOrder`**, приложение подставляет его в следующие **чтения** этого кейса.\",\n },\n notBearer: {\n description:\n \"**Не** подставлять в `Authorization` и **не** путать с `TokenResp.accessToken` / env **`TORROW_ACCESS_TOKEN`**.\",\n usage:\n \"`TORROW_ACCESS_TOKEN` → `TorrowClientConfig.getAccessToken` → заголовок **`Authorization: Bearer …`**. `securityToken` → только поля **`securityToken`** в query или в теле запроса по OpenAPI.\",\n },\n openApiWire: {\n description:\n \"В OpenAPI параметр чаще всего называется **`securityToken`** (query на `GET/PUT/DELETE …` или поле в JSON-теле — сверяй конкретный путь в **`docs/torrow-swagger.json`**).\",\n usage:\n \"SDK не добавляет его глобально: передаёшь в **опциях** соответствующего метода фасада (например `cases.getById(id, { securityToken })`) или в свойстве тела (`GetReCheckInScheduleReq.securityToken` для `services.getReCheckInSchedule`).\",\n },\n afterCreateOrder: {\n description:\n \"После **`client.services.createOrder`** в ответе **`OrderResp`** часто есть строка, которую продукт кладёт в query как **`securityToken`** при открытии экрана события у гостя.\",\n usage:\n \"Возьми **`OrderResp.consumerSecurityToken`** (если пришёл) и передай тем же ключом в **`client.cases.getById(order.id, { securityToken: consumerSecurityToken, caseParticipantId: … })`** — иначе **`personalInfo.ticketResource`** и ссылка на оплату могут не вернуться.\",\n examples: [\"consumerSecurityToken из OrderResp\"],\n },\n envInExamples: {\n description:\n \"В актуальных примерах гостевой токен берётся из **`OrderResp`** и передаётся дальше в browser-потоке **`examples/browser/guest-order/`**; отдельный env с токеном несвязанного кейса не используется.\",\n usage:\n \"В своём коде приложения храни значение там же, где хранишь deep link / черновик заказа (state роутера), а не в общем `TorrowClient`-конфиге — конфиг клиента **не** содержит `securityToken`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const guestAccessSecurityTokenFieldDocs = mapFieldDocsToStrings(\n guestAccessSecurityTokenFieldDocEntries,\n);\n\n/** Значения OpenAPI **`DeviceType`** ↔ **`DeviceTypeValues`** в `@torrow/sdk-client`. */\nexport const deviceTypeValuesFieldDocEntries = {\n Unknown: {\n description: \"Тип устройства не определён / не передан явно.\",\n usage: \"`DeviceTypeValues.Unknown` → `DeviceInfo.deviceType`.\",\n },\n Mobile: {\n description: \"Мобильный клиент.\",\n usage: \"`DeviceTypeValues.Mobile`.\",\n },\n Tablet: {\n description: \"Планшет.\",\n usage: \"`DeviceTypeValues.Tablet`.\",\n },\n Desktop: {\n description: \"Десктоп / веб-десктоп (дефолт в примерах SDK).\",\n usage: \"`DeviceTypeValues.Desktop`. Парсинг env: `parseDeviceType`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deviceTypeValuesFieldDocs = mapFieldDocsToStrings(deviceTypeValuesFieldDocEntries);\n","/**\n * Описания схем токенов и конфигурации авторизации для MCP / агентов.\n * Ключи верхнего уровня: `TokenResp`, `RefreshReq`, `TokenReq`, `RevokeReq` совпадают с `components.schemas`;\n * `TorrowClientConfigAuth` — условное имя для поля {@link TorrowClientConfig.getAccessToken} в справочнике MCP.\n * `GuestAccessSecurityToken` — как и зачем передавать гостевой query/body **`securityToken`** (не Bearer).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n authSdkMethodFieldDocEntries,\n authSdkHelperFieldDocEntries,\n createAuthSessionReqFieldDocEntries,\n createAuthSessionRespFieldDocEntries,\n deviceTypeValuesFieldDocEntries,\n refreshReqFieldDocEntries,\n revokeReqFieldDocEntries,\n sendCodeReqFieldDocEntries,\n sendCodeRespFieldDocEntries,\n tokenReqFieldDocEntries,\n tokenRespFieldDocEntries,\n torrowClientAuthConfigFieldDocEntries,\n guestAccessSecurityTokenFieldDocEntries,\n} from \"./auth-token-field-docs.js\";\n\nexport const mcpAuthFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы `TorrowClient.auth` ↔ OpenAPI AuthIdentity. */\n AuthSdkMethods: { ...authSdkMethodFieldDocEntries },\n /** Хелперы `@torrow/sdk-auth` (OTP-оркестрация, Mobile ID, LoginTask). */\n AuthSdkHelpers: { ...authSdkHelperFieldDocEntries },\n TokenResp: { ...tokenRespFieldDocEntries },\n RefreshReq: { ...refreshReqFieldDocEntries },\n TokenReq: { ...tokenReqFieldDocEntries },\n RevokeReq: { ...revokeReqFieldDocEntries },\n SendCodeReq: { ...sendCodeReqFieldDocEntries },\n SendCodeResp: { ...sendCodeRespFieldDocEntries },\n CreateAuthSessionReq: { ...createAuthSessionReqFieldDocEntries },\n CreateAuthSessionResp: { ...createAuthSessionRespFieldDocEntries },\n /** Поле `getAccessToken` в `TorrowClientConfig` (Bearer приложения). */\n TorrowClientConfigAuth: { ...torrowClientAuthConfigFieldDocEntries },\n /** Гостевой `securityToken`: query/тело запроса, не конфиг `TorrowClient`. */\n GuestAccessSecurityToken: { ...guestAccessSecurityTokenFieldDocEntries },\n /** OpenAPI `DeviceType` ↔ `DeviceTypeValues` / `parseDeviceType`. */\n DeviceTypeValues: { ...deviceTypeValuesFieldDocEntries },\n};\n","/**\n * Описания методов **`TorrowClient.search`** и ключевых DTO поиска заказов для MCP / агентов.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общая текстовая выдача (`GET …/search/{contacts|notes|…}`), не `search.orders`. */\nconst TEXT_SEARCH_PUBLICITY =\n \"В выдаче только **`PublicAvailable`** / **`PublicWithRequest`** (`Personal` / `Private` / `Link` — нет). \" +\n \"`publicityType` не в теле create — **`updatePublicity`**. См. **`docs/agents/participation-flow.md`** §3, пример **`search-contacts.ts`**.\";\n\nexport const searchSdkMethodFieldDocEntries = {\n advisedItems: {\n description:\n \"`GET /api/v1/search/adviseditems` — подборка **`TorrowItem[]`**; query **`AdvisedItemsSearchQuery`** \" +\n \"(`type` **`AdvisedItemType`**, гео, `language`, `take`/`skip`).\",\n usage:\n \"**`NearLocation`**: обязательны `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`** (СПб). \" +\n \"**`Recommendation`**: персональные рекомендации. Не путать с текстовым `search.contacts` и т.п.\",\n },\n orders: {\n description:\n \"`PUT /api/v1/search/{torrowId}/orders` — список представлений заказов (**`CaseView[]`**) под родителем с **`OrderFilter`** в теле.\",\n usage: \"Альтернатива **`client.raw.put`**; см. **`examples/node/raw/search-orders-raw.ts`**.\",\n },\n contacts: {\n description: \"`GET /api/v1/search/contacts` — **`ContactView[]`** по тексту и опциям.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n notes: {\n description: \"`GET /api/v1/search/notes` — **`NoteView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n calendars: {\n description: \"`GET /api/v1/search/calendars` — **`CalendarView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n cases: {\n description: \"`GET /api/v1/search/cases` — **`CaseView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n resources: {\n description: \"`GET /api/v1/search/resources` — **`ResourceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n services: {\n description: \"`GET /api/v1/search/services` — **`ServiceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchSdkMethodFieldDocs = mapFieldDocsToStrings(searchSdkMethodFieldDocEntries);\n\n/** Query `GET /api/v1/search/adviseditems` (`AdvisedItemsSearchQuery` / OpenAPI). */\nexport const advisedItemsSearchQueryFieldDocEntries = {\n type: {\n description:\n \"Режим подборки: **`NearLocation`** (рядом с точкой) или **`Recommendation`** (персональные рекомендации).\",\n valueSchema: \"AdvisedItemType\",\n examples: [\"NearLocation\", \"Recommendation\"],\n },\n longitude: {\n description: \"Долгота WGS84. Для **`NearLocation`** задавай вместе с **`latitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"30.3141\"],\n },\n latitude: {\n description: \"Широта WGS84. Для **`NearLocation`** задавай вместе с **`longitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"59.9386\"],\n },\n language: {\n description: \"Язык локализации подборки (BCP-47).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум элементов в ответе (пагинация).\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const advisedItemsSearchQueryFieldDocs = mapFieldDocsToStrings(\n advisedItemsSearchQueryFieldDocEntries,\n);\n\nexport const orderFilterFieldDocEntries = {\n searchText: {\n description: \"Подстрока для фильтрации заказов (семантика на стороне API).\",\n },\n fuzzyDistance: {\n description: \"Допуск «размытия» для текстового поиска (int).\",\n },\n from: {\n description: \"Начало интервала по времени (**ISO date-time**).\",\n },\n to: {\n description: \"Конец интервала (**ISO date-time**).\",\n },\n strictlyInTimeRange: {\n description: \"Если true — строго внутри интервала.\",\n },\n orderStateList: {\n description: \"Список **`CaseState`** для фильтра.\",\n valueSchema: \"CaseState\",\n },\n orderTypeList: {\n description: \"Список **`CaseType`** для фильтра.\",\n valueSchema: \"CaseType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderFilterFieldDocs = mapFieldDocsToStrings(orderFilterFieldDocEntries);\n","/**\n * Каталог **Search** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n advisedItemsSearchQueryFieldDocEntries,\n orderFilterFieldDocEntries,\n searchSdkMethodFieldDocEntries,\n} from \"./search-field-docs.js\";\n\nexport const mcpSearchFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n SearchSdkMethods: { ...searchSdkMethodFieldDocEntries },\n AdvisedItemsSearchQuery: { ...advisedItemsSearchQueryFieldDocEntries },\n OrderFilter: { ...orderFilterFieldDocEntries },\n};\n","/**\n * Каталог методов **`client.notes`** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { notesSdkMethodFieldDocEntries } from \"./notes-field-docs.js\";\n\nexport const mcpNotesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n NotesSdkMethods: { ...notesSdkMethodFieldDocEntries },\n};\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const generateSecurityTokenReqFieldDocEntries = {\n forUser: {\n description: \"Токен ограничен текущим пользователем/профилем.\",\n valueSchema: \"boolean | null\",\n },\n expiresAt: {\n description: \"Срок действия security-token.\",\n valueSchema: \"date-time string | null\",\n },\n operationTypeList: {\n description: \"Список разрешённых операций для токена.\",\n valueSchema: \"OperationType[] | null\",\n },\n participantType: {\n description: \"Минимальная роль участия при использовании токена.\",\n valueSchema: \"ParticipantType\",\n },\n participantState: {\n description: \"Ожидаемое состояние участия для доступа по токену.\",\n valueSchema: \"ParticipantState\",\n },\n roleIdList: {\n description: \"Ограничение по role id (контракт API).\",\n valueSchema: \"int32[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenReqFieldDocs = mapFieldDocsToStrings(generateSecurityTokenReqFieldDocEntries);\n\nexport const generateSecurityTokenRespFieldDocEntries = {\n token: {\n description: \"Сгенерированный security-token для guest/limited access.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenRespFieldDocs = mapFieldDocsToStrings(generateSecurityTokenRespFieldDocEntries);\n\nexport const shareItemReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль-инициатор шаринга (если отличается от контекста токена).\",\n valueSchema: \"string | null\",\n },\n readerProfileIdList: {\n description:\n \"Список профилей-получателей (основное поле API). Каждый id должен уже быть в личном списке владельца, иначе `failedToParticipate` → `CONTACT_IS_NOT_IN_PERSONAL_LIST`.\",\n valueSchema: \"string[] | null\",\n },\n readerProfileIdsList: {\n description: \"Легаси-алиас списка получателей (встречается в старых контрактах).\",\n valueSchema: \"string[] | null\",\n },\n participantType: {\n description: \"Тип доступа, который выдают получателям.\",\n valueSchema: \"ParticipantType\",\n },\n userMessage: {\n description: \"Комментарий/сообщение получателю при шаринге.\",\n valueSchema: \"string | null\",\n },\n versionToCheck: {\n description: \"Версия объекта для optimistic lock.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Флаг генерации анонса после share.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const shareItemReqFieldDocs = mapFieldDocsToStrings(shareItemReqFieldDocEntries);\n\nexport const sendLinkOfItemReqFieldDocEntries = {\n profileId: {\n description: \"Профиль-инициатор отправки ссылки.\",\n valueSchema: \"string | null\",\n },\n recipientProfileIdList: {\n description: \"Список профилей-получателей ссылки.\",\n valueSchema: \"string[] | null\",\n },\n message: {\n description: \"Сопроводительное сообщение к ссылке.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemReqFieldDocs = mapFieldDocsToStrings(sendLinkOfItemReqFieldDocEntries);\n\nexport const getShareItemSessionReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль инициатора invite-session ссылки.\",\n valueSchema: \"string | null\",\n },\n expiredDate: {\n description: \"Срок действия session URL.\",\n valueSchema: \"Date\",\n },\n activateCount: {\n description: \"Сколько раз можно активировать session.\",\n valueSchema: \"number\",\n },\n code: {\n description: \"Опциональный код активации.\",\n valueSchema: \"string | null\",\n },\n userMessage: {\n description: \"Сообщение к invite-session.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const getShareItemSessionReqFieldDocs = mapFieldDocsToStrings(getShareItemSessionReqFieldDocEntries);\n\nexport const sendLinkOfItemRespFieldDocEntries = {\n isSuccess: {\n description: \"Итог отправки ссылки.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemRespFieldDocs = mapFieldDocsToStrings(sendLinkOfItemRespFieldDocEntries);\n\nexport const participationFieldDocEntries = {\n meta: {\n description: \"Мета участия (`version`, даты, системные атрибуты).\",\n valueSchema: \"ObjectInfo\",\n },\n profileId: {\n description: \"Профиль участника, для которого действует участие.\",\n valueSchema: \"string | null\",\n },\n participantState: {\n description: \"Состояние участия (`Requested`, `Approved`, ...).\",\n valueSchema: \"ParticipantState\",\n },\n participantType: {\n description: \"Роль участия (`Reader`, `Editor`, `Owner`, ...).\",\n valueSchema: \"ParticipantType\",\n },\n notificationWayList: {\n description: \"Каналы уведомлений участника по объекту.\",\n valueSchema: \"NotificationWay[] | null\",\n },\n subscriptionList: {\n description: \"Подписки/настройки подписок участника.\",\n valueSchema: \"Subscription[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationFieldDocs = mapFieldDocsToStrings(participationFieldDocEntries);\n\nexport const profileWithErrorFieldDocEntries = {\n profile: {\n description: \"ID профиля, по которому операция завершилась с ошибкой.\",\n valueSchema: \"string | null\",\n },\n torrowErrorClient: {\n description: \"Структура ошибки API для этого профиля.\",\n valueSchema: \"TorrowErrorClient\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileWithErrorFieldDocs = mapFieldDocsToStrings(profileWithErrorFieldDocEntries);\n\nexport const participationRespFieldDocEntries = {\n participationList: {\n description: \"Список успешных participation-изменений.\",\n valueSchema: \"Participation[] | null\",\n },\n failedToParticipate: {\n description: \"Профили, по которым операция не выполнена, с ошибками.\",\n valueSchema: \"ProfileWithError[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationRespFieldDocs = mapFieldDocsToStrings(participationRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const accountingTransactionFieldDocEntries = {\n accountId: { description: \"Счёт/баланс, к которому относится транзакция.\", valueSchema: \"string | null\" },\n transactionDate: { description: \"Дата проводки транзакции.\", valueSchema: \"date-time string\" },\n state: { description: \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\", valueSchema: \"AccountingTransactionState\" },\n type: { description: \"Тип транзакции (`Balance` или `Operation`).\", valueSchema: \"AccountingTransactionType\" },\n transactionValues: { description: \"Список изменений по продуктам/валютам.\", valueSchema: \"BalanceValue[] | null\" },\n comment: { description: \"Пояснение к операции (для UI/аудита).\", valueSchema: \"string | null\" },\n operationCategory: { description: \"Категория операции (int-код API).\", valueSchema: \"int32\" },\n operationCategoryName: { description: \"Человекочитаемое имя категории операции.\", valueSchema: \"string | null\" },\n validityDate: { description: \"Срок действия транзакции/резерва, если применимо.\", valueSchema: \"date-time string | null\" },\n transactionInfo: { description: \"Доп. служебные данные транзакции.\", valueSchema: \"TransactionInfo\" },\n id: { description: \"ID транзакции.\", valueSchema: \"string | null\" },\n meta: { description: \"Мета (`version`, даты изменения и т.д.).\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const accountingTransactionFieldDocs = mapFieldDocsToStrings(accountingTransactionFieldDocEntries);\n\nexport const balanceValueFieldDocEntries = {\n productId: { description: \"ID продукта/балансовой позиции.\", valueSchema: \"int32\" },\n amount: { description: \"Количество/сумма в этой позиции.\", valueSchema: \"double | null\" },\n productName: { description: \"Название продукта/единицы баланса.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const balanceValueFieldDocs = mapFieldDocsToStrings(balanceValueFieldDocEntries);\n\nexport const actionHistoryInfoFieldDocEntries = {\n actionHistoryType: { description: \"Тип действия в истории.\", valueSchema: \"ActionHistoryType\" },\n state: { description: \"Состояние записи истории.\", valueSchema: \"ActionHistoryState\" },\n userMessage: { description: \"Пользовательское сообщение (если передавалось в операции).\", valueSchema: \"string | null\" },\n text: { description: \"Системный/локализованный текст события.\", valueSchema: \"string | null\" },\n userProfileView: { description: \"Профиль пользователя, инициировавшего действие.\", valueSchema: \"ContactView\" },\n correspondentProfileViewList: { description: \"Профили корреспондентов/получателей события.\", valueSchema: \"ContactView[] | null\" },\n itemContactView: { description: \"Снимок контакта, к которому относится событие (если применимо).\", valueSchema: \"ContactView\" },\n itemContextView: { description: \"Снимок контекста, к которому относится событие (если применимо).\", valueSchema: \"ContextView\" },\n itemNoteView: { description: \"Снимок заметки, к которой относится событие (если применимо).\", valueSchema: \"NoteView\" },\n itemCaseView: { description: \"Снимок события/кейса, к которому относится запись (если применимо).\", valueSchema: \"CaseView\" },\n itemCalendarView: { description: \"Снимок календаря, к которому относится событие (если применимо).\", valueSchema: \"CalendarView\" },\n itemServiceView: { description: \"Снимок услуги, к которой относится событие (если применимо).\", valueSchema: \"ServiceView\" },\n itemResourceView: { description: \"Снимок ресурса, к которому относится событие (если применимо).\", valueSchema: \"ResourceView\" },\n itemLoyaltyCardView: {\n description: \"Снимок карты лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltyCardView\",\n },\n itemLoyaltySystemView: {\n description: \"Снимок программы лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltySystemView\",\n },\n id: { description: \"ID записи action-history.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект записи.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryInfoFieldDocs = mapFieldDocsToStrings(actionHistoryInfoFieldDocEntries);\n\n/** Query `GET /api/v1/actionhistory` (`ActionHistoryListQuery` / OpenAPI). */\nexport const actionHistoryListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста событий (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать записи по удалённым объектам. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка.\",\n valueSchema: \"ItemViewSortCondition\",\n },\n types: {\n description: \"Фильтр по типам действий (`CreateItem`, `UpdateItem`, …).\",\n valueSchema: \"ActionHistoryType[]\",\n },\n states: {\n description: \"Фильтр по состоянию записи (`Executing`, `Success`, …).\",\n valueSchema: \"ActionHistoryState[]\",\n },\n itemIds: {\n description:\n \"Фильтр по id элементов. Опционален: без параметра / `[]` — лента действий пользователя; непустой список — история по выбранным item (нужны существующие id с доступом). Невалидный id на шлюзе может дать HTTP 500.\",\n valueSchema: \"string[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryListQueryFieldDocs = mapFieldDocsToStrings(actionHistoryListQueryFieldDocEntries);\n\n/** Query `GET /api/v1/announcements` (`AnnouncementsListQuery` / OpenAPI). */\nexport const announcementsListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста уведомлений (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n state: {\n description:\n \"Один фильтр по состоянию (`New`, `Hidden`, `Read`, …). Если задан — имеет приоритет над **`stateList`**. Без **`state`** и **`stateList`** шлюз отдаёт **пустой** список (не ошибку).\",\n valueSchema: \"AnnouncementState\",\n examples: [\"New\", \"Hidden\"],\n },\n stateList: {\n description:\n \"Фильтр по нескольким состояниям. В приложении лента грузит **`New`** (новые) и **`Hidden`** (обработанные) отдельными запросами. Без **`state`** и **`stateList`** ответ пустой.\",\n valueSchema: \"AnnouncementState[]\",\n examples: ['[\"New\", \"Hidden\"]'],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать удалённые уведомления. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка (в приложении часто `LastModifiedDesc`).\",\n valueSchema: \"ItemViewSortCondition\",\n examples: [\"LastModifiedDesc\"],\n },\n profileId: {\n description: \"Опциональный фильтр по профилю-получателю уведомления.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementsListQueryFieldDocs = mapFieldDocsToStrings(announcementsListQueryFieldDocEntries);\n\nexport const announcementInfoFieldDocEntries = {\n type: { description: \"Тип анонса (share, grant access, create order, ...).\", valueSchema: \"AnnouncementType\" },\n state: { description: \"Состояние анонса (`New`, `Read`, `Hidden`).\", valueSchema: \"AnnouncementState\" },\n category: { description: \"Категория визуализации (`Action`, `Alert`, `Reminder`, ...).\", valueSchema: \"AnnouncementCategory\" },\n priority: { description: \"Приоритет показа (`Low`, `Normal`, `High`).\", valueSchema: \"AnnouncementPriority\" },\n senderProfileView: { description: \"Профиль отправителя анонса.\", valueSchema: \"ContactView\" },\n recipientProfileView: { description: \"Профиль получателя анонса.\", valueSchema: \"ContactView\" },\n userMessage: { description: \"Сообщение пользователя (если источник события его содержал).\", valueSchema: \"string | null\" },\n text: { description: \"Итоговый текст уведомления для ленты.\", valueSchema: \"string | null\" },\n creationDate: { description: \"Дата создания уведомления.\", valueSchema: \"date-time string | null\" },\n id: { description: \"ID уведомления.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект уведомления.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementInfoFieldDocs = mapFieldDocsToStrings(announcementInfoFieldDocEntries);\n\nexport const updateAnnouncementStateReqFieldDocEntries = {\n newState: { description: \"Новое состояние уведомления (`Read`/`Hidden`/...).\", valueSchema: \"AnnouncementState\" },\n announcementId: { description: \"ID анонса, состояние которого обновляют.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateAnnouncementStateReqFieldDocs = mapFieldDocsToStrings(updateAnnouncementStateReqFieldDocEntries);\n\nexport const exportRequestFieldDocEntries = {\n itemId: { description: \"Корневой item для экспорта подграфа.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина обхода связей при экспорте.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportRequestFieldDocs = mapFieldDocsToStrings(exportRequestFieldDocEntries);\n\nexport const exportGraphFieldDocEntries = {\n rootId: { description: \"ID корневого элемента экспортированного графа.\", valueSchema: \"string | null\" },\n items: { description: \"Снимок элементов подграфа (узлы).\", valueSchema: \"TorrowItem[] | null\" },\n views: { description: \"Экспортированные представления (views) для элементов графа.\", valueSchema: \"ItemView[] | null\" },\n timetableCases: {\n description: \"Связанные записи расписания/кейсы, попавшие в экспорт.\",\n valueSchema: \"TimetableCase[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportGraphFieldDocs = mapFieldDocsToStrings(exportGraphFieldDocEntries);\n\nexport const importByFileRequestFieldDocEntries = {\n exportGraph: { description: \"Граф, ранее полученный через export API.\", valueSchema: \"ExportGraph\" },\n parentId: { description: \"Куда импортировать корень графа.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль-владелец для импортируемых объектов.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импортировать только дочерние узлы графа без корня.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не дублировать root, если уже существует.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByFileRequestFieldDocs = mapFieldDocsToStrings(importByFileRequestFieldDocEntries);\n\nexport const importByUniqueNameRequestFieldDocEntries = {\n uniqueName: { description: \"Уникальное имя экспортированного набора/корня.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина импортируемого подграфа.\", valueSchema: \"int32 | null\" },\n parentId: { description: \"Родитель, куда включают импортированный граф.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль контекста импорта.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импорт без корневого узла.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не создавать дубль root при совпадении.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByUniqueNameRequestFieldDocs = mapFieldDocsToStrings(importByUniqueNameRequestFieldDocEntries);\n\nexport const generateReportReqFieldDocEntries = {\n options: { description: \"Опции доставки/локали отчёта.\", valueSchema: \"ReportOptions\" },\n properties: { description: \"Параметры формирования отчёта (контракт API).\", valueSchema: \"ReportProperties\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportReqFieldDocs = mapFieldDocsToStrings(generateReportReqFieldDocEntries);\n\nexport const reportPropertiesFieldDocEntries = {\n discriminator: {\n description:\n \"Subtype отчёта (NJsonSchema inheritance). Swagger описывает только базу; runtime требует одно из: `CaseReportProperties`, `ServiceReportProperties`, `ServicesResourcesReportProperties`, `ResourcesRentReportProperties`, `ResourceReportProperties`. Пустой `{}` → HTTP 500.\",\n valueSchema: \"string\",\n examples: [\"CaseReportProperties\", \"ServiceReportProperties\"],\n },\n fakeForTsGeneratorDoNotRemove: {\n description:\n \"Техническое поле OpenAPI для генератора типов. В бизнес-логике отчётов не используется и обычно не передаётся.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportPropertiesFieldDocs = mapFieldDocsToStrings(reportPropertiesFieldDocEntries);\n\nexport const reportOptionsFieldDocEntries = {\n reportDeliveryType: { description: \"Способ доставки отчёта: `Link` или `Email`.\", valueSchema: \"ReportDeliveryType\" },\n reportDeliveryAddresses: { description: \"Email-адреса получателей, если доставка через Email.\", valueSchema: \"string[] | null\" },\n language: { description: \"Язык отчёта (обычно BCP-47, напр. `ru`, `en`).\", valueSchema: \"string\" },\n timeZone: {\n description: \"Таймзона для дат отчёта (в приложении используется локальная IANA зона пользователя).\",\n valueSchema: \"string\",\n examples: [\"Europe/Moscow\", \"UTC\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportOptionsFieldDocs = mapFieldDocsToStrings(reportOptionsFieldDocEntries);\n\nexport const generateReportRespFieldDocEntries = {\n reportLink: { description: \"Ссылка на готовый отчёт.\", valueSchema: \"string | null\" },\n expirationTime: { description: \"Срок действия ссылки на отчёт.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportRespFieldDocs = mapFieldDocsToStrings(generateReportRespFieldDocEntries);\n\nexport const loyaltyCardSubscriptionFieldDocEntries = {\n subscriptionId: { description: \"ID подписки карты лояльности.\", valueSchema: \"string | null\" },\n name: { description: \"Название подписки (тариф/пакет).\", valueSchema: \"string | null\" },\n state: { description: \"Состояние подписки (int-код API).\", valueSchema: \"int32\" },\n createDate: { description: \"Дата создания подписки.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала действия подписки.\", valueSchema: \"date-time string | null\" },\n endDate: { description: \"Дата окончания действия подписки.\", valueSchema: \"date-time string | null\" },\n caseParticipantId: {\n description: \"ID участника кейса, на основе которого создана подписка.\",\n valueSchema: \"string | null\",\n },\n image: { description: \"Изображение/иконка подписки.\", valueSchema: \"FileInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltyCardSubscriptionFieldDocs = mapFieldDocsToStrings(loyaltyCardSubscriptionFieldDocEntries);\n\n/** Тело `POST .../loyaltysystems/{id}/loyaltycard` — **`CreateLoyaltyCardReq`**. */\nexport const createLoyaltyCardReqFieldDocEntries = {\n profileId: {\n description: \"Профиль владельца выпускаемой карты (обязателен).\",\n valueSchema: \"string\",\n usage: \"`client.loyaltySystems.createLoyaltyCard(systemId, { profileId, … })`.\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого создаются карта клиента и абонемент.\",\n valueSchema: \"string | null\",\n usage:\n \"Сценарий записи/оплаты → выпуск карты с привязкой к заказу; `null` — выпуск без элемента-основания.\",\n },\n contactInformation: {\n description: \"Контактные данные держателя карты при выпуске (если передаются отдельно от профиля).\",\n valueSchema: \"ContactInformation\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createLoyaltyCardReqFieldDocs = mapFieldDocsToStrings(createLoyaltyCardReqFieldDocEntries);\n\n/** Вложенный объект в **`CreateLoyaltyCardSubscriptionReq.initialTransaction`**. */\nexport const initialTransactionFieldDocEntries = {\n beginTransactionValues: {\n description: \"Начальные значения баланса/продуктов при создании абонемента.\",\n valueSchema: \"TransactionValue[]\",\n },\n state: {\n description: \"Состояние начальной транзакции (`Intended`, `Reserved`, `Commited`, …).\",\n valueSchema: \"AccountingTransactionState\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого созданы карта клиента и абонемент; связывается с начальной транзакцией подписки.\",\n valueSchema: \"string | null\",\n usage: \"Тот же смысл, что у **`CreateLoyaltyCardReq.basisItemId`**, в контексте `createSubscription`.\",\n },\n caseParticipantId: {\n description: \"ID участника кейса, связанного с начальной транзакцией (если применимо).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const initialTransactionFieldDocs = mapFieldDocsToStrings(initialTransactionFieldDocEntries);\n\nexport const loyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemIdList: {\n description: \"Список программ лояльности, по которым считают агрегаты.\",\n valueSchema: \"string[]\",\n },\n name: { description: \"Имя набора статистики/среза (лейбл запроса).\", valueSchema: \"string\" },\n filterList: { description: \"Фильтры карт/подписок для статистики.\", valueSchema: \"LoyaltyCardFilterCondition[] | null\" },\n includeDeleted: { description: \"Включать удалённые объекты в расчёт.\", valueSchema: \"boolean | null\" },\n take: { description: \"Лимит элементов при расчёте.\", valueSchema: \"int32 | null\" },\n skip: { description: \"Смещение для пакетной обработки.\", valueSchema: \"int32 | null\" },\n lastModifiedFrom: { description: \"Нижняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n lastModifiedTo: { description: \"Верхняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n createDateFrom: { description: \"Нижняя граница по дате создания.\", valueSchema: \"Date | null\" },\n createDateTo: { description: \"Верхняя граница по дате создания.\", valueSchema: \"Date | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsReqFieldDocEntries);\n\nexport const loyaltySystemsStatisticsRespFieldDocEntries = {\n name: { description: \"Имя среза статистики из запроса.\", valueSchema: \"string | null\" },\n count: { description: \"Рассчитанное количество элементов по срезу.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsRespFieldDocEntries);\n\nexport const getLoyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemsStatisticsReqList: {\n description: \"Пакет запросов статистики по программам лояльности.\",\n valueSchema: \"LoyaltySystemsStatisticsReq[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n);\n\nexport const getLoyaltySystemsStatisticsRespFieldDocEntries = {\n loyaltySystemsStatisticsRespList: {\n description: \"Пакет ответов статистики по каждому входному срезу.\",\n valueSchema: \"LoyaltySystemsStatisticsResp[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n);\n\nexport const transactionInfoFieldDocEntries = {\n basisItem: {\n description: \"Базовый объект-основание транзакции (например кейс/карта/подписка).\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const transactionInfoFieldDocs = mapFieldDocsToStrings(transactionInfoFieldDocEntries);\n\nexport const torrowErrorClientFieldDocEntries = {\n code: { description: \"Код ошибки API.\", valueSchema: \"int32\" },\n name: { description: \"Системное имя ошибки.\", valueSchema: \"string | null\" },\n message: { description: \"Пользовательское сообщение ошибки.\", valueSchema: \"string | null\" },\n systemMessage: { description: \"Техническое сообщение сервера.\", valueSchema: \"string | null\" },\n innerError: { description: \"Вложенная причина ошибки.\", valueSchema: \"TorrowErrorClient\" },\n traceUrl: { description: \"URL трейса/диагностики (если включено на сервере).\", valueSchema: \"string | null\" },\n traceIdentifier: { description: \"Идентификатор трассировки для саппорта.\", valueSchema: \"string | null\" },\n parameters: { description: \"Параметры ошибки (ключ-значение).\", valueSchema: \"Record<string, string | null> | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const torrowErrorClientFieldDocs = mapFieldDocsToStrings(torrowErrorClientFieldDocEntries);\n\nexport const getParticipationCountRespFieldDocEntries = {\n count: { description: \"Количество участников по текущему фильтру.\", valueSchema: \"int32\" },\n isExactValue: {\n description: \"Точное ли это значение (`false` — сервер мог вернуть приближённую оценку).\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getParticipationCountRespFieldDocs = mapFieldDocsToStrings(getParticipationCountRespFieldDocEntries);\n\nexport const fileInfoFieldDocEntries = {\n id: {\n description: \"ID файла в хранилище.\",\n valueSchema: \"string | null\",\n usage:\n \"В теле **create**/**update** item (`image`, `files[]`, …) достаточно только **`id`** — в БД сохраняется ссылка на файл. **`fileName`** / **`fileSize`** для puturl — query **`getImagePutUrl`** / **`getFilePutUrl`**, не обязательны в теле item.\",\n },\n url: {\n description: \"Текущий URL файла (может быть временным).\",\n valueSchema: \"string | null\",\n usage: \"Только в ответах (**getById**, **getFileInfo**, …); в write-тело не передаётся.\",\n },\n urlExpiration: {\n description: \"Срок действия `url`.\",\n valueSchema: \"date-time string | null\",\n usage: \"Только read; presigned download URL из ответа сервера.\",\n },\n eTag: { description: \"ETag файла для кеша/валидации.\", valueSchema: \"string | null\" },\n fileName: {\n description: \"Имя файла.\",\n valueSchema: \"string | null\",\n usage: \"Read и query puturl; в create/update item не обязателен (как в torrow-apps).\",\n },\n fileSize: {\n description: \"Размер файла в байтах.\",\n valueSchema: \"int64 | null\",\n usage: \"Read и query puturl; в create/update item не обязателен.\",\n },\n refreshUrl: {\n description: \"URL для обновления/рефреша ссылки.\",\n valueSchema: \"string | null\",\n usage: \"Только read; альтернатива явному **getFileInfo** / **getImageInfo** при протухшем `url`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const fileInfoFieldDocs = mapFieldDocsToStrings(fileInfoFieldDocEntries);\n\nexport const putUrlRespFieldDocEntries = {\n url: { description: \"Presigned URL для загрузки файла.\", valueSchema: \"string | null\" },\n urlExpiration: { description: \"Срок действия presigned URL.\", valueSchema: \"date-time string\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const putUrlRespFieldDocs = mapFieldDocsToStrings(putUrlRespFieldDocEntries);\n\nexport const updateFileIdRespFieldDocEntries = {\n fileInfo: { description: \"Актуальная информация о привязанном файле.\", valueSchema: \"FileInfo\" },\n meta: { description: \"Мета объекта после обновления file id.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateFileIdRespFieldDocs = mapFieldDocsToStrings(updateFileIdRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const blockReasonFieldDocEntries = {\n id: {\n description: \"Числовой идентификатор причины блокировки в справочнике.\",\n valueSchema: \"int32\",\n },\n defaultName: {\n description: \"Отображаемое имя по умолчанию (часто мультиязычное имя на стороне сервиса словарей).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок сортировки в списке причин.\",\n valueSchema: \"int32\",\n },\n isDeleted: {\n description: \"Мягкое удаление записи справочника.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonFieldDocs = mapFieldDocsToStrings(blockReasonFieldDocEntries);\n\nexport const blockReasonsSdkMethodFieldDocEntries = {\n create: {\n description:\n \"`POST /api/v1/blockreason` — создать причину; ответ: id. Только **администратор Torrow**.\",\n },\n getById: {\n description:\n \"`GET /api/v1/blockreason/{id}` — одна причина, query `lng`. Только **администратор Torrow**.\",\n },\n listAll: {\n description:\n \"`GET /api/v1/blockreason/all` — список с пагинацией и сортировкой словаря. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n delete: {\n description: \"`DELETE /api/v1/blockreason/{id}`. Только **администратор Torrow**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonsSdkMethodFieldDocs = mapFieldDocsToStrings(blockReasonsSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const apiKeyInfoFieldDocEntries = {\n keyId: {\n description: \"Идентификатор API-ключа (для `delete` и отображения в списке).\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Человекочитаемое имя ключа.\",\n valueSchema: \"string | null\",\n },\n creationTime: {\n description: \"Время создания ключа (`date-time` → `Date`).\",\n valueSchema: \"Date\",\n },\n expiration: {\n description: \"Срок действия ключа (`date-time` → `Date | null`).\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeyInfoFieldDocs = mapFieldDocsToStrings(apiKeyInfoFieldDocEntries);\n\nexport const createApiKeyRequestFieldDocEntries = {\n name: {\n description: \"Имя ключа (maxLength 100).\",\n valueSchema: \"string | null\",\n },\n lifetimeDays: {\n description: \"Срок жизни ключа в днях (1…int32); `null` — по правилам сервера.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyRequestFieldDocs = mapFieldDocsToStrings(createApiKeyRequestFieldDocEntries);\n\nexport const createApiKeyResponseFieldDocEntries = {\n apiKey: {\n description: \"Метаданные созданного ключа (`ApiKeyInfo`).\",\n valueSchema: \"ApiKeyInfo\",\n },\n key: {\n description:\n \"Секрет API-ключа. Возвращается **один раз** при `create`. Не логировать и не сохранять в открытых логах/телеметрии.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyResponseFieldDocs = mapFieldDocsToStrings(createApiKeyResponseFieldDocEntries);\n\nexport const apiKeysSdkMethodFieldDocEntries = {\n list: {\n description: \"`GET /api/v1/apikeys` — список API-ключей текущего пользователя (`ApiKeyInfo[]`).\",\n },\n create: {\n description:\n \"`POST /api/v1/apikeys` — создать ключ; body `CreateApiKeyRequest` → `CreateApiKeyResponse` (поле `key` — секрет, один раз).\",\n },\n delete: {\n description: \"`DELETE /api/v1/apikeys/{keyId}` — отозвать ключ; ответ без тела.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeysSdkMethodFieldDocs = mapFieldDocsToStrings(apiKeysSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sendCommunicationCodeReqFieldDocEntries = {\n value: {\n description: \"Телефон, email или иное значение канала, на которое отправляется код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description: \"Тип коммуникации (`CommunicationType`: Phone, Email, Telegram, Max, …).\",\n valueSchema: \"CommunicationType\",\n },\n language: {\n description: \"Язык шаблона сообщения / UI.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeReqFieldDocEntries);\n\nexport const sendCommunicationCodeRespFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии подтверждения для `verifyCommunicationCode`.\",\n valueSchema: \"string | null\",\n },\n sessionLifeTimeSeconds: {\n description: \"TTL сессии в секундах.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeRespFieldDocEntries);\n\nexport const verifyCommunicationCodeReqFieldDocEntries = {\n sessionId: {\n description: \"Сессия из ответа sendCode.\",\n valueSchema: \"string | null\",\n },\n code: {\n description: \"Код из SMS/email.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeReqFieldDocEntries);\n\nexport const verifyCommunicationCodeRespFieldDocEntries = {\n success: {\n description: \"Успех проверки кода.\",\n valueSchema: \"boolean\",\n },\n value: {\n description: \"Нормализованное подтверждённое значение (например E.164).\",\n valueSchema: \"string | null\",\n },\n channel: {\n description: \"Канал доставки после верификации (`DeliveryChannel`, включая Telegram/Max).\",\n valueSchema: \"DeliveryChannel\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeRespFieldDocEntries);\n\nexport const contactsCommunicationSdkMethodFieldDocEntries = {\n sendCommunicationCode: {\n description: \"`POST /api/v1/contacts/communication/sendcode` — отправить код на канал (`SendCommunicationCodeReq`).\",\n },\n verifyCommunicationCode: {\n description: \"`POST /api/v1/contacts/communication/verify` — проверить код (`VerifyCommunicationCodeReq`).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactsCommunicationSdkMethodFieldDocs = mapFieldDocsToStrings(\n contactsCommunicationSdkMethodFieldDocEntries,\n);\n","/**\n * Query-параметры `DELETE /api/v1/{domain}/{torrowId}` для item-фасадов\n * (contacts, notes, cases, calendars, contexts, services, resourceItems, loyalty*).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общее описание item-delete для MCP-записей методов `delete`. */\nexport const itemDeleteMethodDescription =\n \"Обязательные query **`cascade`**, **`withPinnedItems`** (см. **`ItemDeleteQuery`**); SDK возвращает число **`deleteCount`**.\";\n\nexport const itemDeleteQueryFieldDocEntries = {\n cascade: {\n description:\n \"Каскадное удаление вложенных дочерних элементов в иерархии (mind map / include). `false` — удалить только сам элемент, без дочерних; `true` — вместе с вложенными (в приложении: «удалить с вложенными элементами»).\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n withPinnedItems: {\n description:\n \"Удалять закреплённые (pinned) дочерние представления/элементы вместе с родителем. `false` — не трогать закреплённые вложения; `true` — удалить и их.\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemDeleteQueryFieldDocs = mapFieldDocsToStrings(itemDeleteQueryFieldDocEntries);\n","/**\n * MCP: единое описание методов {@link TorrowItemCoreFacade} и {@link TorrowItemFacade} (пути относительно `/api/v1/{domain}/`).\n * **Loyalty*** подмешивают только **Core** (без photo); **contacts** / **cases** / **notes** / **services** / **calendars** / **contexts** / **resourceItems** — полный **Base** (см. **`TorrowItemFacadeSdkMethods`**; у **contacts** ещё photo → **`TorrowItemFacadeContactsItemSdkMethods`**).\n *\n * **`getPhotoInfo` / `getPhotoPutUrl`** вынесены отдельно: в проде только **contacts** (`withPhotoEndpoints`).\n *\n * @see docs/sdk-development-plan.md §1.3.3 (вариант MCP «максимально DRY»).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Методы Core, общие для loyalty-доменов (без photo-endpoints). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto = {\n updatePublicity: {\n description: \"`PUT .../{torrowId}/publicity` — тело **`PublicityType`**; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateImageId: {\n description: \"`PUT .../{torrowId}/image/id` — тело JSON-string **`fileId`**.\",\n },\n updateTorrowAccountId: {\n description: \"`PUT .../{torrowId}/torrowaccount/id` — тело JSON-string id аккаунта.\",\n },\n updateMasterInfo: {\n description: \"`PUT .../{torrowId}/masterinfo` — **`UpdateMasterInfoReq`**.\",\n },\n updateIntegrations: {\n description: \"`PUT .../{torrowId}/integrations` — body: `string[]` (**integrationIds**).\",\n },\n listParticipants: {\n description:\n \"`GET .../{torrowId}/participants` — фильтры **`participantStateList`** (`Offered`/`Requested`/`Accepted`/…) / **`participantTypeList`**, пагинация; у **loyalty*** query **`lmFrom`/`lmTo`**, у **contact/case** — **`lmfrom`/`lmto`**. Флоу статусов: **`docs/agents/participation-flow.md`**.\",\n },\n generateSecurityToken: {\n description:\n \"`POST .../{torrowId}/generatesecuritytoken` — **`GenerateSecurityTokenReq`** → **`GenerateSecurityTokenResp`**. Внешняя ссылка: `participantType` **Reader** (обычная) или **Owner** (ссылка управления); получатель сохраняет через **`saveToMindMap({ securityToken })`**. Apps: `ShareWithRightsService`.\",\n },\n updateParticipationType: {\n description:\n \"`PUT .../{torrowId}/participation/{participantProfileId}/type` — body: **`ParticipantType`** (в path id профиля участника).\",\n },\n requestAccess: {\n description:\n \"`PUT .../participation/requestaccess` — body: **`profileId`**; query **`userMessage`**. State → **`Requested`**; владельцу — announcement **`RequestAccessToItem`**. Не для владельца своего item. Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeAccessRequest: {\n description:\n \"`PUT .../participation/revokerequest` — requester отменяет свой **`Requested`** → **`Revoked`**.\",\n },\n setGroup: { description: \"`PUT .../group/set` — **`SetGroupItemReq`**.\" },\n unsetGroup: { description: \"`PUT .../group/unset` — **`UnsetGroupItemReq`**.\" },\n updateTags: {\n description: \"`PUT .../{torrowId}/tags` — body: `string[]`; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n listGroups: {\n description:\n \"`GET .../{parentId}/group/list` — **группы родительского элемента, доступные для включения дочерних элементов** (torrow-apps: `getGroups(parentId)`). В apps при пустом `group/list` UI часто даёт `[parent]`. **Не** члены группы. Члены: `search.*(…, { groupIds })`. У **loyaltycards** пути нет → SDK бросает (`withGroupListEndpoint: false`).\",\n },\n updateGroups: {\n description:\n \"`PUT .../{torrowId}/updategroups` — **`UpdateItemGroupsReq[]`**; query **`parentId`**, **`tags`**, **`alias`**, **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n includeToGroups: {\n description:\n \"`PUT .../include/togroups` — **`IncludeToGroupsReq`**. После include члены группы проверяй через `search.*(…, { groupIds })`, не через `listGroups`.\",\n },\n excludeFromGroups: { description: \"`PUT .../exclude/fromgroups` — **`ExcludeFromGroupsReq`**.\" },\n includeToParent: { description: \"`PUT .../{parentId}/include/items` — **`IncludeToParentReq`**.\" },\n excludeFromParent: { description: \"`PUT .../{parentId}/exclude/items` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\" },\n includeForUser: { description: \"`PUT .../{parentId}/include/foruser` — **`IncludeForUserReq`**.\" },\n excludeFromUser: { description: \"`PUT .../{parentId}/exclude/fromuser` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\" },\n rejectOffer: {\n description:\n \"`PUT .../participation/rejectoffer` — invitee отклоняет **`Offered`** → **`Rejected`**; body: **`profileId`**; query **`userMessage`**.\",\n },\n reject: { description: \"`PUT .../participation/reject` — body: **`profileId`**.\" },\n share: {\n description:\n \"`PUT .../participation/share` — **`ShareItemReq`** → **`ParticipationResp`**. Создаёт **`Offered`**; invitee — announcement **`ShareItem`**. Принять = **`saveToMindMap`** (нет `acceptOffer`). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeOffer: {\n description:\n \"`PUT .../participation/revokeoffer` — владелец отзывает **`Offered`** → **`Revoked`**; body: `string[]` (**profileIds**).\",\n },\n grantAccess: {\n description:\n \"`PUT .../participation/grantaccess` — владелец принимает **`Requested`** → **`Accepted`**; body: `string[]` (**profileIds**).\",\n },\n declineAccess: {\n description:\n \"`PUT .../participation/declineaccess` — владелец отклоняет **`Requested`** → **`Declined`**; body: `string[]`; query **`userMessage`**.\",\n },\n updatePersonalListOrder: {\n description: \"`POST .../personallist/updateorder` — **`UpdatePersonalListOrderReq`** → **`UpdatePersonalListOrderResp`**.\",\n },\n updateAlias: {\n description: \"`PUT .../{itemId}/alias` — body: string (**alias**); query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateLastUsageTime: {\n description: \"`PUT .../{itemId}/lastusagetime` — body: ISO date-time string.\",\n },\n updateParticipationProfile: {\n description: \"`PUT .../{itemId}/participation/profile` — body: **`profileId`** (string).\",\n },\n sendLink: {\n description:\n \"`PUT .../{itemId}/sendlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**. In-app ссылка (**`SendLinkOfItem`**); **не** создаёт `Offered`.\",\n },\n getShortUrl: { description: \"`POST .../{torrowId}/shorturl` → `string` (короткая URL элемента).\" },\n updateUniqueName: { description: \"`PUT .../{itemId}/uniquename` — body: string (**uniqueName**).\" },\n getByUniqueName: {\n description:\n \"`GET .../uniquename/{uniqueName}` — у **cases** доп. query **`profileId`** (override); иначе только **`signal`**.\",\n },\n getImageInfo: { description: \"`GET .../{torrowId}/image/info` → **`FileInfo`**.\" },\n getImagePutUrl: {\n description:\n \"`GET .../{torrowId}/image/puturl` — presigned upload; параметры **`fileId`**, **`fileName?`**, **`fileSize?`** (query). SDK: **`{ url, urlExpiration }`**.\",\n },\n saveToMindMap: {\n description:\n \"`PUT .../{torrowId}/savetomindmap` — **`SaveItemToMindMapReq`** → **`Participation`**. Accept invite (`Offered`→`Accepted`), open/link save, или save с **`securityToken`** (Reader/Owner link). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n updateSolutionData: {\n description: \"`PUT .../{torrowId}/solutiondata` — **`SolutionData`**; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updatePersonalSolutionData: {\n description: \"`PUT .../{itemId}/personalsolutiondata` — **`PersonalSolutionData`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Только **contacts** (`TorrowItemFacadeOptions.withPhotoEndpoints`). */\nexport const torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries = {\n getPhotoInfo: {\n description:\n \"`GET .../{torrowId}/photo/info` — **`FileInfo`**; только при **`withPhotoEndpoints`** (сейчас **contacts**), иначе SDK бросает ошибку.\",\n },\n getPhotoPutUrl: {\n description:\n \"`GET .../{torrowId}/photo/puturl` — presigned; **`fileId`**, **`fileName?`**, **`fileSize?`**; только при **`withPhotoEndpoints`** (сейчас **contacts**). SDK: **`{ url, urlExpiration }`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Методы только **`TorrowItemFacade`** (нет у **loyalty*** на **`TorrowItemCoreFacade`**).\n * Домены: **contacts**, **cases**, **services**, **notes**, **calendars**, **contexts**, **resourceItems** — общий HTTP-слой совпадает; доменные CRUD/сценарии описываются отдельно (booking, payment, search, …).\n */\nexport const torrowItemFacadeExtensionSdkMethodFieldDocEntries = {\n updateFeedbackOptions: {\n description: \"`PUT .../{torrowId}/feedbacks/options` — **`FeedbackOptions`**.\",\n },\n getParticipantsAnonymousCount: {\n description: \"`GET .../{torrowId}/participants/anonymous` → **`GetParticipationCountResp`**.\",\n },\n getParticipantsNonAnonymousCount: {\n description:\n \"`GET .../{torrowId}/participants/nonanonymous` — query **`participantStateList`**, **`participantTypeList`**.\",\n },\n listTags: {\n description: \"`GET .../{torrowId}/tags` — фильтры **`ItemTagsListQuery`** → `string[]`.\",\n },\n listItemGroups: {\n description:\n \"`GET .../{itemId}/groups?parentId=` — **`GroupStatus[]`**: в каких группах родителя состоит child (torrow-apps: `getItemGroups(itemId, parentId)`). Каталог групп родителя для include — `listGroups(parentId)` (`…/group/list`). Члены группы — `search.*(groupIds)`.\",\n },\n updateAccounts: {\n description: \"`PUT .../{torrowId}/updateaccounts` — **`UpdateItemAccountsReq[]`** → **`IncludeExcludeResp`**.\",\n },\n shareItemLink: {\n description:\n \"**WIP / do not use in product.** `POST .../{torrowId}/participation/shareitemlink` — **`GetShareItemSessionReq`** → URL `string`. Invite-session (срок/лимит); activate: **`client.item.activateShareItemSession`**. Gateway stub (`Task.FromResult(\\\"\\\")`, HTTP 200) — пустой URL не баг SDK; apps InvitationLink (ContactItem) копирует `\\\"\\\"`. Activate stub, unused in apps UI. Не путать с **`sendLink`** / **`share`** / **`generateSecurityToken`** (продуктовая альтернатива + client URI). Не клеить URL из shortUrl/item path.\",\n },\n updateOfflinable: {\n description: \"`PUT .../{itemId}/offlinable` — body: boolean.\",\n },\n updateReminders: {\n description: \"`PUT .../{itemId}/reminders` — **`PersonalReminder[]`**.\",\n },\n updateNotificationWayList: {\n description: \"`PUT .../{itemId}/notificationwaylist` — **`NotificationWay[]`** (у **loyaltycards** тот же путь, но класс не от **Base** — см. **`LoyaltyCardsSdkMethods`**).\",\n },\n block: {\n description:\n \"`POST .../{itemId}/block` — query **`reasonId`**, **`reasonNote`**, **`language`**, … → **`TorrowItem`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n unblock: {\n description:\n \"`POST .../{itemId}/unblock` — query **`versionToCheck`**, **`isNeedAnnouncement`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный общий слой **`TorrowItemFacade`** без photo-endpoints (`GET .../participants` — **`lmfrom`/`lmto`**). */\nexport const torrowItemFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadeExtensionSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** То же + **`getPhotoInfo`/`getPhotoPutUrl`** — как у **`client.contacts`** (`withPhotoEndpoints`). */\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocEntries = {\n ...torrowItemFacadeSdkMethodFieldDocEntries,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный набор методов Core для каталога **`TorrowItemCoreFacadeSdkMethods`** (включая photo). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemCoreFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemCoreFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n);\n","/**\n * Неявные параметры, кодируемые в `tags` элементов (в основном ServiceItem).\n *\n * Источник логики: поведение в клиентских потоках `torrow-apps` (time zone, order name,\n * ограничения по времени, тексты unavailable booking, автозапуск уведомлений, discount field tag).\n */\n\nexport const SERVICE_IMPLICIT_TAG_SUFFIX = {\n orderNameLegacy: \":ordername\",\n orderName: \":OrderName\",\n timeZoneLegacy: \":timeZone\",\n timeZone: \":timezone\",\n disableCancelMyParticipation: \":DisableCancelMyParticipation\",\n disableUpdateOrderTime: \":DisableUpdateOrderTime\",\n unavailableBookingMessage: \":UnavailableBookingMessage\",\n discountPercentage: \":DiscountPercentage\",\n agreementText: \":AgreementText\",\n agreementLink: \":AgreementLink\",\n marginTime: \":MarginTime\",\n lockId: \":lockId\",\n autoStartTelegramNotificationBot: \"AutoStartTelegramNotificationBot\",\n autoStartTelegramNotificationBotTypo: \"AutoStartTelegramNotifcationBot\",\n autoStartConnectNotifications: \"AutoStartConnectNotifications\",\n hideMessengerConnectUiLegacy: \"HideTelegramNotificationBot\",\n hideMessengerConnectUi: \"HideMessengerNotifications\",\n /**\n * Резерв под серверную договоренность. Формат в `tags`: `NNN:payment_redirect_timeout_sec`.\n * Непосредственно в текущем `torrow-apps` литерал пока не используется.\n */\n paymentRedirectTimeoutSec: \":payment_redirect_timeout_sec\",\n} as const;\n\ntype PrimitiveTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: \"string\" | \"positiveInt\";\n suffixes: readonly string[];\n caseInsensitive?: boolean;\n};\n\ntype ContainsTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: \"containsFlag\";\n tokens: readonly string[];\n};\n\ntype AutoStartTagConfig = {\n field: \"autoStartNotificationDelaySeconds\";\n kind: \"autoStart\";\n suffixes: readonly string[];\n};\n\ntype AgreementTagConfig = {\n field: \"agreementItems\";\n kind: \"agreement\";\n textSuffix: string;\n linkSuffix: string;\n};\n\ntype ServiceImplicitTagConfig = PrimitiveTagConfig | ContainsTagConfig | AutoStartTagConfig | AgreementTagConfig;\n\n/**\n * Единый реестр тегов (registry-driven). Это источник правды для parse/build/isImplicit.\n */\nexport const SERVICE_IMPLICIT_TAG_REGISTRY = {\n orderName: {\n field: \"orderName\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.orderName, SERVICE_IMPLICIT_TAG_SUFFIX.orderNameLegacy],\n caseInsensitive: true,\n },\n timeZone: {\n field: \"timeZone\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.timeZone, SERVICE_IMPLICIT_TAG_SUFFIX.timeZoneLegacy],\n caseInsensitive: true,\n },\n disableCancelMyParticipationBeforeMinutes: {\n field: \"disableCancelMyParticipationBeforeMinutes\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.disableCancelMyParticipation],\n },\n disableUpdateOrderTimeBeforeMinutes: {\n field: \"disableUpdateOrderTimeBeforeMinutes\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.disableUpdateOrderTime],\n },\n unavailableBookingMessage: {\n field: \"unavailableBookingMessage\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.unavailableBookingMessage],\n },\n discountPercentageFieldName: {\n field: \"discountPercentageFieldName\",\n kind: \"string\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.discountPercentage],\n },\n marginTimeSec: {\n field: \"marginTimeSec\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.marginTime],\n },\n paymentRedirectTimeoutSec: {\n field: \"paymentRedirectTimeoutSec\",\n kind: \"positiveInt\",\n suffixes: [SERVICE_IMPLICIT_TAG_SUFFIX.paymentRedirectTimeoutSec],\n },\n hideMessengerConnectUi: {\n field: \"hideMessengerConnectUi\",\n kind: \"containsFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUi, SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUiLegacy],\n },\n hideTelegramNotificationBot: {\n field: \"hideTelegramNotificationBot\",\n kind: \"containsFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUiLegacy],\n },\n autoStartNotificationDelaySeconds: {\n field: \"autoStartNotificationDelaySeconds\",\n kind: \"autoStart\",\n suffixes: [\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications,\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBot,\n SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBotTypo,\n ],\n },\n agreementItems: {\n field: \"agreementItems\",\n kind: \"agreement\",\n textSuffix: SERVICE_IMPLICIT_TAG_SUFFIX.agreementText,\n linkSuffix: SERVICE_IMPLICIT_TAG_SUFFIX.agreementLink,\n },\n} as const satisfies Record<string, ServiceImplicitTagConfig>;\n\nexport type ServiceImplicitTagParams = {\n orderName?: string;\n timeZone?: string;\n disableCancelMyParticipationBeforeMinutes?: number;\n disableUpdateOrderTimeBeforeMinutes?: number;\n unavailableBookingMessage?: string;\n discountPercentageFieldName?: string;\n marginTimeSec?: number;\n autoStartNotificationDelaySeconds?: number;\n hideMessengerConnectUi?: boolean;\n hideTelegramNotificationBot?: boolean;\n agreementItems?: { index: number; text?: string; link?: string }[];\n paymentRedirectTimeoutSec?: number;\n};\n\n/** Минимальная структура поведения ресурса (сейчас: только margin between events). */\nexport type ResourceBehaviorSettings = {\n marginTimeSec?: number;\n /**\n * Идентификатор TTLock-замка в формате тега `<lockNumber>:lockId`.\n */\n lockId?: number;\n};\n\nfunction isPositiveInt(value: number | undefined): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction splitBySuffix(tag: string, suffix: string, caseInsensitive = false): string | undefined {\n if (caseInsensitive) {\n const lowerTag = tag.toLowerCase();\n const lowerSuffix = suffix.toLowerCase();\n if (!lowerTag.endsWith(lowerSuffix)) return undefined;\n return tag.slice(0, tag.length - suffix.length);\n }\n if (!tag.endsWith(suffix)) return undefined;\n return tag.slice(0, tag.length - suffix.length);\n}\n\nfunction firstPrefixBySuffix(\n tags: readonly string[],\n suffix: string,\n options?: { caseInsensitive?: boolean },\n): string | undefined {\n for (const tag of tags) {\n const prefix = splitBySuffix(tag, suffix, options?.caseInsensitive ?? false);\n if (prefix !== undefined) return prefix;\n }\n return undefined;\n}\n\nfunction toPositiveInt(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const value = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction parseAutoStartDelay(tag: string): number | undefined {\n const suffixes = SERVICE_IMPLICIT_TAG_REGISTRY.autoStartNotificationDelaySeconds.suffixes;\n for (const suffix of suffixes) {\n const match = tag.match(new RegExp(`^(\\\\d+):${suffix}$`));\n if (match?.[1]) {\n const sec = Number.parseInt(match[1], 10);\n if (Number.isFinite(sec) && sec > 0) return sec;\n }\n }\n return undefined;\n}\n\nfunction parseAgreementIndexedTag(tag: string, baseSuffix: string): { index: number; value: string } | undefined {\n const escaped = baseSuffix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const match = tag.match(new RegExp(`^(.*)${escaped}(\\\\d+)$`));\n if (!match?.[1] || !match[2]) return undefined;\n const index = Number.parseInt(match[2], 10);\n if (!Number.isFinite(index) || index <= 0) return undefined;\n return { index, value: match[1] };\n}\n\nfunction decodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https//\")) return `https://${trimmed.slice(\"https//\".length)}`;\n if (trimmed.startsWith(\"http//\")) return `http://${trimmed.slice(\"http//\".length)}`;\n return trimmed;\n}\n\nfunction encodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https://\")) return `https//${trimmed.slice(\"https://\".length)}`;\n if (trimmed.startsWith(\"http://\")) return `http//${trimmed.slice(\"http://\".length)}`;\n return trimmed;\n}\n\n/**\n * Парсинг используемых в продукте неявных \"тег-параметров\" сервиса.\n */\nexport function parseServiceImplicitTagParams(tags: readonly string[] | undefined | null): ServiceImplicitTagParams {\n const safeTags = tags ?? [];\n const result: ServiceImplicitTagParams = {};\n const mutable = result as Record<string, unknown>;\n\n for (const config of Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]) {\n if (config.kind === \"string\" || config.kind === \"positiveInt\") {\n const raw = config.suffixes\n .map((suffix) => firstPrefixBySuffix(safeTags, suffix, { caseInsensitive: config.caseInsensitive ?? false }))\n .find((x) => x !== undefined);\n if (config.kind === \"string\") {\n if (raw?.trim()) mutable[config.field] = raw.trim();\n } else {\n const value = toPositiveInt(raw);\n if (value !== undefined) mutable[config.field] = value;\n }\n }\n if (config.kind === \"containsFlag\") {\n const hasAny = safeTags.some((tag) => config.tokens.some((token) => tag.includes(token)));\n if (hasAny) mutable[config.field] = true;\n }\n }\n\n let autoStartNotificationDelaySeconds: number | undefined = result.autoStartNotificationDelaySeconds;\n if (autoStartNotificationDelaySeconds === undefined) {\n for (const tag of safeTags) {\n autoStartNotificationDelaySeconds = parseAutoStartDelay(tag);\n if (autoStartNotificationDelaySeconds !== undefined) break;\n }\n }\n if (autoStartNotificationDelaySeconds !== undefined) {\n mutable.autoStartNotificationDelaySeconds = autoStartNotificationDelaySeconds;\n }\n\n const agreementsMap = new Map<number, { index: number; text?: string; link?: string }>();\n const agreementConfig = SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems;\n for (const tag of safeTags) {\n const textTag = parseAgreementIndexedTag(tag, agreementConfig.textSuffix);\n if (textTag) {\n agreementsMap.set(textTag.index, {\n index: textTag.index,\n ...(agreementsMap.get(textTag.index) ?? {}),\n text: textTag.value.trim() || undefined,\n });\n }\n const linkTag = parseAgreementIndexedTag(tag, agreementConfig.linkSuffix);\n if (linkTag) {\n agreementsMap.set(linkTag.index, {\n index: linkTag.index,\n ...(agreementsMap.get(linkTag.index) ?? {}),\n link: decodeAgreementLink(linkTag.value),\n });\n }\n }\n const agreementItems = [...agreementsMap.values()]\n .sort((a, b) => a.index - b.index)\n .filter((x) => x.text || x.link);\n if (agreementItems.length) mutable.agreementItems = agreementItems;\n return result;\n}\n\n/**\n * Генерация service-тегов из явной структуры параметров.\n * Удобно для create/update запросов и codegen-агентов.\n */\nexport function buildServiceImplicitTags(\n params: ServiceImplicitTagParams,\n options?: {\n /**\n * Какой suffix использовать для auto-start delay.\n * По умолчанию новый: `AutoStartConnectNotifications`.\n */\n autoStartNotificationSuffix?:\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBot\n | typeof SERVICE_IMPLICIT_TAG_SUFFIX.autoStartTelegramNotificationBotTypo;\n },\n): string[] {\n const tags: string[] = [];\n const singleValueConfigs = (Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]).filter(\n (x) => x.kind === \"string\" || x.kind === \"positiveInt\",\n ) as PrimitiveTagConfig[];\n for (const config of singleValueConfigs) {\n const value = params[config.field] as unknown;\n const writeSuffix = config.suffixes[0];\n if (config.kind === \"string\") {\n if (typeof value === \"string\" && value.trim()) {\n tags.push(`${value.trim()}${writeSuffix}`);\n }\n } else if (isPositiveInt(typeof value === \"number\" ? value : undefined)) {\n tags.push(`${value}${writeSuffix}`);\n }\n }\n\n for (const agreement of params.agreementItems ?? []) {\n if (!isPositiveInt(agreement.index)) continue;\n if (agreement.text?.trim()) {\n tags.push(\n `${agreement.text.trim()}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.textSuffix}${agreement.index}`,\n );\n }\n if (agreement.link?.trim()) {\n tags.push(\n `${encodeAgreementLink(agreement.link)}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.linkSuffix}${agreement.index}`,\n );\n }\n }\n if (isPositiveInt(params.autoStartNotificationDelaySeconds)) {\n tags.push(\n `${params.autoStartNotificationDelaySeconds}:${\n options?.autoStartNotificationSuffix ?? SERVICE_IMPLICIT_TAG_SUFFIX.autoStartConnectNotifications\n }`,\n );\n }\n if (params.hideMessengerConnectUi) {\n tags.push(SERVICE_IMPLICIT_TAG_REGISTRY.hideMessengerConnectUi.tokens[0]);\n }\n if (params.hideTelegramNotificationBot) {\n tags.push(SERVICE_IMPLICIT_TAG_REGISTRY.hideTelegramNotificationBot.tokens[0]);\n }\n\n return tags;\n}\n\nfunction isImplicitServiceTag(tag: string): boolean {\n for (const config of Object.values(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitTagConfig[]) {\n if (config.kind === \"string\" || config.kind === \"positiveInt\") {\n const matched = config.suffixes.some(\n (suffix) => splitBySuffix(tag, suffix, config.caseInsensitive ?? false) !== undefined,\n );\n if (matched) return true;\n }\n if (config.kind === \"containsFlag\") {\n if (config.tokens.some((token) => tag.includes(token))) return true;\n }\n if (config.kind === \"autoStart\") {\n const isAutoStart = config.suffixes.some((suffix) => tag.match(new RegExp(`^\\\\d+:${suffix}$`)) !== null);\n if (isAutoStart) return true;\n }\n if (config.kind === \"agreement\") {\n if (\n parseAgreementIndexedTag(tag, config.textSuffix) !== undefined ||\n parseAgreementIndexedTag(tag, config.linkSuffix) !== undefined\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Обновляет только implicit service tags, не трогая \"обычные\" пользовательские теги.\n * Полезно для patch/update сценариев поверх существующего массива tags.\n */\nexport function mergeServiceImplicitTags(\n baseTags: readonly string[] | undefined | null,\n params: ServiceImplicitTagParams,\n options?: Parameters<typeof buildServiceImplicitTags>[1],\n): string[] {\n const safeBase = baseTags ?? [];\n const preservedNonImplicit = safeBase.filter((tag) => !isImplicitServiceTag(tag));\n const nextImplicit = buildServiceImplicitTags(params, options);\n return [...preservedNonImplicit, ...nextImplicit];\n}\n\n/**\n * One-liner для частичного обновления implicit service params.\n * Сценарий: parse(existing) -> apply patch -> mergeServiceImplicitTags(baseTags, next).\n */\nexport function upsertServiceImplicitTagParams(\n baseTags: readonly string[] | undefined | null,\n patch: Partial<ServiceImplicitTagParams>,\n options?: Parameters<typeof buildServiceImplicitTags>[1],\n): string[] {\n const current = parseServiceImplicitTagParams(baseTags);\n const next: ServiceImplicitTagParams = {\n ...current,\n ...patch,\n };\n return mergeServiceImplicitTags(baseTags, next, options);\n}\n\n/**\n * Конвенция сервера по шагам услуги:\n * если название шага начинается с `*`, выбранный ресурс из этого шага считается \"первичным\".\n */\nexport function isPrimaryServiceStepName(stepName: string | undefined | null): boolean {\n return !!stepName && stepName.trimStart().startsWith(\"*\");\n}\n\n/**\n * Возвращает \"чистое\" название шага без префикса `*`.\n */\nexport function getServiceStepDisplayName(stepName: string | undefined | null): string {\n if (!stepName) return \"\";\n const normalized = stepName.trimStart();\n return normalized.startsWith(\"*\") ? normalized.slice(1).trimStart() : stepName;\n}\n\n/** Парсинг поведения ресурса из `resource.tags`. */\nexport function parseResourceBehaviorSettings(tags: readonly string[] | undefined | null): ResourceBehaviorSettings {\n const parsed = parseServiceImplicitTagParams(tags);\n const lockId = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.lockId));\n const result: ResourceBehaviorSettings = {};\n if (parsed.marginTimeSec !== undefined) result.marginTimeSec = parsed.marginTimeSec;\n if (lockId !== undefined) result.lockId = lockId;\n return result;\n}\n\n/** Сериализация/merge behavior параметров ресурса в `resource.tags`. */\nexport function mergeResourceBehaviorTags(\n baseTags: readonly string[] | undefined | null,\n settings: ResourceBehaviorSettings,\n): string[] {\n const safeBase = baseTags ?? [];\n const nonManaged = safeBase.filter(\n (tag) =>\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.marginTime) === undefined &&\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.lockId) === undefined,\n );\n const managed: string[] = [];\n if (isPositiveInt(settings.marginTimeSec)) {\n managed.push(`${settings.marginTimeSec}${SERVICE_IMPLICIT_TAG_SUFFIX.marginTime}`);\n }\n if (isPositiveInt(settings.lockId)) {\n managed.push(`${settings.lockId}${SERVICE_IMPLICIT_TAG_SUFFIX.lockId}`);\n }\n return [...nonManaged, ...managed];\n}\n\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { SERVICE_IMPLICIT_TAG_REGISTRY } from \"../resources/common/implicit-tag-params.js\";\n\ntype ServiceImplicitRegistryKey = keyof typeof SERVICE_IMPLICIT_TAG_REGISTRY;\n\nconst serviceImplicitTagRegistryDocByKey = {\n orderName: {\n description:\n \"Кастомное название заказа из `\\\"<value>:OrderName\\\"` (поддерживается и legacy `:ordername`, case-insensitive).\",\n examples: [\"Запись:OrderName\", \"Консультация:ordername\"],\n },\n timeZone: {\n description:\n \"Таймзона сервиса из `\\\"<ianaTimeZone>:timezone\\\"` (поддерживается и legacy `:timeZone`), перекрывает timezone пользователя.\",\n examples: [\"Asia/Almaty:timezone\", \"Europe/Moscow:timezone\", \"Asia/Yekaterinburg:timezone\"],\n },\n disableCancelMyParticipationBeforeMinutes: {\n description:\n \"Ограничение отмены участия: `\\\"<minutes>:DisableCancelMyParticipation\\\"`; если дедлайн прошел, UI блокирует cancel.\",\n examples: [\"60:DisableCancelMyParticipation\"],\n },\n disableUpdateOrderTimeBeforeMinutes: {\n description:\n \"Ограничение переноса записи: `\\\"<minutes>:DisableUpdateOrderTime\\\"`; при истечении дедлайна hide/disable update-order-time.\",\n examples: [\"30:DisableUpdateOrderTime\"],\n },\n unavailableBookingMessage: {\n description:\n \"Текст для пустых слотов из `\\\"<message>:UnavailableBookingMessage\\\"` (показывается в change-time/check-in timetable).\",\n examples: [\"Нет слотов на выбранную дату:UnavailableBookingMessage\"],\n },\n discountPercentageFieldName: {\n description:\n \"Имя поля loyalty card для процента скидки из `\\\"<fieldName>:DiscountPercentage\\\"` (используется в расчете цены ресурса).\",\n examples: [\"loyaltyDiscount:DiscountPercentage\"],\n },\n marginTimeSec: {\n description:\n \"Отступ между событиями ресурса в секундах: `\\\"<sec>:MarginTime\\\"` (resource/service logic).\",\n examples: [\"3600:MarginTime\"],\n },\n autoStartNotificationDelaySeconds: {\n description:\n \"Задержка автопромпта подключения уведомлений: `\\\"<sec>:AutoStartConnectNotifications\\\"` (или legacy Telegram-теги).\",\n examples: [\n \"1800:AutoStartConnectNotifications\",\n \"1200:AutoStartTelegramNotificationBot\",\n \"1200:AutoStartTelegramNotifcationBot\",\n ],\n },\n hideMessengerConnectUi: {\n description:\n \"Флаг скрытия UI подключения уведомлений; true, если тег содержит `HideMessengerNotifications` или legacy `HideTelegramNotificationBot`.\",\n examples: [\"HideMessengerNotifications\", \"x-HideTelegramNotificationBot-y\"],\n },\n hideTelegramNotificationBot: {\n description:\n \"Серверный флаг скрытия кнопки Telegram-бота: true, если тег содержит `HideTelegramNotificationBot`.\",\n examples: [\"HideTelegramNotificationBot\"],\n },\n agreementItems: {\n description:\n \"Пары соглашений: `<text>:AgreementTextN` + `<link>:AgreementLinkN` (N=1..k); link в тегах хранится без `:` в схеме (`https//...`).\",\n examples: [\n \"Даю согласие __на обработку персональных данных__:AgreementText1\",\n \"https//example.org/pd:AgreementLink1\",\n ],\n },\n paymentRedirectTimeoutSec: {\n description:\n \"Резервный параметр TTL payment redirect из `\\\"<sec>:payment_redirect_timeout_sec\\\"` (пример: 1800 сек = 30 мин).\",\n examples: [\"1800:payment_redirect_timeout_sec\"],\n },\n} as const satisfies Record<ServiceImplicitRegistryKey, ItemFieldDoc>;\n\nexport const serviceImplicitTagParamsFieldDocEntries = Object.fromEntries(\n (Object.keys(SERVICE_IMPLICIT_TAG_REGISTRY) as ServiceImplicitRegistryKey[]).map((registryKey) => [\n SERVICE_IMPLICIT_TAG_REGISTRY[registryKey].field,\n serviceImplicitTagRegistryDocByKey[registryKey],\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const serviceImplicitTagParamsFieldDocs = mapFieldDocsToStrings(serviceImplicitTagParamsFieldDocEntries);\n\nconst serviceImplicitTagMethodDocByName = {\n parseServiceImplicitTagParams: {\n description:\n \"Парсер неявных service tag params: `parseServiceImplicitTagParams(tags)` -> `ServiceImplicitTagParams`.\",\n examples: [\n \"const params = parseServiceImplicitTagParams(service.tags);\",\n \"if (params.paymentRedirectTimeoutSec) { /* apply payment link TTL */ }\",\n ],\n },\n buildServiceImplicitTags: {\n description:\n \"Генератор service tag params: `buildServiceImplicitTags(params)` -> `string[]` (для create/update и codegen).\",\n examples: [\n \"const tags = buildServiceImplicitTags({ paymentRedirectTimeoutSec: 1800, orderName: 'Online booking' });\",\n \"const next = buildServiceImplicitTags(params, { autoStartNotificationSuffix: 'AutoStartTelegramNotificationBot' });\",\n ],\n },\n mergeServiceImplicitTags: {\n description:\n \"Merge helper: `mergeServiceImplicitTags(baseTags, params)` сохраняет обычные теги и пересобирает только implicit-теги.\",\n examples: [\n \"const nextTags = mergeServiceImplicitTags(service.tags, { paymentRedirectTimeoutSec: 1800 });\",\n \"const nextTags = mergeServiceImplicitTags(existingTags, parsedParams);\",\n ],\n },\n upsertServiceImplicitTagParams: {\n description:\n \"Patch-helper: `upsertServiceImplicitTagParams(baseTags, patch)` — обновляет только указанные implicit-параметры.\",\n examples: [\n \"const next = upsertServiceImplicitTagParams(service.tags, { paymentRedirectTimeoutSec: 1800 });\",\n \"const next = upsertServiceImplicitTagParams(tags, { orderName: 'Updated name' });\",\n ],\n },\n isPrimaryServiceStepName: {\n description:\n \"Конвенция шага услуги: `isPrimaryServiceStepName('*Кабинет') === true`; `*` помечает 'первичный' ресурс в списках.\",\n examples: [\"isPrimaryServiceStepName('*Кабинет')\"],\n },\n getServiceStepDisplayName: {\n description:\n \"Убирает префикс `*` из имени шага для отображения: `getServiceStepDisplayName('*Кабинет') -> 'Кабинет'`.\",\n examples: [\"getServiceStepDisplayName('*Кабинет')\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceBehaviorSettingsFieldDocEntries = {\n marginTimeSec: {\n description: \"Отступ между событиями ресурса в секундах (`\\\"<sec>:MarginTime\\\"`).\",\n examples: [\"3600:MarginTime\"],\n },\n lockId: {\n description:\n \"Идентификатор TTLock-замка в `resource.tags` (`\\\"<lockNumber>:lockId\\\"`). Используется для интеграции с TTLock.\",\n examples: [\"11432744:lockId\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const resourceBehaviorSettingsFieldDocs = mapFieldDocsToStrings(resourceBehaviorSettingsFieldDocEntries);\n\nconst resourceImplicitTagMethodDocByName = {\n parseResourceBehaviorSettings: {\n description:\n \"Парсер managed параметров ресурса: `parseResourceBehaviorSettings(tags)` -> `ResourceBehaviorSettings` (`marginTimeSec`, `lockId`).\",\n examples: [\"const settings = parseResourceBehaviorSettings(resource.tags);\"],\n },\n mergeResourceBehaviorTags: {\n description:\n \"Merge helper для managed resource tags: `mergeResourceBehaviorTags(baseTags, settings)` сохраняет пользовательские теги и пересобирает `MarginTime`/`lockId`.\",\n examples: [\n \"const tags = mergeResourceBehaviorTags(resource.tags, { marginTimeSec: 3600, lockId: 11432744 });\",\n ],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Явный индекс публичных helper-методов для MCP-каталога.\n * Если добавляем новый helper в implicit-tag-слой — добавляем имя сюда,\n * и TS проверит, что описание в `serviceImplicitTagMethodDocByName` есть.\n */\nexport const SERVICE_IMPLICIT_TAG_METHOD_NAMES = [\n \"parseServiceImplicitTagParams\",\n \"buildServiceImplicitTags\",\n \"mergeServiceImplicitTags\",\n \"upsertServiceImplicitTagParams\",\n \"isPrimaryServiceStepName\",\n \"getServiceStepDisplayName\",\n] as const;\n\nexport const serviceImplicitTagMethodsFieldDocEntries = Object.fromEntries(\n SERVICE_IMPLICIT_TAG_METHOD_NAMES.map((name) => [name, serviceImplicitTagMethodDocByName[name]]),\n) as unknown as Record<(typeof SERVICE_IMPLICIT_TAG_METHOD_NAMES)[number], ItemFieldDoc>;\n\nexport const serviceImplicitTagMethodsFieldDocs = mapFieldDocsToStrings(serviceImplicitTagMethodsFieldDocEntries);\n\nexport const RESOURCE_IMPLICIT_TAG_METHOD_NAMES = [\"parseResourceBehaviorSettings\", \"mergeResourceBehaviorTags\"] as const;\n\nexport const resourceImplicitTagMethodsFieldDocEntries = Object.fromEntries(\n RESOURCE_IMPLICIT_TAG_METHOD_NAMES.map((name) => [name, resourceImplicitTagMethodDocByName[name]]),\n) as unknown as Record<(typeof RESOURCE_IMPLICIT_TAG_METHOD_NAMES)[number], ItemFieldDoc>;\n\nexport const resourceImplicitTagMethodsFieldDocs = mapFieldDocsToStrings(resourceImplicitTagMethodsFieldDocEntries);\n\n","/**\n * MCP / агенты: методы фасадов ActionHistory / Accounting / Announcement / ExportImport / Report / Loyalty*.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { itemDeleteMethodDescription } from \"./item-delete-query-field-docs.js\";\nimport { torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto } from \"./item-social-facet-field-docs.js\";\n\nexport const accountingTransactionsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/accountingtransactions` — тело **`AccountingTransaction`**; query **`securityToken`**.\",\n },\n update: {\n description: \"`PUT /api/v1/accountingtransactions/{torrowId}` — полное обновление DTO.\",\n },\n delete: {\n description: \"`DELETE /api/v1/accountingtransactions/{torrowId}` → число **`deleteCount`**.\",\n },\n updateState: {\n description: \"`PUT .../state` — смена состояния через query **`state`** (`AccountingTransactionState`).\",\n },\n getBalance: {\n description: \"`GET .../balance` — массив **`BalanceValue`**; опционально **`balanceDate`**.\",\n },\n listTransactions: {\n description:\n \"`GET .../transactions` — список **`AccountingTransaction`** с фильтрами и пагинацией. \" +\n \"**`torrowId`** должен быть id **`LoyaltyCard`** или **`LoyaltyCardSubscription`**; \" +\n \"для **`Case`**, **`Service`**, **`Resource`** и других элементов отдельного счёта транзакций нет.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const accountingTransactionsSdkMethodFieldDocs = mapFieldDocsToStrings(\n accountingTransactionsSdkMethodFieldDocEntries,\n);\n\nexport const announcementsSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/announcements` — **`AnnouncementInfo[]`**; query **`AnnouncementsListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT` / `Language is null or empty`). \" +\n \"Без **`state`** / **`stateList`** список пустой — передавай фильтр (в приложении: **`New`**, **`Hidden`**). \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n updateState: {\n description: \"`POST /api/v1/announcements/updatestate` — массив **`UpdateAnnouncementStateReq`** → **`TorrowObject[]`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const announcementsSdkMethodFieldDocs = mapFieldDocsToStrings(announcementsSdkMethodFieldDocEntries);\n\nexport const exportImportSdkMethodFieldDocEntries = {\n exportSubgraph: {\n description: \"`POST /api/v1/export` — тело **`ExportRequest`** (`itemId`, `depth`) → **`ExportGraph`**.\",\n },\n importFromFile: {\n description: \"`POST /api/v1/import` — тело **`ImportByFileRequest`** (граф + `parentId` / флаги) → **`TorrowItem`**.\",\n },\n importByUniqueName: {\n description: \"`POST /api/v1/importbyuniquename` — **`ImportByUniqueNameRequest`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const exportImportSdkMethodFieldDocs = mapFieldDocsToStrings(exportImportSdkMethodFieldDocEntries);\n\nexport const reportsSdkMethodFieldDocEntries = {\n generate: {\n description: \"`POST /api/v1/reports` — **`GenerateReportReq`**; опционально **`profileId`** в query.\",\n },\n generateForProfile: {\n description: \"`POST /api/v1/reports/{profileId}` — то же тело, профиль в path.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const reportsSdkMethodFieldDocs = mapFieldDocsToStrings(reportsSdkMethodFieldDocEntries);\n\nexport const actionHistorySdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/actionhistory` — **`ActionHistoryInfo[]`**; query **`ActionHistoryListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT`). \" +\n \"**`itemIds`** опционален: без него / с `[]` — лента пользователя; с id — история по выбранным элементам. \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const actionHistorySdkMethodFieldDocs = mapFieldDocsToStrings(actionHistorySdkMethodFieldDocEntries);\n\nexport const loyaltySystemsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n create: {\n description: \"`POST /api/v1/loyaltysystems` — тело **`LoyaltySystemItem`**; query **`parentId`**, **`profileId`**.\",\n },\n update: { description: \"`PUT /api/v1/loyaltysystems/{torrowId}`.\" },\n delete: {\n description: \"`DELETE /api/v1/loyaltysystems/{torrowId}` — как у элементов: \" + itemDeleteMethodDescription,\n },\n getById: { description: \"`GET /api/v1/loyaltysystems/{torrowId}`.\" },\n listPersonal: {\n description:\n \"`GET .../personallist` — query с **`lmFrom`** / **`lmTo`** (camelCase в OpenAPI), не `lmfrom`.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createLoyaltyCard: {\n description:\n \"`POST .../{loyaltySystemId}/loyaltycard` — тело **`CreateLoyaltyCardReq`** (`profileId` обязателен; опционально **`basisItemId`** — элемент-основание карты/абонемента, напр. заказ). Поля: каталог MCP **`CreateLoyaltyCardReq`**.\",\n },\n searchLoyaltyCards: {\n description:\n \"`POST .../{torrowId}/loyaltycards` — поиск карт в программе; тело **`SearchLoyaltyCardsReq`** (`text`, `filter`, `sort`, `take`/`skip`). В apps: `SearchLoyaltyCardsTask`.\",\n },\n postStatistics: {\n description:\n \"`POST /api/v1/loyaltysystems/statistics` — тело **`GetLoyaltySystemsStatisticsReq`**; ответ SDK: **`LoyaltySystemsStatisticsResp[]`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltySystemsSdkMethodFieldDocEntries);\n\nexport const loyaltyCardsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n update: { description: \"`PUT /api/v1/loyaltycards/{torrowId}` — **`LoyaltyCardItem`**.\" },\n delete: { description: \"`DELETE ...` — \" + itemDeleteMethodDescription },\n getById: {\n description: \"`GET ...` — опционально **`includeBalance`** (по умолчанию в API true).\",\n },\n listPersonal: {\n description: \"`GET .../personallist` — как у систем, плюс **`includeBalance`** в query.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createSubscription: {\n description:\n \"`POST /api/v1/loyaltycards/{loyaltyCardId}/subscription` — **`CreateLoyaltyCardSubscriptionReq`** → **`LoyaltyCardSubscription`**; у **`initialTransaction.basisItemId`** — то же основание (заказ и т.п.), см. MCP **`InitialTransaction`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n getBalance: { description: \"`GET .../{torrowId}/balance` — query: `balanceDate`, `securityToken`.\" },\n listTransactions: { description: \"`GET .../{torrowId}/transactions` — query как у accounting list.\" },\n getSubscriptionBalance: { description: \"`GET .../subscriptions/{subscriptionId}/balance`.\" },\n getSubscriptionTransactions: { description: \"`GET .../subscriptions/{subscriptionId}/transactions`.\" },\n getTimetable: {\n description:\n \"`PUT /api/v1/loyaltycards/{torrowId}/timetable` — тело **`TimetableFilter`**, query **`TimetableQueryOptions`**; ответ **`TimetableCase[]`**. В apps: `LoyaltyCardClient.getTimetable`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/loyaltycards/timetable/statistics` — **`GetTimetableStatisticsRequest`**; SDK: **`TimetableStatisticsResp[]`**.\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — у **loyaltycards** в OpenAPI есть путь; у **loyaltysystems** нет — метод только на **`LoyaltyCards`**.\",\n },\n getImagePutUrl: { description: \"Presigned загрузка изображения карты (`GET .../image/puturl`).\" },\n getImageInfo: { description: \"Метаданные изображения карты (`GET .../image/info`).\" },\n getByUniqueName: { description: \"`GET .../uniquename/{uniqueName}` — без доп. query (в отличие от **cases**).\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltyCardsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltyCardsSdkMethodFieldDocEntries);\n\nexport const userSettingsSdkMethodFieldDocEntries = {\n get: {\n description: \"`GET /api/v1/user/settings` — прочитать `UserSettingsInfo` текущего пользователя.\",\n },\n update: {\n description: \"`PUT /api/v1/user/settings/update` — сохранить `UserSettingsInfo` и получить `TorrowObject`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSettingsSdkMethodFieldDocs = mapFieldDocsToStrings(userSettingsSdkMethodFieldDocEntries);\n\nexport const userSdkMethodFieldDocEntries = {\n getLoyaltyCard: { description: \"`GET /api/v1/user/loyaltycard` — карта лояльности текущего пользователя.\" },\n listAccounts: { description: \"`GET /api/v1/user/accounts` — список аккаунтов пользователя.\" },\n initAddAccount: { description: \"`POST /api/v1/user/accounts/add/init` — старт подтверждения добавления аккаунта.\" },\n completeAddAccount: { description: \"`POST /api/v1/user/accounts/add/complete` — завершение добавления аккаунта по коду.\" },\n deleteAccount: {\n description: \"`DELETE /api/v1/user/accounts/delete` — удаление аккаунта; SDK возвращает **`deletedCount`** (`number`).\",\n },\n listDevices: { description: \"`GET /api/v1/user/devices` — список устройств (`DeviceInfo[]`).\" },\n deleteDevice: { description: \"`DELETE /api/v1/user/devices/{deviceId}` — удалить устройство; SDK: **`deleteCount`** (`number`).\" },\n getDeviceSettings: {\n description:\n \"`GET /api/v1/user/devices/{deviceId}/settings` — читать настройки (SDK: wire string → JSON, битое → `null`).\",\n },\n updateDeviceSettings: {\n description:\n \"`PUT /api/v1/user/devices/{deviceId}/settings` — сохранить настройки (SDK: JSON → wire string в query).\",\n },\n getDefaultProfile: { description: \"`GET /api/v1/user/defaultprofile` — дефолтный профиль пользователя.\" },\n setDefaultProfileByContactId: {\n description: \"`PUT /api/v1/user/defaultprofile` — выбрать дефолтный профиль по contactId; SDK: **`ContactItem`**.\",\n },\n createDefaultProfile: {\n description:\n \"`POST /api/v1/user/defaultprofile` — создать и назначить дефолтный профиль; тело: **`UserProfileItemForAdd`**; ответ: **`ContactItem`**. Перед POST фасад добивает `discriminator` / `publicityType` / non-empty `name` и contact write normalizations including `visitCard` — как у `profiles.add`.\",\n },\n listDeliveryWays: { description: \"`GET /api/v1/user/deliveryways` — пользовательские способы доставки.\" },\n listDefaultNotificationWays: { description: \"`GET /api/v1/user/defaultnotificationways` — дефолтные notification rules.\" },\n updateDefaultNotificationWays: { description: \"`PUT /api/v1/user/defaultnotificationways` — обновить notification rules.\" },\n updatePlace: { description: \"`PUT /api/v1/user/place` — обновить place для профиля/пользователя.\" },\n register: { description: \"`POST /api/v1/user/register` — регистрация пользователя в аккаунте.\" },\n getTimetable: { description: \"`PUT /api/v1/user/timetable` — расписание текущего пользователя.\" },\n listCalendars: { description: \"`GET /api/v1/user/calendars` — подключенные календари.\" },\n updateCalendars: { description: \"`PUT /api/v1/user/calendars/update` — сохранить календари пользователя.\" },\n initDelete: { description: \"`DELETE /api/v1/user/delete/init` — старт удаления пользователя (session).\" },\n completeDelete: { description: \"`DELETE /api/v1/user/delete/complete` — завершить удаление по коду.\" },\n count: {\n description:\n \"`GET /api/v1/user/count` — число пользователей. Публичный endpoint: доступен без Bearer (и с сессией).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSdkMethodFieldDocs = mapFieldDocsToStrings(userSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userSettingsInfoFieldDocEntries = {\n settings: {\n description:\n \"JSON пользовательских настроек в SDK (wire OpenAPI — `string | null`). При чтении: `JSON.parse`, пустое/битое → `null`; при записи: `JSON.stringify`.\",\n valueSchema: \"JsonValue | null\",\n usage:\n \"Структуру внутри `settings` приложение задаёт само и версионирует; SDK парсит/сериализует JSON без схемы объекта.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userSettingsInfoFieldDocs = mapFieldDocsToStrings(userSettingsInfoFieldDocEntries);\n\nexport const solutionDataFieldDocEntries = {\n quickFilterTags: {\n description: \"Теги быстрых фильтров отображаемых при поиске элементов, которые вложенны в данную группу карточки.\",\n valueSchema: \"string[] | null\",\n usage:\n \"В продукте обновляется через setQuickFilters и синхронизируется с `tags`: при удалении тегов из элемента лишние quick-filters удаляются из `solutionData.quickFilterTags`.\",\n },\n metrics: {\n description: \"Переопределение счетчиков аналитики для конкретного элемента.\",\n valueSchema: \"Metrics\",\n usage:\n \"Форма Analytics Tools пишет в `solutionData.metrics`; при page open/event отправляются hit/event в глобальные счетчики и дополнительно в элементные счетчики из `metrics`.\",\n },\n surveyId: {\n description: \"ID привязанного опроса/анкеты.\",\n valueSchema: \"string | null\",\n },\n viewBlockSettings: {\n description: \"Конфигурация блоков/секций карточки дочерних элементов.\",\n valueSchema: \"ViewBlockSettings\",\n usage:\n \"Форма item appearance сохраняет `viewBlockSettings.blockSettings[]`; порядок секций берется из `order`, а `filter.tags` используется для отдельных выборок child-views с фильтрацией по тегам.\",\n },\n layoutType: {\n description:\n \"Тип layout карточки (int-код UI раскладки/обложки). Известные коды и смысл — каталог MCP **`LayoutTypeValues`** / константы `LayoutTypeValues` в `@torrow/sdk-client` (torrow-apps `LayoutType`).\",\n valueSchema: \"LayoutTypeValues | int32 | null\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"],\n usage:\n \"Пишется формой item appearance (`updateSolutionData`). В UI выбора обложки: NonImage / SideImage / SmallImagePanel / MediumImagePanel / BigImagePanel. На мобильном `BigImagePanel` + image включает image-view с opacity toolbar. Поле не enum OpenAPI — допустим любой int; агенту для выбора значения смотреть `LayoutTypeValues.*`.\",\n },\n homeItemIds: {\n description: \"Закрепленные home-элементы (обычно один выбранный id).\",\n valueSchema: \"string[] | null\",\n usage:\n \"Выбираются в item appearance через picker родительского элемента; сохраняются в solutionData и используются как persisted-настройка навигации/точки входа.\",\n },\n vk: {\n description: \"Параметры интеграции/виджета VK в решении.\",\n valueSchema: \"Vk\",\n },\n zoom: {\n description: \"Состояние масштаба/viewport для mind map и визуализаций.\",\n valueSchema: \"Zoom\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const solutionDataFieldDocs = mapFieldDocsToStrings(solutionDataFieldDocEntries);\n\n/**\n * Известные int-коды `SolutionData.layoutType` для MCP/ИИ (torrow-apps `LayoutType`, UI «Обложка элемента»).\n * Wire-значение — число в JSON; ключи совпадают с `LayoutTypeValues` в `@torrow/sdk-client`.\n */\nexport const layoutTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник известных кодов обложки карточки (`SolutionData.layoutType`). Не OpenAPI-enum: поле остаётся `number | null`, список ниже — продуктовый контракт UI.\",\n valueSchema: \"LayoutTypeValues\",\n usage:\n \"Константы SDK: `LayoutTypeValues.<Name>` → int в теле `updateSolutionData`. Appearance form предлагает NonImage, SideImage, SmallImagePanel, MediumImagePanel, BigImagePanel. Дефолт контакта/заметки — SideImage; case/service/resource — MediumImagePanel (`TorrowItemHelper.getDefaultLayoutType`).\",\n },\n Unknown: {\n description: \"`0` — служебное/не задано; клиент обычно подставляет default layout по типу item, а не показывает Unknown в селекторе обложки.\",\n examples: [\"0\"],\n valueSchema: \"LayoutTypeValues\",\n },\n SideImage: {\n description:\n \"`1` — «Изображение» (side image): компактная картинка сбоку от заголовка/карточки. Дефолт для Contact/Note/Context и прочих не-case/service/resource.\",\n examples: [\"1\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Виджет `ttSideImage`; показывается при наличии `item.image`.\",\n },\n SmallImagePanel: {\n description: \"`2` — «Маленький баннер»: небольшой image-panel в шапке карточки.\",\n examples: [\"2\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Слот `ttSmallImageMobilePanelSlot`; видим при `layoutType === SmallImagePanel` и наличии image.\",\n },\n MediumImagePanel: {\n description:\n \"`3` — «Средний баннер»: средний image-panel. Дефолт для Case/Service/Resource (и их view) в torrow-apps.\",\n examples: [\"3\"],\n valueSchema: \"LayoutTypeValues\",\n },\n BigImagePanel: {\n description:\n \"`4` — «Большой баннер»: крупная обложка; на мобильном с image включает fullscreen-like image view и toolbar с меняющейся opacity при скролле.\",\n examples: [\"4\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Имя может «прибиваться» поверх большого баннера (`isVisibleNailedName`).\",\n },\n SmallSlider: {\n description:\n \"`5` — layout со слайдером изображений (small). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"5\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.SmallSlider`) — это другое поле.\",\n },\n BigSlider: {\n description:\n \"`6` — layout со слайдером изображений (big). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"6\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.*Slider`).\",\n },\n NonImage: {\n description: \"`7` — «Нет изображения»: шапка без обложки/баннера (`ttNonImagePanel`), даже если у item есть `image`.\",\n examples: [\"7\"],\n valueSchema: \"LayoutTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const layoutTypeValuesFieldDocs = mapFieldDocsToStrings(layoutTypeValuesFieldDocEntries);\n\nexport const blockInfoFieldDocEntries = {\n reasonId: {\n description: \"Код причины блокировки.\",\n valueSchema: \"int32\",\n },\n blockDate: {\n description: \"Дата и время блокировки.\",\n valueSchema: \"date-time string | null\",\n },\n reasonNote: {\n description: \"Свободный комментарий к причине блокировки.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockInfoFieldDocs = mapFieldDocsToStrings(blockInfoFieldDocEntries);\n\nexport const usageConditionFieldDocEntries = {\n usageConditionType: {\n description: \"Тип условия (`None`, `Exclusion`, `Additional`, ...).\",\n valueSchema: \"UsageConditionType\",\n },\n conditionIdList: {\n description: \"Ссылки на условия/правила, участвующие в ограничении использования.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionFieldDocs = mapFieldDocsToStrings(usageConditionFieldDocEntries);\n\nexport const usageTypeFieldDocEntries = {\n value: {\n description: \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n valueSchema: \"UsageType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = {\n value: {\n description: \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n valueSchema: \"UsageConditionType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const viewBlockSettingsFieldDocEntries = {\n blockSettings: {\n description: \"Список настроек секций карточки (по типам дочерних элементов).\",\n valueSchema: \"BlockSettings[] | null\",\n usage:\n \"При рендере карточки секции сортируются по `order`; если каких-то дефолтных типов нет, UI добавляет fallback-секции (contact/note/case/service/calendar/resource).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewBlockSettingsFieldDocs = mapFieldDocsToStrings(viewBlockSettingsFieldDocEntries);\n\nexport const blockSettingsFieldDocEntries = {\n objectType: {\n description: \"Тип дочернего элемента для секции (числовой objectType из API).\",\n valueSchema: \"TorrowObjectType\",\n usage:\n \"Сопоставляется с enum-типом в клиенте (`getTorrowObjectTypeByNumber`) и используется для загрузки соответствующего view (contacts/notes/services/cases/calendars/resources).\",\n },\n name: {\n description: \"Название блока (label в UI).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок блока в раскладке.\",\n valueSchema: \"int32 | null\",\n },\n filter: {\n description: \"Дополнительный фильтр секции.\",\n valueSchema: \"Filter\",\n usage:\n \"Для секции поддерживается `filter.tags`: при наличии запускается дополнительный запрос child-view c `listOptions.tags`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockSettingsFieldDocs = mapFieldDocsToStrings(blockSettingsFieldDocEntries);\n\nexport const metricsFieldDocEntries = {\n yandexMetrics: {\n description: \"ID счетчика Яндекс.Метрики для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"При наличии инициализируется отдельный счетчик и получает page hit / reachGoal в дополнение к глобальному счетчику приложения.\",\n },\n googleAnalytics: {\n description: \"GA measurement id для элемента.\",\n valueSchema: \"string | null\",\n usage: \"При наличии отправляются page view / events в GA именно этого элемента.\",\n },\n facebookPixel: {\n description: \"Facebook Pixel id для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"Поле есть в API/SDK и в форме редактирования; в продукте может быть скрыто feature/policy флагами, но сохраняется в `solutionData.metrics`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const metricsFieldDocs = mapFieldDocsToStrings(metricsFieldDocEntries);\n\nexport const filterFieldDocEntries = {\n tags: {\n description: \"Теги для фильтрации дочерних элементов внутри секции.\",\n valueSchema: \"string[] | null\",\n usage:\n \"Заполняется в форме секции (`quickFilterTags`) и маппится в `BlockSettings.filter.tags`; влияет на состав элементов в конкретном блоке карточки.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const filterFieldDocs = mapFieldDocsToStrings(filterFieldDocEntries);\n\nexport const personalSolutionDataFieldDocEntries = {\n favoriteOrder: {\n description: \"Персональный порядок/приоритет элемента для текущего профиля.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const personalSolutionDataFieldDocs = mapFieldDocsToStrings(personalSolutionDataFieldDocEntries);\n\nexport const notificationPropertiesFieldDocEntries = {\n deliveryStrategy: {\n description: \"Стратегия отправки уведомлений (`Always`, `Schedule`, ... по enum API).\",\n valueSchema: \"DeliveryStrategy\",\n },\n deliveryChannelMessageList: {\n description: \"Шаблоны сообщений по каналам доставки.\",\n valueSchema: \"DeliveryChannelMessage[] | null\",\n },\n beginAcceptableTime: {\n description: \"Начало допустимого окна отправки (минуты/код времени API).\",\n valueSchema: \"int32 | null\",\n },\n endAcceptableTime: {\n description: \"Конец допустимого окна отправки.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const notificationPropertiesFieldDocs = mapFieldDocsToStrings(notificationPropertiesFieldDocEntries);\n\nexport const userDeliveryWayFieldDocEntries = {\n deliveryChannel: {\n description: \"Канал доставки (`Sms`, `Email`, `Push`, `Telegram`, `Max` и т.п.).\",\n valueSchema: \"DeliveryChannel\",\n },\n searchValue: {\n description: \"Поисковое/идентификационное значение получателя (телефон, email).\",\n valueSchema: \"string | null\",\n },\n deliveryParameters: {\n description: \"Параметры канала в сериализованной форме.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userDeliveryWayFieldDocs = mapFieldDocsToStrings(userDeliveryWayFieldDocEntries);\n\nexport const deviceSettingsInfoFieldDocEntries = {\n deviceId: {\n description: \"ID устройства пользователя.\",\n valueSchema: \"string | null\",\n },\n settings: {\n description:\n \"Настройки устройства как JSON. Wire OpenAPI — `string | null` (query/тело); SDK: parse при чтении (`null` если не JSON), stringify при записи.\",\n valueSchema: \"JsonValue | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const deviceSettingsInfoFieldDocs = mapFieldDocsToStrings(deviceSettingsInfoFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nconst ENUM_VALUES = {\n AccountType: [\"Undefined\", \"Phone\", \"Email\", \"Telegram\"],\n AdvisedItemType: [\"UnknownAdvisedItemType\", \"NearLocation\", \"Recommendation\"],\n AccountingTransactionState: [\"UnknownState\", \"Intended\", \"Preparing\", \"Cancelled\", \"Reserved\", \"Commited\"],\n AccountingTransactionType: [\"UnknownType\", \"Balance\", \"Operation\"],\n ActionHistoryState: [\"Undefined\", \"Executing\", \"Success\", \"Error\", \"Canceled\"],\n ActionHistoryType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"RequestAccessToItem\",\n \"RevokeRequestAccessToItem\",\n \"AcceptOfferToItem\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"CancelCaseParticipation\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"CaseActionReminder\",\n ],\n AnnouncementCategory: [\n \"UnknownAnnouncementCategory\",\n \"Action\",\n \"Alert\",\n \"Inform\",\n \"Success\",\n \"Deleted\",\n \"Analytics\",\n \"Reminder\",\n ],\n AnnouncementPriority: [\"UnknownAnnouncementPriority\", \"Low\", \"Normal\", \"High\"],\n AnnouncementState: [\"Undefined\", \"New\", \"Read\", \"Hidden\"],\n AnnouncementType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"InviteToParticipate\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"BlockItem\",\n \"UnblockItem\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"ConfirmMyCaseParticipation\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"CreateServiceSession\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"LoyaltyCardExpired\",\n \"SubscriptionExpired\",\n \"LoyaltyCardExpiresSoon\",\n \"SubscriptionExpiresSoon\",\n \"AccountBalanceReachedNotificationLevel\",\n \"AccountBalanceReachedMinimumLevel\",\n ],\n AnyoneAccess: [\"UnknownAnyoneAccess\", \"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n ArchiveState: [\"None\", \"Marked\", \"Archived\"],\n AvailabilityTime: [\"UnknownSystemAvailabilityTime\", \"Free\", \"Busy\"],\n AvailableResources: [\"Unknown\", \"Free\", \"Booked\", \"Busy\"],\n CaseParticipantState: [\"UnknownCaseParticipantState\", \"Booking\", \"Registered\", \"Canceled\", \"Approving\"],\n CaseParticipantType: [\"UnknownCaseParticipantType\", \"Consumer\", \"Executor\", \"Escort\"],\n CaseState: [\n \"UnknownCaseState\",\n \"Verifying\",\n \"Waiting\",\n \"Processing\",\n \"Preparing\",\n \"Completed\",\n \"Closed\",\n \"Rejected\",\n \"Canceled\",\n \"TimeControlled\",\n \"TaskNotCompleted\",\n \"TaskCompleted\",\n ],\n CaseType: [\"UnknownTimeType\", \"Time\", \"RepeatedTime\", \"Today\", \"Week\", \"Later\", \"Date\", \"State\"],\n CommunicationType: [\n \"UnknownCommunicationType\",\n \"Phone\",\n \"Sms\",\n \"Email\",\n \"WebSite\",\n \"Telegram\",\n \"WhatsApp\",\n \"Viber\",\n \"Facebook\",\n \"Instagram\",\n \"Vkontakte\",\n \"Odnoklassniki\",\n \"Skype\",\n \"Youtube\",\n \"Twitter\",\n \"LinkedIn\",\n \"Max\",\n \"Other\",\n ],\n TokenStatus: [\"TokenReady\", \"Pending\", \"AwaitingSmsCode\", \"Failed\"],\n VerificationMethod: [\"UnknownMethod\", \"Sms\", \"TelegramGateway\", \"FlashCall\", \"MtsMobileId\"],\n DeleteState: [\"None\", \"Marked\", \"Deleted\"],\n DeliveryChannel: [\n \"UnknownDeliveryChannel\",\n \"Push\",\n \"Email\",\n \"Sms\",\n \"InApp\",\n \"Phone\",\n \"Announcement\",\n \"Telegram\",\n \"Max\",\n ],\n DeliveryStrategy: [\"UnknownDeliveryStrategy\", \"All\", \"FirstDelivered\"],\n Gender: [\"UnknownGender\", \"Male\", \"Female\", \"OtherGender\"],\n ImagePreviewSize: [\"Undefined\", \"Hidden\", \"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\"],\n ItemSortCondition: [\n \"CreateDateAsc\",\n \"CreateDateDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"CreateDateAscLastModifiedAsc\",\n \"CreateDateDescLastModifiedAsc\",\n \"CreateDateAscLastModifiedDesc\",\n \"CreateDateDescLastModifiedDesc\",\n \"LastModifiedAscCreateDateAsc\",\n \"LastModifiedAscCreateDateDesc\",\n \"LastModifiedDescCreateDateAsc\",\n \"LastModifiedDescCreateDateDesc\",\n ],\n ItemViewSortCondition: [\n \"OrderAsc\",\n \"OrderDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"OrderAscLastModifiedAsc\",\n \"OrderDescLastModifiedAsc\",\n \"OrderAscLastModifiedDesc\",\n \"OrderDescLastModifiedDesc\",\n \"LastModifiedAscOrderAsc\",\n \"LastModifiedAscOrderDesc\",\n \"LastModifiedDescOrderAsc\",\n \"LastModifiedDescOrderDesc\",\n ],\n LinkType: [\"Unknown\", \"User\", \"Pinned\", \"Group\"],\n NoteType: [\"Unknown\", \"Text\", \"Html\", \"Markdown\", \"Hlink\", \"File\", \"Photo\", \"Voice\", \"Geolocation\", \"Qr\", \"ServiceSpecification\"],\n ObjectSortCondition: [\n \"CreateDateAsc\",\n \"CreateDateDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"CreateDateAscLastModifiedAsc\",\n \"CreateDateDescLastModifiedAsc\",\n \"CreateDateAscLastModifiedDesc\",\n \"CreateDateDescLastModifiedDesc\",\n \"LastModifiedAscCreateDateAsc\",\n \"LastModifiedAscCreateDateDesc\",\n \"LastModifiedDescCreateDateAsc\",\n \"LastModifiedDescCreateDateDesc\",\n ],\n OperationType: [\n \"UnknownOperation\",\n \"Verification\",\n \"ConfirmCommunication\",\n \"AcceptInvite\",\n \"SendPersonalReminder\",\n \"DeleteUser\",\n \"AddAccount\",\n \"DeleteAccount\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"ReadItem\",\n \"SearchItem\",\n \"ReadChildItems\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"ReadParticipants\",\n \"CanUseAsProfile\",\n \"CopyLink\",\n \"SocialSharing\",\n \"InviteToParticipate\",\n \"ReadCaseParticipants\",\n \"UpdateUniqueName\",\n \"ReadItemOwners\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SetItemTags\",\n \"GetActionHistory\",\n \"UpdateFeedbackOptions\",\n \"SendAnnouncementsToParticipants\",\n \"SetItemMetrics\",\n \"GetFeedbackMessage\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"FullViewOfActionHistory\",\n \"GenerateSecurityToken\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"FullReadCaseParticipants\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"Invite\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"RejectItem\",\n \"BlockItem\",\n \"UnblockItem\",\n \"ReaderTestFunction\",\n \"EditorTestFunction\",\n \"OwnerTestFunction\",\n \"PotentialReaderTestFunction\",\n \"AdministratorTestFunction\",\n \"PublicReaderTestFunction\",\n \"ManagerTestFunction\",\n \"DeletedTestFunction\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CreateSingleCaseForGroupCase\",\n \"GenerateCaseReport\",\n \"ConfirmOtherCaseParticipationReminderNotif\",\n \"SendClaimAboutOtherCaseParticipationNotif\",\n \"GetTimetable\",\n \"GetTimetableView\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ConfirmCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"GetTimetableStatistics\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"GetCalendarCase\",\n \"GetCalendarTask\",\n \"IncludeSpecifications\",\n \"ExcludeSpecifications\",\n \"CreateServiceSession\",\n \"GetCheckInSchedule\",\n \"CreateOrder\",\n \"CreateSpecification\",\n \"ServiceDashboard\",\n \"GenerateServiceReport\",\n \"GenerateServicesResourcesReport\",\n \"GenerateResourcesRentReport\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"GetReCheckInSchedule\",\n \"ChangeOrderService\",\n \"GetServiceWorkloadInfo\",\n \"GenerateResourceReport\",\n \"UpdateContactProperties\",\n \"PickOrder\",\n \"ReturnOrder\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"GetLoyaltySystemCards\",\n \"GetLoyaltySystemsStatistics\",\n \"ConsumerTestFunction\",\n \"ExecutorTestFunction\",\n \"PotentialConsumerTestFunction\",\n \"CaseActionReminder\",\n ],\n ParticipantState: [\"UnknownParticipantState\", \"Requested\", \"Offered\", \"Revoked\", \"Accepted\", \"Rejected\", \"Declined\"],\n ParticipantType: [\"UnknownParticipantType\", \"Owner\", \"Editor\", \"Reader\", \"Publisher\", \"Manager\", \"PublicReader\"],\n ParticipationFieldRequirementType: [\n \"UnknownParticipationFieldRequirement\",\n \"NoneRequirement\",\n \"OptionalField\",\n \"RequiredField\",\n ],\n ParticipationFieldType: [\n \"UnknownParticipationField\",\n \"FullName\",\n \"LastName\",\n \"FirstName\",\n \"MiddleName\",\n \"Company\",\n \"Position\",\n \"MainPhone\",\n \"VerifiedMainPhone\",\n \"AdditionalPhone\",\n \"MainEmail\",\n \"VerifiedMainEmail\",\n \"AdditionalEmail\",\n \"Address\",\n \"AddressLocation\",\n \"PaymentAccount\",\n \"CustomString\",\n \"CustomBoolean\",\n \"CustomInt32\",\n \"CustomDouble\",\n \"CustomMoney\",\n \"CustomDate\",\n \"CustomTime\",\n \"CustomDateTime\",\n ],\n PaymentProviderType: [\n \"UnknownPaymentProviderType\",\n \"Cash\",\n \"CustomLink\",\n \"YooMoney\",\n \"QiwiP2P\",\n \"QiwiB2B\",\n \"YooKassa\",\n \"Sberbank\",\n \"Uralsib\",\n \"Alfabank\",\n \"RoboKassa\",\n \"PayKeeper\",\n \"GateLine\",\n \"Tinkoff\",\n \"Prodamus\",\n \"MockPaymentProvider\",\n ],\n ProfileType: [\"UnknownProfile\", \"None\", \"MyProfile\", \"AnyProfile\", \"CopyProfile\"],\n ProfileUserAvailability: [\"Unknown\", \"Free\", \"Busy\", \"Hidden\", \"ProfileAuto\", \"UserAuto\"],\n ReminderLocationDirection: [\"In\", \"Out\"],\n ReportDeliveryType: [\"UnknownReportDeliveryType\", \"Link\", \"Email\"],\n ShowCaseInTimetableType: [\"All\", \"ExcludeUser\"],\n TimetableDetailsVisibility: [\"Time\", \"View\"],\n TicketState: [\"UnknownTicketState\", \"Canceled\", \"Waiting\", \"Paid\", \"Used\", \"Error\"],\n TicketPaymentConfirmationSource: [\n \"UnknownTicketPaymentConfirmationSource\",\n \"PaymentLink\",\n \"Manager\",\n ],\n TorrowObjectType: [\n \"Unknown\",\n \"Account\",\n \"User\",\n \"Participant\",\n \"PersonalLink\",\n \"Event\",\n \"Subscription\",\n \"Announcement\",\n \"Review\",\n \"Reminder\",\n \"File\",\n \"ItemLink\",\n \"ActionHistory\",\n \"Device\",\n \"ShortUrl\",\n \"UserDeliveryWay\",\n \"UserLink\",\n \"FileHash\",\n \"FeedbackMessage\",\n \"FeedbackScore\",\n \"Numerator\",\n \"Payment\",\n \"IntegrationConfig\",\n \"ExternalAuth\",\n \"AccountingTransaction\",\n \"Context\",\n \"Contact\",\n \"Note\",\n \"Case\",\n \"Service\",\n \"CaseParticipant\",\n \"Goal\",\n \"Resource\",\n \"Calendar\",\n \"OrderPart\",\n \"Survey\",\n \"SurveyResponse\",\n \"AdvisedItem\",\n \"LoyaltySystem\",\n \"LoyaltyCard\",\n \"ReferralProgram\",\n \"LoyaltyCardSubscription\",\n \"DictHobby\",\n ],\n UsageConditionType: [\"UnknownUsageConditionType\", \"None\", \"Exclusion\", \"Additional\"],\n UsageType: [\"UnknownUsageType\", \"Specification\", \"Rent\", \"Sale\", \"Payment\", \"Ticket\"],\n SessionDurationType: [\n \"UnknownSessionDurationType\",\n \"SessionDurationNone\",\n \"Custom\",\n \"Constant\",\n \"Sum\",\n ],\n TimeSelectionType: [\"UnknownTimeSelectionType\", \"TimeSelectionNone\", \"Consumer\", \"Executor\"],\n StateManagementType: [\"UnknownStateManagementType\", \"Auto\", \"Manual\"],\n SessionPrecisionType: [\"UnknownSessionPrecisionType\", \"SessionPrecisionNone\", \"DateTime\", \"Date\"],\n UserAccessLevel: [\"UnknownUserAccessLevel\", \"Authenticated\", \"Unauthenticated\"],\n LoyaltyCardIssueType: [\"UnknownLoyaltyCardIssueType\", \"Manual\", \"AutoActive\", \"AutoIssued\"],\n LoyaltyCardUpdateKeyInformation: [\n \"UnknownLoyaltyCardUpdateKeyInformation\",\n \"NonKeyDisallowed\",\n \"NonKeyAllowed\",\n ],\n LoyaltyCardUpdateNonKeyInformation: [\n \"UnknownLoyaltyCardUpdateNonKeyInformation\",\n \"KeyDisallowed\",\n \"KeyAllowed\",\n ],\n} as const;\n\ntype EnumName = keyof typeof ENUM_VALUES;\n\nconst SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS: Partial<Record<EnumName, Record<string, string>>> = {\n AdvisedItemType: {\n UnknownAdvisedItemType: \"Служебное/неопределённое значение режима подборки adviseditems.\",\n NearLocation:\n \"Элементы рядом с точкой: обязательны query `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`**.\",\n Recommendation: \"Персональные рекомендации пользователя (без обязательной геопозиции).\",\n },\n VerificationMethod: {\n UnknownMethod: \"Сервер сам выбирает способ доставки кода (дефолт, если клиент не указал предпочтение).\",\n Sms: \"Код доставляется SMS на телефон.\",\n TelegramGateway: \"Код через Telegram Gateway (не путать с AccountType.Telegram).\",\n FlashCall: \"Flash-call: пользователь вводит последние цифры входящего номера.\",\n MtsMobileId:\n \"МТС Mobile ID: out-of-band подтверждение без классического ввода кода; клиент поллит `requestToken` по `TokenResp.status`. Документация МТС: https://developers.mts.ru/mobile-id/documentation/autentifikatsiya\",\n },\n TokenStatus: {\n TokenReady: \"Токены готовы: в ответе есть access/refresh (классический OTP и успешный Mobile ID).\",\n Pending: \"Выдача ещё идёт (типично MTS Mobile ID) — полли `requestToken` с интервалом `SendCodeResp.pollIntervalSeconds`.\",\n AwaitingSmsCode: \"Mobile ID не завершился — нужен fallback: ввод SMS-кода и повторный `requestToken` с `code`.\",\n Failed: \"Выдача токенов не удалась; токены пустые — начать заново с `sendCode`.\",\n },\n LinkType: {\n Unknown: \"Служебный/неопределённый тип связи parent↔child (`ItemLink.linkType`).\",\n User: \"User link: личная ветка mind map; видит владелец связи. Канон create — `saveToMindMap` (не `includeForUser`).\",\n Pinned: \"Pinned link: структурное прикрепление к родителю; видно участникам родителя. Create — `includeToParent`.\",\n Group:\n \"Значение enum в OpenAPI; UI apps не строит ItemLink этого типа. Членство групп — `includeToGroups` / `updateGroups`, не `LinkType.Group`.\",\n },\n CaseState: {\n UnknownCaseState: \"Служебное/неопределенное состояние кейса.\",\n Verifying: \"Кейс на этапе проверки/подтверждения перед исполнением.\",\n Waiting: \"Кейс создан и ожидает начала выполнения или подтверждения.\",\n Processing: \"Кейс находится в активной работе.\",\n Preparing: \"Подготовительный этап перед основным выполнением кейса.\",\n Completed: \"Кейс успешно завершен.\",\n Closed: \"Кейс окончательно закрыт и больше не участвует в активном процессе.\",\n Rejected: \"Кейс отклонен (не принят к выполнению).\",\n Canceled: \"Кейс отменен (инициатором, исполнителем или системой по правилам).\",\n TimeControlled: \"Кейс находится под контролем временных ограничений/таймингов.\",\n TaskNotCompleted: \"Задача по кейсу не выполнена в требуемом объеме/срок.\",\n TaskCompleted: \"Задача по кейсу отмечена как выполненная.\",\n },\n CaseType: {\n UnknownTimeType: \"Служебный/неопределенный тип кейса по времени.\",\n Time: \"Одиночный кейс с конкретным временем.\",\n RepeatedTime: \"Повторяющийся кейс (серия по расписанию).\",\n Today: \"Кейс, относящийся к текущему дню.\",\n Week: \"Кейс/вид, агрегированный на недельном горизонте.\",\n Later: \"Кейс, отложенный на более поздний период.\",\n Date: \"Кейс, привязанный к конкретной дате (без детальной периодики).\",\n State: \"Кейс, фильтруемый/представляемый по состоянию, а не по времени.\",\n },\n TimetableDetailsVisibility: {\n Time:\n \"Только интервалы занятости (begin/end). Сервер не подгружает CaseView/CaseSummary для всех событий/заказов — лёгкий ответ для фона календаря / busy-bars. В ответе `detailsVisibility` остаётся `Time`, пока запись не обогащена.\",\n View:\n \"Полные детали событий/заказов: сервер подгружает CaseView и CaseSummary (`name`, `caseSummary`, …). Дефолт в torrow-apps (`TimetableCaseService.getTimetable`, экспорт заказов). В ответе обогащённые записи получают `detailsVisibility=View`.\",\n },\n TicketState: {\n UnknownTicketState: \"Служебное/неопределенное состояние билета.\",\n Canceled: \"Билет отменен и не может быть использован.\",\n Waiting: \"Билет ожидает оплаты или подтверждения.\",\n Paid: \"Билет оплачен и активен для использования.\",\n Used: \"Билет уже использован (услуга/доступ оказаны).\",\n Error: \"Ошибка обработки билета/платежного состояния.\",\n },\n AvailabilityTime: {\n UnknownSystemAvailabilityTime: \"Не удалось определить доступность временного слота.\",\n Free: \"Слот свободен для записи/бронирования.\",\n Busy: \"Слот занят и недоступен для новой записи.\",\n },\n AvailableResources: {\n Unknown: \"Служебное/неопределенное состояние ресурса в выборке.\",\n Free: \"Ресурс свободен.\",\n Booked: \"Ресурс забронирован.\",\n Busy: \"Ресурс занят и недоступен.\",\n },\n AnyoneAccess: {\n UnknownAnyoneAccess: \"Служебное/неопределенное значение уровня публичного доступа.\",\n NoneAnyoneAccess: \"Публичный доступ для «любого пользователя» не задан.\",\n Read: \"Любой пользователь может только читать объект.\",\n ReadWrite: \"Любой пользователь может читать и изменять объект.\",\n Denied: \"Публичный доступ явно запрещен.\",\n },\n DeliveryChannel: {\n UnknownDeliveryChannel: \"Служебный/неопределенный канал доставки.\",\n Push: \"Push-уведомление в приложение.\",\n Email: \"Доставка уведомления по email.\",\n Sms: \"Доставка уведомления через SMS.\",\n InApp: \"Внутреннее уведомление внутри приложения.\",\n Phone: \"Голосовой/телефонный канал.\",\n Announcement: \"Доставка через системное объявление.\",\n Telegram: \"Доставка через Telegram-канал/бот.\",\n Max: \"Доставка через мессенджер Max.\",\n },\n DeliveryStrategy: {\n UnknownDeliveryStrategy: \"Служебная/неопределенная стратегия доставки.\",\n All: \"Отправлять по всем доступным каналам.\",\n FirstDelivered: \"Остановиться после первой успешной доставки.\",\n },\n ProfileUserAvailability: {\n Unknown: \"Служебное/неопределенное состояние доступности профиля.\",\n Free: \"Профиль свободен и доступен для назначения.\",\n Busy: \"Профиль занят.\",\n Hidden: \"Профиль скрыт из сценариев подбора/расписания.\",\n ProfileAuto: \"Доступность определяется автоматически на уровне профиля.\",\n UserAuto: \"Доступность наследуется/рассчитывается автоматически от пользователя.\",\n },\n SessionDurationType: {\n UnknownSessionDurationType: \"Служебный/неопределенный тип длительности сессии.\",\n SessionDurationNone: \"Длительность сессии не используется (например Appeal).\",\n Custom: \"Длительность задаёт потребитель/исполнитель (аренда, кастомный интервал).\",\n Constant: \"Фиксированная длительность (`defaultDuration`).\",\n Sum: \"Длительность = сумма длительностей выбранных ресурсов/шагов (типично RegisterOnTime).\",\n },\n TimeSelectionType: {\n UnknownTimeSelectionType: \"Служебный/неопределенный тип выбора времени.\",\n TimeSelectionNone: \"Время не выбирается.\",\n Consumer: \"Время выбирает потребитель (клиент).\",\n Executor: \"Время выбирает исполнитель.\",\n },\n StateManagementType: {\n UnknownStateManagementType: \"Служебный/неопределенный режим управления состоянием сессии.\",\n Auto: \"Состояния сессии/кейса ведутся автоматически.\",\n Manual: \"Состояния меняет исполнитель вручную.\",\n },\n SessionPrecisionType: {\n UnknownSessionPrecisionType: \"Служебная/неопределенная точность сессии.\",\n SessionPrecisionNone: \"Точность не задана.\",\n DateTime: \"Выбор даты и времени.\",\n Date: \"Выбор только даты (без времени суток).\",\n },\n UserAccessLevel: {\n UnknownUserAccessLevel: \"Служебный/неопределенный уровень доступа для check-in/записи.\",\n Authenticated: \"Только аутентифицированные пользователи.\",\n Unauthenticated: \"Допускаются гости без полноценной сессии.\",\n },\n LoyaltyCardIssueType: {\n UnknownLoyaltyCardIssueType: \"Служебный/неопределенный способ выпуска карты.\",\n Manual: \"Карту выпускает оператор вручную.\",\n AutoActive: \"Карта выпускается и активируется автоматически (дефолт create в apps).\",\n AutoIssued: \"Карта выпускается автоматически без авто-активации.\",\n },\n LoyaltyCardUpdateKeyInformation: {\n UnknownLoyaltyCardUpdateKeyInformation: \"Служебное/неопределенное правило обновления key-полей карты.\",\n NonKeyDisallowed: \"Ключевые поля карты нельзя обновлять через non-key путь (дефолт create).\",\n NonKeyAllowed: \"Обновление ключевых полей через non-key путь разрешено.\",\n },\n LoyaltyCardUpdateNonKeyInformation: {\n UnknownLoyaltyCardUpdateNonKeyInformation: \"Служебное/неопределенное правило обновления non-key полей.\",\n KeyDisallowed: \"Non-key поля карты не обновляются (дефолт create, если чекбокс выключен).\",\n KeyAllowed: \"Non-key поля карты можно обновлять.\",\n },\n};\n\nconst DETAILED_TYPE_STATE_ENUMS = new Set<EnumName>(\n (Object.keys(ENUM_VALUES) as EnumName[]).filter(\n (name) =>\n (name.endsWith(\"Type\") || name.endsWith(\"State\")) &&\n name !== \"ActionHistoryType\" &&\n name !== \"AnnouncementType\",\n ),\n);\n\nconst EXTRA_DETAILED_ENUMS = new Set<EnumName>([\n \"ProfileUserAvailability\",\n \"DeliveryChannel\",\n \"DeliveryStrategy\",\n \"AvailableResources\",\n \"AnyoneAccess\",\n]);\n\nfunction toReadableToken(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/_/g, \" \")\n .trim();\n}\n\nfunction getPaymentProviderTypeDescription(value: string): string {\n const byValue: Record<string, string> = {\n UnknownPaymentProviderType: \"Служебное/неопределенное значение провайдера оплаты.\",\n Cash: \"Оплата наличными без перехода на внешний платежный шлюз.\",\n CustomLink: \"Оплата по кастомной внешней ссылке, заданной в настройках.\",\n YooMoney: \"Оплата через провайдера YooMoney.\",\n QiwiP2P: \"Оплата через Qiwi P2P.\",\n QiwiB2B: \"Оплата через Qiwi B2B.\",\n YooKassa: \"Оплата через YooKassa.\",\n Sberbank: \"Оплата через Сбербанк.\",\n Uralsib: \"Оплата через Уралсиб.\",\n Alfabank: \"Оплата через Альфа-Банк.\",\n RoboKassa: \"Оплата через RoboKassa.\",\n PayKeeper: \"Оплата через PayKeeper.\",\n GateLine: \"Оплата через GateLine.\",\n Tinkoff: \"Оплата через Тинькофф.\",\n Prodamus: \"Оплата через Prodamus.\",\n MockPaymentProvider: \"Тестовый/эмуляционный провайдер оплаты для стендов и отладки.\",\n };\n return byValue[value] ?? `Платежный провайдер \\`${value}\\`.`;\n}\n\nfunction getParticipationFieldTypeDescription(value: string): string {\n const byValue: Record<string, string> = {\n UnknownParticipationField: \"Служебный/неопределенный тип поля участника.\",\n FullName: \"Полное имя участника одной строкой.\",\n LastName: \"Фамилия участника.\",\n FirstName: \"Имя участника.\",\n MiddleName: \"Отчество/второе имя участника.\",\n Company: \"Название компании участника.\",\n Position: \"Должность участника в компании.\",\n MainPhone: \"Основной телефон участника.\",\n VerifiedMainPhone: \"Основной телефон, подтвержденный проверкой кода.\",\n AdditionalPhone: \"Дополнительный телефон участника.\",\n MainEmail: \"Основной email участника.\",\n VerifiedMainEmail: \"Основной email, подтвержденный проверкой кода.\",\n AdditionalEmail: \"Дополнительный email участника.\",\n Address: \"Текстовый адрес участника.\",\n AddressLocation: \"Геолокация/координаты адреса участника.\",\n PaymentAccount: \"Платежный счет/реквизиты участника для расчетов.\",\n CustomString: \"Пользовательское строковое поле анкеты.\",\n CustomBoolean: \"Пользовательское поле-флаг (true/false).\",\n CustomInt32: \"Пользовательское целочисленное поле.\",\n CustomDouble: \"Пользовательское числовое поле с дробной частью.\",\n CustomMoney: \"Пользовательское денежное поле.\",\n CustomDate: \"Пользовательское поле даты.\",\n CustomTime: \"Пользовательское поле времени.\",\n CustomDateTime: \"Пользовательское поле даты и времени.\",\n };\n return byValue[value] ?? `Тип поля участника \\`${value}\\`.`;\n}\n\nfunction getOperationTypeDescription(value: string): string {\n const explicit: Record<string, string> = {\n UnknownOperation: \"Служебный/неопределенный тип операции.\",\n Verification: \"Операция верификации пользователя/сущности.\",\n ConfirmCommunication: \"Подтверждение канала связи (email/телефон и т.п.).\",\n AcceptInvite: \"Принятие приглашения на участие.\",\n SendPersonalReminder: \"Отправка персонального напоминания.\",\n ReadItem: \"Чтение карточки элемента.\",\n SearchItem: \"Поиск элементов по условиям.\",\n ReadChildItems: \"Чтение дочерних элементов в иерархии.\",\n EditChildItems: \"Изменение состава/связей дочерних элементов.\",\n SortChildItems: \"Изменение порядка дочерних элементов.\",\n ReadParticipants: \"Просмотр участников элемента.\",\n ReadCaseParticipants: \"Просмотр участников события/кейса.\",\n FullReadCaseParticipants: \"Расширенный просмотр участников кейса с полным набором данных.\",\n CopyLink: \"Копирование ссылки на элемент/ресурс.\",\n SocialSharing: \"Шаринг через внешние соцканалы.\",\n InviteToParticipate: \"Приглашение пользователя к участию.\",\n HaveNotNotificationWays: \"Сигнал, что у пользователя нет доступных каналов уведомлений.\",\n RegisterDevice: \"Регистрация устройства пользователя для уведомлений/сессии.\",\n SetItemTags: \"Изменение тегов элемента.\",\n GetActionHistory: \"Просмотр истории действий.\",\n UpdateFeedbackOptions: \"Изменение настроек обратной связи.\",\n SendAnnouncementsToParticipants: \"Рассылка объявлений участникам.\",\n SetItemMetrics: \"Настройка метрик/аналитики для элемента.\",\n GetFeedbackMessage: \"Получение сообщения обратной связи.\",\n SaveFeedbackMessage: \"Сохранение сообщения обратной связи.\",\n DeleteFeedbackMessage: \"Удаление сообщения обратной связи.\",\n FullViewOfActionHistory: \"Полный просмотр истории действий.\",\n GenerateSecurityToken: \"Генерация security token для гостевого/ограниченного доступа.\",\n ReaderTestFunction: \"Тестовая операция для роли Reader.\",\n EditorTestFunction: \"Тестовая операция для роли Editor.\",\n OwnerTestFunction: \"Тестовая операция для роли Owner.\",\n PotentialReaderTestFunction: \"Тестовая операция для потенциального Reader.\",\n AdministratorTestFunction: \"Тестовая операция для администратора.\",\n PublicReaderTestFunction: \"Тестовая операция для публичного чтения.\",\n ManagerTestFunction: \"Тестовая операция для менеджера.\",\n DeletedTestFunction: \"Тестовая операция для удаленного состояния.\",\n ConsumerTestFunction: \"Тестовая операция для роли Consumer.\",\n ExecutorTestFunction: \"Тестовая операция для роли Executor.\",\n PotentialConsumerTestFunction: \"Тестовая операция для потенциального Consumer.\",\n };\n if (explicit[value]) return explicit[value];\n\n const readable = toReadableToken(value);\n if (value.startsWith(\"Create\")) return `Создание сущности/объекта в сценарии \"${readable}\".`;\n if (value.startsWith(\"Update\")) return `Обновление данных в сценарии \"${readable}\".`;\n if (value.startsWith(\"Delete\") || value.startsWith(\"Remove\")) return `Удаление/снятие привязки в сценарии \"${readable}\".`;\n if (value.startsWith(\"Get\") || value.startsWith(\"Read\")) return `Чтение/получение данных в сценарии \"${readable}\".`;\n if (value.startsWith(\"Generate\")) return `Генерация данных/отчета/токена в сценарии \"${readable}\".`;\n if (value.startsWith(\"Include\")) return `Включение/добавление связи в сценарии \"${readable}\".`;\n if (value.startsWith(\"Exclude\")) return `Исключение/удаление связи в сценарии \"${readable}\".`;\n if (value.startsWith(\"Case\")) return `Операция жизненного цикла события (кейса): \"${readable}\".`;\n if (value.startsWith(\"Confirm\")) return `Подтверждение действия/состояния: \"${readable}\".`;\n if (value.startsWith(\"Reject\") || value.startsWith(\"Decline\")) return `Отклонение/отказ в сценарии \"${readable}\".`;\n if (value.startsWith(\"Approve\")) return `Подтверждение/аппрув в сценарии \"${readable}\".`;\n if (value.startsWith(\"Request\")) return `Запрос действия/доступа в сценарии \"${readable}\".`;\n if (value.startsWith(\"Revoke\")) return `Отзыв ранее выданного доступа/предложения в сценарии \"${readable}\".`;\n if (value.startsWith(\"Send\")) return `Отправка сообщения/уведомления/ссылки в сценарии \"${readable}\".`;\n if (value.startsWith(\"Set\") || value.startsWith(\"Unset\")) return `Установка/сброс параметра или связи: \"${readable}\".`;\n if (value.startsWith(\"Pick\") || value.startsWith(\"Return\")) return `Операция движения заказа/ресурса: \"${readable}\".`;\n if (value.startsWith(\"Book\") || value.startsWith(\"CheckIn\")) return `Операция записи/чекина: \"${readable}\".`;\n\n return `Операция доступа/изменения в домене Torrow: \"${readable}\".`;\n}\n\nfunction getDetailedEnumValueDescription(enumName: EnumName, value: string): string {\n const readableValue = toReadableToken(value);\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Служебное/неопределенное значение для \\`${enumName}\\` (\\`${value}\\`). Обычно означает, что сервер не смог однозначно определить тип/состояние.`;\n }\n if (value === \"None\") {\n return `Явное отсутствие установленного типа/состояния для \\`${enumName}\\`.`;\n }\n return `Значение \\`${value}\\` в enum \\`${enumName}\\` определяет режим/категорию \"${readableValue}\" в соответствующем API-сценарии.`;\n}\n\nfunction getEnumValueDescription(enumName: EnumName, value: string): string {\n if (enumName === \"NoteType\") {\n if (value === \"Html\") return \"HTML-заметка: data содержит HTML-строку. Поддерживаемый сценарий SDK.\";\n if (value === \"Markdown\") return \"Markdown-заметка: data содержит исходный Markdown с сохранением пробелов и переносов. Поддерживаемый сценарий SDK.\";\n return \"Серверное значение \" + value + \": сохранено для совместимости; вне поддерживаемых сценариев создания Html/Markdown.\";\n }\n const explicitDescription = SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS[enumName]?.[value];\n if (explicitDescription) {\n return explicitDescription;\n }\n if (enumName === \"PaymentProviderType\") {\n return getPaymentProviderTypeDescription(value);\n }\n if (enumName === \"ParticipationFieldType\") {\n return getParticipationFieldTypeDescription(value);\n }\n if (enumName === \"OperationType\") {\n return getOperationTypeDescription(value);\n }\n if (DETAILED_TYPE_STATE_ENUMS.has(enumName) || EXTRA_DETAILED_ENUMS.has(enumName)) {\n return getDetailedEnumValueDescription(enumName, value);\n }\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Неопределенное/служебное значение enum \\`${enumName}\\` (\\`${value}\\`).`;\n }\n if (value === \"None\") {\n return `Явное отсутствие выбранного значения для enum \\`${enumName}\\`.`;\n }\n return `Значение enum \\`${enumName}\\`: \\`${value}\\`.`;\n}\n\nfunction createEnumFieldDocEntries(enumName: EnumName, summary: string): Record<string, ItemFieldDoc> {\n const valueEntries = Object.fromEntries(\n ENUM_VALUES[enumName].map((value) => [\n value,\n {\n description: getEnumValueDescription(enumName, value),\n examples: [value],\n valueSchema: enumName,\n } as ItemFieldDoc,\n ]),\n );\n return {\n value: {\n description: summary,\n valueSchema: enumName,\n },\n ...valueEntries,\n };\n}\n\nexport const actionHistoryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryType\",\n \"Тип события истории действий (создание, обновление, удаление, участие и пр.).\",\n);\nexport const actionHistoryTypeFieldDocs = mapFieldDocsToStrings(actionHistoryTypeFieldDocEntries);\n\nexport const actionHistoryStateFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryState\",\n \"Состояние записи action-history (актуальна/архив/служебные состояния API).\",\n);\nexport const actionHistoryStateFieldDocs = mapFieldDocsToStrings(actionHistoryStateFieldDocEntries);\n\nexport const announcementStateFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementState\",\n \"Состояние уведомления (`New`, `Read`, `Hidden` и др.).\",\n);\nexport const announcementStateFieldDocs = mapFieldDocsToStrings(announcementStateFieldDocEntries);\n\nexport const itemViewSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemViewSortCondition\",\n \"Условие сортировки списков view в API (`/views/*`).\",\n);\nexport const itemViewSortConditionFieldDocs = mapFieldDocsToStrings(itemViewSortConditionFieldDocEntries);\n\nexport const participantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantType\",\n \"Тип/роль участника в participation-модели (владелец, гость, подписчик и т.п.).\",\n);\nexport const participantTypeFieldDocs = mapFieldDocsToStrings(participantTypeFieldDocEntries);\n\nexport const participantStateFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantState\",\n \"Состояние участия (ожидание, активен, отклонён, отозван и т.п.).\",\n);\nexport const participantStateFieldDocs = mapFieldDocsToStrings(participantStateFieldDocEntries);\n\nexport const accountingTransactionStateFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionState\",\n \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n);\nexport const accountingTransactionStateFieldDocs = mapFieldDocsToStrings(accountingTransactionStateFieldDocEntries);\n\nexport const operationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"OperationType\",\n \"Тип операции над объектом в связях/participation (по OpenAPI enum).\",\n);\nexport const operationTypeFieldDocs = mapFieldDocsToStrings(operationTypeFieldDocEntries);\n\nexport const torrowObjectTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TorrowObjectType\",\n \"Доменный тип объекта Torrow (`Contact`, `Case`, `Service`, `LoyaltyCard`, ...).\",\n);\nexport const torrowObjectTypeFieldDocs = mapFieldDocsToStrings(torrowObjectTypeFieldDocEntries);\n\nexport const itemSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemSortCondition\",\n \"Условие сортировки элементов в group/list API.\",\n);\nexport const itemSortConditionFieldDocs = mapFieldDocsToStrings(itemSortConditionFieldDocEntries);\n\nexport const objectSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ObjectSortCondition\",\n \"Условие сортировки объектов (`lm`, `cd`, кастомные поля — по OpenAPI).\",\n);\nexport const objectSortConditionFieldDocs = mapFieldDocsToStrings(objectSortConditionFieldDocEntries);\n\nexport const accountTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountType\",\n \"Тип аккаунта в auth-потоке (`Phone`, `Email`, ...).\",\n);\nexport const accountTypeFieldDocs = mapFieldDocsToStrings(accountTypeFieldDocEntries);\n\nexport const advisedItemTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AdvisedItemType\",\n \"Режим `GET /api/v1/search/adviseditems` (`NearLocation` / `Recommendation`). Query: **`AdvisedItemsSearchQuery`**.\",\n);\nexport const advisedItemTypeFieldDocs = mapFieldDocsToStrings(advisedItemTypeFieldDocEntries);\n\nexport const verificationMethodFieldDocEntries = createEnumFieldDocEntries(\n \"VerificationMethod\",\n \"Способ доставки/подтверждения кода входа (`SendCodeReq.preferredMethod`, `SendCodeResp.usedMethod`).\",\n);\nexport const verificationMethodFieldDocs = mapFieldDocsToStrings(verificationMethodFieldDocEntries);\n\nexport const tokenStatusFieldDocEntries = createEnumFieldDocEntries(\n \"TokenStatus\",\n \"Статус выдачи токенов в `TokenResp.status` (классический OTP → `TokenReady`; Mobile ID — polling).\",\n);\nexport const tokenStatusFieldDocs = mapFieldDocsToStrings(tokenStatusFieldDocEntries);\n\nexport const communicationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CommunicationType\",\n \"Канал коммуникации для подтверждения (`Sms`, `Email`, ...).\",\n);\nexport const communicationTypeFieldDocs = mapFieldDocsToStrings(communicationTypeFieldDocEntries);\n\nexport const accountingTransactionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionType\",\n \"Тип учетной транзакции (`Balance`, `Operation`).\",\n);\nexport const accountingTransactionTypeFieldDocs = mapFieldDocsToStrings(accountingTransactionTypeFieldDocEntries);\n\nexport const announcementCategoryFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementCategory\",\n \"Категория объявления/уведомления.\",\n);\nexport const announcementCategoryFieldDocs = mapFieldDocsToStrings(announcementCategoryFieldDocEntries);\n\nexport const announcementPriorityFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementPriority\",\n \"Приоритет объявления.\",\n);\nexport const announcementPriorityFieldDocs = mapFieldDocsToStrings(announcementPriorityFieldDocEntries);\n\nexport const announcementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementType\",\n \"Тип объявления (доменное событие, которое вызвало нотификацию).\",\n);\nexport const announcementTypeFieldDocs = mapFieldDocsToStrings(announcementTypeFieldDocEntries);\n\nexport const anyoneAccessFieldDocEntries = createEnumFieldDocEntries(\n \"AnyoneAccess\",\n \"Уровень доступа для «любого пользователя».\",\n);\nexport const anyoneAccessFieldDocs = mapFieldDocsToStrings(anyoneAccessFieldDocEntries);\n\nexport const archiveStateFieldDocEntries = createEnumFieldDocEntries(\n \"ArchiveState\",\n \"Состояние архивации объекта.\",\n);\nexport const archiveStateFieldDocs = mapFieldDocsToStrings(archiveStateFieldDocEntries);\n\nexport const availabilityTimeFieldDocEntries = createEnumFieldDocEntries(\n \"AvailabilityTime\",\n \"Доступность слота времени.\",\n);\nexport const availabilityTimeFieldDocs = mapFieldDocsToStrings(availabilityTimeFieldDocEntries);\n\nexport const availableResourcesFieldDocEntries = createEnumFieldDocEntries(\n \"AvailableResources\",\n \"Доступность ресурса в периоде.\",\n);\nexport const availableResourcesFieldDocs = mapFieldDocsToStrings(availableResourcesFieldDocEntries);\n\nexport const caseParticipantStateFieldDocEntries = createEnumFieldDocEntries(\n \"CaseParticipantState\",\n \"Состояние участника кейса.\",\n);\nexport const caseParticipantStateFieldDocs = mapFieldDocsToStrings(caseParticipantStateFieldDocEntries);\n\nexport const caseParticipantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseParticipantType\",\n \"Роль участника в кейсе.\",\n);\nexport const caseParticipantTypeFieldDocs = mapFieldDocsToStrings(caseParticipantTypeFieldDocEntries);\n\nexport const caseStateFieldDocEntries = createEnumFieldDocEntries(\n \"CaseState\",\n \"Жизненный цикл события/кейса.\",\n);\nexport const caseStateFieldDocs = mapFieldDocsToStrings(caseStateFieldDocEntries);\n\nexport const caseTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseType\",\n \"Тип кейса по времени/формату отображения.\",\n);\nexport const caseTypeFieldDocs = mapFieldDocsToStrings(caseTypeFieldDocEntries);\n\nexport const deleteStateFieldDocEntries = createEnumFieldDocEntries(\n \"DeleteState\",\n \"Состояние удаления объекта.\",\n);\nexport const deleteStateFieldDocs = mapFieldDocsToStrings(deleteStateFieldDocEntries);\n\nexport const deliveryChannelFieldDocEntries = createEnumFieldDocEntries(\n \"DeliveryChannel\",\n \"Канал доставки уведомлений.\",\n);\nexport const deliveryChannelFieldDocs = mapFieldDocsToStrings(deliveryChannelFieldDocEntries);\n\nexport const deliveryStrategyFieldDocEntries = createEnumFieldDocEntries(\n \"DeliveryStrategy\",\n \"Стратегия доставки уведомления по каналам.\",\n);\nexport const deliveryStrategyFieldDocs = mapFieldDocsToStrings(deliveryStrategyFieldDocEntries);\n\nexport const genderFieldDocEntries = createEnumFieldDocEntries(\n \"Gender\",\n \"Пол контакта/пользователя.\",\n);\nexport const genderFieldDocs = mapFieldDocsToStrings(genderFieldDocEntries);\n\nexport const imagePreviewSizeFieldDocEntries = createEnumFieldDocEntries(\n \"ImagePreviewSize\",\n \"Размер превью изображения в UI.\",\n);\nexport const imagePreviewSizeFieldDocs = mapFieldDocsToStrings(imagePreviewSizeFieldDocEntries);\n\nexport const noteTypeFieldDocEntries = createEnumFieldDocEntries(\n \"NoteType\",\n \"Тип содержимого заметки. Поддерживаемые сценарии: Html и Markdown; остальные значения — совместимость с серверным контрактом.\",\n);\nexport const noteTypeFieldDocs = mapFieldDocsToStrings(noteTypeFieldDocEntries);\n\nexport const linkTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LinkType\",\n \"Тип связи parent↔child в `ItemLink` (User / Pinned). Флоу: `docs/agents/relations-flow.md`.\",\n);\nexport const linkTypeFieldDocs = mapFieldDocsToStrings(linkTypeFieldDocEntries);\n\nexport const participationFieldRequirementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldRequirementType\",\n \"Требование к полю участника (`OptionalField`/`RequiredField`).\",\n);\nexport const participationFieldRequirementTypeFieldDocs = mapFieldDocsToStrings(\n participationFieldRequirementTypeFieldDocEntries,\n);\n\nexport const participationFieldTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldType\",\n \"Тип поля анкеты/контактных данных участника.\",\n);\nexport const participationFieldTypeFieldDocs = mapFieldDocsToStrings(participationFieldTypeFieldDocEntries);\n\nexport const paymentProviderTypeFieldDocEntries = createEnumFieldDocEntries(\n \"PaymentProviderType\",\n \"Провайдер оплаты для билета/заказа.\",\n);\nexport const paymentProviderTypeFieldDocs = mapFieldDocsToStrings(paymentProviderTypeFieldDocEntries);\n\nexport const profileTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileType\",\n \"Роль контакта как профиля пользователя.\",\n);\nexport const profileTypeFieldDocs = mapFieldDocsToStrings(profileTypeFieldDocEntries);\n\nexport const profileUserAvailabilityFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileUserAvailability\",\n \"Доступность профиля/пользователя в расписании.\",\n);\nexport const profileUserAvailabilityFieldDocs = mapFieldDocsToStrings(profileUserAvailabilityFieldDocEntries);\n\nexport const reminderLocationDirectionFieldDocEntries = createEnumFieldDocEntries(\n \"ReminderLocationDirection\",\n \"Направление гео-триггера напоминания (вход/выход).\",\n);\nexport const reminderLocationDirectionFieldDocs = mapFieldDocsToStrings(reminderLocationDirectionFieldDocEntries);\n\nexport const reportDeliveryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ReportDeliveryType\",\n \"Способ доставки отчета.\",\n);\nexport const reportDeliveryTypeFieldDocs = mapFieldDocsToStrings(reportDeliveryTypeFieldDocEntries);\n\nexport const showCaseInTimetableTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ShowCaseInTimetableType\",\n \"Режим показа события в расписании.\",\n);\nexport const showCaseInTimetableTypeFieldDocs = mapFieldDocsToStrings(showCaseInTimetableTypeFieldDocEntries);\n\nexport const timetableDetailsVisibilityFieldDocEntries = createEnumFieldDocEntries(\n \"TimetableDetailsVisibility\",\n \"Глубина деталей в `getTimetable` query `visibility` и в ответе `TimetableCase.detailsVisibility`: `Time` — интервалы, `View` — полные события/заказы.\",\n);\nexport const timetableDetailsVisibilityFieldDocs = mapFieldDocsToStrings(timetableDetailsVisibilityFieldDocEntries);\n\nexport const ticketStateFieldDocEntries = createEnumFieldDocEntries(\n \"TicketState\",\n \"Состояние билета/оплаты.\",\n);\nexport const ticketStateFieldDocs = mapFieldDocsToStrings(ticketStateFieldDocEntries);\n\nexport const ticketPaymentConfirmationSourceFieldDocEntries = createEnumFieldDocEntries(\n \"TicketPaymentConfirmationSource\",\n \"Источник подтверждения оплаты билета (`PaymentLink`, `Manager`, …).\",\n);\nexport const ticketPaymentConfirmationSourceFieldDocs = mapFieldDocsToStrings(\n ticketPaymentConfirmationSourceFieldDocEntries,\n);\n\nexport const usageTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageType\",\n \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n);\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageConditionType\",\n \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n);\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const sessionDurationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionDurationType\",\n \"Тип длительности сессии услуги (`SessionDurationProperties.sessionDurationType`). В JSON — строковый литерал OpenAPI.\",\n);\nexport const sessionDurationTypeFieldDocs = mapFieldDocsToStrings(sessionDurationTypeFieldDocEntries);\n\nexport const timeSelectionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TimeSelectionType\",\n \"Кто выбирает время сессии (`Consumer` / `Executor`). В JSON — строка OpenAPI.\",\n);\nexport const timeSelectionTypeFieldDocs = mapFieldDocsToStrings(timeSelectionTypeFieldDocEntries);\n\nexport const stateManagementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"StateManagementType\",\n \"Режим управления состоянием сессии (`Auto` / `Manual`). В JSON — строка OpenAPI.\",\n);\nexport const stateManagementTypeFieldDocs = mapFieldDocsToStrings(stateManagementTypeFieldDocEntries);\n\nexport const sessionPrecisionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionPrecisionType\",\n \"Точность сессии (`DateTime` / `Date`). В JSON — строка OpenAPI.\",\n);\nexport const sessionPrecisionTypeFieldDocs = mapFieldDocsToStrings(sessionPrecisionTypeFieldDocEntries);\n\nexport const userAccessLevelFieldDocEntries = createEnumFieldDocEntries(\n \"UserAccessLevel\",\n \"Уровень доступа для check-in/записи (`Authenticated` / `Unauthenticated`). В JSON — строка OpenAPI.\",\n);\nexport const userAccessLevelFieldDocs = mapFieldDocsToStrings(userAccessLevelFieldDocEntries);\n\nexport const loyaltyCardIssueTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardIssueType\",\n \"Способ выпуска карты лояльности (`Manual` / `AutoActive` / `AutoIssued`). В JSON — строка OpenAPI.\",\n);\nexport const loyaltyCardIssueTypeFieldDocs = mapFieldDocsToStrings(loyaltyCardIssueTypeFieldDocEntries);\n\nexport const loyaltyCardUpdateKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateKeyInformation\",\n \"Правило обновления ключевых полей карты. В JSON — строка OpenAPI (`NonKeyDisallowed`, …).\",\n);\nexport const loyaltyCardUpdateKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n);\n\nexport const loyaltyCardUpdateNonKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateNonKeyInformation\",\n \"Правило обновления non-key полей карты. В JSON — строка OpenAPI (`KeyDisallowed`, `KeyAllowed`).\",\n);\nexport const loyaltyCardUpdateNonKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n);\n","import { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowIdHelperFieldDocEntries = {\n getTorrowObjectTypeFromTorrowId: {\n description:\n \"Строго проверяет Torrow ID и возвращает известный SDK `TorrowObjectType` из числового кода ID.\",\n valueSchema: \"string → TorrowObjectType\",\n usage:\n \"Неизвестный numeric code даёт `TorrowIdError` с reason `unknown-object-type-code`; SDK не угадывает соответствие по порядку OpenAPI enum.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemTypeHelperFieldDocEntries = {\n getTorrowItemTypeFromTorrowId: {\n description: \"Возвращает `TorrowItemType`, закодированный в одном каноническом Torrow ID.\",\n valueSchema: \"string → TorrowItemType\",\n usage: \"Известные non-item типы (`User`, `File`) дают `unsupported-item-type`.\",\n },\n getTorrowItemTypeFromTorrowIds: {\n description: \"Возвращает общий `TorrowItemType` непустого однотипного списка Torrow ID.\",\n valueSchema: \"readonly string[] → TorrowItemType\",\n usage: \"Пустой список и смешанные item types дают типизированный `TorrowIdError`.\",\n },\n isTorrowItemType: {\n description: \"Runtime guard для внешней строки с семантическим item type (`Note`, `Contact`, ...).\",\n valueSchema: \"string → boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowIdHelperFieldDocs = mapFieldDocsToStrings(torrowIdHelperFieldDocEntries);\nexport const torrowItemTypeHelperFieldDocs = mapFieldDocsToStrings(\n torrowItemTypeHelperFieldDocEntries,\n);\n","/**\n * Каталоги операций (**TorrowItemCoreFacade**, ActionHistory, Accounting, Announcement, ExportImport, Report, Loyalty*, BlockReason, Contacts communication) для {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n generateSecurityTokenReqFieldDocEntries,\n generateSecurityTokenRespFieldDocEntries,\n getShareItemSessionReqFieldDocEntries,\n participationFieldDocEntries,\n participationRespFieldDocEntries,\n profileWithErrorFieldDocEntries,\n sendLinkOfItemReqFieldDocEntries,\n sendLinkOfItemRespFieldDocEntries,\n shareItemReqFieldDocEntries,\n} from \"./loyalty-access-field-docs.js\";\nimport {\n accountingTransactionFieldDocEntries,\n actionHistoryInfoFieldDocEntries,\n actionHistoryListQueryFieldDocEntries,\n announcementInfoFieldDocEntries,\n announcementsListQueryFieldDocEntries,\n balanceValueFieldDocEntries,\n exportRequestFieldDocEntries,\n exportGraphFieldDocEntries,\n generateReportReqFieldDocEntries,\n generateReportRespFieldDocEntries,\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n getParticipationCountRespFieldDocEntries,\n fileInfoFieldDocEntries,\n putUrlRespFieldDocEntries,\n updateFileIdRespFieldDocEntries,\n importByFileRequestFieldDocEntries,\n importByUniqueNameRequestFieldDocEntries,\n loyaltyCardSubscriptionFieldDocEntries,\n createLoyaltyCardReqFieldDocEntries,\n initialTransactionFieldDocEntries,\n loyaltySystemsStatisticsReqFieldDocEntries,\n loyaltySystemsStatisticsRespFieldDocEntries,\n reportPropertiesFieldDocEntries,\n reportOptionsFieldDocEntries,\n torrowErrorClientFieldDocEntries,\n transactionInfoFieldDocEntries,\n updateAnnouncementStateReqFieldDocEntries,\n} from \"./operations-struct-field-docs.js\";\nimport {\n blockReasonFieldDocEntries,\n blockReasonsSdkMethodFieldDocEntries,\n} from \"./block-reason-field-docs.js\";\nimport {\n apiKeyInfoFieldDocEntries,\n apiKeysSdkMethodFieldDocEntries,\n createApiKeyRequestFieldDocEntries,\n createApiKeyResponseFieldDocEntries,\n} from \"./api-keys-field-docs.js\";\nimport {\n contactsCommunicationSdkMethodFieldDocEntries,\n sendCommunicationCodeReqFieldDocEntries,\n sendCommunicationCodeRespFieldDocEntries,\n verifyCommunicationCodeReqFieldDocEntries,\n verifyCommunicationCodeRespFieldDocEntries,\n} from \"./contact-communication-field-docs.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\nimport {\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n torrowItemFacadeSdkMethodFieldDocEntries,\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n} from \"./item-social-facet-field-docs.js\";\nimport {\n resourceBehaviorSettingsFieldDocEntries,\n resourceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagParamsFieldDocEntries,\n} from \"./implicit-tag-params-field-docs.js\";\nimport {\n actionHistorySdkMethodFieldDocEntries,\n accountingTransactionsSdkMethodFieldDocEntries,\n announcementsSdkMethodFieldDocEntries,\n exportImportSdkMethodFieldDocEntries,\n loyaltyCardsSdkMethodFieldDocEntries,\n loyaltySystemsSdkMethodFieldDocEntries,\n reportsSdkMethodFieldDocEntries,\n userSdkMethodFieldDocEntries,\n userSettingsSdkMethodFieldDocEntries,\n} from \"./operations-field-docs.js\";\nimport {\n blockInfoFieldDocEntries,\n blockSettingsFieldDocEntries,\n deviceSettingsInfoFieldDocEntries,\n filterFieldDocEntries,\n layoutTypeValuesFieldDocEntries,\n metricsFieldDocEntries,\n notificationPropertiesFieldDocEntries,\n personalSolutionDataFieldDocEntries,\n solutionDataFieldDocEntries,\n userDeliveryWayFieldDocEntries,\n usageConditionFieldDocEntries,\n userSettingsInfoFieldDocEntries,\n viewBlockSettingsFieldDocEntries,\n} from \"./solution-user-settings-field-docs.js\";\nimport {\n accountTypeFieldDocEntries,\n accountingTransactionTypeFieldDocEntries,\n accountingTransactionStateFieldDocEntries,\n actionHistoryStateFieldDocEntries,\n actionHistoryTypeFieldDocEntries,\n advisedItemTypeFieldDocEntries,\n tokenStatusFieldDocEntries,\n verificationMethodFieldDocEntries,\n announcementCategoryFieldDocEntries,\n announcementPriorityFieldDocEntries,\n announcementStateFieldDocEntries,\n announcementTypeFieldDocEntries,\n anyoneAccessFieldDocEntries,\n archiveStateFieldDocEntries,\n availabilityTimeFieldDocEntries,\n availableResourcesFieldDocEntries,\n caseParticipantStateFieldDocEntries,\n caseParticipantTypeFieldDocEntries,\n caseStateFieldDocEntries,\n caseTypeFieldDocEntries,\n communicationTypeFieldDocEntries,\n deleteStateFieldDocEntries,\n deliveryChannelFieldDocEntries,\n deliveryStrategyFieldDocEntries,\n genderFieldDocEntries,\n imagePreviewSizeFieldDocEntries,\n itemSortConditionFieldDocEntries,\n itemViewSortConditionFieldDocEntries,\n noteTypeFieldDocEntries,\n objectSortConditionFieldDocEntries,\n operationTypeFieldDocEntries,\n participantStateFieldDocEntries,\n participantTypeFieldDocEntries,\n participationFieldRequirementTypeFieldDocEntries,\n participationFieldTypeFieldDocEntries,\n paymentProviderTypeFieldDocEntries,\n profileTypeFieldDocEntries,\n profileUserAvailabilityFieldDocEntries,\n reminderLocationDirectionFieldDocEntries,\n reportDeliveryTypeFieldDocEntries,\n showCaseInTimetableTypeFieldDocEntries,\n timetableDetailsVisibilityFieldDocEntries,\n ticketStateFieldDocEntries,\n ticketPaymentConfirmationSourceFieldDocEntries,\n torrowObjectTypeFieldDocEntries,\n usageConditionTypeFieldDocEntries as usageConditionTypeEnumFieldDocEntries,\n usageTypeFieldDocEntries as usageTypeEnumFieldDocEntries,\n sessionDurationTypeFieldDocEntries,\n timeSelectionTypeFieldDocEntries,\n stateManagementTypeFieldDocEntries,\n sessionPrecisionTypeFieldDocEntries,\n userAccessLevelFieldDocEntries,\n loyaltyCardIssueTypeFieldDocEntries,\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n} from \"./shared-enum-field-docs.js\";\nimport { timetableViewTypeValuesFieldDocEntries } from \"./calendar-item.js\";\nimport { contextIconPresetValuesFieldDocEntries } from \"./context-item.js\";\nimport {\n torrowIdHelperFieldDocEntries,\n torrowItemTypeHelperFieldDocEntries,\n} from \"./torrow-id-field-docs.js\";\n\nexport const mcpOperationsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowIdHelpers: { ...torrowIdHelperFieldDocEntries },\n TorrowItemTypeHelpers: { ...torrowItemTypeHelperFieldDocEntries },\n /** Общие методы {@link TorrowItemCoreFacade} — один источник правды; **Loyalty*SdkMethods** подмешивают подмножество + доменные методы. */\n TorrowItemCoreFacadeSdkMethods: { ...torrowItemCoreFacadeSdkMethodFieldDocEntries },\n /** {@link TorrowItemFacade} без photo: **cases**, **notes**, **services**, **calendars**, **contexts**, **resourceItems** (+ **contacts** кроме photo). Отдельно: booking/search/CRUD в других каталогах. */\n TorrowItemFacadeSdkMethods: { ...torrowItemFacadeSdkMethodFieldDocEntries },\n /** Как **Base**, плюс **`getPhotoInfo`/`getPhotoPutUrl`** — item-слой **`client.contacts`**. */\n TorrowItemFacadeContactsItemSdkMethods: { ...torrowItemFacadeContactsItemSdkMethodFieldDocEntries },\n /** Query `cascade` / `withPinnedItems` для `client.*.delete` (contacts, notes, cases, …). */\n ItemDeleteQuery: { ...itemDeleteQueryFieldDocEntries },\n /** Явный контракт неявных параметров из service.tags (формат `<value>:Suffix`). */\n ServiceImplicitTagParams: { ...serviceImplicitTagParamsFieldDocEntries },\n /** Утилиты SDK для парсинга параметров из service tags. */\n ServiceImplicitTagMethods: { ...serviceImplicitTagMethodsFieldDocEntries },\n /** Явный контракт managed параметров из resource.tags (`MarginTime`, `lockId`). */\n ResourceBehaviorSettings: { ...resourceBehaviorSettingsFieldDocEntries },\n /** Утилиты SDK для парсинга/merge managed resource tags. */\n ResourceImplicitTagMethods: { ...resourceImplicitTagMethodsFieldDocEntries },\n ActionHistorySdkMethods: { ...actionHistorySdkMethodFieldDocEntries },\n ActionHistoryListQuery: { ...actionHistoryListQueryFieldDocEntries },\n AccountingTransactionsSdkMethods: { ...accountingTransactionsSdkMethodFieldDocEntries },\n AnnouncementsSdkMethods: { ...announcementsSdkMethodFieldDocEntries },\n AnnouncementsListQuery: { ...announcementsListQueryFieldDocEntries },\n ExportImportSdkMethods: { ...exportImportSdkMethodFieldDocEntries },\n ReportsSdkMethods: { ...reportsSdkMethodFieldDocEntries },\n LoyaltySystemsSdkMethods: { ...loyaltySystemsSdkMethodFieldDocEntries },\n LoyaltyCardsSdkMethods: { ...loyaltyCardsSdkMethodFieldDocEntries },\n UserSdkMethods: { ...userSdkMethodFieldDocEntries },\n UserSettingsSdkMethods: { ...userSettingsSdkMethodFieldDocEntries },\n BlockReasonsSdkMethods: { ...blockReasonsSdkMethodFieldDocEntries },\n ContactsCommunicationSdkMethods: { ...contactsCommunicationSdkMethodFieldDocEntries },\n BlockReason: { ...blockReasonFieldDocEntries },\n ApiKeysSdkMethods: { ...apiKeysSdkMethodFieldDocEntries },\n ApiKeyInfo: { ...apiKeyInfoFieldDocEntries },\n CreateApiKeyRequest: { ...createApiKeyRequestFieldDocEntries },\n CreateApiKeyResponse: { ...createApiKeyResponseFieldDocEntries },\n SendCommunicationCodeReq: { ...sendCommunicationCodeReqFieldDocEntries },\n SendCommunicationCodeResp: { ...sendCommunicationCodeRespFieldDocEntries },\n VerifyCommunicationCodeReq: { ...verifyCommunicationCodeReqFieldDocEntries },\n VerifyCommunicationCodeResp: { ...verifyCommunicationCodeRespFieldDocEntries },\n GenerateSecurityTokenReq: { ...generateSecurityTokenReqFieldDocEntries },\n GenerateSecurityTokenResp: { ...generateSecurityTokenRespFieldDocEntries },\n ShareItemReq: { ...shareItemReqFieldDocEntries },\n GetShareItemSessionReq: { ...getShareItemSessionReqFieldDocEntries },\n SendLinkOfItemReq: { ...sendLinkOfItemReqFieldDocEntries },\n SendLinkOfItemResp: { ...sendLinkOfItemRespFieldDocEntries },\n Participation: { ...participationFieldDocEntries },\n ProfileWithError: { ...profileWithErrorFieldDocEntries },\n ParticipationResp: { ...participationRespFieldDocEntries },\n AccountingTransaction: { ...accountingTransactionFieldDocEntries },\n BalanceValue: { ...balanceValueFieldDocEntries },\n ActionHistoryInfo: { ...actionHistoryInfoFieldDocEntries },\n AnnouncementInfo: { ...announcementInfoFieldDocEntries },\n UpdateAnnouncementStateReq: { ...updateAnnouncementStateReqFieldDocEntries },\n ExportRequest: { ...exportRequestFieldDocEntries },\n ExportGraph: { ...exportGraphFieldDocEntries },\n ImportByFileRequest: { ...importByFileRequestFieldDocEntries },\n ImportByUniqueNameRequest: { ...importByUniqueNameRequestFieldDocEntries },\n GenerateReportReq: { ...generateReportReqFieldDocEntries },\n ReportOptions: { ...reportOptionsFieldDocEntries },\n ReportProperties: { ...reportPropertiesFieldDocEntries },\n GenerateReportResp: { ...generateReportRespFieldDocEntries },\n LoyaltyCardSubscription: { ...loyaltyCardSubscriptionFieldDocEntries },\n CreateLoyaltyCardReq: { ...createLoyaltyCardReqFieldDocEntries },\n InitialTransaction: { ...initialTransactionFieldDocEntries },\n LoyaltySystemsStatisticsReq: { ...loyaltySystemsStatisticsReqFieldDocEntries },\n LoyaltySystemsStatisticsResp: { ...loyaltySystemsStatisticsRespFieldDocEntries },\n GetLoyaltySystemsStatisticsReq: { ...getLoyaltySystemsStatisticsReqFieldDocEntries },\n GetLoyaltySystemsStatisticsResp: { ...getLoyaltySystemsStatisticsRespFieldDocEntries },\n GetParticipationCountResp: { ...getParticipationCountRespFieldDocEntries },\n FileInfo: { ...fileInfoFieldDocEntries },\n PutUrlResp: { ...putUrlRespFieldDocEntries },\n UpdateFileIdResp: { ...updateFileIdRespFieldDocEntries },\n TransactionInfo: { ...transactionInfoFieldDocEntries },\n TorrowErrorClient: { ...torrowErrorClientFieldDocEntries },\n ActionHistoryType: { ...actionHistoryTypeFieldDocEntries },\n ActionHistoryState: { ...actionHistoryStateFieldDocEntries },\n AnnouncementState: { ...announcementStateFieldDocEntries },\n ItemViewSortCondition: { ...itemViewSortConditionFieldDocEntries },\n ParticipantType: { ...participantTypeFieldDocEntries },\n ParticipantState: { ...participantStateFieldDocEntries },\n AccountingTransactionState: { ...accountingTransactionStateFieldDocEntries },\n AccountingTransactionType: { ...accountingTransactionTypeFieldDocEntries },\n OperationType: { ...operationTypeFieldDocEntries },\n TorrowObjectType: { ...torrowObjectTypeFieldDocEntries },\n ItemSortCondition: { ...itemSortConditionFieldDocEntries },\n ObjectSortCondition: { ...objectSortConditionFieldDocEntries },\n AccountType: { ...accountTypeFieldDocEntries },\n AdvisedItemType: { ...advisedItemTypeFieldDocEntries },\n VerificationMethod: { ...verificationMethodFieldDocEntries },\n TokenStatus: { ...tokenStatusFieldDocEntries },\n CommunicationType: { ...communicationTypeFieldDocEntries },\n AnnouncementCategory: { ...announcementCategoryFieldDocEntries },\n AnnouncementPriority: { ...announcementPriorityFieldDocEntries },\n AnnouncementType: { ...announcementTypeFieldDocEntries },\n AnyoneAccess: { ...anyoneAccessFieldDocEntries },\n ArchiveState: { ...archiveStateFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n AvailableResources: { ...availableResourcesFieldDocEntries },\n CaseParticipantState: { ...caseParticipantStateFieldDocEntries },\n CaseParticipantType: { ...caseParticipantTypeFieldDocEntries },\n CaseState: { ...caseStateFieldDocEntries },\n CaseType: { ...caseTypeFieldDocEntries },\n DeleteState: { ...deleteStateFieldDocEntries },\n DeliveryChannel: { ...deliveryChannelFieldDocEntries },\n DeliveryStrategy: { ...deliveryStrategyFieldDocEntries },\n Gender: { ...genderFieldDocEntries },\n ImagePreviewSize: { ...imagePreviewSizeFieldDocEntries },\n NoteType: { ...noteTypeFieldDocEntries },\n ParticipationFieldRequirementType: { ...participationFieldRequirementTypeFieldDocEntries },\n ParticipationFieldType: { ...participationFieldTypeFieldDocEntries },\n PaymentProviderType: { ...paymentProviderTypeFieldDocEntries },\n ProfileType: { ...profileTypeFieldDocEntries },\n ProfileUserAvailability: { ...profileUserAvailabilityFieldDocEntries },\n ReminderLocationDirection: { ...reminderLocationDirectionFieldDocEntries },\n ReportDeliveryType: { ...reportDeliveryTypeFieldDocEntries },\n ShowCaseInTimetableType: { ...showCaseInTimetableTypeFieldDocEntries },\n TimetableDetailsVisibility: { ...timetableDetailsVisibilityFieldDocEntries },\n TicketState: { ...ticketStateFieldDocEntries },\n TicketPaymentConfirmationSource: { ...ticketPaymentConfirmationSourceFieldDocEntries },\n UserSettingsInfo: { ...userSettingsInfoFieldDocEntries },\n SolutionData: { ...solutionDataFieldDocEntries },\n LayoutTypeValues: { ...layoutTypeValuesFieldDocEntries },\n TimetableViewTypeValues: { ...timetableViewTypeValuesFieldDocEntries },\n ContextIconPresetValues: { ...contextIconPresetValuesFieldDocEntries },\n BlockInfo: { ...blockInfoFieldDocEntries },\n UsageCondition: { ...usageConditionFieldDocEntries },\n UsageType: { ...usageTypeEnumFieldDocEntries },\n UsageConditionType: { ...usageConditionTypeEnumFieldDocEntries },\n SessionDurationType: { ...sessionDurationTypeFieldDocEntries },\n TimeSelectionType: { ...timeSelectionTypeFieldDocEntries },\n StateManagementType: { ...stateManagementTypeFieldDocEntries },\n SessionPrecisionType: { ...sessionPrecisionTypeFieldDocEntries },\n UserAccessLevel: { ...userAccessLevelFieldDocEntries },\n LoyaltyCardIssueType: { ...loyaltyCardIssueTypeFieldDocEntries },\n LoyaltyCardUpdateKeyInformation: { ...loyaltyCardUpdateKeyInformationFieldDocEntries },\n LoyaltyCardUpdateNonKeyInformation: { ...loyaltyCardUpdateNonKeyInformationFieldDocEntries },\n ViewBlockSettings: { ...viewBlockSettingsFieldDocEntries },\n BlockSettings: { ...blockSettingsFieldDocEntries },\n Filter: { ...filterFieldDocEntries },\n Metrics: { ...metricsFieldDocEntries },\n PersonalSolutionData: { ...personalSolutionDataFieldDocEntries },\n NotificationProperties: { ...notificationPropertiesFieldDocEntries },\n UserDeliveryWay: { ...userDeliveryWayFieldDocEntries },\n DeviceSettingsInfo: { ...deviceSettingsInfoFieldDocEntries },\n};\n","/**\n * Профили пользователя (**User** `/api/v1/user/profiles`): ответы и методы класса `Profiles`.\n * Сам Профиль в данных — `ContactItem`; смысл `profileType` см. в `contactItemFieldDocEntries.profileType`.\n * Тело **`POST /api/v1/user/profiles`** в типах SDK — **`UserProfileItemForAdd`**.\n */\n// MCP method descriptions: write-prep by effects only; do not name the internal\n// profile write-defaults helper (not a public package export). Helper symbol stays\n// intentional in docs/sdk-maintenance-guide.md and facade @link JSDoc.\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const profilesSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/user/profiles`. Разворачивает ответ **`ProfileListResp`**: возвращает **`ContactItem[]`** (Профили текущего пользователя; не общий CRUD `/api/v1/contacts`). Пустой массив, если **`profileList`** отсутствует или **`null`**. Требуется Bearer пользователя.\",\n valueSchema: \"→ ContactItem[]\",\n },\n add: {\n description:\n \"`POST /api/v1/user/profiles`. Тело: **`UserProfileItemForAdd`** (поля контакта для write из **`ContactItemForCreateOrUpdate`** плюс **`profileType`**, **`profileProperties`**, **`hasTimetable`**). OpenAPI ссылается на **`ContactItem`**. Фасад разворачивает **`AddProfileResp.profile`** и возвращает **`ContactItem`**. Мутация учётки: создаёт Профиль; не путать с CRUD `/api/v1/contacts`. Перед POST фасад добивает `discriminator` / `publicityType` / non-empty `name` и contact write normalizations including `visitCard`.\",\n valueSchema: \"UserProfileItemForAdd → ContactItem\",\n },\n addByContactId: {\n description:\n \"`PUT /api/v1/user/profiles`. Тело в OpenAPI — **строка** (JSON-строка): `torrow id` уже существующего контакта, который нужно зарегистрировать как Профиль. Фасад возвращает **`ContactItem`** (`AddProfileResp.profile`). Не путать с `PUT` обновления обычного контакта по `/api/v1/contacts/{id}`.\",\n valueSchema: \"string (contactId) → ContactItem\",\n usage: \"Передай строку id существующего контакта; SDK сериализует её как JSON string.\",\n },\n updateProfileProperties: {\n description:\n \"`PUT /api/v1/user/profiles/{profileId}/profileproperties`. Тело: **`ProfileProperties`** (цвет карточки, доступность, заметка). Фасад возвращает **`torrowObject`** из ответа (если сервер его прислал), иначе `undefined`.\",\n valueSchema: \"ProfileProperties → TorrowObject | undefined\",\n },\n remove: {\n description:\n \"`DELETE /api/v1/user/profiles/{profileId}`. Удалить Профиль по id контакта. Фасад возвращает актуальный **`personalContactList`** как **`ContactItem[]`**. Не удаляй последний Профиль учётки и Профиль с живыми personal-link (как в apps).\",\n valueSchema: \"→ ContactItem[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileListRespFieldDocEntries = {\n profileList: {\n description:\n \"Массив контактов — **Профили** пользователя (`ContactItem`, ожидаемо с `profileType` вроде `MyProfile`). Пустой или отсутствует, если профилей нет.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const addProfileRespFieldDocEntries = {\n profile: {\n description: \"Созданный или связанный **Профиль** после операции добавления.\",\n valueSchema: \"ContactItem\",\n },\n personalContactList: {\n description: \"Устаревшее поле в схеме OpenAPI; предпочитай `profile` и актуальный список через `list`.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const removeProfileRespFieldDocEntries = {\n personalContactList: {\n description:\n \"Список контактов-Профилей после удаления (в том числе пустой), в форме ответа сервера на эту операцию.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateProfilePropertiesRespFieldDocEntries = {\n torrowObject: {\n description: \"Обёртка сервера над обновлённым объектом после смены свойств профиля (если вернулась).\",\n valueSchema: \"TorrowObject\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля тела `PUT .../profileproperties` — те же `ProfileProperties`, что у `ContactItem.profileProperties`. */\nexport const profilePropertiesFieldDocEntries = {\n id: {\n description: \"Идентификатор сущности свойств профиля (если задан в API).\",\n valueSchema: \"string | null\",\n },\n profileUserAvailability: {\n description: \"Доступность владельца профиля для отображения (занят, свободен, скрыт и т.д.).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: {\n description: \"Текстовая заметка к доступности.\",\n valueSchema: \"string | null\",\n },\n color: {\n description: \"Цвет акцента карточки Профиля в UI (часто hex).\",\n valueSchema: \"string | null\",\n examples: [\"#4a90d9\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilesSdkMethodFieldDocs = mapFieldDocsToStrings(profilesSdkMethodFieldDocEntries);\nexport const profileListRespFieldDocs = mapFieldDocsToStrings(profileListRespFieldDocEntries);\nexport const addProfileRespFieldDocs = mapFieldDocsToStrings(addProfileRespFieldDocEntries);\nexport const removeProfileRespFieldDocs = mapFieldDocsToStrings(removeProfileRespFieldDocEntries);\nexport const updateProfilePropertiesRespFieldDocs = mapFieldDocsToStrings(\n updateProfilePropertiesRespFieldDocEntries,\n);\nexport const profilePropertiesFieldDocs = mapFieldDocsToStrings(profilePropertiesFieldDocEntries);\n","/**\n * Каталог **Профилей пользователя** (User API) для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n addProfileRespFieldDocEntries,\n profileListRespFieldDocEntries,\n profilePropertiesFieldDocEntries,\n profilesSdkMethodFieldDocEntries,\n removeProfileRespFieldDocEntries,\n updateProfilePropertiesRespFieldDocEntries,\n} from \"./user-profiles-field-docs.js\";\n\nexport const mcpUserProfilesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ProfilesSdkMethods: { ...profilesSdkMethodFieldDocEntries },\n ProfileListResp: { ...profileListRespFieldDocEntries },\n AddProfileResp: { ...addProfileRespFieldDocEntries },\n RemoveProfileResp: { ...removeProfileRespFieldDocEntries },\n UpdateProfilePropertiesResp: { ...updateProfilePropertiesRespFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n};\n","/**\n * Описания **представлений (views)** и тел запросов для MCP / агентов.\n * REST: `/api/v1/{domain}/.../views/...`; public SDK скрывает domain и выводит его из child ID, когда это возможно.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.user.listForParent`: `GET /api/v1/{domain}/{parentId}/views/user`. Список пользовательских представлений дочерних элементов под родителем (mind map). Query: `tags`, `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`. Ответ: массив `*View` по домену (`ContactView`, `NoteView`, …).\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.user.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/user`. Прямое создание User view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.saveToMindMap`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: массив **`ViewInfo`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n listAll: {\n description:\n \"`client.views.user.listAll`: `GET /api/v1/{domain}/views/user`. Все пользовательские представления по типу элемента без фильтра по одному `parentId`. Query: `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`.\",\n valueSchema: \"TorrowItemType + ViewListRootQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n get: {\n description:\n \"`client.views.user.get`: `GET /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.user.delete`: `DELETE /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`** (`DeleteResponse.deleteCount`).\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.user.updateOrder(parentId, orderedViews)`: `POST .../views/user/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const pinnedViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.pinned.listForParent`: `GET /api/v1/{domain}/{parentId}/views/pinned`. Список закреплённых; query как у `client.views.user.listForParent`.\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.pinned.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/pinned`. Прямое создание Pinned view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.includeToParent`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n get: {\n description:\n \"`client.views.pinned.get`: `GET .../views/pinned/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.pinned.delete`: `DELETE .../views/pinned/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`**.\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.pinned.updateOrder(parentId, orderedViews)`: `POST .../views/pinned/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocEntries = {\n pin: {\n description:\n \"`client.views.pin`: `POST .../views/user/{childId}/pin`. Query `alias`. Ответ: `ObjectInfo`. Конвертация **User → Pinned** (`LinkType`).\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`. Это переход User → Pinned, а не первоначальное создание связи. Для доменного создания используй `client.relations.saveToMindMap` / `includeToParent`; для списков и порядка — `client.views.*`. Связи: `docs/agents/relations-flow.md`.\",\n },\n unpin: {\n description:\n \"`client.views.unpin`: `POST .../unpin`. Для домена **`contacts`** путь: `.../views/pinned/{childId}/unpin`; для остальных (`notes`, `contexts`, `resources`, `services`, `cases`, `calendars`): `.../views/user/{childId}/unpin`. Query `alias`. Ответ: `ObjectInfo`. **Pinned → User**.\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`; затем выбирает сегмент `user` или `pinned`. Это переход Pinned → User, не замена `relations.exclude*`; не дублируется на `RelationsFacade`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createViewListReqFieldDocEntries = {\n childIdList: {\n description: \"Список id дочерних элементов, для которых создаются представления под выбранным родителем. В SDK facade список должен быть непустым и однотипным, поскольку определяет REST domain.\",\n valueSchema: \"string[] | null\",\n examples: ['[\"550e8400-e29b-41d4-a716-446655440000\"]'],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createViewListReqFieldDocs = mapFieldDocsToStrings(createViewListReqFieldDocEntries);\n\nexport const updateViewListOrderReqFieldDocEntries = {\n orderedViewList: {\n description: \"Новый порядок: пары `childId` и числовой `order` для сортировки в UI.\",\n valueSchema: \"ViewOrder[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateViewListOrderReqFieldDocs = mapFieldDocsToStrings(updateViewListOrderReqFieldDocEntries);\n\nexport const viewInfoFieldDocEntries = {\n itemLinkKey: {\n description: \"Ключ связи родитель–потомок для созданного представления.\",\n valueSchema: \"ItemLinkKey\",\n },\n itemLinkInfo: {\n description: \"Мета связи и объекта после операции.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewInfoFieldDocs = mapFieldDocsToStrings(viewInfoFieldDocEntries);\n\nexport const createViewListRespFieldDocEntries = {\n createdViewInfoList: {\n description: \"Список созданных view-записей с линками и метаданными.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateViewListOrderRespFieldDocEntries = {\n updatedViewInfoList: {\n description: \"Список view, для которых успешно обновился `order`.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deleteResponseFieldDocEntries = {\n deleteCount: {\n description:\n \"Количество удалённых записей. Для view-операций обычно 0 или 1; для `client.*.delete` — 1 при удалении только элемента, больше при `cascade: true` и/или `withPinnedItems: true` (см. **`ItemDeleteQuery`**).\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocs = mapFieldDocsToStrings(viewsSdkMethodFieldDocEntries);\nexport const userViewsSdkMethodFieldDocs = mapFieldDocsToStrings(userViewsSdkMethodFieldDocEntries);\nexport const pinnedViewsSdkMethodFieldDocs = mapFieldDocsToStrings(pinnedViewsSdkMethodFieldDocEntries);\nexport const createViewListRespFieldDocs = mapFieldDocsToStrings(createViewListRespFieldDocEntries);\nexport const updateViewListOrderRespFieldDocs = mapFieldDocsToStrings(updateViewListOrderRespFieldDocEntries);\nexport const deleteResponseFieldDocs = mapFieldDocsToStrings(deleteResponseFieldDocEntries);\n","/**\n * Каталог полей **представлений (views)** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n createViewListReqFieldDocEntries,\n createViewListRespFieldDocEntries,\n deleteResponseFieldDocEntries,\n updateViewListOrderRespFieldDocEntries,\n updateViewListOrderReqFieldDocEntries,\n viewInfoFieldDocEntries,\n pinnedViewsSdkMethodFieldDocEntries,\n userViewsSdkMethodFieldDocEntries,\n viewsSdkMethodFieldDocEntries,\n} from \"./views-field-docs.js\";\n\nexport const mcpViewsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ViewsSdkMethods: { ...viewsSdkMethodFieldDocEntries },\n UserViewsSdkMethods: { ...userViewsSdkMethodFieldDocEntries },\n PinnedViewsSdkMethods: { ...pinnedViewsSdkMethodFieldDocEntries },\n CreateViewListReq: { ...createViewListReqFieldDocEntries },\n CreateViewListResp: { ...createViewListRespFieldDocEntries },\n UpdateViewListOrderReq: { ...updateViewListOrderReqFieldDocEntries },\n UpdateViewListOrderResp: { ...updateViewListOrderRespFieldDocEntries },\n DeleteResponse: { ...deleteResponseFieldDocEntries },\n ViewInfo: { ...viewInfoFieldDocEntries },\n};\n","/**\n * Описания полей **запросов/ответов связей и mind map** (`components.schemas` в OpenAPI),\n * в том же формате {@link ItemFieldDoc}, что и у *Item — для промптов и MCP `inputSchema`.\n *\n * Соответствие REST: {@link RelationsFacade} в `src/resources/relations/RelationsFacade.ts`.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/**\n * Соответствие методов `TorrowClient.relations` телам запросов и путям REST.\n * Удобно для MCP-инструментов с именами `torrow_relations_include_to_parent` и т.д.\n */\nexport const relationsSdkMethodFieldDocEntries = {\n includeToParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/items`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order` и свойства item), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. **Pinned link** (`LinkType.Pinned`): доменная операция создания связи parent → child. Для чтения и порядка результата используй `client.views.pinned.*`.\",\n valueSchema: \"parentId + ItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage: \"Domain SDK выводит из `parentId`. Канон apps AttachItemTask. Pin User→Pinned — `client.views.pin`, не этот метод. Не путай с прямым `views.pinned.create`. См. `docs/agents/relations-flow.md`.\",\n },\n includeForUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/foruser`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order`), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. Batch-операция создания нескольких User-связей под parent (`LinkType.User`). Для одного item предпочитай `saveToMindMap`; для чтения используй `client.views.user.*`.\",\n valueSchema: \"parentId + BaseItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. OpenAPI batch. torrow-apps для user link вызывает `saveToMindMap`, не этот эндпоинт. Предпочитай `saveToMindMap` в продукте.\",\n },\n excludeFromParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/items`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия Pinned-связи с родителя; для удаления конкретного view есть отдельный `client.views.pinned.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n excludeFromUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/fromuser`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия User-связи; для удаления конкретного view есть отдельный `client.views.user.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n includeToGroups: {\n description:\n \"`PUT /api/v1/{domain}/include/togroups`. Тело: `IncludeToGroupsReq`. Ответ: `IncludeExcludeResp`. Массовое включение в группы (ACL).\",\n valueSchema: \"IncludeToGroupsReq → IncludeExcludeResp\",\n usage: \"Domain SDK выводит из `groupIds`; список должен быть непустым и однотипным. Члены группы — `search.*(groupIds)`, не `listGroups`. UI apps часто `updateGroups` на item.\",\n },\n excludeFromGroups: {\n description:\n \"`PUT /api/v1/{domain}/exclude/fromgroups`. Тело: `ExcludeFromGroupsReq`. Ответ: `ExcludeResp`.\",\n valueSchema: \"ExcludeFromGroupsReq → ExcludeResp\",\n usage: \"Domain SDK выводит из `itemIds`; список должен быть непустым и однотипным.\",\n },\n saveToMindMap: {\n description:\n \"`PUT /api/v1/{domain}/{itemId}/savetomindmap`. Тело: `SaveItemToMindMapReq`. Ответ: `Participation`. Доменная операция сохранения **одного item** в личную структуру (`LinkType.User`); для чтения результата используй `client.views.user.*`.\",\n valueSchema: \"SaveItemToMindMapReq → Participation\",\n usage:\n \"Domain SDK выводит из `itemId` аргумента. Передавай `offlinable: true`, `parentItemId`, `userProfileId`. Не путать с participation accept на item-фасаде.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemLinkKeyFieldDocEntries = {\n parentId: {\n description: \"Идентификатор родительского элемента в связи (mind map / иерархия).\",\n valueSchema: \"string (torrow id)\",\n },\n itemId: {\n description: \"Идентификатор дочернего или связанного элемента.\",\n valueSchema: \"string (torrow id)\",\n },\n ownerId: {\n description: \"Владелец связи (профиль/пользователь), если применимо к персональному представлению.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** OpenAPI `ItemLink` — связь parent↔child в view/hit (`NoteView.itemLink` и т.п.). */\nexport const itemLinkFieldDocEntries = {\n parentId: {\n description: \"Родительский элемент связи.\",\n valueSchema: \"string | null\",\n },\n meta: {\n description: \"Метаданные связи (версия и т.п.).\",\n valueSchema: \"ObjectInfo\",\n },\n itemId: {\n description: \"Дочерний / связанный элемент.\",\n valueSchema: \"string | null\",\n },\n linkType: {\n description: \"Тип связи User / Pinned (и пр.). Флоу: `docs/agents/relations-flow.md`.\",\n valueSchema: \"LinkType\",\n usage: \"Assert в examples — best-effort; membership в listUser/listPinned — канон проверки.\",\n },\n order: {\n description: \"Порядок среди соседей под родителем.\",\n valueSchema: \"int32 | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для этой связи.\",\n valueSchema: \"string | null\",\n },\n tags: {\n description: \"Теги связи.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includedLinkMetaFieldDocEntries = {\n key: {\n description: \"Составной ключ созданной или обновлённой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n info: {\n description: \"Мета связи (версия и т.п.) после include.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludedLinkMetaFieldDocEntries = {\n key: {\n description: \"Ключ удалённой или затронутой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n count: {\n description: \"Число затронутых связей/записей для данного ключа (контракт API).\",\n examples: [\"1\", \"0\"],\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Torrow id элемента, который включают под родителя в иерархии.\",\n usage: \"Обязательное поле в каждом элементе `itemPropertiesList` для `includeToParent`.\",\n },\n order: {\n description: \"Порядок сортировки среди детей одного родителя (меньше — выше в списке, согласно клиенту).\",\n examples: [\"0\", \"1\", \"10\"],\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги связи элемента с родителем (фильтры, группировка в UI).\",\n examples: ['[\"важное\"]', \"[]\"],\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для данной связи.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее: теги по id элемента. Предпочитать `tags`.\",\n valueSchema: \"deprecated map\",\n },\n aliasByItemId: {\n description: \"Устаревшее: псевдонимы по id. Предпочитать `alias`.\",\n valueSchema: \"deprecated map\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const baseItemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Элемент, который добавляют в персональное представление пользователя под `parentId` маршрута.\",\n usage: \"Используется в `IncludeForUserReq` (include/foruser).\",\n },\n order: {\n description: \"Порядок узла в списке представления пользователя.\",\n examples: [\"0\", \"1\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const groupItemPropertiesFieldDocEntries = {\n itemId: {\n description:\n \"Элемент, включаемый в каждую из групп из `IncludeToGroupsReq.groupIds` (список id групп задаётся на уровне запроса, не здесь).\",\n },\n participantType: {\n description: \"Роль участия элемента в группе (Owner, Editor, Reader, …).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"Editor\", \"Owner\"],\n },\n order: {\n description: \"Порядок внутри группы.\",\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги для связи элемент–группа.\",\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним в группе.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n aliasByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToParentReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Список детей, привязываемых к `parentId` из URL (`PUT .../{parentId}/include/items`).\",\n valueSchema: \"ItemProperties[]\",\n usage: \"Сценарий «прикрепить элемент к контакту/контексту/…» в продукте.\",\n },\n versionToCheck: {\n description: \"Ожидаемая версия родителя для оптимистичной блокировки; несовпадение — конфликт.\",\n examples: [\"1\", \"18\"],\n valueSchema: \"int32 | null\",\n usage: \"Берётся из `parent.meta.version`, если нужна проверка.\",\n },\n isNeedAnnouncement: {\n description: \"Сгенерировать уведомление/анонс об изменении для подписчиков.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeForUserReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы и порядок для добавления в mind map **текущего пользователя** под родителем из пути.\",\n valueSchema: \"BaseItemProperties[]\",\n usage: \"Маршрут `include/foruser`; отличается от include/items тем, что работает с персональным представлением.\",\n },\n versionToCheck: {\n description: \"Версия родителя для проверки при изменении (если API ожидает).\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Нужен ли анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeReqFieldDocEntries = {\n itemIds: {\n description: \"Список id элементов, которые отвязывают от родителя (`exclude/items`) или убирают из персонального вида (`exclude/fromuser`).\",\n valueSchema: \"string[]\",\n usage: \"Путь задаёт контекст: исключение из иерархии родителя vs из mind map пользователя.\",\n },\n versionToCheck: {\n description: \"Версия родителя для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс об изменении.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToGroupsReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы с опциональной ролью (`participantType`), порядком и тегами; каждый `itemId` будет связан со **всеми** `groupIds`.\",\n valueSchema: \"GroupItemProperties[]\",\n },\n parentId: {\n description: \"Общий родительский контекст для операции (если задан в API).\",\n valueSchema: \"string | null\",\n },\n groupIds: {\n description: \"Идентификаторы групп (элементов-групп), в которые включают перечисленные `itemId`.\",\n valueSchema: \"string[]\",\n usage: \"Маршрут без `{parentId}` в пути: `PUT /api/v1/{domain}/include/togroups`.\",\n },\n recursive: {\n description: \"Рекурсивное включение в подгруппы (семантика сервера).\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n versionToCheck: {\n description: \"Версия для проверки согласованности.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeFromGroupsReqFieldDocEntries = {\n groupIds: {\n description: \"Группы, из которых убирают элементы.\",\n valueSchema: \"string[]\",\n },\n itemIds: {\n description: \"Элементы для исключения из указанных групп.\",\n valueSchema: \"string[]\",\n },\n versionToCheck: {\n description: \"Версия для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const saveItemToMindMapReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль пользователя, для чьего mind map применяется операция (если отличается от токена).\",\n valueSchema: \"string | null\",\n },\n parentItemId: {\n description:\n \"Родитель для **User-link placement** (`client.relations.saveToMindMap`). Для participation accept часто не нужен — см. `participation-flow.md`. `null` — по правилам API (корень / снятие).\",\n valueSchema: \"string | null\",\n },\n alias: {\n description: \"Отображаемый псевдоним узла в карте.\",\n valueSchema: \"string | null\",\n },\n offlinable: {\n description:\n \"Офлайн-доступность узла. Для placement apps обычно `true`; не обязателен для accept offer / `securityToken` — см. `participation-flow.md`.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n order: {\n description: \"Позиция среди соседей в ветке.\",\n valueSchema: \"int32 | null\",\n },\n versionToCheck: {\n description: \"Версия **самого элемента** `itemId` из пути, если требуется проверка.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n securityToken: {\n description: \"Гостевой или ограниченный доступ по токену (как в других операциях API).\",\n valueSchema: \"string | null\",\n },\n participantType: {\n description: \"Тип участия при сохранении в mind map (например PublicReader для публичной карточки).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"PublicReader\", \"Owner\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeRespFieldDocEntries = {\n success: {\n description: \"Признак успешного include на стороне сервера.\",\n examples: [\"true\"],\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Метаданные по созданным/изменённым связям.\",\n valueSchema: \"IncludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeRespFieldDocEntries = {\n success: {\n description: \"Успешность exclude.\",\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Сводка по исключённым связям (ключи и счётчики).\",\n valueSchema: \"ExcludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeExcludeRespFieldDocEntries = {\n includeResp: {\n description: \"Результат части include, если в одном ответе объединены операции.\",\n valueSchema: \"IncludeResp\",\n },\n excludeResp: {\n description: \"Результат части exclude.\",\n valueSchema: \"ExcludeResp\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const relationsSdkMethodFieldDocs = mapFieldDocsToStrings(\n relationsSdkMethodFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const itemPropertiesFieldDocs = mapFieldDocsToStrings(\n itemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const baseItemPropertiesFieldDocs = mapFieldDocsToStrings(\n baseItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const groupItemPropertiesFieldDocs = mapFieldDocsToStrings(\n groupItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeToParentReqFieldDocs = mapFieldDocsToStrings(\n includeToParentReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeForUserReqFieldDocs = mapFieldDocsToStrings(\n includeForUserReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeReqFieldDocs = mapFieldDocsToStrings(excludeReqFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeToGroupsReqFieldDocs = mapFieldDocsToStrings(\n includeToGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeFromGroupsReqFieldDocs = mapFieldDocsToStrings(\n excludeFromGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const saveItemToMindMapReqFieldDocs = mapFieldDocsToStrings(\n saveItemToMindMapReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const includeRespFieldDocs = mapFieldDocsToStrings(\n includeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeRespFieldDocs = mapFieldDocsToStrings(\n excludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeExcludeRespFieldDocs = mapFieldDocsToStrings(\n includeExcludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkKeyFieldDocs = mapFieldDocsToStrings(\n itemLinkKeyFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkFieldDocs = mapFieldDocsToStrings(\n itemLinkFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includedLinkMetaFieldDocs = mapFieldDocsToStrings(\n includedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludedLinkMetaFieldDocs = mapFieldDocsToStrings(\n excludedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * Каталог описаний схем **связей и mind map** для MCP / агентов.\n * Имена верхнего уровня совпадают с `components.schemas` в OpenAPI (кроме `RelationsSdkMethods`).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mcpBookingFieldCatalog } from \"./mcp-booking-catalog.js\";\nimport { mcpItemFieldCatalog } from \"./mcp-field-catalog.js\";\nimport { mcpAuthFieldCatalog } from \"./mcp-auth-catalog.js\";\nimport { mcpSearchFieldCatalog } from \"./mcp-search-catalog.js\";\nimport { mcpNotesFieldCatalog } from \"./mcp-notes-catalog.js\";\nimport { mcpOperationsFieldCatalog } from \"./mcp-operations-catalog.js\";\nimport { mcpUserProfilesFieldCatalog } from \"./mcp-user-profiles-catalog.js\";\nimport { mcpViewsFieldCatalog } from \"./mcp-views-catalog.js\";\nimport {\n baseItemPropertiesFieldDocEntries,\n excludedLinkMetaFieldDocEntries,\n excludeFromGroupsReqFieldDocEntries,\n excludeReqFieldDocEntries,\n excludeRespFieldDocEntries,\n includeExcludeRespFieldDocEntries,\n includeForUserReqFieldDocEntries,\n includedLinkMetaFieldDocEntries,\n includeRespFieldDocEntries,\n includeToGroupsReqFieldDocEntries,\n includeToParentReqFieldDocEntries,\n itemLinkKeyFieldDocEntries,\n itemLinkFieldDocEntries,\n itemPropertiesFieldDocEntries,\n groupItemPropertiesFieldDocEntries,\n relationsSdkMethodFieldDocEntries,\n saveItemToMindMapReqFieldDocEntries,\n} from \"./relations-field-docs.js\";\nimport { linkTypeFieldDocEntries } from \"./shared-enum-field-docs.js\";\n\nexport const mcpRelationFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы класса `TorrowClient.relations` ↔ OpenAPI пути и схемы тел. */\n RelationsSdkMethods: { ...relationsSdkMethodFieldDocEntries },\n /** `ItemLink.linkType` — User / Pinned (флоу: `docs/agents/relations-flow.md`). */\n LinkType: { ...linkTypeFieldDocEntries },\n ItemLink: { ...itemLinkFieldDocEntries },\n ItemLinkKey: { ...itemLinkKeyFieldDocEntries },\n IncludedLinkMeta: { ...includedLinkMetaFieldDocEntries },\n ExcludedLinkMeta: { ...excludedLinkMetaFieldDocEntries },\n ItemProperties: { ...itemPropertiesFieldDocEntries },\n BaseItemProperties: { ...baseItemPropertiesFieldDocEntries },\n GroupItemProperties: { ...groupItemPropertiesFieldDocEntries },\n IncludeToParentReq: { ...includeToParentReqFieldDocEntries },\n IncludeForUserReq: { ...includeForUserReqFieldDocEntries },\n ExcludeReq: { ...excludeReqFieldDocEntries },\n IncludeToGroupsReq: { ...includeToGroupsReqFieldDocEntries },\n ExcludeFromGroupsReq: { ...excludeFromGroupsReqFieldDocEntries },\n SaveItemToMindMapReq: { ...saveItemToMindMapReqFieldDocEntries },\n IncludeResp: { ...includeRespFieldDocEntries },\n ExcludeResp: { ...excludeRespFieldDocEntries },\n IncludeExcludeResp: { ...includeExcludeRespFieldDocEntries },\n};\n\n/** Объединение каталогов *Item, связей, записи/оплаты и представлений — один объект для генерации MCP. */\nexport const mcpFullFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ...mcpItemFieldCatalog,\n ...mcpRelationFieldCatalog,\n ...mcpBookingFieldCatalog,\n ...mcpViewsFieldCatalog,\n ...mcpUserProfilesFieldCatalog,\n ...mcpAuthFieldCatalog,\n ...mcpSearchFieldCatalog,\n ...mcpNotesFieldCatalog,\n ...mcpOperationsFieldCatalog,\n};\n\nexport { mcpAuthFieldCatalog };\nexport { mcpSearchFieldCatalog };\nexport { mcpNotesFieldCatalog };\nexport { mcpOperationsFieldCatalog };\nexport { mcpBookingFieldCatalog };\nexport { mcpViewsFieldCatalog };\nexport { mcpUserProfilesFieldCatalog };\n"],"mappings":"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","names":["availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageTypeFieldDocs","usageConditionTypeFieldDocEntries","usageConditionTypeFieldDocs","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageConditionTypeFieldDocEntries","profilePropertiesFieldDocEntries","profilePropertiesFieldDocEntries"]}