@torrow/sdk-docs 0.1.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.
@@ -0,0 +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/context-item.ts","../../../src/field-docs/calendar-item.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/loyalty-access-field-docs.ts","../../../src/field-docs/operations-struct-field-docs.ts","../../../src/field-docs/block-reason-field-docs.ts","../../../src/field-docs/contact-communication-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/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: \"Превью в карточке; загрузка через отдельные API putUrl/image id.\",\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`).\",\n },\n searchMode: {\n description: \"Участие элемента в поиске/выдаче (контракт API).\",\n examples: [\"UnknownSearchMode\", \"NoneSearchMode\", \"Partial\", \"Full\"],\n usage:\n \"Фильтрация в списках и индексация. `NoneSearchMode` — элемент не ищется в общей выдаче, но может открываться по прямой ссылке/uniqueName.\",\n },\n anyoneAccess: {\n description: \"Параметры анонимного или широкого доступа без явного участия.\",\n valueSchema: \"AnyoneAccess\",\n examples: [\"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n usage: \"С `publicityType: Link` и `Read` аноним может читать карточку по ссылке в пределах прав сервера.\",\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: \"Сервисы block/unblock по типу объекта (Case, Contact, Note).\",\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. Заполняется у обычных контактов и у **Профиля** пользователя (контакт с `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` — сохранённое отображаемое значение слота. В типичном UI часть слотов задаётся вручную (до нескольких), остальные могут дополняться автоматически в фиксированном порядке (имя, организация, описание, контакты), если слот пуст, а данные есть, без дублирования уже выбранных типов в группах «имя»/«организация». Разметка на экране: первые слоты по `number` часто идут под аватаром, далее — блок деталей; по типу выбирают иконку и действие (например, открыть адрес). Добавление **Профиля** (привязка контакта к пользователю) — через операции **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; проверка канала отражается в `checkState`/`checkDate`. Основной канал для уведомлений — `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`**, описания методов и тел — **`ProfilesSdkMethods`**, **`ProfileListResp`**, **`AddProfileResp`** в `mcpUserProfilesFieldCatalog`. Обычный контакт в адресной книге без роли профиля владельца — как правило **`None`** или отсутствие значения. **`AnyProfile`**, **`CopyProfile`**, **`UnknownProfile`** — прочие значения enum; уточняй по спецификации и ответам сервера. Поле **`visitCard`** — это **не** Профиль: это структура слотов отображения (как визитка на экране) и может быть у разных контактов, включая Профиль; сам факт «это Профиль пользователя» задаётся **`profileType`** и связью через API пользователя.\",\n },\n activityStatus: {\n description: \"Статус активности контакта в UI.\",\n valueSchema: \"ActivityStatus\",\n },\n profileProperties: {\n description: \"Расширенные свойства профиля.\",\n valueSchema: \"ProfileProperties\",\n usage: \"Часто содержит цвет акцента карточки (`color`, hex) и доступность владельца (`profileUserAvailability`).\",\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: \"Может быть false, даже если у вложенных услуг есть бронирование: расписание живёт на услуге, а не на контакте.\",\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: \"Тип содержимого заметки; определяет интерпретацию поля data и UI.\",\n examples: [\n \"Text\",\n \"Html\",\n \"Hlink\",\n \"File\",\n \"Photo\",\n \"Voice\",\n \"Geolocation\",\n \"Qr\",\n \"ServiceSpecification\",\n \"Unknown\",\n ],\n valueSchema: \"NoteType\",\n usage:\n \"Компонент note-info: при Text проверяется note.data; для файлов — files[0]; imagePreviewSize задаёт слайдер/скрытие файлов. Заметки на карточке контакта часто попадают в отдельный блок раскладки родителя (`ContactItem.solutionData.viewBlockSettings`, objectType заметки — числовой код в API).\",\n },\n data: {\n description:\n \"Полезная нагрузка: строка HTML/текста, JSON или opaque в зависимости от noteType (тип unknown в OpenAPI).\",\n examples: ['\"<p>Заметка</p>\"', '\"plain text\"', \"{}\"],\n usage: \"hasText в UI = !!note.data; для Html/Text — контент редактора.\",\n },\n files: {\n description: \"Вложенные файлы (не основное image).\",\n valueSchema: \"FileInfo[]\",\n examples: [\"[ { id, fileName, ... } ]\"],\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 * **`ContextItem`** — группа/метка для организации элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst contextSpecificFieldDocEntries = {\n color: {\n description: \"Цвет метки контекста в UI.\",\n examples: [\"#FF5722\", \"rgb(255,0,0)\"],\n usage: \"Визуальная группировка в mind-map и списках.\",\n },\n description: {\n description: \"Текстовое описание назначения контекста.\",\n examples: [\"Рабочие контакты\", \"Личное\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\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\nconst calendarSpecificFieldDocEntries = {\n description: {\n description: \"Описание календаря для пользователя.\",\n examples: [\"Рабочий календарь 2025\"],\n },\n calendarViewIndex: {\n description: \"Порядок или индекс представления календаря среди видов.\",\n examples: [\"0\", \"1\"],\n usage: \"Связь с представлениями календаря (CalendarView).\",\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 * **`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 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 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 examples: [\"0\", \"1\"],\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 },\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 valueSchema: \"SessionDurationProperties\",\n },\n checkInAllCases: {\n description: \"Автоматический чек-ин по всем связанным кейсам.\",\n examples: [\"true\", \"false\"],\n },\n stepDescriptionList: {\n description: \"Пошаговое описание сценария услуги.\",\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 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 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 { 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 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 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`. Ответ: массив слотов/кейсов в расписании. Используется на шаге выбора времени.\",\n valueSchema: \"TimetableFilter → TimetableCase[]\",\n usage: \"Передавай `from`/`to` в ISO; при уже выбранных ресурсах — `bookingResourceFilter.resourceGroupIdList`.\",\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 → GetTimetableStatisticsResponse\",\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 \"Расчёт доступных окон чекина и детализации загрузки по `timePeriod` и списку ресурсов; используется при настройке услуги и подборе слотов до или вместо выборочных вызовов расписания.\",\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 как у других `getTimetable` без `createDateFrom`/`createDateTo`.\",\n valueSchema: \"TimetableFilter → TimetableCase[]\",\n usage: \"Список кейсов/слотов, привязанных к конкретному ресурсу (исполнитель, зал): выгрузки, отчёты, календарь ресурса.\",\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 → GetTimetableStatisticsResponse\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полиморфное расписание: те же `TimetableFilter` / `TimetableCase`, что у услуги, но якорь — календарь или контакт. */\nexport const calendarContactTimetableSdkMethodFieldDocEntries = {\n calendarsGetTimetable: {\n description: \"`PUT /api/v1/calendars/{id}/timetable`. Тело `TimetableFilter`, ответ `TimetableCase[]`.\",\n valueSchema: \"TimetableFilter → TimetableCase[]\",\n usage: \"`TorrowClient.calendars.getTimetable`\",\n },\n calendarsGetTimetableStatistics: {\n description: \"`POST /api/v1/calendars/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → GetTimetableStatisticsResponse\",\n },\n contactsGetTimetable: {\n description: \"`PUT /api/v1/contacts/{id}/timetable`. Расписание кейсов, привязанных к контакту (профиль/исполнитель).\",\n valueSchema: \"TimetableFilter → TimetableCase[]\",\n usage: \"`TorrowClient.contacts.getTimetable`\",\n },\n contactsGetTimetableStatistics: {\n description: \"`POST /api/v1/contacts/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → GetTimetableStatisticsResponse\",\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 \"Выбранный слот: интервал `begin`/`end`, опционально `resourceId` исполнителя и др. — основной якорь времени для `createOrder`.\",\n valueSchema: \"AvailabilityTime\",\n usage: \"Берётся из `getTimetable` / выбора в календаре.\",\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 \"Тип шага: `0` Unknown, `1` Time, `2` Resource, `3` Payment — см. `ServiceCheckInWizardStepType` в SDK.\",\n examples: [\"1\", \"2\", \"3\"],\n usage: \"Число из API; сопоставляй с константами SDK, не со строковыми enum Swagger.\",\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\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} 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 loyalityCardId: {\n description: \"ID карты лояльности в записи участия (историческое имя поля с опечаткой API).\",\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: \"Доступность/тип интервала участия.\", 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: \"Выбранный слот/интервал.\", 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} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingWizardSdkFieldDocEntries = {\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\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 servicesBookingSdkMethodFieldDocEntries,\n stepDescriptionFieldDocEntries,\n stepParameterFieldDocEntries,\n ticketSummaryFieldDocEntries,\n ticketPropertiesFieldDocEntries,\n timePeriodFieldDocEntries,\n timetableFilterFieldDocEntries,\n trackingInformationFieldDocEntries,\n utmFieldDocEntries,\n} from \"./booking-wizard-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 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 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};\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`). Не логируй целиком.\",\n examples: [\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…\"],\n },\n refreshToken: {\n description: \"Долгоживущий токен для выдачи новой пары без повторного логина.\",\n usage:\n \"Храни безопасно; отправляй только в теле `POST /api/v1/auth/refresh`. После refresh сервер может вернуть новый refresh — замени сохранённый.\",\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} 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: \"Обязателен для обмена; клиент без `Authorization` (см. пример `74-auth-getaccesstoken-with-refresh.ts`).\",\n },\n deviceInfo: {\n description: \"Сведения об устройстве клиента (`DeviceInfo` в OpenAPI).\",\n usage:\n \"В продакшене мобильный клиент обычно передаёт `deviceId`, тип устройства, push-токен и т.д. Для минимальных сценариев поле может отсутствовать — сверяй с контрактом стенда.\",\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: \"Вместе с `sessionId` или по правилам конкретного потока Auth в продукте.\",\n },\n scopes: {\n description: \"Запрашиваемые области доступа (строки), если API их использует.\",\n examples: ['[\"api\"]'],\n },\n deviceInfo: {\n description: \"Сведения об устройстве (`DeviceInfo`).\",\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 accountType: {\n description: \"Тип аккаунта (`PhoneNumber`, `Email`, ... в зависимости от контракта identity).\",\n valueSchema: \"AccountType\",\n },\n language: {\n description: \"Язык сообщений/кода.\",\n valueSchema: \"string | null\",\n },\n regionStorageId: {\n description: \"Региональный storage ID (если используется backend identity).\",\n valueSchema: \"string | null\",\n },\n captchaToken: {\n description: \"Токен captcha, если включена антибот-проверка.\",\n valueSchema: \"string | 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 sessionLifeTimeSeconds: {\n description: \"TTL сессии/кода в секундах.\",\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: { description: \"Тип аккаунта для создаваемой auth-сессии.\", valueSchema: \"AccountType\" },\n language: { description: \"Язык интерфейса/сообщений сессии.\", valueSchema: \"string | null\" },\n regionStorageId: { description: \"Регион storage для identity.\", valueSchema: \"string | null\" },\n inviteSessionId: { description: \"ID invite-сессии (если вход по приглашению).\", valueSchema: \"string | null\" },\n captchaToken: { description: \"Captcha token для защиты от ботов.\", valueSchema: \"string | null\" },\n scopes: { description: \"Запрашиваемые scopes сессии.\", valueSchema: \"string[] | null\" },\n deviceInfo: { description: \"Информация об устройстве.\", valueSchema: \"DeviceInfo\" },\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 sessionLifeTimeSeconds: { description: \"Срок жизни сессии.\", valueSchema: \"int32\" },\n communicationTypeList: {\n description: \"Доступные каналы подтверждения (SMS/email/etc).\",\n valueSchema: \"CommunicationType[] | 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 \"Реализуй кэш access в памяти/хранилище; перед возвратом при необходимости вызови **`client.auth.refresh`** (отдельный HTTP без Bearer этого колбэка) или свой анонимный `HttpClient` — иначе рекурсия.\",\n },\n securityToken: {\n description:\n \"Гостевой или общий токен доступа к сущности: SDK добавляет его в query как `securityToken` на каждый запрос.\",\n usage:\n \"Типично для заказов/событий после `createOrder` (`consumerSecurityToken` и т.п.); см. кейсы в capability-map и `TorrowClientConfig`.\",\n examples: [\"guest-or-shared-token…\"],\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.\",\n },\n requestToken: {\n description: \"`POST /api/v1/auth/token` — тело `TokenReq`, ответ `TokenResp`.\",\n usage:\n \"После **`sendCode`**: `sessionId` из ответа + код из SMS/email. Пример — **`examples/node/auth/75-auth-request-token.ts`**.\",\n },\n revoke: {\n description: \"`POST /api/v1/auth/revoke` — тело `RevokeReq`, ответ пустой при успехе.\",\n usage: \"Выход и инвалидация refresh на сервере.\",\n },\n sendCode: {\n description: \"`POST /api/v1/auth/sendcode` — тело `SendCodeReq`, ответ `SendCodeResp`.\",\n usage:\n \"Первый шаг OTP: в ответе **`sessionId`** для `requestToken`. Цепочка с примером — **`examples/node/auth/75-auth-request-token.ts`**.\",\n },\n createSession: {\n description: \"`POST /api/v1/auth/session` — тело `CreateAuthSessionReq`, ответ `CreateAuthSessionResp`.\",\n usage: \"Создание сессии входа (регион, язык, captcha и т.д. по контракту).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkMethodFieldDocs = mapFieldDocsToStrings(authSdkMethodFieldDocEntries);\n","/**\n * Описания схем токенов и конфигурации авторизации для MCP / агентов.\n * Ключи верхнего уровня: `TokenResp`, `RefreshReq`, `TokenReq`, `RevokeReq` совпадают с `components.schemas`;\n * `TorrowClientConfigAuth` — условное имя для полей {@link TorrowClientConfig}, относящихся к токенам.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n authSdkMethodFieldDocEntries,\n createAuthSessionReqFieldDocEntries,\n createAuthSessionRespFieldDocEntries,\n refreshReqFieldDocEntries,\n revokeReqFieldDocEntries,\n sendCodeReqFieldDocEntries,\n sendCodeRespFieldDocEntries,\n tokenReqFieldDocEntries,\n tokenRespFieldDocEntries,\n torrowClientAuthConfigFieldDocEntries,\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 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` и `securityToken` в `TorrowClientConfig`. */\n TorrowClientConfigAuth: { ...torrowClientAuthConfigFieldDocEntries },\n};\n","/**\n * Описания методов **`TorrowClient.search`** и ключевых DTO поиска заказов для MCP / агентов.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const searchSdkMethodFieldDocEntries = {\n advisedItems: {\n description: \"`GET /api/v1/search/adviseditems` — подборка **`TorrowItem`** (тип, гео, язык, пагинация).\",\n usage: \"Рекомендации рядом с точкой / общий каталог — по политике продукта.\",\n },\n orders: {\n description:\n \"`PUT /api/v1/search/{torrowId}/orders` — список представлений заказов (**`CaseView[]`**) под родителем с **`OrderFilter`** в теле.\",\n usage: \"Альтернатива **`client.raw.put`**; см. **`examples/node/raw/24-search-orders-raw.ts`** и **`78-search-contacts.ts`**.\",\n },\n contacts: {\n description: \"`GET /api/v1/search/contacts` — **`ContactView[]`** по тексту и опциям.\",\n },\n notes: {\n description: \"`GET /api/v1/search/notes` — **`NoteView[]`**.\",\n },\n calendars: {\n description: \"`GET /api/v1/search/calendars` — **`CalendarView[]`**.\",\n },\n cases: {\n description: \"`GET /api/v1/search/cases` — **`CaseView[]`**.\",\n },\n resources: {\n description: \"`GET /api/v1/search/resources` — **`ResourceView[]`**.\",\n },\n services: {\n description: \"`GET /api/v1/search/services` — **`ServiceView[]`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchSdkMethodFieldDocs = mapFieldDocsToStrings(searchSdkMethodFieldDocEntries);\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 orderFilterFieldDocEntries,\n searchSdkMethodFieldDocEntries,\n} from \"./search-field-docs.js\";\n\nexport const mcpSearchFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n SearchSdkMethods: { ...searchSdkMethodFieldDocEntries },\n OrderFilter: { ...orderFilterFieldDocEntries },\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: \"Список профилей-получателей (основное поле API).\",\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 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 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\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 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\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-time string | null\" },\n lastModifiedTo: { description: \"Верхняя граница по дате изменения.\", valueSchema: \"date-time string | null\" },\n createDateFrom: { description: \"Нижняя граница по дате создания.\", valueSchema: \"date-time string | null\" },\n createDateTo: { description: \"Верхняя граница по дате создания.\", valueSchema: \"date-time string | 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: { description: \"ID файла в хранилище.\", valueSchema: \"string | null\" },\n url: { description: \"Текущий URL файла (может быть временным).\", valueSchema: \"string | null\" },\n urlExpiration: { description: \"Срок действия `url`.\", valueSchema: \"date-time string | null\" },\n eTag: { description: \"ETag файла для кеша/валидации.\", valueSchema: \"string | null\" },\n fileName: { description: \"Имя файла.\", valueSchema: \"string | null\" },\n fileSize: { description: \"Размер файла в байтах.\", valueSchema: \"int64 | null\" },\n refreshUrl: { description: \"URL для обновления/рефреша ссылки.\", valueSchema: \"string | null\" },\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: { description: \"`POST /api/v1/blockreason` — создать причину; ответ: id.\" },\n getById: { description: \"`GET /api/v1/blockreason/{id}` — одна причина, query `lng`.\" },\n listAll: { description: \"`GET /api/v1/blockreason/all` — список с пагинацией и сортировкой словаря.\" },\n delete: { description: \"`DELETE /api/v1/blockreason/{id}`.\" },\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 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 * 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`** / **`participantTypeList`**, пагинация; у **loyalty*** в Swagger query **`lmFrom`/`lmTo`** (camelCase), у **contact/case** в типах SDK — **`lmfrom`/`lmto`**.\",\n },\n generateSecurityToken: {\n description: \"`POST .../{torrowId}/generatesecuritytoken` — **`GenerateSecurityTokenReq`** → **`GenerateSecurityTokenResp`**.\",\n },\n updateParticipationType: {\n description:\n \"`PUT .../{torrowId}/participation/{participantProfileId}/type` — body: **`ParticipantType`** (в path id профиля участника).\",\n },\n requestAccess: {\n description: \"`PUT .../participation/requestaccess` — body: **`profileId`** (string); query **`userMessage`**.\",\n },\n revokeAccessRequest: { description: \"`PUT .../participation/revokerequest`.\" },\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 listGroup: {\n description:\n \"`GET .../{torrowId}/group/list` — query как в OpenAPI (**`lmfrom`**, **`lmto`** lower-case и др.); у **loyaltycards** пути в API нет — в SDK вызов бросает (**`withGroupListEndpoint: false`**).\",\n },\n updateGroups: {\n description:\n \"`PUT .../{torrowId}/updategroups` — **`UpdateItemGroupsReq[]`**; query **`parentId`**, **`tags`**, **`alias`**, **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n includeToGroups: { description: \"`PUT .../include/togroups` — **`IncludeToGroupsReq`**.\" },\n excludeFromGroups: { description: \"`PUT .../exclude/fromgroups` — **`ExcludeFromGroupsReq`**.\" },\n includeToParent: { description: \"`PUT .../{parentId}/include/items` — **`IncludeToParentReq`**.\" },\n excludeFromParent: { description: \"`PUT .../{parentId}/exclude/items` — **`ExcludeReq`**.\" },\n includeForUser: { description: \"`PUT .../{parentId}/include/foruser` — **`IncludeForUserReq`**.\" },\n excludeFromUser: { description: \"`PUT .../{parentId}/exclude/fromuser` — **`ExcludeReq`**.\" },\n rejectOffer: {\n description: \"`PUT .../participation/rejectoffer` — body: **`profileId`**; query **`userMessage`**.\",\n },\n reject: { description: \"`PUT .../participation/reject` — body: **`profileId`**.\" },\n share: { description: \"`PUT .../participation/share` — **`ShareItemReq`** → **`ParticipationResp`**.\" },\n revokeOffer: { description: \"`PUT .../participation/revokeoffer` — body: `string[]` (**profileIds**).\" },\n grantAccess: { description: \"`PUT .../participation/grantaccess` — body: `string[]`.\" },\n declineAccess: {\n description: \"`PUT .../participation/declineaccess` — 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: { description: \"`PUT .../{itemId}/sendlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**.\" },\n getShortUrl: { description: \"`POST .../{torrowId}/shorturl` → `string`.\" },\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: \"`GET .../{torrowId}/image/puturl` — presigned upload; query **`fileId`**, **`fileName`**, **`fileSize`**.\",\n },\n saveToMindMap: {\n description: \"`PUT .../{torrowId}/savetomindmap` — **`SaveItemToMindMapReq`** → **`Participation`**.\",\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; только при **`withPhotoEndpoints`** (сейчас **contacts**).\",\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 listGroups: {\n description: \"`GET .../{torrowId}/groups` — **`GroupStatus[]`**; query как в OpenAPI.\",\n },\n updateAccounts: {\n description: \"`PUT .../{torrowId}/updateaccounts` — **`UpdateItemAccountsReq[]`** → **`IncludeExcludeResp`**.\",\n },\n shareItemLink: {\n description: \"`POST .../{torrowId}/participation/shareitemlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**.\",\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: \"`POST .../{itemId}/block` — query **`reasonId`**, **`reasonNote`**, **`language`**, … → **`TorrowItem`**.\",\n },\n unblock: {\n description: \"`POST .../{itemId}/unblock` — query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\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 return {\n marginTimeSec: parsed.marginTimeSec,\n lockId,\n };\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 { 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}` → **`DeleteResponse`**.\",\n },\n updateState: {\n description: \"`PUT .../state` — смена состояния через query **`state`** (`AccountingTransactionState`).\",\n },\n getBalance: {\n description: \"`GET .../balance` — массив **`BalanceValue`**; опционально **`balanceDate`**.\",\n },\n listTransactions: {\n description: \"`GET .../transactions` — список **`AccountingTransaction`** с фильтрами и пагинацией.\",\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 как в Swagger (**`lmfrom`**, **`lmto`** в нижнем регистре).\",\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 как в OpenAPI (**`lmfrom`**, **`lmto`** lower-case, `types`, `states`, `itemIds`).\",\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: { description: \"`DELETE /api/v1/loyaltysystems/{torrowId}` — как у элементов: **`cascade`**, **`withPinnedItems`**.\" },\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: \"`POST .../{loyaltySystemId}/loyaltycard` — **`CreateLoyaltyCardReq`** (обязателен **`profileId`**).\",\n },\n postStatistics: { description: \"`POST /api/v1/loyaltysystems/statistics` — **`GetLoyaltySystemsStatisticsReq`**.\" },\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 ...` — **`cascade`**, **`withPinnedItems`**.\" },\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`**.\",\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 getTimetableStatistics: {\n description: \"`POST /api/v1/loyaltycards/timetable/statistics` — **`GetTimetableStatisticsRequest`** → **`GetTimetableStatisticsResponse`**.\",\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: { description: \"`DELETE /api/v1/user/accounts/delete` — удаление аккаунта пользователя.\" },\n listDevices: { description: \"`GET /api/v1/user/devices` — список устройств (`DeviceInfo[]`).\" },\n deleteDevice: { description: \"`DELETE /api/v1/user/devices/{deviceId}` — удалить устройство.\" },\n getDeviceSettings: { description: \"`GET /api/v1/user/devices/{deviceId}/settings` — читать настройки устройства.\" },\n updateDeviceSettings: { description: \"`PUT /api/v1/user/devices/{deviceId}/settings` — сохранить строку настроек.\" },\n getDefaultProfile: { description: \"`GET /api/v1/user/defaultprofile` — дефолтный профиль пользователя.\" },\n setDefaultProfileByContactId: { description: \"`PUT /api/v1/user/defaultprofile` — выбрать дефолтный профиль по contactId.\" },\n createDefaultProfile: { description: \"`POST /api/v1/user/defaultprofile` — создать и назначить дефолтный профиль.\" },\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: { description: \"`GET /api/v1/user/count` — число пользователей (админ/статистика).\" },\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), которую хранит User API.\",\n valueSchema: \"string | null\",\n usage:\n \"SDK не интерпретирует структуру внутри `settings`; приложение хранит/читает свой формат и версионирует его самостоятельно.\",\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: \"Тип layout карточки (int-код UI раскладки/обложки).\",\n valueSchema: \"int32 | null\",\n usage:\n \"Выбирается в item appearance. На мобильном влияет на режим image-header (`BigImagePanel` + image => image view с opacity toolbar).\",\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\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 valueSchema: \"string | 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 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 \"UpdateCaseParticipantFields\",\n \"MeetingCreationError\",\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 \"Max\",\n \"WhatsApp\",\n \"Viber\",\n \"Facebook\",\n \"Instagram\",\n \"Vkontakte\",\n \"Odnoklassniki\",\n \"Skype\",\n \"Youtube\",\n \"Twitter\",\n \"LinkedIn\",\n \"Other\",\n ],\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 NoteType: [\"Unknown\", \"Text\", \"Html\", \"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 \"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 TicketState: [\"UnknownTicketState\", \"Canceled\", \"Waiting\", \"Paid\", \"Used\", \"Error\"],\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} as const;\n\ntype EnumName = keyof typeof ENUM_VALUES;\n\nconst SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS: Partial<Record<EnumName, Record<string, string>>> = {\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 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};\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 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 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 \"Тип содержимого заметки.\",\n);\nexport const noteTypeFieldDocs = mapFieldDocsToStrings(noteTypeFieldDocEntries);\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 ticketStateFieldDocEntries = createEnumFieldDocEntries(\n \"TicketState\",\n \"Состояние билета/оплаты.\",\n);\nexport const ticketStateFieldDocs = mapFieldDocsToStrings(ticketStateFieldDocEntries);\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","/**\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 participationFieldDocEntries,\n participationRespFieldDocEntries,\n profileWithErrorFieldDocEntries,\n sendLinkOfItemReqFieldDocEntries,\n sendLinkOfItemRespFieldDocEntries,\n shareItemReqFieldDocEntries,\n} from \"./loyalty-access-field-docs.js\";\nimport {\n accountingTransactionFieldDocEntries,\n actionHistoryInfoFieldDocEntries,\n announcementInfoFieldDocEntries,\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 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 contactsCommunicationSdkMethodFieldDocEntries,\n sendCommunicationCodeReqFieldDocEntries,\n sendCommunicationCodeRespFieldDocEntries,\n verifyCommunicationCodeReqFieldDocEntries,\n verifyCommunicationCodeRespFieldDocEntries,\n} from \"./contact-communication-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 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 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 ticketStateFieldDocEntries,\n torrowObjectTypeFieldDocEntries,\n usageConditionTypeFieldDocEntries as usageConditionTypeEnumFieldDocEntries,\n usageTypeFieldDocEntries as usageTypeEnumFieldDocEntries,\n} from \"./shared-enum-field-docs.js\";\n\nexport const mcpOperationsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\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 /** Явный контракт неявных параметров из 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 AccountingTransactionsSdkMethods: { ...accountingTransactionsSdkMethodFieldDocEntries },\n AnnouncementsSdkMethods: { ...announcementsSdkMethodFieldDocEntries },\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 SendCommunicationCodeReq: { ...sendCommunicationCodeReqFieldDocEntries },\n SendCommunicationCodeResp: { ...sendCommunicationCodeRespFieldDocEntries },\n VerifyCommunicationCodeReq: { ...verifyCommunicationCodeReqFieldDocEntries },\n VerifyCommunicationCodeResp: { ...verifyCommunicationCodeRespFieldDocEntries },\n GenerateSecurityTokenReq: { ...generateSecurityTokenReqFieldDocEntries },\n GenerateSecurityTokenResp: { ...generateSecurityTokenRespFieldDocEntries },\n ShareItemReq: { ...shareItemReqFieldDocEntries },\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 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 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 TicketState: { ...ticketStateFieldDocEntries },\n UserSettingsInfo: { ...userSettingsInfoFieldDocEntries },\n SolutionData: { ...solutionDataFieldDocEntries },\n BlockInfo: { ...blockInfoFieldDocEntries },\n UsageCondition: { ...usageConditionFieldDocEntries },\n UsageType: { ...usageTypeEnumFieldDocEntries },\n UsageConditionType: { ...usageConditionTypeEnumFieldDocEntries },\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 */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const profilesSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/user/profiles`. Возвращает **`ProfileListResp`**: список контактов-Профилей текущего пользователя (не общий каталог контактов mind map). Требуется авторизация пользователя.\",\n valueSchema: \"→ ProfileListResp\",\n },\n add: {\n description:\n \"`POST /api/v1/user/profiles`. Тело: **`ContactItem`** (черновик контакта для нового Профиля). Ответ: **`AddProfileResp`**: `profile` — созданный/связанный контакт; `personalContactList` помечено в схеме как устаревшее.\",\n valueSchema: \"ContactItem → AddProfileResp\",\n },\n addByContactId: {\n description:\n \"`PUT /api/v1/user/profiles`. Тело в OpenAPI — **строка** (JSON-строка): `torrow id` уже существующего контакта, который нужно зарегистрировать как Профиль. Ответ: **`AddProfileResp`. Не путать с `PUT` обновления обычного контакта по `/api/v1/contacts/{id}`.\",\n valueSchema: \"string (contactId) → AddProfileResp\",\n usage: \"Передай строку id существующего контакта; SDK сериализует её как JSON string.\",\n },\n updateProfileProperties: {\n description:\n \"`PUT /api/v1/user/profiles/{profileId}/profileproperties`. Тело: **`ProfileProperties`** (цвет карточки, доступность, заметка). Ответ: **`UpdateProfilePropertiesResp`** с опциональным `torrowObject`.\",\n valueSchema: \"ProfileProperties → UpdateProfilePropertiesResp\",\n },\n remove: {\n description:\n \"`DELETE /api/v1/user/profiles/{profileId}`. Удалить Профиль по id контакта. Ответ: **`RemoveProfileResp`**: актуальный список `personalContactList` после операции.\",\n valueSchema: \"→ RemoveProfileResp\",\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/...`, домен как у связей (`contacts`, `notes`, …).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const viewsSdkMethodFieldDocEntries = {\n listUserForParent: {\n description:\n \"`GET /api/v1/{domain}/{parentId}/views/user`. Список пользовательских представлений дочерних элементов под родителем (mind map). Query: `tags`, `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`. Ответ: массив `*View` по домену (`ContactView`, `NoteView`, …).\",\n valueSchema: \"ViewListQuery → DomainViewMap[domain][]\",\n },\n createUserViews: {\n description: \"`POST /api/v1/{domain}/{parentId}/views/user`. Тело: `CreateViewListReq`. Ответ: `CreateViewListResp` с `createdViewInfoList`.\",\n valueSchema: \"CreateViewListReq → CreateViewListResp\",\n },\n listUserAll: {\n description:\n \"`GET /api/v1/{domain}/views/user`. Все пользовательские представления по типу элемента без фильтра по одному `parentId`. Query: `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`.\",\n valueSchema: \"ViewListRootQuery → DomainViewMap[domain][]\",\n },\n getUserView: {\n description: \"`GET /api/v1/{domain}/{parentId}/views/user/{childId}`. Одно представление.\",\n valueSchema: \"→ DomainViewMap[domain]\",\n },\n deleteUserView: {\n description:\n \"`DELETE /api/v1/{domain}/{parentId}/views/user/{childId}`. Удалить представление пользователя (убрать узел из mind map под родителем). Ответ: `DeleteResponse`.\",\n valueSchema: \"→ DeleteResponse\",\n },\n createPinnedViews: {\n description: \"`POST /api/v1/{domain}/{parentId}/views/pinned`. Создать закреплённые представления. Тело: `CreateViewListReq`.\",\n valueSchema: \"CreateViewListReq → CreateViewListResp\",\n },\n listPinnedForParent: {\n description: \"`GET /api/v1/{domain}/{parentId}/views/pinned`. Список закреплённых; query как у `listUserForParent`.\",\n valueSchema: \"ViewListQuery → DomainViewMap[domain][]\",\n },\n deletePinnedView: {\n description: \"`DELETE .../views/pinned/{childId}`. Снять закрепление через удаление записи закрепления.\",\n valueSchema: \"→ DeleteResponse\",\n },\n getPinnedView: {\n description: \"`GET .../views/pinned/{childId}`.\",\n valueSchema: \"→ DomainViewMap[domain]\",\n },\n updatePinnedOrder: {\n description: \"`POST .../views/pinned/updateorder`. Тело: `UpdateViewListOrderReq`.\",\n valueSchema: \"UpdateViewListOrderReq → UpdateViewListOrderResp\",\n },\n updateUserViewOrder: {\n description: \"`POST .../views/user/updateorder`. Порядок пользовательских представлений.\",\n valueSchema: \"UpdateViewListOrderReq → UpdateViewListOrderResp\",\n },\n pinUserView: {\n description:\n \"`POST .../views/user/{childId}/pin`. Query `alias`. Ответ: `ObjectInfo`. Закрепить пользовательское представление.\",\n valueSchema: \"query alias → ObjectInfo\",\n },\n unpinUserView: {\n description:\n \"`POST .../unpin`. Для домена **`contacts`** путь: `.../views/pinned/{childId}/unpin`; для остальных (`notes`, `contexts`, `resources`, `services`, `cases`, `calendars`): `.../views/user/{childId}/unpin`. Query `alias`. Ответ: `ObjectInfo`.\",\n valueSchema: \"query alias → ObjectInfo\",\n usage: \"Вызывай `TorrowClient.views.unpinUserView` — SDK выбирает сегмент `user` или `pinned` автоматически.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createViewListReqFieldDocEntries = {\n childIdList: {\n description: \"Список id дочерних элементов, для которых создаются представления под выбранным родителем.\",\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 success: {\n description: \"Флаг успешного удаления view.\",\n valueSchema: \"boolean\",\n },\n deletedCount: {\n description: \"Количество удалённых записей (обычно 1).\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocs = mapFieldDocsToStrings(viewsSdkMethodFieldDocEntries);\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 viewsSdkMethodFieldDocEntries,\n} from \"./views-field-docs.js\";\n\nexport const mcpViewsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ViewsSdkMethods: { ...viewsSdkMethodFieldDocEntries },\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/** Сегмент пути `/api/v1/{segment}/...` — не отдельная схема OpenAPI, а параметр SDK. */\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`. Тело: `IncludeToParentReq`. Ответ: `IncludeExcludeResp`. Включает элементы в иерархию под родителем.\",\n valueSchema: \"IncludeToParentReq → IncludeExcludeResp\",\n },\n includeForUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/foruser`. Тело: `IncludeForUserReq`. Ответ: `IncludeExcludeResp`. Персональный mind map пользователя под узлом `parentId`.\",\n valueSchema: \"IncludeForUserReq → IncludeExcludeResp\",\n },\n excludeFromParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/items`. Тело: `ExcludeReq`. Ответ: `ExcludeResp`. Отвязка от родителя.\",\n valueSchema: \"ExcludeReq → ExcludeResp\",\n },\n excludeFromUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/fromuser`. Тело: `ExcludeReq`. Ответ: `ExcludeResp`. Убрать из персонального представления.\",\n valueSchema: \"ExcludeReq → ExcludeResp\",\n },\n includeToGroups: {\n description:\n \"`PUT /api/v1/{domain}/include/togroups`. Тело: `IncludeToGroupsReq`. Ответ: `IncludeExcludeResp`. Массовое включение в несколько групп.\",\n valueSchema: \"IncludeToGroupsReq → IncludeExcludeResp\",\n },\n excludeFromGroups: {\n description:\n \"`PUT /api/v1/{domain}/exclude/fromgroups`. Тело: `ExcludeFromGroupsReq`. Ответ: `ExcludeResp`.\",\n valueSchema: \"ExcludeFromGroupsReq → ExcludeResp\",\n },\n saveToMindMap: {\n description:\n \"`PUT /api/v1/{domain}/{itemId}/savetomindmap`. Тело: `SaveItemToMindMapReq`. Ответ: `Participation`. Обновить положение/alias/участие узла в карте.\",\n valueSchema: \"SaveItemToMindMapReq → Participation\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const relationsApiDomainFieldDocEntries = {\n segment: {\n description:\n \"Имя REST-коллекции элемента. Определяет префикс URL: `/api/v1/{segment}/...`. Для сущности Resource в API используется `resources` (в SDK фасад ресурсов — `resourceItems`).\",\n examples: [\"contacts\", \"notes\", \"contexts\", \"resources\", \"services\", \"cases\", \"calendars\"],\n usage:\n \"Один и тот же набор операций include/exclude/savetomindmap повторяется для каждого типа элемента в Swagger; отличие только в сегменте пути.\",\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\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: \"Новый или текущий родительский узел в mind map; `null` — согласно правилам API (корень или снятие привязки).\",\n valueSchema: \"string | null\",\n },\n alias: {\n description: \"Отображаемый псевдоним узла в карте.\",\n valueSchema: \"string | null\",\n },\n offlinable: {\n description: \"Доступность узла в офлайн-режиме (флаг клиента/сервера).\",\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 relationsApiDomainFieldDocs = mapFieldDocsToStrings(\n relationsApiDomainFieldDocEntries as Record<string, ItemFieldDoc>,\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 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 (кроме `RelationsApiDomain`).\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 { 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 itemPropertiesFieldDocEntries,\n groupItemPropertiesFieldDocEntries,\n relationsApiDomainFieldDocEntries,\n relationsSdkMethodFieldDocEntries,\n saveItemToMindMapReqFieldDocEntries,\n} from \"./relations-field-docs.js\";\n\nexport const mcpRelationFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы класса `TorrowClient.relations` ↔ OpenAPI пути и схемы тел. */\n RelationsSdkMethods: { ...relationsSdkMethodFieldDocEntries },\n RelationsApiDomain: { ...relationsApiDomainFieldDocEntries },\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 ...mcpOperationsFieldCatalog,\n};\n\nexport { mcpAuthFieldCatalog };\nexport { mcpSearchFieldCatalog };\nexport { mcpOperationsFieldCatalog };\nexport { mcpBookingFieldCatalog };\nexport { mcpViewsFieldCatalog };\nexport { mcpUserProfilesFieldCatalog };\n"],"mappings":"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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,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"]}