@torrow/sdk-docs 0.17.2 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +88 -9
- package/dist/index.js +91 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/field-docs/item-patch-field-docs.ts","../../../src/field-docs/sdk-error-field-docs.ts","../../../src/resources/common/implicit-tag-params.ts","../../../src/resources/services/behavior-settings.ts","../../../src/field-docs/service-behavior-settings-field-docs.ts","../../../src/field-docs/field-doc-entry.ts","../../../src/field-docs/item-create-field-docs.ts","../../../src/field-docs/item-delete-query-field-docs.ts","../../../src/field-docs/item-crud-options-field-docs.ts","../../../src/field-docs/torrow-item-base.ts","../../../src/field-docs/nested/contact-visit-card.ts","../../../src/field-docs/contact-item.ts","../../../src/field-docs/note-item.ts","../../../src/field-docs/notes-field-docs.ts","../../../src/resources/contexts/context-icon-preset.ts","../../../src/field-docs/context-item.ts","../../../src/field-docs/calendar-item.ts","../../../src/field-docs/loyalty-system-item.ts","../../../src/field-docs/session-checkin-field-docs.ts","../../../src/field-docs/resource-item.ts","../../../src/field-docs/service-item.ts","../../../src/field-docs/case-item.ts","../../../src/field-docs/nested/object-info.ts","../../../src/field-docs/nested/personal-info.ts","../../../src/field-docs/mcp-field-catalog.ts","../../../src/field-docs/booking-wizard-field-docs.ts","../../../src/field-docs/mcp-booking-catalog.ts","../../../src/field-docs/auth-token-field-docs.ts","../../../src/field-docs/mcp-auth-catalog.ts","../../../src/field-docs/search-field-docs.ts","../../../src/field-docs/mcp-search-catalog.ts","../../../src/field-docs/mcp-notes-catalog.ts","../../../src/field-docs/resource-patch-field-docs.ts","../../../src/field-docs/case-patch-field-docs.ts","../../../src/field-docs/item-price-patch-field-docs.ts","../../../src/field-docs/service-patch-field-docs.ts","../../../src/field-docs/note-calendar-patch-field-docs.ts","../../../src/field-docs/loyalty-system-patch-field-docs.ts","../../../src/field-docs/contact-patch-field-docs.ts","../../../src/field-docs/loyalty-access-field-docs.ts","../../../src/field-docs/operations-struct-field-docs.ts","../../../src/field-docs/block-reason-field-docs.ts","../../../src/field-docs/api-keys-field-docs.ts","../../../src/field-docs/contact-communication-field-docs.ts","../../../src/field-docs/item-social-facet-field-docs.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/resources/auth/auth-enum-values.ts","../../../src/resources/common/anyone-access.ts","../../../src/resources/common/available-resources.ts","../../../src/resources/cases/types.ts","../../../src/resources/contacts/types.ts","../../../src/resources/notes/types.ts","../../../src/resources/common/personal-list.ts","../../../src/resources/common/participation-field.ts","../../../src/resources/services/types.ts","../../../src/resources/common/payment-provider-type.ts","../../../src/resources/common/usage-condition-type.ts","../../../src/resources/resources/types.ts","../../../src/resources/common/user-access-level.ts","../../../src/resources/loyalty-systems/types.ts","../../../src/field-docs/shared-enum-field-docs.ts","../../../src/field-docs/torrow-id-field-docs.ts","../../../src/field-docs/mcp-operations-catalog.ts","../../../src/field-docs/user-profiles-field-docs.ts","../../../src/field-docs/mcp-user-profiles-catalog.ts","../../../src/field-docs/views-field-docs.ts","../../../src/field-docs/mcp-views-catalog.ts","../../../src/field-docs/relations-field-docs.ts","../../../src/field-docs/mcp-relation-catalog.ts"],"sourcesContent":["import type { ContextsFacade } from \"../resources/contexts/ContextsFacade.js\";\nimport type { ContextItemPatch } from \"../resources/contexts/types.js\";\nimport type {\n TorrowItemPatchOptions,\n TorrowItemPatchResult,\n TorrowItemPatchFields,\n TorrowItemPatchImage,\n} from \"../resources/common/item-patch-types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие опции patch; отключить CAS или включить announcement нельзя. */\nexport const itemPatchOptionsFieldDocEntries = {\n versionToCheck: {\n description:\n \"Ожидаемая положительная int32 версия всего item; отсутствие использует внутренний GET, сравнение до no-op.\",\n },\n signal: { description: \"Отмена GET/PUT; отмена после dispatch не доказывает отсутствие изменения.\" },\n} satisfies Record<keyof TorrowItemPatchOptions, ItemFieldDoc>;\n/** Результат без обязательного readback. */\nexport const itemPatchResultFieldDocEntries = {\n itemId: { description: \"Канонический проверенный ID цели.\" },\n item: {\n description: \"Реальный GET при no-op либо PUT ACK после доменной проекции; версия только item.meta.version.\",\n },\n changed: { description: \"false: PUT отсутствует; true: matching ACK подтверждает запись основного документа.\" },\n} satisfies Record<keyof TorrowItemPatchResult<unknown>, ItemFieldDoc>;\n/** Все и только подтверждённые поля root Context update. */\nexport const contextItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла; null снимает изображение; URL/eTag не принимаются.\" },\n color: { description: \"#RRGGBB; null/empty не поддерживаются. Сервер может нормализовать регистр.\" },\n description: { description: \"Строка либо null; null/empty очищает описание.\" },\n} satisfies Record<keyof ContextItemPatch, ItemFieldDoc>;\n/** Метод конкретного фасада, не новый универсальный метод Core. */\nexport const contextsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/contexts/{id}; поля name/image/color/description, Full/UpdateItem/version обязательны; no-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: ContextItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ContextItem>\",\n },\n} satisfies Record<Extract<keyof ContextsFacade, \"patch\">, ItemFieldDoc>;\n\n/** Общие поля подключаются только при подтверждённой root редактируемости. */\nexport const itemPatchFieldsFieldDocEntries = {\n name: { description: \"Непустое название без trim; пропуск сохраняет.\" },\n image: { description: \"Ссылка {id} загруженного файла; null снимает изображение, пропуск сохраняет.\" },\n} satisfies Record<keyof TorrowItemPatchFields, ItemFieldDoc>;\n/** Вход файла не принимает URL или серверные метаданные. */\nexport const itemPatchImageFieldDocEntries = {\n id: { description: \"Непустой ID файла, который загружается отдельным API до patch.\" },\n} satisfies Record<keyof TorrowItemPatchImage, ItemFieldDoc>;\n","import {\n FileMetadataErrorReason,\n FileMetadataOperation,\n FileMetadataFailureAt,\n type FileMetadataErrorDetail,\n AuthSessionEffectStep,\n AuthSessionErrorReason,\n OtpErrorReason,\n TorrowSdkErrorDomain,\n TorrowSdkErrorCategory,\n TorrowSdkEffectArea,\n TorrowSdkEffectState,\n TorrowSdkRequestState,\n ItemPatchEffectStep,\n type ItemPatchErrorDetail,\n type AuthSessionErrorDetail,\n type OtpErrorDetail,\n} from \"../http/TorrowSdkError.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие причины SDK, независимо от результата записи. */\nexport const torrowSdkErrorCategoryFieldDocEntries = {\n [TorrowSdkErrorCategory.InvalidInput]: { description: \"Неверные параметры выбранной операции.\" },\n [TorrowSdkErrorCategory.InvalidState]: { description: \"Текущее состояние не позволяет выполнить операцию.\" },\n [TorrowSdkErrorCategory.AccessDenied]: { description: \"Подтверждённый отказ доступа, включая HTTP 403.\" },\n [TorrowSdkErrorCategory.InsufficientData]: {\n description: \"Недостаточно данных для безопасного предметного действия.\",\n },\n [TorrowSdkErrorCategory.InvalidResponse]: {\n description: \"Полученное тело или подтверждение не соответствует контракту.\",\n },\n [TorrowSdkErrorCategory.VersionConflict]: {\n description: \"Доказанный локальный или серверный конфликт версии; один HTTP 409/500 этого не доказывает.\",\n },\n [TorrowSdkErrorCategory.AuthenticationRequired]: { description: \"Требуется аутентификация, включая HTTP 401.\" },\n [TorrowSdkErrorCategory.UnsupportedOperation]: { description: \"Выбранная возможность не поддерживается.\" },\n [TorrowSdkErrorCategory.RateLimited]: {\n description: \"Ограничение частоты, включая HTTP 429; backoff выбирает приложение.\",\n },\n [TorrowSdkErrorCategory.HttpFailure]: { description: \"Прочий HTTP-отказ; исходный статус отделён от категории.\" },\n [TorrowSdkErrorCategory.TransportFailure]: {\n description: \"Распознанный транспортный сбой; текст причины не является эвристикой.\",\n },\n [TorrowSdkErrorCategory.StorageFailure]: { description: \"Сбой хранилища внутри выбранной составной операции.\" },\n [TorrowSdkErrorCategory.Cancelled]: { description: \"Отмена; после начала отправки не доказывает отсутствие записи.\" },\n [TorrowSdkErrorCategory.Unknown]: {\n description: \"Причина зависимости не распознана; исходная диагностика доступна явно.\",\n },\n} satisfies Record<TorrowSdkErrorCategory, ItemFieldDoc>;\n/** Маркер запроса относится только к указанному fetch, не к общей истории исполнения. */\nexport const torrowSdkRequestStateFieldDocEntries = {\n [TorrowSdkRequestState.NotStarted]: {\n description: \"fetch соответствующего запроса ещё не вызван; более ранние шаги могли выполниться.\",\n },\n [TorrowSdkRequestState.Started]: { description: \"Начат fetch; это не подтверждает доставку или применение записи.\" },\n} satisfies Record<TorrowSdkRequestState, ItemFieldDoc>;\n/** Области описанных предметных изменений. */\nexport const torrowSdkEffectAreaFieldDocEntries = {\n [TorrowSdkEffectArea.Remote]: { description: \"Выбранное изменение на сервере.\" },\n [TorrowSdkEffectArea.SessionMemory]: { description: \"Изменение памяти текущей сессии.\" },\n [TorrowSdkEffectArea.Storage]: { description: \"Изменение постоянного хранилища токенов.\" },\n} satisfies Record<TorrowSdkEffectArea, ItemFieldDoc>;\n/** Доказанность описанного изменения, независимо от причины отказа. */\nexport const torrowSdkEffectStateFieldDocEntries = {\n [TorrowSdkEffectState.NotApplied]: { description: \"Доказано отсутствие конкретного изменения.\" },\n [TorrowSdkEffectState.Applied]: {\n description: \"Конкретное изменение подтверждено; последующий сбой его не отменяет.\",\n },\n [TorrowSdkEffectState.Unknown]: {\n description: \"Исход конкретного изменения неизвестен; не повторять запись вслепую.\",\n },\n} satisfies Record<TorrowSdkEffectState, ItemFieldDoc>;\n/** Домены типизированных уточнений общей ошибки. */\nexport const torrowSdkErrorDomainFieldDocEntries = {\n [TorrowSdkErrorDomain.FileMetadata]: { description: \"Чтение метаданных файла по свежей Full-карточке без записи.\" },\n [TorrowSdkErrorDomain.ItemPatch]: {\n description:\n \"Частичное изменение item через GET/CAS PUT; результат root записи описывается отдельным эффектом Write.\",\n },\n [TorrowSdkErrorDomain.BehaviorSettings]: {\n description: \"Настройки поведения Service или Resource; категория описывает отказ без дополнительной reason.\",\n },\n [TorrowSdkErrorDomain.Otp]: {\n description:\n \"Пошаговый OTP и предметные wire-отказы входа; уточнение может содержать проверенные числовые подсказки ожидания.\",\n },\n [TorrowSdkErrorDomain.AuthSession]: {\n description: \"Сессия токенов и составной вход; уточнение готовности сессии или сбоя callback.\",\n },\n} satisfies Record<TorrowSdkErrorDomain, ItemFieldDoc>;\n/** Безопасное уточнение частичного изменения item. */\nexport const itemPatchErrorDetailFieldDocEntries = {\n domain: { description: \"Область ошибки частичного изменения элемента.\", valueSchema: \"TorrowSdkErrorDomain\" },\n reason: { description: \"Не используется; причина задаётся общей category.\" },\n} satisfies Record<keyof ItemPatchErrorDetail, ItemFieldDoc>;\n/** Эффект только основного документа, без обещания серверной транзакции. */\nexport const itemPatchEffectStepFieldDocEntries = {\n [ItemPatchEffectStep.Write]: {\n description:\n \"Remote: CAS PUT основного item; до dispatch NotApplied, без ACK после dispatch Unknown, после matching ACK Applied.\",\n },\n} satisfies Record<ItemPatchEffectStep, ItemFieldDoc>;\n/** Дополнительные причины OTP; общие ошибки ввода и ответа описывает category. */\nexport const otpErrorReasonFieldDocEntries = {\n [OtpErrorReason.InvalidChallenge]: {\n description:\n \"Продолжение OTP повреждено, противоречиво или просрочено; нужен новый вход вместо повторного complete.\",\n },\n [OtpErrorReason.UnsupportedMethod]: {\n description:\n \"Фактический метод подтверждения не поддерживается для этого аккаунта; preferredMethod не гарантирует выбор сервером.\",\n },\n [OtpErrorReason.AuthHeaderMissing]: {\n description: \"Сервер сообщил AUTH_HEADER_MISSING; проверить Basic приложения и appCredentials.\",\n },\n [OtpErrorReason.CodeRequestLimitExceeded]: {\n description: \"Сервер ограничил отправку кода; приложение выбирает паузу, используя retryAfterSeconds при наличии.\",\n },\n} satisfies Record<OtpErrorReason, ItemFieldDoc>;\n/** Дополнительные причины сессии; этапы storage различает failureAt. */\nexport const authSessionErrorReasonFieldDocEntries = {\n [AuthSessionErrorReason.SessionNotReady]: {\n description:\n \"Auth-сессия ещё не готова к выдаче токенов; существующий deep-link polling может продолжить ожидание.\",\n },\n [AuthSessionErrorReason.CallbackFailed]: {\n description:\n \"Пользовательский callback завершился ошибкой; уже подтверждённые шаги входа сохраняются в effects, внутренние действия callback не описываются.\",\n },\n} satisfies Record<AuthSessionErrorReason, ItemFieldDoc>;\n/** Предметные шаги auth; результат каждого шага отдельно задаёт state. */\nexport const authSessionEffectStepFieldDocEntries = {\n [AuthSessionEffectStep.CreateAuthSession]: {\n description: \"Remote: создание серверного продолжения входа по ссылке; не подтверждает завершение входа.\",\n },\n [AuthSessionEffectStep.CloseSession]: {\n description:\n \"SessionMemory: закрытие локальной сессии при logout; последующий отказ storage не открывает её снова.\",\n },\n [AuthSessionEffectStep.IssueTokens]: {\n description: \"Remote: выдача токенов; Applied не подтверждает их сохранение в памяти или storage.\",\n },\n [AuthSessionEffectStep.RefreshTokens]: {\n description: \"Remote: обновление токенов; сбой последующего сохранения не отменяет подтверждённый refresh.\",\n },\n [AuthSessionEffectStep.RevokeTokens]: {\n description:\n \"Remote: отзыв токенов при logout; подавленный отказ может оставить Unknown, даже если локальная очистка выполнена.\",\n },\n [AuthSessionEffectStep.SendCode]: {\n description: \"Remote: отправка OTP; последующая ошибка интерфейса не отменяет подтверждение отправки.\",\n },\n [AuthSessionEffectStep.SetTokens]: {\n description: \"SessionMemory: установка снимка токенов; Applied сохраняется при последующем storage-сбое.\",\n },\n [AuthSessionEffectStep.ClearTokens]: {\n description: \"SessionMemory: очистка токенов в памяти; не подтверждает очистку постоянного хранилища.\",\n },\n [AuthSessionEffectStep.SaveTokens]: {\n description:\n \"Storage: сохранение снимка токенов; исключение save оставляет Unknown, поскольку запись могла выполниться.\",\n },\n [AuthSessionEffectStep.ClearStorage]: {\n description: \"Storage: сохранение очищенного снимка; не обещает физическое удаление файла или ключа хранилища.\",\n },\n} satisfies Record<AuthSessionEffectStep, ItemFieldDoc>;\n/** Безопасные поля уточнения OTP; cleanup доступен только через getSensitiveDetails(). */\nexport const otpErrorDetailFieldDocEntries = {\n domain: {\n description: \"Область ошибки OTP для типизированной обработки уточнения.\",\n valueSchema: \"TorrowSdkErrorDomain\",\n },\n reason: {\n description:\n \"Необязательная дополнительная причина; при отсутствии достаточно category. Отсутствие reason не доказывает отсутствие изменений.\",\n valueSchema: \"OtpErrorReason\",\n },\n nextSendAtMs: {\n description:\n \"Необязательное проверенное время следующей отправки: Unix milliseconds. Отсутствие означает, что временная подсказка не предоставлена.\",\n },\n retryAfterSeconds: {\n description:\n \"Необязательная проверенная длительность ожидания в секундах; приложение определяет backoff и повтор. Отсутствие не означает нулевое ожидание.\",\n },\n} satisfies Record<keyof OtpErrorDetail, ItemFieldDoc>;\n/** Безопасные поля уточнения сессии; результат изменений описывают отдельные effects. */\nexport const authSessionErrorDetailFieldDocEntries = {\n domain: {\n description: \"Область ошибки сессии или составного входа.\",\n valueSchema: \"TorrowSdkErrorDomain\",\n },\n reason: {\n description:\n \"Необязательное уточнение готовности сессии или ошибки callback; при отсутствии достаточно category. StorageFailure уточняется стадией failureAt.\",\n valueSchema: \"AuthSessionErrorReason\",\n },\n} satisfies Record<keyof AuthSessionErrorDetail, ItemFieldDoc>;\n/** Безопасные атрибуты ошибки; чувствительные данные не являются открытыми полями. */\nexport const torrowSdkErrorFieldDocEntries = {\n category: { description: \"Общая причина; не определяет результат записи.\", valueSchema: \"TorrowSdkErrorCategory\" },\n http: {\n description:\n \"Необязательные безопасные HTTP-метаданные; исходное тело и URL доступны только getSensitiveDetails().\",\n valueSchema: \"TorrowSdkHttpDetails\",\n },\n detail: {\n description:\n \"Необязательное типизированное предметное уточнение: domain и полезная optional reason; отсутствие reason не определяет результат изменений.\",\n valueSchema:\n \"BehaviorSettingsErrorDetail | ItemPatchErrorDetail | OtpErrorDetail | AuthSessionErrorDetail | FileMetadataErrorDetail\",\n },\n request: {\n description: \"Необязательный маркер fetch соответствующего запроса; отсутствие не означает NotStarted.\",\n valueSchema: \"TorrowSdkRequestState\",\n },\n operation: { description: \"Необязательное стабильное имя составной операции, без пользовательских аргументов.\" },\n failureAt: { description: \"Необязательная локальная стадия текущего сбоя; не общий каталог SDK.\" },\n effects: {\n description:\n \"Необязательный immutable список описанных изменений; отсутствие означает отсутствие сведений, а не отсутствие изменений.\",\n valueSchema: \"TorrowSdkEffect[]\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n/** HTTP-код отделён от общей категории и предметной причины. */\nexport const torrowSdkHttpDetailsFieldDocEntries = {\n status: { description: \"Исходный числовой HTTP-статус ответа.\" },\n apiCode: { description: \"Необязательный исходный код API, сохранённый отдельно от категории SDK.\" },\n apiErrorName: {\n description: \"Необязательное известное SDK кодовое имя; произвольные title/message сюда не копируются.\",\n },\n requestId: { description: \"Необязательный идентификатор серверного запроса для диагностики.\" },\n traceIdentifier: { description: \"Необязательный идентификатор серверной трассировки.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Один предметный шаг; не трасса всех запросов или авторизации. */\nexport const torrowSdkEffectFieldDocEntries = {\n area: { description: \"Область описанного изменения.\", valueSchema: \"TorrowSdkEffectArea\" },\n step: {\n description: \"Локальный enum шага настроек, patch или сессии; не универсальный список всех действий SDK.\",\n valueSchema: \"BehaviorSettingsEffectStep | ItemPatchEffectStep | AuthSessionEffectStep\",\n },\n state: { description: \"Доказанность результата конкретного шага.\", valueSchema: \"TorrowSdkEffectState\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Дополнительные причины недостаточности данных при чтении метаданных. */\nexport const fileMetadataErrorReasonFieldDocEntries = {\n [FileMetadataErrorReason.SubscriptionIdUnavailable]: {\n description: \"Подписка не содержит subscriptionId; полнота выбора изображения не подтверждена.\",\n },\n [FileMetadataErrorReason.ContentTypeUnavailable]: {\n description: \"Полнота карточки не подтверждена; отсутствие файла неизвестно.\",\n },\n [FileMetadataErrorReason.SubscriptionIsNotValid]: { description: \"Подписка не позволяет читать Full-карточку.\" },\n [FileMetadataErrorReason.FileIdUnavailable]: {\n description: \"Ссылка на файл не содержит ID; отсутствие не подтверждено.\",\n },\n} satisfies Record<FileMetadataErrorReason, ItemFieldDoc>;\n/** Составные операции чтения метаданных. */\nexport const fileMetadataOperationFieldDocEntries = {\n [FileMetadataOperation.GetInitialSubscriptionImageInfo]: {\n description: \"Изображение начальной подписки программы из одной полной карточки.\",\n },\n [FileMetadataOperation.GetImageInfo]: { description: \"Аватар: полная карточка и при наличии image/info.\" },\n [FileMetadataOperation.GetFileInfo]: { description: \"Выбранное вложение заметки.\" },\n [FileMetadataOperation.GetPhotoInfo]: { description: \"Выбранная фотография контакта.\" },\n [FileMetadataOperation.GetSubscriptionImageInfo]: {\n description: \"Изображение выбранной подписки из одного GET Full-карты.\",\n },\n} satisfies Record<FileMetadataOperation, ItemFieldDoc>;\n/** Стадии отказа составного чтения. */\nexport const fileMetadataFailureAtFieldDocEntries = {\n [FileMetadataFailureAt.ValidateInput]: { description: \"Проверка аргументов до HTTP.\" },\n [FileMetadataFailureAt.ReadItem]: { description: \"Чтение доменной карточки.\" },\n [FileMetadataFailureAt.ValidateItem]: { description: \"Проверка Full и выбранной связи.\" },\n [FileMetadataFailureAt.ReadMetadata]: { description: \"Чтение metadata endpoint.\" },\n [FileMetadataFailureAt.ValidateMetadata]: { description: \"Проверка минимальной формы metadata.\" },\n} satisfies Record<FileMetadataFailureAt, ItemFieldDoc>;\n/** Безопасное предметное уточнение чтения файла. */\nexport const fileMetadataErrorDetailFieldDocEntries = {\n domain: { description: \"Домен чтения метаданных.\", valueSchema: \"TorrowSdkErrorDomain\" },\n reason: { description: \"Необязательная причина недостаточности данных.\", valueSchema: \"FileMetadataErrorReason\" },\n} satisfies Record<keyof FileMetadataErrorDetail, ItemFieldDoc>;\n/** Общий каталог безопасных ошибок SDK. */\nexport const mcpSdkErrorFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n FileMetadataErrorReason: fileMetadataErrorReasonFieldDocEntries,\n FileMetadataOperation: fileMetadataOperationFieldDocEntries,\n FileMetadataFailureAt: fileMetadataFailureAtFieldDocEntries,\n FileMetadataErrorDetail: fileMetadataErrorDetailFieldDocEntries,\n TorrowSdkError: torrowSdkErrorFieldDocEntries,\n TorrowSdkHttpDetails: torrowSdkHttpDetailsFieldDocEntries,\n TorrowSdkErrorCategory: torrowSdkErrorCategoryFieldDocEntries,\n TorrowSdkRequestState: torrowSdkRequestStateFieldDocEntries,\n TorrowSdkEffect: torrowSdkEffectFieldDocEntries,\n TorrowSdkEffectArea: torrowSdkEffectAreaFieldDocEntries,\n TorrowSdkEffectState: torrowSdkEffectStateFieldDocEntries,\n TorrowSdkErrorDomain: torrowSdkErrorDomainFieldDocEntries,\n ItemPatchErrorDetail: itemPatchErrorDetailFieldDocEntries,\n ItemPatchEffectStep: itemPatchEffectStepFieldDocEntries,\n OtpErrorReason: otpErrorReasonFieldDocEntries,\n AuthSessionErrorReason: authSessionErrorReasonFieldDocEntries,\n AuthSessionEffectStep: authSessionEffectStepFieldDocEntries,\n OtpErrorDetail: otpErrorDetailFieldDocEntries,\n AuthSessionErrorDetail: authSessionErrorDetailFieldDocEntries,\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 hideMessengerConnectUi: \"HideMessengerNotifications\",\n /**\n * Резерв под серверную договоренность. Формат в `tags`: `NNN:payment_redirect_timeout_sec`.\n * Непосредственно в текущем `torrow-apps` литерал пока не используется.\n */\n paymentRedirectTimeoutSec: \":payment_redirect_timeout_sec\",\n} as const;\n\n/** Именованные виды реестра для сравнения в реализации. */\nexport enum ServiceImplicitTagKind {\n /** Текстовый параметр. */\n String = \"string\",\n /** Положительное целое число. */\n PositiveInt = \"positiveInt\",\n /** Флаг по точному совпадению тега. */\n ExactFlag = \"exactFlag\",\n /** Задержка автозапуска уведомлений. */\n AutoStart = \"autoStart\",\n /** Текст и ссылка соглашения. */\n Agreement = \"agreement\",\n}\n\ntype PrimitiveTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: `${ServiceImplicitTagKind.String | ServiceImplicitTagKind.PositiveInt}`;\n suffixes: readonly string[];\n caseInsensitive?: boolean;\n};\n\ntype ExactTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: `${ServiceImplicitTagKind.ExactFlag}`;\n tokens: readonly string[];\n};\n\ntype AutoStartTagConfig = {\n field: \"autoStartNotificationDelaySeconds\";\n kind: `${ServiceImplicitTagKind.AutoStart}`;\n suffixes: readonly string[];\n};\n\ntype AgreementTagConfig = {\n field: \"agreementItems\";\n kind: `${ServiceImplicitTagKind.Agreement}`;\n textSuffix: string;\n linkSuffix: string;\n};\n\nexport type ServiceImplicitTagConfig = PrimitiveTagConfig | ExactTagConfig | AutoStartTagConfig | AgreementTagConfig;\n\n// Только очистка при записи: monolith продолжает скрывать UI по старому тегу.\nconst OBSOLETE_MESSENGER_CONNECT_UI_TAG = \"HideTelegramNotificationBot\";\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: \"exactFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUi],\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\n/** Предметные значения; версия услуги передаётся отдельно. */\nexport type ServiceImplicitTagParams = {\n /** Пользовательское название заказа для отображения в приложении; не меняет серверное имя создаваемого заказа. */\n orderName?: string;\n /** Часовой пояс отображения услуги, например Europe/Moscow. */\n timeZone?: string;\n /** За сколько минут до начала запрещена отмена участия. */\n disableCancelMyParticipationBeforeMinutes?: number;\n /** За сколько минут до начала запрещён перенос заказа. */\n disableUpdateOrderTimeBeforeMinutes?: number;\n /** Сообщение пользователю при недоступной записи. */\n unavailableBookingMessage?: string;\n /** Название поля со скидкой в процентах. */\n discountPercentageFieldName?: string;\n /** Интервал между событиями в секундах. */\n marginTimeSec?: number;\n /** Задержка автоматического подключения уведомлений в секундах. */\n autoStartNotificationDelaySeconds?: number;\n /**\n * Скрывает UI подключения уведомлений Telegram и Max через точный тег `HideMessengerNotifications`.\n * BehaviorSettings API также читает точный legacy alias; в его состоянии флаг всегда boolean.\n */\n hideMessengerConnectUi?: boolean;\n /** Полный набор соглашений; пустой массив очищает набор. */\n agreementItems?: {\n /** Положительный уникальный номер соглашения. */\n index: number;\n /** Текст соглашения; хотя бы text или link должны быть заданы. */\n text?: string;\n /** Ссылка соглашения; кодирование хранения выполняет SDK. */\n link?: string;\n }[];\n /** Таймаут перехода после оплаты в секундах. */\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)) {\n return undefined;\n }\n\n return tag.slice(0, tag.length - suffix.length);\n }\n if (!tag.endsWith(suffix)) {\n return undefined;\n }\n\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) {\n return prefix;\n }\n }\n\n return undefined;\n}\n\nfunction toPositiveInt(raw: string | undefined): number | undefined {\n if (!raw) {\n return undefined;\n }\n const value = Number.parseInt(raw.trim(), 10);\n\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) {\n return sec;\n }\n }\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]) {\n return undefined;\n }\n const index = Number.parseInt(match[2], 10);\n if (!Number.isFinite(index) || index <= 0) {\n return undefined;\n }\n\n return { index, value: match[1] };\n}\n\nfunction decodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https//\")) {\n return `https://${trimmed.slice(\"https//\".length)}`;\n }\n if (trimmed.startsWith(\"http//\")) {\n return `http://${trimmed.slice(\"http//\".length)}`;\n }\n\n return trimmed;\n}\n\nfunction encodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https://\")) {\n return `https//${trimmed.slice(\"https://\".length)}`;\n }\n if (trimmed.startsWith(\"http://\")) {\n return `http//${trimmed.slice(\"http://\".length)}`;\n }\n\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 === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.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 === ServiceImplicitTagKind.String) {\n if (raw?.trim()) {\n mutable[config.field] = raw.trim();\n }\n } else {\n const value = toPositiveInt(raw);\n if (value !== undefined) {\n mutable[config.field] = value;\n }\n }\n }\n if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n const hasAny = safeTags.some((tag) => config.tokens.some((token) => tag === token));\n if (hasAny) {\n mutable[config.field] = true;\n }\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) {\n break;\n }\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()].sort((a, b) => a.index - b.index).filter((x) => x.text || x.link);\n if (agreementItems.length) {\n mutable.agreementItems = agreementItems;\n }\n\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 === ServiceImplicitTagKind.String || x.kind === ServiceImplicitTagKind.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 === ServiceImplicitTagKind.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)) {\n continue;\n }\n if (agreement.text?.trim()) {\n tags.push(`${agreement.text.trim()}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.textSuffix}${agreement.index}`);\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\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 === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n const matched = config.suffixes.some(\n (suffix) => splitBySuffix(tag, suffix, config.caseInsensitive ?? false) !== undefined,\n );\n if (matched) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (config.tokens.some((token) => tag === token)) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.AutoStart) {\n const isAutoStart = config.suffixes.some((suffix) => tag.match(new RegExp(`^\\\\d+:${suffix}$`)) !== null);\n if (isAutoStart) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.Agreement) {\n if (\n parseAgreementIndexedTag(tag, config.textSuffix) !== undefined ||\n parseAgreementIndexedTag(tag, config.linkSuffix) !== undefined\n ) {\n return true;\n }\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(\n (tag) => tag !== OBSOLETE_MESSENGER_CONNECT_UI_TAG && !isImplicitServiceTag(tag),\n );\n const nextImplicit = buildServiceImplicitTags(params, options);\n\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\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) {\n return \"\";\n }\n const normalized = stepName.trimStart();\n\n return normalized.startsWith(\"*\") ? normalized.slice(1).trimStart() : stepName;\n}\n\n/** Парсинг поведения ресурса из `resource.tags`. */\nexport function parseResourceBehaviorSettings(tags: readonly string[] | undefined | null): ResourceBehaviorSettings {\n // Resource сохраняет историческую семантику независимо от нового Service reader.\n const marginTimeSec = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.marginTime));\n const lockId = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.lockId));\n const result: ResourceBehaviorSettings = {};\n if (marginTimeSec !== undefined) {\n result.marginTimeSec = marginTimeSec;\n }\n if (lockId !== undefined) {\n result.lockId = lockId;\n }\n\n return result;\n}\n\n/** Сериализация/merge behavior параметров ресурса в `resource.tags`. */\nexport function mergeResourceBehaviorTags(\n baseTags: readonly string[] | undefined | null,\n settings: ResourceBehaviorSettings,\n): string[] {\n const safeBase = baseTags ?? [];\n const nonManaged = safeBase.filter(\n (tag) =>\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.marginTime) === undefined &&\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.lockId) === undefined,\n );\n const managed: string[] = [];\n if (isPositiveInt(settings.marginTimeSec)) {\n managed.push(`${settings.marginTimeSec}${SERVICE_IMPLICIT_TAG_SUFFIX.marginTime}`);\n }\n if (isPositiveInt(settings.lockId)) {\n managed.push(`${settings.lockId}${SERVICE_IMPLICIT_TAG_SUFFIX.lockId}`);\n }\n\n return [...nonManaged, ...managed];\n}\n","import { TorrowSdkErrorCategory } from \"../../http/TorrowSdkError.js\";\nimport { behaviorSettingsError } from \"../common/behavior-settings-errors.js\";\nimport {\n SERVICE_IMPLICIT_TAG_REGISTRY,\n ServiceImplicitTagKind,\n type ServiceImplicitTagConfig,\n} from \"../common/implicit-tag-params.js\";\nimport type { ServiceBehaviorSettings } from \"./types.js\";\n\n/** Причина неполного предметного чтения конкретной настройки. */\nexport enum ServiceBehaviorSettingsIssueReason {\n /** Есть некорректное значение; поле исключено из предметного снимка. */\n InvalidValue = \"InvalidValue\",\n /** Есть противоречивые значения; порядок не определяет результат. */\n AmbiguousValue = \"AmbiguousValue\",\n}\n/** Диагностика настройки без раскрытия внутреннего представления. */\nexport interface ServiceBehaviorSettingsIssue {\n /** Поле, значение которого не может быть достоверно прочитано. */\n field: keyof ServiceBehaviorSettings;\n /** Некорректное значение либо несколько противоречивых значений. */\n reason: ServiceBehaviorSettingsIssueReason;\n}\n/** Проверенное предметное состояние услуги. */\nexport interface ServiceBehaviorSettingsState {\n /** ID услуги, для которой выполнено чтение. */\n serviceId: string;\n /** Положительная int32 meta.version всей услуги, не отдельный счётчик настроек. */\n version: number;\n /** Прочитанные значения; поля с issues не являются полным снимком. */\n settings: ServiceBehaviorSettings;\n /** Проблемы предметного чтения; пустой массив означает полный снимок настроек. */\n issues: ServiceBehaviorSettingsIssue[];\n}\n/** Результат изменения; поля состояния имеют смысл из ServiceBehaviorSettingsState. */\nexport interface ServiceBehaviorSettingsUpdateResult extends ServiceBehaviorSettingsState {\n /** Был ли PUT; settings описывают ожидаемый результат, без автоматического readback. */\n changed: boolean;\n}\n/** Управление записью BehaviorSettings; проверку версии выбирает потребитель. */\nexport interface ServiceBehaviorSettingsUpdateOptions {\n /** Ожидаемая meta.version: 1..2147483647. При наличии включает проверку указанной версии. */\n versionToCheck?: number;\n /** true включает CAS по версии внутреннего GET, если versionToCheck не задан. По умолчанию CAS выключен. */\n checkVersion?: true;\n /** true (по умолчанию) сохраняет пропущенные поля; false полностью заменяет настройки. */\n mergeParameters?: boolean;\n /** Выбранный профиль только для внутреннего GET; не предоставляет право записи. */\n profileId?: string | null;\n /** Гостевой контекст только для GET; не Bearer и не право записи. */\n securityToken?: string | null;\n /** Создание объявления при PUT; отсутствие/null означает false. */\n isNeedAnnouncement?: boolean | null;\n /** Отмена чтения и записи; после отмены автоматических запросов нет. */\n signal?: AbortSignal;\n}\n/** Wire-полнота и разрешённая операция; не входят в предметные результаты. */\nenum BehaviorAccess {\n Full = \"Full\",\n NoRights = \"NoRights\",\n SubscriptionIsNotValid = \"SubscriptionIsNotValid\",\n SetItemTags = \"SetItemTags\",\n}\nenum BehaviorFlag {\n LegacyHide = \"HideTelegramNotificationBot\",\n}\nconst configs: readonly ServiceImplicitTagConfig[] = Object.values(SERVICE_IMPLICIT_TAG_REGISTRY);\n\n/** Проверяет положительную int32-версию независимо от TypeScript. */\nexport function isBehaviorVersion(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 2147483647;\n}\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n/** Валидирует GET до проекции; отсутствие данных не превращается в пустое состояние. */\nexport function validateBehaviorResponse(\n value: unknown,\n serviceId: string,\n): { tags: string[]; version: number; operations: unknown } {\n if (!record(value) || value.id !== serviceId) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n const personal = value.personalInfo;\n if (\n record(personal) &&\n (personal.itemContentType === BehaviorAccess.NoRights ||\n personal.itemContentType === BehaviorAccess.SubscriptionIsNotValid)\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.AccessDenied);\n }\n if (\n !record(personal) ||\n personal.itemContentType !== BehaviorAccess.Full ||\n value.tags == null ||\n !record(value.meta) ||\n !isBehaviorVersion(value.meta.version)\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InsufficientData);\n }\n if (!Array.isArray(value.tags) || !value.tags.every((tag): tag is string => typeof tag === \"string\")) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n const operations = personal.operationList;\n if (\n operations != null &&\n (!Array.isArray(operations) ||\n !operations.every(\n (operation) =>\n typeof operation === \"string\" || (typeof operation === \"number\" && Number.isSafeInteger(operation)),\n ))\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n\n return { tags: [...new Set(value.tags)], version: value.meta.version, operations };\n}\n/** Наличие данных или профиль не заменяют известное разрешение операции. */\nexport function assertBehaviorPermission(operations: unknown): void {\n if (!Array.isArray(operations)) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InsufficientData);\n }\n if (!operations.includes(BehaviorAccess.SetItemTags)) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.AccessDenied);\n }\n}\n\nfunction suffixPrefix(tag: string, suffix: string, ignoreCase = false): string | undefined {\n const matches = ignoreCase ? tag.toLowerCase().endsWith(suffix.toLowerCase()) : tag.endsWith(suffix);\n\n return matches ? tag.slice(0, -suffix.length) : undefined;\n}\nfunction positive(raw: string): number | undefined {\n const value = Number(raw);\n\n return /^\\d+$/.test(raw) && Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n/** Принадлежность семейству отделена от валидности значения: ошибочное выбранное поле можно заменить. */\nfunction prefix(tag: string, config: ServiceImplicitTagConfig): string | undefined {\n if (config.kind === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n for (const suffix of config.suffixes) {\n const value = suffixPrefix(tag, suffix, config.caseInsensitive);\n if (value !== undefined) {\n return value;\n }\n }\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (config.tokens.includes(tag) || tag === BehaviorFlag.LegacyHide) {\n return \"true\";\n }\n } else if (config.kind === ServiceImplicitTagKind.AutoStart) {\n for (const suffix of config.suffixes) {\n const value = suffixPrefix(tag, `:${suffix}`);\n if (value !== undefined) {\n return value;\n }\n }\n } else if (config.kind === ServiceImplicitTagKind.Agreement) {\n for (const suffix of [config.textSuffix, config.linkSuffix]) {\n const position = tag.lastIndexOf(suffix);\n if (position >= 0 && /^\\d+$/.test(tag.slice(position + suffix.length))) {\n return tag;\n }\n }\n }\n\n return undefined;\n}\n/** Читает все семейства без зависимости от порядка или одинаковых дублей. */\nexport function readBehaviorSettings(\n tags: readonly string[],\n): Pick<ServiceBehaviorSettingsState, \"settings\" | \"issues\"> {\n const settings: ServiceBehaviorSettings = { hideMessengerConnectUi: false };\n const issues: ServiceBehaviorSettingsIssue[] = [];\n const target = settings as Record<string, unknown>;\n for (const config of configs) {\n // Собираем выбранное семейство без зависимости от порядка/дублей ответа.\n const matching = [...new Set(tags)].filter((tag) => prefix(tag, config) !== undefined);\n if (!matching.length) {\n continue;\n }\n let invalid = false;\n let ambiguous = false;\n let result: unknown;\n if (config.kind === ServiceImplicitTagKind.Agreement) {\n // Соглашения агрегируются по index, конфликт любого атрибута делает набор неполным.\n const entries = new Map<number, { index: number; text?: string; link?: string }>();\n for (const tag of matching) {\n for (const [attribute, suffix] of [\n [\"text\", config.textSuffix],\n [\"link\", config.linkSuffix],\n ] as const) {\n const position = tag.lastIndexOf(suffix);\n if (position < 0 || !/^\\d+$/.test(tag.slice(position + suffix.length))) {\n continue;\n }\n const index = positive(tag.slice(position + suffix.length));\n let value = tag.slice(0, position).trim();\n if (attribute === \"link\") {\n value = value.replace(/^(https?)\\/\\//, \"$1://\");\n }\n if (!index || !value) {\n invalid = true;\n continue;\n }\n const entry = entries.get(index) ?? { index };\n if (entry[attribute] !== undefined && entry[attribute] !== value) {\n ambiguous = true;\n }\n entry[attribute] = value;\n entries.set(index, entry);\n }\n }\n result = [...entries.values()].sort((a, b) => a.index - b.index);\n } else {\n const values = new Set<string | number | boolean>();\n for (const tag of matching) {\n const raw = prefix(tag, config)!;\n const value =\n config.kind === ServiceImplicitTagKind.ExactFlag\n ? true\n : config.kind === ServiceImplicitTagKind.String\n ? raw.trim() || undefined\n : positive(raw);\n if (value === undefined) {\n invalid = true;\n } else {\n values.add(value);\n }\n }\n ambiguous = values.size > 1;\n result = [...values][0];\n }\n if (invalid || ambiguous) {\n // Неполное значение не выдаём за достоверное; другие семейства остаются читаемыми.\n issues.push({\n field: config.field,\n reason: invalid\n ? ServiceBehaviorSettingsIssueReason.InvalidValue\n : ServiceBehaviorSettingsIssueReason.AmbiguousValue,\n });\n } else {\n target[config.field] = result;\n }\n }\n\n return { settings, issues };\n}\n\n/** Нормализует и валидирует вход; undefined/null не служат неявной очисткой. */\nexport function normalizeBehaviorInput(input: ServiceBehaviorSettings): ServiceBehaviorSettings {\n function fail(): never {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidInput);\n }\n if (!record(input) || Object.keys(input).some((key) => !Object.hasOwn(SERVICE_IMPLICIT_TAG_REGISTRY, key))) {\n fail();\n }\n const output: Record<string, unknown> = {};\n for (const config of configs) {\n if (!Object.hasOwn(input, config.field)) {\n continue;\n }\n const value: unknown = input[config.field];\n if (config.kind === ServiceImplicitTagKind.String) {\n if (typeof value !== \"string\" || !value.trim()) {\n fail();\n }\n output[config.field] = value.trim();\n } else if (config.kind === ServiceImplicitTagKind.PositiveInt || config.kind === ServiceImplicitTagKind.AutoStart) {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n fail();\n }\n output[config.field] = value;\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (typeof value !== \"boolean\") {\n fail();\n }\n output[config.field] = value;\n } else {\n if (!Array.isArray(value)) {\n fail();\n }\n const seen = new Set<number>();\n output[config.field] = value\n .map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).some((key) => ![\"index\", \"text\", \"link\"].includes(key)) ||\n typeof entry.index !== \"number\" ||\n !Number.isSafeInteger(entry.index) ||\n entry.index <= 0 ||\n seen.has(entry.index)\n ) {\n fail();\n }\n seen.add(entry.index);\n const normalized: { index: number; text?: string; link?: string } = { index: entry.index };\n for (const attribute of [\"text\", \"link\"] as const) {\n if (Object.hasOwn(entry, attribute)) {\n if (typeof entry[attribute] !== \"string\" || !entry[attribute].trim()) {\n fail();\n }\n normalized[attribute] = entry[attribute].trim();\n }\n }\n if (!normalized.text && !normalized.link) {\n fail();\n }\n\n return normalized;\n })\n .sort((a, b) => a.index - b.index);\n }\n }\n\n return output as ServiceBehaviorSettings;\n}\n\n/** Формирует только выбранные семейства; порядок/кратность не входят в серверный контракт. */\nexport function mergeBehaviorSettings(\n tags: readonly string[],\n settings: ServiceBehaviorSettings,\n mergeParameters: boolean,\n): string[] {\n const selected = configs.filter((config) => !mergeParameters || Object.hasOwn(settings, config.field));\n const output = tags.filter((tag) => !selected.some((config) => prefix(tag, config) !== undefined));\n for (const config of selected) {\n const value = settings[config.field];\n if (value === undefined) {\n continue;\n }\n if (config.kind === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n output.push(`${value}${config.suffixes[0]}`);\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (value) {\n output.push(config.tokens[0]!);\n }\n } else if (config.kind === ServiceImplicitTagKind.AutoStart) {\n output.push(`${value}:${config.suffixes[0]}`);\n } else if (config.kind === ServiceImplicitTagKind.Agreement) {\n for (const entry of settings.agreementItems ?? []) {\n if (entry.text) {\n output.push(`${entry.text}${config.textSuffix}${entry.index}`);\n }\n if (entry.link) {\n output.push(`${entry.link.replace(/^(https?):\\/\\//, \"$1//\")}${config.linkSuffix}${entry.index}`);\n }\n }\n }\n }\n\n return [...new Set(output)];\n}\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { ServiceBehaviorSettingsIssueReason } from \"../resources/services/behavior-settings.js\";\nimport { BehaviorSettingsEffectStep } from \"../http/TorrowSdkError.js\";\nimport type { ServiceBehaviorSettings } from \"../resources/services/types.js\";\n\n/** Все предметные атрибуты настройки услуги. */\nexport const serviceBehaviorSettingsFieldDocEntries = {\n orderName: {\n description:\n \"Пользовательское название заказа для отображения в приложении; непустая строка. Не меняет серверное имя создаваемого заказа.\",\n },\n timeZone: { description: \"Часовой пояс услуги, например Europe/Moscow.\" },\n unavailableBookingMessage: { description: \"Сообщение при недоступной записи.\" },\n discountPercentageFieldName: { description: \"Название поля скидки в процентах.\" },\n disableCancelMyParticipationBeforeMinutes: {\n description: \"Срок запрета отмены до начала, в минутах; положительный safe integer.\",\n },\n disableUpdateOrderTimeBeforeMinutes: {\n description: \"Срок запрета переноса до начала, в минутах; положительный safe integer.\",\n },\n marginTimeSec: { description: \"Интервал между событиями в секундах; положительный safe integer.\" },\n autoStartNotificationDelaySeconds: {\n description: \"Задержка подключения уведомлений в секундах; положительный safe integer.\",\n },\n paymentRedirectTimeoutSec: {\n description: \"Таймаут перенаправления после оплаты в секундах; положительный safe integer.\",\n },\n hideMessengerConnectUi: {\n description: \"Скрыть UI подключения уведомлений Telegram и Max; getter всегда возвращает boolean.\",\n },\n agreementItems: {\n description: \"Полный набор соглашений с уникальным положительным index и text/link. Пустой массив очищает набор.\",\n },\n} satisfies Record<keyof ServiceBehaviorSettings, ItemFieldDoc>;\n\n/** Предметные поля результата без раскрытия внутреннего представления. */\nexport const serviceBehaviorSettingsStateFieldDocEntries = {\n serviceId: { description: \"ID прочитанной услуги.\" },\n version: { description: \"Положительная int32 версия всей услуги; используется как versionToCheck записи.\" },\n settings: {\n description: \"Предметные настройки. При непустом issues снимок неполон.\",\n valueSchema: \"ServiceBehaviorSettings\",\n },\n issues: {\n description: \"Проблемы чтения с именем поля и enum-причиной, без исходных данных.\",\n valueSchema: \"ServiceBehaviorSettingsIssue[]\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n/** Результат подтверждённого PUT либо локального no-op. */\nexport const serviceBehaviorSettingsUpdateResultFieldDocEntries = {\n ...serviceBehaviorSettingsStateFieldDocEntries,\n changed: { description: \"true — PUT подтверждён ID/версией; false — no-op. settings не являются readback.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Управление необязательной проверкой версии. */\nexport const serviceBehaviorSettingsUpdateOptionsFieldDocEntries = {\n versionToCheck: {\n description: \"Необязательная ожидаемая версия 1..2147483647; включает CAS и не заменяется новой версией GET.\",\n },\n checkVersion: {\n description:\n \"true включает CAS по версии внутреннего GET, если versionToCheck не задан; по умолчанию CAS выключен.\",\n },\n mergeParameters: {\n description: \"По умолчанию true: пропущенные поля сохраняются. false: отсутствующие поля очищаются.\",\n },\n profileId: { description: \"Контекст внутреннего GET; не передаётся в PUT и не даёт право записи.\" },\n securityToken: { description: \"Гостевой контекст GET, не Bearer и не право записи.\" },\n isNeedAnnouncement: { description: \"Объявление при PUT; отсутствие/null означает false.\" },\n signal: { description: \"AbortSignal для GET и PUT; отмена не запускает retry или rollback.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Диагностика одного неполного предметного значения. */\nexport const serviceBehaviorSettingsIssueFieldDocEntries = {\n field: { description: \"Имя настройки, которую нельзя достоверно прочитать.\" },\n reason: { description: \"Причина неполного чтения.\", valueSchema: \"ServiceBehaviorSettingsIssueReason\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Единственный описываемый шаг настроек. */\nexport const behaviorSettingsEffectStepFieldDocEntries = {\n [BehaviorSettingsEffectStep.Write]: {\n description: \"Целевая запись настроек; не включает refresh или другие эффекты авторизации.\",\n },\n} satisfies Record<BehaviorSettingsEffectStep, ItemFieldDoc>;\n/** Безопасное предметное уточнение общей ошибки. */\nexport const behaviorSettingsErrorDetailFieldDocEntries = {\n domain: { description: \"Область ошибки BehaviorSettings для настроек Service или Resource.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Причины отсутствующего значения настройки. */\nexport const serviceBehaviorSettingsIssueReasonFieldDocEntries = {\n [ServiceBehaviorSettingsIssueReason.InvalidValue]: {\n description: \"Значение настройки некорректно; оно не включено в полный предметный снимок.\",\n },\n [ServiceBehaviorSettingsIssueReason.AmbiguousValue]: {\n description: \"Для настройки получены различные значения; порядок не выбирает победителя.\",\n },\n} satisfies Record<ServiceBehaviorSettingsIssueReason, ItemFieldDoc>;\n","/**\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\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\n return out;\n}\n","import type { TorrowChildItemCreateOptions, TorrowItemCreateOptions } from \"../resources/common/item-crud-options.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие параметры корневого create: публичность задаётся отдельно от предметного тела. */\nexport const torrowItemCreateOptionsFieldDocEntries = {\n publicityType: {\n description:\n \"Публичность нового item: Personal, PublicWithRequest, PublicAvailable или Link; при пропуске SDK отправляет Personal.\",\n examples: [\"Personal\", \"PublicWithRequest\", \"PublicAvailable\", \"Link\"],\n usage:\n \"Значение передаётся в JSON item единственного create request. Одноимённое поле в предметном теле не является источником и игнорируется. Для существующего item используйте updatePublicity; обычный update публичность не меняет.\",\n },\n profileId: {\n description: \"Профиль, от имени которого создаётся item; строка, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр profileId исходного create request; null сохраняет wire-семантику API. Это не поле JSON item.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного create request.\",\n usage:\n \"Отменяет единственный create request; SDK не выполняет retry, readback или cleanup. Отмена после отправки запроса не доказывает, что item не был создан.\",\n },\n} satisfies Record<keyof TorrowItemCreateOptions, ItemFieldDoc>;\n\n/** Параметры create дочернего item: общий контракт плюс родитель в query. */\nexport const torrowChildItemCreateOptionsFieldDocEntries = {\n ...torrowItemCreateOptionsFieldDocEntries,\n parentId: {\n description: \"Родитель нового item; строка, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр parentId исходного create request; null сохраняет wire-семантику API. Это не поле JSON item.\",\n },\n} satisfies Record<keyof TorrowChildItemCreateOptions, ItemFieldDoc>;\n","/**\n * Query-параметры `DELETE /api/v1/{domain}/{torrowId}` для item-фасадов\n * (contacts, notes, cases, calendars, contexts, services, resourceItems, loyalty*).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общее описание item-delete для MCP-записей методов `delete`. */\nexport const itemDeleteMethodDescription =\n \"Обязательные query **`cascade`**, **`withPinnedItems`** (см. **`TorrowItemDeleteOptions`**; совместимый ключ **`ItemDeleteQuery`**); SDK возвращает число **`deleteCount`**.\";\n\nexport const itemDeleteQueryFieldDocEntries = {\n cascade: {\n description:\n \"Каскадное удаление вложенных дочерних элементов в иерархии (mind map / include). `false` — удалить только сам элемент, без дочерних; `true` — вместе с вложенными (в приложении: «удалить с вложенными элементами»).\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n withPinnedItems: {\n description:\n \"Удалять закреплённые (pinned) дочерние представления/элементы вместе с родителем. `false` — не трогать закреплённые вложения; `true` — удалить и их.\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemDeleteQueryFieldDocs = mapFieldDocsToStrings(itemDeleteQueryFieldDocEntries);\n","import type {\n TorrowItemDeleteOptions,\n TorrowItemGetOptions,\n TorrowItemUpdateOptions,\n} from \"../resources/common/item-crud-options.js\";\nimport type { GetCalendarOptions, UpdateCalendarItemOptions } from \"../resources/calendars/types.js\";\nimport type { GetCaseOptions } from \"../resources/cases/case-requests.js\";\nimport type { UpdateCaseItemOptions } from \"../resources/cases/types.js\";\nimport type { GetContactOptions, UpdateContactItemOptions } from \"../resources/contacts/types.js\";\nimport type { GetContextOptions } from \"../resources/contexts/types.js\";\nimport type { GetLoyaltyCardOptions } from \"../resources/loyalty-cards/types.js\";\nimport type { GetLoyaltySystemOptions } from \"../resources/loyalty-systems/types.js\";\nimport type { GetNoteOptions } from \"../resources/notes/types.js\";\nimport type { GetResourceOptions, UpdateResourceItemOptions } from \"../resources/resources/types.js\";\nimport type { GetServiceOptions } from \"../resources/services/service-requests.js\";\nimport type { UpdateServiceItemOptions } from \"../resources/services/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\n\n/** Общие параметры получения item по идентификатору. */\nexport const torrowItemGetOptionsFieldDocEntries = {\n versionToCheck: {\n description: \"Версия item, которую клиент уже прочитал; число, null или пропуск.\",\n usage: \"Передаётся как query-параметр versionToCheck исходного GET.\",\n },\n includeDeleted: {\n description: \"Нужно ли возвращать логически удалённый item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр includeDeleted исходного GET.\",\n },\n includeChildItemStats: {\n description: \"Включать статистику по типам дочерних элементов в ответ получения item.\",\n usage: \"SDK передаёт значение в исторический query-параметр endpoint: includeChildTypes либо includeChildItems.\",\n },\n securityToken: {\n description: \"Токен гостевого доступа к item; строка, null или пропуск.\",\n usage: \"Передаётся в query конкретного GET и не используется как Bearer-токен.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса чтения item.\",\n usage: \"Передаётся в fetch исходного GET; SDK не выполняет retry.\",\n },\n} satisfies Record<keyof TorrowItemGetOptions, ItemFieldDoc>;\n\n/** Общие параметры полного обновления item. */\nexport const torrowItemUpdateOptionsFieldDocEntries = {\n checkVersion: {\n description: \"Нужно ли серверу проверить версию item перед полным обновлением; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр checkVersion исходного PUT.\",\n },\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об обновлении item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр isNeedAnnouncement исходного PUT.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса полного обновления item.\",\n usage: \"Передаётся в fetch исходного PUT; SDK не выполняет retry или readback.\",\n },\n} satisfies Record<keyof TorrowItemUpdateOptions, ItemFieldDoc>;\n\n/** Общие параметры удаления item. */\nexport const torrowItemDeleteOptionsFieldDocEntries = {\n ...itemDeleteQueryFieldDocEntries,\n versionToCheck: {\n description: \"Ожидаемая версия удаляемого item; число, null или пропуск.\",\n usage: \"Передаётся как query-параметр versionToCheck исходного DELETE.\",\n },\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об удалении item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр isNeedAnnouncement исходного DELETE.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса удаления item.\",\n usage: \"Передаётся в fetch исходного DELETE; отмена не доказывает, что сервер не удалил item.\",\n },\n} satisfies Record<keyof TorrowItemDeleteOptions, ItemFieldDoc>;\n\nconst profileIdGetFieldDoc = {\n description: \"Профиль, от имени которого читается item; строка, null или пропуск.\",\n usage: \"Передаётся как query-параметр profileId исходного GET.\",\n} satisfies ItemFieldDoc;\n\nconst profileIdUpdateFieldDoc = {\n description: \"Профиль, от имени которого обновляется item; строка, null или пропуск.\",\n usage: \"Передаётся как query-параметр profileId исходного PUT.\",\n} satisfies ItemFieldDoc;\n\nconst securityTokenUpdateFieldDoc = {\n description: \"Токен гостевого доступа для полного обновления item; строка, null или пропуск.\",\n usage: \"Передаётся в query исходного PUT и не используется как Bearer-токен.\",\n} satisfies ItemFieldDoc;\n\nexport const getCalendarOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetCalendarOptions, ItemFieldDoc>;\n\nexport const getContactOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetContactOptions, ItemFieldDoc>;\n\nexport const getContextOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetContextOptions, ItemFieldDoc>;\n\nexport const getNoteOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetNoteOptions, ItemFieldDoc>;\n\nexport const getResourceOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n isNeedItem: {\n description: \"Включать основную карточку item в ответ ресурса.\",\n usage: \"Передаётся как query-параметр isNeedItem исходного GET.\",\n },\n isNeedParentResource: {\n description: \"Включать родительский ресурс в ответ.\",\n usage: \"Передаётся как query-параметр isNeedParentResource исходного GET.\",\n },\n} satisfies Record<keyof GetResourceOptions, ItemFieldDoc>;\n\nexport const getServiceOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n profileId: profileIdGetFieldDoc,\n} satisfies Record<keyof GetServiceOptions, ItemFieldDoc>;\n\nexport const getCaseOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n profileId: profileIdGetFieldDoc,\n caseParticipantProfileId: {\n description: \"Профиль участника, для которого сервер формирует персональную часть события.\",\n usage: \"Передаётся как query-параметр caseParticipantProfileId исходного GET.\",\n },\n caseParticipantId: {\n description: \"Участник события, персональные данные которого запрашивает гостевой клиент.\",\n usage: \"Передаётся как query-параметр caseParticipantId исходного GET вместе с securityToken.\",\n },\n} satisfies Record<keyof GetCaseOptions, ItemFieldDoc>;\n\nexport const getLoyaltySystemOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetLoyaltySystemOptions, ItemFieldDoc>;\n\nexport const getLoyaltyCardOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n includeBalance: {\n description: \"Включать рассчитанный баланс карты лояльности в ответ.\",\n usage: \"Передаётся как query-параметр includeBalance исходного GET.\",\n },\n} satisfies Record<keyof GetLoyaltyCardOptions, ItemFieldDoc>;\n\nexport const updateCalendarItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateCalendarItemOptions, ItemFieldDoc>;\n\nexport const updateContactItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateContactItemOptions, ItemFieldDoc>;\n\nexport const updateResourceItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n profileId: profileIdUpdateFieldDoc,\n} satisfies Record<keyof UpdateResourceItemOptions, ItemFieldDoc>;\n\nexport const updateServiceItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об обновлении услуги; boolean, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр isNeedAnnouncement исходного PUT; false не отключает серверное обновление персональных связей.\",\n },\n profileId: profileIdUpdateFieldDoc,\n} satisfies Record<keyof UpdateServiceItemOptions, ItemFieldDoc>;\n\nexport const updateCaseItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n profileId: profileIdUpdateFieldDoc,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateCaseItemOptions, ItemFieldDoc>;\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: \"Проверка уникальности на сервере; используется в URL публичной карточки. Не путать с id элемента.\",\n },\n image: {\n description: \"Метаданные основного изображения/аватара элемента.\",\n valueSchema: \"FileInfo\",\n usage:\n \"Превью в карточке; загрузка байтов через `.../image/puturl` (`fileId`, опционально `fileName`/`fileSize` в query), затем в теле **`create`**/**`update`** — **`{ id }`** (как torrow-apps). В ответах GET — полный **FileInfo** (`url`, `fileName`, …). **image/info**, **updateImageId** — после создания.\",\n },\n masterInfo: {\n description: \"Заголовок, подзаголовок, локализованные строки для карточки и анонса.\",\n valueSchema: \"MasterInfo\",\n usage: \"Отображение в шапке элемента; различается по типам элементов.\",\n },\n publicityType: {\n description: \"Кто может видеть элемент и как выдаётся доступ (персональный, по ссылке, публичный и т.д.).\",\n examples: [\"Personal\", \"Link\", \"PublicAvailable\", \"PublicWithRequest\"],\n usage:\n \"SDK принимает только Personal, PublicWithRequest, PublicAvailable и Link. При create значение задаётся через `options.publicityType`; пропуск отправляет Personal, одноимённое поле предметного тела не является источником. Для существующего item публичность меняется только через `updatePublicity`, а обычный update поле не принимает. При чтении серверные Private и Undefined становятся Personal; исходные wire DTO сохраняют эти значения. Private можно вернуть отдельным изменением после подтверждённого исправления сервера, Undefined — по отдельному решению. Для карточек «только по ссылке» часто сочетается с `anyoneAccess: Read` и отключённым поиском (`searchMode: NoneSearchMode`). Текстовый **`client.search.*`** (contacts/notes/…) индексирует только **`PublicAvailable`** / **`PublicWithRequest`** (см. **`docs/agents/participation-flow.md`** §3).\",\n },\n searchMode: {\n description: \"Участие элемента в поиске/выдаче (контракт API).\",\n examples: [\"UnknownSearchMode\", \"NoneSearchMode\", \"Partial\", \"Full\"],\n usage:\n \"Фильтрация в списках и индексация. `NoneSearchMode` — элемент не ищется в общей выдаче, но может открываться по прямой ссылке/uniqueName. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n anyoneAccess: {\n description: \"Параметры анонимного или широкого доступа без явного участия.\",\n valueSchema: \"AnyoneAccess\",\n examples: [\"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n usage:\n \"С `publicityType: Link` и `Read` аноним может читать карточку по ссылке в пределах прав сервера. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n tags: {\n description: \"Список строковых тегов (хэштеги) для группировки и фильтров.\",\n examples: [\"работа\", \"семья\", \"срочно\"],\n usage:\n \"В read-моделях фасадов optional tags с серверным null отсутствует как ключ; явно полученный [] сохраняется. Исходная обязательность поля не меняется. Изменение — updateTags(id, string[]), очистка — []; null не поддерживается входом. Отдельный listTags возвращает [] при штатном успешном null/пустом ответе и сохраняет ошибки API. Raw/http сохраняют wire-значение tags.\",\n },\n rating: {\n description: \"Агрегированный рейтинг/оценки, если включены для типа.\",\n valueSchema: \"Rating\",\n },\n personalInfo: {\n description:\n \"Персональное участие текущего профиля в элементе: роль участника, порядок сортировки, напоминания, тип контента. personalInfo.meta относится к PersonalLink текущего участника, а не к самому элементу; версии и времена изменения независимы. См. PersonalInfo.meta и общее объяснение: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n valueSchema: \"PersonalInfo\",\n usage:\n \"Для GET заметки полнота полученного содержимого определяется itemContentType: Full — показывать, NoRights — отказ в правах, SubscriptionIsNotValid — ограничение подписки; отсутствующий/Unknown не подтверждает Full. Дополнительный ReadItem для показа Full не требуется: тип содержимого и operationList формируются отдельно, NoRights не гарантирует отсутствия ReadItem. Для действий проверяйте соответствующую операцию (UpdateItem, RequestAccessToItem и т.д.); сервер проверит её заново. После requestAccess проверяйте состояние: Requested ждёт решения владельца, некоторые существующие состояния переходят в Accepted; после Accepted заново читайте элемент. В сервисе проверяется itemContentType Full для сценариев check-in. Руководство: docs/item-access-errors.md. В существующем personalInfo поля personalReminders и notificationWayList имеют array-only read-контейнер: серверный null удаляет соответствующий ключ, явный [] сохраняется. Сам personalInfo:null или отсутствие не заменяется объектом. operationList, subscriptionList и вложенные списки NotificationWay сохраняют прежнюю nullable-семантику.\",\n },\n blockInfo: {\n description: \"Состояние и причина блокировки элемента.\",\n valueSchema: \"BlockInfo\",\n usage:\n \"Методы block/unblock по типу объекта (Case, Contact, Note, …). Выполняет только **администратор Torrow**; обычная сессия — HTTP 403.\",\n },\n groupInfo: {\n description: \"Связь с группами, родителями, иерархией mind-map.\",\n valueSchema: \"GroupInfo\",\n },\n solutionData: {\n description: \"Предметная конфигурация «решения» под тип элемента.\",\n valueSchema: \"SolutionData\",\n usage:\n \"У контакта часто задаёт раскладку карточки: `viewBlockSettings.blockSettings[]` с `name`, `order` и **числовым** `objectType` (в продукте: 1003 — заметка, 1005 — услуга и т.д.; см. константы клиента `NOTE`/`SERVICE`). Строковые имена типов в других полях (`childItemStats.objectType`) приходят как enum-строки.\",\n },\n childItemStats: {\n description: \"Агрегированная статистика по дочерним элементам (количества по типам).\",\n valueSchema: \"ChildItemStat[]\",\n examples: ['[{\"objectType\":\"Service\",\"itemCount\":2},{\"objectType\":\"Note\",\"itemCount\":1}]'],\n usage:\n \"На странице услуги: решение показывать ли check-in при отсутствии детей. Запрашивается через SDK-опцию `includeChildItemStats: true`; для контакта она передаётся в wire query как `includeChildTypes=true`. Без авторизации список дочерних id через отдельные эндпоинты mind-map может быть недоступен.\",\n },\n feedbackOptions: {\n description: \"Настройки сбора отзывов и обратной связи.\",\n valueSchema: \"FeedbackOptions\",\n },\n integrationIds: {\n description: \"Идентификаторы подключённых интеграций (внешние системы).\",\n valueSchema: \"string[]\",\n usage:\n \"Optional read-поле карточки: серверный null удаляет ключ, отсутствие сохраняется, явный [] остаётся массивом. updateIntegrations принимает массив; [] очищает список. OrderResp.integrationIds не нормализуется.\",\n examples: [\"integration-uuid-1\"],\n },\n meta: {\n description:\n \"Метаданные самого элемента: версия, soft-delete, архив, даты. Не путать с personalInfo.meta персональной связи.\",\n valueSchema: \"ObjectInfo\",\n usage:\n \"Для CAS используйте meta.version элемента по контракту конкретного метода: versionToCheck в query либо meta.version в теле с checkVersion. personalInfo.meta.version для CAS элемента не подходит.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemBaseFieldDocs = mapFieldDocsToStrings(torrowItemBaseFieldDocEntries);\n","/**\n * Подробности **`ContactItem.visitCard`** и полей **`ContactVisitCardField`**.\n *\n * Это поле задаёт **слоты отображения** (визитная вёрстка контакта), а не сущность «Профиль пользователя».\n * Профиль — отдельный продуктовый и API-контур (`profileType`, операции **`/api/v1/user/profiles`**).\n *\n * `expression` в API — JSON в виде **строки**: парсинг на стороне клиента, тип слота задаёт источник данных\n * (поля контакта, `communications`, `addresses`). Клиент может пересчитывать отображаемую строку `value`\n * из `expression` и актуальных полей контакта перед сохранением.\n */\nimport type { ItemFieldDoc } from \"../field-doc-entry.js\";\n\nexport const contactVisitCardFieldDoc: ItemFieldDoc = {\n valueSchema: \"ContactVisitCard\",\n description:\n \"Структура **слотов отображения** контакта (массив `fields`): что показать в блоке «визитка» в UI. Для **контакта** в продукте длина `fields` фиксирована: **ровно три элемента** (слоты с `number` 0…2); лишние записи не используйте при сохранении через API. Заполняется у обычных контактов и у **Профиля** пользователя (контакт с `profileType`, напр. `MyProfile`), но **не заменяет** Профиль: Профиль — это контакт, привязанный к пользователю и получаемый через API **User** (`/api/v1/user/profiles`), см. `ContactItem.profileType`. У каждого слота есть порядковый номер (`number` в API), сохранённая строка `value` и поле `expression` — **отдельная JSON-строка** (в OpenAPI тип string), внутри объект с полем `type` и при необходимости `rid`. Тип задаёт, **из каких полей контакта** (или из какой записи в `communications`/`addresses`) брать текст при показе и при пересчёте на клиенте.\",\n examples: [\n '{\"type\":\"FullName\"}',\n '{\"type\":\"LastNameFirstName\"}',\n '{\"type\":\"Description\"}',\n '{\"type\":\"Phone\",\"rid\":\"0123456789abcdef01234567\"}',\n '{\"type\":\"Email\",\"rid\":\"abcdef0123456789abcdef01\"}',\n '{\"type\":\"Website\",\"rid\":\"fedcba9876543210fedcba98\"}',\n ],\n usage:\n 'В теле API `expression` — строка: `JSON.parse` даёт объект с полем `type` (enum в OpenAPI — `VisitCardExpressionType` и родственные значения для карточек кейса). Для контакта типичны FullName, LastNameFirstName, Initials, ShortName, Name, Organization, OrganizationPosition, Position, Description, Phone, Email, Website, Address, PlaceAddress. Для Phone/Email/Website/Address в JSON указывают `rid`, совпадающий с `rid` в `communications` или `addresses`. Для вычисляемых типов подпись строится из `firstName`/`lastName`/`middleName`, `company`, `position`, `description`. `value` — сохранённое отображаемое значение слота. **Не отправляйте больше трёх элементов в `fields` для контакта** — три слота соответствуют форме клиента; контакты/телефоны вынесены в `communications`, а не в четвёртый слот визитки. Разметка на экране: слоты по `number` 0…2; по типу выбирают иконку и действие (например, открыть адрес). На **`contacts.create`** и **`contacts.update`** SDK при наличии объекта **`visitCard`** в теле дополняет недостающие слоты 0…2 пустыми `{ number, value: \"\" }`, чтобы снять отказы схемы БД при неполном массиве. Добавление **Профиля** (привязка контакта к пользователю) — через операции **User** над **`/api/v1/user/profiles`**, не через заполнение только этого поля; после сохранения у Профиля может быть и `visitCard`, и нужный `profileType`.',\n};\n","/**\n * **`ContactItem`** — структурированные описания полей.\n * @see components.schemas.ContactItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { contactVisitCardFieldDoc } from \"./nested/contact-visit-card.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const contactItemSpecificFieldDocEntries = {\n addresses: {\n description: \"Почтовые и другие адреса контакта.\",\n valueSchema: \"Address[]\",\n usage: \"Отображение адреса в карточке; клик открывает карту/детали.\",\n },\n birthday: {\n description: \"Дата рождения контакта.\",\n examples: [\"1990-05-15T00:00:00.000Z\"],\n },\n communications: {\n description:\n \"Каналы связи: телефон, email, сайты, мессенджеры и т.д. У одного типа может быть несколько записей (например, несколько WebSite) — различаются полем order.\",\n valueSchema: \"Communication[]\",\n usage:\n \"У телефона в `value` — отображаемый формат, в `valueForSearch` — нормализованные цифры для поиска. У мессенджеров (`Telegram`, `Max`) `value` часто хранит идентификатор/handle. `checkDate` — read-only (ответ GET), в **`CommunicationForCreateOrUpdate`** нет. `checkState` опционален при create/update; если не передан — SDK подставляет `Unchecked`. Основной канал для уведомлений — `personalInfo.defaultCommunication`.\",\n },\n dates: {\n description: \"Памятные даты (именины, юбилеи).\",\n valueSchema: \"MemorableDate[]\",\n },\n firstName: {\n description: \"Имя (поле визитки; для человека — имя, для «организации как контакта» может хранить часть названия).\",\n examples: [\"Иван\", \"Студия\"],\n usage:\n \"Вместе с 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 },\n photos: {\n description: \"Дополнительные фотографии помимо image.\",\n valueSchema: \"FileInfo[]\",\n },\n visitCard: contactVisitCardFieldDoc,\n profileType: {\n description:\n \"Роль контакта относительно учётной записи пользователя Torrow. Значения — строковый enum в OpenAPI (`ProfileType`). **Не путать с полем `visitCard`:** это разные вещи (см. ниже).\",\n valueSchema: \"ProfileType\",\n usage:\n \"**Профиль** в продукте — это `ContactItem`, который описывает самого пользователя Torrow и привязан к его учётной записи. В API такой контакт помечается, в частности, значением **`MyProfile`**: участие в записях, обратная связь, выбор «с какого профиля действовать», личный кабинет. У одного пользователя может быть несколько таких контактов (лимит задаёт продукт). Список и добавление **Профилей** выполняются **отдельными операциями раздела User** в OpenAPI (например `GET`/`POST` **`/api/v1/user/profiles`**, ответы `ProfileListResp` / `AddProfileResp`), а не только общим CRUD контактов по `/api/v1/contacts/...`. В SDK: **`TorrowClient.profiles.list()`** возвращает **`ContactItem[]`** (ответ HTTP — **`ProfileListResp`**); описания — **`ProfilesSdkMethods`**, **`ProfileListResp`**, **`AddProfileResp`** в `mcpUserProfilesFieldCatalog`. Обычный контакт в адресной книге без роли профиля владельца — как правило **`None`** или отсутствие значения. **`AnyProfile`**, **`CopyProfile`**, **`UnknownProfile`** — прочие значения enum; уточняй по спецификации и ответам сервера. Поле **`visitCard`** — это **не** Профиль: это структура слотов отображения (как визитка на экране) и может быть у разных контактов, включая Профиль; сам факт «это Профиль пользователя» задаётся **`profileType`** и связью через API пользователя. Для **`POST /api/v1/contacts`** поля **`profileType`**, **`profileProperties`**, **`hasTimetable`** в типе **`ContactItemForCreateOrUpdate`** нет — они передаются при **`client.profiles.add`** в типе **`UserProfileItemForAdd`**.\",\n },\n activityStatus: {\n description:\n \"Статус активности контакта в UI. **Только для чтения:** в теле `POST`/`PUT` контактов не задаётся; в **`TorrowItemForCreateOrUpdate`** / **`ContactItemForCreateOrUpdate`** поля нет (ключ **`activityStatus`** в `TorrowItemKeysExcludedFromItemWriteBody`).\",\n valueSchema: \"ActivityStatus\",\n },\n profileProperties: {\n description: \"Расширенные свойства профиля.\",\n valueSchema: \"ProfileProperties\",\n usage:\n \"Часто содержит цвет акцента карточки (`color`, hex) и доступность владельца (`profileUserAvailability`). В **`ContactItemForCreateOrUpdate`** поля нет — передаётся в **`UserProfileItemForAdd`** при **`client.profiles.add`**.\",\n },\n contactProperties: {\n description:\n \"Настройки контакта: видимость расписания контакта (`timetableVisibility`), кто может приглашать (`invitationRight`), право видеть расписание (`timetableVisibilityRight`).\",\n valueSchema: \"ContactProperties\",\n usage:\n \"Маппинг из форм создания/настроек. Расписание может быть скрыто на уровне контакта, при этом дочерние услуги всё равно ведут свою запись и слоты.\",\n },\n hasTimetable: {\n description: \"Признак: у контакта заведено расписание (слоты).\",\n examples: [\"true\", \"false\"],\n usage:\n \"Может быть false, даже если у вложенных услуг есть бронирование: расписание живёт на услуге, а не на контакте. В **`ContactItemForCreateOrUpdate`** поля нет — в **`UserProfileItemForAdd`** при создании Профиля.\",\n },\n loyaltyCard: {\n description: \"Вложенный элемент — карта лояльности, привязанная к контакту.\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contactItemSpecificFieldDocEntries,\n personalInfo: {\n description: \"Участие профиля пользователя в контакте: роль участника, способы уведомлений, подписки, псевдоним.\",\n valueSchema: \"ContactPersonalInfo\",\n usage:\n \"Отличается от базового PersonalInfo других элементов; хранит profileId, participantState/Type. Для открытия карточки по ссылке без входа в ответе может быть сценарий с `participantType` вроде PublicReader и списком `operationList` (в т.ч. чтение дочерних элементов при наличии прав сервера).\",\n },\n};\n\nexport const contactItemFieldDocs = mapFieldDocsToStrings(contactItemFieldDocEntries as Record<string, ItemFieldDoc>);\n\nexport const contactItemSpecificFieldDocs = mapFieldDocsToStrings(\n contactItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`NoteItem`**\n * @see components.schemas.NoteItem; UI: `libs/mobile/mind-map/.../note-info.component`\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst noteSpecificFieldDocEntries = {\n publicityType: {\n ...torrowItemBaseFieldDocEntries.publicityType,\n usage:\n \"`notes.create` принимает Personal, PublicWithRequest, PublicAvailable и Link только через create-options; пропуск отправляет Personal, а поле исходного тела игнорируется. `notes.update` публичность не принимает; для существующей заметки используется `notes.updatePublicity`. Серверные Private/Undefined при чтении становятся Personal.\",\n },\n meta: {\n ...torrowItemBaseFieldDocEntries.meta,\n usage:\n \"notes.update принимает meta.version из прочитанной заметки в теле запроса; сервер использует его для проверки конкурирующих изменений. SDK сохраняет переданный checkVersion и не подставляет false. Для delete версия передаётся как versionToCheck в query.\",\n },\n noteType: {\n description:\n \"Формат заметки SDK: Html, Markdown или Text; остальные серверные строки при чтении становятся Text. Доменное data отдельно проверяется как текст.\",\n examples: [\"Html\", \"Markdown\", \"Text\"],\n valueSchema: \"NoteType\",\n usage:\n \"Для нового содержимого явно задавайте Html, Markdown или Text. Неверный формат записи отклоняется до HTTP, включая raw. Прочитанный Text может быть сохранён при update/patch; исходный серверный формат не восстанавливается. Файлы прикладываются через files независимо от формата текста; imagePreviewSize задаёт отображение вложений. Заметки на карточке контакта могут попадать в отдельный блок ContactItem.solutionData.viewBlockSettings.\",\n },\n data: {\n description:\n \"Содержимое доменного NoteItem/NoteView всегда string: HTML для Html, исходный Markdown для Markdown, текст для Text. Серверные null/missing становятся пустой строкой; другие нестроковые значения отклоняются. Raw/OpenAPI data сохраняет широкий wire-контракт.\",\n valueSchema: \"string\",\n examples: ['\"\"', '\"<p>Заметка</p>\"', '\"# Заметка\\\\n\\\\nТекст\\\\n\"'],\n usage:\n \"Create/update требуют явную строку data без default (NoteItemForCreateOrUpdate); patch принимает только string, очистка через пустую строку. Null/undefined отклоняются; пропуск в patch сохраняет raw string/null/missing. Явная пустая строка отличается от raw null/missing для no-op и требует CAS PUT. SDK не меняет пробелы/переносы, не разбирает JSON/ISO текст; фактическое хранение сервером проверяется отдельно. Нормализация partial/NoRights не подтверждает Full или права. Рендеринг HTML относится к приложению.\",\n },\n files: {\n description:\n \"Необязательный массив вложений (не основное image); серверный null удаляет ключ в NoteItem, явный [] сохраняется.\",\n valueSchema: \"FileInfo[]\",\n examples: ['[ { \"id\": \"…\" } ]', '[ { \"id\": \"…\", \"fileName\": \"a.pdf\", \"url\": \"…\", … } ]'],\n usage:\n \"**create**/**update** сохраняют допустимый null; для элементов достаточно **`id`**. notes.patch полностью заменяет список ссылок {id}; [] снимает вложения, пропуск сохраняет, null запрещён. Файлы предварительно загружаются отдельно; сервер может удалить отсоединённые файлы. **getById** / read — полный **FileInfo** (url, fileName, fileSize, urlExpiration, refreshUrl); отсутствие поля отличается от явного []. Собственное NoteView.files сохраняет прежний контракт.\",\n },\n imagePreviewSize: {\n description: \"Размер превью в списке/слайдере.\",\n examples: [\"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\", \"Hidden\"],\n valueSchema: \"ImagePreviewSize\",\n usage:\n \"Hidden скрывает файлы в UI; Slider — режим карусели. notes.patch: Undefined очищает настройку, create default Small не подставляется.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const noteItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...noteSpecificFieldDocEntries,\n};\n\nexport const noteItemFieldDocs = mapFieldDocsToStrings(noteItemFieldDocEntries);\n","/**\n * MCP: методы **`client.notes`** (`NotesFacade`), не покрытые общим **`TorrowItemFacadeSdkMethods`**.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const notesSdkMethodFieldDocEntries = {\n getFileInfo: {\n description:\n \"Читает Full-карточку заметки, затем `GET /api/v1/notes/{torrowId}/file/info` только при наличии выбранного вложения. Результат **`FileInfo | null`**: null означает отсутствие связи в files, один GET; наличие — два GET. Query **`fileId`** обязателен всегда.\",\n valueSchema: \"(torrowId: string, fileId: string, options?: { signal? }) → FileInfo | null\",\n usage:\n \"Если в **`NoteItem.files`** есть живой `url`, его можно использовать напрямую; иначе **`client.notes.getFileInfo(noteId, fileId)`** требует доступную Full-карточку и проверку null перед чтением url. Ошибки карточки и metadata сохраняются. Метод не скачивает байты и не обновляет сессию/URL автоматически. Примеры: **`notes-file-info.ts`** (штатный null), **`notes-file-text-urls.ts`**, **`notes-file-image-urls.ts`** (после upload отсутствие связи — ошибка сценария).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const notesSdkMethodFieldDocs = mapFieldDocsToStrings(notesSdkMethodFieldDocEntries);\n","/**\n * Пресеты иконок контекста (torrow-apps `IconSetService` + `ContextFormMapper`).\n *\n * На wire нет поля `iconName`: пресет = SVG-файл в `ContextItem.image`\n * с `fileName` вида `{preset}.svg` (и заливка из `color`). Произвольные\n * JPEG/PNG/прочие SVG тоже допустимы через обычный upload `image`.\n */\nimport { CONTEXT_ICON_PRESET_PATHS, type ContextIconPresetPathKey } from \"./context-icon-preset-paths.js\";\n\n/** Ключи пресетов — значения совпадают с `IconSetService.icons` / basename `*.svg`. */\nexport const ContextIconPresetValues = {\n Anchor: \"anchor\",\n Animals: \"animals\",\n Auto: \"auto\",\n Beauty: \"beauty\",\n Beauty2: \"beauty2\",\n Botanical: \"botanical\",\n Children: \"children\",\n Devices: \"devices\",\n Entertainment: \"entertainment\",\n Evolution: \"evolution\",\n Family: \"family\",\n Friends: \"friends\",\n Gamepad: \"gamepad\",\n Health: \"health\",\n Hobbies: \"hobbies\",\n Home: \"home\",\n Idea: \"idea\",\n Money: \"money\",\n Music: \"music\",\n Palm: \"palm\",\n Party: \"party\",\n ReparingService: \"reparingService\",\n Security: \"security\",\n Smile: \"smile\",\n Sport: \"sport\",\n Theater: \"theater\",\n Travel: \"travel\",\n Work: \"work\",\n World: \"world\",\n RegisterOrder: \"register_order\",\n} as const satisfies Record<string, ContextIconPresetPathKey>;\n\nexport type ContextIconPresetValue = (typeof ContextIconPresetValues)[keyof typeof ContextIconPresetValues];\n\nconst PRESET_SET = new Set<string>(Object.values(ContextIconPresetValues));\n\nlet nextSvgId = 0;\n\nexport function isContextIconPreset(value: string | null | undefined): value is ContextIconPresetValue {\n return typeof value === \"string\" && PRESET_SET.has(value);\n}\n\n/** Имя файла image для пресета — как в `ContextFormMapper` (`iconName + \".svg\"`). */\nexport function getContextIconPresetFileName(preset: ContextIconPresetValue): string {\n return `${preset}.svg`;\n}\n\n/**\n * Восстановить ключ пресета из `image.fileName` (basename без `.svg`).\n * Для кастомных картинок / неизвестных имён — `undefined`.\n */\nexport function parseContextIconPresetFromImage(\n image: { fileName?: string | null } | null | undefined,\n): ContextIconPresetValue | undefined {\n const fileName = image?.fileName;\n if (!fileName) {\n return undefined;\n }\n const base = fileName.split(/[/\\\\]/).pop() ?? fileName;\n const withoutExt = base.replace(/\\.svg$/i, \"\");\n\n return isContextIconPreset(withoutExt) ? withoutExt : undefined;\n}\n\nexport type BuildContextIconSvgOptions = {\n /** Заливка path; в apps обычно `ContextItem.color`. */\n color?: string;\n backgroundColor?: string;\n /** Атрибут `inversed` на path — как в `IconSetService.createSvg`. */\n inversed?: boolean;\n};\n\n/**\n * SVG-разметка пресета (без DOM) — эквивалент `IconSetService.getIcon` / blob из `getIconUrl`.\n * Готово к upload как `image/svg+xml` с именем {@link getContextIconPresetFileName}.\n */\nexport function buildContextIconSvg(preset: ContextIconPresetValue, options?: BuildContextIconSvgOptions): string {\n const d = CONTEXT_ICON_PRESET_PATHS[preset];\n const id = `iconSet${(nextSvgId += 1)}`;\n const colorAttr = options?.color ? ` fill=\"${escapeXmlAttr(options.color)}\"` : \"\";\n const inversedAttr = options?.inversed !== undefined ? ` inversed=\"${options.inversed ? \"true\" : \"false\"}\"` : \"\";\n const styleAttr = options?.backgroundColor\n ? ` style=\"background-color: ${escapeXmlAttr(options.backgroundColor)};\"`\n : \"\";\n\n return (\n `<svg viewBox=\"7 7 40 40\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"${styleAttr}>` +\n `<defs><path d=\"${escapeXmlAttr(d)}\" id=\"${id}\"${colorAttr}${inversedAttr}/></defs>` +\n `<use xlink:href=\"#${id}\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\"/>` +\n `</svg>`\n );\n}\n\n/** UTF-8 bytes SVG для `uploadBytes` / `getImagePutUrl`. */\nexport function buildContextIconSvgBytes(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): Uint8Array {\n return new TextEncoder().encode(buildContextIconSvg(preset, options));\n}\n\nfunction escapeXmlAttr(value: string): string {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n","/**\n * **`ContextItem`** — группа/метка для организации элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\nimport { ContextIconPresetValues } from \"../resources/contexts/context-icon-preset.js\";\n\nconst contextSpecificFieldDocEntries = {\n color: {\n description:\n \"Цвет метки контекста в UI; для пресет-иконки apps также заливают этим цветом SVG path (`buildContextIconSvg(..., { color })`).\",\n examples: [\"#FF5722\", \"#2E7D32\", \"rgb(255,0,0)\"],\n usage: \"Визуальная группировка в mind-map и списках; вместе с `image` для пресета.\",\n },\n description: {\n description: \"Текстовое описание назначения контекста.\",\n examples: [\"Рабочие контакты\", \"Личное\"],\n },\n image: {\n description:\n \"Файл аватара/иконки. В apps выбор пресета = upload SVG с `fileName` `{preset}.svg` (см. MCP **`ContextIconPresetValues`**); произвольный JPEG/PNG тоже допустим через тот же `image`.\",\n examples: ['{ id, fileName: \"home.svg\" }', '{ id, fileName: \"custom.jpg\" }'],\n usage:\n \"Пресет: `buildContextIconSvg` + `getImagePutUrl` + `image: { id }`. Кастом: обычный upload. Обратно: `parseContextIconPresetFromImage(image)`.\",\n valueSchema: \"FileInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Справочник ключей пресет-иконок (wire — basename `*.svg`, не отдельное поле DTO). */\nexport const contextIconPresetValuesFieldDocEntries = Object.fromEntries(\n Object.entries(ContextIconPresetValues).map(([pascal, key]) => [\n pascal,\n {\n description: `Пресет иконки контекста \\`${key}\\` (torrow-apps IconSetService). На API уходит как image-файл \\`${key}.svg\\`.`,\n examples: [key, `${key}.svg`],\n usage: `ContextIconPresetValues.${pascal}; buildContextIconSvg / getContextIconPresetFileName.`,\n valueSchema: \"ContextIconPresetValues\",\n } satisfies ItemFieldDoc,\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const contextIconPresetValuesFieldDocs = mapFieldDocsToStrings(contextIconPresetValuesFieldDocEntries);\n\nexport const contextItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contextSpecificFieldDocEntries,\n};\n\nexport const contextItemFieldDocs = mapFieldDocsToStrings(contextItemFieldDocEntries);\n","/**\n * **`CalendarItem`**\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\n/**\n * Индексы вида расписания (`calendarViewIndex` / `timetableView`) для MCP.\n * В JSON — **число**; имена Day/Schedule — только подписи (как `LayoutTypeValues`).\n */\nexport const timetableViewTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник int-кодов вида расписания по умолчанию (`CalendarItem.calendarViewIndex`, `ServiceItem.timetableView`). Не OpenAPI-enum: в теле API передавай **число** (`0`…`5`).\",\n valueSchema: \"TimetableViewTypeValues\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"],\n usage:\n \"UI apps: Day / Poster / Schedule. В TypeScript SDK — `TimetableViewTypeValues.*` (то же число). Не передавай имя `Schedule` строкой — только int.\",\n },\n Day: {\n description: \"`0` — вид «День» (дефолт формы календаря в apps, если тип не выбран явно).\",\n examples: [\"0\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Month: {\n description: \"`1` — вид «Месяц» (в UI календаря часто скрыт).\",\n examples: [\"1\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n MonthEventList: {\n description: \"`2` — список событий месяца.\",\n examples: [\"2\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n ConnectCalendar: {\n description: \"`3` — подключённый/внешний календарь.\",\n examples: [\"3\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Poster: {\n description: \"`4` — «Афиша».\",\n examples: [\"4\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Schedule: {\n description: \"`5` — «Список событий» / Schedule.\",\n examples: [\"5\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableViewTypeValuesFieldDocs = mapFieldDocsToStrings(timetableViewTypeValuesFieldDocEntries);\n\nconst calendarSpecificFieldDocEntries = {\n description: {\n description: \"Описание календаря для пользователя.\",\n examples: [\"Рабочий календарь 2025\"],\n usage:\n \"calendars.patch: пропуск сохраняет описание, null или пустая строка очищает содержимое; результат отражает серверную нормализацию.\",\n },\n calendarViewIndex: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day, `1` Month, `2` MonthEventList, `3` ConnectCalendar, `4` Poster, `5` Schedule. Полный справочник — MCP **`TimetableViewTypeValues`**.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage:\n \"UI: `CALENDAR_FORM.TYPE_INPUT`. То же число, что `ServiceItem.timetableView`. calendars.patch принимает int32|null: 0 записывается, сервер может вернуть его как null; null очищает. Apps проверяют truthy — `0` (Day) неотличим от «не задано» при чтении в UI.\",\n },\n scheduleRangeExceptions: {\n description: \"Исключения из базового расписания: замены и исключённые интервалы.\",\n valueSchema: \"ScheduleRangeExceptions\",\n usage:\n \"calendars.patch полностью заменяет структуру: пропущенные внутри списки не объединяются со старыми. null снимает структуру, {} или пустые списки очищают интервалы. begin/end — Date SDK. Это не создание/включение Case и не чтение timetable.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const calendarItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...calendarSpecificFieldDocEntries,\n};\n\nexport const calendarItemFieldDocs = mapFieldDocsToStrings(calendarItemFieldDocEntries);\n","/**\n * **`LoyaltySystemItem`** — поля create/update, критичные для MCP\n * (wire-строки OpenAPI в `examples`, не имена TS-констант).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst loyaltySystemSpecificFieldDocEntries = {\n description: {\n description: \"Описание программы лояльности.\",\n examples: [\"Программа скидок 2025\"],\n },\n startDate: {\n description: \"Дата начала программы (ISO date-time).\",\n examples: [\"2025-01-01T00:00:00.000Z\"],\n },\n expiredDate: {\n description: \"Дата окончания программы (ISO date-time).\",\n examples: [\"2026-01-01T00:00:00.000Z\"],\n },\n loyaltyCardIssueType: {\n description:\n \"Способ выпуска карты. В JSON — **строка**: `Manual`, `AutoActive`, `AutoIssued`. Каталог MCP **`LoyaltyCardIssueType`**. Дефолт apps create: `AutoActive`.\",\n examples: [\"AutoActive\", \"Manual\", \"AutoIssued\"],\n valueSchema: \"LoyaltyCardIssueType\",\n },\n loyaltyCardAnyoneAccess: {\n description:\n \"Публичный доступ к карте. В JSON — **строка** `AnyoneAccess`: `Read`, `NoneAnyoneAccess`, `ReadWrite`, `Denied`. Каталог **`AnyoneAccess`**. Дефолт apps: `Read`.\",\n examples: [\"Read\", \"NoneAnyoneAccess\", \"ReadWrite\", \"Denied\"],\n valueSchema: \"AnyoneAccess\",\n },\n loyaltyCardUpdateKeyInformation: {\n description:\n \"Правило key-полей карты. В JSON — **строка**: `NonKeyDisallowed`, `NonKeyAllowed`. Каталог **`LoyaltyCardUpdateKeyInformation`**. Дефолт apps: `NonKeyDisallowed`.\",\n examples: [\"NonKeyDisallowed\", \"NonKeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateKeyInformation\",\n },\n loyaltyCardUpdateNonKeyInformation: {\n description:\n \"Правило non-key полей. В JSON — **строка**: `KeyDisallowed`, `KeyAllowed`. Каталог **`LoyaltyCardUpdateNonKeyInformation`**.\",\n examples: [\"KeyDisallowed\", \"KeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateNonKeyInformation\",\n },\n loyaltyCardUsagePeriod: {\n description: \"Срок действия карты в днях.\",\n examples: [\"365\", \"30\"],\n },\n beginTransactionValues: {\n description: \"Начальные значения будущего выпуска (`TransactionValue[]`); не изменяет балансы уже выпущенных карт.\",\n valueSchema: \"TransactionValue[]\",\n usage:\n \"Optional read: серверный null удаляет ключ; [] сохраняется. Patch принимает массив/[], но не null; полный create/update сохраняет исходный nullable wire-контракт.\",\n },\n initialSubscription: {\n description: \"Конфигурация стартового абонемента будущих карт; не изменяет существующие подписки.\",\n valueSchema: \"InitialSubscription\",\n },\n accountingProductNames: {\n description: \"Имена учётных продуктов программы (обязательны вместе с `beginTransactionValues`).\",\n valueSchema: \"AccountingProductName[]\",\n usage:\n \"Optional read: серверный null удаляет ключ, [] остаётся пустым массивом. Patch не принимает null; полный create/update сохраняет nullable wire-вход.\",\n },\n referralProgramIds: {\n description: \"Список ID связанных реферальных программ.\",\n valueSchema: \"string[]\",\n usage:\n \"Optional read: серверный null удаляет ключ, массив сохраняет порядок и повторы. Patch заменяет список массивом, [] очищает, null запрещён; полный create/update сохраняет nullable wire-вход.\",\n },\n numeratorInfo: {\n description: \"Нумерация карт, только создание и чтение; root update/patch её не изменяет.\",\n valueSchema: \"NumeratorInfo\",\n },\n businessCardId: {\n description: \"Id визитки/контакта, привязанного к программе.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n contactInformationFieldsRequirements: {\n description: \"Требования к полям контакта при выпуске карты.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...loyaltySystemSpecificFieldDocEntries,\n};\n\nexport const loyaltySystemItemFieldDocs = mapFieldDocsToStrings(loyaltySystemItemFieldDocEntries);\n","/**\n * Вложенные схемы услуги/кейса, нужные MCP для сборки create/update body\n * (wire-литералы строк/чисел, не имена TS-констант).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sessionDurationPropertiesFieldDocEntries = {\n sessionDurationType: {\n description:\n \"Тип длительности сессии. В JSON — **строка** OpenAPI: `Sum`, `Constant`, `Custom`, `SessionDurationNone`, … Каталог MCP **`SessionDurationType`**.\",\n examples: [\"Sum\", \"Constant\", \"Custom\", \"SessionDurationNone\"],\n valueSchema: \"SessionDurationType\",\n },\n timeSelectionType: {\n description:\n \"Кто выбирает время. В JSON — **строка**: `Consumer`, `Executor`, `TimeSelectionNone`. Каталог **`TimeSelectionType`**.\",\n examples: [\"Consumer\", \"Executor\", \"TimeSelectionNone\"],\n valueSchema: \"TimeSelectionType\",\n },\n stateManagementType: {\n description:\n \"Авто/ручное управление состоянием. В JSON — **строка**: `Auto`, `Manual`. Каталог **`StateManagementType`**.\",\n examples: [\"Auto\", \"Manual\"],\n valueSchema: \"StateManagementType\",\n },\n sessionPrecisionType: {\n description: \"Точность слота. В JSON — **строка**: `DateTime`, `Date`. Каталог **`SessionPrecisionType`**.\",\n examples: [\"DateTime\", \"Date\"],\n valueSchema: \"SessionPrecisionType\",\n },\n defaultDuration: {\n description: \"Длительность по умолчанию в секундах (для `Constant` / кастомных сценариев).\",\n examples: [\"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sessionDurationPropertiesFieldDocs = mapFieldDocsToStrings(sessionDurationPropertiesFieldDocEntries);\n\nexport const checkinPermissionFieldDocEntries = {\n userAccessLevel: {\n description:\n \"Кто может check-in / запись. В JSON — **строка** OpenAPI: `Authenticated`, `Unauthenticated`. Каталог MCP **`UserAccessLevel`**.\",\n examples: [\"Authenticated\", \"Unauthenticated\"],\n valueSchema: \"UserAccessLevel\",\n },\n consumerMinTimeSecBetweenCasesInService: {\n description: \"Минимальный интервал (сек) между кейсами одного потребителя в услуге.\",\n examples: [\"0\", \"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkinPermissionFieldDocs = mapFieldDocsToStrings(checkinPermissionFieldDocEntries);\n","/**\n * **`ResourceItem`** — продуктовый ресурс (слот, аренда, билет и т.д.).\n * @see resource-item-business: publicity Link при создании с parentId\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const resourceItemSpecificFieldDocEntries = {\n description: {\n description: \"Текстовое описание ресурса в каталоге и при записи.\",\n },\n itemId: {\n description: \"Связь с элементом-представлением ресурса в модели API.\",\n examples: [\"uuid\"],\n },\n parentResourceId: {\n description: \"Родительский ресурс в иерархии (подресурсы).\",\n usage: \"Иерархия resource group / вложенные услуги.\",\n },\n timetableId: {\n description: \"Идентификатор расписания, к которому привязан ресурс.\",\n },\n schedule: {\n description:\n \"Расписание доступности. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\n valueSchema: \"Schedule\",\n },\n priceInfo: {\n description:\n \"Отображаемая и расчётная ценовая информация. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null; patch требует массив.\",\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 \"Связи ресурса с группами услуг. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Каждая связь определяется парой `id` услуги + `resourceGroupId`; `ResourceBuilder` формирует имена и `laterBinding` из актуальной услуги и группы.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: {\n description: \"Код номенклатуры или внешний артикул.\",\n examples: [\"SRV-001\"],\n },\n duration: {\n description: \"Длительность/расчётная единица ресурса в секундах (int32); SDK не пересчитывает в минуты.\",\n examples: [\"1800\", \"3600\"],\n },\n amountProperties: {\n description:\n \"Количество и лимиты списания. Для записи `totalAmount` передавайте согласованный объект формы: `measure`, `firstValue`, `plusStep`, `minusStep`, `digitsInMeasure`; сокращённый `{ totalAmount }` отклоняется фактической DB-схемой.\",\n valueSchema: \"AmountProperties\",\n },\n usageCondition: {\n description: \"Условия допустимого использования.\",\n valueSchema: \"UsageCondition\",\n },\n appendixList: {\n description:\n \"Приложения и дополнительные материалы. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Даты элементов сохраняются.\",\n valueSchema: \"Appendix[]\",\n },\n paymentProperties: {\n description: \"Настройки оплаты по ресурсу.\",\n usage:\n \"В resourceItems.patch передавайте paymentProviderType и соответствующие parameters. Конфигурация заменяется целиком; отсутствующие/null parameters SDK автоматически не заполняет.\",\n valueSchema: \"PaymentProperties\",\n },\n ticketProperties: {\n description: \"Параметры билета/пропуска (в т.ч. state оплаты в кейсе).\",\n valueSchema: \"TicketProperties\",\n usage: \"В кейсе читается ticketProperties.state (Paid/Used) для кнопки оплаты.\",\n },\n loyaltyTransactionPropertiesList: {\n description:\n \"Параметры транзакций лояльности. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Вложенные transactionValues сохраняют nullable-контракт.\",\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`, `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 \"Расписание слотов/доступности. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\n valueSchema: \"Schedule\",\n },\n bookingDuration: {\n description: \"Длительность брони слота (единицы по контракту API, часто секунды/минуты в int64).\",\n examples: [\"3600\"],\n },\n timetableView: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day … `5` Schedule (см. MCP **`TimetableViewTypeValues`**). Не строка.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage: \"UI: `SERVICE_FORM.TYPE_INPUT`. То же число, что `CalendarItem.calendarViewIndex`.\",\n },\n registrationOpen: {\n description: \"Граница открытия записи (смещение или метка — уточнять по Swagger).\",\n },\n registrationClose: {\n description: \"Граница закрытия записи.\",\n },\n maxConsumerQuantity: {\n description: \"Максимум клиентов на слот/услугу.\",\n examples: [\"1\", \"10\"],\n },\n executorIdList: {\n description:\n \"Список профилей исполнителей. В ServiceItem optional null удаляет ключ; [] сохраняется. Full create/update допускают null, patch принимает только массив.\",\n examples: [\"[uuid1, uuid2]\"],\n },\n needApproval: {\n description: \"Требуется подтверждение заявки исполнителем.\",\n examples: [\"true\", \"false\"],\n },\n timeAlignment: {\n description: \"Шаг сетки времени для слотов.\",\n },\n orderQuote: {\n description:\n \"Квота использования услуги: максимальное число одновременно действующих заказов на пересекающемся интервале. `null` или отсутствие поля означает, что общего лимита услуги нет.\",\n examples: [\"1\", \"10\", \"null\"],\n usage:\n \"Ограничение применяется ко всей услуге независимо от выбранных ресурсов. Не смешивать с `ResourceItem.amountProperties.totalAmount`, которое ограничивает количество конкретного ресурса `Rent`.\",\n },\n marginTime: {\n description: \"Пауза между слотами.\",\n },\n executorUsagePercent: {\n description: \"Доля загрузки исполнителя (0–100 или 0–1 — по контракту).\",\n examples: [\"0.75\"],\n },\n firstWeekDate: {\n description: \"Опорная дата первой недели для построения расписания.\",\n examples: [\"2025-04-07T00:00:00.000Z\"],\n },\n clientGroupId: {\n description: \"Ограничение услуги группой клиентов.\",\n },\n resourceGroupList: {\n description:\n \"Группы ресурсов (что именно бронируется). В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные resourceIdList/quickFilterTags не меняются. Full create/update допускают null, patch принимает только массив.\",\n valueSchema: \"ResourceGroup[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при записи (телефон, email и т.д.).\",\n valueSchema: \"ParticipateFieldRequirements\",\n usage: \"TorrowItemHelper.hasRequiredPhoneOrEmail для валидации формы.\",\n },\n appendixList: {\n description:\n \"Приложения к услуге. В ServiceItem optional null удаляет ключ; [] сохраняется. Full create/update допускают null, patch принимает только массив. Самостоятельный ServiceView сохраняет nullable-контракт.\",\n valueSchema: \"Appendix[]\",\n },\n sessionDurationProperties: {\n description:\n \"Правила длительности сессии. Поля-enum — **строки OpenAPI** (`Sum`, `Consumer`, `Auto`, `DateTime`, …); каталоги MCP: `SessionDurationType`, `TimeSelectionType`, `StateManagementType`, `SessionPrecisionType`.\",\n valueSchema: \"SessionDurationProperties\",\n },\n checkInAllCases: {\n description: \"Автоматический чек-ин по всем связанным кейсам.\",\n examples: [\"true\", \"false\"],\n },\n stepDescriptionList: {\n description:\n \"Пошаговое описание сценария услуги. `stepType` — **число** (`1` Time, `2` Resource, `3` Payment); см. `StepDescription`. В ServiceItem optional null удаляет ключ; [] сохраняется, параметры шагов не меняются. Full create/update допускают null, patch принимает только массив.\",\n valueSchema: \"StepDescription[]\",\n },\n buttonName: {\n description: \"Подпись основной кнопки действия (запись, оформить).\",\n examples: [\"Записаться\"],\n },\n numeratorInfo: {\n description:\n \"Нумерация заказов/документов: поддерживается при create и чтении. Services.update не отправляет поле, patch не принимает его; root update сервером не изменяет нумератор.\",\n valueSchema: \"NumeratorInfo\",\n },\n priceInfo: {\n description:\n \"Ценовые записи со своими расписаниями. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null. В Service.patch пропуск priceInfo сохраняет цены, непустой settings заменяет список целиком, priceInfo:null и settings:[] полностью очищают цену. Для очистки SDK отправляет priceInfo:null и исключает старый root alias из ценового PUT. Это поведение относится к patch; full update выполняет свой wire-контракт. Пример с независимым GET: examples/node/item-services/services-patch-price.ts. Расчёт цены SDK не выполняет.\",\n valueSchema: \"PriceInfo\",\n },\n checkinPermission: {\n description:\n \"Кто и когда может отметить прибытие. `userAccessLevel` — строка OpenAPI (`Authenticated` / `Unauthenticated`); каталог MCP **`UserAccessLevel`** / схема **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n caseActionList: {\n description:\n \"Автоматические действия события. SDK заполняет только отсутствующий rid, валидный 24-hex сохраняется; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/services/README.md и examples/node/item-services/services-patch.ts. В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные настройки не меняются. Full create/update допускают null, patch принимает только массив; CaseItem/OrderResp сохраняют прежние nullable-поля.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description:\n \"Настройки лояльности для услуги. В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные транзакции не меняются. Full create/update допускают null, patch принимает только массив.\",\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: \"Участие текущего профиля в кейсе: участник, билет, оплата, связанные 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 \"Расписание, связанное с кейсом. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\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 \"Число мест, дополнительно зарезервированных вручную. Из вместимости вычитается отдельно от фактического consumersCount; редактируется через cases.patch.\",\n examples: [\"3\"],\n },\n executorUsagePercent: {\n description: \"Загрузка исполнителя.\",\n },\n availableResources: {\n description: \"Доступные для выбора ресурсы при записи.\",\n valueSchema: \"AvailableResources\",\n },\n needApproval: {\n description: \"Ожидается подтверждение.\",\n examples: [\"true\", \"false\"],\n },\n createSingleCases: {\n description: \"Порождение одиночных кейсов в групповом режиме.\",\n examples: [\"true\", \"false\"],\n },\n orderNumber: {\n description: \"Человекочитаемый номер заказа.\",\n valueSchema: \"OrderNumber\",\n examples: [\"ORD-2025-0042\"],\n },\n checkinPermission: {\n description:\n \"Права на чек-ин. `userAccessLevel` — строка OpenAPI (`Authenticated` / …); см. MCP **`UserAccessLevel`** / **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: {\n description: \"Скрыть кейс в списках пользователя.\",\n examples: [\"true\", \"false\"],\n },\n consumersCount: {\n description: \"Число потребителей (агрегат для UI).\",\n examples: [\"2\"],\n },\n caseSummary: {\n description: \"Краткая сводка по заказу.\",\n valueSchema: \"CaseSummary\",\n },\n appendixList: {\n description: \"Приложения.\",\n valueSchema: \"Appendix[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при участии.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priceInfo: {\n description:\n \"Цена. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null; patch требует массив.\",\n valueSchema: \"PriceInfo\",\n },\n priority: {\n description: \"Приоритет в очереди/обработке.\",\n examples: [\"1.0\"],\n },\n clientGroupId: {\n description: \"Группа клиентов.\",\n },\n caseActionList: {\n description:\n \"Автоматизации и напоминания. SDK заполняет только отсутствующий rid, валидный 24-hex сохраняется; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/cases/README.md и examples/node/item-cases/cases-patch.ts.\",\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`** — метаданные владельца структуры: элемента, персональной связи или другого объекта.\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:\n \"Версия сущности, которой принадлежат метаданные: item.meta — элемента, personalInfo.meta — персональной связи. Эти версии независимы.\",\n examples: [\"1\", \"42\"],\n usage:\n \"Для CAS выбирайте версию обновляемой сущности и способ передачи по контракту метода: versionToCheck в query либо meta.version в теле с checkVersion. Версия персональной связи не заменяет версию элемента.\",\n },\n lastModified: {\n description:\n \"Время последнего изменения владельца метаданных (ISO 8601). В personalInfo.meta относится к персональной связи и не обязано совпадать с item.meta.lastModified.\",\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","/** Описание метаданных персонального участия `PersonalInfo` (подмножество схемы OpenAPI). */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"../field-doc-entry.js\";\n\nexport const personalInfoFieldDocEntries = {\n meta: {\n description:\n \"Метаданные PersonalLink текущего участника, отдельной сущности относительно самого элемента. version и lastModified независимы от item.meta.\",\n valueSchema: \"ObjectInfo\",\n usage:\n \"При полном services.update сервер может обновить эти метаданные даже при изменении только имени; isNeedAnnouncement=false не отключает этот эффект. Не используйте эту версию для CAS услуги и не восстанавливайте прежнюю meta ради устранения diff. Границы подтверждённого поведения: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const personalInfoFieldDocs = mapFieldDocsToStrings(personalInfoFieldDocEntries);\n","/**\n * Агрегат описаний полей **элементов** (*Item) для **генерации MCP-сервера** и внешних тулов:\n * каждый ключ — имя схемы в OpenAPI, значение — карта полей → {@link ItemFieldDoc}.\n *\n * Связи и mind map: {@link mcpRelationFieldCatalog}; запись и оплата: `mcpBookingFieldCatalog` в `mcp-booking-catalog.ts`;\n * представления: `mcpViewsFieldCatalog` в `mcp-views-catalog.ts`; объединение: {@link mcpFullFieldCatalog}.\n *\n * Строковые плоские карты (`*FieldDocs`) получайте через {@link fieldDocToString} при необходимости\n * или используйте готовые `contactItemFieldDocs` из пакета.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { calendarItemFieldDocEntries } from \"./calendar-item.js\";\nimport { caseItemFieldDocEntries } from \"./case-item.js\";\nimport { contactItemFieldDocEntries } from \"./contact-item.js\";\nimport { contextItemFieldDocEntries } from \"./context-item.js\";\nimport { loyaltySystemItemFieldDocEntries } from \"./loyalty-system-item.js\";\nimport { noteItemFieldDocEntries } from \"./note-item.js\";\nimport { objectInfoFieldDocEntries } from \"./nested/object-info.js\";\nimport { personalInfoFieldDocEntries } from \"./nested/personal-info.js\";\nimport { resourceItemFieldDocEntries } from \"./resource-item.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const mcpItemFieldCatalog: {\n TorrowItem: Record<string, ItemFieldDoc>;\n ContactItem: Record<string, ItemFieldDoc>;\n NoteItem: Record<string, ItemFieldDoc>;\n ContextItem: Record<string, ItemFieldDoc>;\n CalendarItem: Record<string, ItemFieldDoc>;\n ResourceItem: Record<string, ItemFieldDoc>;\n ServiceItem: Record<string, ItemFieldDoc>;\n CaseItem: Record<string, ItemFieldDoc>;\n LoyaltySystemItem: Record<string, ItemFieldDoc>;\n ObjectInfo: Record<string, ItemFieldDoc>;\n PersonalInfo: Record<string, ItemFieldDoc>;\n} = {\n TorrowItem: { ...torrowItemBaseFieldDocEntries },\n ContactItem: { ...contactItemFieldDocEntries },\n NoteItem: { ...noteItemFieldDocEntries },\n ContextItem: { ...contextItemFieldDocEntries },\n CalendarItem: { ...calendarItemFieldDocEntries },\n ResourceItem: { ...resourceItemFieldDocEntries },\n ServiceItem: { ...serviceItemFieldDocEntries },\n CaseItem: { ...caseItemFieldDocEntries },\n LoyaltySystemItem: { ...loyaltySystemItemFieldDocEntries },\n ObjectInfo: { ...objectInfoFieldDocEntries },\n PersonalInfo: { ...personalInfoFieldDocEntries },\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 patch: {\n description:\n \"Частичное изменение всех 30 подтверждённых полей Service: GET → максимум один CAS PUT, Full/UpdateItem/version обязательны. Null/[] очистка предметных полей, цены меняются через priceInfo; нет retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: ServiceItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ServiceItem>\",\n usage:\n \"Numerator create/read only; packing исключён; теги/BehaviorSettings/социальные аспекты через отдельные методы. Версия относится к item.meta.version, не personalInfo.meta.\",\n },\n update: {\n description:\n \"Полное PUT /api/v1/services/{body.id}. Сервер может обновить personalInfo.meta даже при изменении только имени; isNeedAnnouncement=false отключает только announcement.\",\n valueSchema: \"ServiceItemForUpdate + options → ServiceItem\",\n usage:\n \"Версия для CAS относится к услуге (meta.version), не к персональной связи. Общее объяснение, пример diff и ограничение SDK-типа тела: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n },\n getBehaviorSettings: {\n description:\n \"Один GET: ID, версия всей услуги, предметные настройки и issues. Непустой issues означает неполный снимок.\",\n valueSchema: \"ServiceBehaviorSettingsState\",\n usage: \"Использовать state.version как versionToCheck; внутреннее представление обрабатывает SDK.\",\n },\n updateBehaviorSettings: {\n description:\n \"GET → patch → PUT /api/v1/services/{id}/tags с необязательным CAS; no-op без PUT, readback отсутствует.\",\n valueSchema:\n \"Partial<ServiceBehaviorSettings> + ServiceBehaviorSettingsUpdateOptions → ServiceBehaviorSettingsUpdateResult\",\n usage:\n \"Для CAS передай versionToCheck или checkVersion: true; без них проверка выключена; mergeParameters=true сохраняет пропущенные поля, false полностью заменяет настройки. Ошибка PUT может означать неопределённый исход; не повторять автоматически.\",\n },\n setBehaviorSettings: {\n description:\n \"Полная замена с необязательной проверкой версии: пропущенные настройки очищаются, посторонние данные сохраняются.\",\n valueSchema: \"ServiceBehaviorSettings + options → ServiceBehaviorSettingsUpdateResult\",\n usage:\n \"Для сброса прочитай полный снимок без issues, исключи поле и вызови set с исходной версией. checkVersion может быть только true; isNeedAnnouncement по умолчанию false.\",\n },\n createOrder: {\n description:\n \"`POST /api/v1/services/{serviceId}/order`. Тело: `CreateOrderReq`. Ответ: `OrderResp` (часто содержит `order` как `CaseItem` и `consumerSecurityToken` для последующих гостевых запросов). Создаёт заказ/кейс по выбранным слотам и ресурсам.\",\n valueSchema: \"CreateOrderReq → OrderResp\",\n usage:\n \"Финальный шаг мастера записи после выбора времени и ресурсов: отправка собранного тела `CreateOrderReq` на сервер.\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/services/{serviceId}/timetable`. Тело: `TimetableFilter`. Query: `TimetableQueryOptions` (в т.ч. `visibility`). Ответ: `TimetableCase[]` (события/заказы и интервалы расписания).\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n 'Передавай `from`/`to`; при уже выбранных ресурсах — `bookingResourceFilter.resourceGroupIdList`. Метод возвращает события/заказы и занятость, а не вычисленные свободные окна. Для доступных слотов записи используй `getCheckInSchedule` с `type: \"FreeTimeSlots\"`; для полных карточек событий — `visibility: \"View\"`.',\n },\n getServiceResources: {\n description:\n \"`POST /api/v1/services/{serviceId}/resources`. Тело: `SearchServiceResourcesReq`. Список `ResourceView` для группы ресурсов шага мастера.\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Минимум `resourceGroupId` из `StepDescription`; при выборе времени до ресурсов — `timePeriod`.\",\n },\n getServiceResourcesWithDetalization: {\n description:\n \"`POST /api/v1/services/{serviceId}/resourceswithdetalization`. Как `getServiceResources`, плюс агрегаты (`guaranteedResourcesQuantity` и т.д.).\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Когда UI нужны количественные подсказки по группе.\",\n },\n getWorkloadInfo: {\n description:\n \"`PUT /api/v1/services/workloadinfo`. Тело: `GetServiceWorkloadInfoRequest` (`workloadOptions`, `timePeriod`). Ответ: `GetServiceWorkloadInfoResp` — `workloadInfoList` с вложенными `timetable`/`workload` по ресурсам, `serviceStructureList`.\",\n valueSchema: \"GetServiceWorkloadInfoRequest → GetServiceWorkloadInfoResp\",\n usage:\n \"Календарь владельца/исполнителя: список ресурсов услуги с вложенными `timetable` и `workload` за период без N запросов на каждый ресурс. Для плоского списка событий/заказов по услуге без разреза по ресурсам чаще достаточно `services.getTimetable` по `serviceId`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/services/timetable/statistics`. Тело: `GetTimetableStatisticsRequest`. Агрегаты по расписанию услуги.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n getCheckInSchedule: {\n description:\n \"`POST /api/v1/services/{serviceId}/checkinschedule`. Тело: `GetCheckInScheduleReq` (`timePeriod`, `resourceIdList`, …). Ответ: `GetCheckInScheduleResp` — окна `checkInSchedule`, детализация `workloadDetalization`.\",\n valueSchema: \"GetCheckInScheduleReq → GetCheckInScheduleResp\",\n usage:\n 'Для UI выбора свободного времени передавай `type: \"FreeTimeSlots\"`; `checkInSchedule` содержит `WorkloadPeriod` с `from`/`to`. Режим `AsIs` возвращает сырые периоды нагрузки (`FreeTime`, `BusyTime`, `NotWorkingTime` и др.), а не только выбираемые слоты.',\n },\n getReCheckInSchedule: {\n description:\n \"`PUT /api/v1/services/{serviceId}/recheckinschedule`. Тело: `GetReCheckInScheduleReq` (обязателен `caseId`, опционально `securityToken`). Ответ как у `getCheckInSchedule`.\",\n valueSchema: \"GetReCheckInScheduleReq → GetCheckInScheduleResp\",\n usage: \"Пересчёт доступности после изменения события/заказа.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** `TorrowClient.resourceItems` — расписание и операции в домене ресурса. */\nexport const resourceItemsBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/resources/{id}` + парсинг managed параметров ресурса (`ResourceBehaviorSettings`) из `tags` (`marginTimeSec`, `lockId`).\",\n valueSchema: \"ResourceItem.tags → ResourceBehaviorSettings\",\n },\n updateBehaviorSettings: {\n description:\n \"GET → merge patch → PUT /api/v1/resources/{id}/tags → GET. Сбой readback после подтверждённого PUT сохраняет effect Applied; без подтверждения Unknown.\",\n valueSchema: \"Partial<ResourceBehaviorSettings> → ResourceItem\",\n },\n setBehaviorSettings: {\n description:\n \"Полная установка ResourceBehaviorSettings (mergeParameters=false); сохраняет GET→PUT /tags→GET и собственное имя операции в TorrowSdkError.\",\n valueSchema: \"ResourceBehaviorSettings → ResourceItem\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/resources/{resourceId}/timetable`. Как расписание услуги, но якорь — ресурс. Тело `TimetableFilter`, query `TimetableQueryOptions` без `createDateFrom`/`createDateTo`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n 'Список событий/заказов ресурса (исполнитель, зал). Для полных деталей — `visibility: \"View\"` (см. `TimetableQueryOptions`).',\n },\n getWorkload: {\n description:\n \"`GET /api/v1/resources/{resourceId}/workload`. Query: `From`, `To` (date-time), опционально `serviceId` — полосы занятости для фона календаря.\",\n valueSchema: \"query → WorkloadPeriod[]\",\n },\n pickOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/pickorder`. Тело: `PickOrderReq`. Исполнитель забирает заказ.\",\n valueSchema: \"PickOrderReq → PickOrderResp\",\n },\n returnOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/returnorder`. Тело: `ReturnOrderReq`. Откат pick.\",\n valueSchema: \"ReturnOrderReq → ReturnOrderResp\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/resources/timetable/statistics`. Как у услуги, но путь домена `resources`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полиморфное расписание: те же `TimetableFilter` / `TimetableCase`, что у услуги, но якорь — календарь или контакт. */\nexport const calendarContactTimetableSdkMethodFieldDocEntries = {\n calendarsGetTimetable: {\n description:\n \"`PUT /api/v1/calendars/{id}/timetable`. Тело `TimetableFilter`, query `TimetableQueryOptions` (без `createDate*`), ответ `TimetableCase[]`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: '`TorrowClient.calendars.getTimetable`; для карточек событий — `visibility: \"View\"`.',\n },\n calendarsGetTimetableStatistics: {\n description: \"`POST /api/v1/calendars/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n contactsGetTimetable: {\n description:\n \"`PUT /api/v1/contacts/{id}/timetable`. Расписание событий/заказов контакта (профиль/исполнитель). Query: `TimetableQueryOptions` без `createDate*`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: '`TorrowClient.contacts.getTimetable`; для имён/сводок — `visibility: \"View\"`.',\n },\n contactsGetTimetableStatistics: {\n description: \"`POST /api/v1/contacts/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Параметры `TorrowClient.cases.getById`, важные для билета и ссылки оплаты. */\nexport const casesPaymentSdkMethodFieldDocEntries = {\n getById: {\n description:\n \"`GET /api/v1/cases/{torrowId}`. Возвращает `CaseItem` с персональным контекстом. Для гостя после `createOrder` передавай `securityToken` (из `OrderResp.consumerSecurityToken`) и при необходимости `caseParticipantId`, иначе `personalInfo.ticketResource` может быть недоступен.\",\n valueSchema: \"query → CaseItem\",\n usage:\n \"Если `paymentUrl` ещё пуст, после короткой задержки повтори `cases.getById` с теми же параметрами доступа и снова прочитай `personalInfo.ticketResource.ticketProperties.paymentUrl` (асинхронное заполнение со стороны провайдера).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createOrderReqFieldDocEntries = {\n checkInProperties: {\n description:\n \"Один или несколько участников записи: слот `availabilityTime`, тип участника, контакты, выбранные `bookingResourceList`, напоминания.\",\n valueSchema: \"CheckInProps[]\",\n usage: \"Собирается из состояния мастера; обязательное поле запроса.\",\n },\n resourceList: {\n description:\n \"Плоский список выбранных ресурсов для заказа (`resourceId`, `resourceGroupId`, `amount`). Альтернатива/дополнение к вложенным `bookingResourceList` внутри `checkInProperties` — зависит от сценария API.\",\n valueSchema: \"BookingResourceReq[] | null\",\n },\n profileId: {\n description: \"Профиль инициатора записи (текущий пользователь), если отличается от токена или нужен явно.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n orderInfo: {\n description: \"Комментарий, место, общий `timePeriod` заказа (например выбранный диапазон дат).\",\n valueSchema: \"OrderInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsFieldDocEntries = {\n caseParticipantId: {\n description: \"Идентификатор участника кейса после создания/дозаписи; для обновления существующего участия.\",\n valueSchema: \"string | null\",\n },\n profileId: {\n description: \"Профиль участника, для которого формируется чек-ин.\",\n valueSchema: \"string | null\",\n },\n roadTimeBefore: {\n description: \"Запас времени «до» визита (секунды), если задан в услуге.\",\n examples: [\"900\"],\n },\n roadTimeAfter: {\n description: \"Запас времени «после» визита (секунды).\",\n examples: [\"600\"],\n },\n comment: {\n description: \"Комментарий участника к записи.\",\n },\n availabilityTime: {\n description:\n \"Статус доступности участника (`Free`/`Busy` и др.), не временной интервал. Выбранные границы слота передаются в `CreateOrderReq.orderInfo.timePeriod`.\",\n valueSchema: \"AvailabilityTime\",\n usage: \"Не копируй сюда `WorkloadPeriod`; это enum-поле внутри `checkInProperties`.\",\n },\n reminders: {\n description: \"Персональные напоминания участника.\",\n valueSchema: \"PersonalReminder[] | null\",\n },\n bookingResourceList: {\n description: \"Ресурсы, выбранные в мастере для этого участника (связь с группами услуги).\",\n valueSchema: \"BookingResource[] | null\",\n },\n caseParticipantType: {\n description: \"Роль в кейсе (потребитель, исполнитель и т.д.).\",\n valueSchema: \"CaseParticipantType\",\n examples: [\"Consumer\", \"Executor\"],\n },\n contactInformation: {\n description: \"Значения полей контакта при записи (телефон, ФИО), если требуются `participateFieldRequirements`.\",\n valueSchema: \"ContactInformation\",\n },\n showCaseInTimetableType: {\n description: \"Как отображать кейс в расписании пользователя.\",\n valueSchema: \"ShowCaseInTimetableType\",\n },\n participantTimeZone: {\n description: \"IANA или смещение часового пояса участника для интерпретации слотов.\",\n examples: [\"Europe/Moscow\"],\n },\n trackingInformation: {\n description: \"Данные трекинга/доставки, если сценарий услуги их собирает.\",\n valueSchema: \"TrackingInformation\",\n },\n loyaltyCardId: {\n description: \"Применяемая карта лояльности.\",\n },\n subscriptionId: {\n description: \"Привязанная подписка, если есть.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const availabilityTimeFieldDocEntries = {\n value: {\n description:\n \"Код доступности слота/участника (`Free`/`Busy`). В check-in flow по умолчанию часто используется `Busy` для подтверждённой записи.\",\n valueSchema: \"AvailabilityTime\",\n examples: [\"Free\", \"Busy\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactInformationFieldDocEntries = {\n fields: {\n description: \"Массив заполненных полей контакта участника (`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: 'Тип шага в JSON — **число**: `0` Unknown, `1` Time, `2` Resource, `3` Payment. Не строка `\"Time\"`.',\n examples: [\"0\", \"1\", \"2\", \"3\"],\n usage: \"Wire int из API; в SDK те же числа — `ServiceCheckInWizardStepType`.\",\n },\n description: {\n description: \"Человекочитаемый текст шага из настроек услуги (подсказка в UI).\",\n },\n stepParameterList: {\n description: \"Параметры шага (флаги и `ResourceGroupId` для типа Resource).\",\n valueSchema: \"StepParameter[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepParameterFieldDocEntries = {\n parameterName: {\n description:\n \"Имя параметра: для ресурса — `ResourceGroupId`, `HiddenStep`, `HideResourceDetail`, `AutoChoiceResource` (строки как в `ServiceCheckInWizardStepParameterName`).\",\n examples: [\"ResourceGroupId\", \"HiddenStep\", \"HideResourceDetail\", \"AutoChoiceResource\"],\n },\n parameterValue: {\n description: 'Значение: для флагов часто `\"true\"`; для группы — UUID группы ресурсов.',\n examples: [\"true\", \"550e8400-e29b-41d4-a716-446655440000\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchServiceResourcesReqFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурсов услуги; обязательна для шага «Ресурс» мастера.\",\n usage: \"Берётся из `getResourceGroupIdFromStep(step)` в SDK.\",\n },\n text: {\n description: \"Поисковая строка по ресурсам (имя, описание — зависит от бэкенда).\",\n },\n resourceIds: {\n description: \"Ограничить выборку конкретными id ресурсов.\",\n valueSchema: \"string[] | null\",\n },\n timePeriod: {\n description: \"Фильтр доступности по времени до выбора слота в календаре.\",\n valueSchema: \"TimePeriod\",\n },\n caseIdsToExclude: {\n description: \"Исключить занятость указанных кейсов при расчёте доступности.\",\n valueSchema: \"string[] | null\",\n },\n distance: {\n description: \"Радиус поиска для геозависимых ресурсов (если поддерживается услугой).\",\n examples: [\"5000\"],\n },\n take: {\n description: \"Лимит записей (пагинация).\",\n examples: [\"20\"],\n },\n skip: {\n description: \"Смещение пагинации.\",\n examples: [\"0\"],\n },\n includeDeleted: {\n description: \"Включать ли удалённые элементы в выборку.\",\n examples: [\"false\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Query-параметры `TimetableQueryOptions` для `PUT .../{id}/timetable`\n * (`services` / `resourceItems` / `calendars` / `contacts.getTimetable`).\n */\nexport const timetableQueryOptionsFieldDocEntries = {\n visibility: {\n description:\n \"Глубина деталей ответа `TimetableCase[]` (`TimetableDetailsVisibility`). `View` — подгрузить CaseView + CaseSummary для событий/заказов (имена, сводки); в torrow-apps это дефолт календаря/списков и экспорта заказов. `Time` — в основном интервалы занятости без полного обогащения событий/заказов (фон календаря / busy-bars). Эхо режима — в `TimetableCase.detailsVisibility`.\",\n valueSchema: \"TimetableDetailsVisibility | null\",\n examples: [\"View\", \"Time\"],\n usage:\n \"Для UI списка событий и CSV-экспорта передавай `View`. Для лёгкой занятости без карточек — `Time`. См. каталог enum `TimetableDetailsVisibility`.\",\n },\n take: {\n description: \"Лимит записей расписания (пагинация query).\",\n valueSchema: \"number | null\",\n examples: [\"30\", \"50\"],\n },\n skip: {\n description: \"Смещение пагинации query.\",\n valueSchema: \"number | null\",\n examples: [\"0\"],\n },\n lmfrom: {\n description: \"Нижняя граница `lastModified` (date-time) для инкрементальной выборки.\",\n valueSchema: \"Date | null\",\n },\n lmto: {\n description: \"Верхняя граница `lastModified` (date-time).\",\n valueSchema: \"Date | null\",\n },\n includeDeleted: {\n description: \"Включать ли удалённые записи в выборку расписания.\",\n valueSchema: \"boolean | null\",\n examples: [\"false\"],\n },\n sort: {\n description: \"Сортировка списка (как в OpenAPI `ItemViewSortCondition`).\",\n valueSchema: \"ItemViewSortCondition | null\",\n },\n createDateFrom: {\n description:\n \"Нижняя граница по дате создания события/заказа. Только у расписания **услуги** (`services.getTimetable`, NSwag `ServiceClient.getTimetable`) — экспорт заказов и т.п.\",\n valueSchema: \"Date | null\",\n },\n createDateTo: {\n description: \"Верхняя граница по дате создания события/заказа. Только у `services.getTimetable`.\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableFilterFieldDocEntries = {\n from: {\n description: \"Начало интервала расписания событий/заказов (ISO 8601).\",\n examples: [\"2026-04-01T00:00:00.000Z\"],\n },\n to: {\n description: \"Конец интервала; может быть null в некоторых сценариях — уточняй по Swagger.\",\n examples: [\"2026-04-07T23:59:59.999Z\"],\n },\n caseStateList: {\n description: \"Фильтр по состояниям событий/заказов в слотах.\",\n valueSchema: \"CaseState[] | null\",\n },\n caseTypeList: {\n description: \"Фильтр по типам событий/заказов.\",\n valueSchema: \"CaseType[] | null\",\n },\n caseParticipantTypeList: {\n description: \"Фильтр по типам участников.\",\n valueSchema: \"CaseParticipantType[] | null\",\n },\n caseParticipantStateList: {\n description: \"Фильтр по состояниям участников.\",\n valueSchema: \"CaseParticipantState[] | null\",\n },\n availabilityTimeList: {\n description: \"Уточнение по конкретным интервалам доступности.\",\n valueSchema: \"AvailabilityTime[] | null\",\n },\n profileIdList: {\n description: \"Ограничение расписания по профилям (исполнители и т.д.).\",\n valueSchema: \"string[] | null\",\n },\n serviceIdList: {\n description: \"Фильтр по услугам в агрегированном расписании.\",\n valueSchema: \"string[] | null\",\n },\n caseIdListToExclude: {\n description: \"Исключить события/заказы из отображения занятости.\",\n valueSchema: \"string[] | null\",\n },\n hasService: {\n description: \"Флаг наличия услуги в записи (фильтр агрегатов).\",\n examples: [\"true\"],\n },\n strictlyInTimeRange: {\n description: \"Требовать полного вхождения событий/заказов в интервал `from`/`to`.\",\n examples: [\"true\", \"false\"],\n },\n bookingResourceFilter: {\n description: \"После выбора ресурсов — список `resourceGroupIdList` для учёта занятости групп.\",\n valueSchema: \"BookingResourceFilter\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFilterFieldDocEntries = {\n resourceGroupIdList: {\n description: \"Группы ресурсов, которые уже выбраны в мастере; передаются в `TimetableFilter` для уточнения слотов.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketPropertiesFieldDocEntries = {\n state: {\n description:\n \"Состояние билета: `Waiting` — ожидает оплаты; `Paid` / `Used` — оплачен или использован; `Canceled`, `Error` — терминальные.\",\n valueSchema: \"TicketState\",\n examples: [\"Waiting\", \"Paid\", \"Used\"],\n usage: \"UI решает, показывать ли кнопку оплаты и внешнюю ссылку.\",\n },\n ticketNumber: {\n description: \"Номер билета для отображения и поддержки.\",\n valueSchema: \"TicketNumber\",\n },\n paymentUrl: {\n description:\n \"URL внешней оплаты (платёжный шлюз). Может прийти без схемы — нормализуй через `normalizePaymentUrl` в SDK.\",\n examples: [\"https://pay.example.com/session/abc\", \"payment.example.com/path\"],\n usage:\n \"Источник: `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`. Наличие зависит от провайдера; для не-cash иногда заполняется после повторного `cases.getById`.\",\n },\n paymentExpirationDate: {\n description: \"Срок действия ссылки или сессии оплаты (ISO 8601).\",\n examples: [\"2026-04-15T12:00:00.000Z\"],\n },\n paymentConfirmationSource: {\n description:\n \"Источник подтверждения оплаты: `PaymentLink` — по ссылке, `Manager` — менеджером, `UnknownTicketPaymentConfirmationSource` — не определён.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n examples: [\"PaymentLink\", \"Manager\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentParametersFieldDocEntries = {\n text: {\n description: \"Общий текст в блоке оплаты (информационный дисклеймер рядом с кнопками).\",\n valueSchema: \"string | null\",\n },\n beforePayMessage: {\n description: \"Сообщение до оплаты. В мобильном flow показывается, пока `ticketProperties.state === Waiting`.\",\n valueSchema: \"string | null\",\n },\n afterPayMessage: {\n description: \"Сообщение после оплаты. В мобильном 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: \"`ResourceItem` билета: `ticketProperties` содержит `paymentUrl`, `state`, `paymentExpirationDate`.\",\n valueSchema: \"ResourceItem\",\n usage: \"Читай через `getTicketPaymentUrl(caseItem)` в SDK.\",\n },\n paymentResource: {\n description: \"Ресурс с данными оплаты/провайдера в персональном контексте (параллельно билету).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"Альтернативный или дополнительный узел оплаты в персональном контексте: если основной URL в билете недоступен, приложение может проверить `paymentResource` (тип и поля — по ответу API и сценарию оплаты).\",\n },\n caseParticipant: {\n description: \"Текущий участник и его поля; нужен для гостевого сценария с `caseParticipantId` в query.\",\n valueSchema: \"CaseParticipant\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldDocEntries = {\n id: { description: \"ID участия в кейсе.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль участника.\", valueSchema: \"string | null\" },\n loyaltyCardId: {\n description: \"ID карты лояльности участника (чтение и запись).\",\n valueSchema: \"string | null\",\n },\n caseParticipantState: {\n description: \"Состояние участия (`Booking`, `Registered`, ...).\",\n valueSchema: \"CaseParticipantState\",\n },\n caseParticipantType: {\n description: \"Тип участия (`Consumer`, `Executor`, `Escort`).\",\n valueSchema: \"CaseParticipantType\",\n },\n roadTimeBefore: { description: \"Время в пути до визита.\", valueSchema: \"int32 | null\" },\n roadTimeAfter: { description: \"Время в пути после визита.\", valueSchema: \"int32 | null\" },\n availabilityTime: {\n description: \"Статус доступности участника: `Free`, `Busy` или системное неизвестное значение.\",\n valueSchema: \"AvailabilityTime\",\n },\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: {\n description: \"Статус доступности участника (`Free`/`Busy`), не границы выбранного слота.\",\n valueSchema: \"AvailabilityTime\",\n },\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 notificationWayList: {\n description: \"Способы уведомления в персональных сведениях участника кейса.\",\n valueSchema: \"NotificationWay[]\",\n usage:\n \"Optional read-поле: серверный null удаляет ключ, [] сохраняется. Вложенные deliveryWayList и notificationTypeList не нормализуются. updateNotificationWayList принимает массив.\",\n },\n personalReminders: {\n description: \"Персональные напоминания пользователя по кейсу.\",\n valueSchema: \"PersonalReminder[]\",\n usage:\n \"Optional read-поле: серверный null удаляет ключ, отсутствие сохраняется, [] остаётся присутствующим массивом. updateReminders принимает массив; [] очищает. Отсутствующий rid создаётся SDK на копии входа.\",\n },\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: \"В `PaymentInfoStore` используется как fallback, когда `CaseItem.personalInfo.paymentResource` не заполнен.\",\n },\n profileType: {\n description: \"Тип профиля участника в контексте view.\",\n valueSchema: \"ProfileType\",\n },\n profileProperties: {\n description: \"Параметры профиля (цвет, иконка, настройки отображения).\",\n valueSchema: \"ProfileProperties\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderRespFieldDocEntries = {\n order: {\n description: \"Созданный или обновлённый кейс заказа; структура как у `CaseItem`.\",\n valueSchema: \"CaseItem\",\n },\n consumerSecurityToken: {\n description:\n \"Токен для анонимного/гостевого доступа к кейсу после создания заказа; передавай в `cases.getById(..., { securityToken })`.\",\n examples: [\"eyJhbGciOi...\"],\n usage: \"Без него гость не увидит `personalInfo.ticketResource` с `paymentUrl`.\",\n },\n beginDate: {\n description:\n \"Копии полей кейса на верхнем уровне ответа (дублирование вложенного `order` для обратной совместимости клиентов).\",\n valueSchema: \"string | null\",\n },\n endDate: {\n description: \"Конец интервала заказа на верхнем уровне ответа.\",\n valueSchema: \"string | null\",\n },\n personalInfo: {\n description: \"Персональный контекст на верхнем уровне `OrderResp` (дублирование с вложенным `order`).\",\n valueSchema: \"CasePersonalInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketSummaryFieldDocEntries = {\n state: { description: \"Сводное состояние билета.\", valueSchema: \"TicketState\" },\n sum: { description: \"Итоговая сумма к оплате.\", valueSchema: \"double | null\" },\n currencyCode: { description: \"Код валюты суммы.\", valueSchema: \"string | null\" },\n salePrice: { description: \"Цена продажи.\", valueSchema: \"double | null\" },\n prepayment: { description: \"Размер предоплаты.\", valueSchema: \"double | null\" },\n priceWithoutDiscount: { description: \"Цена без скидок.\", valueSchema: \"double | null\" },\n paymentConfirmationSource: {\n description: \"Источник подтверждения оплаты в сводке билета.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingWizardSdkFieldDocEntries = {\n ServiceResourceLinking: {\n description:\n \"Связь хранится с двух сторон: `ServiceItem.resourceGroupList` описывает доступные группы и порядок ресурсных шагов, а `ResourceItem.serviceDescriptions` связывает конкретный ресурс с группой по паре `serviceId + resourceGroupId`.\",\n valueSchema: \"ServiceItem.resourceGroupList + ResourceItem.serviceDescriptions\",\n usage:\n \"`ResourceBuilder.attachToService` берёт имена из актуальных услуги и группы, а `laterBinding` вычисляет как наличие `ResourceGroup.bookingProperties`. `parentId` и `resourceGroupList.resourceIdList` эту связь не заменяют.\",\n },\n ServiceBuilder: {\n description:\n \"Локальный builder тела услуги: согласует `resourceGroupList` и `stepDescriptionList`, добавляет несколько шагов до одного `services.create` или `services.update` и не выполняет HTTP.\",\n valueSchema: \"ServiceItemForCreateOrUpdate | ServiceItem → ServiceBuildResult\",\n },\n ResourceBuilder: {\n description:\n \"Локальный builder тела ресурса: по загруженному `ServiceItem` добавляет, обновляет и удаляет связи `serviceDescriptions` по паре `serviceId + resourceGroupId`, проверяет `usageType` и не выполняет HTTP. Результат сохраняется обычным `resourceItems.create` или `update`.\",\n valueSchema: \"ResourceItemForCreateOrUpdate | ResourceItem → ResourceBuildResult\",\n usage:\n \"Формирует `serviceName` и `resourceGroupName` из переданных данных; `laterBinding` равен признаку наличия `bookingProperties` у группы.\",\n },\n ResourceServiceBindingOptions: {\n description:\n \"Опциональные поля связи ресурса с группой услуги: `usageAmount` и `sortIndex`. Пропущенное значение сохраняется при обновлении связи, `null` очищает его.\",\n valueSchema: \"{ usageAmount?; sortIndex? }\",\n },\n expandBookingWizardSteps: {\n description:\n \"Функция SDK: по `ServiceItem` строит список шагов `{ kind: time | resource | payment, ... }` в порядке `stepDescriptionList`, с пропуском шагов ресурса при вырожденных лимитах группы (`minResources`/`maxResources`) и отсутствии `ResourceGroupId`.\",\n usage: \"Импорт из `@torrow/sdk-client`; не HTTP.\",\n },\n getTimeStepUiMode: {\n description:\n \"По `sessionDurationProperties` возвращает режим виджета времени: `selectDate` | `selectDateRange` | `selectTimeBegin` | `selectTime`.\",\n usage: \"См. `booking-wizard-hints.ts`.\",\n },\n getTicketPaymentUrl: {\n description:\n \"Извлекает и нормализует URL оплаты из `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`.\",\n usage: \"После `cases.getById` или из `order` в `OrderResp`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Типы услуг и прямое/обратное преобразование `SessionDurationProperties`. */\nexport const serviceTypePresetFieldDocEntries = {\n ServiceType: {\n description:\n \"Публичный тип услуги: пять известных конфигураций и `Custom` для любого другого сочетания трёх определяющих полей.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent | Custom\",\n },\n ServiceTypePresetValues: {\n description:\n \"Deprecated-совместимость для пяти прежних preset-значений, включая `AutoRent`; новый код использует `ServiceType`.\",\n valueSchema: \"Record<string, ServiceTypePreset>\",\n usage:\n \"Выбери бизнес-тип и передай значение в `createServiceSessionDurationProperties`; список не является полным перечислением внутренних типов torrow-apps.\",\n },\n ServiceTypePreset: {\n description:\n \"Union публичных preset-значений, для которых SDK знает подтверждённое сочетание `sessionDurationType`, `timeSelectionType` и `stateManagementType`.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent\",\n },\n ServiceSessionDurationOptions: {\n description:\n \"Дополнительные поля `SessionDurationProperties`: точность, длительности и границы времени. Три поля, определяющие тип услуги, намеренно исключены.\",\n valueSchema: \"Omit<SessionDurationProperties, sessionDurationType | timeSelectionType | stateManagementType>\",\n },\n createServiceSessionDurationProperties: {\n description:\n \"Чистый helper SDK, который строит согласованный `SessionDurationProperties` по известному `ServiceType`; `Custom` требует явных параметров.\",\n valueSchema: \"KnownServiceType + ServiceSessionDurationOptions → SessionDurationProperties\",\n usage:\n \"Используй при сборке `ServiceItemForCreateOrUpdate` перед `services.create` или `services.update`. Неизвестный runtime preset приводит к `TypeError`.\",\n },\n getServiceType: {\n description:\n \"Определяет `ServiceType` услуги по точному совпадению `sessionDurationType`, `timeSelectionType`, `stateManagementType`; остальные сочетания дают `Custom`.\",\n valueSchema: \"Pick<ServiceItem, sessionDurationProperties> → ServiceType\",\n },\n getServiceTypeFromSessionDurationProperties: {\n description:\n \"Обратное преобразование `SessionDurationProperties` в `ServiceType`. Не меняет данные и не считает `Custom` признаком валидности конфигурации.\",\n valueSchema: \"SessionDurationProperties | null | undefined → ServiceType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const servicesBookingSdkMethodFieldDocs = mapFieldDocsToStrings(servicesBookingSdkMethodFieldDocEntries);\nexport const casesPaymentSdkMethodFieldDocs = mapFieldDocsToStrings(casesPaymentSdkMethodFieldDocEntries);\n","/**\n * Каталог полей **записи на услугу, мастера и оплаты** для MCP и агентов.\n * Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n behaviorSettingsEffectStepFieldDocEntries,\n behaviorSettingsErrorDetailFieldDocEntries,\n serviceBehaviorSettingsFieldDocEntries,\n serviceBehaviorSettingsIssueFieldDocEntries,\n serviceBehaviorSettingsIssueReasonFieldDocEntries,\n serviceBehaviorSettingsStateFieldDocEntries,\n serviceBehaviorSettingsUpdateOptionsFieldDocEntries,\n serviceBehaviorSettingsUpdateResultFieldDocEntries,\n} from \"./service-behavior-settings-field-docs.js\";\nimport {\n availabilityTimeFieldDocEntries,\n bookingResourceFieldDocEntries,\n bookingResourceFilterFieldDocEntries,\n bookingResourceReqFieldDocEntries,\n bookingWizardSdkFieldDocEntries,\n calendarContactTimetableSdkMethodFieldDocEntries,\n caseParticipantFieldDocEntries,\n caseParticipantFieldsFieldDocEntries,\n caseParticipantViewPaymentFieldDocEntries,\n casePersonalInfoFieldDocEntries,\n casePersonalInfoPaymentFieldDocEntries,\n casesPaymentSdkMethodFieldDocEntries,\n checkInPropsModelFieldDocEntries,\n checkInPropsFieldDocEntries,\n contactInformationFieldDocEntries,\n createOrderReqFieldDocEntries,\n locationActivationFieldDocEntries,\n orderInfoFieldDocEntries,\n orderRespFieldDocEntries,\n paymentParametersFieldDocEntries,\n paymentPropertiesFieldDocEntries,\n profilePropertiesFieldDocEntries,\n participateFieldRequirementFieldDocEntries,\n participateFieldRequirementsFieldDocEntries,\n participateFieldValueFieldDocEntries,\n personalReminderFieldDocEntries,\n resourceItemsBookingSdkMethodFieldDocEntries,\n recurringConditionsFieldDocEntries,\n searchServiceResourcesReqFieldDocEntries,\n serviceTypePresetFieldDocEntries,\n servicesBookingSdkMethodFieldDocEntries,\n stepDescriptionFieldDocEntries,\n stepParameterFieldDocEntries,\n ticketSummaryFieldDocEntries,\n ticketPropertiesFieldDocEntries,\n timePeriodFieldDocEntries,\n timetableFilterFieldDocEntries,\n timetableQueryOptionsFieldDocEntries,\n trackingInformationFieldDocEntries,\n utmFieldDocEntries,\n} from \"./booking-wizard-field-docs.js\";\nimport {\n checkinPermissionFieldDocEntries,\n sessionDurationPropertiesFieldDocEntries,\n} from \"./session-checkin-field-docs.js\";\n\nexport const mcpBookingFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ServiceBehaviorSettings: { ...serviceBehaviorSettingsFieldDocEntries },\n BehaviorSettingsErrorDetail: { ...behaviorSettingsErrorDetailFieldDocEntries },\n BehaviorSettingsEffectStep: { ...behaviorSettingsEffectStepFieldDocEntries },\n ServiceBehaviorSettingsState: { ...serviceBehaviorSettingsStateFieldDocEntries },\n ServiceBehaviorSettingsUpdateResult: { ...serviceBehaviorSettingsUpdateResultFieldDocEntries },\n ServiceBehaviorSettingsUpdateOptions: { ...serviceBehaviorSettingsUpdateOptionsFieldDocEntries },\n ServiceBehaviorSettingsIssue: { ...serviceBehaviorSettingsIssueFieldDocEntries },\n ServiceBehaviorSettingsIssueReason: { ...serviceBehaviorSettingsIssueReasonFieldDocEntries },\n ServicesBookingSdkMethods: { ...servicesBookingSdkMethodFieldDocEntries },\n ResourceItemsBookingSdkMethods: { ...resourceItemsBookingSdkMethodFieldDocEntries },\n CalendarContactTimetableSdkMethods: { ...calendarContactTimetableSdkMethodFieldDocEntries },\n CasesPaymentSdkMethods: { ...casesPaymentSdkMethodFieldDocEntries },\n BookingWizardSdkHelpers: { ...bookingWizardSdkFieldDocEntries },\n ServiceTypePresetSdk: { ...serviceTypePresetFieldDocEntries },\n CreateOrderReq: { ...createOrderReqFieldDocEntries },\n CheckInProps: { ...checkInPropsFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n BookingResource: { ...bookingResourceFieldDocEntries },\n BookingResourceReq: { ...bookingResourceReqFieldDocEntries },\n ContactInformation: { ...contactInformationFieldDocEntries },\n ParticipateFieldRequirements: { ...participateFieldRequirementsFieldDocEntries },\n ParticipateFieldRequirement: { ...participateFieldRequirementFieldDocEntries },\n ParticipateFieldValue: { ...participateFieldValueFieldDocEntries },\n OrderInfo: { ...orderInfoFieldDocEntries },\n OrderResp: { ...orderRespFieldDocEntries },\n StepDescription: { ...stepDescriptionFieldDocEntries },\n StepParameter: { ...stepParameterFieldDocEntries },\n SearchServiceResourcesReq: { ...searchServiceResourcesReqFieldDocEntries },\n TimetableFilter: { ...timetableFilterFieldDocEntries },\n TimetableQueryOptions: { ...timetableQueryOptionsFieldDocEntries },\n BookingResourceFilter: { ...bookingResourceFilterFieldDocEntries },\n TicketProperties: { ...ticketPropertiesFieldDocEntries },\n TicketSummary: { ...ticketSummaryFieldDocEntries },\n TimePeriod: { ...timePeriodFieldDocEntries },\n PersonalReminder: { ...personalReminderFieldDocEntries },\n RecurringConditions: { ...recurringConditionsFieldDocEntries },\n LocationActivation: { ...locationActivationFieldDocEntries },\n TrackingInformation: { ...trackingInformationFieldDocEntries },\n Utm: { ...utmFieldDocEntries },\n PaymentParameters: { ...paymentParametersFieldDocEntries },\n PaymentProperties: { ...paymentPropertiesFieldDocEntries },\n CheckInPropsModel: { ...checkInPropsModelFieldDocEntries },\n CaseParticipant: { ...caseParticipantFieldDocEntries },\n CaseParticipantFields: { ...caseParticipantFieldsFieldDocEntries },\n CasePersonalInfo: { ...casePersonalInfoFieldDocEntries },\n CasePersonalInfoPayment: { ...casePersonalInfoPaymentFieldDocEntries },\n CaseParticipantViewPayment: { ...caseParticipantViewPaymentFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n SessionDurationProperties: { ...sessionDurationPropertiesFieldDocEntries },\n CheckinPermission: { ...checkinPermissionFieldDocEntries },\n};\n","/**\n * Смыслы полей **AuthIdentity** (`/api/v1/auth/*`) для агентов и MCP.\n * Типы тел/ответов — `components.schemas` в `schema/generated.ts`; здесь только проза.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Ответ **`POST /api/v1/auth/token`** и **`POST /api/v1/auth/refresh`**. */\nexport const tokenRespFieldDocEntries = {\n accessToken: {\n description: \"JWT или иной Bearer для заголовка `Authorization` при вызовах API от имени пользователя.\",\n usage:\n \"Подставляй в `TorrowClientConfig.getAccessToken` (или вручную в `Authorization`). Не логируй целиком. При `status !== TokenReady` может быть пустым.\",\n examples: [\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…\"],\n },\n refreshToken: {\n description: \"Долгоживущий токен для выдачи новой пары без повторного логина.\",\n usage:\n \"Храни безопасно; отправляй только в теле `POST /api/v1/auth/refresh`. После refresh сервер может вернуть новый refresh — замени сохранённый. При `Pending`/`Failed` обычно пуст.\",\n examples: [\"opaque-refresh-string…\"],\n },\n expiration: {\n description: \"Срок жизни **access**-токена в **секундах**, отсчитанный от момента ответа (не Unix timestamp).\",\n usage:\n \"Абсолютное время истечения access: `Date.now() + expiration * 1000`. Учитывай запас (skew) до истечения, затем вызывай refresh.\",\n examples: [\"3600\", \"900\"],\n },\n status: {\n description:\n \"Статус выдачи токенов (`TokenStatus`). Классический OTP/`refresh` → `TokenReady`; для MTS Mobile ID возможны `Pending`, `AwaitingSmsCode`, `Failed` с пустыми токенами.\",\n usage:\n \"Pending — ожидание Mobile ID, следующий poll без кода с интервалом из SendCodeResp.pollIntervalSeconds. AwaitingSmsCode — сервер переключился на SMS fallback, поскольку невозможно завершить Mobile ID аутентификацию: запроси SMS-код и передай его в requestToken. Failed — терминальный отказ, новый вход требует sendCode. TokenReady — токены выданы. Обычный Email/SMS OTP требует ввода кода сразу после sendCode; серверного AwaitingEmailCode нет.\",\n valueSchema: \"TokenStatus\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenRespFieldDocs = mapFieldDocsToStrings(tokenRespFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/refresh`**. */\nexport const refreshReqFieldDocEntries = {\n refreshToken: {\n description: \"Текущий refresh-токен пользователя.\",\n usage:\n \"Обязателен для обмена. Вызов идёт через `AuthFacade` без Bearer пользователя; на шлюзе обычно нужен `authIdentityBasic` (см. `examples/node/auth/auth-refresh.ts`).\",\n },\n deviceInfo: {\n description: \"Сведения об устройстве клиента (`DeviceInfo` в OpenAPI).\",\n usage:\n \"Минимум: непустые `deviceId` + `deviceType` (`DeviceTypeValues` из `@torrow/sdk-client`: Unknown|Mobile|Tablet|Desktop). На проде — ещё push/os.\",\n valueSchema: \"DeviceInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const refreshReqFieldDocs = mapFieldDocsToStrings(refreshReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/token`** (обмен кода/сессии на токены — зависит от способа входа). */\nexport const tokenReqFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии после шага отправки кода / создания сессии.\",\n usage: \"Часто приходит из потока `sendcode` / `session` до вызова `token`.\",\n },\n code: {\n description: \"Одноразовый код подтверждения (SMS, email и т.п.), если применимо.\",\n usage:\n \"Вместе с `sessionId` для классического OTP. Для MTS Mobile ID на фазе polling код может отсутствовать, пока `TokenResp.status === Pending`.\",\n },\n scopes: {\n description:\n \"Запрашиваемые области доступа. OpenAPI — `string[]`; в SDK известные значения — **`AuthScopeValues`**: `user_api`, `admin_api`, `offline_access` (дефолт OTP — **`DefaultAuthScopes`**).\",\n valueSchema: \"AuthScope[] | null\",\n examples: ['[\"user_api\",\"offline_access\"]'],\n },\n deviceInfo: {\n description: \"Сведения об устройстве (`DeviceInfo`).\",\n usage: \"`deviceType` — только OpenAPI enum; в SDK: **`DeviceTypeValues`** (`Desktop` по умолчанию в примерах).\",\n valueSchema: \"DeviceInfo\",\n },\n splitTokens: {\n description:\n \"Разделение access/refresh сервером: false — полные токены в JSON и удаление cookies разделённых токенов; true — часть каждого токена в JSON, другая часть в HttpOnly cookie. При отсутствии готового access token разделение пропускается.\",\n usage:\n \"Для Node, MCP, выпуска интеграционного ключа и cleanup задавай false. true — только для браузерной авторизации с настроенной передачей cookies и частей токенов. SDK не управляет cookies и не восстанавливает токены; стандартный Node fetch не сохраняет cookies между запросами. OtpFlow передаёт явные true/false, undefined не отправляет; текущий шлюз трактует отсутствие как false.\",\n valueSchema: \"boolean\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenReqFieldDocs = mapFieldDocsToStrings(tokenReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/revoke`**. */\nexport const revokeReqFieldDocEntries = {\n token: {\n description: \"Refresh-токен, который нужно инвалидировать на сервере.\",\n usage: \"Вызывай при выходе пользователя или компрометации refresh.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const revokeReqFieldDocs = mapFieldDocsToStrings(revokeReqFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/sendcode`. */\nexport const sendCodeReqFieldDocEntries = {\n accountName: {\n description: \"Телефон/email/логин, куда отправляют код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description:\n \"Тип аккаунта (`AccountType`). Для OTP/`sendCode` в продукте и примерах — **`Phone`** или **`Email`**. **`Undefined`** Identity отвергает; **`Telegram`** — не этот эндпоинт (deep-link → `createSession`).\",\n valueSchema: \"AccountType\",\n usage: \"Примеры: `auth-send-code.ts` / `auth-login-with-otp.ts` (`SendCodeAccountType` = Phone|Email).\",\n },\n language: {\n description: \"Язык сообщений/кода.\",\n valueSchema: \"string | null\",\n },\n captcha: {\n description: \"Токен captcha, если включена антибот-проверка.\",\n valueSchema: \"string | null\",\n },\n captchaType: {\n description:\n \"Провайдер captcha, выдавший токен. OpenAPI — `string`; в SDK известные значения — **`AuthCaptchaTypeValues`**: `YandexSmartCaptcha`, `GoogleRecaptcha` (v2 invisible).\",\n valueSchema: \"AuthCaptchaType | null\",\n examples: [\"YandexSmartCaptcha\", \"GoogleRecaptcha\"],\n },\n inviteSessionId: {\n description: \"ID invite-сессии (вход по приглашению).\",\n valueSchema: \"string | null\",\n },\n regionStorageId: {\n description: \"Региональный storage ID (если используется backend identity).\",\n valueSchema: \"int32 | null\",\n },\n preferredMethod: {\n description:\n \"Желаемый способ доставки (`VerificationMethod`). `UnknownMethod` (дефолт) — выбор сервера; иначе — если доступен, иначе fallback по приоритету.\",\n valueSchema: \"VerificationMethod\",\n },\n supportedMethods: {\n description:\n \"Методы, которые клиент умеет обрабатывать, в порядке приоритета: порядок массива имеет значение. Для телефона рекомендуется `TelegramGateway`, `MtsMobileId`, `Sms`. Out-of-band вроде `MtsMobileId` выбираются только если перечислены здесь — старые клиенты без списка остаются на классическом вводе кода.\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeReqFieldDocs = mapFieldDocsToStrings(sendCodeReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/sendcode`. */\nexport const sendCodeRespFieldDocEntries = {\n sessionId: {\n description: \"ID auth-сессии для следующего шага (`requestToken`).\",\n valueSchema: \"string | null\",\n },\n codeLifetimeSeconds: {\n description:\n \"TTL кода в секундах (**deprecated** в OpenAPI — предпочитай `sessionLifeTimeInSeconds` / `codeLength`).\",\n valueSchema: \"int32\",\n },\n sessionLifeTimeInSeconds: {\n description: \"TTL auth-сессии в секундах.\",\n valueSchema: \"int32\",\n },\n nextAvailableUsageTime: {\n description: \"Когда можно снова запросить код (rate limit), если сервер вернул.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Сколько попыток ввода кода осталось/доступно для сессии (семантика стенда).\",\n valueSchema: \"int32\",\n },\n usedMethod: {\n description: \"Фактически выбранный сервером способ доставки/подтверждения.\",\n usage: \"UI: подпись «код в SMS» / Telegram / flash-call; при `MtsMobileId` — polling `requestToken` по `status`.\",\n valueSchema: \"VerificationMethod\",\n },\n availableMethods: {\n description: \"Методы, которые клиент может запросить для этого аккаунта (UX «другой способ»).\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n codeLength: {\n description: \"Длина доставленного кода — размер поля ввода в UI.\",\n valueSchema: \"int32\",\n },\n pollIntervalSeconds: {\n description:\n \"Для `usedMethod === MtsMobileId`: рекомендуемый интервал (сек) между повторными `requestToken` пока `TokenResp.status === Pending`.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeRespFieldDocs = mapFieldDocsToStrings(sendCodeRespFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/session`. */\nexport const createAuthSessionReqFieldDocEntries = {\n accountType: {\n description:\n \"Тип аккаунта для auth-сессии с **`authUrl`**. На шлюзе в `AuthUrlsByAccountType` обычно только **`Telegram`**; `Phone`/`Email` → часто 500.\",\n valueSchema: \"AccountType\",\n usage: \"Пример: `auth-login-with-link.ts` (env `TORROW_AUTH_CREATE_SESSION_ACCOUNT_TYPE`, дефолт Telegram).\",\n },\n regionStorageId: { description: \"Регион storage для identity (обязателен в OpenAPI).\", valueSchema: \"int32\" },\n language: { description: \"Язык интерфейса/сообщений сессии (обязателен в OpenAPI).\", valueSchema: \"string\" },\n inviteSessionId: { description: \"ID invite-сессии (если вход по приглашению).\", valueSchema: \"string | null\" },\n captcha: { description: \"Captcha token для защиты от ботов.\", valueSchema: \"string | null\" },\n deviceId: { description: \"Идентификатор устройства клиента.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionReqFieldDocs = mapFieldDocsToStrings(createAuthSessionReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/session`. */\nexport const createAuthSessionRespFieldDocEntries = {\n sessionId: { description: \"ID созданной auth-сессии.\", valueSchema: \"string | null\" },\n sessionLifeTimeInSeconds: { description: \"Срок жизни сессии в секундах.\", valueSchema: \"int32\" },\n nextAvailableUsageTime: {\n description: \"Когда сессию/код можно использовать снова (rate limit), если задано.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Счётчик попыток использования сессии.\",\n valueSchema: \"int32\",\n },\n code: {\n description: \"Код/секрет сессии, если сервер вернул сразу (редко; зависит от потока).\",\n valueSchema: \"string | null\",\n },\n authUrl: {\n description: \"URL внешнего шага аутентификации (deep link / redirect), если применимо.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionRespFieldDocs = mapFieldDocsToStrings(createAuthSessionRespFieldDocEntries);\n\n/**\n * Поверхность SDK, связанная с Bearer и гостевым доступом (не схема OpenAPI, а конфиг клиента).\n */\nexport const torrowClientAuthConfigFieldDocEntries = {\n getAccessToken: {\n description:\n \"Асинхронный колбэк: возвращает строку Bearer или `undefined` (тогда заголовок `Authorization` не ставится).\",\n usage:\n \"Предпочтительно **`@torrow/sdk-auth`** (`TokenSession` → `session.client`, storage + проактивный refresh + опциональный 401→retry). Вручную: кэш access + **`client.auth.refresh`** (без Bearer этого колбэка) — иначе рекурсия. Гостевой **`securityToken`** — только в опциях конкретного вызова фасада, не в конфиге клиента.\",\n },\n authIdentityBasic: {\n description:\n \"HTTP Basic приложения на шлюзе (`AuthIdentityBasic`: `username`/`password` ≈ `clientId`/`clientSecret`). Не user Bearer.\",\n usage:\n \"Нужен для **`client.auth.*`** на `torrow.net`. С сессией — **`TorrowAuth`** + **`appCredentials`** (маппинг внутри auth-пакета). Low-level: **`auth-send-code.ts`**.\",\n valueSchema: \"AuthIdentityBasic\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowClientAuthConfigFieldDocs = mapFieldDocsToStrings(torrowClientAuthConfigFieldDocEntries);\n\n/** Методы **`TorrowClient.auth`** ↔ REST AuthIdentity. */\nexport const authSdkMethodFieldDocEntries = {\n refresh: {\n description: \"`POST /api/v1/auth/refresh` — тело `RefreshReq`, ответ `TokenResp`.\",\n usage:\n \"Безопасно вызывать с того же экземпляра `TorrowClient`, у которого задан `getAccessToken`: внутренний вызов не использует Bearer. На `torrow.net` задай `authIdentityBasic`, иначе часто `REQUEST_IS_INVALID`.\",\n },\n requestToken: {\n description: \"`POST /api/v1/auth/token` — тело `TokenReq`, ответ `TokenResp` (смотри `status`).\",\n usage:\n \"После **`sendCode`**: `sessionId` + код (классика) или polling без кода при `MtsMobileId`/`Pending`. Оркестрация — **`TorrowAuth.loginWithOtp`**; явный обмен — **`session.requestTokenWithCode`** (`auth-complete-with-code.ts`); low-level — **`auth-send-code.ts`**.\",\n },\n revoke: {\n description: \"`POST /api/v1/auth/revoke` — тело `RevokeReq`, ответ пустой при успехе.\",\n usage: \"Выход и инвалидация refresh на сервере. Предпочтительно **`session.logout()`**.\",\n },\n sendCode: {\n description: \"`POST /api/v1/auth/sendcode` — тело `SendCodeReq`, ответ `SendCodeResp`.\",\n usage:\n \"Первый шаг OTP: **`sessionId`**, **`usedMethod`**, **`codeLength`**, при Mobile ID — **`pollIntervalSeconds`**. Только sendCode — **`examples/node/auth/auth-send-code.ts`**; склейка с токенами — **`TorrowAuth.loginWithOtp`** / **`auth-login-with-otp.ts`**.\",\n },\n createSession: {\n description: \"`POST /api/v1/auth/session` — тело `CreateAuthSessionReq`, ответ `CreateAuthSessionResp`.\",\n usage:\n \"Не OTP-логин приложения: в torrow-apps вход — `sendCode`/`requestToken`. Этот метод — сессия под внешний deep-link (`authUrl`); на шлюзе в `AuthUrlsByAccountType` обычно только `Telegram`. Для `Phone`/`Email` часто 500 `KeyNotFoundException`. Оркестрация — **`TorrowAuth.loginWithLink`** / **`auth-login-with-link.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkMethodFieldDocs = mapFieldDocsToStrings(authSdkMethodFieldDocEntries);\n\n/**\n * Фасад **`TorrowAuth`** / advanced **`TokenSession`** (**`@torrow/sdk-auth`**).\n * MCP: **`mcpAuthFieldCatalog.AuthSdkHelpers`**.\n */\nexport const authSdkHelperFieldDocEntries = {\n \"TorrowAuth.createOtpFlow\": {\n description: \"Пошаговый OTP без TokenStorage, callbacks, refresh, retry и автоматического polling.\",\n usage:\n \"HTTP/app credentials, deviceInfo, scopes, splitTokens. Один sendCode на start, один requestToken на complete. Примеры: auth-otp-flow.ts, auth-otp-flow-mobile-id.ts.\",\n },\n \"OtpFlow.start\": {\n description: \"start(input, { signal }) → проверенный JSON challenge с фазой AwaitingCode или Pending.\",\n usage:\n \"Phone/Email, language/region, captcha, invite и методы. UnknownMethod поддерживается для Email; неизвестный метод отклоняется.\",\n },\n \"OtpFlow.complete\": {\n description: \"complete({ challenge, code }, { signal }) → Pending, AwaitingSmsCode, Failed или TokenReady.\",\n usage:\n \"Pending запрещает code; AwaitingCode требует его. AwaitingSmsCode продолжает ту же Mobile ID auth-сессию через SMS fallback: новая фаза AwaitingCode, метод Sms, прежние sessionId и deadline. TokenReady требует явного status и access token.\",\n },\n OtpChallenge: {\n description:\n \"Переносимое продолжение: sessionId, accountType, usedMethod, phase, expiresAtMs и проверенные подсказки.\",\n usage:\n \"Без токенов/OTP. Приложение защищает целостность. Серверный TTL или локальные 180с без продления. Polling hint default 3с. Даты — Unix milliseconds.\",\n },\n OtpCompleteResult: {\n description:\n \"Серверный статус шага: Pending — аутентификация ещё не завершена, следующий запрос без кода; AwaitingSmsCode — продолжение той же Mobile ID auth-сессии через SMS fallback, поскольку Mobile ID не удалось завершить. Возвращённый challenge меняет фазу Pending на AwaitingCode и метод на Sms, сохраняя sessionId и deadline. TokenReady — tokens без продолжения; Failed — отказ без продолжения. Фаза challenge определяет следующий шаг приложения, а не новый серверный статус.\",\n usage:\n \"Refresh доступен в tokens при TokenReady или cleanup в других результатах. Cleanup выполняет приложение с независимым deadline.\",\n },\n OtpErrorDetail: {\n description:\n \"Предметное уточнение TorrowSdkError: домен Otp и необязательная enum-причина InvalidChallenge / UnsupportedMethod / AuthHeaderMissing / CodeRequestLimitExceeded; общий ввод и ответ описываются category.\",\n usage:\n \"getSensitiveDetails().cleanup.refreshToken доступен только явно. effects отсутствуют у пошагового flow и не доказывают отсутствие изменений. Составной login описывает собственные шаги; успешные результаты и legacy-адаптация сохраняются.\",\n },\n \"TorrowAuth.connect\": {\n description: \"Restore из **`TokenStorage`**: при необходимости refresh → `{ client, session }`. **Без** OTP-hook.\",\n usage:\n \"`appCredentials` + `tokenStorage` + `deviceInfo`. Статус — **`session.status`**. Пример: **`auth-connect.ts`**.\",\n },\n \"TorrowAuth.loginWithOtp\": {\n description: \"`sendCode` → Mobile ID poll / classic код → persist → `{ client, session }`.\",\n usage:\n \"`account: { accountType, accountName }` (как SendCodeReq). UI: **`onSendCode({ accountName, accountType, usedMethod, codeLength, … })`**; **`getCode({ codeLength })`** только когда нужны цифры (экран уже из `onSendCode`). Примеры: **`auth-login-with-otp.ts`**, **`auth-login-with-otp-mobile-id.ts`**.\",\n },\n \"TorrowAuth.loginWithLink\": {\n description:\n \"Telegram deep-link: `createSession` → **`onLink(authUrl)`** → внутренний poll `requestToken` → persist.\",\n usage: \"Код OTP **не** вводить. Пример: **`auth-login-with-link.ts`**.\",\n },\n \"TorrowAuth.fromTokens\": {\n description: \"Сид `accessToken` [/ `refreshToken`] в storage → connect-семантика.\",\n usage:\n \"`appCredentials` опционален: без него нет refresh. Opaque/integration key: задай `accessExpiresAtMs` или бессрочно без TTL. У JWT runtime freshness AND-ит `exp` — будущий explicit `accessExpiresAtMs` не оживит просроченный JWT. Пример: **`auth-from-tokens.ts`**.\",\n },\n \"TorrowAuth.anonymous\": {\n description: \"`TorrowClient` без Bearer (`getAccessToken: undefined`).\",\n usage: \"Публичные GET. Пример: **`auth-anonymous-public-service.ts`**.\",\n },\n requestTokenWithCode: {\n description:\n \"**`TokenSession.requestTokenWithCode`**: токены по `sessionId` + OTP-коду (`requestToken`) → persist при TokenReady.\",\n usage:\n \"После `sendCode` + кода (UI/stdin). Не ready → **`TorrowSdkError с AuthSession / SessionNotReady`** (poll — внутри **`loginWithLink`**). Пример: **`auth-complete-with-code.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkHelperFieldDocs = mapFieldDocsToStrings(authSdkHelperFieldDocEntries);\n\n/**\n * Гостевой **`securityToken`**: не access JWT, не заголовок `Authorization`.\n * Ключи — подсказки для агентов (MCP: **`mcpAuthFieldCatalog.GuestAccessSecurityToken`**).\n */\nexport const guestAccessSecurityTokenFieldDocEntries = {\n purpose: {\n description:\n \"Одноразовый или контекстный **opaque**-токен, который сервер принимает **вместо или вместе с** полноценной пользовательской сессией, чтобы отдать данные по конкретной сущности (часто **событие/заказ**), не раскрывая всё дерево прав владельца.\",\n usage:\n \"Типичный UX: пользователь **не залогинен**, но открыл ссылку после записи на услугу; сервер выдал токен вместе с ответом **`createOrder`**, приложение подставляет его в следующие **чтения** этого кейса.\",\n },\n notBearer: {\n description:\n \"**Не** подставлять в `Authorization` и **не** путать с `TokenResp.accessToken` / env **`TORROW_ACCESS_TOKEN`**.\",\n usage:\n \"`TORROW_ACCESS_TOKEN` → `TorrowClientConfig.getAccessToken` → заголовок **`Authorization: Bearer …`**. `securityToken` → только поля **`securityToken`** в query или в теле запроса по OpenAPI.\",\n },\n openApiWire: {\n description:\n \"В OpenAPI параметр чаще всего называется **`securityToken`** (query на `GET/PUT/DELETE …` или поле в JSON-теле — сверяй конкретный путь в **`docs/torrow-swagger.json`**).\",\n usage:\n \"SDK не добавляет его глобально: передаёшь в **опциях** соответствующего метода фасада (например `cases.getById(id, { securityToken })`) или в свойстве тела (`GetReCheckInScheduleReq.securityToken` для `services.getReCheckInSchedule`).\",\n },\n afterCreateOrder: {\n description:\n \"После **`client.services.createOrder`** в ответе **`OrderResp`** часто есть строка, которую продукт кладёт в query как **`securityToken`** при открытии экрана события у гостя.\",\n usage:\n \"Возьми **`OrderResp.consumerSecurityToken`** (если пришёл) и передай тем же ключом в **`client.cases.getById(order.id, { securityToken: consumerSecurityToken, caseParticipantId: … })`** — иначе **`personalInfo.ticketResource`** и ссылка на оплату могут не вернуться.\",\n examples: [\"consumerSecurityToken из OrderResp\"],\n },\n envInExamples: {\n description:\n \"В актуальных примерах гостевой токен берётся из **`OrderResp`** и передаётся дальше в browser-потоке **`examples/browser/guest-order/`**; отдельный env с токеном несвязанного кейса не используется.\",\n usage:\n \"В своём коде приложения храни значение там же, где хранишь deep link / черновик заказа (state роутера), а не в общем `TorrowClient`-конфиге — конфиг клиента **не** содержит `securityToken`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const guestAccessSecurityTokenFieldDocs = mapFieldDocsToStrings(guestAccessSecurityTokenFieldDocEntries);\n\n/** Значения OpenAPI **`DeviceType`** ↔ **`DeviceTypeValues`** в `@torrow/sdk-client`. */\nexport const deviceTypeValuesFieldDocEntries = {\n Unknown: {\n description: \"Тип устройства не определён / не передан явно.\",\n usage: \"`DeviceTypeValues.Unknown` → `DeviceInfo.deviceType`.\",\n },\n Mobile: {\n description: \"Мобильный клиент.\",\n usage: \"`DeviceTypeValues.Mobile`.\",\n },\n Tablet: {\n description: \"Планшет.\",\n usage: \"`DeviceTypeValues.Tablet`.\",\n },\n Desktop: {\n description: \"Десктоп / веб-десктоп (дефолт в примерах SDK).\",\n usage: \"`DeviceTypeValues.Desktop`. Парсинг env: `parseDeviceType`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deviceTypeValuesFieldDocs = mapFieldDocsToStrings(deviceTypeValuesFieldDocEntries);\n","/**\n * Описания схем токенов и конфигурации авторизации для MCP / агентов.\n * Ключи верхнего уровня: `TokenResp`, `RefreshReq`, `TokenReq`, `RevokeReq` совпадают с `components.schemas`;\n * `TorrowClientConfigAuth` — условное имя для поля {@link TorrowClientConfig.getAccessToken} в справочнике MCP.\n * `GuestAccessSecurityToken` — как и зачем передавать гостевой query/body **`securityToken`** (не Bearer).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n torrowSdkErrorDomainFieldDocEntries,\n otpErrorReasonFieldDocEntries,\n authSessionErrorReasonFieldDocEntries,\n authSessionEffectStepFieldDocEntries,\n otpErrorDetailFieldDocEntries,\n authSessionErrorDetailFieldDocEntries,\n} from \"./sdk-error-field-docs.js\";\nimport {\n authSdkMethodFieldDocEntries,\n authSdkHelperFieldDocEntries,\n createAuthSessionReqFieldDocEntries,\n createAuthSessionRespFieldDocEntries,\n deviceTypeValuesFieldDocEntries,\n refreshReqFieldDocEntries,\n revokeReqFieldDocEntries,\n sendCodeReqFieldDocEntries,\n sendCodeRespFieldDocEntries,\n tokenReqFieldDocEntries,\n tokenRespFieldDocEntries,\n torrowClientAuthConfigFieldDocEntries,\n guestAccessSecurityTokenFieldDocEntries,\n} from \"./auth-token-field-docs.js\";\n\nexport const mcpAuthFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowSdkErrorDomain: { ...torrowSdkErrorDomainFieldDocEntries },\n OtpErrorReason: { ...otpErrorReasonFieldDocEntries },\n AuthSessionErrorReason: { ...authSessionErrorReasonFieldDocEntries },\n AuthSessionEffectStep: { ...authSessionEffectStepFieldDocEntries },\n OtpErrorDetail: { ...otpErrorDetailFieldDocEntries },\n AuthSessionErrorDetail: { ...authSessionErrorDetailFieldDocEntries },\n /** Методы `TorrowClient.auth` ↔ OpenAPI AuthIdentity. */\n AuthSdkMethods: { ...authSdkMethodFieldDocEntries },\n /** Хелперы `@torrow/sdk-auth` (пошаговый OtpFlow, OTP-оркестрация, Mobile ID). */\n AuthSdkHelpers: { ...authSdkHelperFieldDocEntries },\n TokenResp: { ...tokenRespFieldDocEntries },\n RefreshReq: { ...refreshReqFieldDocEntries },\n TokenReq: { ...tokenReqFieldDocEntries },\n RevokeReq: { ...revokeReqFieldDocEntries },\n SendCodeReq: { ...sendCodeReqFieldDocEntries },\n SendCodeResp: { ...sendCodeRespFieldDocEntries },\n CreateAuthSessionReq: { ...createAuthSessionReqFieldDocEntries },\n CreateAuthSessionResp: { ...createAuthSessionRespFieldDocEntries },\n /** Поле `getAccessToken` в `TorrowClientConfig` (Bearer приложения). */\n TorrowClientConfigAuth: { ...torrowClientAuthConfigFieldDocEntries },\n /** Гостевой `securityToken`: query/тело запроса, не конфиг `TorrowClient`. */\n GuestAccessSecurityToken: { ...guestAccessSecurityTokenFieldDocEntries },\n /** OpenAPI `DeviceType` ↔ `DeviceTypeValues` / `parseDeviceType`. */\n DeviceTypeValues: { ...deviceTypeValuesFieldDocEntries },\n};\n","/**\n * Описания методов **`TorrowClient.search`** и ключевых DTO поиска заказов для MCP / агентов.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общая текстовая выдача (`GET …/search/{contacts|notes|…}`), не `search.orders`. */\nconst TEXT_SEARCH_PUBLICITY =\n \"В выдаче только **`PublicAvailable`** / **`PublicWithRequest`** (`Personal` / `Private` / `Link` — нет). \" +\n \"Для нового item значение задаётся сразу через create-options; для существующего — через **`updatePublicity`**. \" +\n \"Индекс обновляется асинхронно. См. **`docs/agents/participation-flow.md`** §3, пример **`search-contacts.ts`**.\";\n\nexport const searchSdkMethodFieldDocEntries = {\n advisedItems: {\n description:\n \"`GET /api/v1/search/adviseditems` — подборка **`TorrowItem[]`**; query **`AdvisedItemsSearchQuery`** \" +\n \"(`type` **`AdvisedItemType`**, гео, `language`, `take`/`skip`).\",\n usage:\n \"**`NearLocation`**: обязательны `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`** (СПб). \" +\n \"**`Recommendation`**: персональные рекомендации. Не путать с текстовым `search.contacts` и т.п.\",\n },\n orders: {\n description:\n \"`PUT /api/v1/search/{torrowId}/orders` — список представлений заказов (**`CaseView[]`**) под родителем с **`OrderFilter`** в теле.\",\n usage: \"Альтернатива **`client.raw.put`**; см. **`examples/node/raw/search-orders-raw.ts`**.\",\n },\n contacts: {\n description: \"`GET /api/v1/search/contacts` — **`ContactView[]`** по тексту и опциям.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n notes: {\n description: \"`GET /api/v1/search/notes` — **`NoteView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n calendars: {\n description: \"`GET /api/v1/search/calendars` — **`CalendarView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n cases: {\n description: \"`GET /api/v1/search/cases` — **`CaseView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n resources: {\n description: \"`GET /api/v1/search/resources` — **`ResourceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n services: {\n description: \"`GET /api/v1/search/services` — **`ServiceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchSdkMethodFieldDocs = mapFieldDocsToStrings(searchSdkMethodFieldDocEntries);\n\n/** Query `GET /api/v1/search/adviseditems` (`AdvisedItemsSearchQuery` / OpenAPI). */\nexport const advisedItemsSearchQueryFieldDocEntries = {\n type: {\n description:\n \"Режим подборки: **`NearLocation`** (рядом с точкой) или **`Recommendation`** (персональные рекомендации).\",\n valueSchema: \"AdvisedItemType\",\n examples: [\"NearLocation\", \"Recommendation\"],\n },\n longitude: {\n description: \"Долгота WGS84. Для **`NearLocation`** задавай вместе с **`latitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"30.3141\"],\n },\n latitude: {\n description: \"Широта WGS84. Для **`NearLocation`** задавай вместе с **`longitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"59.9386\"],\n },\n language: {\n description: \"Язык локализации подборки (BCP-47).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум элементов в ответе (пагинация).\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const advisedItemsSearchQueryFieldDocs = mapFieldDocsToStrings(advisedItemsSearchQueryFieldDocEntries);\n\nexport const orderFilterFieldDocEntries = {\n searchText: {\n description: \"Подстрока для фильтрации заказов (семантика на стороне API).\",\n },\n fuzzyDistance: {\n description: \"Допуск «размытия» для текстового поиска (int).\",\n },\n from: {\n description: \"Начало интервала по времени (**ISO date-time**).\",\n },\n to: {\n description: \"Конец интервала (**ISO date-time**).\",\n },\n strictlyInTimeRange: {\n description: \"Если true — строго внутри интервала.\",\n },\n orderStateList: {\n description: \"Список **`CaseState`** для фильтра.\",\n valueSchema: \"CaseState\",\n },\n orderTypeList: {\n description: \"Список **`CaseType`** для фильтра.\",\n valueSchema: \"CaseType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderFilterFieldDocs = mapFieldDocsToStrings(orderFilterFieldDocEntries);\n","/**\n * Каталог **Search** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n advisedItemsSearchQueryFieldDocEntries,\n orderFilterFieldDocEntries,\n searchSdkMethodFieldDocEntries,\n} from \"./search-field-docs.js\";\n\nexport const mcpSearchFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n SearchSdkMethods: { ...searchSdkMethodFieldDocEntries },\n AdvisedItemsSearchQuery: { ...advisedItemsSearchQueryFieldDocEntries },\n OrderFilter: { ...orderFilterFieldDocEntries },\n};\n","/**\n * Каталог методов **`client.notes`** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { notesSdkMethodFieldDocEntries } from \"./notes-field-docs.js\";\n\nexport const mcpNotesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n NotesSdkMethods: { ...notesSdkMethodFieldDocEntries },\n};\n","import type { ResourcesFacade } from \"../resources/resources/ResourcesFacade.js\";\nimport type { ResourceItemPatch, ResourcePaymentPatchProperties } from \"../resources/resources/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Все подтверждённые 17 полей partial Resource update; прочие операции не объединяются в patch. */\nexport const resourceItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} уже загруженного файла либо null для снятия; URL не записывается.\" },\n description: { description: \"Описание string|null; empty допустим, пропуск сохраняет.\" },\n itemId: { description: \"ID связанной сущности, не target ID ресурса; null снимает ссылку.\" },\n parentResourceId: {\n description: \"ID родительского ресурса; null снимает ссылку; expanded parentResource не patch-поле.\",\n },\n timetableId: { description: \"ID расписания; null снимает ссылку.\" },\n schedule: {\n description:\n \"Полная замена расписания с Date SDK; отсутствующий rid диапазона создаётся SDK; null снимает структуру.\",\n valueSchema: \"Schedule | null\",\n },\n priceInfo: {\n description:\n \"Полная замена settings и их schedule; отсутствующие rid диапазонов создаются SDK; null очищает все цены. Для удаления отдельной цены передайте список без её записи.\",\n valueSchema: \"ItemPricePatchInfo | null\",\n },\n usageType: {\n description:\n \"Серверный способ использования; UnknownUsageType нормализует сервер, SDK не назначает create default.\",\n valueSchema: \"UsageType\",\n },\n serviceDescriptions: {\n description: \"Полная замена связей с услугами/группами; [] снимает список, ограничения usageType проверяет сервер.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: { description: \"Код string|null; empty допустим.\" },\n duration: {\n description: \"Длительность/расчётная единица в секундах int32; 0 передаётся явно, null снимает значение.\",\n },\n amountProperties: {\n description:\n \"Полная замена количественных свойств, inventoryDate Date SDK; null снимает структуру, нулевые значения сохраняются.\",\n valueSchema: \"AmountProperties | null\",\n },\n usageCondition: {\n description: \"Полная замена условий, без выполнения связанных действий; null снимает структуру.\",\n valueSchema: \"UsageCondition | null\",\n },\n appendixList: { description: \"Полная замена приложений с Date SDK; [] снимает список.\", valueSchema: \"Appendix[]\" },\n paymentProperties: {\n description:\n \"Полная замена конфигурации оплаты либо null; paymentProviderType определяет допустимые поля parameters. Платежи SDK не выполняет.\",\n valueSchema: \"ResourcePaymentPatchProperties | null\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Полная замена настроек лояльности; [] снимает список, SDK не вычисляет баланс.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n} satisfies Record<keyof ResourceItemPatch, ItemFieldDoc>;\n\n/** Предметные параметры выбранного провайдера; действительность credentials проверяет сервер. */\nexport const resourcePaymentPatchPropertiesFieldDocEntries = {\n paymentProviderType: {\n description:\n \"Wire provider enum; Cash/CustomLink/YooMoney/QiwiP2P/YooKassa/Sberbank/Alfabank/Uralsib/RoboKassa/PayKeeper/Prodamus/Tinkoff/Mock имеют подтверждённые parameter classes.\",\n valueSchema: \"PaymentProviderType\",\n },\n parameters: {\n description:\n \"Полная замена параметров выбранного провайдера. Обязательность объекта и его полей определяется провайдером; Cash/Mock/YooKassa и общие ветви допускают отсутствие/null. В переданном YooKassa объекте shopId/secretKey/taxation обязательны. SDK не проверяет содержимое credentials.\",\n valueSchema: \"ResourcePaymentPatchParameters\",\n },\n numeratorId: { description: \"Ссылка на нумератор оплаты; null снимает её.\" },\n waitForConfirmation: { description: \"Ожидать подтверждения; false передаётся явно, null снимает значение.\" },\n} satisfies Record<keyof ResourcePaymentPatchProperties, ItemFieldDoc>;\n\n/** Все известные предметные параметры; допустимый набор определяется paymentProviderType, значения не логируются. */\nexport const resourcePaymentPatchParametersFieldDocEntries = {\n text: { description: \"Общий текст оплаты; string|null.\" },\n beforePayMessage: { description: \"Общее сообщение до оплаты; string|null.\" },\n afterPayMessage: { description: \"Общее сообщение после оплаты; string|null.\" },\n url: { description: \"URL CustomLink/PayKeeper/Prodamus; обязательная строка в этих ветвях, SDK её не нормализует.\" },\n accountId: { description: \"Обязательная строка кошелька YooMoney.\" },\n notificationSecret: { description: \"Обязательный строковый секрет YooMoney; чувствительное значение.\" },\n publicKey: { description: \"Обязательный строковый публичный ключ QiwiP2P.\" },\n privateKey: { description: \"Обязательный строковый закрытый ключ QiwiP2P; чувствительное значение.\" },\n shopId: { description: \"Обязательная строка магазина в переданном YooKassa parameters.\" },\n secretKey: { description: \"Обязательный строковый секрет YooKassa/Prodamus; чувствительное значение.\" },\n taxation: { description: \"Обязательная строка системы налогообложения YooKassa/Tinkoff; SDK не трактует её.\" },\n username: { description: \"Обязательное строковое имя пользователя RBS банков/PayKeeper.\" },\n password: { description: \"Обязательный строковый пароль RBS банков/PayKeeper/Tinkoff; чувствительное значение.\" },\n isTest: {\n description:\n \"Булев тестовый режим RBS/RoboKassa/PayKeeper/Prodamus; false сохраняется, отсутствие использует server default false.\",\n },\n shopName: { description: \"Обязательное строковое имя магазина RoboKassa.\" },\n password1: { description: \"Первый обязательный строковый пароль RoboKassa; чувствительное значение.\" },\n password2: { description: \"Второй обязательный строковый пароль RoboKassa; чувствительное значение.\" },\n terminal: { description: \"Обязательная строка терминала Tinkoff.\" },\n split: { description: \"Необязательная строка распределения Tinkoff; SDK её не вычисляет.\" },\n redirectBaseUrl: { description: \"Необязательная строка перенаправления MockPaymentProvider.\" },\n errorResponceCode: { description: \"Необязательный int32|null Mock; опечатка wire Responce сохранена.\" },\n createAfter: {\n description:\n \"Необязательная Date|null Mock; только это известное поле no-op сравнивает с сырым ISO, без общего revival.\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n\n/** Метод конкретного resourceItems фасада, не универсальный метод технической папки resources. */\nexport const resourcesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/resources/{id}; 17 полей, Full/UpdateItem/item version обязательны, price aliases согласуются общим SDK helper. No-op, без retry/readback; ticket lifecycle и BehaviorSettings отдельно.\",\n valueSchema:\n \"(itemId: string, fields: ResourceItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ResourceItem>\",\n },\n} satisfies Record<Extract<keyof ResourcesFacade, \"patch\">, ItemFieldDoc>;\n","import type { CasesFacade } from \"../resources/cases/CasesFacade.js\";\nimport type { CaseItemPatch } from \"../resources/cases/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Полная клиентская конфигурация root Case update, без состояния, участия и серверных агрегатов. */\nexport const caseItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: {\n description: \"Ссылка {id} на загруженный файл; null удаляет изображение, FileInfo URL/metadata запрещены на входе.\",\n },\n beginDate: { description: \"Начало события Date; null снимает дату, сервер проверяет календарную допустимость.\" },\n endDate: { description: \"Окончание события Date; null снимает дату.\" },\n description: { description: \"Описание без trim; null/empty очищают.\" },\n placeId: { description: \"Непустой ID места; null снимает ссылку, тип/доступность ссылки проверяет сервер.\" },\n place: { description: \"Текст места; null/empty очищают.\" },\n caseType: {\n description: \"OpenAPI CaseType, кроме UnknownTimeType; смену типа и даты согласует сервер.\",\n valueSchema: \"CaseType\",\n },\n schedule: {\n description:\n \"Расписание целиком; отсутствующий rid диапазона создаётся SDK, null снимает его. SDK не рассчитывает повторения, непереданный createSingleCases сохраняется.\",\n valueSchema: \"Schedule\",\n },\n registrationOpen: { description: \"Открытие регистрации, секунд до начала; int32/null, null снимает ограничение.\" },\n registrationClose: { description: \"Закрытие регистрации, секунд до начала; int32/null, null снимает ограничение.\" },\n visitCard: {\n description:\n \"Визитка события целиком; null запрещён, fields:[] допускается. Правило трёх слотов Contact не применяется.\",\n valueSchema: \"CaseVisitCard\",\n },\n bookingDuration: { description: \"Удержание брони в секундах; int32/null, null снимает настройку.\" },\n maxConsumerQuantity: { description: \"Максимальная вместимость; int32/null, ноль сохраняется.\" },\n bookingConsumerQuantity: {\n description:\n \"Места, зарезервированные вручную; int32/null. Вычитаются из вместимости отдельно от фактического consumersCount.\",\n },\n executorUsagePercent: { description: \"Загрузка исполнителя, процентов; конечное число/null.\" },\n availableResources: {\n description:\n \"OpenAPI AvailableResources: Unknown/Free/Booked/Busy; Unknown — wire sentinel отсутствия, null запрещён.\",\n },\n needApproval: { description: \"Необходимость одобрения; boolean/null, false сохраняется.\" },\n createSingleCases: { description: \"Генерация одиночных событий; boolean/null. Пропущенное расписание не очищается.\" },\n checkinPermission: {\n description: \"Правила регистрации целиком; null снимает правила.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: { description: \"Скрытие события; boolean/null, false сохраняется.\" },\n appendixList: { description: \"Приложения целиком; []/null очищают список.\", valueSchema: \"Appendix[]\" },\n participateFieldRequirements: {\n description: \"Требования к данным участника целиком; null снимает требования.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов целиком; []/null очищают список, SDK не выполняет бронирование.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priority: { description: \"Приоритет; конечное число/null, ноль сохраняется.\" },\n clientGroupId: {\n description: \"Непустой ID группы клиентов; null снимает ссылку, известный SDK type code не требуется.\",\n },\n caseActionList: {\n description:\n \"Автоматизации целиком; []/null очищают. SDK заполняет только отсутствующий rid; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/cases/README.md и examples/node/item-cases/cases-patch.ts. Выполнение и серверная очередь остаются серверу.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Правила лояльности целиком; []/null очищают.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n priceInfo: {\n description: \"Ценовые settings заменяются целиком; null снимает всю ценовую область.\",\n valueSchema: \"ItemPricePatchInfo\",\n },\n} satisfies Record<keyof CaseItemPatch, ItemFieldDoc>;\n\n/** Новый SDK patch не заменяет существующий patchCase POST /{id}/patch. */\nexport const casesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/cases/{id}; Full/UpdateItem/version обязательны, 29 разрешённых полей конфигурации. No-op без PUT, без retry/readback. Состояние, service/group linkage, orderNumber, участие и бронь — отдельные операции.\",\n valueSchema:\n \"(itemId: string, fields: CaseItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<CaseItem>\",\n },\n} satisfies Record<Extract<keyof CasesFacade, \"patch\">, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport type {\n ItemPricePatchFields,\n ItemPricePatchInfo,\n ItemPricePatchProperties,\n ItemPricePatchSetting,\n} from \"../resources/common/item-price-patch-types.js\";\n\n/** Денежные поля передаются серверу без расчётов SDK; provider properties API не сохраняет. */\nexport const itemPricePatchPropertiesFieldDocEntries = {\n priceWithoutDiscount: { description: \"Исходная цена; nullable wire number.\" },\n discount: { description: \"Скидка; nullable wire number, SDK не вычисляет итог.\" },\n salePrice: { description: \"Продажная цена; nullable wire number.\" },\n currencyCode: { description: \"Код валюты по API; nullable string.\" },\n prepayment: { description: \"Предоплата; nullable wire number.\" },\n expences: { description: \"Расходы; nullable wire number, wire-написание expences сохраняется.\" },\n takePrice: { description: \"Выручка; nullable wire number.\" },\n taxRate: { description: \"Ставка налога; nullable wire number.\" },\n taxAmount: { description: \"Сумма налога; nullable wire number, SDK не вычисляет.\" },\n} satisfies Record<keyof ItemPricePatchProperties, ItemFieldDoc>;\n/** Полная ценовая запись; Date внутри schedule остаются Date публичного SDK. */\nexport const itemPricePatchSettingFieldDocEntries = {\n priceProperties: {\n description: \"Обязательная цена записи; чтобы удалить цену, исключите всю запись из settings.\",\n valueSchema: \"ItemPricePatchProperties\",\n },\n schedule: {\n description:\n \"Собственное расписание этой цены, полная замена; null/отсутствие снимает структуру. Для диапазонов без rid SDK создаёт 24-hex значение.\",\n valueSchema: \"Schedule\",\n },\n} satisfies Record<keyof ItemPricePatchSetting, ItemFieldDoc>;\n/** Основное представление всей области цен. */\nexport const itemPricePatchInfoFieldDocEntries = {\n settings: {\n description:\n \"Упорядоченный массив ценовых записей; [] запрашивает очистку. Service.patch нормализует [] в priceInfo:null для полного удаления цены. Непустой список заменяется целиком; сохраните расписания и RID оставшихся записей. Каждая запись содержит цену.\",\n valueSchema: \"ItemPricePatchSetting[]\",\n },\n} satisfies Record<keyof ItemPricePatchInfo, ItemFieldDoc>;\n/** Полная замена области цены. */\nexport const itemPricePatchFieldsFieldDocEntries = {\n priceInfo: {\n description:\n \"Полная замена всех settings; пропуск сохраняет цены, null снимает всю ценовую область. Service.patch также принимает settings:[] как полную очистку, отправляет priceInfo:null и исключает старый root alias из ценового PUT. Отдельная цена удаляется передачей списка остальных настроек с их расписаниями и RID. ACK не заменяет независимый GET при проверке сохранения.\",\n valueSchema: \"ItemPricePatchInfo\",\n },\n} satisfies Record<keyof ItemPricePatchFields, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport type { ServiceItemPatch } from \"../resources/services/types.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { itemPricePatchFieldsFieldDocEntries } from \"./item-price-patch-field-docs.js\";\n\n/** Все подтверждённые root-writable поля Service.patch; остальные аспекты имеют отдельные операции. */\nexport const serviceItemPatchFieldDocEntries = {\n name: serviceItemFieldDocEntries.name,\n image: { description: \"Только {id} файла либо null; пропуск сохраняет image. URL/eTag/fileSize не принимаются.\" },\n description: serviceItemFieldDocEntries.description,\n placeId: serviceItemFieldDocEntries.placeId,\n place: serviceItemFieldDocEntries.place,\n schedule: serviceItemFieldDocEntries.schedule,\n bookingDuration: serviceItemFieldDocEntries.bookingDuration,\n timetableView: serviceItemFieldDocEntries.timetableView,\n registrationClose: serviceItemFieldDocEntries.registrationClose,\n registrationOpen: serviceItemFieldDocEntries.registrationOpen,\n maxConsumerQuantity: serviceItemFieldDocEntries.maxConsumerQuantity,\n executorIdList: serviceItemFieldDocEntries.executorIdList,\n needApproval: serviceItemFieldDocEntries.needApproval,\n timeAlignment: serviceItemFieldDocEntries.timeAlignment,\n orderQuote: serviceItemFieldDocEntries.orderQuote,\n marginTime: serviceItemFieldDocEntries.marginTime,\n executorUsagePercent: serviceItemFieldDocEntries.executorUsagePercent,\n firstWeekDate: serviceItemFieldDocEntries.firstWeekDate,\n clientGroupId: serviceItemFieldDocEntries.clientGroupId,\n resourceGroupList: serviceItemFieldDocEntries.resourceGroupList,\n participateFieldRequirements: serviceItemFieldDocEntries.participateFieldRequirements,\n appendixList: serviceItemFieldDocEntries.appendixList,\n sessionDurationProperties: serviceItemFieldDocEntries.sessionDurationProperties,\n checkInAllCases: serviceItemFieldDocEntries.checkInAllCases,\n stepDescriptionList: serviceItemFieldDocEntries.stepDescriptionList,\n buttonName: serviceItemFieldDocEntries.buttonName,\n checkinPermission: serviceItemFieldDocEntries.checkinPermission,\n caseActionList: serviceItemFieldDocEntries.caseActionList,\n loyaltyTransactionPropertiesList: serviceItemFieldDocEntries.loyaltyTransactionPropertiesList,\n ...itemPricePatchFieldsFieldDocEntries,\n} satisfies Record<keyof ServiceItemPatch, ItemFieldDoc>;\n","import type { NotesFacade } from \"../resources/notes/NotesFacade.js\";\nimport type { NoteItemPatch } from \"../resources/notes/types.js\";\nimport type { CalendarsFacade } from \"../resources/calendars/CalendarsFacade.js\";\nimport type {\n CalendarItemPatch,\n CalendarItemPatchScheduleRangeExceptions,\n CalendarItemPatchTimeRange,\n} from \"../resources/calendars/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Подтверждённые поля частичной записи заметки; загруженные файлы представлены только ссылками. */\nexport const noteItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла; null снимает, пропуск сохраняет.\" },\n noteType: {\n description:\n \"Только Html, Markdown или Text; другой ввод отклоняется до первого GET. Прочитанный Text становится рабочим форматом записи.\",\n valueSchema: \"NoteType\",\n },\n data: {\n description:\n \"Точная строка; пустая строка очищает, пропуск сохраняет wire string/null/missing. Явные null/undefined отклоняются до GET. Пустая строка при raw null/missing требует CAS PUT; при raw пустой строке возможен no-op. Без trim, ISO revival и разбора JSON/HTML; хранение backend проверяется отдельно.\",\n valueSchema: \"string\",\n },\n files: {\n description:\n \"Полная замена ссылок {id}[] на уже загруженные файлы; [] снимает вложения. Отсоединённые файлы сервер может удалить.\",\n },\n imagePreviewSize: {\n description: \"Размер превью; Undefined очищает настройку, create default Small не применяется.\",\n valueSchema: \"ImagePreviewSize\",\n },\n} satisfies Record<keyof NoteItemPatch, ItemFieldDoc>;\n\n/** Подтверждённые поля частичной записи календаря. */\nexport const calendarItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; ISO-подобная строка остаётся текстом.\" },\n image: { description: \"Только {id} загруженного файла; null снимает, пропуск сохраняет.\" },\n description: { description: \"Строка либо null; null/empty очищает содержимое, сервер может нормализовать ACK.\" },\n calendarViewIndex: { description: \"Int32|null; 0 записывается, но сервер может вернуть null; null очищает.\" },\n scheduleRangeExceptions: {\n description:\n \"Замена всей структуры; null снимает, {} очищает списки. Пропущенные вложенные списки не объединяются со старыми.\",\n valueSchema: \"CalendarItemPatchScheduleRangeExceptions | null\",\n },\n} satisfies Record<keyof CalendarItemPatch, ItemFieldDoc>;\n\n/** Два заменяемых списка исключений; это не изменение Case и не чтение timetable. */\nexport const calendarItemPatchScheduleRangeExceptionsFieldDocEntries = {\n replacedTimeRanges: {\n description: \"Полный список заменённых интервалов; []/null/пропуск очищает список внутри новой структуры.\",\n valueSchema: \"CalendarItemPatchTimeRange[] | null\",\n },\n excludedTimeRanges: {\n description: \"Полный список исключённых интервалов; []/null/пропуск очищает список внутри новой структуры.\",\n valueSchema: \"CalendarItemPatchTimeRange[] | null\",\n },\n} satisfies Record<keyof CalendarItemPatchScheduleRangeExceptions, ItemFieldDoc>;\n\n/** Интервал требует Date; отсутствующий rid создаётся SDK, бизнес-валидность времени остаётся серверу. */\nexport const calendarItemPatchTimeRangeFieldDocEntries = {\n rid: {\n description:\n \"24 hex идентификатор; отсутствующий/null/пустой создаётся SDK, существующий валидный сохраняется. Для стабильного повтора заранее используйте generateRid().\",\n },\n begin: { description: \"Начало интервала Date SDK; сериализуется в UTC ISO, из ответа восстанавливается по схеме.\" },\n end: { description: \"Конец интервала Date SDK; порядок относительно начала проверяет сервер.\" },\n name: { description: \"Необязательная подпись string|null; сервер может нормализовать пустую подпись.\" },\n} satisfies Record<keyof CalendarItemPatchTimeRange, ItemFieldDoc>;\n\n/** Предметный метод заметки с точным исходным текстом и проверенным CAS. */\nexport const notesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/notes/{id}; Full/UpdateItem/item version обязательны; нормализованный Text сохраняется без восстановления исходного серверного формата. No-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: NoteItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<NoteItem>\",\n },\n} satisfies Record<Extract<keyof NotesFacade, \"patch\">, ItemFieldDoc>;\n\n/** Предметный метод календаря, не вызывающий timetable/membership операции. */\nexport const calendarsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/calendars/{id}; Full/UpdateItem/item version обязательны, вложенные исключения заменяются целиком. No-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: CalendarItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<CalendarItem>\",\n },\n} satisfies Record<Extract<keyof CalendarsFacade, \"patch\">, ItemFieldDoc>;\n","import type {\n LoyaltySystemItemPatch,\n LoyaltySystemInitialSubscriptionPatch,\n} from \"../resources/loyalty-systems/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Подтверждённые настройки root программы; финансовые действия не входят в patch. */\nexport const loyaltySystemItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла либо null для очистки.\" },\n description: { description: \"Описание; строка/null, пустая строка допустима.\" },\n businessCardId: { description: \"Непустой ID визитки; null снимает связь.\" },\n loyaltyCardIssueType: { description: \"Правило будущего выпуска, wire enum кроме Unknown.\" },\n loyaltyCardAnyoneAccess: {\n description: \"Доступ будущих карт, wire AnyoneAccess кроме Unknown; не publicity самого item.\",\n },\n loyaltyCardUpdateKeyInformation: { description: \"Политика ключевых сведений карт; enum без Unknown/null.\" },\n loyaltyCardUpdateNonKeyInformation: { description: \"Политика неключевых сведений карт; enum без Unknown/null.\" },\n loyaltyCardUsagePeriod: { description: \"Срок будущих карт в днях, int32/null; 0 сохраняется.\" },\n startDate: { description: \"Начало программы, Date/null.\" },\n expiredDate: { description: \"Окончание программы, Date/null.\" },\n contactInformationFieldsRequirements: {\n description: \"Полная замена требований к контакту будущего выпуска; null очищает.\",\n },\n referralProgramIds: { description: \"Полная замена списка ID программ; [] очищает.\" },\n beginTransactionValues: {\n description: \"Полная замена начальных значений будущего выпуска; [] очищает; существующий баланс не меняется.\",\n },\n initialSubscription: {\n description: \"Полная замена конфигурации будущего стартового абонемента либо null; image только {id}/null.\",\n },\n accountingProductNames: { description: \"Полная замена имён учётных продуктов; [] очищает.\" },\n} satisfies Record<keyof LoyaltySystemItemPatch, ItemFieldDoc>;\n\n/** Стартовый абонемент будущего выпуска, заменяемый целиком. */\nexport const loyaltySystemInitialSubscriptionPatchFieldDocEntries = {\n name: { description: \"Название стартового абонемента; пропуск не наследует название прежнего объекта.\" },\n usagePeriod: { description: \"Срок будущего стартового абонемента в днях, int32/null.\" },\n transactionValues: {\n description:\n \"Полная конфигурация начальных значений будущего абонемента, не финансовая транзакция существующей карты.\",\n },\n image: { description: \"Только {id} загруженного файла либо null; URL/серверные атрибуты не записываются.\" },\n} satisfies Record<keyof LoyaltySystemInitialSubscriptionPatch, ItemFieldDoc>;\n","import type { ContactsFacade } from \"../resources/contacts/ContactsFacade.js\";\nimport type { ContactItemPatch, ContactCommunicationPatch } from \"../resources/contacts/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Все редактируемые обычные поля контакта; профильные и социальные операции выполняются отдельно. */\nexport const contactItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: {\n description: \"Только {id} загруженного файла; null снимает изображение; FileInfo URL/metadata не принимаются.\",\n },\n firstName: { description: \"Имя; строка/null, null/empty очищают без trim.\" },\n lastName: { description: \"Фамилия; строка/null, null/empty очищают.\" },\n middleName: { description: \"Отчество; строка/null, null/empty очищают.\" },\n company: { description: \"Компания; строка/null, null/empty очищают.\" },\n position: { description: \"Должность; строка/null, null/empty очищают.\" },\n description: { description: \"Описание с точным сохранением текста; null/empty очищают.\" },\n birthday: { description: \"Дата рождения Date; null удаляет дату.\" },\n gender: {\n description: \"OpenAPI Gender; UnknownGender явно обозначает неизвестный пол, null запрещён.\",\n valueSchema: \"Gender\",\n },\n addresses: {\n description:\n \"Полная замена адресов; []/null очищают. Без rid SDK создаёт 24 hex; переданный rid сохраняется/проверяется.\",\n valueSchema: \"Address[]\",\n },\n communications: {\n description:\n \"Полная замена каналов; []/null очищают. Серверные checkDate/valueForSearch запрещены на входе; без checkState SDK ставит Unchecked.\",\n valueSchema: \"ContactCommunicationPatch[]\",\n },\n dates: {\n description: \"Полная замена памятных дат с Date; []/null очищают. Rid сохраняется либо создаётся SDK.\",\n valueSchema: \"MemorableDate[]\",\n },\n photos: { description: \"Полная замена массива ссылок {id}; []/null очищают. URL/metadata файла не записываются.\" },\n visitCard: {\n description:\n \"Замена визитки с нормализацией трёх слотов; недостающие номера заполняются, дубли — последняя запись. Пустые fields создают default, для очистки передать три пустых value. Пропуск не пересчитывает визитку.\",\n valueSchema: \"ContactVisitCard\",\n },\n} satisfies Record<keyof ContactItemPatch, ItemFieldDoc>;\n\n/** Пользовательские атрибуты канала связи, без серверных сведений проверки/поиска. */\nexport const contactCommunicationPatchFieldDocEntries = {\n rid: { description: \"24 hex существующего канала; отсутствие/null/пустая строка создаёт новый rid.\" },\n name: { description: \"Пользовательская подпись канала; строка/null.\" },\n type: {\n description:\n \"Тип канала по OpenAPI, например Email/Phone; смена не переносит доказательство проверки старого канала.\",\n valueSchema: \"CommunicationType\",\n },\n value: {\n description: \"Пользовательское значение канала; сервер проверяет допустимость и нормализует поисковое значение.\",\n },\n order: { description: \"Целый порядок отображения канала; ноль сохраняется.\" },\n checkState: {\n description:\n \"Запрашиваемое состояние; отсутствие означает Unchecked. Подтверждение Checked проверяет сервер, patch не отправляет код автоматически.\",\n },\n} satisfies Record<keyof ContactCommunicationPatch, ItemFieldDoc>;\n\n/** Единственный item patch обычных полей, включая существующий профильный Contact. */\nexport const contactsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/contacts/{id}; Full/UpdateItem/version обязательны. 15 полей ContactItemPatch, вложенные значения заменяются целиком, no-op без PUT, без retry/readback. Профиль редактируется тем же Contact ID; profileProperties/contactProperties — отдельными методами.\",\n valueSchema:\n \"(itemId: string, fields: ContactItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ContactItem>\",\n },\n} satisfies Record<Extract<keyof ContactsFacade, \"patch\">, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const generateSecurityTokenReqFieldDocEntries = {\n forUser: {\n description: \"Токен ограничен текущим пользователем/профилем.\",\n valueSchema: \"boolean | null\",\n },\n expiresAt: {\n description: \"Срок действия security-token.\",\n valueSchema: \"date-time string | null\",\n },\n operationTypeList: {\n description: \"Список разрешённых операций для токена.\",\n valueSchema: \"OperationType[] | null\",\n },\n participantType: {\n description: \"Минимальная роль участия при использовании токена.\",\n valueSchema: \"ParticipantType\",\n },\n participantState: {\n description: \"Ожидаемое состояние участия для доступа по токену.\",\n valueSchema: \"ParticipantState\",\n },\n roleIdList: {\n description: \"Ограничение по role id (контракт API).\",\n valueSchema: \"int32[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenReqFieldDocs = mapFieldDocsToStrings(generateSecurityTokenReqFieldDocEntries);\n\nexport const generateSecurityTokenRespFieldDocEntries = {\n token: {\n description: \"Сгенерированный security-token для guest/limited access.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenRespFieldDocs = mapFieldDocsToStrings(generateSecurityTokenRespFieldDocEntries);\n\nexport const shareItemReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль-инициатор шаринга (если отличается от контекста токена).\",\n valueSchema: \"string | null\",\n },\n readerProfileIdList: {\n description:\n \"Список профилей-получателей (основное поле API). Каждый id должен уже быть в личном списке владельца, иначе `failedToParticipate` → `CONTACT_IS_NOT_IN_PERSONAL_LIST`.\",\n valueSchema: \"string[] | null\",\n },\n readerProfileIdsList: {\n description: \"Легаси-алиас списка получателей (встречается в старых контрактах).\",\n valueSchema: \"string[] | null\",\n },\n participantType: {\n description: \"Тип доступа, который выдают получателям.\",\n valueSchema: \"ParticipantType\",\n },\n userMessage: {\n description: \"Комментарий/сообщение получателю при шаринге.\",\n valueSchema: \"string | null\",\n },\n versionToCheck: {\n description: \"Версия объекта для optimistic lock.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Флаг генерации анонса после share.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const shareItemReqFieldDocs = mapFieldDocsToStrings(shareItemReqFieldDocEntries);\n\nexport const sendLinkOfItemReqFieldDocEntries = {\n profileId: {\n description: \"Профиль-инициатор отправки ссылки.\",\n valueSchema: \"string | null\",\n },\n recipientProfileIdList: {\n description: \"Список профилей-получателей ссылки.\",\n valueSchema: \"string[] | null\",\n },\n message: {\n description: \"Сопроводительное сообщение к ссылке.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemReqFieldDocs = mapFieldDocsToStrings(sendLinkOfItemReqFieldDocEntries);\n\nexport const getShareItemSessionReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль инициатора invite-session ссылки.\",\n valueSchema: \"string | null\",\n },\n expiredDate: {\n description: \"Срок действия session URL.\",\n valueSchema: \"Date\",\n },\n activateCount: {\n description: \"Сколько раз можно активировать session.\",\n valueSchema: \"number\",\n },\n code: {\n description: \"Опциональный код активации.\",\n valueSchema: \"string | null\",\n },\n userMessage: {\n description: \"Сообщение к invite-session.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const getShareItemSessionReqFieldDocs = mapFieldDocsToStrings(getShareItemSessionReqFieldDocEntries);\n\nexport const sendLinkOfItemRespFieldDocEntries = {\n isSuccess: {\n description: \"Итог отправки ссылки.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemRespFieldDocs = mapFieldDocsToStrings(sendLinkOfItemRespFieldDocEntries);\n\nexport const participationFieldDocEntries = {\n meta: {\n description: \"Мета участия (`version`, даты, системные атрибуты).\",\n valueSchema: \"ObjectInfo\",\n },\n profileId: {\n description: \"Профиль участника, для которого действует участие.\",\n valueSchema: \"string | null\",\n },\n participantState: {\n description: \"Состояние участия (`Requested`, `Approved`, ...).\",\n valueSchema: \"ParticipantState\",\n },\n participantType: {\n description: \"Роль участия (`Reader`, `Editor`, `Owner`, ...).\",\n valueSchema: \"ParticipantType\",\n },\n notificationWayList: {\n description: \"Каналы уведомлений участника по объекту.\",\n valueSchema: \"NotificationWay[] | null\",\n },\n subscriptionList: {\n description: \"Подписки/настройки подписок участника.\",\n valueSchema: \"Subscription[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationFieldDocs = mapFieldDocsToStrings(participationFieldDocEntries);\n\nexport const profileWithErrorFieldDocEntries = {\n profile: {\n description: \"ID профиля, по которому операция завершилась с ошибкой.\",\n valueSchema: \"string | null\",\n },\n torrowErrorClient: {\n description: \"Структура ошибки API для этого профиля.\",\n valueSchema: \"TorrowErrorClient\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileWithErrorFieldDocs = mapFieldDocsToStrings(profileWithErrorFieldDocEntries);\n\nexport const participationRespFieldDocEntries = {\n participationList: {\n description: \"Список успешных participation-изменений.\",\n valueSchema: \"Participation[] | null\",\n },\n failedToParticipate: {\n description: \"Профили, по которым операция не выполнена, с ошибками.\",\n valueSchema: \"ProfileWithError[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationRespFieldDocs = mapFieldDocsToStrings(participationRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const accountingTransactionFieldDocEntries = {\n accountId: { description: \"Счёт/баланс, к которому относится транзакция.\", valueSchema: \"string | null\" },\n transactionDate: { description: \"Дата проводки транзакции.\", valueSchema: \"date-time string\" },\n state: {\n description: \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n valueSchema: \"AccountingTransactionState\",\n },\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: {\n description: \"Срок действия транзакции/резерва, если применимо.\",\n valueSchema: \"date-time string | null\",\n },\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: {\n description: \"Пользовательское сообщение (если передавалось в операции).\",\n valueSchema: \"string | null\",\n },\n text: { description: \"Системный/локализованный текст события.\", valueSchema: \"string | null\" },\n userProfileView: { description: \"Профиль пользователя, инициировавшего действие.\", valueSchema: \"ContactView\" },\n correspondentProfileViewList: {\n description: \"Профили корреспондентов/получателей события.\",\n valueSchema: \"ContactView[] | null\",\n },\n itemContactView: {\n description: \"Снимок контакта, к которому относится событие (если применимо).\",\n valueSchema: \"ContactView\",\n },\n itemContextView: {\n description: \"Снимок контекста, к которому относится событие (если применимо).\",\n valueSchema: \"ContextView\",\n },\n itemNoteView: {\n description: \"Снимок заметки, к которой относится событие (если применимо).\",\n valueSchema: \"NoteView\",\n },\n itemCaseView: {\n description: \"Снимок события/кейса, к которому относится запись (если применимо).\",\n valueSchema: \"CaseView\",\n },\n itemCalendarView: {\n description: \"Снимок календаря, к которому относится событие (если применимо).\",\n valueSchema: \"CalendarView\",\n },\n itemServiceView: {\n description: \"Снимок услуги, к которой относится событие (если применимо).\",\n valueSchema: \"ServiceView\",\n },\n itemResourceView: {\n description: \"Снимок ресурса, к которому относится событие (если применимо).\",\n valueSchema: \"ResourceView\",\n },\n itemLoyaltyCardView: {\n description: \"Снимок карты лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltyCardView\",\n },\n itemLoyaltySystemView: {\n description: \"Снимок программы лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltySystemView\",\n },\n id: { description: \"ID записи action-history.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект записи.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryInfoFieldDocs = mapFieldDocsToStrings(actionHistoryInfoFieldDocEntries);\n\n/** Query `GET /api/v1/actionhistory` (`ActionHistoryListQuery` / OpenAPI). */\nexport const actionHistoryListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста событий (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать записи по удалённым объектам. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка.\",\n valueSchema: \"ItemViewSortCondition\",\n },\n types: {\n description: \"Фильтр по типам действий (`CreateItem`, `UpdateItem`, …).\",\n valueSchema: \"ActionHistoryType[]\",\n },\n states: {\n description: \"Фильтр по состоянию записи (`Executing`, `Success`, …).\",\n valueSchema: \"ActionHistoryState[]\",\n },\n itemIds: {\n description:\n \"Фильтр по id элементов. Опционален: без параметра / `[]` — лента действий пользователя; непустой список — история по выбранным item (нужны существующие id с доступом). Невалидный id на шлюзе может дать HTTP 500.\",\n valueSchema: \"string[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryListQueryFieldDocs = mapFieldDocsToStrings(actionHistoryListQueryFieldDocEntries);\n\n/** Query `GET /api/v1/announcements` (`AnnouncementsListQuery` / OpenAPI). */\nexport const announcementsListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста уведомлений (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n state: {\n description:\n \"Один фильтр по состоянию (`New`, `Hidden`, `Read`, …). Если задан — имеет приоритет над **`stateList`**. Без **`state`** и **`stateList`** шлюз отдаёт **пустой** список (не ошибку).\",\n valueSchema: \"AnnouncementState\",\n examples: [\"New\", \"Hidden\"],\n },\n stateList: {\n description:\n \"Фильтр по нескольким состояниям. В приложении лента грузит **`New`** (новые) и **`Hidden`** (обработанные) отдельными запросами. Без **`state`** и **`stateList`** ответ пустой.\",\n valueSchema: \"AnnouncementState[]\",\n examples: ['[\"New\", \"Hidden\"]'],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description: \"Нижняя граница фильтра по времени изменения. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description: \"Верхняя граница фильтра по времени изменения. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать удалённые уведомления. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка (в приложении часто `LastModifiedDesc`).\",\n valueSchema: \"ItemViewSortCondition\",\n examples: [\"LastModifiedDesc\"],\n },\n profileId: {\n description: \"Опциональный фильтр по профилю-получателю уведомления.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementsListQueryFieldDocs = mapFieldDocsToStrings(announcementsListQueryFieldDocEntries);\n\nexport const announcementInfoFieldDocEntries = {\n type: { description: \"Тип анонса (share, grant access, create order, ...).\", valueSchema: \"AnnouncementType\" },\n state: { description: \"Состояние анонса (`New`, `Read`, `Hidden`).\", valueSchema: \"AnnouncementState\" },\n category: {\n description: \"Категория визуализации (`Action`, `Alert`, `Reminder`, ...).\",\n valueSchema: \"AnnouncementCategory\",\n },\n priority: { description: \"Приоритет показа (`Low`, `Normal`, `High`).\", valueSchema: \"AnnouncementPriority\" },\n senderProfileView: { description: \"Профиль отправителя анонса.\", valueSchema: \"ContactView\" },\n recipientProfileView: { description: \"Профиль получателя анонса.\", valueSchema: \"ContactView\" },\n userMessage: {\n description: \"Сообщение пользователя (если источник события его содержал).\",\n valueSchema: \"string | null\",\n },\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: {\n description: \"Экспортированные представления (views) для элементов графа.\",\n valueSchema: \"ItemView[] | null\",\n },\n timetableCases: {\n description: \"Связанные записи расписания/кейсы, попавшие в экспорт.\",\n valueSchema: \"TimetableCase[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportGraphFieldDocs = mapFieldDocsToStrings(exportGraphFieldDocEntries);\n\nexport const importByFileRequestFieldDocEntries = {\n exportGraph: { description: \"Граф, ранее полученный через export API.\", valueSchema: \"ExportGraph\" },\n parentId: { description: \"Куда импортировать корень графа.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль-владелец для импортируемых объектов.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импортировать только дочерние узлы графа без корня.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не дублировать root, если уже существует.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByFileRequestFieldDocs = mapFieldDocsToStrings(importByFileRequestFieldDocEntries);\n\nexport const importByUniqueNameRequestFieldDocEntries = {\n uniqueName: { description: \"Уникальное имя экспортированного набора/корня.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина импортируемого подграфа.\", valueSchema: \"int32 | null\" },\n parentId: { description: \"Родитель, куда включают импортированный граф.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль контекста импорта.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импорт без корневого узла.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не создавать дубль root при совпадении.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByUniqueNameRequestFieldDocs = mapFieldDocsToStrings(importByUniqueNameRequestFieldDocEntries);\n\nexport const generateReportReqFieldDocEntries = {\n options: { description: \"Опции доставки/локали отчёта.\", valueSchema: \"ReportOptions\" },\n properties: { description: \"Параметры формирования отчёта (контракт API).\", valueSchema: \"ReportProperties\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportReqFieldDocs = mapFieldDocsToStrings(generateReportReqFieldDocEntries);\n\nexport const reportPropertiesFieldDocEntries = {\n discriminator: {\n description:\n \"Subtype отчёта (NJsonSchema inheritance). Swagger описывает только базу; runtime требует одно из: `CaseReportProperties`, `ServiceReportProperties`, `ServicesResourcesReportProperties`, `ResourcesRentReportProperties`, `ResourceReportProperties`. Пустой `{}` → HTTP 500.\",\n valueSchema: \"string\",\n examples: [\"CaseReportProperties\", \"ServiceReportProperties\"],\n },\n fakeForTsGeneratorDoNotRemove: {\n description:\n \"Техническое поле OpenAPI для генератора типов. В бизнес-логике отчётов не используется и обычно не передаётся.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportPropertiesFieldDocs = mapFieldDocsToStrings(reportPropertiesFieldDocEntries);\n\nexport const reportOptionsFieldDocEntries = {\n reportDeliveryType: { description: \"Способ доставки отчёта: `Link` или `Email`.\", valueSchema: \"ReportDeliveryType\" },\n reportDeliveryAddresses: {\n description: \"Email-адреса получателей, если доставка через Email.\",\n valueSchema: \"string[] | null\",\n },\n language: { description: \"Язык отчёта (обычно BCP-47, напр. `ru`, `en`).\", valueSchema: \"string\" },\n timeZone: {\n description: \"Таймзона для дат отчёта (в приложении используется локальная IANA зона пользователя).\",\n valueSchema: \"string\",\n examples: [\"Europe/Moscow\", \"UTC\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportOptionsFieldDocs = mapFieldDocsToStrings(reportOptionsFieldDocEntries);\n\nexport const generateReportRespFieldDocEntries = {\n reportLink: { description: \"Ссылка на готовый отчёт.\", valueSchema: \"string | null\" },\n expirationTime: { description: \"Срок действия ссылки на отчёт.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportRespFieldDocs = mapFieldDocsToStrings(generateReportRespFieldDocEntries);\n\nexport const loyaltyCardSubscriptionFieldDocEntries = {\n subscriptionId: { description: \"ID подписки карты лояльности.\", valueSchema: \"string | null\" },\n name: { description: \"Название подписки (тариф/пакет).\", valueSchema: \"string | null\" },\n state: { description: \"Состояние подписки (int-код API).\", valueSchema: \"int32\" },\n createDate: { description: \"Дата создания подписки.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала действия подписки.\", valueSchema: \"date-time string | null\" },\n endDate: { description: \"Дата окончания действия подписки.\", valueSchema: \"date-time string | null\" },\n caseParticipantId: {\n description: \"ID участника кейса, на основе которого создана подписка.\",\n valueSchema: \"string | null\",\n },\n image: { description: \"Изображение/иконка подписки.\", valueSchema: \"FileInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltyCardSubscriptionFieldDocs = mapFieldDocsToStrings(loyaltyCardSubscriptionFieldDocEntries);\n\n/** Тело `POST .../loyaltysystems/{id}/loyaltycard` — **`CreateLoyaltyCardReq`**. */\nexport const createLoyaltyCardReqFieldDocEntries = {\n profileId: {\n description: \"Профиль владельца выпускаемой карты (обязателен).\",\n valueSchema: \"string\",\n usage: \"`client.loyaltySystems.createLoyaltyCard(systemId, { profileId, … })`.\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого создаются карта клиента и абонемент.\",\n valueSchema: \"string | null\",\n usage: \"Сценарий записи/оплаты → выпуск карты с привязкой к заказу; `null` — выпуск без элемента-основания.\",\n },\n contactInformation: {\n description: \"Контактные данные держателя карты при выпуске (если передаются отдельно от профиля).\",\n valueSchema: \"ContactInformation\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createLoyaltyCardReqFieldDocs = mapFieldDocsToStrings(createLoyaltyCardReqFieldDocEntries);\n\n/** Вложенный объект в **`CreateLoyaltyCardSubscriptionReq.initialTransaction`**. */\nexport const initialTransactionFieldDocEntries = {\n beginTransactionValues: {\n description: \"Начальные значения баланса/продуктов при создании абонемента.\",\n valueSchema: \"TransactionValue[]\",\n },\n state: {\n description: \"Состояние начальной транзакции (`Intended`, `Reserved`, `Commited`, …).\",\n valueSchema: \"AccountingTransactionState\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого созданы карта клиента и абонемент; связывается с начальной транзакцией подписки.\",\n valueSchema: \"string | null\",\n usage: \"Тот же смысл, что у **`CreateLoyaltyCardReq.basisItemId`**, в контексте `createSubscription`.\",\n },\n caseParticipantId: {\n description: \"ID участника кейса, связанного с начальной транзакцией (если применимо).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const initialTransactionFieldDocs = mapFieldDocsToStrings(initialTransactionFieldDocEntries);\n\nexport const loyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemIdList: {\n description: \"Список программ лояльности, по которым считают агрегаты.\",\n valueSchema: \"string[]\",\n },\n name: { description: \"Имя набора статистики/среза (лейбл запроса).\", valueSchema: \"string\" },\n filterList: {\n description: \"Фильтры карт/подписок для статистики.\",\n valueSchema: \"LoyaltyCardFilterCondition[] | null\",\n },\n includeDeleted: { description: \"Включать удалённые объекты в расчёт.\", valueSchema: \"boolean | null\" },\n take: { description: \"Лимит элементов при расчёте.\", valueSchema: \"int32 | null\" },\n skip: { description: \"Смещение для пакетной обработки.\", valueSchema: \"int32 | null\" },\n lastModifiedFrom: { description: \"Нижняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n lastModifiedTo: { description: \"Верхняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n createDateFrom: { description: \"Нижняя граница по дате создания.\", valueSchema: \"Date | null\" },\n createDateTo: { description: \"Верхняя граница по дате создания.\", valueSchema: \"Date | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsReqFieldDocEntries);\n\nexport const loyaltySystemsStatisticsRespFieldDocEntries = {\n name: { description: \"Имя среза статистики из запроса.\", valueSchema: \"string | null\" },\n count: { description: \"Рассчитанное количество элементов по срезу.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsRespFieldDocEntries);\n\nexport const getLoyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemsStatisticsReqList: {\n description: \"Пакет запросов статистики по программам лояльности.\",\n valueSchema: \"LoyaltySystemsStatisticsReq[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n);\n\nexport const getLoyaltySystemsStatisticsRespFieldDocEntries = {\n loyaltySystemsStatisticsRespList: {\n description: \"Пакет ответов статистики по каждому входному срезу.\",\n valueSchema: \"LoyaltySystemsStatisticsResp[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n);\n\nexport const transactionInfoFieldDocEntries = {\n basisItem: {\n description: \"Базовый объект-основание транзакции (например кейс/карта/подписка).\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const transactionInfoFieldDocs = mapFieldDocsToStrings(transactionInfoFieldDocEntries);\n\nexport const torrowErrorClientFieldDocEntries = {\n code: { description: \"Код ошибки API.\", valueSchema: \"int32\" },\n name: { description: \"Системное имя ошибки.\", valueSchema: \"string | null\" },\n message: { description: \"Пользовательское сообщение ошибки.\", valueSchema: \"string | null\" },\n systemMessage: { description: \"Техническое сообщение сервера.\", valueSchema: \"string | null\" },\n innerError: { description: \"Вложенная причина ошибки.\", valueSchema: \"TorrowErrorClient\" },\n traceUrl: { description: \"URL трейса/диагностики (если включено на сервере).\", valueSchema: \"string | null\" },\n traceIdentifier: { description: \"Идентификатор трассировки для саппорта.\", valueSchema: \"string | null\" },\n parameters: { description: \"Параметры ошибки (ключ-значение).\", valueSchema: \"Record<string, string | null> | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const torrowErrorClientFieldDocs = mapFieldDocsToStrings(torrowErrorClientFieldDocEntries);\n\nexport const getParticipationCountRespFieldDocEntries = {\n count: { description: \"Количество участников по текущему фильтру.\", valueSchema: \"int32\" },\n isExactValue: {\n description: \"Точное ли это значение (`false` — сервер мог вернуть приближённую оценку).\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getParticipationCountRespFieldDocs = mapFieldDocsToStrings(getParticipationCountRespFieldDocEntries);\n\nexport const fileInfoFieldDocEntries = {\n id: {\n description: \"ID файла в хранилище.\",\n valueSchema: \"string | null\",\n usage:\n \"В теле **create**/**update** item (`image`, `files[]`, …) достаточно только **`id`** — в БД сохраняется ссылка на файл. **`fileName`** / **`fileSize`** для puturl — query **`getImagePutUrl`** / **`getFilePutUrl`**, не обязательны в теле item.\",\n },\n url: {\n description: \"Текущий URL файла (может быть временным).\",\n valueSchema: \"string | null\",\n usage: \"Только в ответах (**getById**, **getFileInfo**, …); в write-тело не передаётся.\",\n },\n urlExpiration: {\n description: \"Срок действия `url`.\",\n valueSchema: \"date-time string | null\",\n usage: \"Только read; presigned download URL из ответа сервера.\",\n },\n eTag: { description: \"ETag файла для кеша/валидации.\", valueSchema: \"string | null\" },\n fileName: {\n description: \"Имя файла.\",\n valueSchema: \"string | null\",\n usage: \"Read и query puturl; в create/update item не обязателен (как в torrow-apps).\",\n },\n fileSize: {\n description: \"Размер файла в байтах.\",\n valueSchema: \"int64 | null\",\n usage: \"Read и query puturl; в create/update item не обязателен.\",\n },\n refreshUrl: {\n description: \"URL для обновления/рефреша ссылки.\",\n valueSchema: \"string | null\",\n usage: \"Только read; альтернатива явному **getFileInfo** / **getImageInfo** при протухшем `url`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const fileInfoFieldDocs = mapFieldDocsToStrings(fileInfoFieldDocEntries);\n\nexport const putUrlRespFieldDocEntries = {\n url: { description: \"Presigned URL для загрузки файла.\", valueSchema: \"string | null\" },\n urlExpiration: { description: \"Срок действия presigned URL.\", valueSchema: \"date-time string\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const putUrlRespFieldDocs = mapFieldDocsToStrings(putUrlRespFieldDocEntries);\n\nexport const updateFileIdRespFieldDocEntries = {\n fileInfo: { description: \"Актуальная информация о привязанном файле.\", valueSchema: \"FileInfo\" },\n meta: { description: \"Мета объекта после обновления file id.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateFileIdRespFieldDocs = mapFieldDocsToStrings(updateFileIdRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const blockReasonFieldDocEntries = {\n id: {\n description: \"Числовой идентификатор причины блокировки в справочнике.\",\n valueSchema: \"int32\",\n },\n defaultName: {\n description: \"Отображаемое имя по умолчанию (часто мультиязычное имя на стороне сервиса словарей).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок сортировки в списке причин.\",\n valueSchema: \"int32\",\n },\n isDeleted: {\n description: \"Мягкое удаление записи справочника.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonFieldDocs = mapFieldDocsToStrings(blockReasonFieldDocEntries);\n\nexport const blockReasonsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/blockreason` — создать причину; ответ: id. Только **администратор Torrow**.\",\n },\n getById: {\n description: \"`GET /api/v1/blockreason/{id}` — одна причина, query `lng`. Только **администратор Torrow**.\",\n },\n listAll: {\n description:\n \"`GET /api/v1/blockreason/all` — список с пагинацией и сортировкой словаря. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n delete: {\n description: \"`DELETE /api/v1/blockreason/{id}`. Только **администратор Torrow**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonsSdkMethodFieldDocs = mapFieldDocsToStrings(blockReasonsSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const apiKeyInfoFieldDocEntries = {\n keyId: {\n description: \"Идентификатор API-ключа (для `delete` и отображения в списке).\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Человекочитаемое имя ключа.\",\n valueSchema: \"string | null\",\n },\n creationTime: {\n description: \"Время создания ключа (`date-time` → `Date`).\",\n valueSchema: \"Date\",\n },\n expiration: {\n description: \"Срок действия ключа (`date-time` → `Date | null`).\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeyInfoFieldDocs = mapFieldDocsToStrings(apiKeyInfoFieldDocEntries);\n\nexport const createApiKeyRequestFieldDocEntries = {\n name: {\n description: \"Имя ключа (maxLength 100).\",\n valueSchema: \"string | null\",\n },\n lifetimeDays: {\n description: \"Срок жизни ключа в днях (1…int32); `null` — по правилам сервера.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyRequestFieldDocs = mapFieldDocsToStrings(createApiKeyRequestFieldDocEntries);\n\nexport const createApiKeyResponseFieldDocEntries = {\n apiKey: {\n description: \"Метаданные созданного ключа (`ApiKeyInfo`).\",\n valueSchema: \"ApiKeyInfo\",\n },\n key: {\n description:\n \"Секрет API-ключа. Возвращается **один раз** при `create`. Не логировать и не сохранять в открытых логах/телеметрии.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyResponseFieldDocs = mapFieldDocsToStrings(createApiKeyResponseFieldDocEntries);\n\nexport const apiKeysSdkMethodFieldDocEntries = {\n list: {\n description: \"`GET /api/v1/apikeys` — список API-ключей текущего пользователя (`ApiKeyInfo[]`).\",\n },\n create: {\n description:\n \"`POST /api/v1/apikeys` — создать ключ; body `CreateApiKeyRequest` → `CreateApiKeyResponse` (поле `key` — секрет, один раз).\",\n },\n delete: {\n description: \"`DELETE /api/v1/apikeys/{keyId}` — отозвать ключ; ответ без тела.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeysSdkMethodFieldDocs = mapFieldDocsToStrings(apiKeysSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sendCommunicationCodeReqFieldDocEntries = {\n value: {\n description: \"Телефон, email или иное значение канала, на которое отправляется код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description: \"Тип коммуникации (`CommunicationType`: Phone, Email, Telegram, Max, …).\",\n valueSchema: \"CommunicationType\",\n },\n language: {\n description: \"Язык шаблона сообщения / UI.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeReqFieldDocEntries);\n\nexport const sendCommunicationCodeRespFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии подтверждения для `verifyCommunicationCode`.\",\n valueSchema: \"string | null\",\n },\n sessionLifeTimeSeconds: {\n description: \"TTL сессии в секундах.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeRespFieldDocEntries);\n\nexport const verifyCommunicationCodeReqFieldDocEntries = {\n sessionId: {\n description: \"Сессия из ответа sendCode.\",\n valueSchema: \"string | null\",\n },\n code: {\n description: \"Код из SMS/email.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeReqFieldDocEntries);\n\nexport const verifyCommunicationCodeRespFieldDocEntries = {\n success: {\n description: \"Успех проверки кода.\",\n valueSchema: \"boolean\",\n },\n value: {\n description: \"Нормализованное подтверждённое значение (например E.164).\",\n valueSchema: \"string | null\",\n },\n channel: {\n description: \"Канал доставки после верификации (`DeliveryChannel`, включая Telegram/Max).\",\n valueSchema: \"DeliveryChannel\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeRespFieldDocEntries);\n\nexport const contactsCommunicationSdkMethodFieldDocEntries = {\n sendCommunicationCode: {\n description:\n \"`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:\n \"`PUT .../{torrowId}/publicity` — тело **`PublicityType`** (Personal, PublicWithRequest, PublicAvailable, Link; Private/Undefined исключены); query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateImageId: {\n description: \"`PUT .../{torrowId}/image/id` — тело JSON-string **`fileId`**.\",\n },\n updateTorrowAccountId: {\n description: \"`PUT .../{torrowId}/torrowaccount/id` — тело JSON-string id аккаунта.\",\n },\n updateMasterInfo: {\n description: \"`PUT .../{torrowId}/masterinfo` — **`UpdateMasterInfoReq`**.\",\n },\n updateIntegrations: {\n description: \"`PUT .../{torrowId}/integrations` — body: `string[]` (**integrationIds**).\",\n },\n listParticipants: {\n description:\n \"`GET .../{torrowId}/participants` — фильтры **`participantStateList`** (`Offered`/`Requested`/`Accepted`/…) / **`participantTypeList`**, пагинация; у **loyalty*** query **`lmFrom`/`lmTo`**, у **contact/case** — **`lmfrom`/`lmto`**. Флоу статусов: **`docs/agents/participation-flow.md`**.\",\n },\n generateSecurityToken: {\n description:\n \"`POST .../{torrowId}/generatesecuritytoken` — **`GenerateSecurityTokenReq`** → **`GenerateSecurityTokenResp`**. Внешняя ссылка: `participantType` **Reader** (обычная) или **Owner** (ссылка управления); получатель сохраняет через **`saveToMindMap({ securityToken })`**. Apps: `ShareWithRightsService`.\",\n },\n updateParticipationType: {\n description:\n \"`PUT .../{torrowId}/participation/{participantProfileId}/type` — body: **`ParticipantType`** (в path id профиля участника).\",\n },\n requestAccess: {\n description:\n \"`PUT .../participation/requestaccess` — body: **`profileId`**; query **`userMessage`**. Новый участник → **`Requested`**, владельцу — announcement **`RequestAccessToItem`**. Существующий Offered и некоторые ветки с AnyoneAccess.Read могут перейти в Accepted: проверяйте возвращённый participantState и заново читайте элемент после Accepted. Не для владельца своего item. Флоу: **`docs/agents/participation-flow.md`**, критерии: **`docs/item-access-errors.md`**.\",\n },\n revokeAccessRequest: {\n description: \"`PUT .../participation/revokerequest` — requester отменяет свой **`Requested`** → **`Revoked`**.\",\n },\n setGroup: { description: \"`PUT .../group/set` — **`SetGroupItemReq`**.\" },\n unsetGroup: { description: \"`PUT .../group/unset` — **`UnsetGroupItemReq`**.\" },\n updateTags: {\n description: \"`PUT .../{torrowId}/tags` — body: `string[]`; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n listGroups: {\n description:\n \"`GET .../{parentId}/group/list` — **группы родительского элемента, доступные для включения дочерних элементов** (torrow-apps: `getGroups(parentId)`). В apps при пустом `group/list` UI часто даёт `[parent]`. **Не** члены группы. Члены: `search.*(…, { groupIds })`. У **loyaltycards** пути нет → SDK бросает (`withGroupListEndpoint: false`).\",\n },\n updateGroups: {\n description:\n \"`PUT .../{torrowId}/updategroups` — **`UpdateItemGroupsReq[]`**; query **`parentId`**, **`tags`**, **`alias`**, **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n includeToGroups: {\n description:\n \"`PUT .../include/togroups` — **`IncludeToGroupsReq`**. После include члены группы проверяй через `search.*(…, { groupIds })`, не через `listGroups`.\",\n },\n excludeFromGroups: { description: \"`PUT .../exclude/fromgroups` — **`ExcludeFromGroupsReq`**.\" },\n includeToParent: { description: \"`PUT .../{parentId}/include/items` — **`IncludeToParentReq`**.\" },\n excludeFromParent: {\n description: \"`PUT .../{parentId}/exclude/items` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\",\n },\n includeForUser: { description: \"`PUT .../{parentId}/include/foruser` — **`IncludeForUserReq`**.\" },\n excludeFromUser: {\n description: \"`PUT .../{parentId}/exclude/fromuser` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\",\n },\n rejectOffer: {\n description:\n \"`PUT .../participation/rejectoffer` — invitee отклоняет **`Offered`** → **`Rejected`**; body: **`profileId`**; query **`userMessage`**.\",\n },\n reject: { description: \"`PUT .../participation/reject` — body: **`profileId`**.\" },\n share: {\n description:\n \"`PUT .../participation/share` — **`ShareItemReq`** → **`ParticipationResp`**. Создаёт **`Offered`**; invitee — announcement **`ShareItem`**. Принять = **`saveToMindMap`** (нет `acceptOffer`). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeOffer: {\n description:\n \"`PUT .../participation/revokeoffer` — владелец отзывает **`Offered`** → **`Revoked`**; body: `string[]` (**profileIds**).\",\n },\n grantAccess: {\n description:\n \"`PUT .../participation/grantaccess` — владелец принимает **`Requested`** → **`Accepted`**; body: `string[]` (**profileIds**).\",\n },\n declineAccess: {\n description:\n \"`PUT .../participation/declineaccess` — владелец отклоняет **`Requested`** → **`Declined`**; body: `string[]`; query **`userMessage`**.\",\n },\n updatePersonalListOrder: {\n description:\n \"`POST .../personallist/updateorder` — **`UpdatePersonalListOrderReq`** → **`UpdatePersonalListOrderResp`**.\",\n },\n updateAlias: {\n description:\n \"`PUT .../{itemId}/alias` — body: string (**alias**); query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateLastUsageTime: {\n description: \"`PUT .../{itemId}/lastusagetime` — body: ISO date-time string.\",\n },\n updateParticipationProfile: {\n description: \"`PUT .../{itemId}/participation/profile` — body: **`profileId`** (string).\",\n },\n sendLink: {\n description:\n \"`PUT .../{itemId}/sendlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**. In-app ссылка (**`SendLinkOfItem`**); **не** создаёт `Offered`.\",\n },\n getShortUrl: { description: \"`POST .../{torrowId}/shorturl` → `string` (короткая URL элемента).\" },\n updateUniqueName: { description: \"`PUT .../{itemId}/uniquename` — body: string (**uniqueName**).\" },\n getByUniqueName: {\n description:\n \"`GET .../uniquename/{uniqueName}` — у **cases** доп. query **`profileId`** (override); иначе только **`signal`**.\",\n },\n getImageInfo: {\n description:\n \"**`FileInfo | null`**: свежая доступная Full-карточка без image → null (1 GET); иначе image/info (2 GET) для восьми обычных доменов. **`loyaltyCards.getImageInfo`** переопределён: отображаемый card.image, включая проекцию программы, возвращается из Full-карточки за 1 GET без image/info. Ошибки не подавляются; raw сохраняет прямой endpoint.\",\n },\n getImagePutUrl: {\n description:\n \"`GET .../{torrowId}/image/puturl` — presigned upload; параметры **`fileId`**, **`fileName?`**, **`fileSize?`** (query). SDK: **`{ url, urlExpiration }`**.\",\n },\n saveToMindMap: {\n description:\n \"`PUT .../{torrowId}/savetomindmap` — **`SaveItemToMindMapReq`** → **`Participation`**. Accept invite (`Offered`→`Accepted`), open/link save, или save с **`securityToken`** (Reader/Owner link). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n updateSolutionData: {\n description:\n \"`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 \"SDK-композиция **`FileInfo | null`**: обязательный **`options.photoId`**, Full-карточка Contact и при наличии выбранной связи **`GET .../{torrowId}/photo/info`**. Отсутствующая связь в **`photos`** → null за 1 GET; существующая → metadata за 2 GET. Аватар **`image`** не участвует в выборе. Только при **`withPhotoEndpoints`** (сейчас **contacts**), иначе **`UnsupportedOperation`** до HTTP; ошибки чтения и неполная карточка не становятся null.\",\n },\n getPhotoPutUrl: {\n description:\n \"`GET .../{torrowId}/photo/puturl` — presigned; **`fileId`**, **`fileName?`**, **`fileSize?`**; только при **`withPhotoEndpoints`** (сейчас **contacts**). SDK: **`{ url, urlExpiration }`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Методы только **`TorrowItemFacade`** (нет у **loyalty*** на **`TorrowItemCoreFacade`**).\n * Домены: **contacts**, **cases**, **services**, **notes**, **calendars**, **contexts**, **resourceItems** — общий HTTP-слой совпадает; доменные CRUD/сценарии описываются отдельно (booking, payment, search, …).\n */\nexport const torrowItemFacadeExtensionSdkMethodFieldDocEntries = {\n updateFeedbackOptions: {\n description: \"`PUT .../{torrowId}/feedbacks/options` — **`FeedbackOptions`**.\",\n },\n getParticipantsAnonymousCount: {\n description: \"`GET .../{torrowId}/participants/anonymous` → **`GetParticipationCountResp`**.\",\n },\n getParticipantsNonAnonymousCount: {\n description:\n \"`GET .../{torrowId}/participants/nonanonymous` — query **`participantStateList`**, **`participantTypeList`**.\",\n },\n listTags: {\n description: \"`GET .../{torrowId}/tags` — фильтры **`ItemTagsListQuery`** → `string[]`.\",\n },\n listItemGroups: {\n description:\n \"`GET .../{itemId}/groups?parentId=` — **`GroupStatus[]`**: в каких группах родителя состоит child (torrow-apps: `getItemGroups(itemId, parentId)`). Каталог групп родителя для include — `listGroups(parentId)` (`…/group/list`). Члены группы — `search.*(groupIds)`.\",\n },\n updateAccounts: {\n description: \"`PUT .../{torrowId}/updateaccounts` — **`UpdateItemAccountsReq[]`** → **`IncludeExcludeResp`**.\",\n },\n shareItemLink: {\n description:\n '**WIP / do not use in product.** `POST .../{torrowId}/participation/shareitemlink` — **`GetShareItemSessionReq`** → URL `string`. Invite-session (срок/лимит); activate: **`client.item.activateShareItemSession`**. Gateway stub (`Task.FromResult(\"\")`, HTTP 200) — пустой URL не баг SDK; apps InvitationLink (ContactItem) копирует `\"\"`. Activate stub, unused in apps UI. Не путать с **`sendLink`** / **`share`** / **`generateSecurityToken`** (продуктовая альтернатива + client URI). Не клеить URL из shortUrl/item path.',\n },\n updateOfflinable: {\n description: \"`PUT .../{itemId}/offlinable` — body: boolean.\",\n },\n updateReminders: {\n description:\n \"`PUT .../{itemId}/reminders` — **`PersonalReminder[]`**. Отсутствующий/null/пустой rid создаётся SDK; валидный 24-hex сохраняется. Для стабильного повтора заранее используйте generateRid().\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — **`NotificationWay[]`** (у **loyaltycards** тот же путь, но класс не от **Base** — см. **`LoyaltyCardsSdkMethods`**).\",\n },\n block: {\n description:\n \"`POST .../{itemId}/block` — query **`reasonId`**, **`reasonNote`**, **`language`**, … → **`TorrowItem`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n unblock: {\n description:\n \"`POST .../{itemId}/unblock` — query **`versionToCheck`**, **`isNeedAnnouncement`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный общий слой **`TorrowItemFacade`** без photo-endpoints (`GET .../participants` — **`lmfrom`/`lmto`**). */\nexport const torrowItemFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadeExtensionSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** То же + **`getPhotoInfo`/`getPhotoPutUrl`** — как у **`client.contacts`** (`withPhotoEndpoints`). */\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocEntries = {\n ...torrowItemFacadeSdkMethodFieldDocEntries,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный набор методов Core для каталога **`TorrowItemCoreFacadeSdkMethods`** (включая photo). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemCoreFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n);\n\nexport const torrowItemFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\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: 'Отступ между событиями ресурса в секундах: `\"<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 подключения уведомлений Telegram и Max. BehaviorSettings API возвращает boolean и при точном, регистрозависимом совпадении поддерживает canonical и legacy alias; кодирование является внутренней реализацией SDK. Исторический helper читает только canonical.\",\n examples: [\"HideMessengerNotifications\"],\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: [\"const tags = mergeResourceBehaviorTags(resource.tags, { marginTimeSec: 3600, lockId: 11432744 });\"],\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 = [\n \"parseResourceBehaviorSettings\",\n \"mergeResourceBehaviorTags\",\n] 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 * MCP / агенты: методы фасадов ActionHistory / Accounting / Announcement / ExportImport / Report / Loyalty*.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { itemDeleteMethodDescription } from \"./item-delete-query-field-docs.js\";\nimport { torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto } from \"./item-social-facet-field-docs.js\";\n\nexport const accountingTransactionsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/accountingtransactions` — тело **`AccountingTransaction`**; query **`securityToken`**.\",\n },\n update: {\n description: \"`PUT /api/v1/accountingtransactions/{torrowId}` — полное обновление DTO.\",\n },\n delete: {\n description: \"`DELETE /api/v1/accountingtransactions/{torrowId}` → число **`deleteCount`**.\",\n },\n updateState: {\n description: \"`PUT .../state` — смена состояния через query **`state`** (`AccountingTransactionState`).\",\n },\n getBalance: {\n description: \"`GET .../balance` — массив **`BalanceValue`**; опционально **`balanceDate`**.\",\n },\n listTransactions: {\n description:\n \"`GET .../transactions` — список **`AccountingTransaction`** с фильтрами и пагинацией. \" +\n \"**`torrowId`** должен быть id **`LoyaltyCard`** или **`LoyaltyCardSubscription`**; \" +\n \"для **`Case`**, **`Service`**, **`Resource`** и других элементов отдельного счёта транзакций нет.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const accountingTransactionsSdkMethodFieldDocs = mapFieldDocsToStrings(\n accountingTransactionsSdkMethodFieldDocEntries,\n);\n\nexport const announcementsSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/announcements` — **`AnnouncementInfo[]`**; query **`AnnouncementsListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT` / `Language is null or empty`). \" +\n \"Без **`state`** / **`stateList`** список пустой — передавай фильтр (в приложении: **`New`**, **`Hidden`**). \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n updateState: {\n description:\n \"`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:\n \"`POST /api/v1/import` — тело **`ImportByFileRequest`** (граф + `parentId` / флаги) → **`TorrowItem`**.\",\n },\n importByUniqueName: {\n description: \"`POST /api/v1/importbyuniquename` — **`ImportByUniqueNameRequest`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const exportImportSdkMethodFieldDocs = mapFieldDocsToStrings(exportImportSdkMethodFieldDocEntries);\n\nexport const reportsSdkMethodFieldDocEntries = {\n generate: {\n description: \"`POST /api/v1/reports` — **`GenerateReportReq`**; опционально **`profileId`** в query.\",\n },\n generateForProfile: {\n description: \"`POST /api/v1/reports/{profileId}` — то же тело, профиль в path.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const reportsSdkMethodFieldDocs = mapFieldDocsToStrings(reportsSdkMethodFieldDocEntries);\n\nexport const actionHistorySdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/actionhistory` — **`ActionHistoryInfo[]`**; query **`ActionHistoryListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT`). \" +\n \"**`itemIds`** опционален: без него / с `[]` — лента пользователя; с id — история по выбранным элементам. \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const actionHistorySdkMethodFieldDocs = mapFieldDocsToStrings(actionHistorySdkMethodFieldDocEntries);\n\nexport const loyaltySystemsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n getInitialSubscriptionImageInfo: {\n description:\n \"Один GET Full-программы с includeChildItemStats=false (wire: includeChildItems=false): initialSubscription.image либо null, независимо от аватара программы. url/refreshUrl сохраняются без обновления, просроченный или отсутствующий url допустим; хранилище отдельно не проверяется.\",\n valueSchema: \"(torrowId: string, options?: { signal?: AbortSignal }) → Promise<FileInfo | null>\",\n usage:\n \"Пример с временной программой: loyalty-systems-initial-subscription-image-info.ts. Все файловые области вместе: loyalty-images-read.ts. Загрузка разных аватара/изображения подписки: loyalty-systems-create-extended.ts. Примеры сами создают и удаляют данные.\",\n },\n create: {\n description: \"`POST /api/v1/loyaltysystems` — тело **`LoyaltySystemItem`**; query **`parentId`**, **`profileId`**.\",\n },\n update: {\n description: \"`PUT /api/v1/loyaltysystems/{torrowId}`; numeratorInfo только create/read, из update исключается.\",\n },\n patch: {\n description:\n \"Полный GET → максимум один CAS PUT; все16 подтверждённых полей LoyaltySystemItemPatch, Full/UpdateItem/version, no-op; без retry/readback. Выпуск/финансы отдельно.\",\n valueSchema:\n \"(itemId: string, fields: LoyaltySystemItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<LoyaltySystemItem>\",\n },\n delete: {\n description: \"`DELETE /api/v1/loyaltysystems/{torrowId}` — как у элементов: \" + itemDeleteMethodDescription,\n },\n getById: { description: \"`GET /api/v1/loyaltysystems/{torrowId}`.\" },\n listPersonal: {\n description: \"`GET .../personallist` — query с **`lmFrom`** / **`lmTo`** (camelCase в OpenAPI), не `lmfrom`.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createLoyaltyCard: {\n description:\n \"`POST .../{loyaltySystemId}/loyaltycard` — тело **`CreateLoyaltyCardReq`** (`profileId` обязателен; опционально **`basisItemId`** — элемент-основание карты/абонемента, напр. заказ). Поля: каталог MCP **`CreateLoyaltyCardReq`**.\",\n },\n searchLoyaltyCards: {\n description:\n \"`POST .../{torrowId}/loyaltycards` — поиск карт в программе; тело **`SearchLoyaltyCardsReq`** (`text`, `filter`, `sort`, `take`/`skip`). В apps: `SearchLoyaltyCardsTask`.\",\n },\n postStatistics: {\n description:\n \"`POST /api/v1/loyaltysystems/statistics` — тело **`GetLoyaltySystemsStatisticsReq`**; ответ SDK: **`LoyaltySystemsStatisticsResp[]`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltySystemsSdkMethodFieldDocEntries);\n\nexport const loyaltyCardsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n update: { description: \"`PUT /api/v1/loyaltycards/{torrowId}` — **`LoyaltyCardItem`**.\" },\n delete: { description: \"`DELETE ...` — \" + itemDeleteMethodDescription },\n getById: {\n description: \"`GET ...` — опционально **`includeBalance`** (по умолчанию в API true).\",\n },\n listPersonal: {\n description: \"`GET .../personallist` — как у систем, плюс **`includeBalance`** в query.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createSubscription: {\n description:\n \"`POST /api/v1/loyaltycards/{loyaltyCardId}/subscription` — **`CreateLoyaltyCardSubscriptionReq`** → **`LoyaltyCardSubscription`**; у **`initialTransaction.basisItemId`** — то же основание (заказ и т.п.), см. MCP **`InitialTransaction`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n getBalance: { description: \"`GET .../{torrowId}/balance` — query: `balanceDate`, `securityToken`.\" },\n listTransactions: { description: \"`GET .../{torrowId}/transactions` — query как у accounting list.\" },\n getSubscriptionBalance: { description: \"`GET .../subscriptions/{subscriptionId}/balance`.\" },\n getSubscriptionImageInfo: {\n description:\n \"Выбранное **`subscriptions[].image`** из свежей Full-карты за один GET с includeChildItemStats=false/includeBalance=false (wire: includeChildItems=false). Обязательный subscriptionId выбирает подписку, не file ID; отсутствие подписки/изображения → null. Вся коллекция проверяется до поиска. Аватар независим; url/refreshUrl не запрашиваются, для свежего снимка повторите getter. Доступность байтов отдельно не проверяется.\",\n valueSchema:\n \"(torrowId: string, subscriptionId: string, options?: { signal?: AbortSignal }) => Promise<FileInfo | null>\",\n usage:\n \"Пример с временными программой и картой: loyalty-cards-subscription-image-info.ts; сквозной: loyalty-images-read.ts. Выпуск карты с различимыми изображениями и проверкой байтов: loyalty-cards-create-subscription.ts. Примеры сами создают и удаляют данные.\",\n },\n getSubscriptionTransactions: { description: \"`GET .../subscriptions/{subscriptionId}/transactions`.\" },\n getTimetable: {\n description:\n \"`PUT /api/v1/loyaltycards/{torrowId}/timetable` — тело **`TimetableFilter`**, query **`TimetableQueryOptions`**; ответ **`TimetableCase[]`**. В apps: `LoyaltyCardClient.getTimetable`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/loyaltycards/timetable/statistics` — **`GetTimetableStatisticsRequest`**; SDK: **`TimetableStatisticsResp[]`**.\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — у **loyaltycards** в OpenAPI есть путь; у **loyaltysystems** нет — метод только на **`LoyaltyCards`**.\",\n },\n getImagePutUrl: { description: \"Presigned загрузка изображения карты (`GET .../image/puturl`).\" },\n getImageInfo: {\n description:\n \"**`FileInfo | null`**: отображаемый card.image из свежей доступной Full-карточки за один GET (includeChildItemStats=false, includeBalance=false; wire: includeChildItems=false); без image → null. Сервер уже учитывает наследование изображения программы. Собственный card image/info не вызывается: он может описывать другой файл. Для нового снимка/URL повторить getter, не следовать refreshUrl; доступность байтов не проверяется.\",\n usage:\n \"Пример с временными программой и картой: loyalty-cards-image-info.ts; сравнение с программой и подписками: loyalty-images-read.ts. Примеры сами создают и удаляют данные.\",\n },\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: {\n description: \"`POST /api/v1/user/accounts/add/complete` — завершение добавления аккаунта по коду.\",\n },\n deleteAccount: {\n description:\n \"`DELETE /api/v1/user/accounts/delete` — удаление аккаунта; SDK возвращает **`deletedCount`** (`number`).\",\n },\n listDevices: { description: \"`GET /api/v1/user/devices` — список устройств (`DeviceInfo[]`).\" },\n deleteDevice: {\n description: \"`DELETE /api/v1/user/devices/{deviceId}` — удалить устройство; SDK: **`deleteCount`** (`number`).\",\n },\n getDeviceSettings: {\n description:\n \"`GET /api/v1/user/devices/{deviceId}/settings` — читать настройки (SDK: wire string → JSON, битое → `null`).\",\n },\n updateDeviceSettings: {\n description:\n \"`PUT /api/v1/user/devices/{deviceId}/settings` — сохранить настройки (SDK: JSON → wire string в query).\",\n },\n getDefaultProfile: {\n description:\n \"Серверный профиль по умолчанию (`GET /api/v1/user/defaultprofile`); при null/пустом ответе — первый профиль из profiles.list в серверном порядке. При пустом списке — null. Только чтение: запасной выбор не назначает серверный default. Ошибки не подменяются null; signal применяется к обоим запросам.\",\n },\n setDefaultProfileByContactId: {\n description: \"`PUT /api/v1/user/defaultprofile` — выбрать дефолтный профиль по contactId; SDK: **`ContactItem`**.\",\n },\n createDefaultProfile: {\n description:\n \"`POST /api/v1/user/defaultprofile` — создать и назначить дефолтный профиль; тело: **`UserProfileItemForAdd`**; ответ: **`ContactItem`**. Перед POST фасад заполняет `publicityType`, непустое `name` и нормализует поля контакта, включая `visitCard`, как у `profiles.add`.\",\n },\n listDeliveryWays: { description: \"`GET /api/v1/user/deliveryways` — пользовательские способы доставки.\" },\n listDefaultNotificationWays: {\n description: \"`GET /api/v1/user/defaultnotificationways` — дефолтные notification rules.\",\n },\n updateDefaultNotificationWays: {\n description: \"`PUT /api/v1/user/defaultnotificationways` — обновить notification rules.\",\n },\n updatePlace: { description: \"`PUT /api/v1/user/place` — обновить place для профиля/пользователя.\" },\n register: { description: \"`POST /api/v1/user/register` — регистрация пользователя в аккаунте.\" },\n getTimetable: { description: \"`PUT /api/v1/user/timetable` — расписание текущего пользователя.\" },\n listCalendars: { description: \"`GET /api/v1/user/calendars` — подключенные календари.\" },\n updateCalendars: { description: \"`PUT /api/v1/user/calendars/update` — сохранить календари пользователя.\" },\n initDelete: { description: \"`DELETE /api/v1/user/delete/init` — старт удаления пользователя (session).\" },\n completeDelete: { description: \"`DELETE /api/v1/user/delete/complete` — завершить удаление по коду.\" },\n count: {\n description:\n \"`GET /api/v1/user/count` — число пользователей. Публичный endpoint: доступен без Bearer (и с сессией).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSdkMethodFieldDocs = mapFieldDocsToStrings(userSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userSettingsInfoFieldDocEntries = {\n settings: {\n description:\n \"JSON пользовательских настроек в SDK (wire OpenAPI — `string | null`). При чтении: `JSON.parse`, пустое/битое → `null`; при записи: `JSON.stringify`.\",\n valueSchema: \"JsonValue | null\",\n usage:\n \"Структуру внутри `settings` приложение задаёт само и версионирует; SDK парсит/сериализует JSON без схемы объекта.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userSettingsInfoFieldDocs = mapFieldDocsToStrings(userSettingsInfoFieldDocEntries);\n\nexport const solutionDataFieldDocEntries = {\n quickFilterTags: {\n description: \"Теги быстрых фильтров отображаемых при поиске элементов, которые вложенны в данную группу карточки.\",\n valueSchema: \"string[] | null\",\n usage:\n \"В продукте обновляется через setQuickFilters и синхронизируется с `tags`: при удалении тегов из элемента лишние quick-filters удаляются из `solutionData.quickFilterTags`.\",\n },\n metrics: {\n description: \"Переопределение счетчиков аналитики для конкретного элемента.\",\n valueSchema: \"Metrics\",\n usage:\n \"Форма Analytics Tools пишет в `solutionData.metrics`; при page open/event отправляются hit/event в глобальные счетчики и дополнительно в элементные счетчики из `metrics`.\",\n },\n surveyId: {\n description: \"ID привязанного опроса/анкеты.\",\n valueSchema: \"string | null\",\n },\n viewBlockSettings: {\n description: \"Конфигурация блоков/секций карточки дочерних элементов.\",\n valueSchema: \"ViewBlockSettings\",\n usage:\n \"Форма item appearance сохраняет `viewBlockSettings.blockSettings[]`; порядок секций берется из `order`, а `filter.tags` используется для отдельных выборок child-views с фильтрацией по тегам.\",\n },\n layoutType: {\n description:\n \"Тип layout карточки (int-код UI раскладки/обложки). Известные коды и смысл — каталог MCP **`LayoutTypeValues`** / константы `LayoutTypeValues` в `@torrow/sdk-client` (torrow-apps `LayoutType`).\",\n valueSchema: \"LayoutTypeValues | int32 | null\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"],\n usage:\n \"Пишется формой item appearance (`updateSolutionData`). В UI выбора обложки: NonImage / SideImage / SmallImagePanel / MediumImagePanel / BigImagePanel. На мобильном `BigImagePanel` + image включает image-view с opacity toolbar. Поле не enum OpenAPI — допустим любой int; агенту для выбора значения смотреть `LayoutTypeValues.*`.\",\n },\n homeItemIds: {\n description: \"Закрепленные home-элементы (обычно один выбранный id).\",\n valueSchema: \"string[] | null\",\n usage:\n \"Выбираются в item appearance через picker родительского элемента; сохраняются в solutionData и используются как persisted-настройка навигации/точки входа.\",\n },\n vk: {\n description: \"Параметры интеграции/виджета VK в решении.\",\n valueSchema: \"Vk\",\n },\n zoom: {\n description: \"Состояние масштаба/viewport для mind map и визуализаций.\",\n valueSchema: \"Zoom\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const solutionDataFieldDocs = mapFieldDocsToStrings(solutionDataFieldDocEntries);\n\n/**\n * Известные int-коды `SolutionData.layoutType` для MCP/ИИ (torrow-apps `LayoutType`, UI «Обложка элемента»).\n * Wire-значение — число в JSON; ключи совпадают с `LayoutTypeValues` в `@torrow/sdk-client`.\n */\nexport const layoutTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник известных кодов обложки карточки (`SolutionData.layoutType`). Не OpenAPI-enum: поле остаётся `number | null`, список ниже — продуктовый контракт UI.\",\n valueSchema: \"LayoutTypeValues\",\n usage:\n \"Константы SDK: `LayoutTypeValues.<Name>` → int в теле `updateSolutionData`. Appearance form предлагает NonImage, SideImage, SmallImagePanel, MediumImagePanel, BigImagePanel. Дефолт контакта/заметки — SideImage; case/service/resource — MediumImagePanel (`TorrowItemHelper.getDefaultLayoutType`).\",\n },\n Unknown: {\n description:\n \"`0` — служебное/не задано; клиент обычно подставляет default layout по типу item, а не показывает Unknown в селекторе обложки.\",\n examples: [\"0\"],\n valueSchema: \"LayoutTypeValues\",\n },\n SideImage: {\n description:\n \"`1` — «Изображение» (side image): компактная картинка сбоку от заголовка/карточки. Дефолт для Contact/Note/Context и прочих не-case/service/resource.\",\n examples: [\"1\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Виджет `ttSideImage`; показывается при наличии `item.image`.\",\n },\n SmallImagePanel: {\n description: \"`2` — «Маленький баннер»: небольшой image-panel в шапке карточки.\",\n examples: [\"2\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Слот `ttSmallImageMobilePanelSlot`; видим при `layoutType === SmallImagePanel` и наличии image.\",\n },\n MediumImagePanel: {\n description:\n \"`3` — «Средний баннер»: средний image-panel. Дефолт для Case/Service/Resource (и их view) в torrow-apps.\",\n examples: [\"3\"],\n valueSchema: \"LayoutTypeValues\",\n },\n BigImagePanel: {\n description:\n \"`4` — «Большой баннер»: крупная обложка; на мобильном с image включает fullscreen-like image view и toolbar с меняющейся opacity при скролле.\",\n examples: [\"4\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Имя может «прибиваться» поверх большого баннера (`isVisibleNailedName`).\",\n },\n SmallSlider: {\n description:\n \"`5` — layout со слайдером изображений (small). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"5\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.SmallSlider`) — это другое поле.\",\n },\n BigSlider: {\n description:\n \"`6` — layout со слайдером изображений (big). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"6\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.*Slider`).\",\n },\n NonImage: {\n description:\n \"`7` — «Нет изображения»: шапка без обложки/баннера (`ttNonImagePanel`), даже если у item есть `image`.\",\n examples: [\"7\"],\n valueSchema: \"LayoutTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const layoutTypeValuesFieldDocs = mapFieldDocsToStrings(layoutTypeValuesFieldDocEntries);\n\nexport const blockInfoFieldDocEntries = {\n reasonId: {\n description: \"Код причины блокировки.\",\n valueSchema: \"int32\",\n },\n blockDate: {\n description: \"Дата и время блокировки.\",\n valueSchema: \"date-time string | null\",\n },\n reasonNote: {\n description: \"Свободный комментарий к причине блокировки.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockInfoFieldDocs = mapFieldDocsToStrings(blockInfoFieldDocEntries);\n\nexport const usageConditionFieldDocEntries = {\n usageConditionType: {\n description: \"Тип условия (`None`, `Exclusion`, `Additional`, ...).\",\n valueSchema: \"UsageConditionType\",\n },\n conditionIdList: {\n description: \"Ссылки на условия/правила, участвующие в ограничении использования.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionFieldDocs = mapFieldDocsToStrings(usageConditionFieldDocEntries);\n\nexport const usageTypeFieldDocEntries = {\n value: {\n description: \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n valueSchema: \"UsageType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = {\n value: {\n description: \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n valueSchema: \"UsageConditionType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const viewBlockSettingsFieldDocEntries = {\n blockSettings: {\n description: \"Список настроек секций карточки (по типам дочерних элементов).\",\n valueSchema: \"BlockSettings[] | null\",\n usage:\n \"При рендере карточки секции сортируются по `order`; если каких-то дефолтных типов нет, UI добавляет fallback-секции (contact/note/case/service/calendar/resource).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewBlockSettingsFieldDocs = mapFieldDocsToStrings(viewBlockSettingsFieldDocEntries);\n\nexport const blockSettingsFieldDocEntries = {\n objectType: {\n description: \"Тип дочернего элемента для секции (числовой objectType из API).\",\n valueSchema: \"TorrowObjectType\",\n usage:\n \"Сопоставляется с enum-типом в клиенте (`getTorrowObjectTypeByNumber`) и используется для загрузки соответствующего view (contacts/notes/services/cases/calendars/resources).\",\n },\n name: {\n description: \"Название блока (label в UI).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок блока в раскладке.\",\n valueSchema: \"int32 | null\",\n },\n filter: {\n description: \"Дополнительный фильтр секции.\",\n valueSchema: \"Filter\",\n usage:\n \"Для секции поддерживается `filter.tags`: при наличии запускается дополнительный запрос child-view c `listOptions.tags`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockSettingsFieldDocs = mapFieldDocsToStrings(blockSettingsFieldDocEntries);\n\nexport const metricsFieldDocEntries = {\n yandexMetrics: {\n description: \"ID счетчика Яндекс.Метрики для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"При наличии инициализируется отдельный счетчик и получает page hit / reachGoal в дополнение к глобальному счетчику приложения.\",\n },\n googleAnalytics: {\n description: \"GA measurement id для элемента.\",\n valueSchema: \"string | null\",\n usage: \"При наличии отправляются page view / events в GA именно этого элемента.\",\n },\n facebookPixel: {\n description: \"Facebook Pixel id для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"Поле есть в API/SDK и в форме редактирования; в продукте может быть скрыто feature/policy флагами, но сохраняется в `solutionData.metrics`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const metricsFieldDocs = mapFieldDocsToStrings(metricsFieldDocEntries);\n\nexport const filterFieldDocEntries = {\n tags: {\n description: \"Теги для фильтрации дочерних элементов внутри секции.\",\n valueSchema: \"string[] | null\",\n usage:\n \"Заполняется в форме секции (`quickFilterTags`) и маппится в `BlockSettings.filter.tags`; влияет на состав элементов в конкретном блоке карточки.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const filterFieldDocs = mapFieldDocsToStrings(filterFieldDocEntries);\n\nexport const personalSolutionDataFieldDocEntries = {\n favoriteOrder: {\n description: \"Персональный порядок/приоритет элемента для текущего профиля.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const personalSolutionDataFieldDocs = mapFieldDocsToStrings(personalSolutionDataFieldDocEntries);\n\nexport const notificationPropertiesFieldDocEntries = {\n deliveryStrategy: {\n description: \"Стратегия отправки уведомлений (`Always`, `Schedule`, ... по enum API).\",\n valueSchema: \"DeliveryStrategy\",\n },\n deliveryChannelMessageList: {\n description: \"Шаблоны сообщений по каналам доставки.\",\n valueSchema: \"DeliveryChannelMessage[] | null\",\n },\n beginAcceptableTime: {\n description: \"Начало допустимого окна отправки (минуты/код времени API).\",\n valueSchema: \"int32 | null\",\n },\n endAcceptableTime: {\n description: \"Конец допустимого окна отправки.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const notificationPropertiesFieldDocs = mapFieldDocsToStrings(notificationPropertiesFieldDocEntries);\n\nexport const userDeliveryWayFieldDocEntries = {\n deliveryChannel: {\n description: \"Канал доставки (`Sms`, `Email`, `Push`, `Telegram`, `Max` и т.п.).\",\n valueSchema: \"DeliveryChannel\",\n },\n searchValue: {\n description: \"Поисковое/идентификационное значение получателя (телефон, email).\",\n valueSchema: \"string | null\",\n },\n deliveryParameters: {\n description: \"Параметры канала в сериализованной форме.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userDeliveryWayFieldDocs = mapFieldDocsToStrings(userDeliveryWayFieldDocEntries);\n\nexport const deviceSettingsInfoFieldDocEntries = {\n deviceId: {\n description: \"ID устройства пользователя.\",\n valueSchema: \"string | null\",\n },\n settings: {\n description:\n \"Настройки устройства как JSON. Wire OpenAPI — `string | null` (query/тело); SDK: parse при чтении (`null` если не JSON), stringify при записи.\",\n valueSchema: \"JsonValue | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const deviceSettingsInfoFieldDocs = mapFieldDocsToStrings(deviceSettingsInfoFieldDocEntries);\n","import type { components } from \"../../schema/generated.js\";\n\n/** OpenAPI `AccountType` (`SendCodeReq.type`, `CreateAuthSessionReq.type`, …). */\nexport type AccountType = components[\"schemas\"][\"AccountType\"];\n\n/**\n * Значения OpenAPI enum **`AccountType`**.\n *\n * @example\n * ```ts\n * import { AccountTypeValues } from \"@torrow/sdk-client\";\n * await client.auth.sendCode({ type: AccountTypeValues.Email, accountName });\n * ```\n */\nexport const AccountTypeValues = {\n Undefined: \"Undefined\",\n Phone: \"Phone\",\n Email: \"Email\",\n Telegram: \"Telegram\",\n} as const satisfies Record<string, AccountType>;\n\nexport const AccountTypeValueList: readonly AccountType[] = [\n AccountTypeValues.Undefined,\n AccountTypeValues.Phone,\n AccountTypeValues.Email,\n AccountTypeValues.Telegram,\n];\n\nexport function isAccountType(value: string): value is AccountType {\n return (AccountTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAccountType(raw: string | undefined | null): AccountType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AccountTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * Подмножество `AccountType` для OTP **`sendCode`** (не Telegram deep-link / не `Undefined`).\n * Telegram → `createSession`; Undefined Identity на sendCode отвергает.\n */\nexport type SendCodeAccountType = Extract<AccountType, \"Phone\" | \"Email\">;\n\nexport const SendCodeAccountTypeValues = {\n Phone: AccountTypeValues.Phone,\n Email: AccountTypeValues.Email,\n} as const satisfies Record<string, SendCodeAccountType>;\n\nexport const SendCodeAccountTypeValueList: readonly SendCodeAccountType[] = [\n SendCodeAccountTypeValues.Phone,\n SendCodeAccountTypeValues.Email,\n];\n\nexport function isSendCodeAccountType(value: string): value is SendCodeAccountType {\n return (SendCodeAccountTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseSendCodeAccountType(raw: string | undefined | null): SendCodeAccountType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return SendCodeAccountTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/** OpenAPI `VerificationMethod` (`preferredMethod` / `usedMethod` / `supportedMethods`). */\nexport type VerificationMethod = components[\"schemas\"][\"VerificationMethod\"];\n\n/** Именованные способы подтверждения с неизменными wire-значениями OpenAPI. */\nexport enum VerificationMethodValues {\n /** Неопределённый способ подтверждения; допустим в OTP-flow для Email. */\n UnknownMethod = \"UnknownMethod\",\n /** Подтверждение кодом из SMS. */\n Sms = \"Sms\",\n /** Доставка кода через Telegram Gateway. */\n TelegramGateway = \"TelegramGateway\",\n /** Подтверждение через Flash Call. */\n FlashCall = \"FlashCall\",\n /** Подтверждение через MTS Mobile ID, с возможным SMS fallback. */\n MtsMobileId = \"MtsMobileId\",\n}\n\n/** Все способы подтверждения; список формируется из enum без повторения его членов. */\nexport const VerificationMethodValueList: readonly VerificationMethodValues[] = Object.values(VerificationMethodValues);\n\n/** Строго проверяет wire-значение без изменения регистра и пробелов. */\nexport function isVerificationMethod(value: string): value is VerificationMethodValues {\n return VerificationMethodValueList.some((method) => method === value);\n}\n\n/** Разбирает пользовательский ввод, игнорируя регистр и крайние пробелы. */\nexport function parseVerificationMethod(raw: string | undefined | null): VerificationMethodValues | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return VerificationMethodValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/** OpenAPI `TokenStatus` (`TokenResp.status`). */\nexport type TokenStatus = components[\"schemas\"][\"TokenStatus\"];\n\n/** Именованные серверные статусы для типизации и проверки переходов аутентификации. */\nexport enum TokenStatusValues {\n /** Аутентификация завершена, сервер выдал токены. */\n TokenReady = \"TokenReady\",\n /** Ожидание завершения Mobile ID; возможен повторный Pending после отправки SMS-кода. */\n Pending = \"Pending\",\n /** Та же Mobile ID auth-сессия продолжается через SMS fallback: Mobile ID не удалось завершить, требуется SMS-код. */\n AwaitingSmsCode = \"AwaitingSmsCode\",\n /** Терминальный отказ текущей auth-сессии. */\n Failed = \"Failed\",\n}\n\nexport const TokenStatusValueList: readonly TokenStatusValues[] = [\n TokenStatusValues.TokenReady,\n TokenStatusValues.Pending,\n TokenStatusValues.AwaitingSmsCode,\n TokenStatusValues.Failed,\n];\n\nexport function isTokenStatus(value: string): value is TokenStatusValues {\n return (TokenStatusValueList as readonly string[]).includes(value);\n}\n\nexport function parseTokenStatus(raw: string | undefined | null): TokenStatus | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return TokenStatusValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * Готовность токенов: `TokenReady` или отсутствие `status` (legacy).\n * `Pending` / `AwaitingSmsCode` / `Failed` → `false`.\n */\nexport function isTokenRespReadyStatus(status: TokenStatus | string | null | undefined): boolean {\n return status == null || status === TokenStatusValues.TokenReady;\n}\n\n/**\n * Провайдер captcha для `SendCodeReq.captchaType` / `CreateAuthSessionReq.captchaType`.\n * В OpenAPI поле — `string`; здесь известные wire-значения Identity / torrow-apps.\n */\nexport type AuthCaptchaType = \"YandexSmartCaptcha\" | \"GoogleRecaptcha\";\n\nexport const AuthCaptchaTypeValues = {\n YandexSmartCaptcha: \"YandexSmartCaptcha\",\n GoogleRecaptcha: \"GoogleRecaptcha\",\n} as const satisfies Record<string, AuthCaptchaType>;\n\nexport const AuthCaptchaTypeValueList: readonly AuthCaptchaType[] = [\n AuthCaptchaTypeValues.YandexSmartCaptcha,\n AuthCaptchaTypeValues.GoogleRecaptcha,\n];\n\nexport function isAuthCaptchaType(value: string): value is AuthCaptchaType {\n return (AuthCaptchaTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAuthCaptchaType(raw: string | undefined | null): AuthCaptchaType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AuthCaptchaTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * OAuth/API scopes для `TokenReq.scopes` / `RefreshReq.scopes`.\n * В OpenAPI — `string[]`; здесь известные значения Identity (`user_api`, `admin_api`, `offline_access`).\n */\nexport type AuthScope = \"user_api\" | \"admin_api\" | \"offline_access\";\n\nexport const AuthScopeValues = {\n UserApi: \"user_api\",\n AdminApi: \"admin_api\",\n OfflineAccess: \"offline_access\",\n} as const satisfies Record<string, AuthScope>;\n\nexport const AuthScopeValueList: readonly AuthScope[] = [\n AuthScopeValues.UserApi,\n AuthScopeValues.AdminApi,\n AuthScopeValues.OfflineAccess,\n];\n\n/** Дефолт для OTP / LoginTask в SDK и примерах. */\nexport const DefaultAuthScopes: readonly AuthScope[] = [AuthScopeValues.UserApi, AuthScopeValues.OfflineAccess];\n\nexport function isAuthScope(value: string): value is AuthScope {\n return (AuthScopeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAuthScope(raw: string | undefined | null): AuthScope | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AuthScopeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `AnyoneAccess` — публичность «для любого» у item / карт лояльности. */\nexport type AnyoneAccess = Schemas[\"AnyoneAccess\"];\n\nexport const AnyoneAccessValues = {\n Unknown: \"UnknownAnyoneAccess\",\n None: \"NoneAnyoneAccess\",\n Read: \"Read\",\n ReadWrite: \"ReadWrite\",\n Denied: \"Denied\",\n} as const satisfies Record<string, AnyoneAccess>;\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Серверный признак доступности ресурсов события; SDK не рассчитывает бронирование. */\nexport type AvailableResources = OpenApiSchemas[\"AvailableResources\"];\n\n/** Именованные значения доступности ресурсов из общего wire-контракта. */\nexport enum AvailableResourcesValues {\n /** Сервер не определил доступность. */\n Unknown = \"Unknown\",\n /** Ресурсы доступны. */\n Free = \"Free\",\n /** Ресурсы забронированы. */\n Booked = \"Booked\",\n /** Ресурсы заняты. */\n Busy = \"Busy\",\n}\n","import type { CaseParticipantViewRead, CasePersonalInfoRead } from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nimport type {\n CaseItemDto,\n CreateCaseReqDto,\n AvailabilityTimeDto,\n CaseParticipantTypeDto,\n CaseParticipantDto,\n CaseParticipantFieldsDto,\n CaseParticipantStateDto,\n GetCaseParticipationCountRespDto,\n CheckInReqDto,\n CheckInPropsDto,\n BookResourcesForMeReqDto,\n BookResourcesForOthersReqDto,\n ChangeMoneyReceiveReqDto,\n CancelCaseParticipationReqDto,\n ApproveCaseParticipationReqDto,\n PatchCaseReqDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowChildItemCreateOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nexport type { DeleteResponse, ObjectInfo, ResourceView } from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Внутренний wire-снимок события для patch; выбранные nullable поля не подготавливаются до PUT. */\nexport type CaseItemWire = NormalizedPublicity<CaseItemDto>;\n\nexport type CaseItem = TorrowItemFromDto<\n Omit<CaseItemDto, \"personalInfo\" | \"priceInfo\"> & {\n /** Персональные сведения с предметными ресурсами билета и оплаты. */\n personalInfo?: CasePersonalInfoRead;\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n }\n>;\n\n/** Частичное изменение конфигурации события. Общие name/image — {@link TorrowItemPatchFields}; полная замена ценовой области — {@link ItemPricePatchFields}. Пропуск сохраняет поле, вложенные значения заменяются целиком. Состояние/участие/бронь изменяются отдельными операциями. */\nexport type CaseItemPatch = TorrowItemPatchFields &\n ItemPricePatchFields & {\n /** Начало события; Date, null снимает дату; календарную допустимость проверяет сервер. */\n beginDate?: Date | null;\n /** Окончание события; Date, null снимает дату. */\n endDate?: Date | null;\n /** Описание без trim; null/пустая строка очищают текст. */\n description?: string | null;\n /** Идентификатор места; непустая строка, null снимает ссылку. */\n placeId?: string | null;\n /** Текст места; null/пустая строка очищают текст. */\n place?: string | null;\n /** Вид планирования, кроме UnknownTimeType; ограничения перехода проверяет сервер. */\n caseType?: Exclude<NonNullable<CaseItem[\"caseType\"]>, \"UnknownTimeType\">;\n /** Полная замена расписания; отсутствующий `rid` диапазона создаётся SDK, null снимает расписание. */\n schedule?: CaseItem[\"schedule\"] | null;\n /** Окно открытия регистрации в секундах; int32/null, null снимает ограничение. */\n registrationOpen?: number | null;\n /** Окно закрытия регистрации в секундах; int32/null, null снимает ограничение. */\n registrationClose?: number | null;\n /** Визитка события целиком; null запрещён, поля не нормализуются как Contact. */\n visitCard?: CaseItem[\"visitCard\"];\n /** Срок удержания брони в секундах; int32/null, null снимает значение. */\n bookingDuration?: number | null;\n /** Максимальная вместимость; int32/null, ноль сохраняется. */\n maxConsumerQuantity?: number | null;\n /** Дополнительно зарезервированные вручную места; int32/null, отдельно от consumersCount. */\n bookingConsumerQuantity?: number | null;\n /** Процент загрузки исполнителя; конечное число/null, предметные лимиты проверяет сервер. */\n executorUsagePercent?: number | null;\n /** Признак доступности ресурсов; Unknown — серверный sentinel отсутствия; null запрещён. */\n availableResources?: CaseItem[\"availableResources\"];\n /** Необходимость одобрения; null снимает настройку, false сохраняется. */\n needApproval?: boolean | null;\n /** Генерация одиночных событий; null снимает настройку без удаления пропущенного расписания. */\n createSingleCases?: boolean | null;\n /** Полная замена правил регистрации; null снимает правила. */\n checkinPermission?: CaseItem[\"checkinPermission\"] | null;\n /** Скрытие события; null снимает настройку, false сохраняется. */\n hidden?: boolean | null;\n /** Приложения целиком; []/null очищают список. */\n appendixList?: CaseItem[\"appendixList\"];\n /** Полная замена требований к участнику; null снимает требования. */\n participateFieldRequirements?: CaseItem[\"participateFieldRequirements\"] | null;\n /** Группы ресурсов целиком; []/null очищают список, бронирование не выполняется SDK. */\n resourceGroupList?: CaseItem[\"resourceGroupList\"];\n /** Приоритет обработки; конечное число/null, null снимает значение. */\n priority?: number | null;\n /** Идентификатор группы клиентов; непустая строка, null снимает ссылку. */\n clientGroupId?: string | null;\n /**\n * Автоматизации целиком; []/null очищают список.\n * SDK заполняет только отсутствующий `rid`; согласованную конфигурацию действия задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно по live-проверке. Проверенный Reminder содержит\n * trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться.\n * См. cases/README.md и examples/node/item-cases/cases-patch.ts.\n */\n caseActionList?: CaseItem[\"caseActionList\"];\n /** Правила начислений лояльности целиком; []/null очищают список. */\n loyaltyTransactionPropertiesList?: CaseItem[\"loyaltyTransactionPropertiesList\"];\n };\n/** Нормализованная публичная проекция серверной оболочки создания события. */\ntype CreateCaseReqBase = NormalizedPublicity<CreateCaseReqDto>;\n\n/**\n * Оболочка основного сценария создания события, производная от серверного\n * {@link CreateCaseReqDto}. Сохраняет опциональные напоминания, календарь,\n * параметры check-in и дороги, а также тип участника из source DTO. Вложенный\n * `caseItem` остаётся опциональным предметным телом, но его начальная публичность\n * задаётся только через create-options.\n * Для `caseItem.caseActionList` применяются требования {@link CaseItemForCreateOrUpdate}:\n * генерация RID не дополняет бизнес-конфигурацию действия.\n */\nexport type CreateCaseReq = Omit<CreateCaseReqBase, \"caseItem\"> & {\n /** Предметное тело события из source DTO без `publicityType`; отсутствие не синтезирует item в wrapper. */\n caseItem?: Omit<NonNullable<CreateCaseReqBase[\"caseItem\"]>, \"publicityType\">;\n};\nexport type AvailabilityTime = AvailabilityTimeDto;\nexport type CaseParticipantType = CaseParticipantTypeDto;\n\n/** Параметры создания события через {@link CasesFacade.createCaseItem}. */\nexport interface CreateCaseItemOptions extends TorrowChildItemCreateOptions {\n /** Отметить создаваемое событие как требующее check-in текущего пользователя. */\n isNeedToCheckInMySelf?: boolean;\n /** Доступность времени участника для создаваемого события. */\n availabilityTime?: AvailabilityTime | null;\n /** Время на дорогу в секундах. */\n roadTime?: number | null;\n /** Календарь, в который добавляется событие. */\n calendarId?: string | null;\n /** Роль текущего участника создаваемого события. */\n caseParticipantType?: CaseParticipantType | null;\n}\n\n/** Параметры полного обновления события через {@link CasesFacade.update}. */\nexport interface UpdateCaseItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется событие. */\n profileId?: string | null;\n /** Токен гостевого доступа к событию. */\n securityToken?: string | null;\n}\n\n/**\n * Участник кейса. В сгенерированных типах только **`loyaltyCardId`**.\n * Legacy `loyalityCardId` остаётся в `docs/torrow-swagger.json` (wire для старых клиентов),\n * но вырезается обёрткой codegen (`scripts/openapi-codegen.mjs` → `stripLegacyWireAliases`).\n * Сервер игнорирует опечатку при записи; в JSON ответов поле ещё может прийти — не использовать.\n * Проверка против живого API — отдельно (integration / ручные тесты).\n */\nexport type CaseParticipant = CaseParticipantDto;\nexport type CaseParticipantView = CaseParticipantViewRead;\nexport type CaseParticipantFields = CaseParticipantFieldsDto;\nexport type CaseParticipantState = CaseParticipantStateDto;\nexport type GetCaseParticipationCountResp = GetCaseParticipationCountRespDto;\nexport type CheckInReq = CheckInReqDto;\nexport type CheckInProps = CheckInPropsDto;\nexport type BookResourcesForMeReq = BookResourcesForMeReqDto;\nexport type BookResourcesForOthersReq = BookResourcesForOthersReqDto;\nexport type ChangeMoneyReceiveReq = ChangeMoneyReceiveReqDto;\nexport type ApproveCaseParticipationReq = ApproveCaseParticipationReqDto;\nexport type CancelCaseParticipationReq = CancelCaseParticipationReqDto;\nexport type PatchCaseReq = PatchCaseReqDto;\nexport type CaseState = CaseItem[\"caseState\"];\nexport type CaseType = CaseItem[\"caseType\"];\nexport const CaseStateValues = {\n Unknown: \"UnknownCaseState\",\n Verifying: \"Verifying\",\n Waiting: \"Waiting\",\n Processing: \"Processing\",\n Preparing: \"Preparing\",\n Completed: \"Completed\",\n Closed: \"Closed\",\n Rejected: \"Rejected\",\n Canceled: \"Canceled\",\n TimeControlled: \"TimeControlled\",\n TaskNotCompleted: \"TaskNotCompleted\",\n TaskCompleted: \"TaskCompleted\",\n} as const satisfies Record<string, NonNullable<CaseState>>;\nexport const CaseTypeValues = {\n Unknown: \"UnknownTimeType\",\n Time: \"Time\",\n RepeatedTime: \"RepeatedTime\",\n Today: \"Today\",\n Week: \"Week\",\n Later: \"Later\",\n Date: \"Date\",\n State: \"State\",\n} as const satisfies Record<string, NonNullable<CaseType>>;\n/**\n * Тело создания и полного обновления события.\n * В `caseActionList` приложение задаёт согласованную конфигурацию выбранного типа действия;\n * SDK заполняет только отсутствующий `rid`. Одного `{ type: \"RequestFeedback\" }` недостаточно\n * по результатам live-проверки. Проверенный Reminder с trigger, notificationProperties и\n * caseParticipantFilter приведён в cases/README.md и examples/node/item-cases/cases-patch.ts;\n * требования других типов действий могут отличаться.\n */\nexport type CaseItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<CaseItemDto>>;\n","import type { GroupStatusRead } from \"../common/read-models.js\";\nimport type {\n ContactItemDto,\n SendCommunicationCodeReqDto,\n SendCommunicationCodeRespDto,\n VerifyCommunicationCodeReqDto,\n VerifyCommunicationCodeRespDto,\n ActivityStatusDto,\n ContactPropertiesDto,\n UpdateContactPropertiesRespDto,\n UpdateMasterInfoReqDto,\n FeedbackOptionsDto,\n PersonalReminderDto,\n UpdateItemAccountsReqDto,\n UpdateItemGroupsReqDto,\n UpdatePersonalListOrderReqDto,\n UpdatePersonalListOrderRespDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { TorrowItemGetOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nimport type { TorrowItem, TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nexport type {\n DeleteResponse,\n ExcludeResp,\n IncludeExcludeResp,\n NotificationWay,\n ObjectInfo,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения контакта по идентификатору. */\nexport type GetContactOptions = TorrowItemGetOptions;\n\n/** Параметры полного обновления контакта. */\nexport interface UpdateContactItemOptions extends TorrowItemUpdateOptions {\n /** Токен гостевого доступа к контакту; `null` сохраняет wire-семантику query. */\n securityToken?: string | null;\n}\n\nexport type ContactItem = TorrowItemFromDto<Omit<ContactItemDto, \"loyaltyCard\">> & {\n /** Карта лояльности с подготовленными общими read-полями; отсутствие карточки сохраняется. */\n loyaltyCard?: TorrowItem;\n};\n\n/** Канал связи для частичной записи: пользовательские поля {@link Communication}, без серверных checkDate/valueForSearch; rid сохраняет идентичность, checkState по умолчанию Unchecked. */\nexport type ContactCommunicationPatch = Omit<Communication, \"checkDate\" | \"valueForSearch\">;\n\n/** Частичное изменение обычного или профильного Contact. Общие name/image наследуют {@link TorrowItemPatchFields}; пропуск сохраняет поле, вложенное значение заменяется целиком. */\nexport interface ContactItemPatch extends TorrowItemPatchFields {\n /** Полная замена адресов; []/null удаляют адреса, отсутствующий rid создаётся SDK. */\n addresses?: Address[] | null;\n /** Дата рождения; null удаляет дату. */\n birthday?: Date | null;\n /** Полная замена каналов; []/null очищают, серверные сведения проверки не принимаются на вход. */\n communications?: ContactCommunicationPatch[] | null;\n /** Памятные даты целиком; []/null очищают, отсутствующий rid создаётся SDK. */\n dates?: MemorableDate[] | null;\n /** Имя человека; null/пустая строка очищают текст без нормализации. */\n firstName?: string | null;\n /** Фамилия; null/пустая строка очищают текст. */\n lastName?: string | null;\n /** Отчество; null/пустая строка очищают текст. */\n middleName?: string | null;\n /** Название компании; null/пустая строка очищают текст. */\n company?: string | null;\n /** Должность; null/пустая строка очищают текст. */\n position?: string | null;\n /** Описание контакта; null/пустая строка очищают текст. */\n description?: string | null;\n /** Пол по OpenAPI; UnknownGender означает неизвестное значение, null не принимается. */\n gender?: Gender;\n /** Полная замена ссылок на фотографии; []/null очищают, URL и metadata файла не записываются. */\n photos?: TorrowItemPatchImage[] | null;\n /** Визитка целиком с нормализацией трёх слотов; null запрещён, для очистки передать три явно пустых значения. */\n visitCard?: ContactVisitCard;\n}\n\n/** Элемент `ContactItem.addresses` (ответ GET). */\nexport type Address = NonNullable<ContactItem[\"addresses\"]>[number];\n\n/** Элемент `ContactItem.communications` (ответ GET, полная модель). */\nexport type Communication = NonNullable<ContactItem[\"communications\"]>[number];\n\n/** `communications[]` в теле `POST`/`PUT` контакта: без read-only `checkDate`; отсутствующий `rid` создаётся SDK, `checkState` по умолчанию `Unchecked`. */\nexport type CommunicationForCreateOrUpdate = Omit<Communication, \"checkDate\">;\n\n/** Элемент `ContactItem.dates`. */\nexport type MemorableDate = NonNullable<ContactItem[\"dates\"]>[number];\n\n/** `ContactItem.rating`. */\nexport type Rating = NonNullable<ContactItem[\"rating\"]>;\n\n/** `ContactItem.visitCard` (3 слота отображения). */\nexport type ContactVisitCard = NonNullable<ContactItem[\"visitCard\"]>;\n\n/** Элемент `ContactVisitCard.fields`. */\nexport type ContactVisitCardField = NonNullable<NonNullable<ContactVisitCard[\"fields\"]>[number]>;\n\n/** `ContactItem.personalInfo`. */\nexport type ContactPersonalInfo = NonNullable<ContactItem[\"personalInfo\"]>;\n\n/** `ContactItem.profileType`. */\nexport type ProfileType = NonNullable<ContactItem[\"profileType\"]>;\n\n/** `ContactItem.registerInfo`. */\nexport type RegisterInfo = NonNullable<ContactItem[\"registerInfo\"]>;\n\nexport type Gender = NonNullable<ContactItem[\"gender\"]>;\nexport type CommunicationType = NonNullable<Communication[\"type\"]>;\n\nexport const GenderValues = {\n Unknown: \"UnknownGender\",\n Male: \"Male\",\n Female: \"Female\",\n Other: \"OtherGender\",\n} as const satisfies Record<string, Gender>;\n\nexport const CommunicationTypeValues = {\n Unknown: \"UnknownCommunicationType\",\n Phone: \"Phone\",\n Sms: \"Sms\",\n Email: \"Email\",\n WebSite: \"WebSite\",\n Telegram: \"Telegram\",\n WhatsApp: \"WhatsApp\",\n Viber: \"Viber\",\n Facebook: \"Facebook\",\n Instagram: \"Instagram\",\n Vkontakte: \"Vkontakte\",\n Odnoklassniki: \"Odnoklassniki\",\n Skype: \"Skype\",\n Youtube: \"Youtube\",\n Twitter: \"Twitter\",\n LinkedIn: \"LinkedIn\",\n Max: \"Max\",\n Other: \"Other\",\n} as const satisfies Record<string, CommunicationType>;\n\nexport const ProfileTypeValues = {\n Unknown: \"UnknownProfile\",\n None: \"None\",\n MyProfile: \"MyProfile\",\n AnyProfile: \"AnyProfile\",\n CopyProfile: \"CopyProfile\",\n} as const satisfies Record<string, ProfileType>;\nexport type SendCommunicationCodeReq = SendCommunicationCodeReqDto;\nexport type SendCommunicationCodeResp = SendCommunicationCodeRespDto;\nexport type VerifyCommunicationCodeReq = VerifyCommunicationCodeReqDto;\nexport type VerifyCommunicationCodeResp = VerifyCommunicationCodeRespDto;\nexport type ActivityStatus = ActivityStatusDto;\nexport type ContactProperties = ContactPropertiesDto;\nexport type UpdateContactPropertiesResp = UpdateContactPropertiesRespDto;\nexport type UpdateMasterInfoReq = UpdateMasterInfoReqDto;\nexport type FeedbackOptions = FeedbackOptionsDto;\nexport type PersonalReminder = PersonalReminderDto;\nexport type { PublicityType } from \"../common/publicity-type.js\";\nexport type GroupStatus = GroupStatusRead;\nexport type UpdateItemAccountsReq = UpdateItemAccountsReqDto;\nexport type UpdateItemGroupsReq = UpdateItemGroupsReqDto;\nexport type UpdatePersonalListOrderReq = UpdatePersonalListOrderReqDto;\nexport type UpdatePersonalListOrderResp = UpdatePersonalListOrderRespDto;\n/**\n * Тело `POST`/`PUT` **`/api/v1/contacts`** (обычный контакт).\n * `communications` — {@link CommunicationForCreateOrUpdate} (без read-only `checkDate`).\n * В `addresses`, `communications` и `dates` SDK создаёт отсутствующий `rid`,\n * сохраняя явно переданный валидный 24-hex идентификатор.\n */\nexport type ContactItemForCreateOrUpdate = Omit<\n TorrowItemForCreateOrUpdate<TorrowItemFromDto<ContactItemDto>>,\n \"communications\"\n> & {\n communications?: CommunicationForCreateOrUpdate[] | null;\n};\n","import type { NoteItemDto, NoteTypeDto } from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { TorrowItemGetOptions } from \"../common/item-crud-options.js\";\nexport type {\n DeleteResponse,\n FileInfo,\n ObjectInfo,\n PutUrlResp,\n UpdateFileIdResp,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения заметки по идентификатору. */\nexport type GetNoteOptions = TorrowItemGetOptions;\n\nexport type NoteItem = Omit<TorrowItemFromDto<NoteItemDto>, \"files\" | \"data\"> & {\n /** Исходный текст; серверные null и отсутствие поля читаются как \"\" независимо от полноты карточки. */\n data: string;\n /** Прочитанные вложения; серверный null удаляет optional-поле, явно полученный [] сохраняется. */\n files?: NonNullable<NoteItemDto[\"files\"]>;\n};\n/** Три формата публичного SDK; остальные серверные строки при чтении становятся Text. */\nexport type NoteType = NoteTypeDto;\nexport type ImagePreviewSize = NonNullable<NoteItem[\"imagePreviewSize\"]>;\n/** Поддерживаемые форматы заметок; публичный NoteType также принимает строковые литералы. */\nexport enum NoteTypeValues {\n /** HTML-разметка в data. */\n Html = \"Html\",\n /** Исходный Markdown в data. */\n Markdown = \"Markdown\",\n /** Текст либо нормализованный формат прочитанной серверной заметки. */\n Text = \"Text\",\n}\n\nexport const ImagePreviewSizeValues = {\n Undefined: \"Undefined\",\n Hidden: \"Hidden\",\n Small: \"Small\",\n Medium: \"Medium\",\n Large: \"Large\",\n SmallSlider: \"SmallSlider\",\n MediumSlider: \"MediumSlider\",\n LargeSlider: \"LargeSlider\",\n} as const satisfies Record<string, ImagePreviewSize>;\n\n/** Предметное тело создания/полного обновления заметки; публичность создания задаётся в options. Поле meta.version сохраняет optimistic concurrency при update. */\nexport type NoteItemForCreateOrUpdate = Omit<TorrowItemForCreateOrUpdate<NoteItem>, \"files\" | \"data\"> &\n Pick<NoteItem, \"meta\"> & {\n /** Обязательная точная строка для create/update, включая \"\"; null/undefined и пропуск запрещены. */\n data: string;\n /** Полная запись сохраняет wire-контракт вложений: null допустим наряду с массивом. */\n files?: NoteItemDto[\"files\"];\n };\n\n/** Частичное изменение заметки; общие name/image описаны в TorrowItemPatchFields. */\nexport interface NoteItemPatch extends TorrowItemPatchFields {\n /** Новый формат Html, Markdown или Text; другие значения отклоняются до первого GET. */\n noteType?: NoteType;\n /** Исходный текст без trim/parse; \"\" очищает, пропуск сохраняет wire-содержимое. null/undefined запрещены. */\n data?: string;\n /** Полная замена ссылок на загруженные файлы; [] снимает вложения, пропуск сохраняет их. */\n files?: TorrowItemPatchImage[];\n /** Размер превью; Undefined снимает настройку. Не подставляет create default Small. */\n imagePreviewSize?: ImagePreviewSize;\n}\n","import type {\n ItemViewSortConditionDto as ItemViewSortCondition,\n ParticipantStateDto as ParticipantState,\n ParticipantTypeDto as ParticipantType,\n} from \"../../schema/openapi-dto-aliases.js\";\n\nexport type { ItemViewSortCondition, ParticipantState, ParticipantType };\n\n/** Wire-значения OpenAPI `ItemViewSortCondition` для списков и views. */\nexport const ItemViewSortConditionValues = {\n OrderAsc: \"OrderAsc\",\n OrderDesc: \"OrderDesc\",\n LastModifiedAsc: \"LastModifiedAsc\",\n LastModifiedDesc: \"LastModifiedDesc\",\n OrderAscLastModifiedAsc: \"OrderAscLastModifiedAsc\",\n OrderDescLastModifiedAsc: \"OrderDescLastModifiedAsc\",\n OrderAscLastModifiedDesc: \"OrderAscLastModifiedDesc\",\n OrderDescLastModifiedDesc: \"OrderDescLastModifiedDesc\",\n LastModifiedAscOrderAsc: \"LastModifiedAscOrderAsc\",\n LastModifiedAscOrderDesc: \"LastModifiedAscOrderDesc\",\n LastModifiedDescOrderAsc: \"LastModifiedDescOrderAsc\",\n LastModifiedDescOrderDesc: \"LastModifiedDescOrderDesc\",\n} as const satisfies { [Value in ItemViewSortCondition]: Value };\n\n/** Все допустимые условия сортировки представлений в стабильном порядке. */\nexport const ItemViewSortConditionValueList: readonly ItemViewSortCondition[] =\n Object.values(ItemViewSortConditionValues);\n\nexport function isItemViewSortCondition(value: string): value is ItemViewSortCondition {\n return (ItemViewSortConditionValueList as readonly string[]).includes(value);\n}\n\n/** Shared query for personallist endpoints (contacts, notes, services, cases). */\nexport type PersonalListQuery = {\n take?: number | null;\n skip?: number | null;\n lmfrom?: Date | null;\n lmto?: Date | null;\n includeDeleted?: boolean | null;\n sort?: ItemViewSortCondition | null;\n profileId?: string | null;\n onlyWithEmptyProfile?: boolean | null;\n participantStateList?: ParticipantState[] | null;\n participantTypeList?: ParticipantType[] | null;\n};\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `ParticipationFieldType` — тип поля контакта при записи. */\nexport type ParticipationFieldType = Schemas[\"ParticipationFieldType\"];\n\nexport const ParticipationFieldTypeValues = {\n Unknown: \"UnknownParticipationField\",\n FullName: \"FullName\",\n LastName: \"LastName\",\n FirstName: \"FirstName\",\n MiddleName: \"MiddleName\",\n Company: \"Company\",\n Position: \"Position\",\n MainPhone: \"MainPhone\",\n VerifiedMainPhone: \"VerifiedMainPhone\",\n AdditionalPhone: \"AdditionalPhone\",\n MainEmail: \"MainEmail\",\n VerifiedMainEmail: \"VerifiedMainEmail\",\n AdditionalEmail: \"AdditionalEmail\",\n Address: \"Address\",\n AddressLocation: \"AddressLocation\",\n PaymentAccount: \"PaymentAccount\",\n CustomString: \"CustomString\",\n CustomBoolean: \"CustomBoolean\",\n CustomInt32: \"CustomInt32\",\n CustomDouble: \"CustomDouble\",\n CustomMoney: \"CustomMoney\",\n CustomDate: \"CustomDate\",\n CustomTime: \"CustomTime\",\n CustomDateTime: \"CustomDateTime\",\n} as const satisfies Record<string, ParticipationFieldType>;\n\n/** OpenAPI `ParticipationFieldRequirementType` — обязательность поля. */\nexport type ParticipationFieldRequirementType = Schemas[\"ParticipationFieldRequirementType\"];\n\nexport const ParticipationFieldRequirementTypeValues = {\n Unknown: \"UnknownParticipationFieldRequirement\",\n None: \"NoneRequirement\",\n Optional: \"OptionalField\",\n Required: \"RequiredField\",\n} as const satisfies Record<string, ParticipationFieldRequirementType>;\n","import type {\n OrderRespRead,\n SearchServiceResourcesRespRead,\n GetServiceWorkloadInfoRespRead,\n} from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nimport type { ServiceImplicitTagParams } from \"../common/implicit-tag-params.js\";\nimport type {\n ServiceItemApiDto,\n CreateOrderReqDto,\n SearchServiceResourcesReqDto,\n StepDescriptionDto,\n SessionDurationPropertiesDto,\n GetServiceWorkloadInfoRequestDto,\n GetTimetableStatisticsRequestDto,\n GetTimetableStatisticsResponseDto,\n TimetableStatisticsRespDto,\n GetCheckInScheduleReqDto,\n GetCheckInScheduleRespDto,\n GetReCheckInScheduleReqDto,\n UpdateOrderReqDto,\n UpdateOrderInfoReqDto,\n ChangeOrderServiceReqDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nexport type {\n DeleteResponse,\n ItemViewSortCondition,\n ObjectInfo,\n ResourceView,\n TimetableCase,\n TimetableDetailsVisibility,\n TimetableFilter,\n} from \"../../schema/sdk-shared-public-types.js\";\n\n/**\n * Параметры полного обновления услуги. Унаследованный `isNeedAnnouncement: false`\n * не отключает серверное обновление персональных связей.\n */\nexport interface UpdateServiceItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется услуга; `null` сохраняет wire-семантику query. */\n profileId?: string | null;\n}\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\nexport type ServiceItemApi = NormalizedPublicity<ServiceItemApiDto>;\nexport type ResourceGroup = NonNullable<ServiceItemApi[\"resourceGroupList\"]>[number];\nexport type BookingProperties = NonNullable<ResourceGroup[\"bookingProperties\"]>;\nexport type CreateOrderReq = CreateOrderReqDto;\nexport type OrderResp = OrderRespRead;\nexport type SearchServiceResourcesReq = SearchServiceResourcesReqDto;\nexport type SearchServiceResourcesResp = SearchServiceResourcesRespRead;\nexport type StepDescription = StepDescriptionDto;\nexport type SessionDurationProperties = SessionDurationPropertiesDto;\nexport type GetServiceWorkloadInfoRequest = GetServiceWorkloadInfoRequestDto;\nexport type GetServiceWorkloadInfoResp = GetServiceWorkloadInfoRespRead;\nexport type GetTimetableStatisticsRequest = GetTimetableStatisticsRequestDto;\nexport type GetTimetableStatisticsResponse = GetTimetableStatisticsResponseDto;\nexport type TimetableStatisticsResp = TimetableStatisticsRespDto;\nexport type GetCheckInScheduleReq = GetCheckInScheduleReqDto;\nexport type GetCheckInScheduleResp = GetCheckInScheduleRespDto;\nexport type GetReCheckInScheduleReq = GetReCheckInScheduleReqDto;\nexport type UpdateOrderReq = UpdateOrderReqDto;\nexport type UpdateOrderInfoReq = UpdateOrderInfoReqDto;\nexport type ChangeOrderServiceReq = ChangeOrderServiceReqDto;\n/**\n * Публичная доменная структура для настройки поведения услуги.\n * Внутри SDK маппится в `service.tags`.\n * orderName задаёт название для отображения в приложении, не серверное имя создаваемого заказа.\n */\nexport type ServiceBehaviorSettings = ServiceImplicitTagParams;\nexport type {\n ServiceBehaviorSettingsIssue,\n ServiceBehaviorSettingsState,\n ServiceBehaviorSettingsUpdateOptions,\n ServiceBehaviorSettingsUpdateResult,\n} from \"./behavior-settings.js\";\n\n/**\n * SDK-тип услуги: OpenAPI `ServiceItem` + удобный доменный слой.\n * `behaviorSettings` сериализуется/десериализуется через `tags` внутри SDK.\n */\nexport type ServiceItem = TorrowItemFromDto<\n Omit<\n ServiceItemApi,\n | \"priceInfo\"\n | \"executorIdList\"\n | \"resourceGroupList\"\n | \"appendixList\"\n | \"stepDescriptionList\"\n | \"caseActionList\"\n | \"loyaltyTransactionPropertiesList\"\n >\n> & {\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n /** Профили исполнителей; серверный null удаляет optional-поле, явный [] сохраняется. */\n executorIdList?: NonNullable<ServiceItemApi[\"executorIdList\"]>;\n /** Группы ресурсов; серверный null удаляет optional-поле, вложенные коллекции групп сохраняются. */\n resourceGroupList?: NonNullable<ServiceItemApi[\"resourceGroupList\"]>;\n /** Приложения услуги; серверный null удаляет optional-поле, явный [] сохраняется. */\n appendixList?: NonNullable<ServiceItemApi[\"appendixList\"]>;\n /** Шаги регистрации; серверный null удаляет optional-поле, параметры шагов не изменяются. */\n stepDescriptionList?: NonNullable<ServiceItemApi[\"stepDescriptionList\"]>;\n /**\n * Действия события; серверный null удаляет optional-поле.\n * При записи SDK заполняет только отсутствующий `rid`: согласованную конфигурацию действия задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно: такой объект отклонён сервером в live-проверке.\n * Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter;\n * требования других типов могут отличаться. См. services/README.md и examples/node/item-services/services-patch.ts.\n */\n caseActionList?: NonNullable<ServiceItemApi[\"caseActionList\"]>;\n /** Правила лояльности; серверный null удаляет optional-поле, вложенные транзакции сохраняются. */\n loyaltyTransactionPropertiesList?: NonNullable<ServiceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n /** Настройки поведения, декодированные из hash-tags услуги. */\n behaviorSettings?: ServiceBehaviorSettings;\n};\n/**\n * Тело создания и полного обновления услуги.\n * В `caseActionList` приложение задаёт согласованную конфигурацию выбранного типа действия;\n * SDK заполняет только отсутствующий `rid`. Одного `{ type: \"RequestFeedback\" }` недостаточно\n * по результатам live-проверки. Проверенный Reminder с trigger, notificationProperties и\n * caseParticipantFilter приведён в services/README.md и examples/node/item-services/services-patch.ts;\n * требования других типов действий могут отличаться.\n */\nexport type ServiceItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<ServiceItemApi>> & {\n /** Настройки поведения, сериализуемые в hash-tags услуги. */\n behaviorSettings?: ServiceBehaviorSettings;\n};\n/** Полный update услуги: атрибуты create/update без numeratorInfo; meta сохраняет CAS-версию самого item, не персональной связи. Полный GET-снимок допускается структурно, runtime отбрасывает numeratorInfo. */\nexport type ServiceItemForUpdate = Omit<ServiceItemForCreateOrUpdate, \"numeratorInfo\"> & Pick<ServiceItem, \"meta\">;\n\n/**\n * Частичное изменение услуги; name/image наследуют назначение {@link TorrowItemPatchFields}.\n * priceInfo заменяет всю ценовую область согласно ItemPricePatchFields: пропуск сохраняет цены,\n * null и {settings:[]} полностью очищают. SDK отправляет очистку как priceInfo:null без старого root alias.\n * Непустой settings заменяется целиком; для удаления записи передайте остальные цены с расписаниями и RID.\n * См. examples/node/item-services/services-patch-price.ts для двух способов очистки и независимого readback.\n * Остальные поля ниже описывают полную замену выбранного значения.\n */\nexport type ServiceItemPatch = TorrowItemPatchFields &\n ItemPricePatchFields & {\n /** Описание услуги; null/empty очищает, пропуск сохраняет. */\n description?: string | null;\n /** Идентификатор места оказания услуги; null снимает привязку. */\n placeId?: string | null;\n /** Текстовое описание места; null/empty очищает. */\n place?: string | null;\n /** Полное расписание; вложенные диапазоны заменяются целиком, отсутствующий `rid` создаётся SDK, null снимает структуру. */\n schedule?: NonNullable<ServiceItemApi[\"schedule\"]> | null;\n /** Длительность бронирования в секундах; null снимает ограничение. */\n bookingDuration?: number | null;\n /** Числовой вид расписания; null снимает настройку. */\n timetableView?: number | null;\n /** Граница закрытия регистрации по wire-контракту; null снимает. */\n registrationClose?: number | null;\n /** Граница открытия регистрации по wire-контракту; null снимает. */\n registrationOpen?: number | null;\n /** Максимальное число клиентов; null снимает лимит. */\n maxConsumerQuantity?: number | null;\n /** Полная замена списка профилей исполнителей; [] очищает. */\n executorIdList?: NonNullable<ServiceItemApi[\"executorIdList\"]>;\n /** Требование одобрения; false — значение, null снимает настройку. */\n needApproval?: boolean | null;\n /** Шаг сетки времени; null снимает настройку. */\n timeAlignment?: number | null;\n /** Лимит одновременно действующих заказов услуги; null снимает. */\n orderQuote?: number | null;\n /** Пауза между слотами в секундах; null снимает. */\n marginTime?: number | null;\n /** Доля использования исполнителя по wire-контракту; null снимает. */\n executorUsagePercent?: number | null;\n /** Опорная дата первой недели; Date сериализуется штатным SDK, null снимает. */\n firstWeekDate?: Date | null;\n /** Группа допустимых клиентов; null снимает привязку. */\n clientGroupId?: string | null;\n /** Полный список ресурсных групп; [] очищает, группы не сливаются по id. */\n resourceGroupList?: NonNullable<ServiceItemApi[\"resourceGroupList\"]>;\n /** Полная структура запрашиваемых сведений участника; null снимает. */\n participateFieldRequirements?: NonNullable<ServiceItemApi[\"participateFieldRequirements\"]> | null;\n /** Полный список приложений; [] очищает. */\n appendixList?: NonNullable<ServiceItemApi[\"appendixList\"]>;\n /** Полная конфигурация длительности сессии; null снимает. */\n sessionDurationProperties?: NonNullable<ServiceItemApi[\"sessionDurationProperties\"]> | null;\n /** Автоматический check-in всех связанных событий; false выключает, null не принимается. */\n checkInAllCases?: boolean;\n /** Полный список шагов регистрации; [] очищает. */\n stepDescriptionList?: NonNullable<ServiceItemApi[\"stepDescriptionList\"]>;\n /** Подпись основной кнопки; null/empty снимает. */\n buttonName?: string | null;\n /** Полная конфигурация доступа и минимального интервала check-in; null снимает. */\n checkinPermission?: NonNullable<ServiceItemApi[\"checkinPermission\"]> | null;\n /**\n * Полный список автоматических действий события; [] очищает.\n * SDK заполняет только отсутствующий `rid`; trigger, уведомления и фильтр участников задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно по live-проверке. Проверенный Reminder:\n * services/README.md и examples/node/item-services/services-patch.ts. Требования других типов могут отличаться.\n */\n caseActionList?: NonNullable<ServiceItemApi[\"caseActionList\"]>;\n /** Полный список правил лояльности; [] очищает, транзакции SDK не вычисляет. */\n loyaltyTransactionPropertiesList?: NonNullable<ServiceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n };\n\nexport type ServiceResourceStepUsageType = Extract<\n NonNullable<ResourceGroup[\"usageType\"]>,\n \"Specification\" | \"Rent\" | \"Sale\"\n>;\n\nexport interface AddServiceResourceGroupInput {\n key: string;\n groupId?: string;\n groupName: string;\n minResources?: number | null;\n maxResources?: number | null;\n maxTotalAmount?: number | null;\n quickFilterTags?: string[] | null;\n bookingProperties?: BookingProperties | null;\n}\n\nexport interface AddServiceResourceStepInput extends AddServiceResourceGroupInput {\n usageType: ServiceResourceStepUsageType;\n stepOrder?: number;\n description?: string | null;\n autoChoiceResource?: boolean;\n hiddenStep?: boolean;\n hideResourceDetail?: boolean;\n}\n\nexport type AddServicePaymentGroupInput = AddServiceResourceGroupInput;\n\nexport interface ServiceBuildResult {\n body: ServiceItemForCreateOrUpdate;\n resourceGroupIds: Record<string, string>;\n}\n\nexport type SessionDurationType = NonNullable<SessionDurationProperties[\"sessionDurationType\"]>;\nexport type TimeSelectionType = NonNullable<SessionDurationProperties[\"timeSelectionType\"]>;\nexport type StateManagementType = NonNullable<SessionDurationProperties[\"stateManagementType\"]>;\nexport type SessionPrecisionType = NonNullable<SessionDurationProperties[\"sessionPrecisionType\"]>;\n\nexport const SessionDurationTypeValues = {\n Unknown: \"UnknownSessionDurationType\",\n None: \"SessionDurationNone\",\n Custom: \"Custom\",\n Constant: \"Constant\",\n Sum: \"Sum\",\n} as const satisfies Record<string, SessionDurationType>;\n\nexport const TimeSelectionTypeValues = {\n Unknown: \"UnknownTimeSelectionType\",\n None: \"TimeSelectionNone\",\n Consumer: \"Consumer\",\n Executor: \"Executor\",\n} as const satisfies Record<string, TimeSelectionType>;\n\nexport const StateManagementTypeValues = {\n Unknown: \"UnknownStateManagementType\",\n Auto: \"Auto\",\n Manual: \"Manual\",\n} as const satisfies Record<string, StateManagementType>;\n\nexport const SessionPrecisionTypeValues = {\n Unknown: \"UnknownSessionPrecisionType\",\n None: \"SessionPrecisionNone\",\n DateTime: \"DateTime\",\n Date: \"Date\",\n} as const satisfies Record<string, SessionPrecisionType>;\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Провайдер оплаты из OpenAPI; строковый ввод и неизвестный серверный sentinel сохраняются. */\nexport type PaymentProviderType = OpenApiSchemas[\"PaymentProviderType\"];\n\n/** Именованные значения общего wire-контракта провайдера оплаты. */\nexport enum PaymentProviderTypeValues {\n /** Неизвестный провайдер серверного контракта. */\n Unknown = \"UnknownPaymentProviderType\",\n /** Наличный расчёт. */\n Cash = \"Cash\",\n /** Внешняя ссылка оплаты. */\n CustomLink = \"CustomLink\",\n /** Интеграция YooMoney. */\n YooMoney = \"YooMoney\",\n /** Интеграция Qiwi P2P. */\n QiwiP2P = \"QiwiP2P\",\n /** Серверная ветвь Qiwi B2B. */\n QiwiB2B = \"QiwiB2B\",\n /** Интеграция YooKassa. */\n YooKassa = \"YooKassa\",\n /** Интеграция Сбербанка. */\n Sberbank = \"Sberbank\",\n /** Интеграция Уралсиб. */\n Uralsib = \"Uralsib\",\n /** Интеграция Альфа-Банка. */\n Alfabank = \"Alfabank\",\n /** Интеграция RoboKassa. */\n RoboKassa = \"RoboKassa\",\n /** Интеграция PayKeeper. */\n PayKeeper = \"PayKeeper\",\n /** Серверная ветвь GateLine. */\n GateLine = \"GateLine\",\n /** Интеграция Tinkoff. */\n Tinkoff = \"Tinkoff\",\n /** Интеграция Prodamus. */\n Prodamus = \"Prodamus\",\n /** Тестовый провайдер. */\n Mock = \"MockPaymentProvider\",\n}\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Вид условия использования ресурса из OpenAPI, включая неизвестный серверный sentinel. */\nexport type UsageConditionType = OpenApiSchemas[\"UsageConditionType\"];\n\n/** Полный wire-набор для валидации patch и справочника; публичное подмножество задано отдельно. */\nexport enum UsageConditionTypeWireValues {\n /** Сервер не определил вид условия. */\n Unknown = \"UnknownUsageConditionType\",\n /** Условие использования отсутствует. */\n None = \"None\",\n /** Указанные ресурсы исключают использование текущего. */\n Exclusion = \"Exclusion\",\n /** Указанные ресурсы используются дополнительно к текущему. */\n Additional = \"Additional\",\n}\n\n/** Совместимый публичный набор: три прежних ключа с типами строковых литералов. */\nexport const UsageConditionTypeValues = {\n /** Условие использования отсутствует. */\n None: `${UsageConditionTypeWireValues.None}`,\n /** Исключающее условие использования. */\n Exclusion: `${UsageConditionTypeWireValues.Exclusion}`,\n /** Дополнительное условие использования. */\n Additional: `${UsageConditionTypeWireValues.Additional}`,\n} as const satisfies Record<string, UsageConditionType>;\n","import type { PickOrderRespRead, ReturnOrderRespRead } from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nexport { PaymentProviderTypeValues, type PaymentProviderType } from \"../common/payment-provider-type.js\";\nexport { UsageConditionTypeValues, type UsageConditionType } from \"../common/usage-condition-type.js\";\nimport { type UsageConditionTypeWireValues, type UsageConditionType } from \"../common/usage-condition-type.js\";\nimport type { ResourceBehaviorSettings } from \"../common/implicit-tag-params.js\";\nimport type { ResourceItemApiDto, WorkloadPeriodDto, PickOrderReqDto, ReturnOrderReqDto } from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItem, TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowItemGetOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nimport type { ResourcePaymentPatchProperties } from \"./resource-payment-patch-types.js\";\nexport type { ResourcePaymentPatchProperties, ResourcePaymentPatchParameters } from \"./resource-payment-patch-types.js\";\nexport type { DeleteResponse, ObjectInfo } from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { ResourceBehaviorSettings } from \"../common/implicit-tag-params.js\";\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения ресурса по идентификатору. */\nexport interface GetResourceOptions extends TorrowItemGetOptions {\n /** Включать основную карточку item в ответ ресурса. */\n isNeedItem?: boolean | null;\n /** Включать родительский ресурс в ответ. */\n isNeedParentResource?: boolean | null;\n}\n\n/** Параметры полного обновления ресурса. */\nexport interface UpdateResourceItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется ресурс; `null` сохраняет wire-семантику query. */\n profileId?: string | null;\n}\n\nexport type ResourceItemApi = NormalizedPublicity<ResourceItemApiDto>;\nexport type ServiceDescription = NonNullable<ResourceItemApi[\"serviceDescriptions\"]>[number];\nexport type UsageCondition = NonNullable<ResourceItemApi[\"usageCondition\"]>;\n/** Дополнительные и исключающие условия; отсутствие условия и неизвестный sentinel сюда не входят. */\nexport type ResourceUsageConditionType = Exclude<\n UsageConditionType,\n `${UsageConditionTypeWireValues.Unknown | UsageConditionTypeWireValues.None}`\n>;\nexport type WorkloadPeriod = WorkloadPeriodDto;\nexport type PickOrderReq = PickOrderReqDto;\nexport type PickOrderResp = PickOrderRespRead;\nexport type ReturnOrderReq = ReturnOrderReqDto;\nexport type ReturnOrderResp = ReturnOrderRespRead;\nexport type ResourceItem = TorrowItemFromDto<\n Omit<\n ResourceItemApi,\n | \"item\"\n | \"parentResource\"\n | \"priceInfo\"\n | \"serviceDescriptions\"\n | \"appendixList\"\n | \"loyaltyTransactionPropertiesList\"\n >\n> & {\n /** Связанный элемент с подготовленными общими read-полями; отсутствие элемента сохраняется. */\n item?: TorrowItem;\n /** Родительский ресурс с подготовленными общими read-полями; отсутствие родителя сохраняется. */\n parentResource?: TorrowItem;\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n /** Связи с услугами; серверный null удаляет ключ, [] сохраняется. Элементы не преобразуются. */\n serviceDescriptions?: NonNullable<ResourceItemApi[\"serviceDescriptions\"]>;\n /** Приложения; серверный null удаляет ключ, [] сохраняется. Даты и остальные поля элементов сохраняются. */\n appendixList?: NonNullable<ResourceItemApi[\"appendixList\"]>;\n /** Правила лояльности; серверный null удаляет ключ, вложенные transactionValues не нормализуются. */\n loyaltyTransactionPropertiesList?: NonNullable<ResourceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n /** Настройки поведения, декодированные из hash-tags ресурса. */\n behaviorSettings?: ResourceBehaviorSettings;\n};\nexport type UsageType = ResourceItemApi[\"usageType\"];\nexport const UsageTypeValues = {\n Unknown: \"UnknownUsageType\",\n Specification: \"Specification\",\n Rent: \"Rent\",\n Sale: \"Sale\",\n Payment: \"Payment\",\n Ticket: \"Ticket\",\n} as const satisfies Record<string, NonNullable<UsageType>>;\nexport type ResourceItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<ResourceItemApi>> & {\n /** Настройки поведения, сериализуемые в hash-tags ресурса. */\n behaviorSettings?: ResourceBehaviorSettings;\n};\n\n/** Подтверждённые обычные поля root Resource update; name/image наследуют общий контракт. */\nexport interface ResourceItemPatchFields extends TorrowItemPatchFields {\n /** Описание ресурса; null/empty очищает содержимое, пропуск сохраняет. */\n description?: string | null;\n /** Идентификатор связанного элемента; null снимает связь. Это не target ID самого patch. */\n itemId?: string | null;\n /** Идентификатор родительского ресурса; null снимает связь. */\n parentResourceId?: string | null;\n /** Идентификатор связанного расписания; null снимает связь. */\n timetableId?: string | null;\n /** Полная замена расписания с Date SDK; отсутствующий `rid` диапазона создаётся SDK, null снимает расписание. */\n schedule?: NonNullable<ResourceItemApi[\"schedule\"]> | null;\n /** Серверный способ использования; UnknownUsageType нормализует сервер, create default не применяется. */\n usageType?: NonNullable<ResourceItemApi[\"usageType\"]>;\n /** Полная замена связей с услугами; [] снимает список, предметные ограничения проверяет сервер. */\n serviceDescriptions?: NonNullable<ResourceItemApi[\"serviceDescriptions\"]>;\n /** Пользовательский код; null/empty очищает содержимое. */\n code?: string | null;\n /** Длительность/расчётная единица в секундах (int32); null снимает значение. */\n duration?: number | null;\n /** Полная замена количественных свойств, включая inventoryDate Date; null снимает структуру. */\n amountProperties?: NonNullable<ResourceItemApi[\"amountProperties\"]> | null;\n /** Полная замена условий использования; null снимает структуру. */\n usageCondition?: NonNullable<ResourceItemApi[\"usageCondition\"]> | null;\n /** Полная замена приложений с Date SDK; [] снимает список. */\n appendixList?: NonNullable<ResourceItemApi[\"appendixList\"]>;\n /** Полная замена конфигурации оплаты; null снимает её, платежи не выполняются. */\n paymentProperties?: ResourcePaymentPatchProperties | null;\n /** Полная замена настроек операций лояльности; [] снимает список, баланс не пересчитывается SDK. */\n loyaltyTransactionPropertiesList?: NonNullable<ResourceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n}\n\n/** Частичное изменение ресурса с одной из взаимоисключающих форм цены ItemPricePatchFields. */\nexport type ResourceItemPatch = ResourceItemPatchFields & ItemPricePatchFields;\n\nexport interface ResourceServiceBindingOptions {\n usageAmount?: number | null;\n sortIndex?: number | null;\n}\n\nexport interface ResourceBuildResult {\n body: ResourceItemForCreateOrUpdate;\n}\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `UserAccessLevel` — кто может check-in / запись. */\nexport type UserAccessLevel = Schemas[\"UserAccessLevel\"];\n\nexport const UserAccessLevelValues = {\n Unknown: \"UnknownUserAccessLevel\",\n Authenticated: \"Authenticated\",\n Unauthenticated: \"Unauthenticated\",\n} as const satisfies Record<string, UserAccessLevel>;\n","import type {\n LoyaltySystemItemDto,\n CreateLoyaltyCardReqDto,\n GetLoyaltySystemsStatisticsReqDto,\n GetLoyaltySystemsStatisticsRespDto,\n LoyaltyCardFilterConditionDto,\n LoyaltyCardSortConditionDto,\n LoyaltySystemsStatisticsRespDto,\n OperationTypeDto,\n ItemSortConditionDto,\n SearchLoyaltyCardsReqDto,\n} from \"./dto.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { ParticipantType, TorrowObjectType } from \"../../schema/sdk-shared-public-types.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemGetOptions } from \"../common/item-crud-options.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nexport type {\n GenerateSecurityTokenReq,\n GenerateSecurityTokenResp,\n GetParticipationCountResp,\n GetShareItemSessionReq,\n ObjectInfo,\n ObjectSortCondition,\n ParticipantState,\n ParticipantType,\n ParticipantView,\n Participation,\n ParticipationResp,\n SaveItemToMindMapReq,\n SendLinkOfItemReq,\n SendLinkOfItemResp,\n SetGroupItemReq,\n ShareItemReq,\n TorrowObjectType,\n UnsetGroupItemReq,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения программы лояльности по идентификатору. */\nexport type GetLoyaltySystemOptions = TorrowItemGetOptions;\n\n/** Поля программы из DTO; только три array-only patch-контейнера исключают null, сохраняя optional-модификаторы. */\ntype LoyaltySystemItemReadFields = {\n [K in keyof LoyaltySystemItemDto]: K extends\n \"referralProgramIds\" | \"beginTransactionValues\" | \"accountingProductNames\"\n ? Exclude<LoyaltySystemItemDto[K], null>\n : LoyaltySystemItemDto[K];\n};\n/**\n * Программа лояльности: referralProgramIds — связанные реферальные программы,\n * beginTransactionValues — значения будущего выпуска, accountingProductNames — имена учётных продуктов.\n * Эти списки исключают null, сохраняя optional; остальные поля и элементы наследуются из DTO.\n */\nexport type LoyaltySystemItem = TorrowItemFromDto<LoyaltySystemItemReadFields>;\nexport type CreateLoyaltyCardReq = CreateLoyaltyCardReqDto;\nexport type SearchLoyaltyCardsReq = SearchLoyaltyCardsReqDto;\nexport type LoyaltyCardFilterCondition = LoyaltyCardFilterConditionDto;\nexport type LoyaltyCardSortCondition = LoyaltyCardSortConditionDto;\nexport type GetLoyaltySystemsStatisticsReq = GetLoyaltySystemsStatisticsReqDto;\nexport type GetLoyaltySystemsStatisticsResp = GetLoyaltySystemsStatisticsRespDto;\nexport type LoyaltySystemsStatisticsResp = LoyaltySystemsStatisticsRespDto;\nexport type OperationType = OperationTypeDto;\nexport type ItemSortCondition = ItemSortConditionDto;\n/** Полная запись программы сохраняет исходные nullable списки DTO; ограничения частичного patch не переносятся на CRUD. */\nexport type LoyaltySystemItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<LoyaltySystemItemDto>>;\nexport type { LoyaltyParticipantsQuery } from \"../loyalty/loyalty-participants-query.js\";\n\nexport type LoyaltyCardIssueType = NonNullable<LoyaltySystemItem[\"loyaltyCardIssueType\"]>;\nexport type LoyaltyCardUpdateKeyInformation = NonNullable<LoyaltySystemItem[\"loyaltyCardUpdateKeyInformation\"]>;\nexport type LoyaltyCardUpdateNonKeyInformation = NonNullable<LoyaltySystemItem[\"loyaltyCardUpdateNonKeyInformation\"]>;\n\nexport const LoyaltyCardIssueTypeValues = {\n Unknown: \"UnknownLoyaltyCardIssueType\",\n Manual: \"Manual\",\n AutoActive: \"AutoActive\",\n AutoIssued: \"AutoIssued\",\n} as const satisfies Record<string, LoyaltyCardIssueType>;\n\nexport const LoyaltyCardUpdateKeyInformationValues = {\n Unknown: \"UnknownLoyaltyCardUpdateKeyInformation\",\n NonKeyDisallowed: \"NonKeyDisallowed\",\n NonKeyAllowed: \"NonKeyAllowed\",\n} as const satisfies Record<string, LoyaltyCardUpdateKeyInformation>;\n\nexport const LoyaltyCardUpdateNonKeyInformationValues = {\n Unknown: \"UnknownLoyaltyCardUpdateNonKeyInformation\",\n KeyDisallowed: \"KeyDisallowed\",\n KeyAllowed: \"KeyAllowed\",\n} as const satisfies Record<string, LoyaltyCardUpdateNonKeyInformation>;\n\n/** OpenAPI `LoyaltyCardSortCondition` — сортировка поиска карт в программе. */\nexport const LoyaltyCardSortConditionValues = {\n SequenceCardNumberAsc: \"SequenceCardNumberAsc\",\n SequenceCardNumberDesc: \"SequenceCardNumberDesc\",\n LoyaltyCardStateAsc: \"LoyaltyCardStateAsc\",\n LoyaltyCardStateDesc: \"LoyaltyCardStateDesc\",\n SequenceCardNumberAscLoyaltyCardStateAsc: \"SequenceCardNumberAscLoyaltyCardStateAsc\",\n SequenceCardNumberDescLoyaltyCardStateAsc: \"SequenceCardNumberDescLoyaltyCardStateAsc\",\n SequenceCardNumberAscLoyaltyCardStateDesc: \"SequenceCardNumberAscLoyaltyCardStateDesc\",\n SequenceCardNumberDescLoyaltyCardStateDesc: \"SequenceCardNumberDescLoyaltyCardStateDesc\",\n LoyaltyCardStateAscSequenceCardNumberAsc: \"LoyaltyCardStateAscSequenceCardNumberAsc\",\n LoyaltyCardStateAscSequenceCardNumberDesc: \"LoyaltyCardStateAscSequenceCardNumberDesc\",\n LoyaltyCardStateDescSequenceCardNumberAsc: \"LoyaltyCardStateDescSequenceCardNumberAsc\",\n LoyaltyCardStateDescSequenceCardNumberDesc: \"LoyaltyCardStateDescSequenceCardNumberDesc\",\n} as const satisfies Record<string, LoyaltyCardSortCondition>;\n\nexport type LoyaltyGroupListQuery = {\n itemType?: TorrowObjectType | null;\n minParticipantType?: ParticipantType | null;\n operationType?: OperationType | null;\n recursionDepth?: number | null;\n take?: number | null;\n skip?: number | null;\n lmfrom?: Date | null;\n lmto?: Date | null;\n includeDeleted?: boolean | null;\n sort?: ItemSortCondition | null;\n};\n\n/** Частичное изменение настроек программы; общие name/image сохраняют контракт TorrowItemPatchFields. */\nexport interface LoyaltySystemItemPatch extends TorrowItemPatchFields {\n /** Описание программы; null очищает. */\n description?: string | null;\n /** Ссылка на визитку; null снимает связь. */\n businessCardId?: string | null;\n /** Правило выпуска будущих карт; Unknown не принимается. */\n loyaltyCardIssueType?: Exclude<NonNullable<LoyaltySystemItem[\"loyaltyCardIssueType\"]>, \"UnknownLoyaltyCardIssueType\">;\n /** Доступ к выпускаемым картам; это не публичность самого item. */\n loyaltyCardAnyoneAccess?: Exclude<NonNullable<LoyaltySystemItem[\"loyaltyCardAnyoneAccess\"]>, \"UnknownAnyoneAccess\">;\n /** Политика изменения ключевой информации карт. */\n loyaltyCardUpdateKeyInformation?: Exclude<LoyaltyCardUpdateKeyInformation, \"UnknownLoyaltyCardUpdateKeyInformation\">;\n /** Политика изменения неключевой информации карт. */\n loyaltyCardUpdateNonKeyInformation?: Exclude<\n LoyaltyCardUpdateNonKeyInformation,\n \"UnknownLoyaltyCardUpdateNonKeyInformation\"\n >;\n /** Срок действия будущей карты в днях (int32); 0 — значение, null очищает. */\n loyaltyCardUsagePeriod?: number | null;\n /** Начало программы; null снимает ограничение. */\n startDate?: Date | null;\n /** Окончание программы; null снимает ограничение. */\n expiredDate?: Date | null;\n /** Полная замена требований к контакту при выпуске; null очищает. */\n contactInformationFieldsRequirements?: NonNullable<LoyaltySystemItem[\"contactInformationFieldsRequirements\"]> | null;\n /** Полная замена ссылок на реферальные программы; [] очищает. */\n referralProgramIds?: string[];\n /** Начальные значения будущего выпуска; существующие балансы не меняются, [] очищает. */\n beginTransactionValues?: NonNullable<LoyaltySystemItem[\"beginTransactionValues\"]>;\n /** Полная конфигурация стартового абонемента будущих карт; null очищает. */\n initialSubscription?: LoyaltySystemInitialSubscriptionPatch | null;\n /** Полная замена имён учётных продуктов; [] очищает. */\n accountingProductNames?: NonNullable<LoyaltySystemItem[\"accountingProductNames\"]>;\n}\n\n/**\n * Конфигурация будущего стартового абонемента: name — название, usagePeriod — срок в днях,\n * transactionValues — начальные значения. Наследует эти атрибуты InitialSubscription;\n * image ограничено ссылкой файла, URL/служебные метаданные не редактируются.\n */\nexport type LoyaltySystemInitialSubscriptionPatch = Omit<\n NonNullable<LoyaltySystemItem[\"initialSubscription\"]>,\n \"image\"\n> & {\n /** Загруженный файл стартового абонемента; null снимает изображение. */\n image?: TorrowItemPatchImage | null;\n};\n\n/** Полное обновление программы: numeratorInfo доступно только при создании и чтении. */\nexport type LoyaltySystemItemForUpdate = Omit<LoyaltySystemItemForCreateOrUpdate, \"numeratorInfo\">;\n","import { AccountTypeValues, TokenStatusValues, VerificationMethodValues } from \"../resources/auth/auth-enum-values.js\";\nimport { AnyoneAccessValues } from \"../resources/common/anyone-access.js\";\nimport { AvailableResourcesValues } from \"../resources/common/available-resources.js\";\nimport { CaseStateValues, CaseTypeValues } from \"../resources/cases/types.js\";\nimport { CommunicationTypeValues, GenderValues, ProfileTypeValues } from \"../resources/contacts/types.js\";\nimport { ImagePreviewSizeValues, NoteTypeValues } from \"../resources/notes/types.js\";\nimport { ItemViewSortConditionValues } from \"../resources/common/personal-list.js\";\nimport {\n ParticipationFieldRequirementTypeValues,\n ParticipationFieldTypeValues,\n} from \"../resources/common/participation-field.js\";\nimport {\n SessionDurationTypeValues,\n SessionPrecisionTypeValues,\n StateManagementTypeValues,\n TimeSelectionTypeValues,\n} from \"../resources/services/types.js\";\nimport { UsageTypeValues } from \"../resources/resources/types.js\";\nimport { UserAccessLevelValues } from \"../resources/common/user-access-level.js\";\nimport {\n LoyaltyCardIssueTypeValues,\n LoyaltyCardUpdateKeyInformationValues,\n LoyaltyCardUpdateNonKeyInformationValues,\n} from \"../resources/loyalty-systems/types.js\";\nimport { UsageConditionTypeWireValues } from \"../resources/common/usage-condition-type.js\";\nimport { PaymentProviderTypeValues } from \"../resources/common/payment-provider-type.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nconst ENUM_VALUES = {\n AccountType: Object.values(AccountTypeValues),\n AdvisedItemType: [\"UnknownAdvisedItemType\", \"NearLocation\", \"Recommendation\"],\n AccountingTransactionState: [\"UnknownState\", \"Intended\", \"Preparing\", \"Cancelled\", \"Reserved\", \"Commited\"],\n AccountingTransactionType: [\"UnknownType\", \"Balance\", \"Operation\"],\n ActionHistoryState: [\"Undefined\", \"Executing\", \"Success\", \"Error\", \"Canceled\"],\n ActionHistoryType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"RequestAccessToItem\",\n \"RevokeRequestAccessToItem\",\n \"AcceptOfferToItem\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"CancelCaseParticipation\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"CaseActionReminder\",\n ],\n AnnouncementCategory: [\n \"UnknownAnnouncementCategory\",\n \"Action\",\n \"Alert\",\n \"Inform\",\n \"Success\",\n \"Deleted\",\n \"Analytics\",\n \"Reminder\",\n ],\n AnnouncementPriority: [\"UnknownAnnouncementPriority\", \"Low\", \"Normal\", \"High\"],\n AnnouncementState: [\"Undefined\", \"New\", \"Read\", \"Hidden\"],\n AnnouncementType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"InviteToParticipate\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"BlockItem\",\n \"UnblockItem\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"ConfirmMyCaseParticipation\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"CreateServiceSession\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"LoyaltyCardExpired\",\n \"SubscriptionExpired\",\n \"LoyaltyCardExpiresSoon\",\n \"SubscriptionExpiresSoon\",\n \"AccountBalanceReachedNotificationLevel\",\n \"AccountBalanceReachedMinimumLevel\",\n ],\n AnyoneAccess: Object.values(AnyoneAccessValues),\n ArchiveState: [\"None\", \"Marked\", \"Archived\"],\n AvailabilityTime: [\"UnknownSystemAvailabilityTime\", \"Free\", \"Busy\"],\n AvailableResources: Object.values(AvailableResourcesValues),\n CaseParticipantState: [\"UnknownCaseParticipantState\", \"Booking\", \"Registered\", \"Canceled\", \"Approving\"],\n CaseParticipantType: [\"UnknownCaseParticipantType\", \"Consumer\", \"Executor\", \"Escort\"],\n CaseState: Object.values(CaseStateValues),\n CaseType: Object.values(CaseTypeValues),\n CommunicationType: Object.values(CommunicationTypeValues),\n TokenStatus: Object.values(TokenStatusValues),\n VerificationMethod: Object.values(VerificationMethodValues),\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: Object.values(GenderValues),\n ImagePreviewSize: Object.values(ImagePreviewSizeValues),\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: Object.values(ItemViewSortConditionValues),\n LinkType: [\"Unknown\", \"User\", \"Pinned\", \"Group\"],\n NoteType: Object.values(NoteTypeValues),\n ObjectSortCondition: [\n \"CreateDateAsc\",\n \"CreateDateDesc\",\n \"LastModifiedAsc\",\n \"LastModifiedDesc\",\n \"CreateDateAscLastModifiedAsc\",\n \"CreateDateDescLastModifiedAsc\",\n \"CreateDateAscLastModifiedDesc\",\n \"CreateDateDescLastModifiedDesc\",\n \"LastModifiedAscCreateDateAsc\",\n \"LastModifiedAscCreateDateDesc\",\n \"LastModifiedDescCreateDateAsc\",\n \"LastModifiedDescCreateDateDesc\",\n ],\n OperationType: [\n \"UnknownOperation\",\n \"Verification\",\n \"ConfirmCommunication\",\n \"AcceptInvite\",\n \"SendPersonalReminder\",\n \"DeleteUser\",\n \"AddAccount\",\n \"DeleteAccount\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"ReadItem\",\n \"SearchItem\",\n \"ReadChildItems\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"ReadParticipants\",\n \"CanUseAsProfile\",\n \"CopyLink\",\n \"SocialSharing\",\n \"InviteToParticipate\",\n \"ReadCaseParticipants\",\n \"UpdateUniqueName\",\n \"ReadItemOwners\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SetItemTags\",\n \"GetActionHistory\",\n \"UpdateFeedbackOptions\",\n \"SendAnnouncementsToParticipants\",\n \"SetItemMetrics\",\n \"GetFeedbackMessage\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"FullViewOfActionHistory\",\n \"GenerateSecurityToken\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"FullReadCaseParticipants\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"Invite\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"RejectItem\",\n \"BlockItem\",\n \"UnblockItem\",\n \"ReaderTestFunction\",\n \"EditorTestFunction\",\n \"OwnerTestFunction\",\n \"PotentialReaderTestFunction\",\n \"AdministratorTestFunction\",\n \"PublicReaderTestFunction\",\n \"ManagerTestFunction\",\n \"DeletedTestFunction\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CreateSingleCaseForGroupCase\",\n \"GenerateCaseReport\",\n \"ConfirmOtherCaseParticipationReminderNotif\",\n \"SendClaimAboutOtherCaseParticipationNotif\",\n \"GetTimetable\",\n \"GetTimetableView\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ConfirmCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"GetTimetableStatistics\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"GetCalendarCase\",\n \"GetCalendarTask\",\n \"IncludeSpecifications\",\n \"ExcludeSpecifications\",\n \"CreateServiceSession\",\n \"GetCheckInSchedule\",\n \"CreateOrder\",\n \"CreateSpecification\",\n \"ServiceDashboard\",\n \"GenerateServiceReport\",\n \"GenerateServicesResourcesReport\",\n \"GenerateResourcesRentReport\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"GetReCheckInSchedule\",\n \"ChangeOrderService\",\n \"GetServiceWorkloadInfo\",\n \"GenerateResourceReport\",\n \"UpdateContactProperties\",\n \"PickOrder\",\n \"ReturnOrder\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"GetLoyaltySystemCards\",\n \"GetLoyaltySystemsStatistics\",\n \"ConsumerTestFunction\",\n \"ExecutorTestFunction\",\n \"PotentialConsumerTestFunction\",\n \"CaseActionReminder\",\n ],\n ParticipantState: [\"UnknownParticipantState\", \"Requested\", \"Offered\", \"Revoked\", \"Accepted\", \"Rejected\", \"Declined\"],\n ParticipantType: [\"UnknownParticipantType\", \"Owner\", \"Editor\", \"Reader\", \"Publisher\", \"Manager\", \"PublicReader\"],\n ParticipationFieldRequirementType: Object.values(ParticipationFieldRequirementTypeValues),\n ParticipationFieldType: Object.values(ParticipationFieldTypeValues),\n PaymentProviderType: Object.values(PaymentProviderTypeValues),\n ProfileType: Object.values(ProfileTypeValues),\n ProfileUserAvailability: [\"Unknown\", \"Free\", \"Busy\", \"Hidden\", \"ProfileAuto\", \"UserAuto\"],\n ReminderLocationDirection: [\"In\", \"Out\"],\n ReportDeliveryType: [\"UnknownReportDeliveryType\", \"Link\", \"Email\"],\n ShowCaseInTimetableType: [\"All\", \"ExcludeUser\"],\n TimetableDetailsVisibility: [\"Time\", \"View\"],\n TicketState: [\"UnknownTicketState\", \"Canceled\", \"Waiting\", \"Paid\", \"Used\", \"Error\"],\n TicketPaymentConfirmationSource: [\"UnknownTicketPaymentConfirmationSource\", \"PaymentLink\", \"Manager\"],\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: Object.values(UsageConditionTypeWireValues),\n UsageType: Object.values(UsageTypeValues),\n SessionDurationType: Object.values(SessionDurationTypeValues),\n TimeSelectionType: Object.values(TimeSelectionTypeValues),\n StateManagementType: Object.values(StateManagementTypeValues),\n SessionPrecisionType: Object.values(SessionPrecisionTypeValues),\n UserAccessLevel: Object.values(UserAccessLevelValues),\n LoyaltyCardIssueType: Object.values(LoyaltyCardIssueTypeValues),\n LoyaltyCardUpdateKeyInformation: Object.values(LoyaltyCardUpdateKeyInformationValues),\n LoyaltyCardUpdateNonKeyInformation: Object.values(LoyaltyCardUpdateNonKeyInformationValues),\n} as const;\n\ntype EnumName = keyof typeof ENUM_VALUES;\n\nconst SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS: Partial<Record<EnumName, Record<string, string>>> = {\n AdvisedItemType: {\n UnknownAdvisedItemType: \"Служебное/неопределённое значение режима подборки adviseditems.\",\n NearLocation:\n \"Элементы рядом с точкой: обязательны query `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`**.\",\n Recommendation: \"Персональные рекомендации пользователя (без обязательной геопозиции).\",\n },\n VerificationMethod: {\n UnknownMethod: \"Сервер сам выбирает способ доставки кода (дефолт, если клиент не указал предпочтение).\",\n Sms: \"Код доставляется SMS на телефон.\",\n TelegramGateway: \"Код через Telegram Gateway (не путать с AccountType.Telegram).\",\n FlashCall: \"Flash-call: пользователь вводит последние цифры входящего номера.\",\n MtsMobileId:\n \"МТС Mobile ID: out-of-band подтверждение без классического ввода кода; клиент поллит `requestToken` по `TokenResp.status`. Документация МТС: https://developers.mts.ru/mobile-id/documentation/autentifikatsiya\",\n },\n TokenStatus: {\n TokenReady: \"Токены готовы: в ответе есть access/refresh (классический OTP и успешный Mobile ID).\",\n Pending:\n \"Выдача ещё идёт (типично MTS Mobile ID) — полли `requestToken` с интервалом `SendCodeResp.pollIntervalSeconds`.\",\n AwaitingSmsCode: \"Mobile ID не завершился — нужен fallback: ввод SMS-кода и повторный `requestToken` с `code`.\",\n Failed: \"Выдача токенов не удалась; токены пустые — начать заново с `sendCode`.\",\n },\n LinkType: {\n Unknown: \"Служебный/неопределённый тип связи parent↔child (`ItemLink.linkType`).\",\n User: \"User link: личная ветка mind map; видит владелец связи. Канон create — `saveToMindMap` (не `includeForUser`).\",\n Pinned: \"Pinned link: структурное прикрепление к родителю; видно участникам родителя. Create — `includeToParent`.\",\n Group:\n \"Значение enum в OpenAPI; UI apps не строит ItemLink этого типа. Членство групп — `includeToGroups` / `updateGroups`, не `LinkType.Group`.\",\n },\n CaseState: {\n UnknownCaseState: \"Служебное/неопределенное состояние кейса.\",\n Verifying: \"Кейс на этапе проверки/подтверждения перед исполнением.\",\n Waiting: \"Кейс создан и ожидает начала выполнения или подтверждения.\",\n Processing: \"Кейс находится в активной работе.\",\n Preparing: \"Подготовительный этап перед основным выполнением кейса.\",\n Completed: \"Кейс успешно завершен.\",\n Closed: \"Кейс окончательно закрыт и больше не участвует в активном процессе.\",\n Rejected: \"Кейс отклонен (не принят к выполнению).\",\n Canceled: \"Кейс отменен (инициатором, исполнителем или системой по правилам).\",\n TimeControlled: \"Кейс находится под контролем временных ограничений/таймингов.\",\n TaskNotCompleted: \"Задача по кейсу не выполнена в требуемом объеме/срок.\",\n TaskCompleted: \"Задача по кейсу отмечена как выполненная.\",\n },\n CaseType: {\n UnknownTimeType: \"Служебный/неопределенный тип кейса по времени.\",\n Time: \"Одиночный кейс с конкретным временем.\",\n RepeatedTime: \"Повторяющийся кейс (серия по расписанию).\",\n Today: \"Кейс, относящийся к текущему дню.\",\n Week: \"Кейс/вид, агрегированный на недельном горизонте.\",\n Later: \"Кейс, отложенный на более поздний период.\",\n Date: \"Кейс, привязанный к конкретной дате (без детальной периодики).\",\n State: \"Кейс, фильтруемый/представляемый по состоянию, а не по времени.\",\n },\n TimetableDetailsVisibility: {\n Time: \"Только интервалы занятости (begin/end). Сервер не подгружает CaseView/CaseSummary для всех событий/заказов — лёгкий ответ для фона календаря / busy-bars. В ответе `detailsVisibility` остаётся `Time`, пока запись не обогащена.\",\n View: \"Полные детали событий/заказов: сервер подгружает CaseView и CaseSummary (`name`, `caseSummary`, …). Дефолт в torrow-apps (`TimetableCaseService.getTimetable`, экспорт заказов). В ответе обогащённые записи получают `detailsVisibility=View`.\",\n },\n TicketState: {\n UnknownTicketState: \"Служебное/неопределенное состояние билета.\",\n Canceled: \"Билет отменен и не может быть использован.\",\n Waiting: \"Билет ожидает оплаты или подтверждения.\",\n Paid: \"Билет оплачен и активен для использования.\",\n Used: \"Билет уже использован (услуга/доступ оказаны).\",\n Error: \"Ошибка обработки билета/платежного состояния.\",\n },\n AvailabilityTime: {\n UnknownSystemAvailabilityTime: \"Не удалось определить доступность временного слота.\",\n Free: \"Слот свободен для записи/бронирования.\",\n Busy: \"Слот занят и недоступен для новой записи.\",\n },\n AvailableResources: {\n Unknown: \"Служебное/неопределенное состояние ресурса в выборке.\",\n Free: \"Ресурс свободен.\",\n Booked: \"Ресурс забронирован.\",\n Busy: \"Ресурс занят и недоступен.\",\n },\n AnyoneAccess: {\n UnknownAnyoneAccess: \"Служебное/неопределенное значение уровня публичного доступа.\",\n NoneAnyoneAccess: \"Публичный доступ для «любого пользователя» не задан.\",\n Read: \"Любой пользователь может только читать объект.\",\n ReadWrite: \"Любой пользователь может читать и изменять объект.\",\n Denied: \"Публичный доступ явно запрещен.\",\n },\n DeliveryChannel: {\n UnknownDeliveryChannel: \"Служебный/неопределенный канал доставки.\",\n Push: \"Push-уведомление в приложение.\",\n Email: \"Доставка уведомления по email.\",\n Sms: \"Доставка уведомления через SMS.\",\n InApp: \"Внутреннее уведомление внутри приложения.\",\n Phone: \"Голосовой/телефонный канал.\",\n Announcement: \"Доставка через системное объявление.\",\n Telegram: \"Доставка через Telegram-канал/бот.\",\n Max: \"Доставка через мессенджер Max.\",\n },\n DeliveryStrategy: {\n UnknownDeliveryStrategy: \"Служебная/неопределенная стратегия доставки.\",\n All: \"Отправлять по всем доступным каналам.\",\n FirstDelivered: \"Остановиться после первой успешной доставки.\",\n },\n ProfileUserAvailability: {\n Unknown: \"Служебное/неопределенное состояние доступности профиля.\",\n Free: \"Профиль свободен и доступен для назначения.\",\n Busy: \"Профиль занят.\",\n Hidden: \"Профиль скрыт из сценариев подбора/расписания.\",\n ProfileAuto: \"Доступность определяется автоматически на уровне профиля.\",\n UserAuto: \"Доступность наследуется/рассчитывается автоматически от пользователя.\",\n },\n SessionDurationType: {\n UnknownSessionDurationType: \"Служебный/неопределенный тип длительности сессии.\",\n SessionDurationNone: \"Длительность сессии не используется (например Appeal).\",\n Custom: \"Длительность задаёт потребитель/исполнитель (аренда, кастомный интервал).\",\n Constant: \"Фиксированная длительность (`defaultDuration`).\",\n Sum: \"Длительность = сумма длительностей выбранных ресурсов/шагов (типично RegisterOnTime).\",\n },\n TimeSelectionType: {\n UnknownTimeSelectionType: \"Служебный/неопределенный тип выбора времени.\",\n TimeSelectionNone: \"Время не выбирается.\",\n Consumer: \"Время выбирает потребитель (клиент).\",\n Executor: \"Время выбирает исполнитель.\",\n },\n StateManagementType: {\n UnknownStateManagementType: \"Служебный/неопределенный режим управления состоянием сессии.\",\n Auto: \"Состояния сессии/кейса ведутся автоматически.\",\n Manual: \"Состояния меняет исполнитель вручную.\",\n },\n SessionPrecisionType: {\n UnknownSessionPrecisionType: \"Служебная/неопределенная точность сессии.\",\n SessionPrecisionNone: \"Точность не задана.\",\n DateTime: \"Выбор даты и времени.\",\n Date: \"Выбор только даты (без времени суток).\",\n },\n UserAccessLevel: {\n UnknownUserAccessLevel: \"Служебный/неопределенный уровень доступа для check-in/записи.\",\n Authenticated: \"Только аутентифицированные пользователи.\",\n Unauthenticated: \"Допускаются гости без полноценной сессии.\",\n },\n LoyaltyCardIssueType: {\n UnknownLoyaltyCardIssueType: \"Служебный/неопределенный способ выпуска карты.\",\n Manual: \"Карту выпускает оператор вручную.\",\n AutoActive: \"Карта выпускается и активируется автоматически (дефолт create в apps).\",\n AutoIssued: \"Карта выпускается автоматически без авто-активации.\",\n },\n LoyaltyCardUpdateKeyInformation: {\n UnknownLoyaltyCardUpdateKeyInformation: \"Служебное/неопределенное правило обновления key-полей карты.\",\n NonKeyDisallowed: \"Ключевые поля карты нельзя обновлять через non-key путь (дефолт create).\",\n NonKeyAllowed: \"Обновление ключевых полей через non-key путь разрешено.\",\n },\n LoyaltyCardUpdateNonKeyInformation: {\n UnknownLoyaltyCardUpdateNonKeyInformation: \"Служебное/неопределенное правило обновления non-key полей.\",\n KeyDisallowed: \"Non-key поля карты не обновляются (дефолт create, если чекбокс выключен).\",\n KeyAllowed: \"Non-key поля карты можно обновлять.\",\n },\n};\n\nconst DETAILED_TYPE_STATE_ENUMS = new Set<EnumName>(\n (Object.keys(ENUM_VALUES) as EnumName[]).filter(\n (name) =>\n (name.endsWith(\"Type\") || name.endsWith(\"State\")) && name !== \"ActionHistoryType\" && 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\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\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]) {\n return explicit[value];\n }\n\n const readable = toReadableToken(value);\n if (value.startsWith(\"Create\")) {\n return `Создание сущности/объекта в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Update\")) {\n return `Обновление данных в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Delete\") || value.startsWith(\"Remove\")) {\n return `Удаление/снятие привязки в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Get\") || value.startsWith(\"Read\")) {\n return `Чтение/получение данных в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Generate\")) {\n return `Генерация данных/отчета/токена в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Include\")) {\n return `Включение/добавление связи в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Exclude\")) {\n return `Исключение/удаление связи в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Case\")) {\n return `Операция жизненного цикла события (кейса): \"${readable}\".`;\n }\n if (value.startsWith(\"Confirm\")) {\n return `Подтверждение действия/состояния: \"${readable}\".`;\n }\n if (value.startsWith(\"Reject\") || value.startsWith(\"Decline\")) {\n return `Отклонение/отказ в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Approve\")) {\n return `Подтверждение/аппрув в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Request\")) {\n return `Запрос действия/доступа в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Revoke\")) {\n return `Отзыв ранее выданного доступа/предложения в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Send\")) {\n return `Отправка сообщения/уведомления/ссылки в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Set\") || value.startsWith(\"Unset\")) {\n return `Установка/сброс параметра или связи: \"${readable}\".`;\n }\n if (value.startsWith(\"Pick\") || value.startsWith(\"Return\")) {\n return `Операция движения заказа/ресурса: \"${readable}\".`;\n }\n if (value.startsWith(\"Book\") || value.startsWith(\"CheckIn\")) {\n return `Операция записи/чекина: \"${readable}\".`;\n }\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\n return `Значение \\`${value}\\` в enum \\`${enumName}\\` определяет режим/категорию \"${readableValue}\" в соответствующем API-сценарии.`;\n}\n\nfunction getEnumValueDescription(enumName: EnumName, value: string): string {\n if (enumName === \"NoteType\") {\n if (value === \"Html\") {\n return \"HTML-заметка: data содержит HTML-строку. Поддерживаемый сценарий SDK.\";\n }\n if (value === \"Markdown\") {\n return \"Markdown-заметка: data содержит исходный Markdown с сохранением пробелов и переносов. Поддерживаемый сценарий SDK.\";\n }\n\n return \"Текстовая заметка: доменное data всегда string, null/missing становятся пустой строкой, другое нестроковое содержимое отклоняется. Также формат чтения остальных серверных типов.\";\n }\n const explicitDescription = SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS[enumName]?.[value];\n if (explicitDescription) {\n return explicitDescription;\n }\n if (enumName === \"PaymentProviderType\") {\n return getPaymentProviderTypeDescription(value);\n }\n if (enumName === \"ParticipationFieldType\") {\n return getParticipationFieldTypeDescription(value);\n }\n if (enumName === \"OperationType\") {\n return getOperationTypeDescription(value);\n }\n if (DETAILED_TYPE_STATE_ENUMS.has(enumName) || EXTRA_DETAILED_ENUMS.has(enumName)) {\n return getDetailedEnumValueDescription(enumName, value);\n }\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Неопределенное/служебное значение enum \\`${enumName}\\` (\\`${value}\\`).`;\n }\n if (value === \"None\") {\n return `Явное отсутствие выбранного значения для enum \\`${enumName}\\`.`;\n }\n\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\n return {\n value: {\n description: summary,\n valueSchema: enumName,\n },\n ...valueEntries,\n };\n}\n\nexport const actionHistoryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryType\",\n \"Тип события истории действий (создание, обновление, удаление, участие и пр.).\",\n);\nexport const actionHistoryTypeFieldDocs = mapFieldDocsToStrings(actionHistoryTypeFieldDocEntries);\n\nexport const actionHistoryStateFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryState\",\n \"Состояние записи action-history (актуальна/архив/служебные состояния API).\",\n);\nexport const actionHistoryStateFieldDocs = mapFieldDocsToStrings(actionHistoryStateFieldDocEntries);\n\nexport const announcementStateFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementState\",\n \"Состояние уведомления (`New`, `Read`, `Hidden` и др.).\",\n);\nexport const announcementStateFieldDocs = mapFieldDocsToStrings(announcementStateFieldDocEntries);\n\nexport const itemViewSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemViewSortCondition\",\n \"Условие сортировки списков view в API (`/views/*`).\",\n);\nexport const itemViewSortConditionFieldDocs = mapFieldDocsToStrings(itemViewSortConditionFieldDocEntries);\n\nexport const participantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantType\",\n \"Тип/роль участника в participation-модели (владелец, гость, подписчик и т.п.).\",\n);\nexport const participantTypeFieldDocs = mapFieldDocsToStrings(participantTypeFieldDocEntries);\n\nexport const participantStateFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantState\",\n \"Состояние участия (ожидание, активен, отклонён, отозван и т.п.).\",\n);\nexport const participantStateFieldDocs = mapFieldDocsToStrings(participantStateFieldDocEntries);\n\nexport const accountingTransactionStateFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionState\",\n \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n);\nexport const accountingTransactionStateFieldDocs = mapFieldDocsToStrings(accountingTransactionStateFieldDocEntries);\n\nexport const operationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"OperationType\",\n \"Тип операции над объектом в связях/participation (по OpenAPI enum).\",\n);\nexport const operationTypeFieldDocs = mapFieldDocsToStrings(operationTypeFieldDocEntries);\n\nexport const torrowObjectTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TorrowObjectType\",\n \"Доменный тип объекта Torrow (`Contact`, `Case`, `Service`, `LoyaltyCard`, ...).\",\n);\nexport const torrowObjectTypeFieldDocs = mapFieldDocsToStrings(torrowObjectTypeFieldDocEntries);\n\nexport const itemSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemSortCondition\",\n \"Условие сортировки элементов в group/list API.\",\n);\nexport const itemSortConditionFieldDocs = mapFieldDocsToStrings(itemSortConditionFieldDocEntries);\n\nexport const objectSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ObjectSortCondition\",\n \"Условие сортировки объектов (`lm`, `cd`, кастомные поля — по OpenAPI).\",\n);\nexport const objectSortConditionFieldDocs = mapFieldDocsToStrings(objectSortConditionFieldDocEntries);\n\nexport const accountTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountType\",\n \"Тип аккаунта в auth-потоке (`Phone`, `Email`, ...).\",\n);\nexport const accountTypeFieldDocs = mapFieldDocsToStrings(accountTypeFieldDocEntries);\n\nexport const advisedItemTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AdvisedItemType\",\n \"Режим `GET /api/v1/search/adviseditems` (`NearLocation` / `Recommendation`). Query: **`AdvisedItemsSearchQuery`**.\",\n);\nexport const advisedItemTypeFieldDocs = mapFieldDocsToStrings(advisedItemTypeFieldDocEntries);\n\nexport const verificationMethodFieldDocEntries = createEnumFieldDocEntries(\n \"VerificationMethod\",\n \"Способ доставки/подтверждения кода входа (`SendCodeReq.preferredMethod`, `SendCodeResp.usedMethod`).\",\n);\nexport const verificationMethodFieldDocs = mapFieldDocsToStrings(verificationMethodFieldDocEntries);\n\nexport const tokenStatusFieldDocEntries = createEnumFieldDocEntries(\n \"TokenStatus\",\n \"Статус выдачи токенов в `TokenResp.status` (классический OTP → `TokenReady`; Mobile ID — polling).\",\n);\nexport const tokenStatusFieldDocs = mapFieldDocsToStrings(tokenStatusFieldDocEntries);\n\nexport const communicationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CommunicationType\",\n \"Канал коммуникации для подтверждения (`Sms`, `Email`, ...).\",\n);\nexport const communicationTypeFieldDocs = mapFieldDocsToStrings(communicationTypeFieldDocEntries);\n\nexport const accountingTransactionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionType\",\n \"Тип учетной транзакции (`Balance`, `Operation`).\",\n);\nexport const accountingTransactionTypeFieldDocs = mapFieldDocsToStrings(accountingTransactionTypeFieldDocEntries);\n\nexport const announcementCategoryFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementCategory\",\n \"Категория объявления/уведомления.\",\n);\nexport const announcementCategoryFieldDocs = mapFieldDocsToStrings(announcementCategoryFieldDocEntries);\n\nexport const announcementPriorityFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementPriority\",\n \"Приоритет объявления.\",\n);\nexport const announcementPriorityFieldDocs = mapFieldDocsToStrings(announcementPriorityFieldDocEntries);\n\nexport const announcementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementType\",\n \"Тип объявления (доменное событие, которое вызвало нотификацию).\",\n);\nexport const announcementTypeFieldDocs = mapFieldDocsToStrings(announcementTypeFieldDocEntries);\n\nexport const anyoneAccessFieldDocEntries = createEnumFieldDocEntries(\n \"AnyoneAccess\",\n \"Уровень доступа для «любого пользователя».\",\n);\nexport const anyoneAccessFieldDocs = mapFieldDocsToStrings(anyoneAccessFieldDocEntries);\n\nexport const archiveStateFieldDocEntries = createEnumFieldDocEntries(\"ArchiveState\", \"Состояние архивации объекта.\");\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(\"CaseState\", \"Жизненный цикл события/кейса.\");\nexport const caseStateFieldDocs = mapFieldDocsToStrings(caseStateFieldDocEntries);\n\nexport const caseTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseType\",\n \"Тип кейса по времени/формату отображения.\",\n);\nexport const caseTypeFieldDocs = mapFieldDocsToStrings(caseTypeFieldDocEntries);\n\nexport const deleteStateFieldDocEntries = createEnumFieldDocEntries(\"DeleteState\", \"Состояние удаления объекта.\");\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(\"Gender\", \"Пол контакта/пользователя.\");\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 \"Тип содержимого заметки SDK: Html, Markdown или Text. Другие серверные строки при чтении становятся Text.\",\n);\nexport const noteTypeFieldDocs = mapFieldDocsToStrings(noteTypeFieldDocEntries);\n\nexport const linkTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LinkType\",\n \"Тип связи parent↔child в `ItemLink` (User / Pinned). Флоу: `docs/agents/relations-flow.md`.\",\n);\nexport const linkTypeFieldDocs = mapFieldDocsToStrings(linkTypeFieldDocEntries);\n\nexport const participationFieldRequirementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldRequirementType\",\n \"Требование к полю участника (`OptionalField`/`RequiredField`).\",\n);\nexport const participationFieldRequirementTypeFieldDocs = mapFieldDocsToStrings(\n participationFieldRequirementTypeFieldDocEntries,\n);\n\nexport const participationFieldTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldType\",\n \"Тип поля анкеты/контактных данных участника.\",\n);\nexport const participationFieldTypeFieldDocs = mapFieldDocsToStrings(participationFieldTypeFieldDocEntries);\n\nexport const paymentProviderTypeFieldDocEntries = createEnumFieldDocEntries(\n \"PaymentProviderType\",\n \"Провайдер оплаты для билета/заказа.\",\n);\nexport const paymentProviderTypeFieldDocs = mapFieldDocsToStrings(paymentProviderTypeFieldDocEntries);\n\nexport const profileTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileType\",\n \"Роль контакта как профиля пользователя.\",\n);\nexport const profileTypeFieldDocs = mapFieldDocsToStrings(profileTypeFieldDocEntries);\n\nexport const profileUserAvailabilityFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileUserAvailability\",\n \"Доступность профиля/пользователя в расписании.\",\n);\nexport const profileUserAvailabilityFieldDocs = mapFieldDocsToStrings(profileUserAvailabilityFieldDocEntries);\n\nexport const reminderLocationDirectionFieldDocEntries = createEnumFieldDocEntries(\n \"ReminderLocationDirection\",\n \"Направление гео-триггера напоминания (вход/выход).\",\n);\nexport const reminderLocationDirectionFieldDocs = mapFieldDocsToStrings(reminderLocationDirectionFieldDocEntries);\n\nexport const reportDeliveryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ReportDeliveryType\",\n \"Способ доставки отчета.\",\n);\nexport const reportDeliveryTypeFieldDocs = mapFieldDocsToStrings(reportDeliveryTypeFieldDocEntries);\n\nexport const showCaseInTimetableTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ShowCaseInTimetableType\",\n \"Режим показа события в расписании.\",\n);\nexport const showCaseInTimetableTypeFieldDocs = mapFieldDocsToStrings(showCaseInTimetableTypeFieldDocEntries);\n\nexport const timetableDetailsVisibilityFieldDocEntries = createEnumFieldDocEntries(\n \"TimetableDetailsVisibility\",\n \"Глубина деталей в `getTimetable` query `visibility` и в ответе `TimetableCase.detailsVisibility`: `Time` — интервалы, `View` — полные события/заказы.\",\n);\nexport const timetableDetailsVisibilityFieldDocs = mapFieldDocsToStrings(timetableDetailsVisibilityFieldDocEntries);\n\nexport const ticketStateFieldDocEntries = createEnumFieldDocEntries(\"TicketState\", \"Состояние билета/оплаты.\");\nexport const ticketStateFieldDocs = mapFieldDocsToStrings(ticketStateFieldDocEntries);\n\nexport const ticketPaymentConfirmationSourceFieldDocEntries = createEnumFieldDocEntries(\n \"TicketPaymentConfirmationSource\",\n \"Источник подтверждения оплаты билета (`PaymentLink`, `Manager`, …).\",\n);\nexport const ticketPaymentConfirmationSourceFieldDocs = mapFieldDocsToStrings(\n ticketPaymentConfirmationSourceFieldDocEntries,\n);\n\nexport const usageTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageType\",\n \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n);\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageConditionType\",\n \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n);\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const sessionDurationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionDurationType\",\n \"Тип длительности сессии услуги (`SessionDurationProperties.sessionDurationType`). В JSON — строковый литерал OpenAPI.\",\n);\nexport const sessionDurationTypeFieldDocs = mapFieldDocsToStrings(sessionDurationTypeFieldDocEntries);\n\nexport const timeSelectionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TimeSelectionType\",\n \"Кто выбирает время сессии (`Consumer` / `Executor`). В JSON — строка OpenAPI.\",\n);\nexport const timeSelectionTypeFieldDocs = mapFieldDocsToStrings(timeSelectionTypeFieldDocEntries);\n\nexport const stateManagementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"StateManagementType\",\n \"Режим управления состоянием сессии (`Auto` / `Manual`). В JSON — строка OpenAPI.\",\n);\nexport const stateManagementTypeFieldDocs = mapFieldDocsToStrings(stateManagementTypeFieldDocEntries);\n\nexport const sessionPrecisionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionPrecisionType\",\n \"Точность сессии (`DateTime` / `Date`). В JSON — строка OpenAPI.\",\n);\nexport const sessionPrecisionTypeFieldDocs = mapFieldDocsToStrings(sessionPrecisionTypeFieldDocEntries);\n\nexport const userAccessLevelFieldDocEntries = createEnumFieldDocEntries(\n \"UserAccessLevel\",\n \"Уровень доступа для check-in/записи (`Authenticated` / `Unauthenticated`). В JSON — строка OpenAPI.\",\n);\nexport const userAccessLevelFieldDocs = mapFieldDocsToStrings(userAccessLevelFieldDocEntries);\n\nexport const loyaltyCardIssueTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardIssueType\",\n \"Способ выпуска карты лояльности (`Manual` / `AutoActive` / `AutoIssued`). В JSON — строка OpenAPI.\",\n);\nexport const loyaltyCardIssueTypeFieldDocs = mapFieldDocsToStrings(loyaltyCardIssueTypeFieldDocEntries);\n\nexport const loyaltyCardUpdateKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateKeyInformation\",\n \"Правило обновления ключевых полей карты. В JSON — строка OpenAPI (`NonKeyDisallowed`, …).\",\n);\nexport const loyaltyCardUpdateKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n);\n\nexport const loyaltyCardUpdateNonKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateNonKeyInformation\",\n \"Правило обновления non-key полей карты. В JSON — строка OpenAPI (`KeyDisallowed`, `KeyAllowed`).\",\n);\nexport const loyaltyCardUpdateNonKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n);\n","import { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowIdHelperFieldDocEntries = {\n getTorrowObjectTypeFromTorrowId: {\n description: \"Строго проверяет Torrow ID и возвращает известный SDK `TorrowObjectType` из числового кода ID.\",\n valueSchema: \"string → TorrowObjectType\",\n usage:\n \"Неизвестный numeric code даёт `TorrowIdError` с reason `unknown-object-type-code`; SDK не угадывает соответствие по порядку OpenAPI enum.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemTypeHelperFieldDocEntries = {\n getTorrowItemTypeFromTorrowId: {\n description: \"Возвращает `TorrowItemType`, закодированный в одном каноническом Torrow ID.\",\n valueSchema: \"string → TorrowItemType\",\n usage: \"Известные non-item типы (`User`, `File`) дают `unsupported-item-type`.\",\n },\n getTorrowItemTypeFromTorrowIds: {\n description: \"Возвращает общий `TorrowItemType` непустого однотипного списка Torrow ID.\",\n valueSchema: \"readonly string[] → TorrowItemType\",\n usage: \"Пустой список и смешанные item types дают типизированный `TorrowIdError`.\",\n },\n isTorrowItemType: {\n description: \"Runtime guard для внешней строки с семантическим item type (`Note`, `Contact`, ...).\",\n valueSchema: \"string → boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowIdHelperFieldDocs = mapFieldDocsToStrings(torrowIdHelperFieldDocEntries);\nexport const torrowItemTypeHelperFieldDocs = mapFieldDocsToStrings(torrowItemTypeHelperFieldDocEntries);\n","import {\n resourceItemPatchFieldDocEntries,\n resourcePaymentPatchPropertiesFieldDocEntries,\n resourcePaymentPatchParametersFieldDocEntries,\n resourcesPatchSdkMethodFieldDocEntries,\n} from \"./resource-patch-field-docs.js\";\nimport { caseItemPatchFieldDocEntries, casesPatchSdkMethodFieldDocEntries } from \"./case-patch-field-docs.js\";\nimport { serviceItemPatchFieldDocEntries } from \"./service-patch-field-docs.js\";\nimport {\n itemPricePatchPropertiesFieldDocEntries,\n itemPricePatchSettingFieldDocEntries,\n itemPricePatchInfoFieldDocEntries,\n itemPricePatchFieldsFieldDocEntries,\n} from \"./item-price-patch-field-docs.js\";\nimport {\n noteItemPatchFieldDocEntries,\n calendarItemPatchFieldDocEntries,\n calendarItemPatchScheduleRangeExceptionsFieldDocEntries,\n calendarItemPatchTimeRangeFieldDocEntries,\n notesPatchSdkMethodFieldDocEntries,\n calendarsPatchSdkMethodFieldDocEntries,\n} from \"./note-calendar-patch-field-docs.js\";\nimport {\n loyaltySystemItemPatchFieldDocEntries,\n loyaltySystemInitialSubscriptionPatchFieldDocEntries,\n} from \"./loyalty-system-patch-field-docs.js\";\nimport {\n contactItemPatchFieldDocEntries,\n contactCommunicationPatchFieldDocEntries,\n contactsPatchSdkMethodFieldDocEntries,\n} from \"./contact-patch-field-docs.js\";\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 torrowChildItemCreateOptionsFieldDocEntries,\n torrowItemCreateOptionsFieldDocEntries,\n} from \"./item-create-field-docs.js\";\nimport {\n getCalendarOptionsFieldDocEntries,\n getCaseOptionsFieldDocEntries,\n getContactOptionsFieldDocEntries,\n getContextOptionsFieldDocEntries,\n getLoyaltyCardOptionsFieldDocEntries,\n getLoyaltySystemOptionsFieldDocEntries,\n getNoteOptionsFieldDocEntries,\n getResourceOptionsFieldDocEntries,\n getServiceOptionsFieldDocEntries,\n torrowItemDeleteOptionsFieldDocEntries,\n torrowItemGetOptionsFieldDocEntries,\n torrowItemUpdateOptionsFieldDocEntries,\n updateCalendarItemOptionsFieldDocEntries,\n updateCaseItemOptionsFieldDocEntries,\n updateContactItemOptionsFieldDocEntries,\n updateResourceItemOptionsFieldDocEntries,\n updateServiceItemOptionsFieldDocEntries,\n} from \"./item-crud-options-field-docs.js\";\nimport {\n itemPatchOptionsFieldDocEntries,\n itemPatchResultFieldDocEntries,\n itemPatchFieldsFieldDocEntries,\n itemPatchImageFieldDocEntries,\n contextItemPatchFieldDocEntries,\n contextsPatchSdkMethodFieldDocEntries,\n} from \"./item-patch-field-docs.js\";\nimport {\n generateSecurityTokenReqFieldDocEntries,\n generateSecurityTokenRespFieldDocEntries,\n getShareItemSessionReqFieldDocEntries,\n participationFieldDocEntries,\n participationRespFieldDocEntries,\n profileWithErrorFieldDocEntries,\n sendLinkOfItemReqFieldDocEntries,\n sendLinkOfItemRespFieldDocEntries,\n shareItemReqFieldDocEntries,\n} from \"./loyalty-access-field-docs.js\";\nimport {\n accountingTransactionFieldDocEntries,\n actionHistoryInfoFieldDocEntries,\n actionHistoryListQueryFieldDocEntries,\n announcementInfoFieldDocEntries,\n announcementsListQueryFieldDocEntries,\n balanceValueFieldDocEntries,\n exportRequestFieldDocEntries,\n exportGraphFieldDocEntries,\n generateReportReqFieldDocEntries,\n generateReportRespFieldDocEntries,\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n getParticipationCountRespFieldDocEntries,\n fileInfoFieldDocEntries,\n putUrlRespFieldDocEntries,\n updateFileIdRespFieldDocEntries,\n importByFileRequestFieldDocEntries,\n importByUniqueNameRequestFieldDocEntries,\n loyaltyCardSubscriptionFieldDocEntries,\n createLoyaltyCardReqFieldDocEntries,\n initialTransactionFieldDocEntries,\n loyaltySystemsStatisticsReqFieldDocEntries,\n loyaltySystemsStatisticsRespFieldDocEntries,\n reportPropertiesFieldDocEntries,\n reportOptionsFieldDocEntries,\n torrowErrorClientFieldDocEntries,\n transactionInfoFieldDocEntries,\n updateAnnouncementStateReqFieldDocEntries,\n} from \"./operations-struct-field-docs.js\";\nimport { blockReasonFieldDocEntries, blockReasonsSdkMethodFieldDocEntries } from \"./block-reason-field-docs.js\";\nimport {\n apiKeyInfoFieldDocEntries,\n apiKeysSdkMethodFieldDocEntries,\n createApiKeyRequestFieldDocEntries,\n createApiKeyResponseFieldDocEntries,\n} from \"./api-keys-field-docs.js\";\nimport {\n contactsCommunicationSdkMethodFieldDocEntries,\n sendCommunicationCodeReqFieldDocEntries,\n sendCommunicationCodeRespFieldDocEntries,\n verifyCommunicationCodeReqFieldDocEntries,\n verifyCommunicationCodeRespFieldDocEntries,\n} from \"./contact-communication-field-docs.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\nimport {\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n torrowItemFacadeSdkMethodFieldDocEntries,\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n} from \"./item-social-facet-field-docs.js\";\nimport {\n resourceBehaviorSettingsFieldDocEntries,\n resourceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagParamsFieldDocEntries,\n} from \"./implicit-tag-params-field-docs.js\";\nimport {\n actionHistorySdkMethodFieldDocEntries,\n accountingTransactionsSdkMethodFieldDocEntries,\n announcementsSdkMethodFieldDocEntries,\n exportImportSdkMethodFieldDocEntries,\n loyaltyCardsSdkMethodFieldDocEntries,\n loyaltySystemsSdkMethodFieldDocEntries,\n reportsSdkMethodFieldDocEntries,\n userSdkMethodFieldDocEntries,\n userSettingsSdkMethodFieldDocEntries,\n} from \"./operations-field-docs.js\";\nimport {\n blockInfoFieldDocEntries,\n blockSettingsFieldDocEntries,\n deviceSettingsInfoFieldDocEntries,\n filterFieldDocEntries,\n layoutTypeValuesFieldDocEntries,\n metricsFieldDocEntries,\n notificationPropertiesFieldDocEntries,\n personalSolutionDataFieldDocEntries,\n solutionDataFieldDocEntries,\n userDeliveryWayFieldDocEntries,\n usageConditionFieldDocEntries,\n userSettingsInfoFieldDocEntries,\n viewBlockSettingsFieldDocEntries,\n} from \"./solution-user-settings-field-docs.js\";\nimport {\n accountTypeFieldDocEntries,\n accountingTransactionTypeFieldDocEntries,\n accountingTransactionStateFieldDocEntries,\n actionHistoryStateFieldDocEntries,\n actionHistoryTypeFieldDocEntries,\n advisedItemTypeFieldDocEntries,\n tokenStatusFieldDocEntries,\n verificationMethodFieldDocEntries,\n announcementCategoryFieldDocEntries,\n announcementPriorityFieldDocEntries,\n announcementStateFieldDocEntries,\n announcementTypeFieldDocEntries,\n anyoneAccessFieldDocEntries,\n archiveStateFieldDocEntries,\n availabilityTimeFieldDocEntries,\n availableResourcesFieldDocEntries,\n caseParticipantStateFieldDocEntries,\n caseParticipantTypeFieldDocEntries,\n caseStateFieldDocEntries,\n caseTypeFieldDocEntries,\n communicationTypeFieldDocEntries,\n deleteStateFieldDocEntries,\n deliveryChannelFieldDocEntries,\n deliveryStrategyFieldDocEntries,\n genderFieldDocEntries,\n imagePreviewSizeFieldDocEntries,\n itemSortConditionFieldDocEntries,\n itemViewSortConditionFieldDocEntries,\n noteTypeFieldDocEntries,\n objectSortConditionFieldDocEntries,\n operationTypeFieldDocEntries,\n participantStateFieldDocEntries,\n participantTypeFieldDocEntries,\n participationFieldRequirementTypeFieldDocEntries,\n participationFieldTypeFieldDocEntries,\n paymentProviderTypeFieldDocEntries,\n profileTypeFieldDocEntries,\n profileUserAvailabilityFieldDocEntries,\n reminderLocationDirectionFieldDocEntries,\n reportDeliveryTypeFieldDocEntries,\n showCaseInTimetableTypeFieldDocEntries,\n timetableDetailsVisibilityFieldDocEntries,\n ticketStateFieldDocEntries,\n ticketPaymentConfirmationSourceFieldDocEntries,\n torrowObjectTypeFieldDocEntries,\n usageConditionTypeFieldDocEntries as usageConditionTypeEnumFieldDocEntries,\n usageTypeFieldDocEntries as usageTypeEnumFieldDocEntries,\n sessionDurationTypeFieldDocEntries,\n timeSelectionTypeFieldDocEntries,\n stateManagementTypeFieldDocEntries,\n sessionPrecisionTypeFieldDocEntries,\n userAccessLevelFieldDocEntries,\n loyaltyCardIssueTypeFieldDocEntries,\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n} from \"./shared-enum-field-docs.js\";\nimport { timetableViewTypeValuesFieldDocEntries } from \"./calendar-item.js\";\nimport { contextIconPresetValuesFieldDocEntries } from \"./context-item.js\";\nimport { torrowIdHelperFieldDocEntries, torrowItemTypeHelperFieldDocEntries } from \"./torrow-id-field-docs.js\";\n\nexport const mcpOperationsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowItemCreateOptions: torrowItemCreateOptionsFieldDocEntries,\n TorrowChildItemCreateOptions: torrowChildItemCreateOptionsFieldDocEntries,\n TorrowItemGetOptions: torrowItemGetOptionsFieldDocEntries,\n TorrowItemUpdateOptions: torrowItemUpdateOptionsFieldDocEntries,\n TorrowItemDeleteOptions: torrowItemDeleteOptionsFieldDocEntries,\n GetCalendarOptions: getCalendarOptionsFieldDocEntries,\n GetContactOptions: getContactOptionsFieldDocEntries,\n GetContextOptions: getContextOptionsFieldDocEntries,\n GetNoteOptions: getNoteOptionsFieldDocEntries,\n GetResourceOptions: getResourceOptionsFieldDocEntries,\n GetServiceOptions: getServiceOptionsFieldDocEntries,\n GetCaseOptions: getCaseOptionsFieldDocEntries,\n GetLoyaltySystemOptions: getLoyaltySystemOptionsFieldDocEntries,\n GetLoyaltyCardOptions: getLoyaltyCardOptionsFieldDocEntries,\n UpdateCalendarItemOptions: updateCalendarItemOptionsFieldDocEntries,\n UpdateContactItemOptions: updateContactItemOptionsFieldDocEntries,\n UpdateResourceItemOptions: updateResourceItemOptionsFieldDocEntries,\n UpdateServiceItemOptions: updateServiceItemOptionsFieldDocEntries,\n UpdateCaseItemOptions: updateCaseItemOptionsFieldDocEntries,\n LoyaltySystemItemPatch: loyaltySystemItemPatchFieldDocEntries,\n LoyaltySystemInitialSubscriptionPatch: loyaltySystemInitialSubscriptionPatchFieldDocEntries,\n ContactItemPatch: contactItemPatchFieldDocEntries,\n ContactCommunicationPatch: contactCommunicationPatchFieldDocEntries,\n ContactsPatchSdkMethods: contactsPatchSdkMethodFieldDocEntries,\n NoteItemPatch: noteItemPatchFieldDocEntries,\n CalendarItemPatch: calendarItemPatchFieldDocEntries,\n CalendarItemPatchScheduleRangeExceptions: calendarItemPatchScheduleRangeExceptionsFieldDocEntries,\n CalendarItemPatchTimeRange: calendarItemPatchTimeRangeFieldDocEntries,\n NotesPatchSdkMethods: notesPatchSdkMethodFieldDocEntries,\n CalendarsPatchSdkMethods: calendarsPatchSdkMethodFieldDocEntries,\n ServiceItemPatch: serviceItemPatchFieldDocEntries,\n ItemPricePatchProperties: itemPricePatchPropertiesFieldDocEntries,\n ItemPricePatchSetting: itemPricePatchSettingFieldDocEntries,\n ItemPricePatchInfo: itemPricePatchInfoFieldDocEntries,\n ItemPricePatchFields: itemPricePatchFieldsFieldDocEntries,\n CaseItemPatch: caseItemPatchFieldDocEntries,\n CasesPatchSdkMethods: casesPatchSdkMethodFieldDocEntries,\n TorrowItemPatchFields: itemPatchFieldsFieldDocEntries,\n TorrowItemPatchImage: itemPatchImageFieldDocEntries,\n ResourceItemPatch: resourceItemPatchFieldDocEntries,\n ResourcePaymentPatchProperties: resourcePaymentPatchPropertiesFieldDocEntries,\n ResourcePaymentPatchParameters: resourcePaymentPatchParametersFieldDocEntries,\n ResourcesPatchSdkMethods: resourcesPatchSdkMethodFieldDocEntries,\n TorrowItemPatchOptions: itemPatchOptionsFieldDocEntries,\n TorrowItemPatchResult: itemPatchResultFieldDocEntries,\n ContextItemPatch: contextItemPatchFieldDocEntries,\n ContextsSdkMethods: contextsPatchSdkMethodFieldDocEntries,\n TorrowIdHelpers: { ...torrowIdHelperFieldDocEntries },\n TorrowItemTypeHelpers: { ...torrowItemTypeHelperFieldDocEntries },\n /** Общие методы {@link TorrowItemCoreFacade} — один источник правды; **Loyalty*SdkMethods** подмешивают подмножество + доменные методы. */\n TorrowItemCoreFacadeSdkMethods: { ...torrowItemCoreFacadeSdkMethodFieldDocEntries },\n /** {@link TorrowItemFacade} без photo: **cases**, **notes**, **services**, **calendars**, **contexts**, **resourceItems** (+ **contacts** кроме photo). Отдельно: booking/search/CRUD в других каталогах. */\n TorrowItemFacadeSdkMethods: { ...torrowItemFacadeSdkMethodFieldDocEntries },\n /** Как **Base**, плюс **`getPhotoInfo`/`getPhotoPutUrl`** — item-слой **`client.contacts`**. */\n TorrowItemFacadeContactsItemSdkMethods: { ...torrowItemFacadeContactsItemSdkMethodFieldDocEntries },\n /** Query `cascade` / `withPinnedItems` для `client.*.delete` (contacts, notes, cases, …). */\n ItemDeleteQuery: { ...itemDeleteQueryFieldDocEntries },\n /** Явный контракт неявных параметров из service.tags (формат `<value>:Suffix`). */\n ServiceImplicitTagParams: { ...serviceImplicitTagParamsFieldDocEntries },\n /** Утилиты SDK для парсинга параметров из service tags. */\n ServiceImplicitTagMethods: { ...serviceImplicitTagMethodsFieldDocEntries },\n /** Явный контракт managed параметров из resource.tags (`MarginTime`, `lockId`). */\n ResourceBehaviorSettings: { ...resourceBehaviorSettingsFieldDocEntries },\n /** Утилиты SDK для парсинга/merge managed resource tags. */\n ResourceImplicitTagMethods: { ...resourceImplicitTagMethodsFieldDocEntries },\n ActionHistorySdkMethods: { ...actionHistorySdkMethodFieldDocEntries },\n ActionHistoryListQuery: { ...actionHistoryListQueryFieldDocEntries },\n AccountingTransactionsSdkMethods: { ...accountingTransactionsSdkMethodFieldDocEntries },\n AnnouncementsSdkMethods: { ...announcementsSdkMethodFieldDocEntries },\n AnnouncementsListQuery: { ...announcementsListQueryFieldDocEntries },\n ExportImportSdkMethods: { ...exportImportSdkMethodFieldDocEntries },\n ReportsSdkMethods: { ...reportsSdkMethodFieldDocEntries },\n LoyaltySystemsSdkMethods: { ...loyaltySystemsSdkMethodFieldDocEntries },\n LoyaltyCardsSdkMethods: { ...loyaltyCardsSdkMethodFieldDocEntries },\n UserSdkMethods: { ...userSdkMethodFieldDocEntries },\n UserSettingsSdkMethods: { ...userSettingsSdkMethodFieldDocEntries },\n BlockReasonsSdkMethods: { ...blockReasonsSdkMethodFieldDocEntries },\n ContactsCommunicationSdkMethods: { ...contactsCommunicationSdkMethodFieldDocEntries },\n BlockReason: { ...blockReasonFieldDocEntries },\n ApiKeysSdkMethods: { ...apiKeysSdkMethodFieldDocEntries },\n ApiKeyInfo: { ...apiKeyInfoFieldDocEntries },\n CreateApiKeyRequest: { ...createApiKeyRequestFieldDocEntries },\n CreateApiKeyResponse: { ...createApiKeyResponseFieldDocEntries },\n SendCommunicationCodeReq: { ...sendCommunicationCodeReqFieldDocEntries },\n SendCommunicationCodeResp: { ...sendCommunicationCodeRespFieldDocEntries },\n VerifyCommunicationCodeReq: { ...verifyCommunicationCodeReqFieldDocEntries },\n VerifyCommunicationCodeResp: { ...verifyCommunicationCodeRespFieldDocEntries },\n GenerateSecurityTokenReq: { ...generateSecurityTokenReqFieldDocEntries },\n GenerateSecurityTokenResp: { ...generateSecurityTokenRespFieldDocEntries },\n ShareItemReq: { ...shareItemReqFieldDocEntries },\n GetShareItemSessionReq: { ...getShareItemSessionReqFieldDocEntries },\n SendLinkOfItemReq: { ...sendLinkOfItemReqFieldDocEntries },\n SendLinkOfItemResp: { ...sendLinkOfItemRespFieldDocEntries },\n Participation: { ...participationFieldDocEntries },\n ProfileWithError: { ...profileWithErrorFieldDocEntries },\n ParticipationResp: { ...participationRespFieldDocEntries },\n AccountingTransaction: { ...accountingTransactionFieldDocEntries },\n BalanceValue: { ...balanceValueFieldDocEntries },\n ActionHistoryInfo: { ...actionHistoryInfoFieldDocEntries },\n AnnouncementInfo: { ...announcementInfoFieldDocEntries },\n UpdateAnnouncementStateReq: { ...updateAnnouncementStateReqFieldDocEntries },\n ExportRequest: { ...exportRequestFieldDocEntries },\n ExportGraph: { ...exportGraphFieldDocEntries },\n ImportByFileRequest: { ...importByFileRequestFieldDocEntries },\n ImportByUniqueNameRequest: { ...importByUniqueNameRequestFieldDocEntries },\n GenerateReportReq: { ...generateReportReqFieldDocEntries },\n ReportOptions: { ...reportOptionsFieldDocEntries },\n ReportProperties: { ...reportPropertiesFieldDocEntries },\n GenerateReportResp: { ...generateReportRespFieldDocEntries },\n LoyaltyCardSubscription: { ...loyaltyCardSubscriptionFieldDocEntries },\n CreateLoyaltyCardReq: { ...createLoyaltyCardReqFieldDocEntries },\n InitialTransaction: { ...initialTransactionFieldDocEntries },\n LoyaltySystemsStatisticsReq: { ...loyaltySystemsStatisticsReqFieldDocEntries },\n LoyaltySystemsStatisticsResp: { ...loyaltySystemsStatisticsRespFieldDocEntries },\n GetLoyaltySystemsStatisticsReq: { ...getLoyaltySystemsStatisticsReqFieldDocEntries },\n GetLoyaltySystemsStatisticsResp: { ...getLoyaltySystemsStatisticsRespFieldDocEntries },\n GetParticipationCountResp: { ...getParticipationCountRespFieldDocEntries },\n FileInfo: { ...fileInfoFieldDocEntries },\n PutUrlResp: { ...putUrlRespFieldDocEntries },\n UpdateFileIdResp: { ...updateFileIdRespFieldDocEntries },\n TransactionInfo: { ...transactionInfoFieldDocEntries },\n TorrowErrorClient: { ...torrowErrorClientFieldDocEntries },\n ActionHistoryType: { ...actionHistoryTypeFieldDocEntries },\n ActionHistoryState: { ...actionHistoryStateFieldDocEntries },\n AnnouncementState: { ...announcementStateFieldDocEntries },\n ItemViewSortCondition: { ...itemViewSortConditionFieldDocEntries },\n ParticipantType: { ...participantTypeFieldDocEntries },\n ParticipantState: { ...participantStateFieldDocEntries },\n AccountingTransactionState: { ...accountingTransactionStateFieldDocEntries },\n AccountingTransactionType: { ...accountingTransactionTypeFieldDocEntries },\n OperationType: { ...operationTypeFieldDocEntries },\n TorrowObjectType: { ...torrowObjectTypeFieldDocEntries },\n ItemSortCondition: { ...itemSortConditionFieldDocEntries },\n ObjectSortCondition: { ...objectSortConditionFieldDocEntries },\n AccountType: { ...accountTypeFieldDocEntries },\n AdvisedItemType: { ...advisedItemTypeFieldDocEntries },\n VerificationMethod: { ...verificationMethodFieldDocEntries },\n TokenStatus: { ...tokenStatusFieldDocEntries },\n CommunicationType: { ...communicationTypeFieldDocEntries },\n AnnouncementCategory: { ...announcementCategoryFieldDocEntries },\n AnnouncementPriority: { ...announcementPriorityFieldDocEntries },\n AnnouncementType: { ...announcementTypeFieldDocEntries },\n AnyoneAccess: { ...anyoneAccessFieldDocEntries },\n ArchiveState: { ...archiveStateFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n AvailableResources: { ...availableResourcesFieldDocEntries },\n CaseParticipantState: { ...caseParticipantStateFieldDocEntries },\n CaseParticipantType: { ...caseParticipantTypeFieldDocEntries },\n CaseState: { ...caseStateFieldDocEntries },\n CaseType: { ...caseTypeFieldDocEntries },\n DeleteState: { ...deleteStateFieldDocEntries },\n DeliveryChannel: { ...deliveryChannelFieldDocEntries },\n DeliveryStrategy: { ...deliveryStrategyFieldDocEntries },\n Gender: { ...genderFieldDocEntries },\n ImagePreviewSize: { ...imagePreviewSizeFieldDocEntries },\n NoteType: { ...noteTypeFieldDocEntries },\n ParticipationFieldRequirementType: { ...participationFieldRequirementTypeFieldDocEntries },\n ParticipationFieldType: { ...participationFieldTypeFieldDocEntries },\n PaymentProviderType: { ...paymentProviderTypeFieldDocEntries },\n ProfileType: { ...profileTypeFieldDocEntries },\n ProfileUserAvailability: { ...profileUserAvailabilityFieldDocEntries },\n ReminderLocationDirection: { ...reminderLocationDirectionFieldDocEntries },\n ReportDeliveryType: { ...reportDeliveryTypeFieldDocEntries },\n ShowCaseInTimetableType: { ...showCaseInTimetableTypeFieldDocEntries },\n TimetableDetailsVisibility: { ...timetableDetailsVisibilityFieldDocEntries },\n TicketState: { ...ticketStateFieldDocEntries },\n TicketPaymentConfirmationSource: { ...ticketPaymentConfirmationSourceFieldDocEntries },\n UserSettingsInfo: { ...userSettingsInfoFieldDocEntries },\n SolutionData: { ...solutionDataFieldDocEntries },\n LayoutTypeValues: { ...layoutTypeValuesFieldDocEntries },\n TimetableViewTypeValues: { ...timetableViewTypeValuesFieldDocEntries },\n ContextIconPresetValues: { ...contextIconPresetValuesFieldDocEntries },\n BlockInfo: { ...blockInfoFieldDocEntries },\n UsageCondition: { ...usageConditionFieldDocEntries },\n UsageType: { ...usageTypeEnumFieldDocEntries },\n UsageConditionType: { ...usageConditionTypeEnumFieldDocEntries },\n SessionDurationType: { ...sessionDurationTypeFieldDocEntries },\n TimeSelectionType: { ...timeSelectionTypeFieldDocEntries },\n StateManagementType: { ...stateManagementTypeFieldDocEntries },\n SessionPrecisionType: { ...sessionPrecisionTypeFieldDocEntries },\n UserAccessLevel: { ...userAccessLevelFieldDocEntries },\n LoyaltyCardIssueType: { ...loyaltyCardIssueTypeFieldDocEntries },\n LoyaltyCardUpdateKeyInformation: { ...loyaltyCardUpdateKeyInformationFieldDocEntries },\n LoyaltyCardUpdateNonKeyInformation: { ...loyaltyCardUpdateNonKeyInformationFieldDocEntries },\n ViewBlockSettings: { ...viewBlockSettingsFieldDocEntries },\n BlockSettings: { ...blockSettingsFieldDocEntries },\n Filter: { ...filterFieldDocEntries },\n Metrics: { ...metricsFieldDocEntries },\n PersonalSolutionData: { ...personalSolutionDataFieldDocEntries },\n NotificationProperties: { ...notificationPropertiesFieldDocEntries },\n UserDeliveryWay: { ...userDeliveryWayFieldDocEntries },\n DeviceSettingsInfo: { ...deviceSettingsInfoFieldDocEntries },\n};\n","/**\n * Профили пользователя (**User** `/api/v1/user/profiles`): ответы и методы класса `Profiles`.\n * Сам Профиль в данных — `ContactItem`; смысл `profileType` см. в `contactItemFieldDocEntries.profileType`.\n * Тело **`POST /api/v1/user/profiles`** в типах SDK — **`UserProfileItemForAdd`**.\n */\n// MCP method descriptions: write-prep by effects only; do not name the internal\n// profile write-defaults helper (not a public package export). Helper symbol stays\n// intentional in docs/sdk-maintenance-guide.md and facade @link JSDoc.\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const profilesSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/user/profiles`. Разворачивает ответ **`ProfileListResp`**: возвращает **`ContactItem[]`** (Профили текущего пользователя; не общий CRUD `/api/v1/contacts`). Пустой массив, если **`profileList`** отсутствует или **`null`**. Требуется Bearer пользователя.\",\n valueSchema: \"→ ContactItem[]\",\n },\n add: {\n description:\n \"`POST /api/v1/user/profiles`. Тело: **`UserProfileItemForAdd`** (поля контакта для write из **`ContactItemForCreateOrUpdate`** плюс **`profileType`**, **`profileProperties`**, **`hasTimetable`**). OpenAPI ссылается на **`ContactItem`**. Фасад разворачивает **`AddProfileResp.profile`** и возвращает **`ContactItem`**. Мутация учётки: создаёт Профиль; не путать с CRUD `/api/v1/contacts`. Перед POST фасад заполняет `publicityType`, непустое `name` и нормализует поля контакта, включая `visitCard`.\",\n valueSchema: \"UserProfileItemForAdd → ContactItem\",\n },\n addByContactId: {\n description:\n \"`PUT /api/v1/user/profiles`. Тело в OpenAPI — **строка** (JSON-строка): `torrow id` уже существующего контакта, который нужно зарегистрировать как Профиль. Фасад возвращает **`ContactItem`** (`AddProfileResp.profile`). Не путать с `PUT` обновления обычного контакта по `/api/v1/contacts/{id}`.\",\n valueSchema: \"string (contactId) → ContactItem\",\n usage: \"Передай строку id существующего контакта; SDK сериализует её как JSON string.\",\n },\n updateProfileProperties: {\n description:\n \"`PUT /api/v1/user/profiles/{profileId}/profileproperties`. Тело: **`ProfileProperties`** (цвет карточки, доступность, заметка). Фасад возвращает **`torrowObject`** из ответа (если сервер его прислал), иначе `undefined`.\",\n valueSchema: \"ProfileProperties → TorrowObject | undefined\",\n },\n remove: {\n description:\n \"`DELETE /api/v1/user/profiles/{profileId}`. Удалить Профиль по id контакта. Фасад возвращает актуальный **`personalContactList`** как **`ContactItem[]`**. Не удаляй последний Профиль учётки и Профиль с живыми personal-link (как в apps).\",\n valueSchema: \"→ ContactItem[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileListRespFieldDocEntries = {\n profileList: {\n description:\n \"Массив контактов — **Профили** пользователя (`ContactItem`, ожидаемо с `profileType` вроде `MyProfile`). Пустой или отсутствует, если профилей нет.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const addProfileRespFieldDocEntries = {\n profile: {\n description: \"Созданный или связанный **Профиль** после операции добавления.\",\n valueSchema: \"ContactItem\",\n },\n personalContactList: {\n description: \"Устаревшее поле в схеме OpenAPI; предпочитай `profile` и актуальный список через `list`.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const removeProfileRespFieldDocEntries = {\n personalContactList: {\n description:\n \"Список контактов-Профилей после удаления (в том числе пустой), в форме ответа сервера на эту операцию.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateProfilePropertiesRespFieldDocEntries = {\n torrowObject: {\n description: \"Обёртка сервера над обновлённым объектом после смены свойств профиля (если вернулась).\",\n valueSchema: \"TorrowObject\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля тела `PUT .../profileproperties` — те же `ProfileProperties`, что у `ContactItem.profileProperties`. */\nexport const profilePropertiesFieldDocEntries = {\n id: {\n description: \"Идентификатор сущности свойств профиля (если задан в API).\",\n valueSchema: \"string | null\",\n },\n profileUserAvailability: {\n description: \"Доступность владельца профиля для отображения (занят, свободен, скрыт и т.д.).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: {\n description: \"Текстовая заметка к доступности.\",\n valueSchema: \"string | null\",\n },\n color: {\n description: \"Цвет акцента карточки Профиля в UI (часто hex).\",\n valueSchema: \"string | null\",\n examples: [\"#4a90d9\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilesSdkMethodFieldDocs = mapFieldDocsToStrings(profilesSdkMethodFieldDocEntries);\nexport const profileListRespFieldDocs = mapFieldDocsToStrings(profileListRespFieldDocEntries);\nexport const addProfileRespFieldDocs = mapFieldDocsToStrings(addProfileRespFieldDocEntries);\nexport const removeProfileRespFieldDocs = mapFieldDocsToStrings(removeProfileRespFieldDocEntries);\nexport const updateProfilePropertiesRespFieldDocs = mapFieldDocsToStrings(updateProfilePropertiesRespFieldDocEntries);\nexport const profilePropertiesFieldDocs = mapFieldDocsToStrings(profilePropertiesFieldDocEntries);\n","/**\n * Каталог **Профилей пользователя** (User API) для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n addProfileRespFieldDocEntries,\n profileListRespFieldDocEntries,\n profilePropertiesFieldDocEntries,\n profilesSdkMethodFieldDocEntries,\n removeProfileRespFieldDocEntries,\n updateProfilePropertiesRespFieldDocEntries,\n} from \"./user-profiles-field-docs.js\";\n\nexport const mcpUserProfilesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ProfilesSdkMethods: { ...profilesSdkMethodFieldDocEntries },\n ProfileListResp: { ...profileListRespFieldDocEntries },\n AddProfileResp: { ...addProfileRespFieldDocEntries },\n RemoveProfileResp: { ...removeProfileRespFieldDocEntries },\n UpdateProfilePropertiesResp: { ...updateProfilePropertiesRespFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n};\n","/**\n * Описания **представлений (views)** и тел запросов для MCP / агентов.\n * REST: `/api/v1/{domain}/.../views/...`; public SDK скрывает domain и выводит его из child ID, когда это возможно.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.user.listForParent`: `GET /api/v1/{domain}/{parentId}/views/user`. Список пользовательских представлений дочерних элементов под родителем (mind map). Query: `tags`, `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`. Ответ: массив `*View` по домену (`ContactView`, `NoteView`, …).\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.user.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/user`. Прямое создание User view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.saveToMindMap`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: массив **`ViewInfo`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n listAll: {\n description:\n \"`client.views.user.listAll`: `GET /api/v1/{domain}/views/user`. Все пользовательские представления по типу элемента без фильтра по одному `parentId`. Query: `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`.\",\n valueSchema: \"TorrowItemType + ViewListRootQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n get: {\n description:\n \"`client.views.user.get`: `GET /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.user.delete`: `DELETE /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`** (`DeleteResponse.deleteCount`).\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.user.updateOrder(parentId, orderedViews)`: `POST .../views/user/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const pinnedViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.pinned.listForParent`: `GET /api/v1/{domain}/{parentId}/views/pinned`. Список закреплённых; query как у `client.views.user.listForParent`.\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.pinned.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/pinned`. Прямое создание Pinned view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.includeToParent`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n get: {\n description:\n \"`client.views.pinned.get`: `GET .../views/pinned/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.pinned.delete`: `DELETE .../views/pinned/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`**.\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.pinned.updateOrder(parentId, orderedViews)`: `POST .../views/pinned/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocEntries = {\n pin: {\n description:\n \"`client.views.pin`: `POST .../views/user/{childId}/pin`. Query `alias`. Ответ: `ObjectInfo`. Конвертация **User → Pinned** (`LinkType`).\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`. Это переход User → Pinned, а не первоначальное создание связи. Для доменного создания используй `client.relations.saveToMindMap` / `includeToParent`; для списков и порядка — `client.views.*`. Связи: `docs/agents/relations-flow.md`.\",\n },\n unpin: {\n description:\n \"`client.views.unpin`: `POST .../unpin`. Для домена **`contacts`** путь: `.../views/pinned/{childId}/unpin`; для остальных (`notes`, `contexts`, `resources`, `services`, `cases`, `calendars`): `.../views/user/{childId}/unpin`. Query `alias`. Ответ: `ObjectInfo`. **Pinned → User**.\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`; затем выбирает сегмент `user` или `pinned`. Это переход Pinned → User, не замена `relations.exclude*`; не дублируется на `RelationsFacade`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createViewListReqFieldDocEntries = {\n childIdList: {\n description:\n \"Список id дочерних элементов, для которых создаются представления под выбранным родителем. В SDK facade список должен быть непустым и однотипным, поскольку определяет REST domain.\",\n valueSchema: \"string[] | null\",\n examples: ['[\"550e8400-e29b-41d4-a716-446655440000\"]'],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createViewListReqFieldDocs = mapFieldDocsToStrings(createViewListReqFieldDocEntries);\n\nexport const updateViewListOrderReqFieldDocEntries = {\n orderedViewList: {\n description: \"Новый порядок: пары `childId` и числовой `order` для сортировки в UI.\",\n valueSchema: \"ViewOrder[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateViewListOrderReqFieldDocs = mapFieldDocsToStrings(updateViewListOrderReqFieldDocEntries);\n\nexport const viewInfoFieldDocEntries = {\n itemLinkKey: {\n description: \"Ключ связи родитель–потомок для созданного представления.\",\n valueSchema: \"ItemLinkKey\",\n },\n itemLinkInfo: {\n description: \"Мета связи и объекта после операции.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewInfoFieldDocs = mapFieldDocsToStrings(viewInfoFieldDocEntries);\n\nexport const createViewListRespFieldDocEntries = {\n createdViewInfoList: {\n description: \"Список созданных view-записей с линками и метаданными.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateViewListOrderRespFieldDocEntries = {\n updatedViewInfoList: {\n description: \"Список view, для которых успешно обновился `order`.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deleteResponseFieldDocEntries = {\n deleteCount: {\n description:\n \"Количество удалённых записей. Для view-операций обычно 0 или 1; для `client.*.delete` — 1 при удалении только элемента, больше при `cascade: true` и/или `withPinnedItems: true` (см. **`ItemDeleteQuery`**).\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocs = mapFieldDocsToStrings(viewsSdkMethodFieldDocEntries);\nexport const userViewsSdkMethodFieldDocs = mapFieldDocsToStrings(userViewsSdkMethodFieldDocEntries);\nexport const pinnedViewsSdkMethodFieldDocs = mapFieldDocsToStrings(pinnedViewsSdkMethodFieldDocEntries);\nexport const createViewListRespFieldDocs = mapFieldDocsToStrings(createViewListRespFieldDocEntries);\nexport const updateViewListOrderRespFieldDocs = mapFieldDocsToStrings(updateViewListOrderRespFieldDocEntries);\nexport const deleteResponseFieldDocs = mapFieldDocsToStrings(deleteResponseFieldDocEntries);\n","/**\n * Каталог полей **представлений (views)** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n createViewListReqFieldDocEntries,\n createViewListRespFieldDocEntries,\n deleteResponseFieldDocEntries,\n updateViewListOrderRespFieldDocEntries,\n updateViewListOrderReqFieldDocEntries,\n viewInfoFieldDocEntries,\n pinnedViewsSdkMethodFieldDocEntries,\n userViewsSdkMethodFieldDocEntries,\n viewsSdkMethodFieldDocEntries,\n} from \"./views-field-docs.js\";\n\nexport const mcpViewsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ViewsSdkMethods: { ...viewsSdkMethodFieldDocEntries },\n UserViewsSdkMethods: { ...userViewsSdkMethodFieldDocEntries },\n PinnedViewsSdkMethods: { ...pinnedViewsSdkMethodFieldDocEntries },\n CreateViewListReq: { ...createViewListReqFieldDocEntries },\n CreateViewListResp: { ...createViewListRespFieldDocEntries },\n UpdateViewListOrderReq: { ...updateViewListOrderReqFieldDocEntries },\n UpdateViewListOrderResp: { ...updateViewListOrderRespFieldDocEntries },\n DeleteResponse: { ...deleteResponseFieldDocEntries },\n ViewInfo: { ...viewInfoFieldDocEntries },\n};\n","/**\n * Описания полей **запросов/ответов связей и mind map** (`components.schemas` в OpenAPI),\n * в том же формате {@link ItemFieldDoc}, что и у *Item — для промптов и MCP `inputSchema`.\n *\n * Соответствие REST: {@link RelationsFacade} в `src/resources/relations/RelationsFacade.ts`.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/**\n * Соответствие методов `TorrowClient.relations` телам запросов и путям REST.\n * Удобно для MCP-инструментов с именами `torrow_relations_include_to_parent` и т.д.\n */\nexport const relationsSdkMethodFieldDocEntries = {\n includeToParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/items`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order` и свойства item), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. **Pinned link** (`LinkType.Pinned`): доменная операция создания связи parent → child. Для чтения и порядка результата используй `client.views.pinned.*`.\",\n valueSchema: \"parentId + ItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. Канон apps AttachItemTask. Pin User→Pinned — `client.views.pin`, не этот метод. Не путай с прямым `views.pinned.create`. См. `docs/agents/relations-flow.md`.\",\n },\n includeForUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/foruser`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order`), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. Batch-операция создания нескольких User-связей под parent (`LinkType.User`). Для одного item предпочитай `saveToMindMap`; для чтения используй `client.views.user.*`.\",\n valueSchema: \"parentId + BaseItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. OpenAPI batch. torrow-apps для user link вызывает `saveToMindMap`, не этот эндпоинт. Предпочитай `saveToMindMap` в продукте.\",\n },\n excludeFromParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/items`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия Pinned-связи с родителя; для удаления конкретного view есть отдельный `client.views.pinned.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n excludeFromUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/fromuser`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия User-связи; для удаления конкретного view есть отдельный `client.views.user.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n includeToGroups: {\n description:\n \"`PUT /api/v1/{domain}/include/togroups`. Тело: `IncludeToGroupsReq`. Ответ: `IncludeExcludeResp`. Массовое включение в группы (ACL).\",\n valueSchema: \"IncludeToGroupsReq → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `groupIds`; список должен быть непустым и однотипным. Члены группы — `search.*(groupIds)`, не `listGroups`. UI apps часто `updateGroups` на item.\",\n },\n excludeFromGroups: {\n description: \"`PUT /api/v1/{domain}/exclude/fromgroups`. Тело: `ExcludeFromGroupsReq`. Ответ: `ExcludeResp`.\",\n valueSchema: \"ExcludeFromGroupsReq → ExcludeResp\",\n usage: \"Domain SDK выводит из `itemIds`; список должен быть непустым и однотипным.\",\n },\n saveToMindMap: {\n description:\n \"`PUT /api/v1/{domain}/{itemId}/savetomindmap`. Тело: `SaveItemToMindMapReq`. Ответ: `Participation`. Доменная операция сохранения **одного item** в личную структуру (`LinkType.User`); для чтения результата используй `client.views.user.*`.\",\n valueSchema: \"SaveItemToMindMapReq → Participation\",\n usage:\n \"Domain SDK выводит из `itemId` аргумента. Передавай `offlinable: true`, `parentItemId`, `userProfileId`. Не путать с participation accept на item-фасаде.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemLinkKeyFieldDocEntries = {\n parentId: {\n description: \"Идентификатор родительского элемента в связи (mind map / иерархия).\",\n valueSchema: \"string (torrow id)\",\n },\n itemId: {\n description: \"Идентификатор дочернего или связанного элемента.\",\n valueSchema: \"string (torrow id)\",\n },\n ownerId: {\n description: \"Владелец связи (профиль/пользователь), если применимо к персональному представлению.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** OpenAPI `ItemLink` — связь parent↔child в view/hit (`NoteView.itemLink` и т.п.). */\nexport const itemLinkFieldDocEntries = {\n parentId: {\n description: \"Родительский элемент связи.\",\n valueSchema: \"string | null\",\n },\n meta: {\n description: \"Метаданные связи (версия и т.п.).\",\n valueSchema: \"ObjectInfo\",\n },\n itemId: {\n description: \"Дочерний / связанный элемент.\",\n valueSchema: \"string | null\",\n },\n linkType: {\n description: \"Тип связи User / Pinned (и пр.). Флоу: `docs/agents/relations-flow.md`.\",\n valueSchema: \"LinkType\",\n usage: \"Assert в examples — best-effort; membership в listUser/listPinned — канон проверки.\",\n },\n order: {\n description: \"Порядок среди соседей под родителем.\",\n valueSchema: \"int32 | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для этой связи.\",\n valueSchema: \"string | null\",\n },\n tags: {\n description: \"Теги связи.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includedLinkMetaFieldDocEntries = {\n key: {\n description: \"Составной ключ созданной или обновлённой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n info: {\n description: \"Мета связи (версия и т.п.) после include.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludedLinkMetaFieldDocEntries = {\n key: {\n description: \"Ключ удалённой или затронутой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n count: {\n description: \"Число затронутых связей/записей для данного ключа (контракт API).\",\n examples: [\"1\", \"0\"],\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Torrow id элемента, который включают под родителя в иерархии.\",\n usage: \"Обязательное поле в каждом элементе `itemPropertiesList` для `includeToParent`.\",\n },\n order: {\n description: \"Порядок сортировки среди детей одного родителя (меньше — выше в списке, согласно клиенту).\",\n examples: [\"0\", \"1\", \"10\"],\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги связи элемента с родителем (фильтры, группировка в UI).\",\n examples: ['[\"важное\"]', \"[]\"],\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для данной связи.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее: теги по id элемента. Предпочитать `tags`.\",\n valueSchema: \"deprecated map\",\n },\n aliasByItemId: {\n description: \"Устаревшее: псевдонимы по id. Предпочитать `alias`.\",\n valueSchema: \"deprecated map\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const baseItemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Элемент, который добавляют в персональное представление пользователя под `parentId` маршрута.\",\n usage: \"Используется в `IncludeForUserReq` (include/foruser).\",\n },\n order: {\n description: \"Порядок узла в списке представления пользователя.\",\n examples: [\"0\", \"1\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const groupItemPropertiesFieldDocEntries = {\n itemId: {\n description:\n \"Элемент, включаемый в каждую из групп из `IncludeToGroupsReq.groupIds` (список id групп задаётся на уровне запроса, не здесь).\",\n },\n participantType: {\n description: \"Роль участия элемента в группе (Owner, Editor, Reader, …).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"Editor\", \"Owner\"],\n },\n order: {\n description: \"Порядок внутри группы.\",\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги для связи элемент–группа.\",\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним в группе.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n aliasByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToParentReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Список детей, привязываемых к `parentId` из URL (`PUT .../{parentId}/include/items`).\",\n valueSchema: \"ItemProperties[]\",\n usage: \"Сценарий «прикрепить элемент к контакту/контексту/…» в продукте.\",\n },\n versionToCheck: {\n description: \"Ожидаемая версия родителя для оптимистичной блокировки; несовпадение — конфликт.\",\n examples: [\"1\", \"18\"],\n valueSchema: \"int32 | null\",\n usage: \"Берётся из `parent.meta.version`, если нужна проверка.\",\n },\n isNeedAnnouncement: {\n description: \"Сгенерировать уведомление/анонс об изменении для подписчиков.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeForUserReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы и порядок для добавления в mind map **текущего пользователя** под родителем из пути.\",\n valueSchema: \"BaseItemProperties[]\",\n usage: \"Маршрут `include/foruser`; отличается от include/items тем, что работает с персональным представлением.\",\n },\n versionToCheck: {\n description: \"Версия родителя для проверки при изменении (если API ожидает).\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Нужен ли анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeReqFieldDocEntries = {\n itemIds: {\n description:\n \"Список 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:\n \"Элементы с опциональной ролью (`participantType`), порядком и тегами; каждый `itemId` будет связан со **всеми** `groupIds`.\",\n valueSchema: \"GroupItemProperties[]\",\n },\n parentId: {\n description: \"Общий родительский контекст для операции (если задан в API).\",\n valueSchema: \"string | null\",\n },\n groupIds: {\n description: \"Идентификаторы групп (элементов-групп), в которые включают перечисленные `itemId`.\",\n valueSchema: \"string[]\",\n usage: \"Маршрут без `{parentId}` в пути: `PUT /api/v1/{domain}/include/togroups`.\",\n },\n recursive: {\n description: \"Рекурсивное включение в подгруппы (семантика сервера).\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n versionToCheck: {\n description: \"Версия для проверки согласованности.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeFromGroupsReqFieldDocEntries = {\n groupIds: {\n description: \"Группы, из которых убирают элементы.\",\n valueSchema: \"string[]\",\n },\n itemIds: {\n description: \"Элементы для исключения из указанных групп.\",\n valueSchema: \"string[]\",\n },\n versionToCheck: {\n description: \"Версия для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const saveItemToMindMapReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль пользователя, для чьего mind map применяется операция (если отличается от токена).\",\n valueSchema: \"string | null\",\n },\n parentItemId: {\n description:\n \"Родитель для **User-link placement** (`client.relations.saveToMindMap`). Для participation accept часто не нужен — см. `participation-flow.md`. `null` — по правилам API (корень / снятие).\",\n valueSchema: \"string | null\",\n },\n alias: {\n description: \"Отображаемый псевдоним узла в карте.\",\n valueSchema: \"string | null\",\n },\n offlinable: {\n description:\n \"Офлайн-доступность узла. Для placement apps обычно `true`; не обязателен для accept offer / `securityToken` — см. `participation-flow.md`.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n order: {\n description: \"Позиция среди соседей в ветке.\",\n valueSchema: \"int32 | null\",\n },\n versionToCheck: {\n description: \"Версия **самого элемента** `itemId` из пути, если требуется проверка.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n securityToken: {\n description: \"Гостевой или ограниченный доступ по токену (как в других операциях API).\",\n valueSchema: \"string | null\",\n },\n participantType: {\n description: \"Тип участия при сохранении в mind map (например PublicReader для публичной карточки).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"PublicReader\", \"Owner\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeRespFieldDocEntries = {\n success: {\n description: \"Признак успешного include на стороне сервера.\",\n examples: [\"true\"],\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Метаданные по созданным/изменённым связям.\",\n valueSchema: \"IncludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeRespFieldDocEntries = {\n success: {\n description: \"Успешность exclude.\",\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Сводка по исключённым связям (ключи и счётчики).\",\n valueSchema: \"ExcludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeExcludeRespFieldDocEntries = {\n includeResp: {\n description: \"Результат части include, если в одном ответе объединены операции.\",\n valueSchema: \"IncludeResp\",\n },\n excludeResp: {\n description: \"Результат части exclude.\",\n valueSchema: \"ExcludeResp\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const relationsSdkMethodFieldDocs = mapFieldDocsToStrings(\n relationsSdkMethodFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const itemPropertiesFieldDocs = mapFieldDocsToStrings(\n itemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const baseItemPropertiesFieldDocs = mapFieldDocsToStrings(\n baseItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const groupItemPropertiesFieldDocs = mapFieldDocsToStrings(\n groupItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeToParentReqFieldDocs = mapFieldDocsToStrings(\n includeToParentReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeForUserReqFieldDocs = mapFieldDocsToStrings(\n includeForUserReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeReqFieldDocs = mapFieldDocsToStrings(excludeReqFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeToGroupsReqFieldDocs = mapFieldDocsToStrings(\n includeToGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeFromGroupsReqFieldDocs = mapFieldDocsToStrings(\n excludeFromGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const saveItemToMindMapReqFieldDocs = mapFieldDocsToStrings(\n saveItemToMindMapReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const includeRespFieldDocs = mapFieldDocsToStrings(includeRespFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const excludeRespFieldDocs = mapFieldDocsToStrings(excludeRespFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeExcludeRespFieldDocs = mapFieldDocsToStrings(\n includeExcludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkKeyFieldDocs = mapFieldDocsToStrings(itemLinkKeyFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const itemLinkFieldDocs = mapFieldDocsToStrings(itemLinkFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includedLinkMetaFieldDocs = mapFieldDocsToStrings(\n includedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludedLinkMetaFieldDocs = mapFieldDocsToStrings(\n excludedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","import { mcpSdkErrorFieldCatalog } from \"./sdk-error-field-docs.js\";\n/**\n * Каталог описаний схем **связей и mind map** для MCP / агентов.\n * Имена верхнего уровня совпадают с `components.schemas` в OpenAPI (кроме `RelationsSdkMethods`).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mcpBookingFieldCatalog } from \"./mcp-booking-catalog.js\";\nimport { mcpItemFieldCatalog } from \"./mcp-field-catalog.js\";\nimport { mcpAuthFieldCatalog } from \"./mcp-auth-catalog.js\";\nimport { mcpSearchFieldCatalog } from \"./mcp-search-catalog.js\";\nimport { mcpNotesFieldCatalog } from \"./mcp-notes-catalog.js\";\nimport { mcpOperationsFieldCatalog } from \"./mcp-operations-catalog.js\";\nimport { mcpUserProfilesFieldCatalog } from \"./mcp-user-profiles-catalog.js\";\nimport { mcpViewsFieldCatalog } from \"./mcp-views-catalog.js\";\nimport {\n baseItemPropertiesFieldDocEntries,\n excludedLinkMetaFieldDocEntries,\n excludeFromGroupsReqFieldDocEntries,\n excludeReqFieldDocEntries,\n excludeRespFieldDocEntries,\n includeExcludeRespFieldDocEntries,\n includeForUserReqFieldDocEntries,\n includedLinkMetaFieldDocEntries,\n includeRespFieldDocEntries,\n includeToGroupsReqFieldDocEntries,\n includeToParentReqFieldDocEntries,\n itemLinkKeyFieldDocEntries,\n itemLinkFieldDocEntries,\n itemPropertiesFieldDocEntries,\n groupItemPropertiesFieldDocEntries,\n relationsSdkMethodFieldDocEntries,\n saveItemToMindMapReqFieldDocEntries,\n} from \"./relations-field-docs.js\";\nimport { linkTypeFieldDocEntries } from \"./shared-enum-field-docs.js\";\n\nexport const mcpRelationFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы класса `TorrowClient.relations` ↔ OpenAPI пути и схемы тел. */\n RelationsSdkMethods: { ...relationsSdkMethodFieldDocEntries },\n /** `ItemLink.linkType` — User / Pinned (флоу: `docs/agents/relations-flow.md`). */\n LinkType: { ...linkTypeFieldDocEntries },\n ItemLink: { ...itemLinkFieldDocEntries },\n ItemLinkKey: { ...itemLinkKeyFieldDocEntries },\n IncludedLinkMeta: { ...includedLinkMetaFieldDocEntries },\n ExcludedLinkMeta: { ...excludedLinkMetaFieldDocEntries },\n ItemProperties: { ...itemPropertiesFieldDocEntries },\n BaseItemProperties: { ...baseItemPropertiesFieldDocEntries },\n GroupItemProperties: { ...groupItemPropertiesFieldDocEntries },\n IncludeToParentReq: { ...includeToParentReqFieldDocEntries },\n IncludeForUserReq: { ...includeForUserReqFieldDocEntries },\n ExcludeReq: { ...excludeReqFieldDocEntries },\n IncludeToGroupsReq: { ...includeToGroupsReqFieldDocEntries },\n ExcludeFromGroupsReq: { ...excludeFromGroupsReqFieldDocEntries },\n SaveItemToMindMapReq: { ...saveItemToMindMapReqFieldDocEntries },\n IncludeResp: { ...includeRespFieldDocEntries },\n ExcludeResp: { ...excludeRespFieldDocEntries },\n IncludeExcludeResp: { ...includeExcludeRespFieldDocEntries },\n};\n\n/** Объединение каталогов *Item, связей, записи/оплаты и представлений — один объект для генерации MCP. */\nexport const mcpFullFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ...mcpItemFieldCatalog,\n ...mcpRelationFieldCatalog,\n ...mcpBookingFieldCatalog,\n ...mcpSdkErrorFieldCatalog,\n ...mcpViewsFieldCatalog,\n ...mcpUserProfilesFieldCatalog,\n ...mcpAuthFieldCatalog,\n ...mcpSearchFieldCatalog,\n ...mcpNotesFieldCatalog,\n ...mcpOperationsFieldCatalog,\n};\n\nexport { mcpAuthFieldCatalog };\nexport { mcpSearchFieldCatalog };\nexport { mcpNotesFieldCatalog };\nexport { mcpOperationsFieldCatalog };\nexport { mcpBookingFieldCatalog };\nexport { mcpViewsFieldCatalog };\nexport { mcpUserProfilesFieldCatalog };\n"],"mappings":"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AA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,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;AA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","names":["VerificationMethodValues","TokenStatusValues","AvailableResourcesValues","NoteTypeValues","PaymentProviderTypeValues","UsageConditionTypeWireValues","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageTypeFieldDocs","usageConditionTypeFieldDocEntries","usageConditionTypeFieldDocs","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageConditionTypeFieldDocEntries","profilePropertiesFieldDocEntries","profilePropertiesFieldDocEntries"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/field-docs/item-patch-field-docs.ts","../../../src/field-docs/sdk-error-field-docs.ts","../../../src/resources/common/implicit-tag-params.ts","../../../src/resources/services/behavior-settings.ts","../../../src/field-docs/service-behavior-settings-field-docs.ts","../../../src/field-docs/field-doc-entry.ts","../../../src/field-docs/item-create-field-docs.ts","../../../src/field-docs/item-delete-query-field-docs.ts","../../../src/field-docs/item-crud-options-field-docs.ts","../../../src/field-docs/torrow-item-base.ts","../../../src/field-docs/nested/contact-visit-card.ts","../../../src/field-docs/contact-item.ts","../../../src/field-docs/note-item.ts","../../../src/field-docs/notes-field-docs.ts","../../../src/resources/contexts/context-icon-preset.ts","../../../src/field-docs/context-item.ts","../../../src/field-docs/calendar-item.ts","../../../src/field-docs/loyalty-system-item.ts","../../../src/field-docs/session-checkin-field-docs.ts","../../../src/field-docs/resource-item.ts","../../../src/field-docs/service-item.ts","../../../src/field-docs/case-item.ts","../../../src/field-docs/nested/object-info.ts","../../../src/field-docs/nested/personal-info.ts","../../../src/field-docs/mcp-field-catalog.ts","../../../src/field-docs/booking-wizard-field-docs.ts","../../../src/field-docs/mcp-booking-catalog.ts","../../../src/field-docs/auth-token-field-docs.ts","../../../src/field-docs/mcp-auth-catalog.ts","../../../src/field-docs/search-field-docs.ts","../../../src/field-docs/mcp-search-catalog.ts","../../../src/field-docs/mcp-notes-catalog.ts","../../../src/field-docs/resource-patch-field-docs.ts","../../../src/field-docs/case-patch-field-docs.ts","../../../src/field-docs/item-price-patch-field-docs.ts","../../../src/field-docs/service-patch-field-docs.ts","../../../src/field-docs/note-calendar-patch-field-docs.ts","../../../src/field-docs/loyalty-system-patch-field-docs.ts","../../../src/field-docs/contact-patch-field-docs.ts","../../../src/field-docs/loyalty-access-field-docs.ts","../../../src/field-docs/operations-struct-field-docs.ts","../../../src/field-docs/block-reason-field-docs.ts","../../../src/field-docs/api-keys-field-docs.ts","../../../src/field-docs/contact-communication-field-docs.ts","../../../src/field-docs/item-social-facet-field-docs.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/resources/auth/auth-enum-values.ts","../../../src/resources/common/anyone-access.ts","../../../src/resources/common/available-resources.ts","../../../src/resources/cases/types.ts","../../../src/resources/contacts/types.ts","../../../src/resources/notes/types.ts","../../../src/resources/common/personal-list.ts","../../../src/resources/common/participation-field.ts","../../../src/resources/services/types.ts","../../../src/resources/common/payment-provider-type.ts","../../../src/resources/common/usage-condition-type.ts","../../../src/resources/resources/types.ts","../../../src/resources/common/user-access-level.ts","../../../src/resources/loyalty-systems/types.ts","../../../src/field-docs/shared-enum-field-docs.ts","../../../src/field-docs/torrow-id-field-docs.ts","../../../src/field-docs/mcp-operations-catalog.ts","../../../src/field-docs/user-profiles-field-docs.ts","../../../src/field-docs/mcp-user-profiles-catalog.ts","../../../src/field-docs/views-field-docs.ts","../../../src/field-docs/mcp-views-catalog.ts","../../../src/field-docs/relations-field-docs.ts","../../../src/field-docs/mcp-relation-catalog.ts"],"sourcesContent":["import type { ContextsFacade } from \"../resources/contexts/ContextsFacade.js\";\nimport type { ContextItemPatch } from \"../resources/contexts/types.js\";\nimport type {\n TorrowItemPatchOptions,\n TorrowItemPatchResult,\n TorrowItemPatchFields,\n TorrowItemPatchImage,\n} from \"../resources/common/item-patch-types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие опции patch; отключить CAS или включить announcement нельзя. */\nexport const itemPatchOptionsFieldDocEntries = {\n versionToCheck: {\n description:\n \"Ожидаемая положительная int32 версия всего item; отсутствие использует внутренний GET, сравнение до no-op.\",\n },\n signal: { description: \"Отмена GET/PUT; отмена после dispatch не доказывает отсутствие изменения.\" },\n} satisfies Record<keyof TorrowItemPatchOptions, ItemFieldDoc>;\n/** Результат без обязательного readback. */\nexport const itemPatchResultFieldDocEntries = {\n itemId: { description: \"Канонический проверенный ID цели.\" },\n item: {\n description: \"Реальный GET при no-op либо PUT ACK после доменной проекции; версия только item.meta.version.\",\n },\n changed: { description: \"false: PUT отсутствует; true: matching ACK подтверждает запись основного документа.\" },\n} satisfies Record<keyof TorrowItemPatchResult<unknown>, ItemFieldDoc>;\n/** Все и только подтверждённые поля root Context update. */\nexport const contextItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла; null снимает изображение; URL/eTag не принимаются.\" },\n color: { description: \"#RRGGBB; null/empty не поддерживаются. Сервер может нормализовать регистр.\" },\n description: { description: \"Строка либо null; null/empty очищает описание.\" },\n} satisfies Record<keyof ContextItemPatch, ItemFieldDoc>;\n/** Метод конкретного фасада, не новый универсальный метод Core. */\nexport const contextsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/contexts/{id}; поля name/image/color/description, Full/UpdateItem/version обязательны; no-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: ContextItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ContextItem>\",\n },\n} satisfies Record<Extract<keyof ContextsFacade, \"patch\">, ItemFieldDoc>;\n\n/** Общие поля подключаются только при подтверждённой root редактируемости. */\nexport const itemPatchFieldsFieldDocEntries = {\n name: { description: \"Непустое название без trim; пропуск сохраняет.\" },\n image: { description: \"Ссылка {id} загруженного файла; null снимает изображение, пропуск сохраняет.\" },\n} satisfies Record<keyof TorrowItemPatchFields, ItemFieldDoc>;\n/** Вход файла не принимает URL или серверные метаданные. */\nexport const itemPatchImageFieldDocEntries = {\n id: { description: \"Непустой ID файла, который загружается отдельным API до patch.\" },\n} satisfies Record<keyof TorrowItemPatchImage, ItemFieldDoc>;\n","import {\n FileMetadataErrorReason,\n FileMetadataOperation,\n FileMetadataFailureAt,\n ProfileEffectStep,\n ProfileErrorReason,\n ProfileFailureAt,\n ProfileOperation,\n type ProfileErrorDetail,\n type FileMetadataErrorDetail,\n AuthSessionEffectStep,\n AuthSessionErrorReason,\n OtpErrorReason,\n TorrowSdkErrorDomain,\n TorrowSdkErrorCategory,\n TorrowSdkEffectArea,\n TorrowSdkEffectState,\n TorrowSdkRequestState,\n ItemPatchEffectStep,\n type ItemPatchErrorDetail,\n type AuthSessionErrorDetail,\n type OtpErrorDetail,\n} from \"../http/TorrowSdkError.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие причины SDK, независимо от результата записи. */\nexport const torrowSdkErrorCategoryFieldDocEntries = {\n [TorrowSdkErrorCategory.InvalidInput]: { description: \"Неверные параметры выбранной операции.\" },\n [TorrowSdkErrorCategory.InvalidState]: { description: \"Текущее состояние не позволяет выполнить операцию.\" },\n [TorrowSdkErrorCategory.AccessDenied]: { description: \"Подтверждённый отказ доступа, включая HTTP 403.\" },\n [TorrowSdkErrorCategory.InsufficientData]: {\n description: \"Недостаточно данных для безопасного предметного действия.\",\n },\n [TorrowSdkErrorCategory.InvalidResponse]: {\n description: \"Полученное тело или подтверждение не соответствует контракту.\",\n },\n [TorrowSdkErrorCategory.VersionConflict]: {\n description: \"Доказанный локальный или серверный конфликт версии; один HTTP 409/500 этого не доказывает.\",\n },\n [TorrowSdkErrorCategory.AuthenticationRequired]: { description: \"Требуется аутентификация, включая HTTP 401.\" },\n [TorrowSdkErrorCategory.UnsupportedOperation]: { description: \"Выбранная возможность не поддерживается.\" },\n [TorrowSdkErrorCategory.RateLimited]: {\n description: \"Ограничение частоты, включая HTTP 429; backoff выбирает приложение.\",\n },\n [TorrowSdkErrorCategory.HttpFailure]: { description: \"Прочий HTTP-отказ; исходный статус отделён от категории.\" },\n [TorrowSdkErrorCategory.TransportFailure]: {\n description: \"Распознанный транспортный сбой; текст причины не является эвристикой.\",\n },\n [TorrowSdkErrorCategory.StorageFailure]: { description: \"Сбой хранилища внутри выбранной составной операции.\" },\n [TorrowSdkErrorCategory.Cancelled]: { description: \"Отмена; после начала отправки не доказывает отсутствие записи.\" },\n [TorrowSdkErrorCategory.Unknown]: {\n description: \"Причина зависимости не распознана; исходная диагностика доступна явно.\",\n },\n} satisfies Record<TorrowSdkErrorCategory, ItemFieldDoc>;\n/** Маркер запроса относится только к указанному fetch, не к общей истории исполнения. */\nexport const torrowSdkRequestStateFieldDocEntries = {\n [TorrowSdkRequestState.NotStarted]: {\n description: \"fetch соответствующего запроса ещё не вызван; более ранние шаги могли выполниться.\",\n },\n [TorrowSdkRequestState.Started]: { description: \"Начат fetch; это не подтверждает доставку или применение записи.\" },\n} satisfies Record<TorrowSdkRequestState, ItemFieldDoc>;\n/** Области описанных предметных изменений. */\nexport const torrowSdkEffectAreaFieldDocEntries = {\n [TorrowSdkEffectArea.Remote]: { description: \"Выбранное изменение на сервере.\" },\n [TorrowSdkEffectArea.SessionMemory]: { description: \"Изменение памяти текущей сессии.\" },\n [TorrowSdkEffectArea.Storage]: { description: \"Изменение постоянного хранилища токенов.\" },\n} satisfies Record<TorrowSdkEffectArea, ItemFieldDoc>;\n/** Доказанность описанного изменения, независимо от причины отказа. */\nexport const torrowSdkEffectStateFieldDocEntries = {\n [TorrowSdkEffectState.NotApplied]: { description: \"Доказано отсутствие конкретного изменения.\" },\n [TorrowSdkEffectState.Applied]: {\n description: \"Конкретное изменение подтверждено; последующий сбой его не отменяет.\",\n },\n [TorrowSdkEffectState.Unknown]: {\n description: \"Исход конкретного изменения неизвестен; не повторять запись вслепую.\",\n },\n} satisfies Record<TorrowSdkEffectState, ItemFieldDoc>;\n/** Домены типизированных уточнений общей ошибки. */\nexport const torrowSdkErrorDomainFieldDocEntries = {\n [TorrowSdkErrorDomain.FileMetadata]: { description: \"Чтение метаданных файла по свежей Full-карточке без записи.\" },\n [TorrowSdkErrorDomain.ItemPatch]: {\n description:\n \"Частичное изменение item через GET/CAS PUT; результат root записи описывается отдельным эффектом Write.\",\n },\n [TorrowSdkErrorDomain.BehaviorSettings]: {\n description: \"Настройки поведения Service или Resource; категория описывает отказ без дополнительной reason.\",\n },\n [TorrowSdkErrorDomain.Otp]: {\n description:\n \"Пошаговый OTP и предметные wire-отказы входа; уточнение может содержать проверенные числовые подсказки ожидания.\",\n },\n [TorrowSdkErrorDomain.AuthSession]: {\n description: \"Сессия токенов и составной вход; уточнение готовности сессии или сбоя callback.\",\n },\n [TorrowSdkErrorDomain.Profiles]: { description: \"Защищённое назначение default или снятие связи Профиля.\" },\n} satisfies Record<TorrowSdkErrorDomain, ItemFieldDoc>;\n/** Стабильные причины защитных отказов Профилей. */\nexport const profileErrorReasonFieldDocEntries = {\n [ProfileErrorReason.TargetNotProfile]: { description: \"Целевой Contact не найден в проверенном списке Профилей.\" },\n [ProfileErrorReason.LastProfile]: { description: \"Снятие оставило бы учётную запись без Профилей.\" },\n [ProfileErrorReason.SelectedDefault]: { description: \"Нельзя снять выбранный SDK default Профиль.\" },\n [ProfileErrorReason.UnusableProfileList]: { description: \"Список Профилей не доказывает безопасное изменение.\" },\n [ProfileErrorReason.UnusableDefault]: { description: \"Выбранный default не доказан или противоречит списку.\" },\n} satisfies Record<ProfileErrorReason, ItemFieldDoc>;\n/** Стабильные имена защищённых профильных операций. */\nexport const profileOperationFieldDocEntries = {\n [ProfileOperation.SetDefaultProfileByContactId]: { description: \"Назначение существующего Профиля default.\" },\n [ProfileOperation.Remove]: { description: \"Снятие профильной связи.\" },\n} satisfies Record<ProfileOperation, ItemFieldDoc>;\n/** Стадии профильной операции без аргументов и DTO. */\nexport const profileFailureAtFieldDocEntries = {\n [ProfileFailureAt.ValidateInput]: { description: \"Проверка ID до чтения.\" },\n [ProfileFailureAt.ReadProfiles]: { description: \"Предварительный GET списка Профилей.\" },\n [ProfileFailureAt.ValidateProfiles]: { description: \"Проверка списка и членства.\" },\n [ProfileFailureAt.ReadDefault]: { description: \"Чтение выбранного default.\" },\n [ProfileFailureAt.ValidateDefault]: { description: \"Проверка выбранного default.\" },\n [ProfileFailureAt.Write]: { description: \"Целевой PUT или DELETE.\" },\n [ProfileFailureAt.ValidateWriteResponse]: { description: \"Проверка ACK записи.\" },\n [ProfileFailureAt.ProjectResponse]: { description: \"Проекция подтверждённого ответа.\" },\n} satisfies Record<ProfileFailureAt, ItemFieldDoc>;\n/** Предметный шаг целевой записи Профиля. */\nexport const profileEffectStepFieldDocEntries = {\n [ProfileEffectStep.Write]: {\n description: \"Remote: результат целевого PUT или DELETE; не включает предварительные GET.\",\n },\n} satisfies Record<ProfileEffectStep, ItemFieldDoc>;\n/** Безопасная предметная деталь ошибки Профиля. */\nexport const profileErrorDetailFieldDocEntries = {\n domain: { description: \"Домен защищённых операций с Профилями.\", valueSchema: \"TorrowSdkErrorDomain\" },\n reason: { description: \"Необязательная стабильная причина защитного отказа.\", valueSchema: \"ProfileErrorReason\" },\n} satisfies Record<keyof ProfileErrorDetail, ItemFieldDoc>;\n/** Безопасное уточнение частичного изменения item. */\nexport const itemPatchErrorDetailFieldDocEntries = {\n domain: { description: \"Область ошибки частичного изменения элемента.\", valueSchema: \"TorrowSdkErrorDomain\" },\n reason: { description: \"Не используется; причина задаётся общей category.\" },\n} satisfies Record<keyof ItemPatchErrorDetail, ItemFieldDoc>;\n/** Эффект только основного документа, без обещания серверной транзакции. */\nexport const itemPatchEffectStepFieldDocEntries = {\n [ItemPatchEffectStep.Write]: {\n description:\n \"Remote: CAS PUT основного item; до dispatch NotApplied, без ACK после dispatch Unknown, после matching ACK Applied.\",\n },\n} satisfies Record<ItemPatchEffectStep, ItemFieldDoc>;\n/** Дополнительные причины OTP; общие ошибки ввода и ответа описывает category. */\nexport const otpErrorReasonFieldDocEntries = {\n [OtpErrorReason.InvalidChallenge]: {\n description:\n \"Продолжение OTP повреждено, противоречиво или просрочено; нужен новый вход вместо повторного complete.\",\n },\n [OtpErrorReason.UnsupportedMethod]: {\n description:\n \"Фактический метод подтверждения не поддерживается для этого аккаунта; preferredMethod не гарантирует выбор сервером.\",\n },\n [OtpErrorReason.AuthHeaderMissing]: {\n description: \"Сервер сообщил AUTH_HEADER_MISSING; проверить Basic приложения и appCredentials.\",\n },\n [OtpErrorReason.CodeRequestLimitExceeded]: {\n description: \"Сервер ограничил отправку кода; приложение выбирает паузу, используя retryAfterSeconds при наличии.\",\n },\n} satisfies Record<OtpErrorReason, ItemFieldDoc>;\n/** Дополнительные причины сессии; этапы storage различает failureAt. */\nexport const authSessionErrorReasonFieldDocEntries = {\n [AuthSessionErrorReason.SessionNotReady]: {\n description:\n \"Auth-сессия ещё не готова к выдаче токенов; существующий deep-link polling может продолжить ожидание.\",\n },\n [AuthSessionErrorReason.CallbackFailed]: {\n description:\n \"Пользовательский callback завершился ошибкой; уже подтверждённые шаги входа сохраняются в effects, внутренние действия callback не описываются.\",\n },\n} satisfies Record<AuthSessionErrorReason, ItemFieldDoc>;\n/** Предметные шаги auth; результат каждого шага отдельно задаёт state. */\nexport const authSessionEffectStepFieldDocEntries = {\n [AuthSessionEffectStep.CreateAuthSession]: {\n description: \"Remote: создание серверного продолжения входа по ссылке; не подтверждает завершение входа.\",\n },\n [AuthSessionEffectStep.CloseSession]: {\n description:\n \"SessionMemory: закрытие локальной сессии при logout; последующий отказ storage не открывает её снова.\",\n },\n [AuthSessionEffectStep.IssueTokens]: {\n description: \"Remote: выдача токенов; Applied не подтверждает их сохранение в памяти или storage.\",\n },\n [AuthSessionEffectStep.RefreshTokens]: {\n description: \"Remote: обновление токенов; сбой последующего сохранения не отменяет подтверждённый refresh.\",\n },\n [AuthSessionEffectStep.RevokeTokens]: {\n description:\n \"Remote: отзыв токенов при logout; подавленный отказ может оставить Unknown, даже если локальная очистка выполнена.\",\n },\n [AuthSessionEffectStep.SendCode]: {\n description: \"Remote: отправка OTP; последующая ошибка интерфейса не отменяет подтверждение отправки.\",\n },\n [AuthSessionEffectStep.SetTokens]: {\n description: \"SessionMemory: установка снимка токенов; Applied сохраняется при последующем storage-сбое.\",\n },\n [AuthSessionEffectStep.ClearTokens]: {\n description: \"SessionMemory: очистка токенов в памяти; не подтверждает очистку постоянного хранилища.\",\n },\n [AuthSessionEffectStep.SaveTokens]: {\n description:\n \"Storage: сохранение снимка токенов; исключение save оставляет Unknown, поскольку запись могла выполниться.\",\n },\n [AuthSessionEffectStep.ClearStorage]: {\n description: \"Storage: сохранение очищенного снимка; не обещает физическое удаление файла или ключа хранилища.\",\n },\n} satisfies Record<AuthSessionEffectStep, ItemFieldDoc>;\n/** Безопасные поля уточнения OTP; cleanup доступен только через getSensitiveDetails(). */\nexport const otpErrorDetailFieldDocEntries = {\n domain: {\n description: \"Область ошибки OTP для типизированной обработки уточнения.\",\n valueSchema: \"TorrowSdkErrorDomain\",\n },\n reason: {\n description:\n \"Необязательная дополнительная причина; при отсутствии достаточно category. Отсутствие reason не доказывает отсутствие изменений.\",\n valueSchema: \"OtpErrorReason\",\n },\n nextSendAtMs: {\n description:\n \"Необязательное проверенное время следующей отправки: Unix milliseconds. Отсутствие означает, что временная подсказка не предоставлена.\",\n },\n retryAfterSeconds: {\n description:\n \"Необязательная проверенная длительность ожидания в секундах; приложение определяет backoff и повтор. Отсутствие не означает нулевое ожидание.\",\n },\n} satisfies Record<keyof OtpErrorDetail, ItemFieldDoc>;\n/** Безопасные поля уточнения сессии; результат изменений описывают отдельные effects. */\nexport const authSessionErrorDetailFieldDocEntries = {\n domain: {\n description: \"Область ошибки сессии или составного входа.\",\n valueSchema: \"TorrowSdkErrorDomain\",\n },\n reason: {\n description:\n \"Необязательное уточнение готовности сессии или ошибки callback; при отсутствии достаточно category. StorageFailure уточняется стадией failureAt.\",\n valueSchema: \"AuthSessionErrorReason\",\n },\n} satisfies Record<keyof AuthSessionErrorDetail, ItemFieldDoc>;\n/** Безопасные атрибуты ошибки; чувствительные данные не являются открытыми полями. */\nexport const torrowSdkErrorFieldDocEntries = {\n category: { description: \"Общая причина; не определяет результат записи.\", valueSchema: \"TorrowSdkErrorCategory\" },\n http: {\n description:\n \"Необязательные безопасные HTTP-метаданные; исходное тело и URL доступны только getSensitiveDetails().\",\n valueSchema: \"TorrowSdkHttpDetails\",\n },\n detail: {\n description:\n \"Необязательное типизированное предметное уточнение: domain и полезная optional reason; отсутствие reason не определяет результат изменений.\",\n valueSchema:\n \"BehaviorSettingsErrorDetail | ItemPatchErrorDetail | OtpErrorDetail | AuthSessionErrorDetail | FileMetadataErrorDetail | ProfileErrorDetail\",\n },\n request: {\n description: \"Необязательный маркер fetch соответствующего запроса; отсутствие не означает NotStarted.\",\n valueSchema: \"TorrowSdkRequestState\",\n },\n operation: { description: \"Необязательное стабильное имя составной операции, без пользовательских аргументов.\" },\n failureAt: { description: \"Необязательная локальная стадия текущего сбоя; не общий каталог SDK.\" },\n effects: {\n description:\n \"Необязательный immutable список описанных изменений; отсутствие означает отсутствие сведений, а не отсутствие изменений.\",\n valueSchema: \"TorrowSdkEffect[]\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n/** HTTP-код отделён от общей категории и предметной причины. */\nexport const torrowSdkHttpDetailsFieldDocEntries = {\n status: { description: \"Исходный числовой HTTP-статус ответа.\" },\n apiCode: { description: \"Необязательный исходный код API, сохранённый отдельно от категории SDK.\" },\n apiErrorName: {\n description: \"Необязательное известное SDK кодовое имя; произвольные title/message сюда не копируются.\",\n },\n requestId: { description: \"Необязательный идентификатор серверного запроса для диагностики.\" },\n traceIdentifier: { description: \"Необязательный идентификатор серверной трассировки.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Один предметный шаг; не трасса всех запросов или авторизации. */\nexport const torrowSdkEffectFieldDocEntries = {\n area: { description: \"Область описанного изменения.\", valueSchema: \"TorrowSdkEffectArea\" },\n step: {\n description: \"Локальный enum шага настроек, patch, сессии или Профиля; не универсальный список всех действий SDK.\",\n valueSchema: \"BehaviorSettingsEffectStep | ItemPatchEffectStep | AuthSessionEffectStep | ProfileEffectStep\",\n },\n state: { description: \"Доказанность результата конкретного шага.\", valueSchema: \"TorrowSdkEffectState\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Дополнительные причины недостаточности данных при чтении метаданных. */\nexport const fileMetadataErrorReasonFieldDocEntries = {\n [FileMetadataErrorReason.SubscriptionIdUnavailable]: {\n description: \"Подписка не содержит subscriptionId; полнота выбора изображения не подтверждена.\",\n },\n [FileMetadataErrorReason.ContentTypeUnavailable]: {\n description: \"Полнота карточки не подтверждена; отсутствие файла неизвестно.\",\n },\n [FileMetadataErrorReason.SubscriptionIsNotValid]: { description: \"Подписка не позволяет читать Full-карточку.\" },\n [FileMetadataErrorReason.FileIdUnavailable]: {\n description: \"Ссылка на файл не содержит ID; отсутствие не подтверждено.\",\n },\n} satisfies Record<FileMetadataErrorReason, ItemFieldDoc>;\n/** Составные операции чтения метаданных. */\nexport const fileMetadataOperationFieldDocEntries = {\n [FileMetadataOperation.GetInitialSubscriptionImageInfo]: {\n description: \"Изображение начальной подписки программы из одной полной карточки.\",\n },\n [FileMetadataOperation.GetImageInfo]: { description: \"Аватар: полная карточка и при наличии image/info.\" },\n [FileMetadataOperation.GetFileInfo]: { description: \"Выбранное вложение заметки.\" },\n [FileMetadataOperation.GetPhotoInfo]: { description: \"Выбранная фотография контакта.\" },\n [FileMetadataOperation.GetSubscriptionImageInfo]: {\n description: \"Изображение выбранной подписки из одного GET Full-карты.\",\n },\n} satisfies Record<FileMetadataOperation, ItemFieldDoc>;\n/** Стадии отказа составного чтения. */\nexport const fileMetadataFailureAtFieldDocEntries = {\n [FileMetadataFailureAt.ValidateInput]: { description: \"Проверка аргументов до HTTP.\" },\n [FileMetadataFailureAt.ReadItem]: { description: \"Чтение доменной карточки.\" },\n [FileMetadataFailureAt.ValidateItem]: { description: \"Проверка Full и выбранной связи.\" },\n [FileMetadataFailureAt.ReadMetadata]: { description: \"Чтение metadata endpoint.\" },\n [FileMetadataFailureAt.ValidateMetadata]: { description: \"Проверка минимальной формы metadata.\" },\n} satisfies Record<FileMetadataFailureAt, ItemFieldDoc>;\n/** Безопасное предметное уточнение чтения файла. */\nexport const fileMetadataErrorDetailFieldDocEntries = {\n domain: { description: \"Домен чтения метаданных.\", valueSchema: \"TorrowSdkErrorDomain\" },\n reason: { description: \"Необязательная причина недостаточности данных.\", valueSchema: \"FileMetadataErrorReason\" },\n} satisfies Record<keyof FileMetadataErrorDetail, ItemFieldDoc>;\n/** Общий каталог безопасных ошибок SDK. */\nexport const mcpSdkErrorFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n FileMetadataErrorReason: fileMetadataErrorReasonFieldDocEntries,\n FileMetadataOperation: fileMetadataOperationFieldDocEntries,\n FileMetadataFailureAt: fileMetadataFailureAtFieldDocEntries,\n FileMetadataErrorDetail: fileMetadataErrorDetailFieldDocEntries,\n TorrowSdkError: torrowSdkErrorFieldDocEntries,\n TorrowSdkHttpDetails: torrowSdkHttpDetailsFieldDocEntries,\n TorrowSdkErrorCategory: torrowSdkErrorCategoryFieldDocEntries,\n TorrowSdkRequestState: torrowSdkRequestStateFieldDocEntries,\n TorrowSdkEffect: torrowSdkEffectFieldDocEntries,\n TorrowSdkEffectArea: torrowSdkEffectAreaFieldDocEntries,\n TorrowSdkEffectState: torrowSdkEffectStateFieldDocEntries,\n TorrowSdkErrorDomain: torrowSdkErrorDomainFieldDocEntries,\n ItemPatchErrorDetail: itemPatchErrorDetailFieldDocEntries,\n ItemPatchEffectStep: itemPatchEffectStepFieldDocEntries,\n OtpErrorReason: otpErrorReasonFieldDocEntries,\n AuthSessionErrorReason: authSessionErrorReasonFieldDocEntries,\n AuthSessionEffectStep: authSessionEffectStepFieldDocEntries,\n OtpErrorDetail: otpErrorDetailFieldDocEntries,\n AuthSessionErrorDetail: authSessionErrorDetailFieldDocEntries,\n ProfileErrorReason: profileErrorReasonFieldDocEntries,\n ProfileOperation: profileOperationFieldDocEntries,\n ProfileFailureAt: profileFailureAtFieldDocEntries,\n ProfileEffectStep: profileEffectStepFieldDocEntries,\n ProfileErrorDetail: profileErrorDetailFieldDocEntries,\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 hideMessengerConnectUi: \"HideMessengerNotifications\",\n /**\n * Резерв под серверную договоренность. Формат в `tags`: `NNN:payment_redirect_timeout_sec`.\n * Непосредственно в текущем `torrow-apps` литерал пока не используется.\n */\n paymentRedirectTimeoutSec: \":payment_redirect_timeout_sec\",\n} as const;\n\n/** Именованные виды реестра для сравнения в реализации. */\nexport enum ServiceImplicitTagKind {\n /** Текстовый параметр. */\n String = \"string\",\n /** Положительное целое число. */\n PositiveInt = \"positiveInt\",\n /** Флаг по точному совпадению тега. */\n ExactFlag = \"exactFlag\",\n /** Задержка автозапуска уведомлений. */\n AutoStart = \"autoStart\",\n /** Текст и ссылка соглашения. */\n Agreement = \"agreement\",\n}\n\ntype PrimitiveTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: `${ServiceImplicitTagKind.String | ServiceImplicitTagKind.PositiveInt}`;\n suffixes: readonly string[];\n caseInsensitive?: boolean;\n};\n\ntype ExactTagConfig = {\n field: keyof ServiceImplicitTagParams;\n kind: `${ServiceImplicitTagKind.ExactFlag}`;\n tokens: readonly string[];\n};\n\ntype AutoStartTagConfig = {\n field: \"autoStartNotificationDelaySeconds\";\n kind: `${ServiceImplicitTagKind.AutoStart}`;\n suffixes: readonly string[];\n};\n\ntype AgreementTagConfig = {\n field: \"agreementItems\";\n kind: `${ServiceImplicitTagKind.Agreement}`;\n textSuffix: string;\n linkSuffix: string;\n};\n\nexport type ServiceImplicitTagConfig = PrimitiveTagConfig | ExactTagConfig | AutoStartTagConfig | AgreementTagConfig;\n\n// Только очистка при записи: monolith продолжает скрывать UI по старому тегу.\nconst OBSOLETE_MESSENGER_CONNECT_UI_TAG = \"HideTelegramNotificationBot\";\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: \"exactFlag\",\n tokens: [SERVICE_IMPLICIT_TAG_SUFFIX.hideMessengerConnectUi],\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\n/** Предметные значения; версия услуги передаётся отдельно. */\nexport type ServiceImplicitTagParams = {\n /** Пользовательское название заказа для отображения в приложении; не меняет серверное имя создаваемого заказа. */\n orderName?: string;\n /** Часовой пояс отображения услуги, например Europe/Moscow. */\n timeZone?: string;\n /** За сколько минут до начала запрещена отмена участия. */\n disableCancelMyParticipationBeforeMinutes?: number;\n /** За сколько минут до начала запрещён перенос заказа. */\n disableUpdateOrderTimeBeforeMinutes?: number;\n /** Сообщение пользователю при недоступной записи. */\n unavailableBookingMessage?: string;\n /** Название поля со скидкой в процентах. */\n discountPercentageFieldName?: string;\n /** Интервал между событиями в секундах. */\n marginTimeSec?: number;\n /** Задержка автоматического подключения уведомлений в секундах. */\n autoStartNotificationDelaySeconds?: number;\n /**\n * Скрывает UI подключения уведомлений Telegram и Max через точный тег `HideMessengerNotifications`.\n * BehaviorSettings API также читает точный legacy alias; в его состоянии флаг всегда boolean.\n */\n hideMessengerConnectUi?: boolean;\n /** Полный набор соглашений; пустой массив очищает набор. */\n agreementItems?: {\n /** Положительный уникальный номер соглашения. */\n index: number;\n /** Текст соглашения; хотя бы text или link должны быть заданы. */\n text?: string;\n /** Ссылка соглашения; кодирование хранения выполняет SDK. */\n link?: string;\n }[];\n /** Таймаут перехода после оплаты в секундах. */\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)) {\n return undefined;\n }\n\n return tag.slice(0, tag.length - suffix.length);\n }\n if (!tag.endsWith(suffix)) {\n return undefined;\n }\n\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) {\n return prefix;\n }\n }\n\n return undefined;\n}\n\nfunction toPositiveInt(raw: string | undefined): number | undefined {\n if (!raw) {\n return undefined;\n }\n const value = Number.parseInt(raw.trim(), 10);\n\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) {\n return sec;\n }\n }\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]) {\n return undefined;\n }\n const index = Number.parseInt(match[2], 10);\n if (!Number.isFinite(index) || index <= 0) {\n return undefined;\n }\n\n return { index, value: match[1] };\n}\n\nfunction decodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https//\")) {\n return `https://${trimmed.slice(\"https//\".length)}`;\n }\n if (trimmed.startsWith(\"http//\")) {\n return `http://${trimmed.slice(\"http//\".length)}`;\n }\n\n return trimmed;\n}\n\nfunction encodeAgreementLink(linkRaw: string): string {\n const trimmed = linkRaw.trim();\n if (trimmed.startsWith(\"https://\")) {\n return `https//${trimmed.slice(\"https://\".length)}`;\n }\n if (trimmed.startsWith(\"http://\")) {\n return `http//${trimmed.slice(\"http://\".length)}`;\n }\n\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 === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.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 === ServiceImplicitTagKind.String) {\n if (raw?.trim()) {\n mutable[config.field] = raw.trim();\n }\n } else {\n const value = toPositiveInt(raw);\n if (value !== undefined) {\n mutable[config.field] = value;\n }\n }\n }\n if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n const hasAny = safeTags.some((tag) => config.tokens.some((token) => tag === token));\n if (hasAny) {\n mutable[config.field] = true;\n }\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) {\n break;\n }\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()].sort((a, b) => a.index - b.index).filter((x) => x.text || x.link);\n if (agreementItems.length) {\n mutable.agreementItems = agreementItems;\n }\n\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 === ServiceImplicitTagKind.String || x.kind === ServiceImplicitTagKind.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 === ServiceImplicitTagKind.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)) {\n continue;\n }\n if (agreement.text?.trim()) {\n tags.push(`${agreement.text.trim()}${SERVICE_IMPLICIT_TAG_REGISTRY.agreementItems.textSuffix}${agreement.index}`);\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\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 === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n const matched = config.suffixes.some(\n (suffix) => splitBySuffix(tag, suffix, config.caseInsensitive ?? false) !== undefined,\n );\n if (matched) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (config.tokens.some((token) => tag === token)) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.AutoStart) {\n const isAutoStart = config.suffixes.some((suffix) => tag.match(new RegExp(`^\\\\d+:${suffix}$`)) !== null);\n if (isAutoStart) {\n return true;\n }\n }\n if (config.kind === ServiceImplicitTagKind.Agreement) {\n if (\n parseAgreementIndexedTag(tag, config.textSuffix) !== undefined ||\n parseAgreementIndexedTag(tag, config.linkSuffix) !== undefined\n ) {\n return true;\n }\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(\n (tag) => tag !== OBSOLETE_MESSENGER_CONNECT_UI_TAG && !isImplicitServiceTag(tag),\n );\n const nextImplicit = buildServiceImplicitTags(params, options);\n\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\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) {\n return \"\";\n }\n const normalized = stepName.trimStart();\n\n return normalized.startsWith(\"*\") ? normalized.slice(1).trimStart() : stepName;\n}\n\n/** Парсинг поведения ресурса из `resource.tags`. */\nexport function parseResourceBehaviorSettings(tags: readonly string[] | undefined | null): ResourceBehaviorSettings {\n // Resource сохраняет историческую семантику независимо от нового Service reader.\n const marginTimeSec = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.marginTime));\n const lockId = toPositiveInt(firstPrefixBySuffix(tags ?? [], SERVICE_IMPLICIT_TAG_SUFFIX.lockId));\n const result: ResourceBehaviorSettings = {};\n if (marginTimeSec !== undefined) {\n result.marginTimeSec = marginTimeSec;\n }\n if (lockId !== undefined) {\n result.lockId = lockId;\n }\n\n return result;\n}\n\n/** Сериализация/merge behavior параметров ресурса в `resource.tags`. */\nexport function mergeResourceBehaviorTags(\n baseTags: readonly string[] | undefined | null,\n settings: ResourceBehaviorSettings,\n): string[] {\n const safeBase = baseTags ?? [];\n const nonManaged = safeBase.filter(\n (tag) =>\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.marginTime) === undefined &&\n splitBySuffix(tag, SERVICE_IMPLICIT_TAG_SUFFIX.lockId) === undefined,\n );\n const managed: string[] = [];\n if (isPositiveInt(settings.marginTimeSec)) {\n managed.push(`${settings.marginTimeSec}${SERVICE_IMPLICIT_TAG_SUFFIX.marginTime}`);\n }\n if (isPositiveInt(settings.lockId)) {\n managed.push(`${settings.lockId}${SERVICE_IMPLICIT_TAG_SUFFIX.lockId}`);\n }\n\n return [...nonManaged, ...managed];\n}\n","import { TorrowSdkErrorCategory } from \"../../http/TorrowSdkError.js\";\nimport { behaviorSettingsError } from \"../common/behavior-settings-errors.js\";\nimport {\n SERVICE_IMPLICIT_TAG_REGISTRY,\n ServiceImplicitTagKind,\n type ServiceImplicitTagConfig,\n} from \"../common/implicit-tag-params.js\";\nimport type { ServiceBehaviorSettings } from \"./types.js\";\n\n/** Причина неполного предметного чтения конкретной настройки. */\nexport enum ServiceBehaviorSettingsIssueReason {\n /** Есть некорректное значение; поле исключено из предметного снимка. */\n InvalidValue = \"InvalidValue\",\n /** Есть противоречивые значения; порядок не определяет результат. */\n AmbiguousValue = \"AmbiguousValue\",\n}\n/** Диагностика настройки без раскрытия внутреннего представления. */\nexport interface ServiceBehaviorSettingsIssue {\n /** Поле, значение которого не может быть достоверно прочитано. */\n field: keyof ServiceBehaviorSettings;\n /** Некорректное значение либо несколько противоречивых значений. */\n reason: ServiceBehaviorSettingsIssueReason;\n}\n/** Проверенное предметное состояние услуги. */\nexport interface ServiceBehaviorSettingsState {\n /** ID услуги, для которой выполнено чтение. */\n serviceId: string;\n /** Положительная int32 meta.version всей услуги, не отдельный счётчик настроек. */\n version: number;\n /** Прочитанные значения; поля с issues не являются полным снимком. */\n settings: ServiceBehaviorSettings;\n /** Проблемы предметного чтения; пустой массив означает полный снимок настроек. */\n issues: ServiceBehaviorSettingsIssue[];\n}\n/** Результат изменения; поля состояния имеют смысл из ServiceBehaviorSettingsState. */\nexport interface ServiceBehaviorSettingsUpdateResult extends ServiceBehaviorSettingsState {\n /** Был ли PUT; settings описывают ожидаемый результат, без автоматического readback. */\n changed: boolean;\n}\n/** Управление записью BehaviorSettings; проверку версии выбирает потребитель. */\nexport interface ServiceBehaviorSettingsUpdateOptions {\n /** Ожидаемая meta.version: 1..2147483647. При наличии включает проверку указанной версии. */\n versionToCheck?: number;\n /** true включает CAS по версии внутреннего GET, если versionToCheck не задан. По умолчанию CAS выключен. */\n checkVersion?: true;\n /** true (по умолчанию) сохраняет пропущенные поля; false полностью заменяет настройки. */\n mergeParameters?: boolean;\n /** Выбранный профиль только для внутреннего GET; не предоставляет право записи. */\n profileId?: string | null;\n /** Гостевой контекст только для GET; не Bearer и не право записи. */\n securityToken?: string | null;\n /** Создание объявления при PUT; отсутствие/null означает false. */\n isNeedAnnouncement?: boolean | null;\n /** Отмена чтения и записи; после отмены автоматических запросов нет. */\n signal?: AbortSignal;\n}\n/** Wire-полнота и разрешённая операция; не входят в предметные результаты. */\nenum BehaviorAccess {\n Full = \"Full\",\n NoRights = \"NoRights\",\n SubscriptionIsNotValid = \"SubscriptionIsNotValid\",\n SetItemTags = \"SetItemTags\",\n}\nenum BehaviorFlag {\n LegacyHide = \"HideTelegramNotificationBot\",\n}\nconst configs: readonly ServiceImplicitTagConfig[] = Object.values(SERVICE_IMPLICIT_TAG_REGISTRY);\n\n/** Проверяет положительную int32-версию независимо от TypeScript. */\nexport function isBehaviorVersion(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 2147483647;\n}\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n/** Валидирует GET до проекции; отсутствие данных не превращается в пустое состояние. */\nexport function validateBehaviorResponse(\n value: unknown,\n serviceId: string,\n): { tags: string[]; version: number; operations: unknown } {\n if (!record(value) || value.id !== serviceId) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n const personal = value.personalInfo;\n if (\n record(personal) &&\n (personal.itemContentType === BehaviorAccess.NoRights ||\n personal.itemContentType === BehaviorAccess.SubscriptionIsNotValid)\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.AccessDenied);\n }\n if (\n !record(personal) ||\n personal.itemContentType !== BehaviorAccess.Full ||\n value.tags == null ||\n !record(value.meta) ||\n !isBehaviorVersion(value.meta.version)\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InsufficientData);\n }\n if (!Array.isArray(value.tags) || !value.tags.every((tag): tag is string => typeof tag === \"string\")) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n const operations = personal.operationList;\n if (\n operations != null &&\n (!Array.isArray(operations) ||\n !operations.every(\n (operation) =>\n typeof operation === \"string\" || (typeof operation === \"number\" && Number.isSafeInteger(operation)),\n ))\n ) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidResponse);\n }\n\n return { tags: [...new Set(value.tags)], version: value.meta.version, operations };\n}\n/** Наличие данных или профиль не заменяют известное разрешение операции. */\nexport function assertBehaviorPermission(operations: unknown): void {\n if (!Array.isArray(operations)) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InsufficientData);\n }\n if (!operations.includes(BehaviorAccess.SetItemTags)) {\n throw behaviorSettingsError(TorrowSdkErrorCategory.AccessDenied);\n }\n}\n\nfunction suffixPrefix(tag: string, suffix: string, ignoreCase = false): string | undefined {\n const matches = ignoreCase ? tag.toLowerCase().endsWith(suffix.toLowerCase()) : tag.endsWith(suffix);\n\n return matches ? tag.slice(0, -suffix.length) : undefined;\n}\nfunction positive(raw: string): number | undefined {\n const value = Number(raw);\n\n return /^\\d+$/.test(raw) && Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n/** Принадлежность семейству отделена от валидности значения: ошибочное выбранное поле можно заменить. */\nfunction prefix(tag: string, config: ServiceImplicitTagConfig): string | undefined {\n if (config.kind === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n for (const suffix of config.suffixes) {\n const value = suffixPrefix(tag, suffix, config.caseInsensitive);\n if (value !== undefined) {\n return value;\n }\n }\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (config.tokens.includes(tag) || tag === BehaviorFlag.LegacyHide) {\n return \"true\";\n }\n } else if (config.kind === ServiceImplicitTagKind.AutoStart) {\n for (const suffix of config.suffixes) {\n const value = suffixPrefix(tag, `:${suffix}`);\n if (value !== undefined) {\n return value;\n }\n }\n } else if (config.kind === ServiceImplicitTagKind.Agreement) {\n for (const suffix of [config.textSuffix, config.linkSuffix]) {\n const position = tag.lastIndexOf(suffix);\n if (position >= 0 && /^\\d+$/.test(tag.slice(position + suffix.length))) {\n return tag;\n }\n }\n }\n\n return undefined;\n}\n/** Читает все семейства без зависимости от порядка или одинаковых дублей. */\nexport function readBehaviorSettings(\n tags: readonly string[],\n): Pick<ServiceBehaviorSettingsState, \"settings\" | \"issues\"> {\n const settings: ServiceBehaviorSettings = { hideMessengerConnectUi: false };\n const issues: ServiceBehaviorSettingsIssue[] = [];\n const target = settings as Record<string, unknown>;\n for (const config of configs) {\n // Собираем выбранное семейство без зависимости от порядка/дублей ответа.\n const matching = [...new Set(tags)].filter((tag) => prefix(tag, config) !== undefined);\n if (!matching.length) {\n continue;\n }\n let invalid = false;\n let ambiguous = false;\n let result: unknown;\n if (config.kind === ServiceImplicitTagKind.Agreement) {\n // Соглашения агрегируются по index, конфликт любого атрибута делает набор неполным.\n const entries = new Map<number, { index: number; text?: string; link?: string }>();\n for (const tag of matching) {\n for (const [attribute, suffix] of [\n [\"text\", config.textSuffix],\n [\"link\", config.linkSuffix],\n ] as const) {\n const position = tag.lastIndexOf(suffix);\n if (position < 0 || !/^\\d+$/.test(tag.slice(position + suffix.length))) {\n continue;\n }\n const index = positive(tag.slice(position + suffix.length));\n let value = tag.slice(0, position).trim();\n if (attribute === \"link\") {\n value = value.replace(/^(https?)\\/\\//, \"$1://\");\n }\n if (!index || !value) {\n invalid = true;\n continue;\n }\n const entry = entries.get(index) ?? { index };\n if (entry[attribute] !== undefined && entry[attribute] !== value) {\n ambiguous = true;\n }\n entry[attribute] = value;\n entries.set(index, entry);\n }\n }\n result = [...entries.values()].sort((a, b) => a.index - b.index);\n } else {\n const values = new Set<string | number | boolean>();\n for (const tag of matching) {\n const raw = prefix(tag, config)!;\n const value =\n config.kind === ServiceImplicitTagKind.ExactFlag\n ? true\n : config.kind === ServiceImplicitTagKind.String\n ? raw.trim() || undefined\n : positive(raw);\n if (value === undefined) {\n invalid = true;\n } else {\n values.add(value);\n }\n }\n ambiguous = values.size > 1;\n result = [...values][0];\n }\n if (invalid || ambiguous) {\n // Неполное значение не выдаём за достоверное; другие семейства остаются читаемыми.\n issues.push({\n field: config.field,\n reason: invalid\n ? ServiceBehaviorSettingsIssueReason.InvalidValue\n : ServiceBehaviorSettingsIssueReason.AmbiguousValue,\n });\n } else {\n target[config.field] = result;\n }\n }\n\n return { settings, issues };\n}\n\n/** Нормализует и валидирует вход; undefined/null не служат неявной очисткой. */\nexport function normalizeBehaviorInput(input: ServiceBehaviorSettings): ServiceBehaviorSettings {\n function fail(): never {\n throw behaviorSettingsError(TorrowSdkErrorCategory.InvalidInput);\n }\n if (!record(input) || Object.keys(input).some((key) => !Object.hasOwn(SERVICE_IMPLICIT_TAG_REGISTRY, key))) {\n fail();\n }\n const output: Record<string, unknown> = {};\n for (const config of configs) {\n if (!Object.hasOwn(input, config.field)) {\n continue;\n }\n const value: unknown = input[config.field];\n if (config.kind === ServiceImplicitTagKind.String) {\n if (typeof value !== \"string\" || !value.trim()) {\n fail();\n }\n output[config.field] = value.trim();\n } else if (config.kind === ServiceImplicitTagKind.PositiveInt || config.kind === ServiceImplicitTagKind.AutoStart) {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n fail();\n }\n output[config.field] = value;\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (typeof value !== \"boolean\") {\n fail();\n }\n output[config.field] = value;\n } else {\n if (!Array.isArray(value)) {\n fail();\n }\n const seen = new Set<number>();\n output[config.field] = value\n .map((entry: unknown) => {\n if (\n !record(entry) ||\n Object.keys(entry).some((key) => ![\"index\", \"text\", \"link\"].includes(key)) ||\n typeof entry.index !== \"number\" ||\n !Number.isSafeInteger(entry.index) ||\n entry.index <= 0 ||\n seen.has(entry.index)\n ) {\n fail();\n }\n seen.add(entry.index);\n const normalized: { index: number; text?: string; link?: string } = { index: entry.index };\n for (const attribute of [\"text\", \"link\"] as const) {\n if (Object.hasOwn(entry, attribute)) {\n if (typeof entry[attribute] !== \"string\" || !entry[attribute].trim()) {\n fail();\n }\n normalized[attribute] = entry[attribute].trim();\n }\n }\n if (!normalized.text && !normalized.link) {\n fail();\n }\n\n return normalized;\n })\n .sort((a, b) => a.index - b.index);\n }\n }\n\n return output as ServiceBehaviorSettings;\n}\n\n/** Формирует только выбранные семейства; порядок/кратность не входят в серверный контракт. */\nexport function mergeBehaviorSettings(\n tags: readonly string[],\n settings: ServiceBehaviorSettings,\n mergeParameters: boolean,\n): string[] {\n const selected = configs.filter((config) => !mergeParameters || Object.hasOwn(settings, config.field));\n const output = tags.filter((tag) => !selected.some((config) => prefix(tag, config) !== undefined));\n for (const config of selected) {\n const value = settings[config.field];\n if (value === undefined) {\n continue;\n }\n if (config.kind === ServiceImplicitTagKind.String || config.kind === ServiceImplicitTagKind.PositiveInt) {\n output.push(`${value}${config.suffixes[0]}`);\n } else if (config.kind === ServiceImplicitTagKind.ExactFlag) {\n if (value) {\n output.push(config.tokens[0]!);\n }\n } else if (config.kind === ServiceImplicitTagKind.AutoStart) {\n output.push(`${value}:${config.suffixes[0]}`);\n } else if (config.kind === ServiceImplicitTagKind.Agreement) {\n for (const entry of settings.agreementItems ?? []) {\n if (entry.text) {\n output.push(`${entry.text}${config.textSuffix}${entry.index}`);\n }\n if (entry.link) {\n output.push(`${entry.link.replace(/^(https?):\\/\\//, \"$1//\")}${config.linkSuffix}${entry.index}`);\n }\n }\n }\n }\n\n return [...new Set(output)];\n}\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { ServiceBehaviorSettingsIssueReason } from \"../resources/services/behavior-settings.js\";\nimport { BehaviorSettingsEffectStep } from \"../http/TorrowSdkError.js\";\nimport type { ServiceBehaviorSettings } from \"../resources/services/types.js\";\n\n/** Все предметные атрибуты настройки услуги. */\nexport const serviceBehaviorSettingsFieldDocEntries = {\n orderName: {\n description:\n \"Пользовательское название заказа для отображения в приложении; непустая строка. Не меняет серверное имя создаваемого заказа.\",\n },\n timeZone: { description: \"Часовой пояс услуги, например Europe/Moscow.\" },\n unavailableBookingMessage: { description: \"Сообщение при недоступной записи.\" },\n discountPercentageFieldName: { description: \"Название поля скидки в процентах.\" },\n disableCancelMyParticipationBeforeMinutes: {\n description: \"Срок запрета отмены до начала, в минутах; положительный safe integer.\",\n },\n disableUpdateOrderTimeBeforeMinutes: {\n description: \"Срок запрета переноса до начала, в минутах; положительный safe integer.\",\n },\n marginTimeSec: { description: \"Интервал между событиями в секундах; положительный safe integer.\" },\n autoStartNotificationDelaySeconds: {\n description: \"Задержка подключения уведомлений в секундах; положительный safe integer.\",\n },\n paymentRedirectTimeoutSec: {\n description: \"Таймаут перенаправления после оплаты в секундах; положительный safe integer.\",\n },\n hideMessengerConnectUi: {\n description: \"Скрыть UI подключения уведомлений Telegram и Max; getter всегда возвращает boolean.\",\n },\n agreementItems: {\n description: \"Полный набор соглашений с уникальным положительным index и text/link. Пустой массив очищает набор.\",\n },\n} satisfies Record<keyof ServiceBehaviorSettings, ItemFieldDoc>;\n\n/** Предметные поля результата без раскрытия внутреннего представления. */\nexport const serviceBehaviorSettingsStateFieldDocEntries = {\n serviceId: { description: \"ID прочитанной услуги.\" },\n version: { description: \"Положительная int32 версия всей услуги; используется как versionToCheck записи.\" },\n settings: {\n description: \"Предметные настройки. При непустом issues снимок неполон.\",\n valueSchema: \"ServiceBehaviorSettings\",\n },\n issues: {\n description: \"Проблемы чтения с именем поля и enum-причиной, без исходных данных.\",\n valueSchema: \"ServiceBehaviorSettingsIssue[]\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n/** Результат подтверждённого PUT либо локального no-op. */\nexport const serviceBehaviorSettingsUpdateResultFieldDocEntries = {\n ...serviceBehaviorSettingsStateFieldDocEntries,\n changed: { description: \"true — PUT подтверждён ID/версией; false — no-op. settings не являются readback.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Управление необязательной проверкой версии. */\nexport const serviceBehaviorSettingsUpdateOptionsFieldDocEntries = {\n versionToCheck: {\n description: \"Необязательная ожидаемая версия 1..2147483647; включает CAS и не заменяется новой версией GET.\",\n },\n checkVersion: {\n description:\n \"true включает CAS по версии внутреннего GET, если versionToCheck не задан; по умолчанию CAS выключен.\",\n },\n mergeParameters: {\n description: \"По умолчанию true: пропущенные поля сохраняются. false: отсутствующие поля очищаются.\",\n },\n profileId: { description: \"Контекст внутреннего GET; не передаётся в PUT и не даёт право записи.\" },\n securityToken: { description: \"Гостевой контекст GET, не Bearer и не право записи.\" },\n isNeedAnnouncement: { description: \"Объявление при PUT; отсутствие/null означает false.\" },\n signal: { description: \"AbortSignal для GET и PUT; отмена не запускает retry или rollback.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Диагностика одного неполного предметного значения. */\nexport const serviceBehaviorSettingsIssueFieldDocEntries = {\n field: { description: \"Имя настройки, которую нельзя достоверно прочитать.\" },\n reason: { description: \"Причина неполного чтения.\", valueSchema: \"ServiceBehaviorSettingsIssueReason\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Единственный описываемый шаг настроек. */\nexport const behaviorSettingsEffectStepFieldDocEntries = {\n [BehaviorSettingsEffectStep.Write]: {\n description: \"Целевая запись настроек; не включает refresh или другие эффекты авторизации.\",\n },\n} satisfies Record<BehaviorSettingsEffectStep, ItemFieldDoc>;\n/** Безопасное предметное уточнение общей ошибки. */\nexport const behaviorSettingsErrorDetailFieldDocEntries = {\n domain: { description: \"Область ошибки BehaviorSettings для настроек Service или Resource.\" },\n} satisfies Record<string, ItemFieldDoc>;\n/** Причины отсутствующего значения настройки. */\nexport const serviceBehaviorSettingsIssueReasonFieldDocEntries = {\n [ServiceBehaviorSettingsIssueReason.InvalidValue]: {\n description: \"Значение настройки некорректно; оно не включено в полный предметный снимок.\",\n },\n [ServiceBehaviorSettingsIssueReason.AmbiguousValue]: {\n description: \"Для настройки получены различные значения; порядок не выбирает победителя.\",\n },\n} satisfies Record<ServiceBehaviorSettingsIssueReason, ItemFieldDoc>;\n","/**\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\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\n return out;\n}\n","import type { TorrowChildItemCreateOptions, TorrowItemCreateOptions } from \"../resources/common/item-crud-options.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Общие параметры корневого create: публичность задаётся отдельно от предметного тела. */\nexport const torrowItemCreateOptionsFieldDocEntries = {\n publicityType: {\n description:\n \"Публичность нового item: Personal, PublicWithRequest, PublicAvailable или Link; при пропуске SDK отправляет Personal.\",\n examples: [\"Personal\", \"PublicWithRequest\", \"PublicAvailable\", \"Link\"],\n usage:\n \"Значение передаётся в JSON item единственного create request. Одноимённое поле в предметном теле не является источником и игнорируется. Для существующего item используйте updatePublicity; обычный update публичность не меняет.\",\n },\n profileId: {\n description: \"Профиль, от имени которого создаётся item; строка, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр profileId исходного create request; null сохраняет wire-семантику API. Это не поле JSON item.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного create request.\",\n usage:\n \"Отменяет единственный create request; SDK не выполняет retry, readback или cleanup. Отмена после отправки запроса не доказывает, что item не был создан.\",\n },\n} satisfies Record<keyof TorrowItemCreateOptions, ItemFieldDoc>;\n\n/** Параметры create дочернего item: общий контракт плюс родитель в query. */\nexport const torrowChildItemCreateOptionsFieldDocEntries = {\n ...torrowItemCreateOptionsFieldDocEntries,\n parentId: {\n description: \"Родитель нового item; строка, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр parentId исходного create request; null сохраняет wire-семантику API. Это не поле JSON item.\",\n },\n} satisfies Record<keyof TorrowChildItemCreateOptions, ItemFieldDoc>;\n","/**\n * Query-параметры `DELETE /api/v1/{domain}/{torrowId}` для item-фасадов\n * (contacts, notes, cases, calendars, contexts, services, resourceItems, loyalty*).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общее описание item-delete для MCP-записей методов `delete`. */\nexport const itemDeleteMethodDescription =\n \"Обязательные query **`cascade`**, **`withPinnedItems`** (см. **`TorrowItemDeleteOptions`**; совместимый ключ **`ItemDeleteQuery`**); SDK возвращает число **`deleteCount`**.\";\n\nexport const itemDeleteQueryFieldDocEntries = {\n cascade: {\n description:\n \"Каскадное удаление вложенных дочерних элементов в иерархии (mind map / include). `false` — удалить только сам элемент, без дочерних; `true` — вместе с вложенными (в приложении: «удалить с вложенными элементами»).\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n withPinnedItems: {\n description:\n \"Удалять закреплённые (pinned) дочерние представления/элементы вместе с родителем. `false` — не трогать закреплённые вложения; `true` — удалить и их.\",\n valueSchema: \"boolean (required)\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemDeleteQueryFieldDocs = mapFieldDocsToStrings(itemDeleteQueryFieldDocEntries);\n","import type {\n TorrowItemDeleteOptions,\n TorrowItemGetOptions,\n TorrowItemUpdateOptions,\n} from \"../resources/common/item-crud-options.js\";\nimport type { GetCalendarOptions, UpdateCalendarItemOptions } from \"../resources/calendars/types.js\";\nimport type { GetCaseOptions } from \"../resources/cases/case-requests.js\";\nimport type { UpdateCaseItemOptions } from \"../resources/cases/types.js\";\nimport type { GetContactOptions, UpdateContactItemOptions } from \"../resources/contacts/types.js\";\nimport type { GetContextOptions } from \"../resources/contexts/types.js\";\nimport type { GetLoyaltyCardOptions } from \"../resources/loyalty-cards/types.js\";\nimport type { GetLoyaltySystemOptions } from \"../resources/loyalty-systems/types.js\";\nimport type { GetNoteOptions } from \"../resources/notes/types.js\";\nimport type { GetResourceOptions, UpdateResourceItemOptions } from \"../resources/resources/types.js\";\nimport type { GetServiceOptions } from \"../resources/services/service-requests.js\";\nimport type { UpdateServiceItemOptions } from \"../resources/services/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\n\n/** Общие параметры получения item по идентификатору. */\nexport const torrowItemGetOptionsFieldDocEntries = {\n versionToCheck: {\n description: \"Версия item, которую клиент уже прочитал; число, null или пропуск.\",\n usage: \"Передаётся как query-параметр versionToCheck исходного GET.\",\n },\n includeDeleted: {\n description: \"Нужно ли возвращать логически удалённый item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр includeDeleted исходного GET.\",\n },\n includeChildItemStats: {\n description: \"Включать статистику по типам дочерних элементов в ответ получения item.\",\n usage: \"SDK передаёт значение в исторический query-параметр endpoint: includeChildTypes либо includeChildItems.\",\n },\n securityToken: {\n description: \"Токен гостевого доступа к item; строка, null или пропуск.\",\n usage: \"Передаётся в query конкретного GET и не используется как Bearer-токен.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса чтения item.\",\n usage: \"Передаётся в fetch исходного GET; SDK не выполняет retry.\",\n },\n} satisfies Record<keyof TorrowItemGetOptions, ItemFieldDoc>;\n\n/** Общие параметры полного обновления item. */\nexport const torrowItemUpdateOptionsFieldDocEntries = {\n checkVersion: {\n description: \"Нужно ли серверу проверить версию item перед полным обновлением; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр checkVersion исходного PUT.\",\n },\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об обновлении item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр isNeedAnnouncement исходного PUT.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса полного обновления item.\",\n usage: \"Передаётся в fetch исходного PUT; SDK не выполняет retry или readback.\",\n },\n} satisfies Record<keyof TorrowItemUpdateOptions, ItemFieldDoc>;\n\n/** Общие параметры удаления item. */\nexport const torrowItemDeleteOptionsFieldDocEntries = {\n ...itemDeleteQueryFieldDocEntries,\n versionToCheck: {\n description: \"Ожидаемая версия удаляемого item; число, null или пропуск.\",\n usage: \"Передаётся как query-параметр versionToCheck исходного DELETE.\",\n },\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об удалении item; boolean, null или пропуск.\",\n usage: \"Передаётся как query-параметр isNeedAnnouncement исходного DELETE.\",\n },\n signal: {\n description: \"AbortSignal для отмены единственного запроса удаления item.\",\n usage: \"Передаётся в fetch исходного DELETE; отмена не доказывает, что сервер не удалил item.\",\n },\n} satisfies Record<keyof TorrowItemDeleteOptions, ItemFieldDoc>;\n\nconst profileIdGetFieldDoc = {\n description: \"Профиль, от имени которого читается item; строка, null или пропуск.\",\n usage: \"Передаётся как query-параметр profileId исходного GET.\",\n} satisfies ItemFieldDoc;\n\nconst profileIdUpdateFieldDoc = {\n description: \"Профиль, от имени которого обновляется item; строка, null или пропуск.\",\n usage: \"Передаётся как query-параметр profileId исходного PUT.\",\n} satisfies ItemFieldDoc;\n\nconst securityTokenUpdateFieldDoc = {\n description: \"Токен гостевого доступа для полного обновления item; строка, null или пропуск.\",\n usage: \"Передаётся в query исходного PUT и не используется как Bearer-токен.\",\n} satisfies ItemFieldDoc;\n\nexport const getCalendarOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetCalendarOptions, ItemFieldDoc>;\n\nexport const getContactOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetContactOptions, ItemFieldDoc>;\n\nexport const getContextOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetContextOptions, ItemFieldDoc>;\n\nexport const getNoteOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetNoteOptions, ItemFieldDoc>;\n\nexport const getResourceOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n isNeedItem: {\n description: \"Включать основную карточку item в ответ ресурса.\",\n usage: \"Передаётся как query-параметр isNeedItem исходного GET.\",\n },\n isNeedParentResource: {\n description: \"Включать родительский ресурс в ответ.\",\n usage: \"Передаётся как query-параметр isNeedParentResource исходного GET.\",\n },\n} satisfies Record<keyof GetResourceOptions, ItemFieldDoc>;\n\nexport const getServiceOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n profileId: profileIdGetFieldDoc,\n} satisfies Record<keyof GetServiceOptions, ItemFieldDoc>;\n\nexport const getCaseOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n profileId: profileIdGetFieldDoc,\n caseParticipantProfileId: {\n description: \"Профиль участника, для которого сервер формирует персональную часть события.\",\n usage: \"Передаётся как query-параметр caseParticipantProfileId исходного GET.\",\n },\n caseParticipantId: {\n description: \"Участник события, персональные данные которого запрашивает гостевой клиент.\",\n usage: \"Передаётся как query-параметр caseParticipantId исходного GET вместе с securityToken.\",\n },\n} satisfies Record<keyof GetCaseOptions, ItemFieldDoc>;\n\nexport const getLoyaltySystemOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n} satisfies Record<keyof GetLoyaltySystemOptions, ItemFieldDoc>;\n\nexport const getLoyaltyCardOptionsFieldDocEntries = {\n ...torrowItemGetOptionsFieldDocEntries,\n includeBalance: {\n description: \"Включать рассчитанный баланс карты лояльности в ответ.\",\n usage: \"Передаётся как query-параметр includeBalance исходного GET.\",\n },\n} satisfies Record<keyof GetLoyaltyCardOptions, ItemFieldDoc>;\n\nexport const updateCalendarItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateCalendarItemOptions, ItemFieldDoc>;\n\nexport const updateContactItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateContactItemOptions, ItemFieldDoc>;\n\nexport const updateResourceItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n profileId: profileIdUpdateFieldDoc,\n} satisfies Record<keyof UpdateResourceItemOptions, ItemFieldDoc>;\n\nexport const updateServiceItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n isNeedAnnouncement: {\n description: \"Нужно ли создать объявление об обновлении услуги; boolean, null или пропуск.\",\n usage:\n \"Передаётся как query-параметр isNeedAnnouncement исходного PUT; false не отключает серверное обновление персональных связей.\",\n },\n profileId: profileIdUpdateFieldDoc,\n} satisfies Record<keyof UpdateServiceItemOptions, ItemFieldDoc>;\n\nexport const updateCaseItemOptionsFieldDocEntries = {\n ...torrowItemUpdateOptionsFieldDocEntries,\n profileId: profileIdUpdateFieldDoc,\n securityToken: securityTokenUpdateFieldDoc,\n} satisfies Record<keyof UpdateCaseItemOptions, ItemFieldDoc>;\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: \"Проверка уникальности на сервере; используется в URL публичной карточки. Не путать с id элемента.\",\n },\n image: {\n description: \"Метаданные основного изображения/аватара элемента.\",\n valueSchema: \"FileInfo\",\n usage:\n \"Превью в карточке; загрузка байтов через `.../image/puturl` (`fileId`, опционально `fileName`/`fileSize` в query), затем в теле **`create`**/**`update`** — **`{ id }`** (как torrow-apps). В ответах GET — полный **FileInfo** (`url`, `fileName`, …). **image/info**, **updateImageId** — после создания.\",\n },\n masterInfo: {\n description: \"Заголовок, подзаголовок, локализованные строки для карточки и анонса.\",\n valueSchema: \"MasterInfo\",\n usage: \"Отображение в шапке элемента; различается по типам элементов.\",\n },\n publicityType: {\n description: \"Кто может видеть элемент и как выдаётся доступ (персональный, по ссылке, публичный и т.д.).\",\n examples: [\"Personal\", \"Link\", \"PublicAvailable\", \"PublicWithRequest\"],\n usage:\n \"SDK принимает только Personal, PublicWithRequest, PublicAvailable и Link. При create значение задаётся через `options.publicityType`; пропуск отправляет Personal, одноимённое поле предметного тела не является источником. Для существующего item публичность меняется только через `updatePublicity`, а обычный update поле не принимает. При чтении серверные Private и Undefined становятся Personal; исходные wire DTO сохраняют эти значения. Private можно вернуть отдельным изменением после подтверждённого исправления сервера, Undefined — по отдельному решению. Для карточек «только по ссылке» часто сочетается с `anyoneAccess: Read` и отключённым поиском (`searchMode: NoneSearchMode`). Текстовый **`client.search.*`** (contacts/notes/…) индексирует только **`PublicAvailable`** / **`PublicWithRequest`** (см. **`docs/agents/participation-flow.md`** §3).\",\n },\n searchMode: {\n description: \"Участие элемента в поиске/выдаче (контракт API).\",\n examples: [\"UnknownSearchMode\", \"NoneSearchMode\", \"Partial\", \"Full\"],\n usage:\n \"Фильтрация в списках и индексация. `NoneSearchMode` — элемент не ищется в общей выдаче, но может открываться по прямой ссылке/uniqueName. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n anyoneAccess: {\n description: \"Параметры анонимного или широкого доступа без явного участия.\",\n valueSchema: \"AnyoneAccess\",\n examples: [\"NoneAnyoneAccess\", \"Read\", \"ReadWrite\", \"Denied\"],\n usage:\n \"С `publicityType: Link` и `Read` аноним может читать карточку по ссылке в пределах прав сервера. В телах create/update SDK не передаётся: значение выставляет сервер от `publicityType`.\",\n },\n tags: {\n description: \"Список строковых тегов (хэштеги) для группировки и фильтров.\",\n examples: [\"работа\", \"семья\", \"срочно\"],\n usage:\n \"В read-моделях фасадов optional tags с серверным null отсутствует как ключ; явно полученный [] сохраняется. Исходная обязательность поля не меняется. Изменение — updateTags(id, string[]), очистка — []; null не поддерживается входом. Отдельный listTags возвращает [] при штатном успешном null/пустом ответе и сохраняет ошибки API. Raw/http сохраняют wire-значение tags.\",\n },\n rating: {\n description: \"Агрегированный рейтинг/оценки, если включены для типа.\",\n valueSchema: \"Rating\",\n },\n personalInfo: {\n description:\n \"Персональное участие текущего профиля в элементе: роль участника, порядок сортировки, напоминания, тип контента. personalInfo.meta относится к PersonalLink текущего участника, а не к самому элементу; версии и времена изменения независимы. См. PersonalInfo.meta и общее объяснение: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n valueSchema: \"PersonalInfo\",\n usage:\n \"Для GET заметки полнота полученного содержимого определяется itemContentType: Full — показывать, NoRights — отказ в правах, SubscriptionIsNotValid — ограничение подписки; отсутствующий/Unknown не подтверждает Full. Дополнительный ReadItem для показа Full не требуется: тип содержимого и operationList формируются отдельно, NoRights не гарантирует отсутствия ReadItem. Для действий проверяйте соответствующую операцию (UpdateItem, RequestAccessToItem и т.д.); сервер проверит её заново. После requestAccess проверяйте состояние: Requested ждёт решения владельца, некоторые существующие состояния переходят в Accepted; после Accepted заново читайте элемент. В сервисе проверяется itemContentType Full для сценариев check-in. Руководство: docs/item-access-errors.md. В существующем personalInfo поля personalReminders и notificationWayList имеют array-only read-контейнер: серверный null удаляет соответствующий ключ, явный [] сохраняется. Сам personalInfo:null или отсутствие не заменяется объектом. operationList, subscriptionList и вложенные списки NotificationWay сохраняют прежнюю nullable-семантику.\",\n },\n blockInfo: {\n description: \"Состояние и причина блокировки элемента.\",\n valueSchema: \"BlockInfo\",\n usage:\n \"Методы block/unblock по типу объекта (Case, Contact, Note, …). Выполняет только **администратор Torrow**; обычная сессия — HTTP 403.\",\n },\n groupInfo: {\n description: \"Связь с группами, родителями, иерархией mind-map.\",\n valueSchema: \"GroupInfo\",\n },\n solutionData: {\n description: \"Предметная конфигурация «решения» под тип элемента.\",\n valueSchema: \"SolutionData\",\n usage:\n \"У контакта часто задаёт раскладку карточки: `viewBlockSettings.blockSettings[]` с `name`, `order` и **числовым** `objectType` (в продукте: 1003 — заметка, 1005 — услуга и т.д.; см. константы клиента `NOTE`/`SERVICE`). Строковые имена типов в других полях (`childItemStats.objectType`) приходят как enum-строки.\",\n },\n childItemStats: {\n description: \"Агрегированная статистика по дочерним элементам (количества по типам).\",\n valueSchema: \"ChildItemStat[]\",\n examples: ['[{\"objectType\":\"Service\",\"itemCount\":2},{\"objectType\":\"Note\",\"itemCount\":1}]'],\n usage:\n \"На странице услуги: решение показывать ли check-in при отсутствии детей. Запрашивается через SDK-опцию `includeChildItemStats: true`; для контакта она передаётся в wire query как `includeChildTypes=true`. Без авторизации список дочерних id через отдельные эндпоинты mind-map может быть недоступен.\",\n },\n feedbackOptions: {\n description: \"Настройки сбора отзывов и обратной связи.\",\n valueSchema: \"FeedbackOptions\",\n },\n integrationIds: {\n description: \"Идентификаторы подключённых интеграций (внешние системы).\",\n valueSchema: \"string[]\",\n usage:\n \"Optional read-поле карточки: серверный null удаляет ключ, отсутствие сохраняется, явный [] остаётся массивом. updateIntegrations принимает массив; [] очищает список. OrderResp.integrationIds не нормализуется.\",\n examples: [\"integration-uuid-1\"],\n },\n meta: {\n description:\n \"Метаданные самого элемента: версия, soft-delete, архив, даты. Не путать с personalInfo.meta персональной связи.\",\n valueSchema: \"ObjectInfo\",\n usage:\n \"Для CAS используйте meta.version элемента по контракту конкретного метода: versionToCheck в query либо meta.version в теле с checkVersion. personalInfo.meta.version для CAS элемента не подходит.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemBaseFieldDocs = mapFieldDocsToStrings(torrowItemBaseFieldDocEntries);\n","/**\n * Подробности **`ContactItem.visitCard`** и полей **`ContactVisitCardField`**.\n *\n * Это поле задаёт **слоты отображения** (визитная вёрстка контакта), а не сущность «Профиль пользователя».\n * Профиль — отдельный продуктовый и API-контур (`profileType`, операции **`/api/v1/user/profiles`**).\n *\n * `expression` в API — JSON в виде **строки**: парсинг на стороне клиента, тип слота задаёт источник данных\n * (поля контакта, `communications`, `addresses`). Клиент может пересчитывать отображаемую строку `value`\n * из `expression` и актуальных полей контакта перед сохранением.\n */\nimport type { ItemFieldDoc } from \"../field-doc-entry.js\";\n\nexport const contactVisitCardFieldDoc: ItemFieldDoc = {\n valueSchema: \"ContactVisitCard\",\n description:\n \"Структура **слотов отображения** контакта (массив `fields`): что показать в блоке «визитка» в UI. Для **контакта** в продукте длина `fields` фиксирована: **ровно три элемента** (слоты с `number` 0…2); лишние записи не используйте при сохранении через API. Заполняется у обычных контактов и у **Профиля** пользователя (контакт с `profileType`, напр. `MyProfile`), но **не заменяет** Профиль: Профиль — это контакт, привязанный к пользователю и получаемый через API **User** (`/api/v1/user/profiles`), см. `ContactItem.profileType`. У каждого слота есть порядковый номер (`number` в API), сохранённая строка `value` и поле `expression` — **отдельная JSON-строка** (в OpenAPI тип string), внутри объект с полем `type` и при необходимости `rid`. Тип задаёт, **из каких полей контакта** (или из какой записи в `communications`/`addresses`) брать текст при показе и при пересчёте на клиенте.\",\n examples: [\n '{\"type\":\"FullName\"}',\n '{\"type\":\"LastNameFirstName\"}',\n '{\"type\":\"Description\"}',\n '{\"type\":\"Phone\",\"rid\":\"0123456789abcdef01234567\"}',\n '{\"type\":\"Email\",\"rid\":\"abcdef0123456789abcdef01\"}',\n '{\"type\":\"Website\",\"rid\":\"fedcba9876543210fedcba98\"}',\n ],\n usage:\n 'В теле API `expression` — строка: `JSON.parse` даёт объект с полем `type` (enum в OpenAPI — `VisitCardExpressionType` и родственные значения для карточек кейса). Для контакта типичны FullName, LastNameFirstName, Initials, ShortName, Name, Organization, OrganizationPosition, Position, Description, Phone, Email, Website, Address, PlaceAddress. Для Phone/Email/Website/Address в JSON указывают `rid`, совпадающий с `rid` в `communications` или `addresses`. Для вычисляемых типов подпись строится из `firstName`/`lastName`/`middleName`, `company`, `position`, `description`. `value` — сохранённое отображаемое значение слота. **Не отправляйте больше трёх элементов в `fields` для контакта** — три слота соответствуют форме клиента; контакты/телефоны вынесены в `communications`, а не в четвёртый слот визитки. Разметка на экране: слоты по `number` 0…2; по типу выбирают иконку и действие (например, открыть адрес). На **`contacts.create`** и **`contacts.update`** SDK при наличии объекта **`visitCard`** в теле дополняет недостающие слоты 0…2 пустыми `{ number, value: \"\" }`, чтобы снять отказы схемы БД при неполном массиве. Добавление **Профиля** (привязка контакта к пользователю) — через операции **User** над **`/api/v1/user/profiles`**, не через заполнение только этого поля; после сохранения у Профиля может быть и `visitCard`, и нужный `profileType`.',\n};\n","/**\n * **`ContactItem`** — структурированные описания полей.\n * @see components.schemas.ContactItem\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { contactVisitCardFieldDoc } from \"./nested/contact-visit-card.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const contactItemSpecificFieldDocEntries = {\n addresses: {\n description: \"Почтовые и другие адреса контакта.\",\n valueSchema: \"Address[]\",\n usage: \"Отображение адреса в карточке; клик открывает карту/детали.\",\n },\n birthday: {\n description: \"Дата рождения контакта.\",\n examples: [\"1990-05-15T00:00:00.000Z\"],\n },\n communications: {\n description:\n \"Каналы связи: телефон, email, сайты, мессенджеры и т.д. У одного типа может быть несколько записей (например, несколько WebSite) — различаются полем order.\",\n valueSchema: \"Communication[]\",\n usage:\n \"У телефона в `value` — отображаемый формат, в `valueForSearch` — нормализованные цифры для поиска. У мессенджеров (`Telegram`, `Max`) `value` часто хранит идентификатор/handle. `checkDate` — read-only (ответ GET), в **`CommunicationForCreateOrUpdate`** нет. `checkState` опционален при create/update; если не передан — SDK подставляет `Unchecked`. Основной канал для уведомлений — `personalInfo.defaultCommunication`.\",\n },\n dates: {\n description: \"Памятные даты (именины, юбилеи).\",\n valueSchema: \"MemorableDate[]\",\n },\n firstName: {\n description: \"Имя (поле визитки; для человека — имя, для «организации как контакта» может хранить часть названия).\",\n examples: [\"Иван\", \"Студия\"],\n usage:\n \"Вместе с 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 },\n photos: {\n description: \"Дополнительные фотографии помимо image.\",\n valueSchema: \"FileInfo[]\",\n },\n visitCard: contactVisitCardFieldDoc,\n profileType: {\n description:\n \"Роль контакта относительно учётной записи пользователя Torrow. Значения — строковый enum в OpenAPI (`ProfileType`). **Не путать с полем `visitCard`:** это разные вещи (см. ниже).\",\n valueSchema: \"ProfileType\",\n usage:\n \"**Профиль** в продукте — это `ContactItem`, который описывает самого пользователя Torrow и привязан к его учётной записи. В API такой контакт помечается, в частности, значением **`MyProfile`**: участие в записях, обратная связь, выбор «с какого профиля действовать», личный кабинет. У одного пользователя может быть несколько таких контактов (лимит задаёт продукт). Список и добавление **Профилей** выполняются **отдельными операциями раздела User** в OpenAPI (например `GET`/`POST` **`/api/v1/user/profiles`**, ответы `ProfileListResp` / `AddProfileResp`), а не только общим CRUD контактов по `/api/v1/contacts/...`. В SDK: **`TorrowClient.profiles.list()`** возвращает **`ContactItem[]`** (ответ HTTP — **`ProfileListResp`**); описания — **`ProfilesSdkMethods`**, **`ProfileListResp`**, **`AddProfileResp`** в `mcpUserProfilesFieldCatalog`. Обычный контакт в адресной книге без роли профиля владельца — как правило **`None`** или отсутствие значения. **`AnyProfile`**, **`CopyProfile`**, **`UnknownProfile`** — прочие значения enum; уточняй по спецификации и ответам сервера. Поле **`visitCard`** — это **не** Профиль: это структура слотов отображения (как визитка на экране) и может быть у разных контактов, включая Профиль; сам факт «это Профиль пользователя» задаётся **`profileType`** и связью через API пользователя. Для **`POST /api/v1/contacts`** поля **`profileType`**, **`profileProperties`**, **`hasTimetable`** в типе **`ContactItemForCreateOrUpdate`** нет — они передаются при **`client.profiles.add`** в типе **`UserProfileItemForAdd`**.\",\n },\n activityStatus: {\n description:\n \"Статус активности контакта в UI. **Только для чтения:** в теле `POST`/`PUT` контактов не задаётся; в **`TorrowItemForCreateOrUpdate`** / **`ContactItemForCreateOrUpdate`** поля нет (ключ **`activityStatus`** в `TorrowItemKeysExcludedFromItemWriteBody`).\",\n valueSchema: \"ActivityStatus\",\n },\n profileProperties: {\n description: \"Расширенные свойства профиля.\",\n valueSchema: \"ProfileProperties\",\n usage:\n \"Часто содержит цвет акцента карточки (`color`, hex) и доступность владельца (`profileUserAvailability`). В **`ContactItemForCreateOrUpdate`** поля нет — передаётся в **`UserProfileItemForAdd`** при **`client.profiles.add`**.\",\n },\n contactProperties: {\n description:\n \"Настройки контакта: видимость расписания контакта (`timetableVisibility`), кто может приглашать (`invitationRight`), право видеть расписание (`timetableVisibilityRight`).\",\n valueSchema: \"ContactProperties\",\n usage:\n \"Маппинг из форм создания/настроек. Расписание может быть скрыто на уровне контакта, при этом дочерние услуги всё равно ведут свою запись и слоты.\",\n },\n hasTimetable: {\n description: \"Признак: у контакта заведено расписание (слоты).\",\n examples: [\"true\", \"false\"],\n usage:\n \"Может быть false, даже если у вложенных услуг есть бронирование: расписание живёт на услуге, а не на контакте. В **`ContactItemForCreateOrUpdate`** поля нет — в **`UserProfileItemForAdd`** при создании Профиля.\",\n },\n loyaltyCard: {\n description: \"Вложенный элемент — карта лояльности, привязанная к контакту.\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contactItemSpecificFieldDocEntries,\n personalInfo: {\n description: \"Участие профиля пользователя в контакте: роль участника, способы уведомлений, подписки, псевдоним.\",\n valueSchema: \"ContactPersonalInfo\",\n usage:\n \"Отличается от базового PersonalInfo других элементов; хранит profileId, participantState/Type. Для открытия карточки по ссылке без входа в ответе может быть сценарий с `participantType` вроде PublicReader и списком `operationList` (в т.ч. чтение дочерних элементов при наличии прав сервера).\",\n },\n};\n\nexport const contactItemFieldDocs = mapFieldDocsToStrings(contactItemFieldDocEntries as Record<string, ItemFieldDoc>);\n\nexport const contactItemSpecificFieldDocs = mapFieldDocsToStrings(\n contactItemSpecificFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","/**\n * **`NoteItem`**\n * @see components.schemas.NoteItem; UI: `libs/mobile/mind-map/.../note-info.component`\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst noteSpecificFieldDocEntries = {\n publicityType: {\n ...torrowItemBaseFieldDocEntries.publicityType,\n usage:\n \"`notes.create` принимает Personal, PublicWithRequest, PublicAvailable и Link только через create-options; пропуск отправляет Personal, а поле исходного тела игнорируется. `notes.update` публичность не принимает; для существующей заметки используется `notes.updatePublicity`. Серверные Private/Undefined при чтении становятся Personal.\",\n },\n meta: {\n ...torrowItemBaseFieldDocEntries.meta,\n usage:\n \"notes.update принимает meta.version из прочитанной заметки в теле запроса; сервер использует его для проверки конкурирующих изменений. SDK сохраняет переданный checkVersion и не подставляет false. Для delete версия передаётся как versionToCheck в query.\",\n },\n noteType: {\n description:\n \"Формат заметки SDK: Html, Markdown или Text; остальные серверные строки при чтении становятся Text. Доменное data отдельно проверяется как текст.\",\n examples: [\"Html\", \"Markdown\", \"Text\"],\n valueSchema: \"NoteType\",\n usage:\n \"Для нового содержимого явно задавайте Html, Markdown или Text. Неверный формат записи отклоняется до HTTP, включая raw. Прочитанный Text может быть сохранён при update/patch; исходный серверный формат не восстанавливается. Файлы прикладываются через files независимо от формата текста; imagePreviewSize задаёт отображение вложений. Заметки на карточке контакта могут попадать в отдельный блок ContactItem.solutionData.viewBlockSettings.\",\n },\n data: {\n description:\n \"Содержимое доменного NoteItem/NoteView всегда string: HTML для Html, исходный Markdown для Markdown, текст для Text. Серверные null/missing становятся пустой строкой; другие нестроковые значения отклоняются. Raw/OpenAPI data сохраняет широкий wire-контракт.\",\n valueSchema: \"string\",\n examples: ['\"\"', '\"<p>Заметка</p>\"', '\"# Заметка\\\\n\\\\nТекст\\\\n\"'],\n usage:\n \"Create/update требуют явную строку data без default (NoteItemForCreateOrUpdate); patch принимает только string, очистка через пустую строку. Null/undefined отклоняются; пропуск в patch сохраняет raw string/null/missing. Явная пустая строка отличается от raw null/missing для no-op и требует CAS PUT. SDK не меняет пробелы/переносы, не разбирает JSON/ISO текст; фактическое хранение сервером проверяется отдельно. Нормализация partial/NoRights не подтверждает Full или права. Рендеринг HTML относится к приложению.\",\n },\n files: {\n description:\n \"Необязательный массив вложений (не основное image); серверный null удаляет ключ в NoteItem, явный [] сохраняется.\",\n valueSchema: \"FileInfo[]\",\n examples: ['[ { \"id\": \"…\" } ]', '[ { \"id\": \"…\", \"fileName\": \"a.pdf\", \"url\": \"…\", … } ]'],\n usage:\n \"**create**/**update** сохраняют допустимый null; для элементов достаточно **`id`**. notes.patch полностью заменяет список ссылок {id}; [] снимает вложения, пропуск сохраняет, null запрещён. Файлы предварительно загружаются отдельно; сервер может удалить отсоединённые файлы. **getById** / read — полный **FileInfo** (url, fileName, fileSize, urlExpiration, refreshUrl); отсутствие поля отличается от явного []. Собственное NoteView.files сохраняет прежний контракт.\",\n },\n imagePreviewSize: {\n description: \"Размер превью в списке/слайдере.\",\n examples: [\"Small\", \"Medium\", \"Large\", \"SmallSlider\", \"MediumSlider\", \"LargeSlider\", \"Hidden\"],\n valueSchema: \"ImagePreviewSize\",\n usage:\n \"Hidden скрывает файлы в UI; Slider — режим карусели. notes.patch: Undefined очищает настройку, create default Small не подставляется.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const noteItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...noteSpecificFieldDocEntries,\n};\n\nexport const noteItemFieldDocs = mapFieldDocsToStrings(noteItemFieldDocEntries);\n","/**\n * MCP: методы **`client.notes`** (`NotesFacade`), не покрытые общим **`TorrowItemFacadeSdkMethods`**.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const notesSdkMethodFieldDocEntries = {\n getFileInfo: {\n description:\n \"Читает Full-карточку заметки, затем `GET /api/v1/notes/{torrowId}/file/info` только при наличии выбранного вложения. Результат **`FileInfo | null`**: null означает отсутствие связи в files, один GET; наличие — два GET. Query **`fileId`** обязателен всегда.\",\n valueSchema: \"(torrowId: string, fileId: string, options?: { signal? }) → FileInfo | null\",\n usage:\n \"Если в **`NoteItem.files`** есть живой `url`, его можно использовать напрямую; иначе **`client.notes.getFileInfo(noteId, fileId)`** требует доступную Full-карточку и проверку null перед чтением url. Ошибки карточки и metadata сохраняются. Метод не скачивает байты и не обновляет сессию/URL автоматически. Примеры: **`notes-file-info.ts`** (штатный null), **`notes-file-text-urls.ts`**, **`notes-file-image-urls.ts`** (после upload отсутствие связи — ошибка сценария).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const notesSdkMethodFieldDocs = mapFieldDocsToStrings(notesSdkMethodFieldDocEntries);\n","/**\n * Пресеты иконок контекста (torrow-apps `IconSetService` + `ContextFormMapper`).\n *\n * На wire нет поля `iconName`: пресет = SVG-файл в `ContextItem.image`\n * с `fileName` вида `{preset}.svg` (и заливка из `color`). Произвольные\n * JPEG/PNG/прочие SVG тоже допустимы через обычный upload `image`.\n */\nimport { CONTEXT_ICON_PRESET_PATHS, type ContextIconPresetPathKey } from \"./context-icon-preset-paths.js\";\n\n/** Ключи пресетов — значения совпадают с `IconSetService.icons` / basename `*.svg`. */\nexport const ContextIconPresetValues = {\n Anchor: \"anchor\",\n Animals: \"animals\",\n Auto: \"auto\",\n Beauty: \"beauty\",\n Beauty2: \"beauty2\",\n Botanical: \"botanical\",\n Children: \"children\",\n Devices: \"devices\",\n Entertainment: \"entertainment\",\n Evolution: \"evolution\",\n Family: \"family\",\n Friends: \"friends\",\n Gamepad: \"gamepad\",\n Health: \"health\",\n Hobbies: \"hobbies\",\n Home: \"home\",\n Idea: \"idea\",\n Money: \"money\",\n Music: \"music\",\n Palm: \"palm\",\n Party: \"party\",\n ReparingService: \"reparingService\",\n Security: \"security\",\n Smile: \"smile\",\n Sport: \"sport\",\n Theater: \"theater\",\n Travel: \"travel\",\n Work: \"work\",\n World: \"world\",\n RegisterOrder: \"register_order\",\n} as const satisfies Record<string, ContextIconPresetPathKey>;\n\nexport type ContextIconPresetValue = (typeof ContextIconPresetValues)[keyof typeof ContextIconPresetValues];\n\nconst PRESET_SET = new Set<string>(Object.values(ContextIconPresetValues));\n\nlet nextSvgId = 0;\n\nexport function isContextIconPreset(value: string | null | undefined): value is ContextIconPresetValue {\n return typeof value === \"string\" && PRESET_SET.has(value);\n}\n\n/** Имя файла image для пресета — как в `ContextFormMapper` (`iconName + \".svg\"`). */\nexport function getContextIconPresetFileName(preset: ContextIconPresetValue): string {\n return `${preset}.svg`;\n}\n\n/**\n * Восстановить ключ пресета из `image.fileName` (basename без `.svg`).\n * Для кастомных картинок / неизвестных имён — `undefined`.\n */\nexport function parseContextIconPresetFromImage(\n image: { fileName?: string | null } | null | undefined,\n): ContextIconPresetValue | undefined {\n const fileName = image?.fileName;\n if (!fileName) {\n return undefined;\n }\n const base = fileName.split(/[/\\\\]/).pop() ?? fileName;\n const withoutExt = base.replace(/\\.svg$/i, \"\");\n\n return isContextIconPreset(withoutExt) ? withoutExt : undefined;\n}\n\nexport type BuildContextIconSvgOptions = {\n /** Заливка path; в apps обычно `ContextItem.color`. */\n color?: string;\n backgroundColor?: string;\n /** Атрибут `inversed` на path — как в `IconSetService.createSvg`. */\n inversed?: boolean;\n};\n\n/**\n * SVG-разметка пресета (без DOM) — эквивалент `IconSetService.getIcon` / blob из `getIconUrl`.\n * Готово к upload как `image/svg+xml` с именем {@link getContextIconPresetFileName}.\n */\nexport function buildContextIconSvg(preset: ContextIconPresetValue, options?: BuildContextIconSvgOptions): string {\n const d = CONTEXT_ICON_PRESET_PATHS[preset];\n const id = `iconSet${(nextSvgId += 1)}`;\n const colorAttr = options?.color ? ` fill=\"${escapeXmlAttr(options.color)}\"` : \"\";\n const inversedAttr = options?.inversed !== undefined ? ` inversed=\"${options.inversed ? \"true\" : \"false\"}\"` : \"\";\n const styleAttr = options?.backgroundColor\n ? ` style=\"background-color: ${escapeXmlAttr(options.backgroundColor)};\"`\n : \"\";\n\n return (\n `<svg viewBox=\"7 7 40 40\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"${styleAttr}>` +\n `<defs><path d=\"${escapeXmlAttr(d)}\" id=\"${id}\"${colorAttr}${inversedAttr}/></defs>` +\n `<use xlink:href=\"#${id}\" stroke=\"none\" stroke-width=\"1\" fill-rule=\"evenodd\"/>` +\n `</svg>`\n );\n}\n\n/** UTF-8 bytes SVG для `uploadBytes` / `getImagePutUrl`. */\nexport function buildContextIconSvgBytes(\n preset: ContextIconPresetValue,\n options?: BuildContextIconSvgOptions,\n): Uint8Array {\n return new TextEncoder().encode(buildContextIconSvg(preset, options));\n}\n\nfunction escapeXmlAttr(value: string): string {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n","/**\n * **`ContextItem`** — группа/метка для организации элементов.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\nimport { ContextIconPresetValues } from \"../resources/contexts/context-icon-preset.js\";\n\nconst contextSpecificFieldDocEntries = {\n color: {\n description:\n \"Цвет метки контекста в UI; для пресет-иконки apps также заливают этим цветом SVG path (`buildContextIconSvg(..., { color })`).\",\n examples: [\"#FF5722\", \"#2E7D32\", \"rgb(255,0,0)\"],\n usage: \"Визуальная группировка в mind-map и списках; вместе с `image` для пресета.\",\n },\n description: {\n description: \"Текстовое описание назначения контекста.\",\n examples: [\"Рабочие контакты\", \"Личное\"],\n },\n image: {\n description:\n \"Файл аватара/иконки. В apps выбор пресета = upload SVG с `fileName` `{preset}.svg` (см. MCP **`ContextIconPresetValues`**); произвольный JPEG/PNG тоже допустим через тот же `image`.\",\n examples: ['{ id, fileName: \"home.svg\" }', '{ id, fileName: \"custom.jpg\" }'],\n usage:\n \"Пресет: `buildContextIconSvg` + `getImagePutUrl` + `image: { id }`. Кастом: обычный upload. Обратно: `parseContextIconPresetFromImage(image)`.\",\n valueSchema: \"FileInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Справочник ключей пресет-иконок (wire — basename `*.svg`, не отдельное поле DTO). */\nexport const contextIconPresetValuesFieldDocEntries = Object.fromEntries(\n Object.entries(ContextIconPresetValues).map(([pascal, key]) => [\n pascal,\n {\n description: `Пресет иконки контекста \\`${key}\\` (torrow-apps IconSetService). На API уходит как image-файл \\`${key}.svg\\`.`,\n examples: [key, `${key}.svg`],\n usage: `ContextIconPresetValues.${pascal}; buildContextIconSvg / getContextIconPresetFileName.`,\n valueSchema: \"ContextIconPresetValues\",\n } satisfies ItemFieldDoc,\n ]),\n) as Record<string, ItemFieldDoc>;\n\nexport const contextIconPresetValuesFieldDocs = mapFieldDocsToStrings(contextIconPresetValuesFieldDocEntries);\n\nexport const contextItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...contextSpecificFieldDocEntries,\n};\n\nexport const contextItemFieldDocs = mapFieldDocsToStrings(contextItemFieldDocEntries);\n","/**\n * **`CalendarItem`**\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\n/**\n * Индексы вида расписания (`calendarViewIndex` / `timetableView`) для MCP.\n * В JSON — **число**; имена Day/Schedule — только подписи (как `LayoutTypeValues`).\n */\nexport const timetableViewTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник int-кодов вида расписания по умолчанию (`CalendarItem.calendarViewIndex`, `ServiceItem.timetableView`). Не OpenAPI-enum: в теле API передавай **число** (`0`…`5`).\",\n valueSchema: \"TimetableViewTypeValues\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"],\n usage:\n \"UI apps: Day / Poster / Schedule. В TypeScript SDK — `TimetableViewTypeValues.*` (то же число). Не передавай имя `Schedule` строкой — только int.\",\n },\n Day: {\n description: \"`0` — вид «День» (дефолт формы календаря в apps, если тип не выбран явно).\",\n examples: [\"0\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Month: {\n description: \"`1` — вид «Месяц» (в UI календаря часто скрыт).\",\n examples: [\"1\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n MonthEventList: {\n description: \"`2` — список событий месяца.\",\n examples: [\"2\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n ConnectCalendar: {\n description: \"`3` — подключённый/внешний календарь.\",\n examples: [\"3\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Poster: {\n description: \"`4` — «Афиша».\",\n examples: [\"4\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n Schedule: {\n description: \"`5` — «Список событий» / Schedule.\",\n examples: [\"5\"],\n valueSchema: \"TimetableViewTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableViewTypeValuesFieldDocs = mapFieldDocsToStrings(timetableViewTypeValuesFieldDocEntries);\n\nconst calendarSpecificFieldDocEntries = {\n description: {\n description: \"Описание календаря для пользователя.\",\n examples: [\"Рабочий календарь 2025\"],\n usage:\n \"calendars.patch: пропуск сохраняет описание, null или пустая строка очищает содержимое; результат отражает серверную нормализацию.\",\n },\n calendarViewIndex: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day, `1` Month, `2` MonthEventList, `3` ConnectCalendar, `4` Poster, `5` Schedule. Полный справочник — MCP **`TimetableViewTypeValues`**.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage:\n \"UI: `CALENDAR_FORM.TYPE_INPUT`. То же число, что `ServiceItem.timetableView`. calendars.patch принимает int32|null: 0 записывается, сервер может вернуть его как null; null очищает. Apps проверяют truthy — `0` (Day) неотличим от «не задано» при чтении в UI.\",\n },\n scheduleRangeExceptions: {\n description: \"Исключения из базового расписания: замены и исключённые интервалы.\",\n valueSchema: \"ScheduleRangeExceptions\",\n usage:\n \"calendars.patch полностью заменяет структуру: пропущенные внутри списки не объединяются со старыми. null снимает структуру, {} или пустые списки очищают интервалы. begin/end — Date SDK. Это не создание/включение Case и не чтение timetable.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const calendarItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...calendarSpecificFieldDocEntries,\n};\n\nexport const calendarItemFieldDocs = mapFieldDocsToStrings(calendarItemFieldDocEntries);\n","/**\n * **`LoyaltySystemItem`** — поля create/update, критичные для MCP\n * (wire-строки OpenAPI в `examples`, не имена TS-констант).\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nconst loyaltySystemSpecificFieldDocEntries = {\n description: {\n description: \"Описание программы лояльности.\",\n examples: [\"Программа скидок 2025\"],\n },\n startDate: {\n description: \"Дата начала программы (ISO date-time).\",\n examples: [\"2025-01-01T00:00:00.000Z\"],\n },\n expiredDate: {\n description: \"Дата окончания программы (ISO date-time).\",\n examples: [\"2026-01-01T00:00:00.000Z\"],\n },\n loyaltyCardIssueType: {\n description:\n \"Способ выпуска карты. В JSON — **строка**: `Manual`, `AutoActive`, `AutoIssued`. Каталог MCP **`LoyaltyCardIssueType`**. Дефолт apps create: `AutoActive`.\",\n examples: [\"AutoActive\", \"Manual\", \"AutoIssued\"],\n valueSchema: \"LoyaltyCardIssueType\",\n },\n loyaltyCardAnyoneAccess: {\n description:\n \"Публичный доступ к карте. В JSON — **строка** `AnyoneAccess`: `Read`, `NoneAnyoneAccess`, `ReadWrite`, `Denied`. Каталог **`AnyoneAccess`**. Дефолт apps: `Read`.\",\n examples: [\"Read\", \"NoneAnyoneAccess\", \"ReadWrite\", \"Denied\"],\n valueSchema: \"AnyoneAccess\",\n },\n loyaltyCardUpdateKeyInformation: {\n description:\n \"Правило key-полей карты. В JSON — **строка**: `NonKeyDisallowed`, `NonKeyAllowed`. Каталог **`LoyaltyCardUpdateKeyInformation`**. Дефолт apps: `NonKeyDisallowed`.\",\n examples: [\"NonKeyDisallowed\", \"NonKeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateKeyInformation\",\n },\n loyaltyCardUpdateNonKeyInformation: {\n description:\n \"Правило non-key полей. В JSON — **строка**: `KeyDisallowed`, `KeyAllowed`. Каталог **`LoyaltyCardUpdateNonKeyInformation`**.\",\n examples: [\"KeyDisallowed\", \"KeyAllowed\"],\n valueSchema: \"LoyaltyCardUpdateNonKeyInformation\",\n },\n loyaltyCardUsagePeriod: {\n description: \"Срок действия карты в днях.\",\n examples: [\"365\", \"30\"],\n },\n beginTransactionValues: {\n description: \"Начальные значения будущего выпуска (`TransactionValue[]`); не изменяет балансы уже выпущенных карт.\",\n valueSchema: \"TransactionValue[]\",\n usage:\n \"Optional read: серверный null удаляет ключ; [] сохраняется. Patch принимает массив/[], но не null; полный create/update сохраняет исходный nullable wire-контракт.\",\n },\n initialSubscription: {\n description: \"Конфигурация стартового абонемента будущих карт; не изменяет существующие подписки.\",\n valueSchema: \"InitialSubscription\",\n },\n accountingProductNames: {\n description: \"Имена учётных продуктов программы (обязательны вместе с `beginTransactionValues`).\",\n valueSchema: \"AccountingProductName[]\",\n usage:\n \"Optional read: серверный null удаляет ключ, [] остаётся пустым массивом. Patch не принимает null; полный create/update сохраняет nullable wire-вход.\",\n },\n referralProgramIds: {\n description: \"Список ID связанных реферальных программ.\",\n valueSchema: \"string[]\",\n usage:\n \"Optional read: серверный null удаляет ключ, массив сохраняет порядок и повторы. Patch заменяет список массивом, [] очищает, null запрещён; полный create/update сохраняет nullable wire-вход.\",\n },\n numeratorInfo: {\n description: \"Нумерация карт, только создание и чтение; root update/patch её не изменяет.\",\n valueSchema: \"NumeratorInfo\",\n },\n businessCardId: {\n description: \"Id визитки/контакта, привязанного к программе.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n contactInformationFieldsRequirements: {\n description: \"Требования к полям контакта при выпуске карты.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemItemFieldDocEntries: Record<string, ItemFieldDoc> = {\n ...torrowItemBaseFieldDocEntries,\n ...loyaltySystemSpecificFieldDocEntries,\n};\n\nexport const loyaltySystemItemFieldDocs = mapFieldDocsToStrings(loyaltySystemItemFieldDocEntries);\n","/**\n * Вложенные схемы услуги/кейса, нужные MCP для сборки create/update body\n * (wire-литералы строк/чисел, не имена TS-констант).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sessionDurationPropertiesFieldDocEntries = {\n sessionDurationType: {\n description:\n \"Тип длительности сессии. В JSON — **строка** OpenAPI: `Sum`, `Constant`, `Custom`, `SessionDurationNone`, … Каталог MCP **`SessionDurationType`**.\",\n examples: [\"Sum\", \"Constant\", \"Custom\", \"SessionDurationNone\"],\n valueSchema: \"SessionDurationType\",\n },\n timeSelectionType: {\n description:\n \"Кто выбирает время. В JSON — **строка**: `Consumer`, `Executor`, `TimeSelectionNone`. Каталог **`TimeSelectionType`**.\",\n examples: [\"Consumer\", \"Executor\", \"TimeSelectionNone\"],\n valueSchema: \"TimeSelectionType\",\n },\n stateManagementType: {\n description:\n \"Авто/ручное управление состоянием. В JSON — **строка**: `Auto`, `Manual`. Каталог **`StateManagementType`**.\",\n examples: [\"Auto\", \"Manual\"],\n valueSchema: \"StateManagementType\",\n },\n sessionPrecisionType: {\n description: \"Точность слота. В JSON — **строка**: `DateTime`, `Date`. Каталог **`SessionPrecisionType`**.\",\n examples: [\"DateTime\", \"Date\"],\n valueSchema: \"SessionPrecisionType\",\n },\n defaultDuration: {\n description: \"Длительность по умолчанию в секундах (для `Constant` / кастомных сценариев).\",\n examples: [\"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sessionDurationPropertiesFieldDocs = mapFieldDocsToStrings(sessionDurationPropertiesFieldDocEntries);\n\nexport const checkinPermissionFieldDocEntries = {\n userAccessLevel: {\n description:\n \"Кто может check-in / запись. В JSON — **строка** OpenAPI: `Authenticated`, `Unauthenticated`. Каталог MCP **`UserAccessLevel`**.\",\n examples: [\"Authenticated\", \"Unauthenticated\"],\n valueSchema: \"UserAccessLevel\",\n },\n consumerMinTimeSecBetweenCasesInService: {\n description: \"Минимальный интервал (сек) между кейсами одного потребителя в услуге.\",\n examples: [\"0\", \"3600\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkinPermissionFieldDocs = mapFieldDocsToStrings(checkinPermissionFieldDocEntries);\n","/**\n * **`ResourceItem`** — продуктовый ресурс (слот, аренда, билет и т.д.).\n * @see resource-item-business: publicity Link при создании с parentId\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const resourceItemSpecificFieldDocEntries = {\n description: {\n description: \"Текстовое описание ресурса в каталоге и при записи.\",\n },\n itemId: {\n description: \"Связь с элементом-представлением ресурса в модели API.\",\n examples: [\"uuid\"],\n },\n parentResourceId: {\n description: \"Родительский ресурс в иерархии (подресурсы).\",\n usage: \"Иерархия resource group / вложенные услуги.\",\n },\n timetableId: {\n description: \"Идентификатор расписания, к которому привязан ресурс.\",\n },\n schedule: {\n description:\n \"Расписание доступности. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\n valueSchema: \"Schedule\",\n },\n priceInfo: {\n description:\n \"Отображаемая и расчётная ценовая информация. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null; patch требует массив.\",\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 \"Связи ресурса с группами услуг. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Каждая связь определяется парой `id` услуги + `resourceGroupId`; `ResourceBuilder` формирует имена и `laterBinding` из актуальной услуги и группы.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: {\n description: \"Код номенклатуры или внешний артикул.\",\n examples: [\"SRV-001\"],\n },\n duration: {\n description: \"Длительность/расчётная единица ресурса в секундах (int32); SDK не пересчитывает в минуты.\",\n examples: [\"1800\", \"3600\"],\n },\n amountProperties: {\n description:\n \"Количество и лимиты списания. Для записи `totalAmount` передавайте согласованный объект формы: `measure`, `firstValue`, `plusStep`, `minusStep`, `digitsInMeasure`; сокращённый `{ totalAmount }` отклоняется фактической DB-схемой.\",\n valueSchema: \"AmountProperties\",\n },\n usageCondition: {\n description: \"Условия допустимого использования.\",\n valueSchema: \"UsageCondition\",\n },\n appendixList: {\n description:\n \"Приложения и дополнительные материалы. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Даты элементов сохраняются.\",\n valueSchema: \"Appendix[]\",\n },\n paymentProperties: {\n description: \"Настройки оплаты по ресурсу.\",\n usage:\n \"В resourceItems.patch передавайте paymentProviderType и соответствующие parameters. Конфигурация заменяется целиком; отсутствующие/null parameters SDK автоматически не заполняет.\",\n valueSchema: \"PaymentProperties\",\n },\n ticketProperties: {\n description: \"Параметры билета/пропуска (в т.ч. state оплаты в кейсе).\",\n valueSchema: \"TicketProperties\",\n usage: \"В кейсе читается ticketProperties.state (Paid/Used) для кнопки оплаты.\",\n },\n loyaltyTransactionPropertiesList: {\n description:\n \"Параметры транзакций лояльности. В read-карточке серверный null удаляет optional-ключ; [] сохраняется. Полные create/update допускают null, patch — только массив. Вложенные transactionValues сохраняют nullable-контракт.\",\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`, `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 \"Расписание слотов/доступности. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\n valueSchema: \"Schedule\",\n },\n bookingDuration: {\n description: \"Длительность брони слота (единицы по контракту API, часто секунды/минуты в int64).\",\n examples: [\"3600\"],\n },\n timetableView: {\n description:\n \"Вид расписания по умолчанию — **int** в JSON: `0` Day … `5` Schedule (см. MCP **`TimetableViewTypeValues`**). Не строка.\",\n examples: [\"0\", \"4\", \"5\"],\n valueSchema: \"TimetableViewTypeValues | int32 | null\",\n usage: \"UI: `SERVICE_FORM.TYPE_INPUT`. То же число, что `CalendarItem.calendarViewIndex`.\",\n },\n registrationOpen: {\n description: \"Граница открытия записи (смещение или метка — уточнять по Swagger).\",\n },\n registrationClose: {\n description: \"Граница закрытия записи.\",\n },\n maxConsumerQuantity: {\n description: \"Максимум клиентов на слот/услугу.\",\n examples: [\"1\", \"10\"],\n },\n executorIdList: {\n description:\n \"Список профилей исполнителей. В ServiceItem optional null удаляет ключ; [] сохраняется. Full create/update допускают null, patch принимает только массив.\",\n examples: [\"[uuid1, uuid2]\"],\n },\n needApproval: {\n description: \"Требуется подтверждение заявки исполнителем.\",\n examples: [\"true\", \"false\"],\n },\n timeAlignment: {\n description: \"Шаг сетки времени для слотов.\",\n },\n orderQuote: {\n description:\n \"Квота использования услуги: максимальное число одновременно действующих заказов на пересекающемся интервале. `null` или отсутствие поля означает, что общего лимита услуги нет.\",\n examples: [\"1\", \"10\", \"null\"],\n usage:\n \"Ограничение применяется ко всей услуге независимо от выбранных ресурсов. Не смешивать с `ResourceItem.amountProperties.totalAmount`, которое ограничивает количество конкретного ресурса `Rent`.\",\n },\n marginTime: {\n description: \"Пауза между слотами.\",\n },\n executorUsagePercent: {\n description: \"Доля загрузки исполнителя (0–100 или 0–1 — по контракту).\",\n examples: [\"0.75\"],\n },\n firstWeekDate: {\n description: \"Опорная дата первой недели для построения расписания.\",\n examples: [\"2025-04-07T00:00:00.000Z\"],\n },\n clientGroupId: {\n description: \"Ограничение услуги группой клиентов.\",\n },\n resourceGroupList: {\n description:\n \"Группы ресурсов (что именно бронируется). В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные resourceIdList/quickFilterTags не меняются. Full create/update допускают null, patch принимает только массив.\",\n valueSchema: \"ResourceGroup[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при записи (телефон, email и т.д.).\",\n valueSchema: \"ParticipateFieldRequirements\",\n usage: \"TorrowItemHelper.hasRequiredPhoneOrEmail для валидации формы.\",\n },\n appendixList: {\n description:\n \"Приложения к услуге. В ServiceItem optional null удаляет ключ; [] сохраняется. Full create/update допускают null, patch принимает только массив. Самостоятельный ServiceView сохраняет nullable-контракт.\",\n valueSchema: \"Appendix[]\",\n },\n sessionDurationProperties: {\n description:\n \"Правила длительности сессии. Поля-enum — **строки OpenAPI** (`Sum`, `Consumer`, `Auto`, `DateTime`, …); каталоги MCP: `SessionDurationType`, `TimeSelectionType`, `StateManagementType`, `SessionPrecisionType`.\",\n valueSchema: \"SessionDurationProperties\",\n },\n checkInAllCases: {\n description: \"Автоматический чек-ин по всем связанным кейсам.\",\n examples: [\"true\", \"false\"],\n },\n stepDescriptionList: {\n description:\n \"Пошаговое описание сценария услуги. `stepType` — **число** (`1` Time, `2` Resource, `3` Payment); см. `StepDescription`. В ServiceItem optional null удаляет ключ; [] сохраняется, параметры шагов не меняются. Full create/update допускают null, patch принимает только массив.\",\n valueSchema: \"StepDescription[]\",\n },\n buttonName: {\n description: \"Подпись основной кнопки действия (запись, оформить).\",\n examples: [\"Записаться\"],\n },\n numeratorInfo: {\n description:\n \"Нумерация заказов/документов: поддерживается при create и чтении. Services.update не отправляет поле, patch не принимает его; root update сервером не изменяет нумератор.\",\n valueSchema: \"NumeratorInfo\",\n },\n priceInfo: {\n description:\n \"Ценовые записи со своими расписаниями. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null. В Service.patch пропуск priceInfo сохраняет цены, непустой settings заменяет список целиком, priceInfo:null и settings:[] полностью очищают цену. Для очистки SDK отправляет priceInfo:null и исключает старый root alias из ценового PUT. Это поведение относится к patch; full update выполняет свой wire-контракт. Пример с независимым GET: examples/node/item-services/services-patch-price.ts. Расчёт цены SDK не выполняет.\",\n valueSchema: \"PriceInfo\",\n },\n checkinPermission: {\n description:\n \"Кто и когда может отметить прибытие. `userAccessLevel` — строка OpenAPI (`Authenticated` / `Unauthenticated`); каталог MCP **`UserAccessLevel`** / схема **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n caseActionList: {\n description:\n \"Автоматические действия события. SDK заполняет только отсутствующий rid, валидный 24-hex сохраняется; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/services/README.md и examples/node/item-services/services-patch.ts. В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные настройки не меняются. Full create/update допускают null, patch принимает только массив; CaseItem/OrderResp сохраняют прежние nullable-поля.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description:\n \"Настройки лояльности для услуги. В ServiceItem optional null удаляет ключ; [] сохраняется, вложенные транзакции не меняются. Full create/update допускают null, patch принимает только массив.\",\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: \"Участие текущего профиля в кейсе: участник, билет, оплата, связанные 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 \"Расписание, связанное с кейсом. Для диапазонов без rid SDK создаёт 24-hex значение; явный валидный rid сохраняется.\",\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 \"Число мест, дополнительно зарезервированных вручную. Из вместимости вычитается отдельно от фактического consumersCount; редактируется через cases.patch.\",\n examples: [\"3\"],\n },\n executorUsagePercent: {\n description: \"Загрузка исполнителя.\",\n },\n availableResources: {\n description: \"Доступные для выбора ресурсы при записи.\",\n valueSchema: \"AvailableResources\",\n },\n needApproval: {\n description: \"Ожидается подтверждение.\",\n examples: [\"true\", \"false\"],\n },\n createSingleCases: {\n description: \"Порождение одиночных кейсов в групповом режиме.\",\n examples: [\"true\", \"false\"],\n },\n orderNumber: {\n description: \"Человекочитаемый номер заказа.\",\n valueSchema: \"OrderNumber\",\n examples: [\"ORD-2025-0042\"],\n },\n checkinPermission: {\n description:\n \"Права на чек-ин. `userAccessLevel` — строка OpenAPI (`Authenticated` / …); см. MCP **`UserAccessLevel`** / **`CheckinPermission`**.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: {\n description: \"Скрыть кейс в списках пользователя.\",\n examples: [\"true\", \"false\"],\n },\n consumersCount: {\n description: \"Число потребителей (агрегат для UI).\",\n examples: [\"2\"],\n },\n caseSummary: {\n description: \"Краткая сводка по заказу.\",\n valueSchema: \"CaseSummary\",\n },\n appendixList: {\n description: \"Приложения.\",\n valueSchema: \"Appendix[]\",\n },\n participateFieldRequirements: {\n description: \"Обязательные поля при участии.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priceInfo: {\n description:\n \"Цена. В read-карточке optional settings не содержит null: серверный null удаляет ключ, [] сохраняется. Полные create/update сохраняют допустимый settings:null; patch требует массив.\",\n valueSchema: \"PriceInfo\",\n },\n priority: {\n description: \"Приоритет в очереди/обработке.\",\n examples: [\"1.0\"],\n },\n clientGroupId: {\n description: \"Группа клиентов.\",\n },\n caseActionList: {\n description:\n \"Автоматизации и напоминания. SDK заполняет только отсутствующий rid, валидный 24-hex сохраняется; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/cases/README.md и examples/node/item-cases/cases-patch.ts.\",\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`** — метаданные владельца структуры: элемента, персональной связи или другого объекта.\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:\n \"Версия сущности, которой принадлежат метаданные: item.meta — элемента, personalInfo.meta — персональной связи. Эти версии независимы.\",\n examples: [\"1\", \"42\"],\n usage:\n \"Для CAS выбирайте версию обновляемой сущности и способ передачи по контракту метода: versionToCheck в query либо meta.version в теле с checkVersion. Версия персональной связи не заменяет версию элемента.\",\n },\n lastModified: {\n description:\n \"Время последнего изменения владельца метаданных (ISO 8601). В personalInfo.meta относится к персональной связи и не обязано совпадать с item.meta.lastModified.\",\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","/** Описание метаданных персонального участия `PersonalInfo` (подмножество схемы OpenAPI). */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"../field-doc-entry.js\";\n\nexport const personalInfoFieldDocEntries = {\n meta: {\n description:\n \"Метаданные PersonalLink текущего участника, отдельной сущности относительно самого элемента. version и lastModified независимы от item.meta.\",\n valueSchema: \"ObjectInfo\",\n usage:\n \"При полном services.update сервер может обновить эти метаданные даже при изменении только имени; isNeedAnnouncement=false не отключает этот эффект. Не используйте эту версию для CAS услуги и не восстанавливайте прежнюю meta ради устранения diff. Границы подтверждённого поведения: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const personalInfoFieldDocs = mapFieldDocsToStrings(personalInfoFieldDocEntries);\n","/**\n * Агрегат описаний полей **элементов** (*Item) для **генерации MCP-сервера** и внешних тулов:\n * каждый ключ — имя схемы в OpenAPI, значение — карта полей → {@link ItemFieldDoc}.\n *\n * Связи и mind map: {@link mcpRelationFieldCatalog}; запись и оплата: `mcpBookingFieldCatalog` в `mcp-booking-catalog.ts`;\n * представления: `mcpViewsFieldCatalog` в `mcp-views-catalog.ts`; объединение: {@link mcpFullFieldCatalog}.\n *\n * Строковые плоские карты (`*FieldDocs`) получайте через {@link fieldDocToString} при необходимости\n * или используйте готовые `contactItemFieldDocs` из пакета.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { calendarItemFieldDocEntries } from \"./calendar-item.js\";\nimport { caseItemFieldDocEntries } from \"./case-item.js\";\nimport { contactItemFieldDocEntries } from \"./contact-item.js\";\nimport { contextItemFieldDocEntries } from \"./context-item.js\";\nimport { loyaltySystemItemFieldDocEntries } from \"./loyalty-system-item.js\";\nimport { noteItemFieldDocEntries } from \"./note-item.js\";\nimport { objectInfoFieldDocEntries } from \"./nested/object-info.js\";\nimport { personalInfoFieldDocEntries } from \"./nested/personal-info.js\";\nimport { resourceItemFieldDocEntries } from \"./resource-item.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { torrowItemBaseFieldDocEntries } from \"./torrow-item-base.js\";\n\nexport const mcpItemFieldCatalog: {\n TorrowItem: Record<string, ItemFieldDoc>;\n ContactItem: Record<string, ItemFieldDoc>;\n NoteItem: Record<string, ItemFieldDoc>;\n ContextItem: Record<string, ItemFieldDoc>;\n CalendarItem: Record<string, ItemFieldDoc>;\n ResourceItem: Record<string, ItemFieldDoc>;\n ServiceItem: Record<string, ItemFieldDoc>;\n CaseItem: Record<string, ItemFieldDoc>;\n LoyaltySystemItem: Record<string, ItemFieldDoc>;\n ObjectInfo: Record<string, ItemFieldDoc>;\n PersonalInfo: Record<string, ItemFieldDoc>;\n} = {\n TorrowItem: { ...torrowItemBaseFieldDocEntries },\n ContactItem: { ...contactItemFieldDocEntries },\n NoteItem: { ...noteItemFieldDocEntries },\n ContextItem: { ...contextItemFieldDocEntries },\n CalendarItem: { ...calendarItemFieldDocEntries },\n ResourceItem: { ...resourceItemFieldDocEntries },\n ServiceItem: { ...serviceItemFieldDocEntries },\n CaseItem: { ...caseItemFieldDocEntries },\n LoyaltySystemItem: { ...loyaltySystemItemFieldDocEntries },\n ObjectInfo: { ...objectInfoFieldDocEntries },\n PersonalInfo: { ...personalInfoFieldDocEntries },\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 patch: {\n description:\n \"Частичное изменение всех 30 подтверждённых полей Service: GET → максимум один CAS PUT, Full/UpdateItem/version обязательны. Null/[] очистка предметных полей, цены меняются через priceInfo; нет retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: ServiceItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ServiceItem>\",\n usage:\n \"Numerator create/read only; packing исключён; теги/BehaviorSettings/социальные аспекты через отдельные методы. Версия относится к item.meta.version, не personalInfo.meta.\",\n },\n update: {\n description:\n \"Полное PUT /api/v1/services/{body.id}. Сервер может обновить personalInfo.meta даже при изменении только имени; isNeedAnnouncement=false отключает только announcement.\",\n valueSchema: \"ServiceItemForUpdate + options → ServiceItem\",\n usage:\n \"Версия для CAS относится к услуге (meta.version), не к персональной связи. Общее объяснение, пример diff и ограничение SDK-типа тела: https://github.com/torrowtechnologies/torrow-sdk-ts/blob/main/src/resources/services/README.md#обновление-услуги-и-personalinfometa.\",\n },\n getBehaviorSettings: {\n description:\n \"Один GET: ID, версия всей услуги, предметные настройки и issues. Непустой issues означает неполный снимок.\",\n valueSchema: \"ServiceBehaviorSettingsState\",\n usage: \"Использовать state.version как versionToCheck; внутреннее представление обрабатывает SDK.\",\n },\n updateBehaviorSettings: {\n description:\n \"GET → patch → PUT /api/v1/services/{id}/tags с необязательным CAS; no-op без PUT, readback отсутствует.\",\n valueSchema:\n \"Partial<ServiceBehaviorSettings> + ServiceBehaviorSettingsUpdateOptions → ServiceBehaviorSettingsUpdateResult\",\n usage:\n \"Для CAS передай versionToCheck или checkVersion: true; без них проверка выключена; mergeParameters=true сохраняет пропущенные поля, false полностью заменяет настройки. Ошибка PUT может означать неопределённый исход; не повторять автоматически.\",\n },\n setBehaviorSettings: {\n description:\n \"Полная замена с необязательной проверкой версии: пропущенные настройки очищаются, посторонние данные сохраняются.\",\n valueSchema: \"ServiceBehaviorSettings + options → ServiceBehaviorSettingsUpdateResult\",\n usage:\n \"Для сброса прочитай полный снимок без issues, исключи поле и вызови set с исходной версией. checkVersion может быть только true; isNeedAnnouncement по умолчанию false.\",\n },\n createOrder: {\n description:\n \"`POST /api/v1/services/{serviceId}/order`. Тело: `CreateOrderReq`. Ответ: `OrderResp` (часто содержит `order` как `CaseItem` и `consumerSecurityToken` для последующих гостевых запросов). Создаёт заказ/кейс по выбранным слотам и ресурсам.\",\n valueSchema: \"CreateOrderReq → OrderResp\",\n usage:\n \"Финальный шаг мастера записи после выбора времени и ресурсов: отправка собранного тела `CreateOrderReq` на сервер.\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/services/{serviceId}/timetable`. Тело: `TimetableFilter`. Query: `TimetableQueryOptions` (в т.ч. `visibility`). Ответ: `TimetableCase[]` (события/заказы и интервалы расписания).\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n 'Передавай `from`/`to`; при уже выбранных ресурсах — `bookingResourceFilter.resourceGroupIdList`. Метод возвращает события/заказы и занятость, а не вычисленные свободные окна. Для доступных слотов записи используй `getCheckInSchedule` с `type: \"FreeTimeSlots\"`; для полных карточек событий — `visibility: \"View\"`.',\n },\n getServiceResources: {\n description:\n \"`POST /api/v1/services/{serviceId}/resources`. Тело: `SearchServiceResourcesReq`. Список `ResourceView` для группы ресурсов шага мастера.\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Минимум `resourceGroupId` из `StepDescription`; при выборе времени до ресурсов — `timePeriod`.\",\n },\n getServiceResourcesWithDetalization: {\n description:\n \"`POST /api/v1/services/{serviceId}/resourceswithdetalization`. Как `getServiceResources`, плюс агрегаты (`guaranteedResourcesQuantity` и т.д.).\",\n valueSchema: \"SearchServiceResourcesReq → SearchServiceResourcesResp\",\n usage: \"Когда UI нужны количественные подсказки по группе.\",\n },\n getWorkloadInfo: {\n description:\n \"`PUT /api/v1/services/workloadinfo`. Тело: `GetServiceWorkloadInfoRequest` (`workloadOptions`, `timePeriod`). Ответ: `GetServiceWorkloadInfoResp` — `workloadInfoList` с вложенными `timetable`/`workload` по ресурсам, `serviceStructureList`.\",\n valueSchema: \"GetServiceWorkloadInfoRequest → GetServiceWorkloadInfoResp\",\n usage:\n \"Календарь владельца/исполнителя: список ресурсов услуги с вложенными `timetable` и `workload` за период без N запросов на каждый ресурс. Для плоского списка событий/заказов по услуге без разреза по ресурсам чаще достаточно `services.getTimetable` по `serviceId`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/services/timetable/statistics`. Тело: `GetTimetableStatisticsRequest`. Агрегаты по расписанию услуги.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n getCheckInSchedule: {\n description:\n \"`POST /api/v1/services/{serviceId}/checkinschedule`. Тело: `GetCheckInScheduleReq` (`timePeriod`, `resourceIdList`, …). Ответ: `GetCheckInScheduleResp` — окна `checkInSchedule`, детализация `workloadDetalization`.\",\n valueSchema: \"GetCheckInScheduleReq → GetCheckInScheduleResp\",\n usage:\n 'Для UI выбора свободного времени передавай `type: \"FreeTimeSlots\"`; `checkInSchedule` содержит `WorkloadPeriod` с `from`/`to`. Режим `AsIs` возвращает сырые периоды нагрузки (`FreeTime`, `BusyTime`, `NotWorkingTime` и др.), а не только выбираемые слоты.',\n },\n getReCheckInSchedule: {\n description:\n \"`PUT /api/v1/services/{serviceId}/recheckinschedule`. Тело: `GetReCheckInScheduleReq` (обязателен `caseId`, опционально `securityToken`). Ответ как у `getCheckInSchedule`.\",\n valueSchema: \"GetReCheckInScheduleReq → GetCheckInScheduleResp\",\n usage: \"Пересчёт доступности после изменения события/заказа.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** `TorrowClient.resourceItems` — расписание и операции в домене ресурса. */\nexport const resourceItemsBookingSdkMethodFieldDocEntries = {\n getBehaviorSettings: {\n description:\n \"`GET /api/v1/resources/{id}` + парсинг managed параметров ресурса (`ResourceBehaviorSettings`) из `tags` (`marginTimeSec`, `lockId`).\",\n valueSchema: \"ResourceItem.tags → ResourceBehaviorSettings\",\n },\n updateBehaviorSettings: {\n description:\n \"GET → merge patch → PUT /api/v1/resources/{id}/tags → GET. Сбой readback после подтверждённого PUT сохраняет effect Applied; без подтверждения Unknown.\",\n valueSchema: \"Partial<ResourceBehaviorSettings> → ResourceItem\",\n },\n setBehaviorSettings: {\n description:\n \"Полная установка ResourceBehaviorSettings (mergeParameters=false); сохраняет GET→PUT /tags→GET и собственное имя операции в TorrowSdkError.\",\n valueSchema: \"ResourceBehaviorSettings → ResourceItem\",\n },\n getTimetable: {\n description:\n \"`PUT /api/v1/resources/{resourceId}/timetable`. Как расписание услуги, но якорь — ресурс. Тело `TimetableFilter`, query `TimetableQueryOptions` без `createDateFrom`/`createDateTo`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage:\n 'Список событий/заказов ресурса (исполнитель, зал). Для полных деталей — `visibility: \"View\"` (см. `TimetableQueryOptions`).',\n },\n getWorkload: {\n description:\n \"`GET /api/v1/resources/{resourceId}/workload`. Query: `From`, `To` (date-time), опционально `serviceId` — полосы занятости для фона календаря.\",\n valueSchema: \"query → WorkloadPeriod[]\",\n },\n pickOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/pickorder`. Тело: `PickOrderReq`. Исполнитель забирает заказ.\",\n valueSchema: \"PickOrderReq → PickOrderResp\",\n },\n returnOrder: {\n description: \"`POST /api/v1/resources/{resourceId}/returnorder`. Тело: `ReturnOrderReq`. Откат pick.\",\n valueSchema: \"ReturnOrderReq → ReturnOrderResp\",\n },\n getTimetableStatistics: {\n description: \"`POST /api/v1/resources/timetable/statistics`. Как у услуги, но путь домена `resources`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полиморфное расписание: те же `TimetableFilter` / `TimetableCase`, что у услуги, но якорь — календарь или контакт. */\nexport const calendarContactTimetableSdkMethodFieldDocEntries = {\n calendarsGetTimetable: {\n description:\n \"`PUT /api/v1/calendars/{id}/timetable`. Тело `TimetableFilter`, query `TimetableQueryOptions` (без `createDate*`), ответ `TimetableCase[]`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: '`TorrowClient.calendars.getTimetable`; для карточек событий — `visibility: \"View\"`.',\n },\n calendarsGetTimetableStatistics: {\n description: \"`POST /api/v1/calendars/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n contactsGetTimetable: {\n description:\n \"`PUT /api/v1/contacts/{id}/timetable`. Расписание событий/заказов контакта (профиль/исполнитель). Query: `TimetableQueryOptions` без `createDate*`.\",\n valueSchema: \"TimetableFilter + TimetableQueryOptions → TimetableCase[]\",\n usage: '`TorrowClient.contacts.getTimetable`; для имён/сводок — `visibility: \"View\"`.',\n },\n contactsGetTimetableStatistics: {\n description: \"`POST /api/v1/contacts/timetable/statistics`.\",\n valueSchema: \"GetTimetableStatisticsRequest → TimetableStatisticsResp[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Параметры `TorrowClient.cases.getById`, важные для билета и ссылки оплаты. */\nexport const casesPaymentSdkMethodFieldDocEntries = {\n getById: {\n description:\n \"`GET /api/v1/cases/{torrowId}`. Возвращает `CaseItem` с персональным контекстом. Для гостя после `createOrder` передавай `securityToken` (из `OrderResp.consumerSecurityToken`) и при необходимости `caseParticipantId`, иначе `personalInfo.ticketResource` может быть недоступен.\",\n valueSchema: \"query → CaseItem\",\n usage:\n \"Если `paymentUrl` ещё пуст, после короткой задержки повтори `cases.getById` с теми же параметрами доступа и снова прочитай `personalInfo.ticketResource.ticketProperties.paymentUrl` (асинхронное заполнение со стороны провайдера).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createOrderReqFieldDocEntries = {\n checkInProperties: {\n description:\n \"Один или несколько участников записи: слот `availabilityTime`, тип участника, контакты, выбранные `bookingResourceList`, напоминания.\",\n valueSchema: \"CheckInProps[]\",\n usage: \"Собирается из состояния мастера; обязательное поле запроса.\",\n },\n resourceList: {\n description:\n \"Плоский список выбранных ресурсов для заказа (`resourceId`, `resourceGroupId`, `amount`). Альтернатива/дополнение к вложенным `bookingResourceList` внутри `checkInProperties` — зависит от сценария API.\",\n valueSchema: \"BookingResourceReq[] | null\",\n },\n profileId: {\n description: \"Профиль инициатора записи (текущий пользователь), если отличается от токена или нужен явно.\",\n examples: [\"550e8400-e29b-41d4-a716-446655440000\"],\n },\n orderInfo: {\n description: \"Комментарий, место, общий `timePeriod` заказа (например выбранный диапазон дат).\",\n valueSchema: \"OrderInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const checkInPropsFieldDocEntries = {\n caseParticipantId: {\n description: \"Идентификатор участника кейса после создания/дозаписи; для обновления существующего участия.\",\n valueSchema: \"string | null\",\n },\n profileId: {\n description: \"Профиль участника, для которого формируется чек-ин.\",\n valueSchema: \"string | null\",\n },\n roadTimeBefore: {\n description: \"Запас времени «до» визита (секунды), если задан в услуге.\",\n examples: [\"900\"],\n },\n roadTimeAfter: {\n description: \"Запас времени «после» визита (секунды).\",\n examples: [\"600\"],\n },\n comment: {\n description: \"Комментарий участника к записи.\",\n },\n availabilityTime: {\n description:\n \"Статус доступности участника (`Free`/`Busy` и др.), не временной интервал. Выбранные границы слота передаются в `CreateOrderReq.orderInfo.timePeriod`.\",\n valueSchema: \"AvailabilityTime\",\n usage: \"Не копируй сюда `WorkloadPeriod`; это enum-поле внутри `checkInProperties`.\",\n },\n reminders: {\n description: \"Персональные напоминания участника.\",\n valueSchema: \"PersonalReminder[] | null\",\n },\n bookingResourceList: {\n description: \"Ресурсы, выбранные в мастере для этого участника (связь с группами услуги).\",\n valueSchema: \"BookingResource[] | null\",\n },\n caseParticipantType: {\n description: \"Роль в кейсе (потребитель, исполнитель и т.д.).\",\n valueSchema: \"CaseParticipantType\",\n examples: [\"Consumer\", \"Executor\"],\n },\n contactInformation: {\n description: \"Значения полей контакта при записи (телефон, ФИО), если требуются `participateFieldRequirements`.\",\n valueSchema: \"ContactInformation\",\n },\n showCaseInTimetableType: {\n description: \"Как отображать кейс в расписании пользователя.\",\n valueSchema: \"ShowCaseInTimetableType\",\n },\n participantTimeZone: {\n description: \"IANA или смещение часового пояса участника для интерпретации слотов.\",\n examples: [\"Europe/Moscow\"],\n },\n trackingInformation: {\n description: \"Данные трекинга/доставки, если сценарий услуги их собирает.\",\n valueSchema: \"TrackingInformation\",\n },\n loyaltyCardId: {\n description: \"Применяемая карта лояльности.\",\n },\n subscriptionId: {\n description: \"Привязанная подписка, если есть.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const availabilityTimeFieldDocEntries = {\n value: {\n description:\n \"Код доступности слота/участника (`Free`/`Busy`). В check-in flow по умолчанию часто используется `Busy` для подтверждённой записи.\",\n valueSchema: \"AvailabilityTime\",\n examples: [\"Free\", \"Busy\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const contactInformationFieldDocEntries = {\n fields: {\n description: \"Массив заполненных полей контакта участника (`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: 'Тип шага в JSON — **число**: `0` Unknown, `1` Time, `2` Resource, `3` Payment. Не строка `\"Time\"`.',\n examples: [\"0\", \"1\", \"2\", \"3\"],\n usage: \"Wire int из API; в SDK те же числа — `ServiceCheckInWizardStepType`.\",\n },\n description: {\n description: \"Человекочитаемый текст шага из настроек услуги (подсказка в UI).\",\n },\n stepParameterList: {\n description: \"Параметры шага (флаги и `ResourceGroupId` для типа Resource).\",\n valueSchema: \"StepParameter[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const stepParameterFieldDocEntries = {\n parameterName: {\n description:\n \"Имя параметра: для ресурса — `ResourceGroupId`, `HiddenStep`, `HideResourceDetail`, `AutoChoiceResource` (строки как в `ServiceCheckInWizardStepParameterName`).\",\n examples: [\"ResourceGroupId\", \"HiddenStep\", \"HideResourceDetail\", \"AutoChoiceResource\"],\n },\n parameterValue: {\n description: 'Значение: для флагов часто `\"true\"`; для группы — UUID группы ресурсов.',\n examples: [\"true\", \"550e8400-e29b-41d4-a716-446655440000\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchServiceResourcesReqFieldDocEntries = {\n resourceGroupId: {\n description: \"Группа ресурсов услуги; обязательна для шага «Ресурс» мастера.\",\n usage: \"Берётся из `getResourceGroupIdFromStep(step)` в SDK.\",\n },\n text: {\n description: \"Поисковая строка по ресурсам (имя, описание — зависит от бэкенда).\",\n },\n resourceIds: {\n description: \"Ограничить выборку конкретными id ресурсов.\",\n valueSchema: \"string[] | null\",\n },\n timePeriod: {\n description: \"Фильтр доступности по времени до выбора слота в календаре.\",\n valueSchema: \"TimePeriod\",\n },\n caseIdsToExclude: {\n description: \"Исключить занятость указанных кейсов при расчёте доступности.\",\n valueSchema: \"string[] | null\",\n },\n distance: {\n description: \"Радиус поиска для геозависимых ресурсов (если поддерживается услугой).\",\n examples: [\"5000\"],\n },\n take: {\n description: \"Лимит записей (пагинация).\",\n examples: [\"20\"],\n },\n skip: {\n description: \"Смещение пагинации.\",\n examples: [\"0\"],\n },\n includeDeleted: {\n description: \"Включать ли удалённые элементы в выборку.\",\n examples: [\"false\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Query-параметры `TimetableQueryOptions` для `PUT .../{id}/timetable`\n * (`services` / `resourceItems` / `calendars` / `contacts.getTimetable`).\n */\nexport const timetableQueryOptionsFieldDocEntries = {\n visibility: {\n description:\n \"Глубина деталей ответа `TimetableCase[]` (`TimetableDetailsVisibility`). `View` — подгрузить CaseView + CaseSummary для событий/заказов (имена, сводки); в torrow-apps это дефолт календаря/списков и экспорта заказов. `Time` — в основном интервалы занятости без полного обогащения событий/заказов (фон календаря / busy-bars). Эхо режима — в `TimetableCase.detailsVisibility`.\",\n valueSchema: \"TimetableDetailsVisibility | null\",\n examples: [\"View\", \"Time\"],\n usage:\n \"Для UI списка событий и CSV-экспорта передавай `View`. Для лёгкой занятости без карточек — `Time`. См. каталог enum `TimetableDetailsVisibility`.\",\n },\n take: {\n description: \"Лимит записей расписания (пагинация query).\",\n valueSchema: \"number | null\",\n examples: [\"30\", \"50\"],\n },\n skip: {\n description: \"Смещение пагинации query.\",\n valueSchema: \"number | null\",\n examples: [\"0\"],\n },\n lmfrom: {\n description: \"Нижняя граница `lastModified` (date-time) для инкрементальной выборки.\",\n valueSchema: \"Date | null\",\n },\n lmto: {\n description: \"Верхняя граница `lastModified` (date-time).\",\n valueSchema: \"Date | null\",\n },\n includeDeleted: {\n description: \"Включать ли удалённые записи в выборку расписания.\",\n valueSchema: \"boolean | null\",\n examples: [\"false\"],\n },\n sort: {\n description: \"Сортировка списка (как в OpenAPI `ItemViewSortCondition`).\",\n valueSchema: \"ItemViewSortCondition | null\",\n },\n createDateFrom: {\n description:\n \"Нижняя граница по дате создания события/заказа. Только у расписания **услуги** (`services.getTimetable`, NSwag `ServiceClient.getTimetable`) — экспорт заказов и т.п.\",\n valueSchema: \"Date | null\",\n },\n createDateTo: {\n description: \"Верхняя граница по дате создания события/заказа. Только у `services.getTimetable`.\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const timetableFilterFieldDocEntries = {\n from: {\n description: \"Начало интервала расписания событий/заказов (ISO 8601).\",\n examples: [\"2026-04-01T00:00:00.000Z\"],\n },\n to: {\n description: \"Конец интервала; может быть null в некоторых сценариях — уточняй по Swagger.\",\n examples: [\"2026-04-07T23:59:59.999Z\"],\n },\n caseStateList: {\n description: \"Фильтр по состояниям событий/заказов в слотах.\",\n valueSchema: \"CaseState[] | null\",\n },\n caseTypeList: {\n description: \"Фильтр по типам событий/заказов.\",\n valueSchema: \"CaseType[] | null\",\n },\n caseParticipantTypeList: {\n description: \"Фильтр по типам участников.\",\n valueSchema: \"CaseParticipantType[] | null\",\n },\n caseParticipantStateList: {\n description: \"Фильтр по состояниям участников.\",\n valueSchema: \"CaseParticipantState[] | null\",\n },\n availabilityTimeList: {\n description: \"Уточнение по конкретным интервалам доступности.\",\n valueSchema: \"AvailabilityTime[] | null\",\n },\n profileIdList: {\n description: \"Ограничение расписания по профилям (исполнители и т.д.).\",\n valueSchema: \"string[] | null\",\n },\n serviceIdList: {\n description: \"Фильтр по услугам в агрегированном расписании.\",\n valueSchema: \"string[] | null\",\n },\n caseIdListToExclude: {\n description: \"Исключить события/заказы из отображения занятости.\",\n valueSchema: \"string[] | null\",\n },\n hasService: {\n description: \"Флаг наличия услуги в записи (фильтр агрегатов).\",\n examples: [\"true\"],\n },\n strictlyInTimeRange: {\n description: \"Требовать полного вхождения событий/заказов в интервал `from`/`to`.\",\n examples: [\"true\", \"false\"],\n },\n bookingResourceFilter: {\n description: \"После выбора ресурсов — список `resourceGroupIdList` для учёта занятости групп.\",\n valueSchema: \"BookingResourceFilter\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingResourceFilterFieldDocEntries = {\n resourceGroupIdList: {\n description: \"Группы ресурсов, которые уже выбраны в мастере; передаются в `TimetableFilter` для уточнения слотов.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketPropertiesFieldDocEntries = {\n state: {\n description:\n \"Состояние билета: `Waiting` — ожидает оплаты; `Paid` / `Used` — оплачен или использован; `Canceled`, `Error` — терминальные.\",\n valueSchema: \"TicketState\",\n examples: [\"Waiting\", \"Paid\", \"Used\"],\n usage: \"UI решает, показывать ли кнопку оплаты и внешнюю ссылку.\",\n },\n ticketNumber: {\n description: \"Номер билета для отображения и поддержки.\",\n valueSchema: \"TicketNumber\",\n },\n paymentUrl: {\n description:\n \"URL внешней оплаты (платёжный шлюз). Может прийти без схемы — нормализуй через `normalizePaymentUrl` в SDK.\",\n examples: [\"https://pay.example.com/session/abc\", \"payment.example.com/path\"],\n usage:\n \"Источник: `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`. Наличие зависит от провайдера; для не-cash иногда заполняется после повторного `cases.getById`.\",\n },\n paymentExpirationDate: {\n description: \"Срок действия ссылки или сессии оплаты (ISO 8601).\",\n examples: [\"2026-04-15T12:00:00.000Z\"],\n },\n paymentConfirmationSource: {\n description:\n \"Источник подтверждения оплаты: `PaymentLink` — по ссылке, `Manager` — менеджером, `UnknownTicketPaymentConfirmationSource` — не определён.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n examples: [\"PaymentLink\", \"Manager\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const paymentParametersFieldDocEntries = {\n text: {\n description: \"Общий текст в блоке оплаты (информационный дисклеймер рядом с кнопками).\",\n valueSchema: \"string | null\",\n },\n beforePayMessage: {\n description: \"Сообщение до оплаты. В мобильном flow показывается, пока `ticketProperties.state === Waiting`.\",\n valueSchema: \"string | null\",\n },\n afterPayMessage: {\n description: \"Сообщение после оплаты. В мобильном 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: \"`ResourceItem` билета: `ticketProperties` содержит `paymentUrl`, `state`, `paymentExpirationDate`.\",\n valueSchema: \"ResourceItem\",\n usage: \"Читай через `getTicketPaymentUrl(caseItem)` в SDK.\",\n },\n paymentResource: {\n description: \"Ресурс с данными оплаты/провайдера в персональном контексте (параллельно билету).\",\n valueSchema: \"ResourceItem\",\n usage:\n \"Альтернативный или дополнительный узел оплаты в персональном контексте: если основной URL в билете недоступен, приложение может проверить `paymentResource` (тип и поля — по ответу API и сценарию оплаты).\",\n },\n caseParticipant: {\n description: \"Текущий участник и его поля; нужен для гостевого сценария с `caseParticipantId` в query.\",\n valueSchema: \"CaseParticipant\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const caseParticipantFieldDocEntries = {\n id: { description: \"ID участия в кейсе.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль участника.\", valueSchema: \"string | null\" },\n loyaltyCardId: {\n description: \"ID карты лояльности участника (чтение и запись).\",\n valueSchema: \"string | null\",\n },\n caseParticipantState: {\n description: \"Состояние участия (`Booking`, `Registered`, ...).\",\n valueSchema: \"CaseParticipantState\",\n },\n caseParticipantType: {\n description: \"Тип участия (`Consumer`, `Executor`, `Escort`).\",\n valueSchema: \"CaseParticipantType\",\n },\n roadTimeBefore: { description: \"Время в пути до визита.\", valueSchema: \"int32 | null\" },\n roadTimeAfter: { description: \"Время в пути после визита.\", valueSchema: \"int32 | null\" },\n availabilityTime: {\n description: \"Статус доступности участника: `Free`, `Busy` или системное неизвестное значение.\",\n valueSchema: \"AvailabilityTime\",\n },\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: {\n description: \"Статус доступности участника (`Free`/`Busy`), не границы выбранного слота.\",\n valueSchema: \"AvailabilityTime\",\n },\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 notificationWayList: {\n description: \"Способы уведомления в персональных сведениях участника кейса.\",\n valueSchema: \"NotificationWay[]\",\n usage:\n \"Optional read-поле: серверный null удаляет ключ, [] сохраняется. Вложенные deliveryWayList и notificationTypeList не нормализуются. updateNotificationWayList принимает массив.\",\n },\n personalReminders: {\n description: \"Персональные напоминания пользователя по кейсу.\",\n valueSchema: \"PersonalReminder[]\",\n usage:\n \"Optional read-поле: серверный null удаляет ключ, отсутствие сохраняется, [] остаётся присутствующим массивом. updateReminders принимает массив; [] очищает. Отсутствующий rid создаётся SDK на копии входа.\",\n },\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: \"В `PaymentInfoStore` используется как fallback, когда `CaseItem.personalInfo.paymentResource` не заполнен.\",\n },\n profileType: {\n description: \"Тип профиля участника в контексте view.\",\n valueSchema: \"ProfileType\",\n },\n profileProperties: {\n description: \"Параметры профиля (цвет, иконка, настройки отображения).\",\n valueSchema: \"ProfileProperties\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderRespFieldDocEntries = {\n order: {\n description: \"Созданный или обновлённый кейс заказа; структура как у `CaseItem`.\",\n valueSchema: \"CaseItem\",\n },\n consumerSecurityToken: {\n description:\n \"Токен для анонимного/гостевого доступа к кейсу после создания заказа; передавай в `cases.getById(..., { securityToken })`.\",\n examples: [\"eyJhbGciOi...\"],\n usage: \"Без него гость не увидит `personalInfo.ticketResource` с `paymentUrl`.\",\n },\n beginDate: {\n description:\n \"Копии полей кейса на верхнем уровне ответа (дублирование вложенного `order` для обратной совместимости клиентов).\",\n valueSchema: \"string | null\",\n },\n endDate: {\n description: \"Конец интервала заказа на верхнем уровне ответа.\",\n valueSchema: \"string | null\",\n },\n personalInfo: {\n description: \"Персональный контекст на верхнем уровне `OrderResp` (дублирование с вложенным `order`).\",\n valueSchema: \"CasePersonalInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const ticketSummaryFieldDocEntries = {\n state: { description: \"Сводное состояние билета.\", valueSchema: \"TicketState\" },\n sum: { description: \"Итоговая сумма к оплате.\", valueSchema: \"double | null\" },\n currencyCode: { description: \"Код валюты суммы.\", valueSchema: \"string | null\" },\n salePrice: { description: \"Цена продажи.\", valueSchema: \"double | null\" },\n prepayment: { description: \"Размер предоплаты.\", valueSchema: \"double | null\" },\n priceWithoutDiscount: { description: \"Цена без скидок.\", valueSchema: \"double | null\" },\n paymentConfirmationSource: {\n description: \"Источник подтверждения оплаты в сводке билета.\",\n valueSchema: \"TicketPaymentConfirmationSource\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const bookingWizardSdkFieldDocEntries = {\n ServiceResourceLinking: {\n description:\n \"Связь хранится с двух сторон: `ServiceItem.resourceGroupList` описывает доступные группы и порядок ресурсных шагов, а `ResourceItem.serviceDescriptions` связывает конкретный ресурс с группой по паре `serviceId + resourceGroupId`.\",\n valueSchema: \"ServiceItem.resourceGroupList + ResourceItem.serviceDescriptions\",\n usage:\n \"`ResourceBuilder.attachToService` берёт имена из актуальных услуги и группы, а `laterBinding` вычисляет как наличие `ResourceGroup.bookingProperties`. `parentId` и `resourceGroupList.resourceIdList` эту связь не заменяют.\",\n },\n ServiceBuilder: {\n description:\n \"Локальный builder тела услуги: согласует `resourceGroupList` и `stepDescriptionList`, добавляет несколько шагов до одного `services.create` или `services.update` и не выполняет HTTP.\",\n valueSchema: \"ServiceItemForCreateOrUpdate | ServiceItem → ServiceBuildResult\",\n },\n ResourceBuilder: {\n description:\n \"Локальный builder тела ресурса: по загруженному `ServiceItem` добавляет, обновляет и удаляет связи `serviceDescriptions` по паре `serviceId + resourceGroupId`, проверяет `usageType` и не выполняет HTTP. Результат сохраняется обычным `resourceItems.create` или `update`.\",\n valueSchema: \"ResourceItemForCreateOrUpdate | ResourceItem → ResourceBuildResult\",\n usage:\n \"Формирует `serviceName` и `resourceGroupName` из переданных данных; `laterBinding` равен признаку наличия `bookingProperties` у группы.\",\n },\n ResourceServiceBindingOptions: {\n description:\n \"Опциональные поля связи ресурса с группой услуги: `usageAmount` и `sortIndex`. Пропущенное значение сохраняется при обновлении связи, `null` очищает его.\",\n valueSchema: \"{ usageAmount?; sortIndex? }\",\n },\n expandBookingWizardSteps: {\n description:\n \"Функция SDK: по `ServiceItem` строит список шагов `{ kind: time | resource | payment, ... }` в порядке `stepDescriptionList`, с пропуском шагов ресурса при вырожденных лимитах группы (`minResources`/`maxResources`) и отсутствии `ResourceGroupId`.\",\n usage: \"Импорт из `@torrow/sdk-client`; не HTTP.\",\n },\n getTimeStepUiMode: {\n description:\n \"По `sessionDurationProperties` возвращает режим виджета времени: `selectDate` | `selectDateRange` | `selectTimeBegin` | `selectTime`.\",\n usage: \"См. `booking-wizard-hints.ts`.\",\n },\n getTicketPaymentUrl: {\n description:\n \"Извлекает и нормализует URL оплаты из `CaseItem.personalInfo.ticketResource.ticketProperties.paymentUrl`.\",\n usage: \"После `cases.getById` или из `order` в `OrderResp`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Типы услуг и прямое/обратное преобразование `SessionDurationProperties`. */\nexport const serviceTypePresetFieldDocEntries = {\n ServiceType: {\n description:\n \"Публичный тип услуги: пять известных конфигураций и `Custom` для любого другого сочетания трёх определяющих полей.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent | Custom\",\n },\n ServiceTypePresetValues: {\n description:\n \"Deprecated-совместимость для пяти прежних preset-значений, включая `AutoRent`; новый код использует `ServiceType`.\",\n valueSchema: \"Record<string, ServiceTypePreset>\",\n usage:\n \"Выбери бизнес-тип и передай значение в `createServiceSessionDurationProperties`; список не является полным перечислением внутренних типов torrow-apps.\",\n },\n ServiceTypePreset: {\n description:\n \"Union публичных preset-значений, для которых SDK знает подтверждённое сочетание `sessionDurationType`, `timeSelectionType` и `stateManagementType`.\",\n valueSchema: \"Appeal | RegisterOnTime | OrderOnTime | Rent | AutoRent\",\n },\n ServiceSessionDurationOptions: {\n description:\n \"Дополнительные поля `SessionDurationProperties`: точность, длительности и границы времени. Три поля, определяющие тип услуги, намеренно исключены.\",\n valueSchema: \"Omit<SessionDurationProperties, sessionDurationType | timeSelectionType | stateManagementType>\",\n },\n createServiceSessionDurationProperties: {\n description:\n \"Чистый helper SDK, который строит согласованный `SessionDurationProperties` по известному `ServiceType`; `Custom` требует явных параметров.\",\n valueSchema: \"KnownServiceType + ServiceSessionDurationOptions → SessionDurationProperties\",\n usage:\n \"Используй при сборке `ServiceItemForCreateOrUpdate` перед `services.create` или `services.update`. Неизвестный runtime preset приводит к `TypeError`.\",\n },\n getServiceType: {\n description:\n \"Определяет `ServiceType` услуги по точному совпадению `sessionDurationType`, `timeSelectionType`, `stateManagementType`; остальные сочетания дают `Custom`.\",\n valueSchema: \"Pick<ServiceItem, sessionDurationProperties> → ServiceType\",\n },\n getServiceTypeFromSessionDurationProperties: {\n description:\n \"Обратное преобразование `SessionDurationProperties` в `ServiceType`. Не меняет данные и не считает `Custom` признаком валидности конфигурации.\",\n valueSchema: \"SessionDurationProperties | null | undefined → ServiceType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const servicesBookingSdkMethodFieldDocs = mapFieldDocsToStrings(servicesBookingSdkMethodFieldDocEntries);\nexport const casesPaymentSdkMethodFieldDocs = mapFieldDocsToStrings(casesPaymentSdkMethodFieldDocEntries);\n","/**\n * Каталог полей **записи на услугу, мастера и оплаты** для MCP и агентов.\n * Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n behaviorSettingsEffectStepFieldDocEntries,\n behaviorSettingsErrorDetailFieldDocEntries,\n serviceBehaviorSettingsFieldDocEntries,\n serviceBehaviorSettingsIssueFieldDocEntries,\n serviceBehaviorSettingsIssueReasonFieldDocEntries,\n serviceBehaviorSettingsStateFieldDocEntries,\n serviceBehaviorSettingsUpdateOptionsFieldDocEntries,\n serviceBehaviorSettingsUpdateResultFieldDocEntries,\n} from \"./service-behavior-settings-field-docs.js\";\nimport {\n availabilityTimeFieldDocEntries,\n bookingResourceFieldDocEntries,\n bookingResourceFilterFieldDocEntries,\n bookingResourceReqFieldDocEntries,\n bookingWizardSdkFieldDocEntries,\n calendarContactTimetableSdkMethodFieldDocEntries,\n caseParticipantFieldDocEntries,\n caseParticipantFieldsFieldDocEntries,\n caseParticipantViewPaymentFieldDocEntries,\n casePersonalInfoFieldDocEntries,\n casePersonalInfoPaymentFieldDocEntries,\n casesPaymentSdkMethodFieldDocEntries,\n checkInPropsModelFieldDocEntries,\n checkInPropsFieldDocEntries,\n contactInformationFieldDocEntries,\n createOrderReqFieldDocEntries,\n locationActivationFieldDocEntries,\n orderInfoFieldDocEntries,\n orderRespFieldDocEntries,\n paymentParametersFieldDocEntries,\n paymentPropertiesFieldDocEntries,\n profilePropertiesFieldDocEntries,\n participateFieldRequirementFieldDocEntries,\n participateFieldRequirementsFieldDocEntries,\n participateFieldValueFieldDocEntries,\n personalReminderFieldDocEntries,\n resourceItemsBookingSdkMethodFieldDocEntries,\n recurringConditionsFieldDocEntries,\n searchServiceResourcesReqFieldDocEntries,\n serviceTypePresetFieldDocEntries,\n servicesBookingSdkMethodFieldDocEntries,\n stepDescriptionFieldDocEntries,\n stepParameterFieldDocEntries,\n ticketSummaryFieldDocEntries,\n ticketPropertiesFieldDocEntries,\n timePeriodFieldDocEntries,\n timetableFilterFieldDocEntries,\n timetableQueryOptionsFieldDocEntries,\n trackingInformationFieldDocEntries,\n utmFieldDocEntries,\n} from \"./booking-wizard-field-docs.js\";\nimport {\n checkinPermissionFieldDocEntries,\n sessionDurationPropertiesFieldDocEntries,\n} from \"./session-checkin-field-docs.js\";\n\nexport const mcpBookingFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ServiceBehaviorSettings: { ...serviceBehaviorSettingsFieldDocEntries },\n BehaviorSettingsErrorDetail: { ...behaviorSettingsErrorDetailFieldDocEntries },\n BehaviorSettingsEffectStep: { ...behaviorSettingsEffectStepFieldDocEntries },\n ServiceBehaviorSettingsState: { ...serviceBehaviorSettingsStateFieldDocEntries },\n ServiceBehaviorSettingsUpdateResult: { ...serviceBehaviorSettingsUpdateResultFieldDocEntries },\n ServiceBehaviorSettingsUpdateOptions: { ...serviceBehaviorSettingsUpdateOptionsFieldDocEntries },\n ServiceBehaviorSettingsIssue: { ...serviceBehaviorSettingsIssueFieldDocEntries },\n ServiceBehaviorSettingsIssueReason: { ...serviceBehaviorSettingsIssueReasonFieldDocEntries },\n ServicesBookingSdkMethods: { ...servicesBookingSdkMethodFieldDocEntries },\n ResourceItemsBookingSdkMethods: { ...resourceItemsBookingSdkMethodFieldDocEntries },\n CalendarContactTimetableSdkMethods: { ...calendarContactTimetableSdkMethodFieldDocEntries },\n CasesPaymentSdkMethods: { ...casesPaymentSdkMethodFieldDocEntries },\n BookingWizardSdkHelpers: { ...bookingWizardSdkFieldDocEntries },\n ServiceTypePresetSdk: { ...serviceTypePresetFieldDocEntries },\n CreateOrderReq: { ...createOrderReqFieldDocEntries },\n CheckInProps: { ...checkInPropsFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n BookingResource: { ...bookingResourceFieldDocEntries },\n BookingResourceReq: { ...bookingResourceReqFieldDocEntries },\n ContactInformation: { ...contactInformationFieldDocEntries },\n ParticipateFieldRequirements: { ...participateFieldRequirementsFieldDocEntries },\n ParticipateFieldRequirement: { ...participateFieldRequirementFieldDocEntries },\n ParticipateFieldValue: { ...participateFieldValueFieldDocEntries },\n OrderInfo: { ...orderInfoFieldDocEntries },\n OrderResp: { ...orderRespFieldDocEntries },\n StepDescription: { ...stepDescriptionFieldDocEntries },\n StepParameter: { ...stepParameterFieldDocEntries },\n SearchServiceResourcesReq: { ...searchServiceResourcesReqFieldDocEntries },\n TimetableFilter: { ...timetableFilterFieldDocEntries },\n TimetableQueryOptions: { ...timetableQueryOptionsFieldDocEntries },\n BookingResourceFilter: { ...bookingResourceFilterFieldDocEntries },\n TicketProperties: { ...ticketPropertiesFieldDocEntries },\n TicketSummary: { ...ticketSummaryFieldDocEntries },\n TimePeriod: { ...timePeriodFieldDocEntries },\n PersonalReminder: { ...personalReminderFieldDocEntries },\n RecurringConditions: { ...recurringConditionsFieldDocEntries },\n LocationActivation: { ...locationActivationFieldDocEntries },\n TrackingInformation: { ...trackingInformationFieldDocEntries },\n Utm: { ...utmFieldDocEntries },\n PaymentParameters: { ...paymentParametersFieldDocEntries },\n PaymentProperties: { ...paymentPropertiesFieldDocEntries },\n CheckInPropsModel: { ...checkInPropsModelFieldDocEntries },\n CaseParticipant: { ...caseParticipantFieldDocEntries },\n CaseParticipantFields: { ...caseParticipantFieldsFieldDocEntries },\n CasePersonalInfo: { ...casePersonalInfoFieldDocEntries },\n CasePersonalInfoPayment: { ...casePersonalInfoPaymentFieldDocEntries },\n CaseParticipantViewPayment: { ...caseParticipantViewPaymentFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n SessionDurationProperties: { ...sessionDurationPropertiesFieldDocEntries },\n CheckinPermission: { ...checkinPermissionFieldDocEntries },\n};\n","/**\n * Смыслы полей **AuthIdentity** (`/api/v1/auth/*`) для агентов и MCP.\n * Типы тел/ответов — `components.schemas` в `schema/generated.ts`; здесь только проза.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Ответ **`POST /api/v1/auth/token`** и **`POST /api/v1/auth/refresh`**. */\nexport const tokenRespFieldDocEntries = {\n accessToken: {\n description: \"JWT или иной Bearer для заголовка `Authorization` при вызовах API от имени пользователя.\",\n usage:\n \"Подставляй в `TorrowClientConfig.getAccessToken` (или вручную в `Authorization`). Не логируй целиком. При `status !== TokenReady` может быть пустым.\",\n examples: [\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…\"],\n },\n refreshToken: {\n description: \"Долгоживущий токен для выдачи новой пары без повторного логина.\",\n usage:\n \"Храни безопасно; отправляй только в теле `POST /api/v1/auth/refresh`. После refresh сервер может вернуть новый refresh — замени сохранённый. При `Pending`/`Failed` обычно пуст.\",\n examples: [\"opaque-refresh-string…\"],\n },\n expiration: {\n description: \"Срок жизни **access**-токена в **секундах**, отсчитанный от момента ответа (не Unix timestamp).\",\n usage:\n \"Абсолютное время истечения access: `Date.now() + expiration * 1000`. Учитывай запас (skew) до истечения, затем вызывай refresh.\",\n examples: [\"3600\", \"900\"],\n },\n status: {\n description:\n \"Статус выдачи токенов (`TokenStatus`). Классический OTP/`refresh` → `TokenReady`; для MTS Mobile ID возможны `Pending`, `AwaitingSmsCode`, `Failed` с пустыми токенами.\",\n usage:\n \"Pending — ожидание Mobile ID, следующий poll без кода с интервалом из SendCodeResp.pollIntervalSeconds. AwaitingSmsCode — сервер переключился на SMS fallback, поскольку невозможно завершить Mobile ID аутентификацию: запроси SMS-код и передай его в requestToken. Failed — терминальный отказ, новый вход требует sendCode. TokenReady — токены выданы. Обычный Email/SMS OTP требует ввода кода сразу после sendCode; серверного AwaitingEmailCode нет.\",\n valueSchema: \"TokenStatus\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenRespFieldDocs = mapFieldDocsToStrings(tokenRespFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/refresh`**. */\nexport const refreshReqFieldDocEntries = {\n refreshToken: {\n description: \"Текущий refresh-токен пользователя.\",\n usage:\n \"Обязателен для обмена. Вызов идёт через `AuthFacade` без Bearer пользователя; на шлюзе обычно нужен `authIdentityBasic` (см. `examples/node/auth/auth-refresh.ts`).\",\n },\n deviceInfo: {\n description: \"Сведения об устройстве клиента (`DeviceInfo` в OpenAPI).\",\n usage:\n \"Минимум: непустые `deviceId` + `deviceType` (`DeviceTypeValues` из `@torrow/sdk-client`: Unknown|Mobile|Tablet|Desktop). На проде — ещё push/os.\",\n valueSchema: \"DeviceInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const refreshReqFieldDocs = mapFieldDocsToStrings(refreshReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/token`** (обмен кода/сессии на токены — зависит от способа входа). */\nexport const tokenReqFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии после шага отправки кода / создания сессии.\",\n usage: \"Часто приходит из потока `sendcode` / `session` до вызова `token`.\",\n },\n code: {\n description: \"Одноразовый код подтверждения (SMS, email и т.п.), если применимо.\",\n usage:\n \"Вместе с `sessionId` для классического OTP. Для MTS Mobile ID на фазе polling код может отсутствовать, пока `TokenResp.status === Pending`.\",\n },\n scopes: {\n description:\n \"Запрашиваемые области доступа. OpenAPI — `string[]`; в SDK известные значения — **`AuthScopeValues`**: `user_api`, `admin_api`, `offline_access` (дефолт OTP — **`DefaultAuthScopes`**).\",\n valueSchema: \"AuthScope[] | null\",\n examples: ['[\"user_api\",\"offline_access\"]'],\n },\n deviceInfo: {\n description: \"Сведения об устройстве (`DeviceInfo`).\",\n usage: \"`deviceType` — только OpenAPI enum; в SDK: **`DeviceTypeValues`** (`Desktop` по умолчанию в примерах).\",\n valueSchema: \"DeviceInfo\",\n },\n splitTokens: {\n description:\n \"Разделение access/refresh сервером: false — полные токены в JSON и удаление cookies разделённых токенов; true — часть каждого токена в JSON, другая часть в HttpOnly cookie. При отсутствии готового access token разделение пропускается.\",\n usage:\n \"Для Node, MCP, выпуска интеграционного ключа и cleanup задавай false. true — только для браузерной авторизации с настроенной передачей cookies и частей токенов. SDK не управляет cookies и не восстанавливает токены; стандартный Node fetch не сохраняет cookies между запросами. OtpFlow передаёт явные true/false, undefined не отправляет; текущий шлюз трактует отсутствие как false.\",\n valueSchema: \"boolean\",\n examples: [\"false\", \"true\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const tokenReqFieldDocs = mapFieldDocsToStrings(tokenReqFieldDocEntries);\n\n/** Тело **`POST /api/v1/auth/revoke`**. */\nexport const revokeReqFieldDocEntries = {\n token: {\n description: \"Refresh-токен, который нужно инвалидировать на сервере.\",\n usage: \"Вызывай при выходе пользователя или компрометации refresh.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const revokeReqFieldDocs = mapFieldDocsToStrings(revokeReqFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/sendcode`. */\nexport const sendCodeReqFieldDocEntries = {\n accountName: {\n description: \"Телефон/email/логин, куда отправляют код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description:\n \"Тип аккаунта (`AccountType`). Для OTP/`sendCode` в продукте и примерах — **`Phone`** или **`Email`**. **`Undefined`** Identity отвергает; **`Telegram`** — не этот эндпоинт (deep-link → `createSession`).\",\n valueSchema: \"AccountType\",\n usage: \"Примеры: `auth-send-code.ts` / `auth-login-with-otp.ts` (`SendCodeAccountType` = Phone|Email).\",\n },\n language: {\n description: \"Язык сообщений/кода.\",\n valueSchema: \"string | null\",\n },\n captcha: {\n description: \"Токен captcha, если включена антибот-проверка.\",\n valueSchema: \"string | null\",\n },\n captchaType: {\n description:\n \"Провайдер captcha, выдавший токен. OpenAPI — `string`; в SDK известные значения — **`AuthCaptchaTypeValues`**: `YandexSmartCaptcha`, `GoogleRecaptcha` (v2 invisible).\",\n valueSchema: \"AuthCaptchaType | null\",\n examples: [\"YandexSmartCaptcha\", \"GoogleRecaptcha\"],\n },\n inviteSessionId: {\n description: \"ID invite-сессии (вход по приглашению).\",\n valueSchema: \"string | null\",\n },\n regionStorageId: {\n description: \"Региональный storage ID (если используется backend identity).\",\n valueSchema: \"int32 | null\",\n },\n preferredMethod: {\n description:\n \"Желаемый способ доставки (`VerificationMethod`). `UnknownMethod` (дефолт) — выбор сервера; иначе — если доступен, иначе fallback по приоритету.\",\n valueSchema: \"VerificationMethod\",\n },\n supportedMethods: {\n description:\n \"Методы, которые клиент умеет обрабатывать, в порядке приоритета: порядок массива имеет значение. Для телефона рекомендуется `TelegramGateway`, `MtsMobileId`, `Sms`. Out-of-band вроде `MtsMobileId` выбираются только если перечислены здесь — старые клиенты без списка остаются на классическом вводе кода.\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeReqFieldDocs = mapFieldDocsToStrings(sendCodeReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/sendcode`. */\nexport const sendCodeRespFieldDocEntries = {\n sessionId: {\n description: \"ID auth-сессии для следующего шага (`requestToken`).\",\n valueSchema: \"string | null\",\n },\n codeLifetimeSeconds: {\n description:\n \"TTL кода в секундах (**deprecated** в OpenAPI — предпочитай `sessionLifeTimeInSeconds` / `codeLength`).\",\n valueSchema: \"int32\",\n },\n sessionLifeTimeInSeconds: {\n description: \"TTL auth-сессии в секундах.\",\n valueSchema: \"int32\",\n },\n nextAvailableUsageTime: {\n description: \"Когда можно снова запросить код (rate limit), если сервер вернул.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Сколько попыток ввода кода осталось/доступно для сессии (семантика стенда).\",\n valueSchema: \"int32\",\n },\n usedMethod: {\n description: \"Фактически выбранный сервером способ доставки/подтверждения.\",\n usage: \"UI: подпись «код в SMS» / Telegram / flash-call; при `MtsMobileId` — polling `requestToken` по `status`.\",\n valueSchema: \"VerificationMethod\",\n },\n availableMethods: {\n description: \"Методы, которые клиент может запросить для этого аккаунта (UX «другой способ»).\",\n valueSchema: \"VerificationMethod[] | null\",\n },\n codeLength: {\n description: \"Длина доставленного кода — размер поля ввода в UI.\",\n valueSchema: \"int32\",\n },\n pollIntervalSeconds: {\n description:\n \"Для `usedMethod === MtsMobileId`: рекомендуемый интервал (сек) между повторными `requestToken` пока `TokenResp.status === Pending`.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendCodeRespFieldDocs = mapFieldDocsToStrings(sendCodeRespFieldDocEntries);\n\n/** Тело `POST /api/v1/auth/session`. */\nexport const createAuthSessionReqFieldDocEntries = {\n accountType: {\n description:\n \"Тип аккаунта для auth-сессии с **`authUrl`**. На шлюзе в `AuthUrlsByAccountType` обычно только **`Telegram`**; `Phone`/`Email` → часто 500.\",\n valueSchema: \"AccountType\",\n usage: \"Пример: `auth-login-with-link.ts` (env `TORROW_AUTH_CREATE_SESSION_ACCOUNT_TYPE`, дефолт Telegram).\",\n },\n regionStorageId: { description: \"Регион storage для identity (обязателен в OpenAPI).\", valueSchema: \"int32\" },\n language: { description: \"Язык интерфейса/сообщений сессии (обязателен в OpenAPI).\", valueSchema: \"string\" },\n inviteSessionId: { description: \"ID invite-сессии (если вход по приглашению).\", valueSchema: \"string | null\" },\n captcha: { description: \"Captcha token для защиты от ботов.\", valueSchema: \"string | null\" },\n deviceId: { description: \"Идентификатор устройства клиента.\", valueSchema: \"string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionReqFieldDocs = mapFieldDocsToStrings(createAuthSessionReqFieldDocEntries);\n\n/** Ответ `POST /api/v1/auth/session`. */\nexport const createAuthSessionRespFieldDocEntries = {\n sessionId: { description: \"ID созданной auth-сессии.\", valueSchema: \"string | null\" },\n sessionLifeTimeInSeconds: { description: \"Срок жизни сессии в секундах.\", valueSchema: \"int32\" },\n nextAvailableUsageTime: {\n description: \"Когда сессию/код можно использовать снова (rate limit), если задано.\",\n valueSchema: \"Date | null\",\n },\n attemptCountToUseSession: {\n description: \"Счётчик попыток использования сессии.\",\n valueSchema: \"int32\",\n },\n code: {\n description: \"Код/секрет сессии, если сервер вернул сразу (редко; зависит от потока).\",\n valueSchema: \"string | null\",\n },\n authUrl: {\n description: \"URL внешнего шага аутентификации (deep link / redirect), если применимо.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createAuthSessionRespFieldDocs = mapFieldDocsToStrings(createAuthSessionRespFieldDocEntries);\n\n/**\n * Поверхность SDK, связанная с Bearer и гостевым доступом (не схема OpenAPI, а конфиг клиента).\n */\nexport const torrowClientAuthConfigFieldDocEntries = {\n getAccessToken: {\n description:\n \"Асинхронный колбэк: возвращает строку Bearer или `undefined` (тогда заголовок `Authorization` не ставится).\",\n usage:\n \"Предпочтительно **`@torrow/sdk-auth`** (`TokenSession` → `session.client`, storage + проактивный refresh + опциональный 401→retry). Вручную: кэш access + **`client.auth.refresh`** (без Bearer этого колбэка) — иначе рекурсия. Гостевой **`securityToken`** — только в опциях конкретного вызова фасада, не в конфиге клиента.\",\n },\n authIdentityBasic: {\n description:\n \"HTTP Basic приложения на шлюзе (`AuthIdentityBasic`: `username`/`password` ≈ `clientId`/`clientSecret`). Не user Bearer.\",\n usage:\n \"Нужен для **`client.auth.*`** на `torrow.net`. С сессией — **`TorrowAuth`** + **`appCredentials`** (маппинг внутри auth-пакета). Low-level: **`auth-send-code.ts`**.\",\n valueSchema: \"AuthIdentityBasic\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowClientAuthConfigFieldDocs = mapFieldDocsToStrings(torrowClientAuthConfigFieldDocEntries);\n\n/** Методы **`TorrowClient.auth`** ↔ REST AuthIdentity. */\nexport const authSdkMethodFieldDocEntries = {\n refresh: {\n description: \"`POST /api/v1/auth/refresh` — тело `RefreshReq`, ответ `TokenResp`.\",\n usage:\n \"Безопасно вызывать с того же экземпляра `TorrowClient`, у которого задан `getAccessToken`: внутренний вызов не использует Bearer. На `torrow.net` задай `authIdentityBasic`, иначе часто `REQUEST_IS_INVALID`.\",\n },\n requestToken: {\n description: \"`POST /api/v1/auth/token` — тело `TokenReq`, ответ `TokenResp` (смотри `status`).\",\n usage:\n \"После **`sendCode`**: `sessionId` + код (классика) или polling без кода при `MtsMobileId`/`Pending`. Оркестрация — **`TorrowAuth.loginWithOtp`**; явный обмен — **`session.requestTokenWithCode`** (`auth-complete-with-code.ts`); low-level — **`auth-send-code.ts`**.\",\n },\n revoke: {\n description: \"`POST /api/v1/auth/revoke` — тело `RevokeReq`, ответ пустой при успехе.\",\n usage: \"Выход и инвалидация refresh на сервере. Предпочтительно **`session.logout()`**.\",\n },\n sendCode: {\n description: \"`POST /api/v1/auth/sendcode` — тело `SendCodeReq`, ответ `SendCodeResp`.\",\n usage:\n \"Первый шаг OTP: **`sessionId`**, **`usedMethod`**, **`codeLength`**, при Mobile ID — **`pollIntervalSeconds`**. Только sendCode — **`examples/node/auth/auth-send-code.ts`**; склейка с токенами — **`TorrowAuth.loginWithOtp`** / **`auth-login-with-otp.ts`**.\",\n },\n createSession: {\n description: \"`POST /api/v1/auth/session` — тело `CreateAuthSessionReq`, ответ `CreateAuthSessionResp`.\",\n usage:\n \"Не OTP-логин приложения: в torrow-apps вход — `sendCode`/`requestToken`. Этот метод — сессия под внешний deep-link (`authUrl`); на шлюзе в `AuthUrlsByAccountType` обычно только `Telegram`. Для `Phone`/`Email` часто 500 `KeyNotFoundException`. Оркестрация — **`TorrowAuth.loginWithLink`** / **`auth-login-with-link.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkMethodFieldDocs = mapFieldDocsToStrings(authSdkMethodFieldDocEntries);\n\n/**\n * Фасад **`TorrowAuth`** / advanced **`TokenSession`** (**`@torrow/sdk-auth`**).\n * MCP: **`mcpAuthFieldCatalog.AuthSdkHelpers`**.\n */\nexport const authSdkHelperFieldDocEntries = {\n \"TorrowAuth.createOtpFlow\": {\n description: \"Пошаговый OTP без TokenStorage, callbacks, refresh, retry и автоматического polling.\",\n usage:\n \"HTTP/app credentials, deviceInfo, scopes, splitTokens. Один sendCode на start, один requestToken на complete. Примеры: auth-otp-flow.ts, auth-otp-flow-mobile-id.ts.\",\n },\n \"OtpFlow.start\": {\n description: \"start(input, { signal }) → проверенный JSON challenge с фазой AwaitingCode или Pending.\",\n usage:\n \"Phone/Email, language/region, captcha, invite и методы. UnknownMethod поддерживается для Email; неизвестный метод отклоняется.\",\n },\n \"OtpFlow.complete\": {\n description: \"complete({ challenge, code }, { signal }) → Pending, AwaitingSmsCode, Failed или TokenReady.\",\n usage:\n \"Pending запрещает code; AwaitingCode требует его. AwaitingSmsCode продолжает ту же Mobile ID auth-сессию через SMS fallback: новая фаза AwaitingCode, метод Sms, прежние sessionId и deadline. TokenReady требует явного status и access token.\",\n },\n OtpChallenge: {\n description:\n \"Переносимое продолжение: sessionId, accountType, usedMethod, phase, expiresAtMs и проверенные подсказки.\",\n usage:\n \"Без токенов/OTP. Приложение защищает целостность. Серверный TTL или локальные 180с без продления. Polling hint default 3с. Даты — Unix milliseconds.\",\n },\n OtpCompleteResult: {\n description:\n \"Серверный статус шага: Pending — аутентификация ещё не завершена, следующий запрос без кода; AwaitingSmsCode — продолжение той же Mobile ID auth-сессии через SMS fallback, поскольку Mobile ID не удалось завершить. Возвращённый challenge меняет фазу Pending на AwaitingCode и метод на Sms, сохраняя sessionId и deadline. TokenReady — tokens без продолжения; Failed — отказ без продолжения. Фаза challenge определяет следующий шаг приложения, а не новый серверный статус.\",\n usage:\n \"Refresh доступен в tokens при TokenReady или cleanup в других результатах. Cleanup выполняет приложение с независимым deadline.\",\n },\n OtpErrorDetail: {\n description:\n \"Предметное уточнение TorrowSdkError: домен Otp и необязательная enum-причина InvalidChallenge / UnsupportedMethod / AuthHeaderMissing / CodeRequestLimitExceeded; общий ввод и ответ описываются category.\",\n usage:\n \"getSensitiveDetails().cleanup.refreshToken доступен только явно. effects отсутствуют у пошагового flow и не доказывают отсутствие изменений. Составной login описывает собственные шаги; успешные результаты и legacy-адаптация сохраняются.\",\n },\n \"TorrowAuth.connect\": {\n description: \"Restore из **`TokenStorage`**: при необходимости refresh → `{ client, session }`. **Без** OTP-hook.\",\n usage:\n \"`appCredentials` + `tokenStorage` + `deviceInfo`. Статус — **`session.status`**. Пример: **`auth-connect.ts`**.\",\n },\n \"TorrowAuth.loginWithOtp\": {\n description: \"`sendCode` → Mobile ID poll / classic код → persist → `{ client, session }`.\",\n usage:\n \"`account: { accountType, accountName }` (как SendCodeReq). UI: **`onSendCode({ accountName, accountType, usedMethod, codeLength, … })`**; **`getCode({ codeLength })`** только когда нужны цифры (экран уже из `onSendCode`). Примеры: **`auth-login-with-otp.ts`**, **`auth-login-with-otp-mobile-id.ts`**.\",\n },\n \"TorrowAuth.loginWithLink\": {\n description:\n \"Telegram deep-link: `createSession` → **`onLink(authUrl)`** → внутренний poll `requestToken` → persist.\",\n usage: \"Код OTP **не** вводить. Пример: **`auth-login-with-link.ts`**.\",\n },\n \"TorrowAuth.fromTokens\": {\n description: \"Сид `accessToken` [/ `refreshToken`] в storage → connect-семантика.\",\n usage:\n \"`appCredentials` опционален: без него нет refresh. Opaque/integration key: задай `accessExpiresAtMs` или бессрочно без TTL. У JWT runtime freshness AND-ит `exp` — будущий explicit `accessExpiresAtMs` не оживит просроченный JWT. Пример: **`auth-from-tokens.ts`**.\",\n },\n \"TorrowAuth.anonymous\": {\n description: \"`TorrowClient` без Bearer (`getAccessToken: undefined`).\",\n usage: \"Публичные GET. Пример: **`auth-anonymous-public-service.ts`**.\",\n },\n requestTokenWithCode: {\n description:\n \"**`TokenSession.requestTokenWithCode`**: токены по `sessionId` + OTP-коду (`requestToken`) → persist при TokenReady.\",\n usage:\n \"После `sendCode` + кода (UI/stdin). Не ready → **`TorrowSdkError с AuthSession / SessionNotReady`** (poll — внутри **`loginWithLink`**). Пример: **`auth-complete-with-code.ts`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const authSdkHelperFieldDocs = mapFieldDocsToStrings(authSdkHelperFieldDocEntries);\n\n/**\n * Гостевой **`securityToken`**: не access JWT, не заголовок `Authorization`.\n * Ключи — подсказки для агентов (MCP: **`mcpAuthFieldCatalog.GuestAccessSecurityToken`**).\n */\nexport const guestAccessSecurityTokenFieldDocEntries = {\n purpose: {\n description:\n \"Одноразовый или контекстный **opaque**-токен, который сервер принимает **вместо или вместе с** полноценной пользовательской сессией, чтобы отдать данные по конкретной сущности (часто **событие/заказ**), не раскрывая всё дерево прав владельца.\",\n usage:\n \"Типичный UX: пользователь **не залогинен**, но открыл ссылку после записи на услугу; сервер выдал токен вместе с ответом **`createOrder`**, приложение подставляет его в следующие **чтения** этого кейса.\",\n },\n notBearer: {\n description:\n \"**Не** подставлять в `Authorization` и **не** путать с `TokenResp.accessToken` / env **`TORROW_ACCESS_TOKEN`**.\",\n usage:\n \"`TORROW_ACCESS_TOKEN` → `TorrowClientConfig.getAccessToken` → заголовок **`Authorization: Bearer …`**. `securityToken` → только поля **`securityToken`** в query или в теле запроса по OpenAPI.\",\n },\n openApiWire: {\n description:\n \"В OpenAPI параметр чаще всего называется **`securityToken`** (query на `GET/PUT/DELETE …` или поле в JSON-теле — сверяй конкретный путь в **`docs/torrow-swagger.json`**).\",\n usage:\n \"SDK не добавляет его глобально: передаёшь в **опциях** соответствующего метода фасада (например `cases.getById(id, { securityToken })`) или в свойстве тела (`GetReCheckInScheduleReq.securityToken` для `services.getReCheckInSchedule`).\",\n },\n afterCreateOrder: {\n description:\n \"После **`client.services.createOrder`** в ответе **`OrderResp`** часто есть строка, которую продукт кладёт в query как **`securityToken`** при открытии экрана события у гостя.\",\n usage:\n \"Возьми **`OrderResp.consumerSecurityToken`** (если пришёл) и передай тем же ключом в **`client.cases.getById(order.id, { securityToken: consumerSecurityToken, caseParticipantId: … })`** — иначе **`personalInfo.ticketResource`** и ссылка на оплату могут не вернуться.\",\n examples: [\"consumerSecurityToken из OrderResp\"],\n },\n envInExamples: {\n description:\n \"В актуальных примерах гостевой токен берётся из **`OrderResp`** и передаётся дальше в browser-потоке **`examples/browser/guest-order/`**; отдельный env с токеном несвязанного кейса не используется.\",\n usage:\n \"В своём коде приложения храни значение там же, где хранишь deep link / черновик заказа (state роутера), а не в общем `TorrowClient`-конфиге — конфиг клиента **не** содержит `securityToken`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const guestAccessSecurityTokenFieldDocs = mapFieldDocsToStrings(guestAccessSecurityTokenFieldDocEntries);\n\n/** Значения OpenAPI **`DeviceType`** ↔ **`DeviceTypeValues`** в `@torrow/sdk-client`. */\nexport const deviceTypeValuesFieldDocEntries = {\n Unknown: {\n description: \"Тип устройства не определён / не передан явно.\",\n usage: \"`DeviceTypeValues.Unknown` → `DeviceInfo.deviceType`.\",\n },\n Mobile: {\n description: \"Мобильный клиент.\",\n usage: \"`DeviceTypeValues.Mobile`.\",\n },\n Tablet: {\n description: \"Планшет.\",\n usage: \"`DeviceTypeValues.Tablet`.\",\n },\n Desktop: {\n description: \"Десктоп / веб-десктоп (дефолт в примерах SDK).\",\n usage: \"`DeviceTypeValues.Desktop`. Парсинг env: `parseDeviceType`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deviceTypeValuesFieldDocs = mapFieldDocsToStrings(deviceTypeValuesFieldDocEntries);\n","/**\n * Описания схем токенов и конфигурации авторизации для MCP / агентов.\n * Ключи верхнего уровня: `TokenResp`, `RefreshReq`, `TokenReq`, `RevokeReq` совпадают с `components.schemas`;\n * `TorrowClientConfigAuth` — условное имя для поля {@link TorrowClientConfig.getAccessToken} в справочнике MCP.\n * `GuestAccessSecurityToken` — как и зачем передавать гостевой query/body **`securityToken`** (не Bearer).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n torrowSdkErrorDomainFieldDocEntries,\n otpErrorReasonFieldDocEntries,\n authSessionErrorReasonFieldDocEntries,\n authSessionEffectStepFieldDocEntries,\n otpErrorDetailFieldDocEntries,\n authSessionErrorDetailFieldDocEntries,\n} from \"./sdk-error-field-docs.js\";\nimport {\n authSdkMethodFieldDocEntries,\n authSdkHelperFieldDocEntries,\n createAuthSessionReqFieldDocEntries,\n createAuthSessionRespFieldDocEntries,\n deviceTypeValuesFieldDocEntries,\n refreshReqFieldDocEntries,\n revokeReqFieldDocEntries,\n sendCodeReqFieldDocEntries,\n sendCodeRespFieldDocEntries,\n tokenReqFieldDocEntries,\n tokenRespFieldDocEntries,\n torrowClientAuthConfigFieldDocEntries,\n guestAccessSecurityTokenFieldDocEntries,\n} from \"./auth-token-field-docs.js\";\n\nexport const mcpAuthFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowSdkErrorDomain: { ...torrowSdkErrorDomainFieldDocEntries },\n OtpErrorReason: { ...otpErrorReasonFieldDocEntries },\n AuthSessionErrorReason: { ...authSessionErrorReasonFieldDocEntries },\n AuthSessionEffectStep: { ...authSessionEffectStepFieldDocEntries },\n OtpErrorDetail: { ...otpErrorDetailFieldDocEntries },\n AuthSessionErrorDetail: { ...authSessionErrorDetailFieldDocEntries },\n /** Методы `TorrowClient.auth` ↔ OpenAPI AuthIdentity. */\n AuthSdkMethods: { ...authSdkMethodFieldDocEntries },\n /** Хелперы `@torrow/sdk-auth` (пошаговый OtpFlow, OTP-оркестрация, Mobile ID). */\n AuthSdkHelpers: { ...authSdkHelperFieldDocEntries },\n TokenResp: { ...tokenRespFieldDocEntries },\n RefreshReq: { ...refreshReqFieldDocEntries },\n TokenReq: { ...tokenReqFieldDocEntries },\n RevokeReq: { ...revokeReqFieldDocEntries },\n SendCodeReq: { ...sendCodeReqFieldDocEntries },\n SendCodeResp: { ...sendCodeRespFieldDocEntries },\n CreateAuthSessionReq: { ...createAuthSessionReqFieldDocEntries },\n CreateAuthSessionResp: { ...createAuthSessionRespFieldDocEntries },\n /** Поле `getAccessToken` в `TorrowClientConfig` (Bearer приложения). */\n TorrowClientConfigAuth: { ...torrowClientAuthConfigFieldDocEntries },\n /** Гостевой `securityToken`: query/тело запроса, не конфиг `TorrowClient`. */\n GuestAccessSecurityToken: { ...guestAccessSecurityTokenFieldDocEntries },\n /** OpenAPI `DeviceType` ↔ `DeviceTypeValues` / `parseDeviceType`. */\n DeviceTypeValues: { ...deviceTypeValuesFieldDocEntries },\n};\n","/**\n * Описания методов **`TorrowClient.search`** и ключевых DTO поиска заказов для MCP / агентов.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/** Общая текстовая выдача (`GET …/search/{contacts|notes|…}`), не `search.orders`. */\nconst TEXT_SEARCH_PUBLICITY =\n \"В выдаче только **`PublicAvailable`** / **`PublicWithRequest`** (`Personal` / `Private` / `Link` — нет). \" +\n \"Для нового item значение задаётся сразу через create-options; для существующего — через **`updatePublicity`**. \" +\n \"Индекс обновляется асинхронно. См. **`docs/agents/participation-flow.md`** §3, пример **`search-contacts.ts`**.\";\n\nexport const searchSdkMethodFieldDocEntries = {\n advisedItems: {\n description:\n \"`GET /api/v1/search/adviseditems` — подборка **`TorrowItem[]`**; query **`AdvisedItemsSearchQuery`** \" +\n \"(`type` **`AdvisedItemType`**, гео, `language`, `take`/`skip`).\",\n usage:\n \"**`NearLocation`**: обязательны `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`** (СПб). \" +\n \"**`Recommendation`**: персональные рекомендации. Не путать с текстовым `search.contacts` и т.п.\",\n },\n orders: {\n description:\n \"`PUT /api/v1/search/{torrowId}/orders` — список представлений заказов (**`CaseView[]`**) под родителем с **`OrderFilter`** в теле.\",\n usage: \"Альтернатива **`client.raw.put`**; см. **`examples/node/raw/search-orders-raw.ts`**.\",\n },\n contacts: {\n description: \"`GET /api/v1/search/contacts` — **`ContactView[]`** по тексту и опциям.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n notes: {\n description: \"`GET /api/v1/search/notes` — **`NoteView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n calendars: {\n description: \"`GET /api/v1/search/calendars` — **`CalendarView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n cases: {\n description: \"`GET /api/v1/search/cases` — **`CaseView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n resources: {\n description: \"`GET /api/v1/search/resources` — **`ResourceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n services: {\n description: \"`GET /api/v1/search/services` — **`ServiceView[]`**.\",\n usage: TEXT_SEARCH_PUBLICITY,\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const searchSdkMethodFieldDocs = mapFieldDocsToStrings(searchSdkMethodFieldDocEntries);\n\n/** Query `GET /api/v1/search/adviseditems` (`AdvisedItemsSearchQuery` / OpenAPI). */\nexport const advisedItemsSearchQueryFieldDocEntries = {\n type: {\n description:\n \"Режим подборки: **`NearLocation`** (рядом с точкой) или **`Recommendation`** (персональные рекомендации).\",\n valueSchema: \"AdvisedItemType\",\n examples: [\"NearLocation\", \"Recommendation\"],\n },\n longitude: {\n description: \"Долгота WGS84. Для **`NearLocation`** задавай вместе с **`latitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"30.3141\"],\n },\n latitude: {\n description: \"Широта WGS84. Для **`NearLocation`** задавай вместе с **`longitude`**.\",\n valueSchema: \"number (double)\",\n examples: [\"59.9386\"],\n },\n language: {\n description: \"Язык локализации подборки (BCP-47).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум элементов в ответе (пагинация).\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const advisedItemsSearchQueryFieldDocs = mapFieldDocsToStrings(advisedItemsSearchQueryFieldDocEntries);\n\nexport const orderFilterFieldDocEntries = {\n searchText: {\n description: \"Подстрока для фильтрации заказов (семантика на стороне API).\",\n },\n fuzzyDistance: {\n description: \"Допуск «размытия» для текстового поиска (int).\",\n },\n from: {\n description: \"Начало интервала по времени (**ISO date-time**).\",\n },\n to: {\n description: \"Конец интервала (**ISO date-time**).\",\n },\n strictlyInTimeRange: {\n description: \"Если true — строго внутри интервала.\",\n },\n orderStateList: {\n description: \"Список **`CaseState`** для фильтра.\",\n valueSchema: \"CaseState\",\n },\n orderTypeList: {\n description: \"Список **`CaseType`** для фильтра.\",\n valueSchema: \"CaseType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const orderFilterFieldDocs = mapFieldDocsToStrings(orderFilterFieldDocEntries);\n","/**\n * Каталог **Search** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n advisedItemsSearchQueryFieldDocEntries,\n orderFilterFieldDocEntries,\n searchSdkMethodFieldDocEntries,\n} from \"./search-field-docs.js\";\n\nexport const mcpSearchFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n SearchSdkMethods: { ...searchSdkMethodFieldDocEntries },\n AdvisedItemsSearchQuery: { ...advisedItemsSearchQueryFieldDocEntries },\n OrderFilter: { ...orderFilterFieldDocEntries },\n};\n","/**\n * Каталог методов **`client.notes`** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { notesSdkMethodFieldDocEntries } from \"./notes-field-docs.js\";\n\nexport const mcpNotesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n NotesSdkMethods: { ...notesSdkMethodFieldDocEntries },\n};\n","import type { ResourcesFacade } from \"../resources/resources/ResourcesFacade.js\";\nimport type { ResourceItemPatch, ResourcePaymentPatchProperties } from \"../resources/resources/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Все подтверждённые 17 полей partial Resource update; прочие операции не объединяются в patch. */\nexport const resourceItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} уже загруженного файла либо null для снятия; URL не записывается.\" },\n description: { description: \"Описание string|null; empty допустим, пропуск сохраняет.\" },\n itemId: { description: \"ID связанной сущности, не target ID ресурса; null снимает ссылку.\" },\n parentResourceId: {\n description: \"ID родительского ресурса; null снимает ссылку; expanded parentResource не patch-поле.\",\n },\n timetableId: { description: \"ID расписания; null снимает ссылку.\" },\n schedule: {\n description:\n \"Полная замена расписания с Date SDK; отсутствующий rid диапазона создаётся SDK; null снимает структуру.\",\n valueSchema: \"Schedule | null\",\n },\n priceInfo: {\n description:\n \"Полная замена settings и их schedule; отсутствующие rid диапазонов создаются SDK; null очищает все цены. Для удаления отдельной цены передайте список без её записи.\",\n valueSchema: \"ItemPricePatchInfo | null\",\n },\n usageType: {\n description:\n \"Серверный способ использования; UnknownUsageType нормализует сервер, SDK не назначает create default.\",\n valueSchema: \"UsageType\",\n },\n serviceDescriptions: {\n description: \"Полная замена связей с услугами/группами; [] снимает список, ограничения usageType проверяет сервер.\",\n valueSchema: \"ServiceDescription[]\",\n },\n code: { description: \"Код string|null; empty допустим.\" },\n duration: {\n description: \"Длительность/расчётная единица в секундах int32; 0 передаётся явно, null снимает значение.\",\n },\n amountProperties: {\n description:\n \"Полная замена количественных свойств, inventoryDate Date SDK; null снимает структуру, нулевые значения сохраняются.\",\n valueSchema: \"AmountProperties | null\",\n },\n usageCondition: {\n description: \"Полная замена условий, без выполнения связанных действий; null снимает структуру.\",\n valueSchema: \"UsageCondition | null\",\n },\n appendixList: { description: \"Полная замена приложений с Date SDK; [] снимает список.\", valueSchema: \"Appendix[]\" },\n paymentProperties: {\n description:\n \"Полная замена конфигурации оплаты либо null; paymentProviderType определяет допустимые поля parameters. Платежи SDK не выполняет.\",\n valueSchema: \"ResourcePaymentPatchProperties | null\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Полная замена настроек лояльности; [] снимает список, SDK не вычисляет баланс.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n} satisfies Record<keyof ResourceItemPatch, ItemFieldDoc>;\n\n/** Предметные параметры выбранного провайдера; действительность credentials проверяет сервер. */\nexport const resourcePaymentPatchPropertiesFieldDocEntries = {\n paymentProviderType: {\n description:\n \"Wire provider enum; Cash/CustomLink/YooMoney/QiwiP2P/YooKassa/Sberbank/Alfabank/Uralsib/RoboKassa/PayKeeper/Prodamus/Tinkoff/Mock имеют подтверждённые parameter classes.\",\n valueSchema: \"PaymentProviderType\",\n },\n parameters: {\n description:\n \"Полная замена параметров выбранного провайдера. Обязательность объекта и его полей определяется провайдером; Cash/Mock/YooKassa и общие ветви допускают отсутствие/null. В переданном YooKassa объекте shopId/secretKey/taxation обязательны. SDK не проверяет содержимое credentials.\",\n valueSchema: \"ResourcePaymentPatchParameters\",\n },\n numeratorId: { description: \"Ссылка на нумератор оплаты; null снимает её.\" },\n waitForConfirmation: { description: \"Ожидать подтверждения; false передаётся явно, null снимает значение.\" },\n} satisfies Record<keyof ResourcePaymentPatchProperties, ItemFieldDoc>;\n\n/** Все известные предметные параметры; допустимый набор определяется paymentProviderType, значения не логируются. */\nexport const resourcePaymentPatchParametersFieldDocEntries = {\n text: { description: \"Общий текст оплаты; string|null.\" },\n beforePayMessage: { description: \"Общее сообщение до оплаты; string|null.\" },\n afterPayMessage: { description: \"Общее сообщение после оплаты; string|null.\" },\n url: { description: \"URL CustomLink/PayKeeper/Prodamus; обязательная строка в этих ветвях, SDK её не нормализует.\" },\n accountId: { description: \"Обязательная строка кошелька YooMoney.\" },\n notificationSecret: { description: \"Обязательный строковый секрет YooMoney; чувствительное значение.\" },\n publicKey: { description: \"Обязательный строковый публичный ключ QiwiP2P.\" },\n privateKey: { description: \"Обязательный строковый закрытый ключ QiwiP2P; чувствительное значение.\" },\n shopId: { description: \"Обязательная строка магазина в переданном YooKassa parameters.\" },\n secretKey: { description: \"Обязательный строковый секрет YooKassa/Prodamus; чувствительное значение.\" },\n taxation: { description: \"Обязательная строка системы налогообложения YooKassa/Tinkoff; SDK не трактует её.\" },\n username: { description: \"Обязательное строковое имя пользователя RBS банков/PayKeeper.\" },\n password: { description: \"Обязательный строковый пароль RBS банков/PayKeeper/Tinkoff; чувствительное значение.\" },\n isTest: {\n description:\n \"Булев тестовый режим RBS/RoboKassa/PayKeeper/Prodamus; false сохраняется, отсутствие использует server default false.\",\n },\n shopName: { description: \"Обязательное строковое имя магазина RoboKassa.\" },\n password1: { description: \"Первый обязательный строковый пароль RoboKassa; чувствительное значение.\" },\n password2: { description: \"Второй обязательный строковый пароль RoboKassa; чувствительное значение.\" },\n terminal: { description: \"Обязательная строка терминала Tinkoff.\" },\n split: { description: \"Необязательная строка распределения Tinkoff; SDK её не вычисляет.\" },\n redirectBaseUrl: { description: \"Необязательная строка перенаправления MockPaymentProvider.\" },\n errorResponceCode: { description: \"Необязательный int32|null Mock; опечатка wire Responce сохранена.\" },\n createAfter: {\n description:\n \"Необязательная Date|null Mock; только это известное поле no-op сравнивает с сырым ISO, без общего revival.\",\n },\n} satisfies Record<string, ItemFieldDoc>;\n\n/** Метод конкретного resourceItems фасада, не универсальный метод технической папки resources. */\nexport const resourcesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/resources/{id}; 17 полей, Full/UpdateItem/item version обязательны, price aliases согласуются общим SDK helper. No-op, без retry/readback; ticket lifecycle и BehaviorSettings отдельно.\",\n valueSchema:\n \"(itemId: string, fields: ResourceItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ResourceItem>\",\n },\n} satisfies Record<Extract<keyof ResourcesFacade, \"patch\">, ItemFieldDoc>;\n","import type { CasesFacade } from \"../resources/cases/CasesFacade.js\";\nimport type { CaseItemPatch } from \"../resources/cases/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Полная клиентская конфигурация root Case update, без состояния, участия и серверных агрегатов. */\nexport const caseItemPatchFieldDocEntries = {\n name: { description: \"Непустая строка без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: {\n description: \"Ссылка {id} на загруженный файл; null удаляет изображение, FileInfo URL/metadata запрещены на входе.\",\n },\n beginDate: { description: \"Начало события Date; null снимает дату, сервер проверяет календарную допустимость.\" },\n endDate: { description: \"Окончание события Date; null снимает дату.\" },\n description: { description: \"Описание без trim; null/empty очищают.\" },\n placeId: { description: \"Непустой ID места; null снимает ссылку, тип/доступность ссылки проверяет сервер.\" },\n place: { description: \"Текст места; null/empty очищают.\" },\n caseType: {\n description: \"OpenAPI CaseType, кроме UnknownTimeType; смену типа и даты согласует сервер.\",\n valueSchema: \"CaseType\",\n },\n schedule: {\n description:\n \"Расписание целиком; отсутствующий rid диапазона создаётся SDK, null снимает его. SDK не рассчитывает повторения, непереданный createSingleCases сохраняется.\",\n valueSchema: \"Schedule\",\n },\n registrationOpen: { description: \"Открытие регистрации, секунд до начала; int32/null, null снимает ограничение.\" },\n registrationClose: { description: \"Закрытие регистрации, секунд до начала; int32/null, null снимает ограничение.\" },\n visitCard: {\n description:\n \"Визитка события целиком; null запрещён, fields:[] допускается. Правило трёх слотов Contact не применяется.\",\n valueSchema: \"CaseVisitCard\",\n },\n bookingDuration: { description: \"Удержание брони в секундах; int32/null, null снимает настройку.\" },\n maxConsumerQuantity: { description: \"Максимальная вместимость; int32/null, ноль сохраняется.\" },\n bookingConsumerQuantity: {\n description:\n \"Места, зарезервированные вручную; int32/null. Вычитаются из вместимости отдельно от фактического consumersCount.\",\n },\n executorUsagePercent: { description: \"Загрузка исполнителя, процентов; конечное число/null.\" },\n availableResources: {\n description:\n \"OpenAPI AvailableResources: Unknown/Free/Booked/Busy; Unknown — wire sentinel отсутствия, null запрещён.\",\n },\n needApproval: { description: \"Необходимость одобрения; boolean/null, false сохраняется.\" },\n createSingleCases: { description: \"Генерация одиночных событий; boolean/null. Пропущенное расписание не очищается.\" },\n checkinPermission: {\n description: \"Правила регистрации целиком; null снимает правила.\",\n valueSchema: \"CheckinPermission\",\n },\n hidden: { description: \"Скрытие события; boolean/null, false сохраняется.\" },\n appendixList: { description: \"Приложения целиком; []/null очищают список.\", valueSchema: \"Appendix[]\" },\n participateFieldRequirements: {\n description: \"Требования к данным участника целиком; null снимает требования.\",\n valueSchema: \"ParticipateFieldRequirements\",\n },\n resourceGroupList: {\n description: \"Группы ресурсов целиком; []/null очищают список, SDK не выполняет бронирование.\",\n valueSchema: \"ResourceGroup[]\",\n },\n priority: { description: \"Приоритет; конечное число/null, ноль сохраняется.\" },\n clientGroupId: {\n description: \"Непустой ID группы клиентов; null снимает ссылку, известный SDK type code не требуется.\",\n },\n caseActionList: {\n description:\n \"Автоматизации целиком; []/null очищают. SDK заполняет только отсутствующий rid; согласованную конфигурацию выбранного типа задаёт приложение. Одного {type: RequestFeedback} недостаточно по live-проверке. Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться. См. src/resources/cases/README.md и examples/node/item-cases/cases-patch.ts. Выполнение и серверная очередь остаются серверу.\",\n valueSchema: \"CaseAction[]\",\n },\n loyaltyTransactionPropertiesList: {\n description: \"Правила лояльности целиком; []/null очищают.\",\n valueSchema: \"LoyaltyTransactionProperties[]\",\n },\n priceInfo: {\n description: \"Ценовые settings заменяются целиком; null снимает всю ценовую область.\",\n valueSchema: \"ItemPricePatchInfo\",\n },\n} satisfies Record<keyof CaseItemPatch, ItemFieldDoc>;\n\n/** Новый SDK patch не заменяет существующий patchCase POST /{id}/patch. */\nexport const casesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/cases/{id}; Full/UpdateItem/version обязательны, 29 разрешённых полей конфигурации. No-op без PUT, без retry/readback. Состояние, service/group linkage, orderNumber, участие и бронь — отдельные операции.\",\n valueSchema:\n \"(itemId: string, fields: CaseItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<CaseItem>\",\n },\n} satisfies Record<Extract<keyof CasesFacade, \"patch\">, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport type {\n ItemPricePatchFields,\n ItemPricePatchInfo,\n ItemPricePatchProperties,\n ItemPricePatchSetting,\n} from \"../resources/common/item-price-patch-types.js\";\n\n/** Денежные поля передаются серверу без расчётов SDK; provider properties API не сохраняет. */\nexport const itemPricePatchPropertiesFieldDocEntries = {\n priceWithoutDiscount: { description: \"Исходная цена; nullable wire number.\" },\n discount: { description: \"Скидка; nullable wire number, SDK не вычисляет итог.\" },\n salePrice: { description: \"Продажная цена; nullable wire number.\" },\n currencyCode: { description: \"Код валюты по API; nullable string.\" },\n prepayment: { description: \"Предоплата; nullable wire number.\" },\n expences: { description: \"Расходы; nullable wire number, wire-написание expences сохраняется.\" },\n takePrice: { description: \"Выручка; nullable wire number.\" },\n taxRate: { description: \"Ставка налога; nullable wire number.\" },\n taxAmount: { description: \"Сумма налога; nullable wire number, SDK не вычисляет.\" },\n} satisfies Record<keyof ItemPricePatchProperties, ItemFieldDoc>;\n/** Полная ценовая запись; Date внутри schedule остаются Date публичного SDK. */\nexport const itemPricePatchSettingFieldDocEntries = {\n priceProperties: {\n description: \"Обязательная цена записи; чтобы удалить цену, исключите всю запись из settings.\",\n valueSchema: \"ItemPricePatchProperties\",\n },\n schedule: {\n description:\n \"Собственное расписание этой цены, полная замена; null/отсутствие снимает структуру. Для диапазонов без rid SDK создаёт 24-hex значение.\",\n valueSchema: \"Schedule\",\n },\n} satisfies Record<keyof ItemPricePatchSetting, ItemFieldDoc>;\n/** Основное представление всей области цен. */\nexport const itemPricePatchInfoFieldDocEntries = {\n settings: {\n description:\n \"Упорядоченный массив ценовых записей; [] запрашивает очистку. Service.patch нормализует [] в priceInfo:null для полного удаления цены. Непустой список заменяется целиком; сохраните расписания и RID оставшихся записей. Каждая запись содержит цену.\",\n valueSchema: \"ItemPricePatchSetting[]\",\n },\n} satisfies Record<keyof ItemPricePatchInfo, ItemFieldDoc>;\n/** Полная замена области цены. */\nexport const itemPricePatchFieldsFieldDocEntries = {\n priceInfo: {\n description:\n \"Полная замена всех settings; пропуск сохраняет цены, null снимает всю ценовую область. Service.patch также принимает settings:[] как полную очистку, отправляет priceInfo:null и исключает старый root alias из ценового PUT. Отдельная цена удаляется передачей списка остальных настроек с их расписаниями и RID. ACK не заменяет независимый GET при проверке сохранения.\",\n valueSchema: \"ItemPricePatchInfo\",\n },\n} satisfies Record<keyof ItemPricePatchFields, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport type { ServiceItemPatch } from \"../resources/services/types.js\";\nimport { serviceItemFieldDocEntries } from \"./service-item.js\";\nimport { itemPricePatchFieldsFieldDocEntries } from \"./item-price-patch-field-docs.js\";\n\n/** Все подтверждённые root-writable поля Service.patch; остальные аспекты имеют отдельные операции. */\nexport const serviceItemPatchFieldDocEntries = {\n name: serviceItemFieldDocEntries.name,\n image: { description: \"Только {id} файла либо null; пропуск сохраняет image. URL/eTag/fileSize не принимаются.\" },\n description: serviceItemFieldDocEntries.description,\n placeId: serviceItemFieldDocEntries.placeId,\n place: serviceItemFieldDocEntries.place,\n schedule: serviceItemFieldDocEntries.schedule,\n bookingDuration: serviceItemFieldDocEntries.bookingDuration,\n timetableView: serviceItemFieldDocEntries.timetableView,\n registrationClose: serviceItemFieldDocEntries.registrationClose,\n registrationOpen: serviceItemFieldDocEntries.registrationOpen,\n maxConsumerQuantity: serviceItemFieldDocEntries.maxConsumerQuantity,\n executorIdList: serviceItemFieldDocEntries.executorIdList,\n needApproval: serviceItemFieldDocEntries.needApproval,\n timeAlignment: serviceItemFieldDocEntries.timeAlignment,\n orderQuote: serviceItemFieldDocEntries.orderQuote,\n marginTime: serviceItemFieldDocEntries.marginTime,\n executorUsagePercent: serviceItemFieldDocEntries.executorUsagePercent,\n firstWeekDate: serviceItemFieldDocEntries.firstWeekDate,\n clientGroupId: serviceItemFieldDocEntries.clientGroupId,\n resourceGroupList: serviceItemFieldDocEntries.resourceGroupList,\n participateFieldRequirements: serviceItemFieldDocEntries.participateFieldRequirements,\n appendixList: serviceItemFieldDocEntries.appendixList,\n sessionDurationProperties: serviceItemFieldDocEntries.sessionDurationProperties,\n checkInAllCases: serviceItemFieldDocEntries.checkInAllCases,\n stepDescriptionList: serviceItemFieldDocEntries.stepDescriptionList,\n buttonName: serviceItemFieldDocEntries.buttonName,\n checkinPermission: serviceItemFieldDocEntries.checkinPermission,\n caseActionList: serviceItemFieldDocEntries.caseActionList,\n loyaltyTransactionPropertiesList: serviceItemFieldDocEntries.loyaltyTransactionPropertiesList,\n ...itemPricePatchFieldsFieldDocEntries,\n} satisfies Record<keyof ServiceItemPatch, ItemFieldDoc>;\n","import type { NotesFacade } from \"../resources/notes/NotesFacade.js\";\nimport type { NoteItemPatch } from \"../resources/notes/types.js\";\nimport type { CalendarsFacade } from \"../resources/calendars/CalendarsFacade.js\";\nimport type {\n CalendarItemPatch,\n CalendarItemPatchScheduleRangeExceptions,\n CalendarItemPatchTimeRange,\n} from \"../resources/calendars/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Подтверждённые поля частичной записи заметки; загруженные файлы представлены только ссылками. */\nexport const noteItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла; null снимает, пропуск сохраняет.\" },\n noteType: {\n description:\n \"Только Html, Markdown или Text; другой ввод отклоняется до первого GET. Прочитанный Text становится рабочим форматом записи.\",\n valueSchema: \"NoteType\",\n },\n data: {\n description:\n \"Точная строка; пустая строка очищает, пропуск сохраняет wire string/null/missing. Явные null/undefined отклоняются до GET. Пустая строка при raw null/missing требует CAS PUT; при raw пустой строке возможен no-op. Без trim, ISO revival и разбора JSON/HTML; хранение backend проверяется отдельно.\",\n valueSchema: \"string\",\n },\n files: {\n description:\n \"Полная замена ссылок {id}[] на уже загруженные файлы; [] снимает вложения. Отсоединённые файлы сервер может удалить.\",\n },\n imagePreviewSize: {\n description: \"Размер превью; Undefined очищает настройку, create default Small не применяется.\",\n valueSchema: \"ImagePreviewSize\",\n },\n} satisfies Record<keyof NoteItemPatch, ItemFieldDoc>;\n\n/** Подтверждённые поля частичной записи календаря. */\nexport const calendarItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; ISO-подобная строка остаётся текстом.\" },\n image: { description: \"Только {id} загруженного файла; null снимает, пропуск сохраняет.\" },\n description: { description: \"Строка либо null; null/empty очищает содержимое, сервер может нормализовать ACK.\" },\n calendarViewIndex: { description: \"Int32|null; 0 записывается, но сервер может вернуть null; null очищает.\" },\n scheduleRangeExceptions: {\n description:\n \"Замена всей структуры; null снимает, {} очищает списки. Пропущенные вложенные списки не объединяются со старыми.\",\n valueSchema: \"CalendarItemPatchScheduleRangeExceptions | null\",\n },\n} satisfies Record<keyof CalendarItemPatch, ItemFieldDoc>;\n\n/** Два заменяемых списка исключений; это не изменение Case и не чтение timetable. */\nexport const calendarItemPatchScheduleRangeExceptionsFieldDocEntries = {\n replacedTimeRanges: {\n description: \"Полный список заменённых интервалов; []/null/пропуск очищает список внутри новой структуры.\",\n valueSchema: \"CalendarItemPatchTimeRange[] | null\",\n },\n excludedTimeRanges: {\n description: \"Полный список исключённых интервалов; []/null/пропуск очищает список внутри новой структуры.\",\n valueSchema: \"CalendarItemPatchTimeRange[] | null\",\n },\n} satisfies Record<keyof CalendarItemPatchScheduleRangeExceptions, ItemFieldDoc>;\n\n/** Интервал требует Date; отсутствующий rid создаётся SDK, бизнес-валидность времени остаётся серверу. */\nexport const calendarItemPatchTimeRangeFieldDocEntries = {\n rid: {\n description:\n \"24 hex идентификатор; отсутствующий/null/пустой создаётся SDK, существующий валидный сохраняется. Для стабильного повтора заранее используйте generateRid().\",\n },\n begin: { description: \"Начало интервала Date SDK; сериализуется в UTC ISO, из ответа восстанавливается по схеме.\" },\n end: { description: \"Конец интервала Date SDK; порядок относительно начала проверяет сервер.\" },\n name: { description: \"Необязательная подпись string|null; сервер может нормализовать пустую подпись.\" },\n} satisfies Record<keyof CalendarItemPatchTimeRange, ItemFieldDoc>;\n\n/** Предметный метод заметки с точным исходным текстом и проверенным CAS. */\nexport const notesPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/notes/{id}; Full/UpdateItem/item version обязательны; нормализованный Text сохраняется без восстановления исходного серверного формата. No-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: NoteItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<NoteItem>\",\n },\n} satisfies Record<Extract<keyof NotesFacade, \"patch\">, ItemFieldDoc>;\n\n/** Предметный метод календаря, не вызывающий timetable/membership операции. */\nexport const calendarsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/calendars/{id}; Full/UpdateItem/item version обязательны, вложенные исключения заменяются целиком. No-op, без retry/readback.\",\n valueSchema:\n \"(itemId: string, fields: CalendarItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<CalendarItem>\",\n },\n} satisfies Record<Extract<keyof CalendarsFacade, \"patch\">, ItemFieldDoc>;\n","import type {\n LoyaltySystemItemPatch,\n LoyaltySystemInitialSubscriptionPatch,\n} from \"../resources/loyalty-systems/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Подтверждённые настройки root программы; финансовые действия не входят в patch. */\nexport const loyaltySystemItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim; пропуск сохраняет.\" },\n image: { description: \"Только {id} загруженного файла либо null для очистки.\" },\n description: { description: \"Описание; строка/null, пустая строка допустима.\" },\n businessCardId: { description: \"Непустой ID визитки; null снимает связь.\" },\n loyaltyCardIssueType: { description: \"Правило будущего выпуска, wire enum кроме Unknown.\" },\n loyaltyCardAnyoneAccess: {\n description: \"Доступ будущих карт, wire AnyoneAccess кроме Unknown; не publicity самого item.\",\n },\n loyaltyCardUpdateKeyInformation: { description: \"Политика ключевых сведений карт; enum без Unknown/null.\" },\n loyaltyCardUpdateNonKeyInformation: { description: \"Политика неключевых сведений карт; enum без Unknown/null.\" },\n loyaltyCardUsagePeriod: { description: \"Срок будущих карт в днях, int32/null; 0 сохраняется.\" },\n startDate: { description: \"Начало программы, Date/null.\" },\n expiredDate: { description: \"Окончание программы, Date/null.\" },\n contactInformationFieldsRequirements: {\n description: \"Полная замена требований к контакту будущего выпуска; null очищает.\",\n },\n referralProgramIds: { description: \"Полная замена списка ID программ; [] очищает.\" },\n beginTransactionValues: {\n description: \"Полная замена начальных значений будущего выпуска; [] очищает; существующий баланс не меняется.\",\n },\n initialSubscription: {\n description: \"Полная замена конфигурации будущего стартового абонемента либо null; image только {id}/null.\",\n },\n accountingProductNames: { description: \"Полная замена имён учётных продуктов; [] очищает.\" },\n} satisfies Record<keyof LoyaltySystemItemPatch, ItemFieldDoc>;\n\n/** Стартовый абонемент будущего выпуска, заменяемый целиком. */\nexport const loyaltySystemInitialSubscriptionPatchFieldDocEntries = {\n name: { description: \"Название стартового абонемента; пропуск не наследует название прежнего объекта.\" },\n usagePeriod: { description: \"Срок будущего стартового абонемента в днях, int32/null.\" },\n transactionValues: {\n description:\n \"Полная конфигурация начальных значений будущего абонемента, не финансовая транзакция существующей карты.\",\n },\n image: { description: \"Только {id} загруженного файла либо null; URL/серверные атрибуты не записываются.\" },\n} satisfies Record<keyof LoyaltySystemInitialSubscriptionPatch, ItemFieldDoc>;\n","import type { ContactsFacade } from \"../resources/contacts/ContactsFacade.js\";\nimport type { ContactItemPatch, ContactCommunicationPatch } from \"../resources/contacts/types.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\n\n/** Все редактируемые обычные поля контакта; профильные и социальные операции выполняются отдельно. */\nexport const contactItemPatchFieldDocEntries = {\n name: { description: \"Непустое название без trim/Unicode-нормализации; пропуск сохраняет.\" },\n image: {\n description: \"Только {id} загруженного файла; null снимает изображение; FileInfo URL/metadata не принимаются.\",\n },\n firstName: { description: \"Имя; строка/null, null/empty очищают без trim.\" },\n lastName: { description: \"Фамилия; строка/null, null/empty очищают.\" },\n middleName: { description: \"Отчество; строка/null, null/empty очищают.\" },\n company: { description: \"Компания; строка/null, null/empty очищают.\" },\n position: { description: \"Должность; строка/null, null/empty очищают.\" },\n description: { description: \"Описание с точным сохранением текста; null/empty очищают.\" },\n birthday: { description: \"Дата рождения Date; null удаляет дату.\" },\n gender: {\n description: \"OpenAPI Gender; UnknownGender явно обозначает неизвестный пол, null запрещён.\",\n valueSchema: \"Gender\",\n },\n addresses: {\n description:\n \"Полная замена адресов; []/null очищают. Без rid SDK создаёт 24 hex; переданный rid сохраняется/проверяется.\",\n valueSchema: \"Address[]\",\n },\n communications: {\n description:\n \"Полная замена каналов; []/null очищают. Серверные checkDate/valueForSearch запрещены на входе; без checkState SDK ставит Unchecked.\",\n valueSchema: \"ContactCommunicationPatch[]\",\n },\n dates: {\n description: \"Полная замена памятных дат с Date; []/null очищают. Rid сохраняется либо создаётся SDK.\",\n valueSchema: \"MemorableDate[]\",\n },\n photos: { description: \"Полная замена массива ссылок {id}; []/null очищают. URL/metadata файла не записываются.\" },\n visitCard: {\n description:\n \"Замена визитки с нормализацией трёх слотов; недостающие номера заполняются, дубли — последняя запись. Пустые fields создают default, для очистки передать три пустых value. Пропуск не пересчитывает визитку.\",\n valueSchema: \"ContactVisitCard\",\n },\n} satisfies Record<keyof ContactItemPatch, ItemFieldDoc>;\n\n/** Пользовательские атрибуты канала связи, без серверных сведений проверки/поиска. */\nexport const contactCommunicationPatchFieldDocEntries = {\n rid: { description: \"24 hex существующего канала; отсутствие/null/пустая строка создаёт новый rid.\" },\n name: { description: \"Пользовательская подпись канала; строка/null.\" },\n type: {\n description:\n \"Тип канала по OpenAPI, например Email/Phone; смена не переносит доказательство проверки старого канала.\",\n valueSchema: \"CommunicationType\",\n },\n value: {\n description: \"Пользовательское значение канала; сервер проверяет допустимость и нормализует поисковое значение.\",\n },\n order: { description: \"Целый порядок отображения канала; ноль сохраняется.\" },\n checkState: {\n description:\n \"Запрашиваемое состояние; отсутствие означает Unchecked. Подтверждение Checked проверяет сервер, patch не отправляет код автоматически.\",\n },\n} satisfies Record<keyof ContactCommunicationPatch, ItemFieldDoc>;\n\n/** Единственный item patch обычных полей, включая существующий профильный Contact. */\nexport const contactsPatchSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"GET → максимум один CAS PUT /api/v1/contacts/{id}; Full/UpdateItem/version обязательны. 15 полей ContactItemPatch, вложенные значения заменяются целиком, no-op без PUT, без retry/readback. Профиль редактируется тем же Contact ID; profileProperties/contactProperties — отдельными методами.\",\n valueSchema:\n \"(itemId: string, fields: ContactItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<ContactItem>\",\n },\n} satisfies Record<Extract<keyof ContactsFacade, \"patch\">, ItemFieldDoc>;\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const generateSecurityTokenReqFieldDocEntries = {\n forUser: {\n description: \"Токен ограничен текущим пользователем/профилем.\",\n valueSchema: \"boolean | null\",\n },\n expiresAt: {\n description: \"Срок действия security-token.\",\n valueSchema: \"date-time string | null\",\n },\n operationTypeList: {\n description: \"Список разрешённых операций для токена.\",\n valueSchema: \"OperationType[] | null\",\n },\n participantType: {\n description: \"Минимальная роль участия при использовании токена.\",\n valueSchema: \"ParticipantType\",\n },\n participantState: {\n description: \"Ожидаемое состояние участия для доступа по токену.\",\n valueSchema: \"ParticipantState\",\n },\n roleIdList: {\n description: \"Ограничение по role id (контракт API).\",\n valueSchema: \"int32[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenReqFieldDocs = mapFieldDocsToStrings(generateSecurityTokenReqFieldDocEntries);\n\nexport const generateSecurityTokenRespFieldDocEntries = {\n token: {\n description: \"Сгенерированный security-token для guest/limited access.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const generateSecurityTokenRespFieldDocs = mapFieldDocsToStrings(generateSecurityTokenRespFieldDocEntries);\n\nexport const shareItemReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль-инициатор шаринга (если отличается от контекста токена).\",\n valueSchema: \"string | null\",\n },\n readerProfileIdList: {\n description:\n \"Список профилей-получателей (основное поле API). Каждый id должен уже быть в личном списке владельца, иначе `failedToParticipate` → `CONTACT_IS_NOT_IN_PERSONAL_LIST`.\",\n valueSchema: \"string[] | null\",\n },\n readerProfileIdsList: {\n description: \"Легаси-алиас списка получателей (встречается в старых контрактах).\",\n valueSchema: \"string[] | null\",\n },\n participantType: {\n description: \"Тип доступа, который выдают получателям.\",\n valueSchema: \"ParticipantType\",\n },\n userMessage: {\n description: \"Комментарий/сообщение получателю при шаринге.\",\n valueSchema: \"string | null\",\n },\n versionToCheck: {\n description: \"Версия объекта для optimistic lock.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Флаг генерации анонса после share.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const shareItemReqFieldDocs = mapFieldDocsToStrings(shareItemReqFieldDocEntries);\n\nexport const sendLinkOfItemReqFieldDocEntries = {\n profileId: {\n description: \"Профиль-инициатор отправки ссылки.\",\n valueSchema: \"string | null\",\n },\n recipientProfileIdList: {\n description: \"Список профилей-получателей ссылки.\",\n valueSchema: \"string[] | null\",\n },\n message: {\n description: \"Сопроводительное сообщение к ссылке.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemReqFieldDocs = mapFieldDocsToStrings(sendLinkOfItemReqFieldDocEntries);\n\nexport const getShareItemSessionReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль инициатора invite-session ссылки.\",\n valueSchema: \"string | null\",\n },\n expiredDate: {\n description: \"Срок действия session URL.\",\n valueSchema: \"Date\",\n },\n activateCount: {\n description: \"Сколько раз можно активировать session.\",\n valueSchema: \"number\",\n },\n code: {\n description: \"Опциональный код активации.\",\n valueSchema: \"string | null\",\n },\n userMessage: {\n description: \"Сообщение к invite-session.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const getShareItemSessionReqFieldDocs = mapFieldDocsToStrings(getShareItemSessionReqFieldDocEntries);\n\nexport const sendLinkOfItemRespFieldDocEntries = {\n isSuccess: {\n description: \"Итог отправки ссылки.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const sendLinkOfItemRespFieldDocs = mapFieldDocsToStrings(sendLinkOfItemRespFieldDocEntries);\n\nexport const participationFieldDocEntries = {\n meta: {\n description: \"Мета участия (`version`, даты, системные атрибуты).\",\n valueSchema: \"ObjectInfo\",\n },\n profileId: {\n description: \"Профиль участника, для которого действует участие.\",\n valueSchema: \"string | null\",\n },\n participantState: {\n description: \"Состояние участия (`Requested`, `Approved`, ...).\",\n valueSchema: \"ParticipantState\",\n },\n participantType: {\n description: \"Роль участия (`Reader`, `Editor`, `Owner`, ...).\",\n valueSchema: \"ParticipantType\",\n },\n notificationWayList: {\n description: \"Каналы уведомлений участника по объекту.\",\n valueSchema: \"NotificationWay[] | null\",\n },\n subscriptionList: {\n description: \"Подписки/настройки подписок участника.\",\n valueSchema: \"Subscription[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationFieldDocs = mapFieldDocsToStrings(participationFieldDocEntries);\n\nexport const profileWithErrorFieldDocEntries = {\n profile: {\n description: \"ID профиля, по которому операция завершилась с ошибкой.\",\n valueSchema: \"string | null\",\n },\n torrowErrorClient: {\n description: \"Структура ошибки API для этого профиля.\",\n valueSchema: \"TorrowErrorClient\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileWithErrorFieldDocs = mapFieldDocsToStrings(profileWithErrorFieldDocEntries);\n\nexport const participationRespFieldDocEntries = {\n participationList: {\n description: \"Список успешных participation-изменений.\",\n valueSchema: \"Participation[] | null\",\n },\n failedToParticipate: {\n description: \"Профили, по которым операция не выполнена, с ошибками.\",\n valueSchema: \"ProfileWithError[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const participationRespFieldDocs = mapFieldDocsToStrings(participationRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const accountingTransactionFieldDocEntries = {\n accountId: { description: \"Счёт/баланс, к которому относится транзакция.\", valueSchema: \"string | null\" },\n transactionDate: { description: \"Дата проводки транзакции.\", valueSchema: \"date-time string\" },\n state: {\n description: \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n valueSchema: \"AccountingTransactionState\",\n },\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: {\n description: \"Срок действия транзакции/резерва, если применимо.\",\n valueSchema: \"date-time string | null\",\n },\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: {\n description: \"Пользовательское сообщение (если передавалось в операции).\",\n valueSchema: \"string | null\",\n },\n text: { description: \"Системный/локализованный текст события.\", valueSchema: \"string | null\" },\n userProfileView: { description: \"Профиль пользователя, инициировавшего действие.\", valueSchema: \"ContactView\" },\n correspondentProfileViewList: {\n description: \"Профили корреспондентов/получателей события.\",\n valueSchema: \"ContactView[] | null\",\n },\n itemContactView: {\n description: \"Снимок контакта, к которому относится событие (если применимо).\",\n valueSchema: \"ContactView\",\n },\n itemContextView: {\n description: \"Снимок контекста, к которому относится событие (если применимо).\",\n valueSchema: \"ContextView\",\n },\n itemNoteView: {\n description: \"Снимок заметки, к которой относится событие (если применимо).\",\n valueSchema: \"NoteView\",\n },\n itemCaseView: {\n description: \"Снимок события/кейса, к которому относится запись (если применимо).\",\n valueSchema: \"CaseView\",\n },\n itemCalendarView: {\n description: \"Снимок календаря, к которому относится событие (если применимо).\",\n valueSchema: \"CalendarView\",\n },\n itemServiceView: {\n description: \"Снимок услуги, к которой относится событие (если применимо).\",\n valueSchema: \"ServiceView\",\n },\n itemResourceView: {\n description: \"Снимок ресурса, к которому относится событие (если применимо).\",\n valueSchema: \"ResourceView\",\n },\n itemLoyaltyCardView: {\n description: \"Снимок карты лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltyCardView\",\n },\n itemLoyaltySystemView: {\n description: \"Снимок программы лояльности, к которой относится событие (если применимо).\",\n valueSchema: \"LoyaltySystemView\",\n },\n id: { description: \"ID записи action-history.\", valueSchema: \"string | null\" },\n meta: { description: \"Метаобъект записи.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryInfoFieldDocs = mapFieldDocsToStrings(actionHistoryInfoFieldDocEntries);\n\n/** Query `GET /api/v1/actionhistory` (`ActionHistoryListQuery` / OpenAPI). */\nexport const actionHistoryListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста событий (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description:\n \"Нижняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description:\n \"Верхняя граница фильтра по времени изменения записи истории. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать записи по удалённым объектам. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка.\",\n valueSchema: \"ItemViewSortCondition\",\n },\n types: {\n description: \"Фильтр по типам действий (`CreateItem`, `UpdateItem`, …).\",\n valueSchema: \"ActionHistoryType[]\",\n },\n states: {\n description: \"Фильтр по состоянию записи (`Executing`, `Success`, …).\",\n valueSchema: \"ActionHistoryState[]\",\n },\n itemIds: {\n description:\n \"Фильтр по id элементов. Опционален: без параметра / `[]` — лента действий пользователя; непустой список — история по выбранным item (нужны существующие id с доступом). Невалидный id на шлюзе может дать HTTP 500.\",\n valueSchema: \"string[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const actionHistoryListQueryFieldDocs = mapFieldDocsToStrings(actionHistoryListQueryFieldDocEntries);\n\n/** Query `GET /api/v1/announcements` (`AnnouncementsListQuery` / OpenAPI). */\nexport const announcementsListQueryFieldDocEntries = {\n language: {\n description:\n \"Язык локализации текста уведомлений (BCP-47, напр. `ru`, `en`). В OpenAPI не `required`, но на шлюзе **фактически обязателен**: пустой/отсутствующий → HTTP 500 `INVALID_ARGUMENT` (`Language is null or empty`).\",\n valueSchema: \"string\",\n examples: [\"ru\", \"en\"],\n },\n state: {\n description:\n \"Один фильтр по состоянию (`New`, `Hidden`, `Read`, …). Если задан — имеет приоритет над **`stateList`**. Без **`state`** и **`stateList`** шлюз отдаёт **пустой** список (не ошибку).\",\n valueSchema: \"AnnouncementState\",\n examples: [\"New\", \"Hidden\"],\n },\n stateList: {\n description:\n \"Фильтр по нескольким состояниям. В приложении лента грузит **`New`** (новые) и **`Hidden`** (обработанные) отдельными запросами. Без **`state`** и **`stateList`** ответ пустой.\",\n valueSchema: \"AnnouncementState[]\",\n examples: ['[\"New\", \"Hidden\"]'],\n },\n take: {\n description: \"Максимум записей в ответе (пагинация). Default в OpenAPI — `2147483647`.\",\n valueSchema: \"int32\",\n },\n skip: {\n description: \"Смещение пагинации. Default в OpenAPI — `0`.\",\n valueSchema: \"int32\",\n },\n lmfrom: {\n description: \"Нижняя граница фильтра по времени изменения. Имя query **lower-case** (`lmfrom`, не `lmFrom`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n lmto: {\n description: \"Верхняя граница фильтра по времени изменения. Имя query **lower-case** (`lmto`, не `lmTo`).\",\n valueSchema: \"Date | null (date-time)\",\n },\n includeDeleted: {\n description: \"Включать удалённые уведомления. Default в OpenAPI — `false`.\",\n valueSchema: \"boolean\",\n },\n sort: {\n description: \"Условие сортировки списка (в приложении часто `LastModifiedDesc`).\",\n valueSchema: \"ItemViewSortCondition\",\n examples: [\"LastModifiedDesc\"],\n },\n profileId: {\n description: \"Опциональный фильтр по профилю-получателю уведомления.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const announcementsListQueryFieldDocs = mapFieldDocsToStrings(announcementsListQueryFieldDocEntries);\n\nexport const announcementInfoFieldDocEntries = {\n type: { description: \"Тип анонса (share, grant access, create order, ...).\", valueSchema: \"AnnouncementType\" },\n state: { description: \"Состояние анонса (`New`, `Read`, `Hidden`).\", valueSchema: \"AnnouncementState\" },\n category: {\n description: \"Категория визуализации (`Action`, `Alert`, `Reminder`, ...).\",\n valueSchema: \"AnnouncementCategory\",\n },\n priority: { description: \"Приоритет показа (`Low`, `Normal`, `High`).\", valueSchema: \"AnnouncementPriority\" },\n senderProfileView: { description: \"Профиль отправителя анонса.\", valueSchema: \"ContactView\" },\n recipientProfileView: { description: \"Профиль получателя анонса.\", valueSchema: \"ContactView\" },\n userMessage: {\n description: \"Сообщение пользователя (если источник события его содержал).\",\n valueSchema: \"string | null\",\n },\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: {\n description: \"Экспортированные представления (views) для элементов графа.\",\n valueSchema: \"ItemView[] | null\",\n },\n timetableCases: {\n description: \"Связанные записи расписания/кейсы, попавшие в экспорт.\",\n valueSchema: \"TimetableCase[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const exportGraphFieldDocs = mapFieldDocsToStrings(exportGraphFieldDocEntries);\n\nexport const importByFileRequestFieldDocEntries = {\n exportGraph: { description: \"Граф, ранее полученный через export API.\", valueSchema: \"ExportGraph\" },\n parentId: { description: \"Куда импортировать корень графа.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль-владелец для импортируемых объектов.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импортировать только дочерние узлы графа без корня.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не дублировать root, если уже существует.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByFileRequestFieldDocs = mapFieldDocsToStrings(importByFileRequestFieldDocEntries);\n\nexport const importByUniqueNameRequestFieldDocEntries = {\n uniqueName: { description: \"Уникальное имя экспортированного набора/корня.\", valueSchema: \"string | null\" },\n depth: { description: \"Глубина импортируемого подграфа.\", valueSchema: \"int32 | null\" },\n parentId: { description: \"Родитель, куда включают импортированный граф.\", valueSchema: \"string | null\" },\n profileId: { description: \"Профиль контекста импорта.\", valueSchema: \"string | null\" },\n withoutRoot: { description: \"Импорт без корневого узла.\", valueSchema: \"boolean | null\" },\n notDuplicateRoot: { description: \"Не создавать дубль root при совпадении.\", valueSchema: \"boolean | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const importByUniqueNameRequestFieldDocs = mapFieldDocsToStrings(importByUniqueNameRequestFieldDocEntries);\n\nexport const generateReportReqFieldDocEntries = {\n options: { description: \"Опции доставки/локали отчёта.\", valueSchema: \"ReportOptions\" },\n properties: { description: \"Параметры формирования отчёта (контракт API).\", valueSchema: \"ReportProperties\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportReqFieldDocs = mapFieldDocsToStrings(generateReportReqFieldDocEntries);\n\nexport const reportPropertiesFieldDocEntries = {\n discriminator: {\n description:\n \"Subtype отчёта (NJsonSchema inheritance). Swagger описывает только базу; runtime требует одно из: `CaseReportProperties`, `ServiceReportProperties`, `ServicesResourcesReportProperties`, `ResourcesRentReportProperties`, `ResourceReportProperties`. Пустой `{}` → HTTP 500.\",\n valueSchema: \"string\",\n examples: [\"CaseReportProperties\", \"ServiceReportProperties\"],\n },\n fakeForTsGeneratorDoNotRemove: {\n description:\n \"Техническое поле OpenAPI для генератора типов. В бизнес-логике отчётов не используется и обычно не передаётся.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportPropertiesFieldDocs = mapFieldDocsToStrings(reportPropertiesFieldDocEntries);\n\nexport const reportOptionsFieldDocEntries = {\n reportDeliveryType: { description: \"Способ доставки отчёта: `Link` или `Email`.\", valueSchema: \"ReportDeliveryType\" },\n reportDeliveryAddresses: {\n description: \"Email-адреса получателей, если доставка через Email.\",\n valueSchema: \"string[] | null\",\n },\n language: { description: \"Язык отчёта (обычно BCP-47, напр. `ru`, `en`).\", valueSchema: \"string\" },\n timeZone: {\n description: \"Таймзона для дат отчёта (в приложении используется локальная IANA зона пользователя).\",\n valueSchema: \"string\",\n examples: [\"Europe/Moscow\", \"UTC\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const reportOptionsFieldDocs = mapFieldDocsToStrings(reportOptionsFieldDocEntries);\n\nexport const generateReportRespFieldDocEntries = {\n reportLink: { description: \"Ссылка на готовый отчёт.\", valueSchema: \"string | null\" },\n expirationTime: { description: \"Срок действия ссылки на отчёт.\", valueSchema: \"date-time string | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const generateReportRespFieldDocs = mapFieldDocsToStrings(generateReportRespFieldDocEntries);\n\nexport const loyaltyCardSubscriptionFieldDocEntries = {\n subscriptionId: { description: \"ID подписки карты лояльности.\", valueSchema: \"string | null\" },\n name: { description: \"Название подписки (тариф/пакет).\", valueSchema: \"string | null\" },\n state: { description: \"Состояние подписки (int-код API).\", valueSchema: \"int32\" },\n createDate: { description: \"Дата создания подписки.\", valueSchema: \"date-time string | null\" },\n beginDate: { description: \"Дата начала действия подписки.\", valueSchema: \"date-time string | null\" },\n endDate: { description: \"Дата окончания действия подписки.\", valueSchema: \"date-time string | null\" },\n caseParticipantId: {\n description: \"ID участника кейса, на основе которого создана подписка.\",\n valueSchema: \"string | null\",\n },\n image: { description: \"Изображение/иконка подписки.\", valueSchema: \"FileInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltyCardSubscriptionFieldDocs = mapFieldDocsToStrings(loyaltyCardSubscriptionFieldDocEntries);\n\n/** Тело `POST .../loyaltysystems/{id}/loyaltycard` — **`CreateLoyaltyCardReq`**. */\nexport const createLoyaltyCardReqFieldDocEntries = {\n profileId: {\n description: \"Профиль владельца выпускаемой карты (обязателен).\",\n valueSchema: \"string\",\n usage: \"`client.loyaltySystems.createLoyaltyCard(systemId, { profileId, … })`.\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого создаются карта клиента и абонемент.\",\n valueSchema: \"string | null\",\n usage: \"Сценарий записи/оплаты → выпуск карты с привязкой к заказу; `null` — выпуск без элемента-основания.\",\n },\n contactInformation: {\n description: \"Контактные данные держателя карты при выпуске (если передаются отдельно от профиля).\",\n valueSchema: \"ContactInformation\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createLoyaltyCardReqFieldDocs = mapFieldDocsToStrings(createLoyaltyCardReqFieldDocEntries);\n\n/** Вложенный объект в **`CreateLoyaltyCardSubscriptionReq.initialTransaction`**. */\nexport const initialTransactionFieldDocEntries = {\n beginTransactionValues: {\n description: \"Начальные значения баланса/продуктов при создании абонемента.\",\n valueSchema: \"TransactionValue[]\",\n },\n state: {\n description: \"Состояние начальной транзакции (`Intended`, `Reserved`, `Commited`, …).\",\n valueSchema: \"AccountingTransactionState\",\n },\n basisItemId: {\n description:\n \"ID элемента (например, заказа / `CaseItem`), на основании которого созданы карта клиента и абонемент; связывается с начальной транзакцией подписки.\",\n valueSchema: \"string | null\",\n usage: \"Тот же смысл, что у **`CreateLoyaltyCardReq.basisItemId`**, в контексте `createSubscription`.\",\n },\n caseParticipantId: {\n description: \"ID участника кейса, связанного с начальной транзакцией (если применимо).\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const initialTransactionFieldDocs = mapFieldDocsToStrings(initialTransactionFieldDocEntries);\n\nexport const loyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemIdList: {\n description: \"Список программ лояльности, по которым считают агрегаты.\",\n valueSchema: \"string[]\",\n },\n name: { description: \"Имя набора статистики/среза (лейбл запроса).\", valueSchema: \"string\" },\n filterList: {\n description: \"Фильтры карт/подписок для статистики.\",\n valueSchema: \"LoyaltyCardFilterCondition[] | null\",\n },\n includeDeleted: { description: \"Включать удалённые объекты в расчёт.\", valueSchema: \"boolean | null\" },\n take: { description: \"Лимит элементов при расчёте.\", valueSchema: \"int32 | null\" },\n skip: { description: \"Смещение для пакетной обработки.\", valueSchema: \"int32 | null\" },\n lastModifiedFrom: { description: \"Нижняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n lastModifiedTo: { description: \"Верхняя граница по дате изменения.\", valueSchema: \"Date | null\" },\n createDateFrom: { description: \"Нижняя граница по дате создания.\", valueSchema: \"Date | null\" },\n createDateTo: { description: \"Верхняя граница по дате создания.\", valueSchema: \"Date | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsReqFieldDocEntries);\n\nexport const loyaltySystemsStatisticsRespFieldDocEntries = {\n name: { description: \"Имя среза статистики из запроса.\", valueSchema: \"string | null\" },\n count: { description: \"Рассчитанное количество элементов по срезу.\", valueSchema: \"int32 | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const loyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(loyaltySystemsStatisticsRespFieldDocEntries);\n\nexport const getLoyaltySystemsStatisticsReqFieldDocEntries = {\n loyaltySystemsStatisticsReqList: {\n description: \"Пакет запросов статистики по программам лояльности.\",\n valueSchema: \"LoyaltySystemsStatisticsReq[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsReqFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n);\n\nexport const getLoyaltySystemsStatisticsRespFieldDocEntries = {\n loyaltySystemsStatisticsRespList: {\n description: \"Пакет ответов статистики по каждому входному срезу.\",\n valueSchema: \"LoyaltySystemsStatisticsResp[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getLoyaltySystemsStatisticsRespFieldDocs = mapFieldDocsToStrings(\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n);\n\nexport const transactionInfoFieldDocEntries = {\n basisItem: {\n description: \"Базовый объект-основание транзакции (например кейс/карта/подписка).\",\n valueSchema: \"TorrowItem\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const transactionInfoFieldDocs = mapFieldDocsToStrings(transactionInfoFieldDocEntries);\n\nexport const torrowErrorClientFieldDocEntries = {\n code: { description: \"Код ошибки API.\", valueSchema: \"int32\" },\n name: { description: \"Системное имя ошибки.\", valueSchema: \"string | null\" },\n message: { description: \"Пользовательское сообщение ошибки.\", valueSchema: \"string | null\" },\n systemMessage: { description: \"Техническое сообщение сервера.\", valueSchema: \"string | null\" },\n innerError: { description: \"Вложенная причина ошибки.\", valueSchema: \"TorrowErrorClient\" },\n traceUrl: { description: \"URL трейса/диагностики (если включено на сервере).\", valueSchema: \"string | null\" },\n traceIdentifier: { description: \"Идентификатор трассировки для саппорта.\", valueSchema: \"string | null\" },\n parameters: { description: \"Параметры ошибки (ключ-значение).\", valueSchema: \"Record<string, string | null> | null\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const torrowErrorClientFieldDocs = mapFieldDocsToStrings(torrowErrorClientFieldDocEntries);\n\nexport const getParticipationCountRespFieldDocEntries = {\n count: { description: \"Количество участников по текущему фильтру.\", valueSchema: \"int32\" },\n isExactValue: {\n description: \"Точное ли это значение (`false` — сервер мог вернуть приближённую оценку).\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const getParticipationCountRespFieldDocs = mapFieldDocsToStrings(getParticipationCountRespFieldDocEntries);\n\nexport const fileInfoFieldDocEntries = {\n id: {\n description: \"ID файла в хранилище.\",\n valueSchema: \"string | null\",\n usage:\n \"В теле **create**/**update** item (`image`, `files[]`, …) достаточно только **`id`** — в БД сохраняется ссылка на файл. **`fileName`** / **`fileSize`** для puturl — query **`getImagePutUrl`** / **`getFilePutUrl`**, не обязательны в теле item.\",\n },\n url: {\n description: \"Текущий URL файла (может быть временным).\",\n valueSchema: \"string | null\",\n usage: \"Только в ответах (**getById**, **getFileInfo**, …); в write-тело не передаётся.\",\n },\n urlExpiration: {\n description: \"Срок действия `url`.\",\n valueSchema: \"date-time string | null\",\n usage: \"Только read; presigned download URL из ответа сервера.\",\n },\n eTag: { description: \"ETag файла для кеша/валидации.\", valueSchema: \"string | null\" },\n fileName: {\n description: \"Имя файла.\",\n valueSchema: \"string | null\",\n usage: \"Read и query puturl; в create/update item не обязателен (как в torrow-apps).\",\n },\n fileSize: {\n description: \"Размер файла в байтах.\",\n valueSchema: \"int64 | null\",\n usage: \"Read и query puturl; в create/update item не обязателен.\",\n },\n refreshUrl: {\n description: \"URL для обновления/рефреша ссылки.\",\n valueSchema: \"string | null\",\n usage: \"Только read; альтернатива явному **getFileInfo** / **getImageInfo** при протухшем `url`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const fileInfoFieldDocs = mapFieldDocsToStrings(fileInfoFieldDocEntries);\n\nexport const putUrlRespFieldDocEntries = {\n url: { description: \"Presigned URL для загрузки файла.\", valueSchema: \"string | null\" },\n urlExpiration: { description: \"Срок действия presigned URL.\", valueSchema: \"date-time string\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const putUrlRespFieldDocs = mapFieldDocsToStrings(putUrlRespFieldDocEntries);\n\nexport const updateFileIdRespFieldDocEntries = {\n fileInfo: { description: \"Актуальная информация о привязанном файле.\", valueSchema: \"FileInfo\" },\n meta: { description: \"Мета объекта после обновления file id.\", valueSchema: \"ObjectInfo\" },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateFileIdRespFieldDocs = mapFieldDocsToStrings(updateFileIdRespFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const blockReasonFieldDocEntries = {\n id: {\n description: \"Числовой идентификатор причины блокировки в справочнике.\",\n valueSchema: \"int32\",\n },\n defaultName: {\n description: \"Отображаемое имя по умолчанию (часто мультиязычное имя на стороне сервиса словарей).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок сортировки в списке причин.\",\n valueSchema: \"int32\",\n },\n isDeleted: {\n description: \"Мягкое удаление записи справочника.\",\n valueSchema: \"boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonFieldDocs = mapFieldDocsToStrings(blockReasonFieldDocEntries);\n\nexport const blockReasonsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/blockreason` — создать причину; ответ: id. Только **администратор Torrow**.\",\n },\n getById: {\n description: \"`GET /api/v1/blockreason/{id}` — одна причина, query `lng`. Только **администратор Torrow**.\",\n },\n listAll: {\n description:\n \"`GET /api/v1/blockreason/all` — список с пагинацией и сортировкой словаря. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n delete: {\n description: \"`DELETE /api/v1/blockreason/{id}`. Только **администратор Torrow**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const blockReasonsSdkMethodFieldDocs = mapFieldDocsToStrings(blockReasonsSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const apiKeyInfoFieldDocEntries = {\n keyId: {\n description: \"Идентификатор API-ключа (для `delete` и отображения в списке).\",\n valueSchema: \"string | null\",\n },\n name: {\n description: \"Человекочитаемое имя ключа.\",\n valueSchema: \"string | null\",\n },\n creationTime: {\n description: \"Время создания ключа (`date-time` → `Date`).\",\n valueSchema: \"Date\",\n },\n expiration: {\n description: \"Срок действия ключа (`date-time` → `Date | null`).\",\n valueSchema: \"Date | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeyInfoFieldDocs = mapFieldDocsToStrings(apiKeyInfoFieldDocEntries);\n\nexport const createApiKeyRequestFieldDocEntries = {\n name: {\n description: \"Имя ключа (maxLength 100).\",\n valueSchema: \"string | null\",\n },\n lifetimeDays: {\n description: \"Срок жизни ключа в днях (1…int32); `null` — по правилам сервера.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyRequestFieldDocs = mapFieldDocsToStrings(createApiKeyRequestFieldDocEntries);\n\nexport const createApiKeyResponseFieldDocEntries = {\n apiKey: {\n description: \"Метаданные созданного ключа (`ApiKeyInfo`).\",\n valueSchema: \"ApiKeyInfo\",\n },\n key: {\n description:\n \"Секрет API-ключа. Возвращается **один раз** при `create`. Не логировать и не сохранять в открытых логах/телеметрии.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createApiKeyResponseFieldDocs = mapFieldDocsToStrings(createApiKeyResponseFieldDocEntries);\n\nexport const apiKeysSdkMethodFieldDocEntries = {\n list: {\n description: \"`GET /api/v1/apikeys` — список API-ключей текущего пользователя (`ApiKeyInfo[]`).\",\n },\n create: {\n description:\n \"`POST /api/v1/apikeys` — создать ключ; body `CreateApiKeyRequest` → `CreateApiKeyResponse` (поле `key` — секрет, один раз).\",\n },\n delete: {\n description: \"`DELETE /api/v1/apikeys/{keyId}` — отозвать ключ; ответ без тела.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const apiKeysSdkMethodFieldDocs = mapFieldDocsToStrings(apiKeysSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const sendCommunicationCodeReqFieldDocEntries = {\n value: {\n description: \"Телефон, email или иное значение канала, на которое отправляется код.\",\n valueSchema: \"string | null\",\n },\n type: {\n description: \"Тип коммуникации (`CommunicationType`: Phone, Email, Telegram, Max, …).\",\n valueSchema: \"CommunicationType\",\n },\n language: {\n description: \"Язык шаблона сообщения / UI.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeReqFieldDocEntries);\n\nexport const sendCommunicationCodeRespFieldDocEntries = {\n sessionId: {\n description: \"Идентификатор сессии подтверждения для `verifyCommunicationCode`.\",\n valueSchema: \"string | null\",\n },\n sessionLifeTimeSeconds: {\n description: \"TTL сессии в секундах.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const sendCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(sendCommunicationCodeRespFieldDocEntries);\n\nexport const verifyCommunicationCodeReqFieldDocEntries = {\n sessionId: {\n description: \"Сессия из ответа sendCode.\",\n valueSchema: \"string | null\",\n },\n code: {\n description: \"Код из SMS/email.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeReqFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeReqFieldDocEntries);\n\nexport const verifyCommunicationCodeRespFieldDocEntries = {\n success: {\n description: \"Успех проверки кода.\",\n valueSchema: \"boolean\",\n },\n value: {\n description: \"Нормализованное подтверждённое значение (например E.164).\",\n valueSchema: \"string | null\",\n },\n channel: {\n description: \"Канал доставки после верификации (`DeliveryChannel`, включая Telegram/Max).\",\n valueSchema: \"DeliveryChannel\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const verifyCommunicationCodeRespFieldDocs = mapFieldDocsToStrings(verifyCommunicationCodeRespFieldDocEntries);\n\nexport const contactsCommunicationSdkMethodFieldDocEntries = {\n sendCommunicationCode: {\n description:\n \"`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:\n \"`PUT .../{torrowId}/publicity` — тело **`PublicityType`** (Personal, PublicWithRequest, PublicAvailable, Link; Private/Undefined исключены); 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:\n \"`PUT .../{torrowId}/integrations` — body: `string[]` (**integrationIds**); [] отвязывает все конфигурации. Параметры и события хранятся отдельно: client.integrations.list({ integrationIds }). Guards isWebHookIntegration / isExternalCalendarIntegration / isVideoTelephonyIntegration сужают полные модели ответа. Три *IntegrationForCreateOrUpdate не требуют integrationType/discriminator: create/update определяют ветвь по url / externalCalendars / videoTelephony и добавляют обе метки в копию DTO. Смешанные или повреждённые параметры дают InvalidInput до HTTP. Полный update конфигурации требует свежую положительную meta.version и checkVersion=true; сохраняйте полный снимок, не выводите URL с секретами.\",\n },\n listParticipants: {\n description:\n \"`GET .../{torrowId}/participants` — фильтры **`participantStateList`** (`Offered`/`Requested`/`Accepted`/…) / **`participantTypeList`**, пагинация; у **loyalty*** query **`lmFrom`/`lmTo`**, у **contact/case** — **`lmfrom`/`lmto`**. Флоу статусов: **`docs/agents/participation-flow.md`**.\",\n },\n generateSecurityToken: {\n description:\n \"`POST .../{torrowId}/generatesecuritytoken` — **`GenerateSecurityTokenReq`** → **`GenerateSecurityTokenResp`**. Внешняя ссылка: `participantType` **Reader** (обычная) или **Owner** (ссылка управления); получатель сохраняет через **`saveToMindMap({ securityToken })`**. Apps: `ShareWithRightsService`.\",\n },\n updateParticipationType: {\n description:\n \"`PUT .../{torrowId}/participation/{participantProfileId}/type` — body: **`ParticipantType`** (в path id профиля участника).\",\n },\n requestAccess: {\n description:\n \"`PUT .../participation/requestaccess` — body: **`profileId`**; query **`userMessage`**. Новый участник → **`Requested`**, владельцу — announcement **`RequestAccessToItem`**. Существующий Offered и некоторые ветки с AnyoneAccess.Read могут перейти в Accepted: проверяйте возвращённый participantState и заново читайте элемент после Accepted. Не для владельца своего item. Флоу: **`docs/agents/participation-flow.md`**, критерии: **`docs/item-access-errors.md`**.\",\n },\n revokeAccessRequest: {\n description: \"`PUT .../participation/revokerequest` — requester отменяет свой **`Requested`** → **`Revoked`**.\",\n },\n setGroup: { description: \"`PUT .../group/set` — **`SetGroupItemReq`**.\" },\n unsetGroup: { description: \"`PUT .../group/unset` — **`UnsetGroupItemReq`**.\" },\n updateTags: {\n description: \"`PUT .../{torrowId}/tags` — body: `string[]`; query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n listGroups: {\n description:\n \"`GET .../{parentId}/group/list` — **группы родительского элемента, доступные для включения дочерних элементов** (torrow-apps: `getGroups(parentId)`). В apps при пустом `group/list` UI часто даёт `[parent]`. **Не** члены группы. Члены: `search.*(…, { groupIds })`. У **loyaltycards** пути нет → SDK бросает (`withGroupListEndpoint: false`).\",\n },\n updateGroups: {\n description:\n \"`PUT .../{torrowId}/updategroups` — **`UpdateItemGroupsReq[]`**; query **`parentId`**, **`tags`**, **`alias`**, **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n includeToGroups: {\n description:\n \"`PUT .../include/togroups` — **`IncludeToGroupsReq`**. После include члены группы проверяй через `search.*(…, { groupIds })`, не через `listGroups`.\",\n },\n excludeFromGroups: { description: \"`PUT .../exclude/fromgroups` — **`ExcludeFromGroupsReq`**.\" },\n includeToParent: { description: \"`PUT .../{parentId}/include/items` — **`IncludeToParentReq`**.\" },\n excludeFromParent: {\n description: \"`PUT .../{parentId}/exclude/items` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\",\n },\n includeForUser: { description: \"`PUT .../{parentId}/include/foruser` — **`IncludeForUserReq`**.\" },\n excludeFromUser: {\n description: \"`PUT .../{parentId}/exclude/fromuser` — `childIds` и опции `versionToCheck`/`isNeedAnnouncement`.\",\n },\n rejectOffer: {\n description:\n \"`PUT .../participation/rejectoffer` — invitee отклоняет **`Offered`** → **`Rejected`**; body: **`profileId`**; query **`userMessage`**.\",\n },\n reject: { description: \"`PUT .../participation/reject` — body: **`profileId`**.\" },\n share: {\n description:\n \"`PUT .../participation/share` — **`ShareItemReq`** → **`ParticipationResp`**. Создаёт **`Offered`**; invitee — announcement **`ShareItem`**. Принять = **`saveToMindMap`** (нет `acceptOffer`). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n revokeOffer: {\n description:\n \"`PUT .../participation/revokeoffer` — владелец отзывает **`Offered`** → **`Revoked`**; body: `string[]` (**profileIds**).\",\n },\n grantAccess: {\n description:\n \"`PUT .../participation/grantaccess` — владелец принимает **`Requested`** → **`Accepted`**; body: `string[]` (**profileIds**).\",\n },\n declineAccess: {\n description:\n \"`PUT .../participation/declineaccess` — владелец отклоняет **`Requested`** → **`Declined`**; body: `string[]`; query **`userMessage`**.\",\n },\n updatePersonalListOrder: {\n description:\n \"`POST .../personallist/updateorder` — **`UpdatePersonalListOrderReq`** → **`UpdatePersonalListOrderResp`**.\",\n },\n updateAlias: {\n description:\n \"`PUT .../{itemId}/alias` — body: string (**alias**); query **`versionToCheck`**, **`isNeedAnnouncement`**.\",\n },\n updateLastUsageTime: {\n description: \"`PUT .../{itemId}/lastusagetime` — body: ISO date-time string.\",\n },\n updateParticipationProfile: {\n description: \"`PUT .../{itemId}/participation/profile` — body: **`profileId`** (string).\",\n },\n sendLink: {\n description:\n \"`PUT .../{itemId}/sendlink` — **`SendLinkOfItemReq`** → **`SendLinkOfItemResp`**. In-app ссылка (**`SendLinkOfItem`**); **не** создаёт `Offered`.\",\n },\n getShortUrl: { description: \"`POST .../{torrowId}/shorturl` → `string` (короткая URL элемента).\" },\n updateUniqueName: { description: \"`PUT .../{itemId}/uniquename` — body: string (**uniqueName**).\" },\n getByUniqueName: {\n description:\n \"`GET .../uniquename/{uniqueName}` — у **cases** доп. query **`profileId`** (override); иначе только **`signal`**.\",\n },\n getImageInfo: {\n description:\n \"**`FileInfo | null`**: свежая доступная Full-карточка без image → null (1 GET); иначе image/info (2 GET) для восьми обычных доменов. **`loyaltyCards.getImageInfo`** переопределён: отображаемый card.image, включая проекцию программы, возвращается из Full-карточки за 1 GET без image/info. Ошибки не подавляются; raw сохраняет прямой endpoint.\",\n },\n getImagePutUrl: {\n description:\n \"`GET .../{torrowId}/image/puturl` — presigned upload; параметры **`fileId`**, **`fileName?`**, **`fileSize?`** (query). SDK: **`{ url, urlExpiration }`**.\",\n },\n saveToMindMap: {\n description:\n \"`PUT .../{torrowId}/savetomindmap` — **`SaveItemToMindMapReq`** → **`Participation`**. Accept invite (`Offered`→`Accepted`), open/link save, или save с **`securityToken`** (Reader/Owner link). Флоу: **`docs/agents/participation-flow.md`**.\",\n },\n updateSolutionData: {\n description:\n \"`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 \"SDK-композиция **`FileInfo | null`**: обязательный **`options.photoId`**, Full-карточка Contact и при наличии выбранной связи **`GET .../{torrowId}/photo/info`**. Отсутствующая связь в **`photos`** → null за 1 GET; существующая → metadata за 2 GET. Аватар **`image`** не участвует в выборе. Только при **`withPhotoEndpoints`** (сейчас **contacts**), иначе **`UnsupportedOperation`** до HTTP; ошибки чтения и неполная карточка не становятся null.\",\n },\n getPhotoPutUrl: {\n description:\n \"`GET .../{torrowId}/photo/puturl` — presigned; **`fileId`**, **`fileName?`**, **`fileSize?`**; только при **`withPhotoEndpoints`** (сейчас **contacts**). SDK: **`{ url, urlExpiration }`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/**\n * Методы только **`TorrowItemFacade`** (нет у **loyalty*** на **`TorrowItemCoreFacade`**).\n * Домены: **contacts**, **cases**, **services**, **notes**, **calendars**, **contexts**, **resourceItems** — общий HTTP-слой совпадает; доменные CRUD/сценарии описываются отдельно (booking, payment, search, …).\n */\nexport const torrowItemFacadeExtensionSdkMethodFieldDocEntries = {\n updateFeedbackOptions: {\n description: \"`PUT .../{torrowId}/feedbacks/options` — **`FeedbackOptions`**.\",\n },\n getParticipantsAnonymousCount: {\n description: \"`GET .../{torrowId}/participants/anonymous` → **`GetParticipationCountResp`**.\",\n },\n getParticipantsNonAnonymousCount: {\n description:\n \"`GET .../{torrowId}/participants/nonanonymous` — query **`participantStateList`**, **`participantTypeList`**.\",\n },\n listTags: {\n description: \"`GET .../{torrowId}/tags` — фильтры **`ItemTagsListQuery`** → `string[]`.\",\n },\n listItemGroups: {\n description:\n \"`GET .../{itemId}/groups?parentId=` — **`GroupStatus[]`**: в каких группах родителя состоит child (torrow-apps: `getItemGroups(itemId, parentId)`). Каталог групп родителя для include — `listGroups(parentId)` (`…/group/list`). Члены группы — `search.*(groupIds)`.\",\n },\n updateAccounts: {\n description: \"`PUT .../{torrowId}/updateaccounts` — **`UpdateItemAccountsReq[]`** → **`IncludeExcludeResp`**.\",\n },\n shareItemLink: {\n description:\n '**WIP / do not use in product.** `POST .../{torrowId}/participation/shareitemlink` — **`GetShareItemSessionReq`** → URL `string`. Invite-session (срок/лимит); activate: **`client.item.activateShareItemSession`**. Gateway stub (`Task.FromResult(\"\")`, HTTP 200) — пустой URL не баг SDK; apps InvitationLink (ContactItem) копирует `\"\"`. Activate stub, unused in apps UI. Не путать с **`sendLink`** / **`share`** / **`generateSecurityToken`** (продуктовая альтернатива + client URI). Не клеить URL из shortUrl/item path.',\n },\n updateOfflinable: {\n description: \"`PUT .../{itemId}/offlinable` — body: boolean.\",\n },\n updateReminders: {\n description:\n \"`PUT .../{itemId}/reminders` — **`PersonalReminder[]`**. Отсутствующий/null/пустой rid создаётся SDK; валидный 24-hex сохраняется. Для стабильного повтора заранее используйте generateRid().\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — **`NotificationWay[]`** (у **loyaltycards** тот же путь, но класс не от **Base** — см. **`LoyaltyCardsSdkMethods`**).\",\n },\n block: {\n description:\n \"`POST .../{itemId}/block` — query **`reasonId`**, **`reasonNote`**, **`language`**, … → **`TorrowItem`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n unblock: {\n description:\n \"`POST .../{itemId}/unblock` — query **`versionToCheck`**, **`isNeedAnnouncement`**. Только **администратор Torrow** (обычная сессия → HTTP 403).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный общий слой **`TorrowItemFacade`** без photo-endpoints (`GET .../participants` — **`lmfrom`/`lmto`**). */\nexport const torrowItemFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadeExtensionSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** То же + **`getPhotoInfo`/`getPhotoPutUrl`** — как у **`client.contacts`** (`withPhotoEndpoints`). */\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocEntries = {\n ...torrowItemFacadeSdkMethodFieldDocEntries,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Полный набор методов Core для каталога **`TorrowItemCoreFacadeSdkMethods`** (включая photo). */\nexport const torrowItemCoreFacadeSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n ...torrowItemFacadePhotoEndpointSdkMethodFieldDocEntries,\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemCoreFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n);\n\nexport const torrowItemFacadeSdkMethodFieldDocs = mapFieldDocsToStrings(torrowItemFacadeSdkMethodFieldDocEntries);\n\nexport const torrowItemFacadeContactsItemSdkMethodFieldDocs = mapFieldDocsToStrings(\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\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: 'Отступ между событиями ресурса в секундах: `\"<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 подключения уведомлений Telegram и Max. BehaviorSettings API возвращает boolean и при точном, регистрозависимом совпадении поддерживает canonical и legacy alias; кодирование является внутренней реализацией SDK. Исторический helper читает только canonical.\",\n examples: [\"HideMessengerNotifications\"],\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: [\"const tags = mergeResourceBehaviorTags(resource.tags, { marginTimeSec: 3600, lockId: 11432744 });\"],\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 = [\n \"parseResourceBehaviorSettings\",\n \"mergeResourceBehaviorTags\",\n] 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 * MCP / агенты: методы фасадов ActionHistory / Accounting / Announcement / ExportImport / Report / Loyalty*.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\nimport { itemDeleteMethodDescription } from \"./item-delete-query-field-docs.js\";\nimport { torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto } from \"./item-social-facet-field-docs.js\";\n\nexport const accountingTransactionsSdkMethodFieldDocEntries = {\n create: {\n description: \"`POST /api/v1/accountingtransactions` — тело **`AccountingTransaction`**; query **`securityToken`**.\",\n },\n update: {\n description: \"`PUT /api/v1/accountingtransactions/{torrowId}` — полное обновление DTO.\",\n },\n delete: {\n description: \"`DELETE /api/v1/accountingtransactions/{torrowId}` → число **`deleteCount`**.\",\n },\n updateState: {\n description: \"`PUT .../state` — смена состояния через query **`state`** (`AccountingTransactionState`).\",\n },\n getBalance: {\n description: \"`GET .../balance` — массив **`BalanceValue`**; опционально **`balanceDate`**.\",\n },\n listTransactions: {\n description:\n \"`GET .../transactions` — список **`AccountingTransaction`** с фильтрами и пагинацией. \" +\n \"**`torrowId`** должен быть id **`LoyaltyCard`** или **`LoyaltyCardSubscription`**; \" +\n \"для **`Case`**, **`Service`**, **`Resource`** и других элементов отдельного счёта транзакций нет.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const accountingTransactionsSdkMethodFieldDocs = mapFieldDocsToStrings(\n accountingTransactionsSdkMethodFieldDocEntries,\n);\n\nexport const announcementsSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/announcements` — **`AnnouncementInfo[]`**; query **`AnnouncementsListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT` / `Language is null or empty`). \" +\n \"Без **`state`** / **`stateList`** список пустой — передавай фильтр (в приложении: **`New`**, **`Hidden`**). \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n updateState: {\n description:\n \"`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:\n \"`POST /api/v1/import` — тело **`ImportByFileRequest`** (граф + `parentId` / флаги) → **`TorrowItem`**.\",\n },\n importByUniqueName: {\n description: \"`POST /api/v1/importbyuniquename` — **`ImportByUniqueNameRequest`**.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const exportImportSdkMethodFieldDocs = mapFieldDocsToStrings(exportImportSdkMethodFieldDocEntries);\n\nexport const reportsSdkMethodFieldDocEntries = {\n generate: {\n description: \"`POST /api/v1/reports` — **`GenerateReportReq`**; опционально **`profileId`** в query.\",\n },\n generateForProfile: {\n description: \"`POST /api/v1/reports/{profileId}` — то же тело, профиль в path.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const reportsSdkMethodFieldDocs = mapFieldDocsToStrings(reportsSdkMethodFieldDocEntries);\n\nexport const actionHistorySdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/actionhistory` — **`ActionHistoryInfo[]`**; query **`ActionHistoryListQuery`**. \" +\n \"На шлюзе **`language` фактически обязателен** (пустой → HTTP 500 `INVALID_ARGUMENT`). \" +\n \"**`itemIds`** опционален: без него / с `[]` — лента пользователя; с id — история по выбранным элементам. \" +\n \"Имена дат **`lmfrom`** / **`lmto`** — lower-case.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const actionHistorySdkMethodFieldDocs = mapFieldDocsToStrings(actionHistorySdkMethodFieldDocEntries);\n\nexport const loyaltySystemsSdkMethodFieldDocEntries = {\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n getInitialSubscriptionImageInfo: {\n description:\n \"Один GET Full-программы с includeChildItemStats=false (wire: includeChildItems=false): initialSubscription.image либо null, независимо от аватара программы. url/refreshUrl сохраняются без обновления, просроченный или отсутствующий url допустим; хранилище отдельно не проверяется.\",\n valueSchema: \"(torrowId: string, options?: { signal?: AbortSignal }) → Promise<FileInfo | null>\",\n usage:\n \"Пример с временной программой: loyalty-systems-initial-subscription-image-info.ts. Все файловые области вместе: loyalty-images-read.ts. Загрузка разных аватара/изображения подписки: loyalty-systems-create-extended.ts. Примеры сами создают и удаляют данные.\",\n },\n create: {\n description: \"`POST /api/v1/loyaltysystems` — тело **`LoyaltySystemItem`**; query **`parentId`**, **`profileId`**.\",\n },\n update: {\n description: \"`PUT /api/v1/loyaltysystems/{torrowId}`; numeratorInfo только create/read, из update исключается.\",\n },\n patch: {\n description:\n \"Полный GET → максимум один CAS PUT; все16 подтверждённых полей LoyaltySystemItemPatch, Full/UpdateItem/version, no-op; без retry/readback. Выпуск/финансы отдельно.\",\n valueSchema:\n \"(itemId: string, fields: LoyaltySystemItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<LoyaltySystemItem>\",\n },\n delete: {\n description: \"`DELETE /api/v1/loyaltysystems/{torrowId}` — как у элементов: \" + itemDeleteMethodDescription,\n },\n getById: { description: \"`GET /api/v1/loyaltysystems/{torrowId}`.\" },\n listPersonal: {\n description: \"`GET .../personallist` — query с **`lmFrom`** / **`lmTo`** (camelCase в OpenAPI), не `lmfrom`.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createLoyaltyCard: {\n description:\n \"`POST .../{loyaltySystemId}/loyaltycard` — тело **`CreateLoyaltyCardReq`** (`profileId` обязателен; опционально **`basisItemId`** — элемент-основание карты/абонемента, напр. заказ). Поля: каталог MCP **`CreateLoyaltyCardReq`**.\",\n },\n searchLoyaltyCards: {\n description:\n \"`POST .../{torrowId}/loyaltycards` — поиск карт в программе; тело **`SearchLoyaltyCardsReq`** (`text`, `filter`, `sort`, `take`/`skip`). В apps: `SearchLoyaltyCardsTask`.\",\n },\n postStatistics: {\n description:\n \"`POST /api/v1/loyaltysystems/statistics` — тело **`GetLoyaltySystemsStatisticsReq`**; ответ SDK: **`LoyaltySystemsStatisticsResp[]`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const loyaltySystemsSdkMethodFieldDocs = mapFieldDocsToStrings(loyaltySystemsSdkMethodFieldDocEntries);\n\nexport const loyaltyCardsSdkMethodFieldDocEntries = {\n patch: {\n description:\n \"Full GET → максимум один CAS PUT восьми полей LoyaltyCardItemPatch. Пропуск сохраняет, вложенные значения заменяются целиком; subscriptions — только существующие ID, image — ссылка id/null. CardNumber назначается сервером: доступен в read/ACK, исключается из update/patch PUT, явный patch-ключ отклоняется до HTTP. Name/image карты производные; выпуск и финансы отдельно. Draft: исторический live выявил потерю общего файла шаблона; нужна повторная серверная приёмка. Регрессии: loyalty-cards-patch-fields.ts, loyalty-cards-patch-images.ts, loyalty-cards-patch-cas.ts; нет retry/readback, root Write не является транзакцией files/queue.\",\n valueSchema:\n \"(itemId: string, fields: LoyaltyCardItemPatch, options?: TorrowItemPatchOptions) → TorrowItemPatchResult<LoyaltyCardItem>\",\n },\n ...torrowItemCoreFacadeSdkMethodFieldDocEntriesWithoutPhoto,\n update: { description: \"`PUT /api/v1/loyaltycards/{torrowId}` — **`LoyaltyCardItem`**.\" },\n delete: { description: \"`DELETE ...` — \" + itemDeleteMethodDescription },\n getById: {\n description: \"`GET ...` — опционально **`includeBalance`** (по умолчанию в API true).\",\n },\n listPersonal: {\n description: \"`GET .../personallist` — как у систем, плюс **`includeBalance`** в query.\",\n },\n deleteFromPersonalList: { description: \"`DELETE .../personallist/{torrowId}`.\" },\n createSubscription: {\n description:\n \"`POST /api/v1/loyaltycards/{loyaltyCardId}/subscription` — **`CreateLoyaltyCardSubscriptionReq`** → **`LoyaltyCardSubscription`**; у **`initialTransaction.basisItemId`** — то же основание (заказ и т.п.), см. MCP **`InitialTransaction`**.\",\n },\n getParticipantsCount: { description: \"`GET .../{torrowId}/participants/count`.\" },\n getBalance: { description: \"`GET .../{torrowId}/balance` — query: `balanceDate`, `securityToken`.\" },\n listTransactions: { description: \"`GET .../{torrowId}/transactions` — query как у accounting list.\" },\n getSubscriptionBalance: { description: \"`GET .../subscriptions/{subscriptionId}/balance`.\" },\n getSubscriptionImageInfo: {\n description:\n \"Выбранное **`subscriptions[].image`** из свежей Full-карты за один GET с includeChildItemStats=false/includeBalance=false (wire: includeChildItems=false). Обязательный subscriptionId выбирает подписку, не file ID; отсутствие подписки/изображения → null. Вся коллекция проверяется до поиска. Аватар независим; url/refreshUrl не запрашиваются, для свежего снимка повторите getter. Доступность байтов отдельно не проверяется.\",\n valueSchema:\n \"(torrowId: string, subscriptionId: string, options?: { signal?: AbortSignal }) => Promise<FileInfo | null>\",\n usage:\n \"Пример с временными программой и картой: loyalty-cards-subscription-image-info.ts; сквозной: loyalty-images-read.ts. Выпуск карты с различимыми изображениями и проверкой байтов: loyalty-cards-create-subscription.ts. Примеры сами создают и удаляют данные.\",\n },\n getSubscriptionTransactions: { description: \"`GET .../subscriptions/{subscriptionId}/transactions`.\" },\n getTimetable: {\n description:\n \"`PUT /api/v1/loyaltycards/{torrowId}/timetable` — тело **`TimetableFilter`**, query **`TimetableQueryOptions`**; ответ **`TimetableCase[]`**. В apps: `LoyaltyCardClient.getTimetable`.\",\n },\n getTimetableStatistics: {\n description:\n \"`POST /api/v1/loyaltycards/timetable/statistics` — **`GetTimetableStatisticsRequest`**; SDK: **`TimetableStatisticsResp[]`**.\",\n },\n updateNotificationWayList: {\n description:\n \"`PUT .../{itemId}/notificationwaylist` — у **loyaltycards** в OpenAPI есть путь; у **loyaltysystems** нет — метод только на **`LoyaltyCards`**.\",\n },\n getImagePutUrl: { description: \"Presigned загрузка изображения карты (`GET .../image/puturl`).\" },\n getImageInfo: {\n description:\n \"**`FileInfo | null`**: отображаемый card.image из свежей доступной Full-карточки за один GET (includeChildItemStats=false, includeBalance=false; wire: includeChildItems=false); без image → null. Сервер уже учитывает наследование изображения программы. Собственный card image/info не вызывается: он может описывать другой файл. Для нового снимка/URL повторить getter, не следовать refreshUrl; доступность байтов не проверяется.\",\n usage:\n \"Пример с временными программой и картой: loyalty-cards-image-info.ts; сравнение с программой и подписками: loyalty-images-read.ts. Примеры сами создают и удаляют данные.\",\n },\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: {\n description: \"`POST /api/v1/user/accounts/add/complete` — завершение добавления аккаунта по коду.\",\n },\n deleteAccount: {\n description:\n \"`DELETE /api/v1/user/accounts/delete` — удаление аккаунта; SDK возвращает **`deletedCount`** (`number`).\",\n },\n listDevices: { description: \"`GET /api/v1/user/devices` — список устройств (`DeviceInfo[]`).\" },\n deleteDevice: {\n description: \"`DELETE /api/v1/user/devices/{deviceId}` — удалить устройство; SDK: **`deleteCount`** (`number`).\",\n },\n getDeviceSettings: {\n description:\n \"`GET /api/v1/user/devices/{deviceId}/settings` — читать настройки (SDK: wire string → JSON, битое → `null`).\",\n },\n updateDeviceSettings: {\n description:\n \"`PUT /api/v1/user/devices/{deviceId}/settings` — сохранить настройки (SDK: JSON → wire string в query).\",\n },\n getDefaultProfile: {\n description:\n \"Серверный профиль по умолчанию (`GET /api/v1/user/defaultprofile`); при null/пустом ответе — первый профиль из profiles.list в серверном порядке. При пустом списке — null. Только чтение: запасной выбор не назначает серверный default. Ошибки не подменяются null; signal применяется к обоим запросам.\",\n },\n setDefaultProfileByContactId: {\n description:\n \"`GET /api/v1/user/profiles` → `PUT /api/v1/user/defaultprofile` — назначить default только для точного contactId из пригодного списка Профилей. Один signal на оба запроса; без скрытого add, CAS, retry и readback. Успех: **`ContactItem`**. Ошибка `TorrowSdkError` с `ProfileErrorDetail`, стадией, `Remote/Write` effect; после начала PUT без пригодного ACK результат Unknown. Между GET и PUT возможна гонка.\",\n },\n createDefaultProfile: {\n description:\n \"`POST /api/v1/user/defaultprofile` — создать и назначить дефолтный профиль; тело: **`UserProfileItemForAdd`**; ответ: **`ContactItem`**. Перед POST фасад заполняет `publicityType`, непустое `name` и нормализует поля контакта, включая `visitCard`, как у `profiles.add`.\",\n },\n listDeliveryWays: { description: \"`GET /api/v1/user/deliveryways` — пользовательские способы доставки.\" },\n listDefaultNotificationWays: {\n description: \"`GET /api/v1/user/defaultnotificationways` — дефолтные notification rules.\",\n },\n updateDefaultNotificationWays: {\n description: \"`PUT /api/v1/user/defaultnotificationways` — обновить notification rules.\",\n },\n updatePlace: { description: \"`PUT /api/v1/user/place` — обновить place для профиля/пользователя.\" },\n register: { description: \"`POST /api/v1/user/register` — регистрация пользователя в аккаунте.\" },\n getTimetable: { description: \"`PUT /api/v1/user/timetable` — расписание текущего пользователя.\" },\n listCalendars: { description: \"`GET /api/v1/user/calendars` — подключенные календари.\" },\n updateCalendars: { description: \"`PUT /api/v1/user/calendars/update` — сохранить календари пользователя.\" },\n initDelete: { description: \"`DELETE /api/v1/user/delete/init` — старт удаления пользователя (session).\" },\n completeDelete: { description: \"`DELETE /api/v1/user/delete/complete` — завершить удаление по коду.\" },\n count: {\n description:\n \"`GET /api/v1/user/count` — число пользователей. Публичный endpoint: доступен без Bearer (и с сессией).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const userSdkMethodFieldDocs = mapFieldDocsToStrings(userSdkMethodFieldDocEntries);\n","import type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userSettingsInfoFieldDocEntries = {\n settings: {\n description:\n \"JSON пользовательских настроек в SDK (wire OpenAPI — `string | null`). При чтении: `JSON.parse`, пустое/битое → `null`; при записи: `JSON.stringify`.\",\n valueSchema: \"JsonValue | null\",\n usage:\n \"Структуру внутри `settings` приложение задаёт само и версионирует; SDK парсит/сериализует JSON без схемы объекта.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userSettingsInfoFieldDocs = mapFieldDocsToStrings(userSettingsInfoFieldDocEntries);\n\nexport const solutionDataFieldDocEntries = {\n quickFilterTags: {\n description: \"Теги быстрых фильтров отображаемых при поиске элементов, которые вложенны в данную группу карточки.\",\n valueSchema: \"string[] | null\",\n usage:\n \"В продукте обновляется через setQuickFilters и синхронизируется с `tags`: при удалении тегов из элемента лишние quick-filters удаляются из `solutionData.quickFilterTags`.\",\n },\n metrics: {\n description: \"Переопределение счетчиков аналитики для конкретного элемента.\",\n valueSchema: \"Metrics\",\n usage:\n \"Форма Analytics Tools пишет в `solutionData.metrics`; при page open/event отправляются hit/event в глобальные счетчики и дополнительно в элементные счетчики из `metrics`.\",\n },\n surveyId: {\n description: \"ID привязанного опроса/анкеты.\",\n valueSchema: \"string | null\",\n },\n viewBlockSettings: {\n description: \"Конфигурация блоков/секций карточки дочерних элементов.\",\n valueSchema: \"ViewBlockSettings\",\n usage:\n \"Форма item appearance сохраняет `viewBlockSettings.blockSettings[]`; порядок секций берется из `order`, а `filter.tags` используется для отдельных выборок child-views с фильтрацией по тегам.\",\n },\n layoutType: {\n description:\n \"Тип layout карточки (int-код UI раскладки/обложки). Известные коды и смысл — каталог MCP **`LayoutTypeValues`** / константы `LayoutTypeValues` в `@torrow/sdk-client` (torrow-apps `LayoutType`).\",\n valueSchema: \"LayoutTypeValues | int32 | null\",\n examples: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"],\n usage:\n \"Пишется формой item appearance (`updateSolutionData`). В UI выбора обложки: NonImage / SideImage / SmallImagePanel / MediumImagePanel / BigImagePanel. На мобильном `BigImagePanel` + image включает image-view с opacity toolbar. Поле не enum OpenAPI — допустим любой int; агенту для выбора значения смотреть `LayoutTypeValues.*`.\",\n },\n homeItemIds: {\n description: \"Закрепленные home-элементы (обычно один выбранный id).\",\n valueSchema: \"string[] | null\",\n usage:\n \"Выбираются в item appearance через picker родительского элемента; сохраняются в solutionData и используются как persisted-настройка навигации/точки входа.\",\n },\n vk: {\n description: \"Параметры интеграции/виджета VK в решении.\",\n valueSchema: \"Vk\",\n },\n zoom: {\n description: \"Состояние масштаба/viewport для mind map и визуализаций.\",\n valueSchema: \"Zoom\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const solutionDataFieldDocs = mapFieldDocsToStrings(solutionDataFieldDocEntries);\n\n/**\n * Известные int-коды `SolutionData.layoutType` для MCP/ИИ (torrow-apps `LayoutType`, UI «Обложка элемента»).\n * Wire-значение — число в JSON; ключи совпадают с `LayoutTypeValues` в `@torrow/sdk-client`.\n */\nexport const layoutTypeValuesFieldDocEntries = {\n value: {\n description:\n \"Справочник известных кодов обложки карточки (`SolutionData.layoutType`). Не OpenAPI-enum: поле остаётся `number | null`, список ниже — продуктовый контракт UI.\",\n valueSchema: \"LayoutTypeValues\",\n usage:\n \"Константы SDK: `LayoutTypeValues.<Name>` → int в теле `updateSolutionData`. Appearance form предлагает NonImage, SideImage, SmallImagePanel, MediumImagePanel, BigImagePanel. Дефолт контакта/заметки — SideImage; case/service/resource — MediumImagePanel (`TorrowItemHelper.getDefaultLayoutType`).\",\n },\n Unknown: {\n description:\n \"`0` — служебное/не задано; клиент обычно подставляет default layout по типу item, а не показывает Unknown в селекторе обложки.\",\n examples: [\"0\"],\n valueSchema: \"LayoutTypeValues\",\n },\n SideImage: {\n description:\n \"`1` — «Изображение» (side image): компактная картинка сбоку от заголовка/карточки. Дефолт для Contact/Note/Context и прочих не-case/service/resource.\",\n examples: [\"1\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Виджет `ttSideImage`; показывается при наличии `item.image`.\",\n },\n SmallImagePanel: {\n description: \"`2` — «Маленький баннер»: небольшой image-panel в шапке карточки.\",\n examples: [\"2\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Слот `ttSmallImageMobilePanelSlot`; видим при `layoutType === SmallImagePanel` и наличии image.\",\n },\n MediumImagePanel: {\n description:\n \"`3` — «Средний баннер»: средний image-panel. Дефолт для Case/Service/Resource (и их view) в torrow-apps.\",\n examples: [\"3\"],\n valueSchema: \"LayoutTypeValues\",\n },\n BigImagePanel: {\n description:\n \"`4` — «Большой баннер»: крупная обложка; на мобильном с image включает fullscreen-like image view и toolbar с меняющейся opacity при скролле.\",\n examples: [\"4\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Имя может «прибиваться» поверх большого баннера (`isVisibleNailedName`).\",\n },\n SmallSlider: {\n description:\n \"`5` — layout со слайдером изображений (small). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"5\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.SmallSlider`) — это другое поле.\",\n },\n BigSlider: {\n description:\n \"`6` — layout со слайдером изображений (big). Есть в модели `LayoutType`, в форме appearance item cover обычно не предлагается.\",\n examples: [\"6\"],\n valueSchema: \"LayoutTypeValues\",\n usage: \"Не путать с `NoteItem.imagePreviewSize` (`ImagePreviewSize.*Slider`).\",\n },\n NonImage: {\n description:\n \"`7` — «Нет изображения»: шапка без обложки/баннера (`ttNonImagePanel`), даже если у item есть `image`.\",\n examples: [\"7\"],\n valueSchema: \"LayoutTypeValues\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const layoutTypeValuesFieldDocs = mapFieldDocsToStrings(layoutTypeValuesFieldDocEntries);\n\nexport const blockInfoFieldDocEntries = {\n reasonId: {\n description: \"Код причины блокировки.\",\n valueSchema: \"int32\",\n },\n blockDate: {\n description: \"Дата и время блокировки.\",\n valueSchema: \"date-time string | null\",\n },\n reasonNote: {\n description: \"Свободный комментарий к причине блокировки.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockInfoFieldDocs = mapFieldDocsToStrings(blockInfoFieldDocEntries);\n\nexport const usageConditionFieldDocEntries = {\n usageConditionType: {\n description: \"Тип условия (`None`, `Exclusion`, `Additional`, ...).\",\n valueSchema: \"UsageConditionType\",\n },\n conditionIdList: {\n description: \"Ссылки на условия/правила, участвующие в ограничении использования.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionFieldDocs = mapFieldDocsToStrings(usageConditionFieldDocEntries);\n\nexport const usageTypeFieldDocEntries = {\n value: {\n description: \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n valueSchema: \"UsageType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = {\n value: {\n description: \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n valueSchema: \"UsageConditionType\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const viewBlockSettingsFieldDocEntries = {\n blockSettings: {\n description: \"Список настроек секций карточки (по типам дочерних элементов).\",\n valueSchema: \"BlockSettings[] | null\",\n usage:\n \"При рендере карточки секции сортируются по `order`; если каких-то дефолтных типов нет, UI добавляет fallback-секции (contact/note/case/service/calendar/resource).\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewBlockSettingsFieldDocs = mapFieldDocsToStrings(viewBlockSettingsFieldDocEntries);\n\nexport const blockSettingsFieldDocEntries = {\n objectType: {\n description: \"Тип дочернего элемента для секции (числовой objectType из API).\",\n valueSchema: \"TorrowObjectType\",\n usage:\n \"Сопоставляется с enum-типом в клиенте (`getTorrowObjectTypeByNumber`) и используется для загрузки соответствующего view (contacts/notes/services/cases/calendars/resources).\",\n },\n name: {\n description: \"Название блока (label в UI).\",\n valueSchema: \"string | null\",\n },\n order: {\n description: \"Порядок блока в раскладке.\",\n valueSchema: \"int32 | null\",\n },\n filter: {\n description: \"Дополнительный фильтр секции.\",\n valueSchema: \"Filter\",\n usage:\n \"Для секции поддерживается `filter.tags`: при наличии запускается дополнительный запрос child-view c `listOptions.tags`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const blockSettingsFieldDocs = mapFieldDocsToStrings(blockSettingsFieldDocEntries);\n\nexport const metricsFieldDocEntries = {\n yandexMetrics: {\n description: \"ID счетчика Яндекс.Метрики для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"При наличии инициализируется отдельный счетчик и получает page hit / reachGoal в дополнение к глобальному счетчику приложения.\",\n },\n googleAnalytics: {\n description: \"GA measurement id для элемента.\",\n valueSchema: \"string | null\",\n usage: \"При наличии отправляются page view / events в GA именно этого элемента.\",\n },\n facebookPixel: {\n description: \"Facebook Pixel id для элемента.\",\n valueSchema: \"string | null\",\n usage:\n \"Поле есть в API/SDK и в форме редактирования; в продукте может быть скрыто feature/policy флагами, но сохраняется в `solutionData.metrics`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const metricsFieldDocs = mapFieldDocsToStrings(metricsFieldDocEntries);\n\nexport const filterFieldDocEntries = {\n tags: {\n description: \"Теги для фильтрации дочерних элементов внутри секции.\",\n valueSchema: \"string[] | null\",\n usage:\n \"Заполняется в форме секции (`quickFilterTags`) и маппится в `BlockSettings.filter.tags`; влияет на состав элементов в конкретном блоке карточки.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const filterFieldDocs = mapFieldDocsToStrings(filterFieldDocEntries);\n\nexport const personalSolutionDataFieldDocEntries = {\n favoriteOrder: {\n description: \"Персональный порядок/приоритет элемента для текущего профиля.\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const personalSolutionDataFieldDocs = mapFieldDocsToStrings(personalSolutionDataFieldDocEntries);\n\nexport const notificationPropertiesFieldDocEntries = {\n deliveryStrategy: {\n description: \"Стратегия отправки уведомлений (`Always`, `Schedule`, ... по enum API).\",\n valueSchema: \"DeliveryStrategy\",\n },\n deliveryChannelMessageList: {\n description: \"Шаблоны сообщений по каналам доставки.\",\n valueSchema: \"DeliveryChannelMessage[] | null\",\n },\n beginAcceptableTime: {\n description: \"Начало допустимого окна отправки (минуты/код времени API).\",\n valueSchema: \"int32 | null\",\n },\n endAcceptableTime: {\n description: \"Конец допустимого окна отправки.\",\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const notificationPropertiesFieldDocs = mapFieldDocsToStrings(notificationPropertiesFieldDocEntries);\n\nexport const userDeliveryWayFieldDocEntries = {\n deliveryChannel: {\n description: \"Канал доставки (`Sms`, `Email`, `Push`, `Telegram`, `Max` и т.п.).\",\n valueSchema: \"DeliveryChannel\",\n },\n searchValue: {\n description: \"Поисковое/идентификационное значение получателя (телефон, email).\",\n valueSchema: \"string | null\",\n },\n deliveryParameters: {\n description: \"Параметры канала в сериализованной форме.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const userDeliveryWayFieldDocs = mapFieldDocsToStrings(userDeliveryWayFieldDocEntries);\n\nexport const deviceSettingsInfoFieldDocEntries = {\n deviceId: {\n description: \"ID устройства пользователя.\",\n valueSchema: \"string | null\",\n },\n settings: {\n description:\n \"Настройки устройства как JSON. Wire OpenAPI — `string | null` (query/тело); SDK: parse при чтении (`null` если не JSON), stringify при записи.\",\n valueSchema: \"JsonValue | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const deviceSettingsInfoFieldDocs = mapFieldDocsToStrings(deviceSettingsInfoFieldDocEntries);\n","import type { components } from \"../../schema/generated.js\";\n\n/** OpenAPI `AccountType` (`SendCodeReq.type`, `CreateAuthSessionReq.type`, …). */\nexport type AccountType = components[\"schemas\"][\"AccountType\"];\n\n/**\n * Значения OpenAPI enum **`AccountType`**.\n *\n * @example\n * ```ts\n * import { AccountTypeValues } from \"@torrow/sdk-client\";\n * await client.auth.sendCode({ type: AccountTypeValues.Email, accountName });\n * ```\n */\nexport const AccountTypeValues = {\n Undefined: \"Undefined\",\n Phone: \"Phone\",\n Email: \"Email\",\n Telegram: \"Telegram\",\n} as const satisfies Record<string, AccountType>;\n\nexport const AccountTypeValueList: readonly AccountType[] = [\n AccountTypeValues.Undefined,\n AccountTypeValues.Phone,\n AccountTypeValues.Email,\n AccountTypeValues.Telegram,\n];\n\nexport function isAccountType(value: string): value is AccountType {\n return (AccountTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAccountType(raw: string | undefined | null): AccountType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AccountTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * Подмножество `AccountType` для OTP **`sendCode`** (не Telegram deep-link / не `Undefined`).\n * Telegram → `createSession`; Undefined Identity на sendCode отвергает.\n */\nexport type SendCodeAccountType = Extract<AccountType, \"Phone\" | \"Email\">;\n\nexport const SendCodeAccountTypeValues = {\n Phone: AccountTypeValues.Phone,\n Email: AccountTypeValues.Email,\n} as const satisfies Record<string, SendCodeAccountType>;\n\nexport const SendCodeAccountTypeValueList: readonly SendCodeAccountType[] = [\n SendCodeAccountTypeValues.Phone,\n SendCodeAccountTypeValues.Email,\n];\n\nexport function isSendCodeAccountType(value: string): value is SendCodeAccountType {\n return (SendCodeAccountTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseSendCodeAccountType(raw: string | undefined | null): SendCodeAccountType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return SendCodeAccountTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/** OpenAPI `VerificationMethod` (`preferredMethod` / `usedMethod` / `supportedMethods`). */\nexport type VerificationMethod = components[\"schemas\"][\"VerificationMethod\"];\n\n/** Именованные способы подтверждения с неизменными wire-значениями OpenAPI. */\nexport enum VerificationMethodValues {\n /** Неопределённый способ подтверждения; допустим в OTP-flow для Email. */\n UnknownMethod = \"UnknownMethod\",\n /** Подтверждение кодом из SMS. */\n Sms = \"Sms\",\n /** Доставка кода через Telegram Gateway. */\n TelegramGateway = \"TelegramGateway\",\n /** Подтверждение через Flash Call. */\n FlashCall = \"FlashCall\",\n /** Подтверждение через MTS Mobile ID, с возможным SMS fallback. */\n MtsMobileId = \"MtsMobileId\",\n}\n\n/** Все способы подтверждения; список формируется из enum без повторения его членов. */\nexport const VerificationMethodValueList: readonly VerificationMethodValues[] = Object.values(VerificationMethodValues);\n\n/** Строго проверяет wire-значение без изменения регистра и пробелов. */\nexport function isVerificationMethod(value: string): value is VerificationMethodValues {\n return VerificationMethodValueList.some((method) => method === value);\n}\n\n/** Разбирает пользовательский ввод, игнорируя регистр и крайние пробелы. */\nexport function parseVerificationMethod(raw: string | undefined | null): VerificationMethodValues | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return VerificationMethodValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/** OpenAPI `TokenStatus` (`TokenResp.status`). */\nexport type TokenStatus = components[\"schemas\"][\"TokenStatus\"];\n\n/** Именованные серверные статусы для типизации и проверки переходов аутентификации. */\nexport enum TokenStatusValues {\n /** Аутентификация завершена, сервер выдал токены. */\n TokenReady = \"TokenReady\",\n /** Ожидание завершения Mobile ID; возможен повторный Pending после отправки SMS-кода. */\n Pending = \"Pending\",\n /** Та же Mobile ID auth-сессия продолжается через SMS fallback: Mobile ID не удалось завершить, требуется SMS-код. */\n AwaitingSmsCode = \"AwaitingSmsCode\",\n /** Терминальный отказ текущей auth-сессии. */\n Failed = \"Failed\",\n}\n\nexport const TokenStatusValueList: readonly TokenStatusValues[] = [\n TokenStatusValues.TokenReady,\n TokenStatusValues.Pending,\n TokenStatusValues.AwaitingSmsCode,\n TokenStatusValues.Failed,\n];\n\nexport function isTokenStatus(value: string): value is TokenStatusValues {\n return (TokenStatusValueList as readonly string[]).includes(value);\n}\n\nexport function parseTokenStatus(raw: string | undefined | null): TokenStatus | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return TokenStatusValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * Готовность токенов: `TokenReady` или отсутствие `status` (legacy).\n * `Pending` / `AwaitingSmsCode` / `Failed` → `false`.\n */\nexport function isTokenRespReadyStatus(status: TokenStatus | string | null | undefined): boolean {\n return status == null || status === TokenStatusValues.TokenReady;\n}\n\n/**\n * Провайдер captcha для `SendCodeReq.captchaType` / `CreateAuthSessionReq.captchaType`.\n * В OpenAPI поле — `string`; здесь известные wire-значения Identity / torrow-apps.\n */\nexport type AuthCaptchaType = \"YandexSmartCaptcha\" | \"GoogleRecaptcha\";\n\nexport const AuthCaptchaTypeValues = {\n YandexSmartCaptcha: \"YandexSmartCaptcha\",\n GoogleRecaptcha: \"GoogleRecaptcha\",\n} as const satisfies Record<string, AuthCaptchaType>;\n\nexport const AuthCaptchaTypeValueList: readonly AuthCaptchaType[] = [\n AuthCaptchaTypeValues.YandexSmartCaptcha,\n AuthCaptchaTypeValues.GoogleRecaptcha,\n];\n\nexport function isAuthCaptchaType(value: string): value is AuthCaptchaType {\n return (AuthCaptchaTypeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAuthCaptchaType(raw: string | undefined | null): AuthCaptchaType | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AuthCaptchaTypeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n\n/**\n * OAuth/API scopes для `TokenReq.scopes` / `RefreshReq.scopes`.\n * В OpenAPI — `string[]`; здесь известные значения Identity (`user_api`, `admin_api`, `offline_access`).\n */\nexport type AuthScope = \"user_api\" | \"admin_api\" | \"offline_access\";\n\nexport const AuthScopeValues = {\n UserApi: \"user_api\",\n AdminApi: \"admin_api\",\n OfflineAccess: \"offline_access\",\n} as const satisfies Record<string, AuthScope>;\n\nexport const AuthScopeValueList: readonly AuthScope[] = [\n AuthScopeValues.UserApi,\n AuthScopeValues.AdminApi,\n AuthScopeValues.OfflineAccess,\n];\n\n/** Дефолт для OTP / LoginTask в SDK и примерах. */\nexport const DefaultAuthScopes: readonly AuthScope[] = [AuthScopeValues.UserApi, AuthScopeValues.OfflineAccess];\n\nexport function isAuthScope(value: string): value is AuthScope {\n return (AuthScopeValueList as readonly string[]).includes(value);\n}\n\nexport function parseAuthScope(raw: string | undefined | null): AuthScope | undefined {\n const t = raw?.trim();\n if (!t) {\n return undefined;\n }\n\n return AuthScopeValueList.find((x) => x.toLowerCase() === t.toLowerCase());\n}\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `AnyoneAccess` — публичность «для любого» у item / карт лояльности. */\nexport type AnyoneAccess = Schemas[\"AnyoneAccess\"];\n\nexport const AnyoneAccessValues = {\n Unknown: \"UnknownAnyoneAccess\",\n None: \"NoneAnyoneAccess\",\n Read: \"Read\",\n ReadWrite: \"ReadWrite\",\n Denied: \"Denied\",\n} as const satisfies Record<string, AnyoneAccess>;\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Серверный признак доступности ресурсов события; SDK не рассчитывает бронирование. */\nexport type AvailableResources = OpenApiSchemas[\"AvailableResources\"];\n\n/** Именованные значения доступности ресурсов из общего wire-контракта. */\nexport enum AvailableResourcesValues {\n /** Сервер не определил доступность. */\n Unknown = \"Unknown\",\n /** Ресурсы доступны. */\n Free = \"Free\",\n /** Ресурсы забронированы. */\n Booked = \"Booked\",\n /** Ресурсы заняты. */\n Busy = \"Busy\",\n}\n","import type { CaseParticipantViewRead, CasePersonalInfoRead } from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nimport type {\n CaseItemDto,\n CreateCaseReqDto,\n AvailabilityTimeDto,\n CaseParticipantTypeDto,\n CaseParticipantDto,\n CaseParticipantFieldsDto,\n CaseParticipantStateDto,\n GetCaseParticipationCountRespDto,\n CheckInReqDto,\n CheckInPropsDto,\n BookResourcesForMeReqDto,\n BookResourcesForOthersReqDto,\n ChangeMoneyReceiveReqDto,\n CancelCaseParticipationReqDto,\n ApproveCaseParticipationReqDto,\n PatchCaseReqDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowChildItemCreateOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nexport type { DeleteResponse, ObjectInfo, ResourceView } from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Внутренний wire-снимок события для patch; выбранные nullable поля не подготавливаются до PUT. */\nexport type CaseItemWire = NormalizedPublicity<CaseItemDto>;\n\nexport type CaseItem = TorrowItemFromDto<\n Omit<CaseItemDto, \"personalInfo\" | \"priceInfo\"> & {\n /** Персональные сведения с предметными ресурсами билета и оплаты. */\n personalInfo?: CasePersonalInfoRead;\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n }\n>;\n\n/** Частичное изменение конфигурации события. Общие name/image — {@link TorrowItemPatchFields}; полная замена ценовой области — {@link ItemPricePatchFields}. Пропуск сохраняет поле, вложенные значения заменяются целиком. Состояние/участие/бронь изменяются отдельными операциями. */\nexport type CaseItemPatch = TorrowItemPatchFields &\n ItemPricePatchFields & {\n /** Начало события; Date, null снимает дату; календарную допустимость проверяет сервер. */\n beginDate?: Date | null;\n /** Окончание события; Date, null снимает дату. */\n endDate?: Date | null;\n /** Описание без trim; null/пустая строка очищают текст. */\n description?: string | null;\n /** Идентификатор места; непустая строка, null снимает ссылку. */\n placeId?: string | null;\n /** Текст места; null/пустая строка очищают текст. */\n place?: string | null;\n /** Вид планирования, кроме UnknownTimeType; ограничения перехода проверяет сервер. */\n caseType?: Exclude<NonNullable<CaseItem[\"caseType\"]>, \"UnknownTimeType\">;\n /** Полная замена расписания; отсутствующий `rid` диапазона создаётся SDK, null снимает расписание. */\n schedule?: CaseItem[\"schedule\"] | null;\n /** Окно открытия регистрации в секундах; int32/null, null снимает ограничение. */\n registrationOpen?: number | null;\n /** Окно закрытия регистрации в секундах; int32/null, null снимает ограничение. */\n registrationClose?: number | null;\n /** Визитка события целиком; null запрещён, поля не нормализуются как Contact. */\n visitCard?: CaseItem[\"visitCard\"];\n /** Срок удержания брони в секундах; int32/null, null снимает значение. */\n bookingDuration?: number | null;\n /** Максимальная вместимость; int32/null, ноль сохраняется. */\n maxConsumerQuantity?: number | null;\n /** Дополнительно зарезервированные вручную места; int32/null, отдельно от consumersCount. */\n bookingConsumerQuantity?: number | null;\n /** Процент загрузки исполнителя; конечное число/null, предметные лимиты проверяет сервер. */\n executorUsagePercent?: number | null;\n /** Признак доступности ресурсов; Unknown — серверный sentinel отсутствия; null запрещён. */\n availableResources?: CaseItem[\"availableResources\"];\n /** Необходимость одобрения; null снимает настройку, false сохраняется. */\n needApproval?: boolean | null;\n /** Генерация одиночных событий; null снимает настройку без удаления пропущенного расписания. */\n createSingleCases?: boolean | null;\n /** Полная замена правил регистрации; null снимает правила. */\n checkinPermission?: CaseItem[\"checkinPermission\"] | null;\n /** Скрытие события; null снимает настройку, false сохраняется. */\n hidden?: boolean | null;\n /** Приложения целиком; []/null очищают список. */\n appendixList?: CaseItem[\"appendixList\"];\n /** Полная замена требований к участнику; null снимает требования. */\n participateFieldRequirements?: CaseItem[\"participateFieldRequirements\"] | null;\n /** Группы ресурсов целиком; []/null очищают список, бронирование не выполняется SDK. */\n resourceGroupList?: CaseItem[\"resourceGroupList\"];\n /** Приоритет обработки; конечное число/null, null снимает значение. */\n priority?: number | null;\n /** Идентификатор группы клиентов; непустая строка, null снимает ссылку. */\n clientGroupId?: string | null;\n /**\n * Автоматизации целиком; []/null очищают список.\n * SDK заполняет только отсутствующий `rid`; согласованную конфигурацию действия задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно по live-проверке. Проверенный Reminder содержит\n * trigger, notificationProperties и caseParticipantFilter; требования других типов могут отличаться.\n * См. cases/README.md и examples/node/item-cases/cases-patch.ts.\n */\n caseActionList?: CaseItem[\"caseActionList\"];\n /** Правила начислений лояльности целиком; []/null очищают список. */\n loyaltyTransactionPropertiesList?: CaseItem[\"loyaltyTransactionPropertiesList\"];\n };\n/** Нормализованная публичная проекция серверной оболочки создания события. */\ntype CreateCaseReqBase = NormalizedPublicity<CreateCaseReqDto>;\n\n/**\n * Оболочка основного сценария создания события, производная от серверного\n * {@link CreateCaseReqDto}. Сохраняет опциональные напоминания, календарь,\n * параметры check-in и дороги, а также тип участника из source DTO. Вложенный\n * `caseItem` остаётся опциональным предметным телом, но его начальная публичность\n * задаётся только через create-options.\n * Для `caseItem.caseActionList` применяются требования {@link CaseItemForCreateOrUpdate}:\n * генерация RID не дополняет бизнес-конфигурацию действия.\n */\nexport type CreateCaseReq = Omit<CreateCaseReqBase, \"caseItem\"> & {\n /** Предметное тело события из source DTO без `publicityType`; отсутствие не синтезирует item в wrapper. */\n caseItem?: Omit<NonNullable<CreateCaseReqBase[\"caseItem\"]>, \"publicityType\">;\n};\nexport type AvailabilityTime = AvailabilityTimeDto;\nexport type CaseParticipantType = CaseParticipantTypeDto;\n\n/** Параметры создания события через {@link CasesFacade.createCaseItem}. */\nexport interface CreateCaseItemOptions extends TorrowChildItemCreateOptions {\n /** Отметить создаваемое событие как требующее check-in текущего пользователя. */\n isNeedToCheckInMySelf?: boolean;\n /** Доступность времени участника для создаваемого события. */\n availabilityTime?: AvailabilityTime | null;\n /** Время на дорогу в секундах. */\n roadTime?: number | null;\n /** Календарь, в который добавляется событие. */\n calendarId?: string | null;\n /** Роль текущего участника создаваемого события. */\n caseParticipantType?: CaseParticipantType | null;\n}\n\n/** Параметры полного обновления события через {@link CasesFacade.update}. */\nexport interface UpdateCaseItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется событие. */\n profileId?: string | null;\n /** Токен гостевого доступа к событию. */\n securityToken?: string | null;\n}\n\n/**\n * Участник кейса. В сгенерированных типах только **`loyaltyCardId`**.\n * Legacy `loyalityCardId` остаётся в `docs/torrow-swagger.json` (wire для старых клиентов),\n * но вырезается обёрткой codegen (`scripts/openapi-codegen.mjs` → `stripLegacyWireAliases`).\n * Сервер игнорирует опечатку при записи; в JSON ответов поле ещё может прийти — не использовать.\n * Проверка против живого API — отдельно (integration / ручные тесты).\n */\nexport type CaseParticipant = CaseParticipantDto;\nexport type CaseParticipantView = CaseParticipantViewRead;\nexport type CaseParticipantFields = CaseParticipantFieldsDto;\nexport type CaseParticipantState = CaseParticipantStateDto;\nexport type GetCaseParticipationCountResp = GetCaseParticipationCountRespDto;\nexport type CheckInReq = CheckInReqDto;\nexport type CheckInProps = CheckInPropsDto;\nexport type BookResourcesForMeReq = BookResourcesForMeReqDto;\nexport type BookResourcesForOthersReq = BookResourcesForOthersReqDto;\nexport type ChangeMoneyReceiveReq = ChangeMoneyReceiveReqDto;\nexport type ApproveCaseParticipationReq = ApproveCaseParticipationReqDto;\nexport type CancelCaseParticipationReq = CancelCaseParticipationReqDto;\nexport type PatchCaseReq = PatchCaseReqDto;\nexport type CaseState = CaseItem[\"caseState\"];\nexport type CaseType = CaseItem[\"caseType\"];\nexport const CaseStateValues = {\n Unknown: \"UnknownCaseState\",\n Verifying: \"Verifying\",\n Waiting: \"Waiting\",\n Processing: \"Processing\",\n Preparing: \"Preparing\",\n Completed: \"Completed\",\n Closed: \"Closed\",\n Rejected: \"Rejected\",\n Canceled: \"Canceled\",\n TimeControlled: \"TimeControlled\",\n TaskNotCompleted: \"TaskNotCompleted\",\n TaskCompleted: \"TaskCompleted\",\n} as const satisfies Record<string, NonNullable<CaseState>>;\nexport const CaseTypeValues = {\n Unknown: \"UnknownTimeType\",\n Time: \"Time\",\n RepeatedTime: \"RepeatedTime\",\n Today: \"Today\",\n Week: \"Week\",\n Later: \"Later\",\n Date: \"Date\",\n State: \"State\",\n} as const satisfies Record<string, NonNullable<CaseType>>;\n/**\n * Тело создания и полного обновления события.\n * В `caseActionList` приложение задаёт согласованную конфигурацию выбранного типа действия;\n * SDK заполняет только отсутствующий `rid`. Одного `{ type: \"RequestFeedback\" }` недостаточно\n * по результатам live-проверки. Проверенный Reminder с trigger, notificationProperties и\n * caseParticipantFilter приведён в cases/README.md и examples/node/item-cases/cases-patch.ts;\n * требования других типов действий могут отличаться.\n */\nexport type CaseItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<CaseItemDto>>;\n","import type { GroupStatusRead } from \"../common/read-models.js\";\nimport type {\n ContactItemDto,\n SendCommunicationCodeReqDto,\n SendCommunicationCodeRespDto,\n VerifyCommunicationCodeReqDto,\n VerifyCommunicationCodeRespDto,\n ActivityStatusDto,\n ContactPropertiesDto,\n UpdateContactPropertiesRespDto,\n UpdateMasterInfoReqDto,\n FeedbackOptionsDto,\n PersonalReminderDto,\n UpdateItemAccountsReqDto,\n UpdateItemGroupsReqDto,\n UpdatePersonalListOrderReqDto,\n UpdatePersonalListOrderRespDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { TorrowItemGetOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nimport type { TorrowItem, TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nexport type {\n DeleteResponse,\n ExcludeResp,\n IncludeExcludeResp,\n NotificationWay,\n ObjectInfo,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения контакта по идентификатору. */\nexport type GetContactOptions = TorrowItemGetOptions;\n\n/** Параметры полного обновления контакта. */\nexport interface UpdateContactItemOptions extends TorrowItemUpdateOptions {\n /** Токен гостевого доступа к контакту; `null` сохраняет wire-семантику query. */\n securityToken?: string | null;\n}\n\nexport type ContactItem = TorrowItemFromDto<Omit<ContactItemDto, \"loyaltyCard\">> & {\n /** Карта лояльности с подготовленными общими read-полями; отсутствие карточки сохраняется. */\n loyaltyCard?: TorrowItem;\n};\n\n/** Канал связи для частичной записи: пользовательские поля {@link Communication}, без серверных checkDate/valueForSearch; rid сохраняет идентичность, checkState по умолчанию Unchecked. */\nexport type ContactCommunicationPatch = Omit<Communication, \"checkDate\" | \"valueForSearch\">;\n\n/** Частичное изменение обычного или профильного Contact. Общие name/image наследуют {@link TorrowItemPatchFields}; пропуск сохраняет поле, вложенное значение заменяется целиком. */\nexport interface ContactItemPatch extends TorrowItemPatchFields {\n /** Полная замена адресов; []/null удаляют адреса, отсутствующий rid создаётся SDK. */\n addresses?: Address[] | null;\n /** Дата рождения; null удаляет дату. */\n birthday?: Date | null;\n /** Полная замена каналов; []/null очищают, серверные сведения проверки не принимаются на вход. */\n communications?: ContactCommunicationPatch[] | null;\n /** Памятные даты целиком; []/null очищают, отсутствующий rid создаётся SDK. */\n dates?: MemorableDate[] | null;\n /** Имя человека; null/пустая строка очищают текст без нормализации. */\n firstName?: string | null;\n /** Фамилия; null/пустая строка очищают текст. */\n lastName?: string | null;\n /** Отчество; null/пустая строка очищают текст. */\n middleName?: string | null;\n /** Название компании; null/пустая строка очищают текст. */\n company?: string | null;\n /** Должность; null/пустая строка очищают текст. */\n position?: string | null;\n /** Описание контакта; null/пустая строка очищают текст. */\n description?: string | null;\n /** Пол по OpenAPI; UnknownGender означает неизвестное значение, null не принимается. */\n gender?: Gender;\n /** Полная замена ссылок на фотографии; []/null очищают, URL и metadata файла не записываются. */\n photos?: TorrowItemPatchImage[] | null;\n /** Визитка целиком с нормализацией трёх слотов; null запрещён, для очистки передать три явно пустых значения. */\n visitCard?: ContactVisitCard;\n}\n\n/** Элемент `ContactItem.addresses` (ответ GET). */\nexport type Address = NonNullable<ContactItem[\"addresses\"]>[number];\n\n/** Элемент `ContactItem.communications` (ответ GET, полная модель). */\nexport type Communication = NonNullable<ContactItem[\"communications\"]>[number];\n\n/** `communications[]` в теле `POST`/`PUT` контакта: без read-only `checkDate`; отсутствующий `rid` создаётся SDK, `checkState` по умолчанию `Unchecked`. */\nexport type CommunicationForCreateOrUpdate = Omit<Communication, \"checkDate\">;\n\n/** Элемент `ContactItem.dates`. */\nexport type MemorableDate = NonNullable<ContactItem[\"dates\"]>[number];\n\n/** `ContactItem.rating`. */\nexport type Rating = NonNullable<ContactItem[\"rating\"]>;\n\n/** `ContactItem.visitCard` (3 слота отображения). */\nexport type ContactVisitCard = NonNullable<ContactItem[\"visitCard\"]>;\n\n/** Элемент `ContactVisitCard.fields`. */\nexport type ContactVisitCardField = NonNullable<NonNullable<ContactVisitCard[\"fields\"]>[number]>;\n\n/** `ContactItem.personalInfo`. */\nexport type ContactPersonalInfo = NonNullable<ContactItem[\"personalInfo\"]>;\n\n/** `ContactItem.profileType`. */\nexport type ProfileType = NonNullable<ContactItem[\"profileType\"]>;\n\n/** `ContactItem.registerInfo`. */\nexport type RegisterInfo = NonNullable<ContactItem[\"registerInfo\"]>;\n\nexport type Gender = NonNullable<ContactItem[\"gender\"]>;\nexport type CommunicationType = NonNullable<Communication[\"type\"]>;\n\nexport const GenderValues = {\n Unknown: \"UnknownGender\",\n Male: \"Male\",\n Female: \"Female\",\n Other: \"OtherGender\",\n} as const satisfies Record<string, Gender>;\n\nexport const CommunicationTypeValues = {\n Unknown: \"UnknownCommunicationType\",\n Phone: \"Phone\",\n Sms: \"Sms\",\n Email: \"Email\",\n WebSite: \"WebSite\",\n Telegram: \"Telegram\",\n WhatsApp: \"WhatsApp\",\n Viber: \"Viber\",\n Facebook: \"Facebook\",\n Instagram: \"Instagram\",\n Vkontakte: \"Vkontakte\",\n Odnoklassniki: \"Odnoklassniki\",\n Skype: \"Skype\",\n Youtube: \"Youtube\",\n Twitter: \"Twitter\",\n LinkedIn: \"LinkedIn\",\n Max: \"Max\",\n Other: \"Other\",\n} as const satisfies Record<string, CommunicationType>;\n\nexport const ProfileTypeValues = {\n Unknown: \"UnknownProfile\",\n None: \"None\",\n MyProfile: \"MyProfile\",\n AnyProfile: \"AnyProfile\",\n CopyProfile: \"CopyProfile\",\n} as const satisfies Record<string, ProfileType>;\nexport type SendCommunicationCodeReq = SendCommunicationCodeReqDto;\nexport type SendCommunicationCodeResp = SendCommunicationCodeRespDto;\nexport type VerifyCommunicationCodeReq = VerifyCommunicationCodeReqDto;\nexport type VerifyCommunicationCodeResp = VerifyCommunicationCodeRespDto;\nexport type ActivityStatus = ActivityStatusDto;\nexport type ContactProperties = ContactPropertiesDto;\nexport type UpdateContactPropertiesResp = UpdateContactPropertiesRespDto;\nexport type UpdateMasterInfoReq = UpdateMasterInfoReqDto;\nexport type FeedbackOptions = FeedbackOptionsDto;\nexport type PersonalReminder = PersonalReminderDto;\nexport type { PublicityType } from \"../common/publicity-type.js\";\nexport type GroupStatus = GroupStatusRead;\nexport type UpdateItemAccountsReq = UpdateItemAccountsReqDto;\nexport type UpdateItemGroupsReq = UpdateItemGroupsReqDto;\nexport type UpdatePersonalListOrderReq = UpdatePersonalListOrderReqDto;\nexport type UpdatePersonalListOrderResp = UpdatePersonalListOrderRespDto;\n/**\n * Тело `POST`/`PUT` **`/api/v1/contacts`** (обычный контакт).\n * `communications` — {@link CommunicationForCreateOrUpdate} (без read-only `checkDate`).\n * В `addresses`, `communications` и `dates` SDK создаёт отсутствующий `rid`,\n * сохраняя явно переданный валидный 24-hex идентификатор.\n */\nexport type ContactItemForCreateOrUpdate = Omit<\n TorrowItemForCreateOrUpdate<TorrowItemFromDto<ContactItemDto>>,\n \"communications\"\n> & {\n communications?: CommunicationForCreateOrUpdate[] | null;\n};\n","import type { NoteItemDto, NoteTypeDto } from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { TorrowItemGetOptions } from \"../common/item-crud-options.js\";\nexport type {\n DeleteResponse,\n FileInfo,\n ObjectInfo,\n PutUrlResp,\n UpdateFileIdResp,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения заметки по идентификатору. */\nexport type GetNoteOptions = TorrowItemGetOptions;\n\nexport type NoteItem = Omit<TorrowItemFromDto<NoteItemDto>, \"files\" | \"data\"> & {\n /** Исходный текст; серверные null и отсутствие поля читаются как \"\" независимо от полноты карточки. */\n data: string;\n /** Прочитанные вложения; серверный null удаляет optional-поле, явно полученный [] сохраняется. */\n files?: NonNullable<NoteItemDto[\"files\"]>;\n};\n/** Три формата публичного SDK; остальные серверные строки при чтении становятся Text. */\nexport type NoteType = NoteTypeDto;\nexport type ImagePreviewSize = NonNullable<NoteItem[\"imagePreviewSize\"]>;\n/** Поддерживаемые форматы заметок; публичный NoteType также принимает строковые литералы. */\nexport enum NoteTypeValues {\n /** HTML-разметка в data. */\n Html = \"Html\",\n /** Исходный Markdown в data. */\n Markdown = \"Markdown\",\n /** Текст либо нормализованный формат прочитанной серверной заметки. */\n Text = \"Text\",\n}\n\nexport const ImagePreviewSizeValues = {\n Undefined: \"Undefined\",\n Hidden: \"Hidden\",\n Small: \"Small\",\n Medium: \"Medium\",\n Large: \"Large\",\n SmallSlider: \"SmallSlider\",\n MediumSlider: \"MediumSlider\",\n LargeSlider: \"LargeSlider\",\n} as const satisfies Record<string, ImagePreviewSize>;\n\n/** Предметное тело создания/полного обновления заметки; публичность создания задаётся в options. Поле meta.version сохраняет optimistic concurrency при update. */\nexport type NoteItemForCreateOrUpdate = Omit<TorrowItemForCreateOrUpdate<NoteItem>, \"files\" | \"data\"> &\n Pick<NoteItem, \"meta\"> & {\n /** Обязательная точная строка для create/update, включая \"\"; null/undefined и пропуск запрещены. */\n data: string;\n /** Полная запись сохраняет wire-контракт вложений: null допустим наряду с массивом. */\n files?: NoteItemDto[\"files\"];\n };\n\n/** Частичное изменение заметки; общие name/image описаны в TorrowItemPatchFields. */\nexport interface NoteItemPatch extends TorrowItemPatchFields {\n /** Новый формат Html, Markdown или Text; другие значения отклоняются до первого GET. */\n noteType?: NoteType;\n /** Исходный текст без trim/parse; \"\" очищает, пропуск сохраняет wire-содержимое. null/undefined запрещены. */\n data?: string;\n /** Полная замена ссылок на загруженные файлы; [] снимает вложения, пропуск сохраняет их. */\n files?: TorrowItemPatchImage[];\n /** Размер превью; Undefined снимает настройку. Не подставляет create default Small. */\n imagePreviewSize?: ImagePreviewSize;\n}\n","import type {\n ItemViewSortConditionDto as ItemViewSortCondition,\n ParticipantStateDto as ParticipantState,\n ParticipantTypeDto as ParticipantType,\n} from \"../../schema/openapi-dto-aliases.js\";\n\nexport type { ItemViewSortCondition, ParticipantState, ParticipantType };\n\n/** Wire-значения OpenAPI `ItemViewSortCondition` для списков и views. */\nexport const ItemViewSortConditionValues = {\n OrderAsc: \"OrderAsc\",\n OrderDesc: \"OrderDesc\",\n LastModifiedAsc: \"LastModifiedAsc\",\n LastModifiedDesc: \"LastModifiedDesc\",\n OrderAscLastModifiedAsc: \"OrderAscLastModifiedAsc\",\n OrderDescLastModifiedAsc: \"OrderDescLastModifiedAsc\",\n OrderAscLastModifiedDesc: \"OrderAscLastModifiedDesc\",\n OrderDescLastModifiedDesc: \"OrderDescLastModifiedDesc\",\n LastModifiedAscOrderAsc: \"LastModifiedAscOrderAsc\",\n LastModifiedAscOrderDesc: \"LastModifiedAscOrderDesc\",\n LastModifiedDescOrderAsc: \"LastModifiedDescOrderAsc\",\n LastModifiedDescOrderDesc: \"LastModifiedDescOrderDesc\",\n} as const satisfies { [Value in ItemViewSortCondition]: Value };\n\n/** Все допустимые условия сортировки представлений в стабильном порядке. */\nexport const ItemViewSortConditionValueList: readonly ItemViewSortCondition[] =\n Object.values(ItemViewSortConditionValues);\n\nexport function isItemViewSortCondition(value: string): value is ItemViewSortCondition {\n return (ItemViewSortConditionValueList as readonly string[]).includes(value);\n}\n\n/** Shared query for personallist endpoints (contacts, notes, services, cases). */\nexport type PersonalListQuery = {\n take?: number | null;\n skip?: number | null;\n lmfrom?: Date | null;\n lmto?: Date | null;\n includeDeleted?: boolean | null;\n sort?: ItemViewSortCondition | null;\n profileId?: string | null;\n onlyWithEmptyProfile?: boolean | null;\n participantStateList?: ParticipantState[] | null;\n participantTypeList?: ParticipantType[] | null;\n};\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `ParticipationFieldType` — тип поля контакта при записи. */\nexport type ParticipationFieldType = Schemas[\"ParticipationFieldType\"];\n\nexport const ParticipationFieldTypeValues = {\n Unknown: \"UnknownParticipationField\",\n FullName: \"FullName\",\n LastName: \"LastName\",\n FirstName: \"FirstName\",\n MiddleName: \"MiddleName\",\n Company: \"Company\",\n Position: \"Position\",\n MainPhone: \"MainPhone\",\n VerifiedMainPhone: \"VerifiedMainPhone\",\n AdditionalPhone: \"AdditionalPhone\",\n MainEmail: \"MainEmail\",\n VerifiedMainEmail: \"VerifiedMainEmail\",\n AdditionalEmail: \"AdditionalEmail\",\n Address: \"Address\",\n AddressLocation: \"AddressLocation\",\n PaymentAccount: \"PaymentAccount\",\n CustomString: \"CustomString\",\n CustomBoolean: \"CustomBoolean\",\n CustomInt32: \"CustomInt32\",\n CustomDouble: \"CustomDouble\",\n CustomMoney: \"CustomMoney\",\n CustomDate: \"CustomDate\",\n CustomTime: \"CustomTime\",\n CustomDateTime: \"CustomDateTime\",\n} as const satisfies Record<string, ParticipationFieldType>;\n\n/** OpenAPI `ParticipationFieldRequirementType` — обязательность поля. */\nexport type ParticipationFieldRequirementType = Schemas[\"ParticipationFieldRequirementType\"];\n\nexport const ParticipationFieldRequirementTypeValues = {\n Unknown: \"UnknownParticipationFieldRequirement\",\n None: \"NoneRequirement\",\n Optional: \"OptionalField\",\n Required: \"RequiredField\",\n} as const satisfies Record<string, ParticipationFieldRequirementType>;\n","import type {\n OrderRespRead,\n SearchServiceResourcesRespRead,\n GetServiceWorkloadInfoRespRead,\n} from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nimport type { ServiceImplicitTagParams } from \"../common/implicit-tag-params.js\";\nimport type {\n ServiceItemApiDto,\n CreateOrderReqDto,\n SearchServiceResourcesReqDto,\n StepDescriptionDto,\n SessionDurationPropertiesDto,\n GetServiceWorkloadInfoRequestDto,\n GetTimetableStatisticsRequestDto,\n GetTimetableStatisticsResponseDto,\n TimetableStatisticsRespDto,\n GetCheckInScheduleReqDto,\n GetCheckInScheduleRespDto,\n GetReCheckInScheduleReqDto,\n UpdateOrderReqDto,\n UpdateOrderInfoReqDto,\n ChangeOrderServiceReqDto,\n} from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nexport type {\n DeleteResponse,\n ItemViewSortCondition,\n ObjectInfo,\n ResourceView,\n TimetableCase,\n TimetableDetailsVisibility,\n TimetableFilter,\n} from \"../../schema/sdk-shared-public-types.js\";\n\n/**\n * Параметры полного обновления услуги. Унаследованный `isNeedAnnouncement: false`\n * не отключает серверное обновление персональных связей.\n */\nexport interface UpdateServiceItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется услуга; `null` сохраняет wire-семантику query. */\n profileId?: string | null;\n}\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\nexport type ServiceItemApi = NormalizedPublicity<ServiceItemApiDto>;\nexport type ResourceGroup = NonNullable<ServiceItemApi[\"resourceGroupList\"]>[number];\nexport type BookingProperties = NonNullable<ResourceGroup[\"bookingProperties\"]>;\nexport type CreateOrderReq = CreateOrderReqDto;\nexport type OrderResp = OrderRespRead;\nexport type SearchServiceResourcesReq = SearchServiceResourcesReqDto;\nexport type SearchServiceResourcesResp = SearchServiceResourcesRespRead;\nexport type StepDescription = StepDescriptionDto;\nexport type SessionDurationProperties = SessionDurationPropertiesDto;\nexport type GetServiceWorkloadInfoRequest = GetServiceWorkloadInfoRequestDto;\nexport type GetServiceWorkloadInfoResp = GetServiceWorkloadInfoRespRead;\nexport type GetTimetableStatisticsRequest = GetTimetableStatisticsRequestDto;\nexport type GetTimetableStatisticsResponse = GetTimetableStatisticsResponseDto;\nexport type TimetableStatisticsResp = TimetableStatisticsRespDto;\nexport type GetCheckInScheduleReq = GetCheckInScheduleReqDto;\nexport type GetCheckInScheduleResp = GetCheckInScheduleRespDto;\nexport type GetReCheckInScheduleReq = GetReCheckInScheduleReqDto;\nexport type UpdateOrderReq = UpdateOrderReqDto;\nexport type UpdateOrderInfoReq = UpdateOrderInfoReqDto;\nexport type ChangeOrderServiceReq = ChangeOrderServiceReqDto;\n/**\n * Публичная доменная структура для настройки поведения услуги.\n * Внутри SDK маппится в `service.tags`.\n * orderName задаёт название для отображения в приложении, не серверное имя создаваемого заказа.\n */\nexport type ServiceBehaviorSettings = ServiceImplicitTagParams;\nexport type {\n ServiceBehaviorSettingsIssue,\n ServiceBehaviorSettingsState,\n ServiceBehaviorSettingsUpdateOptions,\n ServiceBehaviorSettingsUpdateResult,\n} from \"./behavior-settings.js\";\n\n/**\n * SDK-тип услуги: OpenAPI `ServiceItem` + удобный доменный слой.\n * `behaviorSettings` сериализуется/десериализуется через `tags` внутри SDK.\n */\nexport type ServiceItem = TorrowItemFromDto<\n Omit<\n ServiceItemApi,\n | \"priceInfo\"\n | \"executorIdList\"\n | \"resourceGroupList\"\n | \"appendixList\"\n | \"stepDescriptionList\"\n | \"caseActionList\"\n | \"loyaltyTransactionPropertiesList\"\n >\n> & {\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n /** Профили исполнителей; серверный null удаляет optional-поле, явный [] сохраняется. */\n executorIdList?: NonNullable<ServiceItemApi[\"executorIdList\"]>;\n /** Группы ресурсов; серверный null удаляет optional-поле, вложенные коллекции групп сохраняются. */\n resourceGroupList?: NonNullable<ServiceItemApi[\"resourceGroupList\"]>;\n /** Приложения услуги; серверный null удаляет optional-поле, явный [] сохраняется. */\n appendixList?: NonNullable<ServiceItemApi[\"appendixList\"]>;\n /** Шаги регистрации; серверный null удаляет optional-поле, параметры шагов не изменяются. */\n stepDescriptionList?: NonNullable<ServiceItemApi[\"stepDescriptionList\"]>;\n /**\n * Действия события; серверный null удаляет optional-поле.\n * При записи SDK заполняет только отсутствующий `rid`: согласованную конфигурацию действия задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно: такой объект отклонён сервером в live-проверке.\n * Проверенный Reminder содержит trigger, notificationProperties и caseParticipantFilter;\n * требования других типов могут отличаться. См. services/README.md и examples/node/item-services/services-patch.ts.\n */\n caseActionList?: NonNullable<ServiceItemApi[\"caseActionList\"]>;\n /** Правила лояльности; серверный null удаляет optional-поле, вложенные транзакции сохраняются. */\n loyaltyTransactionPropertiesList?: NonNullable<ServiceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n /** Настройки поведения, декодированные из hash-tags услуги. */\n behaviorSettings?: ServiceBehaviorSettings;\n};\n/**\n * Тело создания и полного обновления услуги.\n * В `caseActionList` приложение задаёт согласованную конфигурацию выбранного типа действия;\n * SDK заполняет только отсутствующий `rid`. Одного `{ type: \"RequestFeedback\" }` недостаточно\n * по результатам live-проверки. Проверенный Reminder с trigger, notificationProperties и\n * caseParticipantFilter приведён в services/README.md и examples/node/item-services/services-patch.ts;\n * требования других типов действий могут отличаться.\n */\nexport type ServiceItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<ServiceItemApi>> & {\n /** Настройки поведения, сериализуемые в hash-tags услуги. */\n behaviorSettings?: ServiceBehaviorSettings;\n};\n/** Полный update услуги: атрибуты create/update без numeratorInfo; meta сохраняет CAS-версию самого item, не персональной связи. Полный GET-снимок допускается структурно, runtime отбрасывает numeratorInfo. */\nexport type ServiceItemForUpdate = Omit<ServiceItemForCreateOrUpdate, \"numeratorInfo\"> & Pick<ServiceItem, \"meta\">;\n\n/**\n * Частичное изменение услуги; name/image наследуют назначение {@link TorrowItemPatchFields}.\n * priceInfo заменяет всю ценовую область согласно ItemPricePatchFields: пропуск сохраняет цены,\n * null и {settings:[]} полностью очищают. SDK отправляет очистку как priceInfo:null без старого root alias.\n * Непустой settings заменяется целиком; для удаления записи передайте остальные цены с расписаниями и RID.\n * См. examples/node/item-services/services-patch-price.ts для двух способов очистки и независимого readback.\n * Остальные поля ниже описывают полную замену выбранного значения.\n */\nexport type ServiceItemPatch = TorrowItemPatchFields &\n ItemPricePatchFields & {\n /** Описание услуги; null/empty очищает, пропуск сохраняет. */\n description?: string | null;\n /** Идентификатор места оказания услуги; null снимает привязку. */\n placeId?: string | null;\n /** Текстовое описание места; null/empty очищает. */\n place?: string | null;\n /** Полное расписание; вложенные диапазоны заменяются целиком, отсутствующий `rid` создаётся SDK, null снимает структуру. */\n schedule?: NonNullable<ServiceItemApi[\"schedule\"]> | null;\n /** Длительность бронирования в секундах; null снимает ограничение. */\n bookingDuration?: number | null;\n /** Числовой вид расписания; null снимает настройку. */\n timetableView?: number | null;\n /** Граница закрытия регистрации по wire-контракту; null снимает. */\n registrationClose?: number | null;\n /** Граница открытия регистрации по wire-контракту; null снимает. */\n registrationOpen?: number | null;\n /** Максимальное число клиентов; null снимает лимит. */\n maxConsumerQuantity?: number | null;\n /** Полная замена списка профилей исполнителей; [] очищает. */\n executorIdList?: NonNullable<ServiceItemApi[\"executorIdList\"]>;\n /** Требование одобрения; false — значение, null снимает настройку. */\n needApproval?: boolean | null;\n /** Шаг сетки времени; null снимает настройку. */\n timeAlignment?: number | null;\n /** Лимит одновременно действующих заказов услуги; null снимает. */\n orderQuote?: number | null;\n /** Пауза между слотами в секундах; null снимает. */\n marginTime?: number | null;\n /** Доля использования исполнителя по wire-контракту; null снимает. */\n executorUsagePercent?: number | null;\n /** Опорная дата первой недели; Date сериализуется штатным SDK, null снимает. */\n firstWeekDate?: Date | null;\n /** Группа допустимых клиентов; null снимает привязку. */\n clientGroupId?: string | null;\n /** Полный список ресурсных групп; [] очищает, группы не сливаются по id. */\n resourceGroupList?: NonNullable<ServiceItemApi[\"resourceGroupList\"]>;\n /** Полная структура запрашиваемых сведений участника; null снимает. */\n participateFieldRequirements?: NonNullable<ServiceItemApi[\"participateFieldRequirements\"]> | null;\n /** Полный список приложений; [] очищает. */\n appendixList?: NonNullable<ServiceItemApi[\"appendixList\"]>;\n /** Полная конфигурация длительности сессии; null снимает. */\n sessionDurationProperties?: NonNullable<ServiceItemApi[\"sessionDurationProperties\"]> | null;\n /** Автоматический check-in всех связанных событий; false выключает, null не принимается. */\n checkInAllCases?: boolean;\n /** Полный список шагов регистрации; [] очищает. */\n stepDescriptionList?: NonNullable<ServiceItemApi[\"stepDescriptionList\"]>;\n /** Подпись основной кнопки; null/empty снимает. */\n buttonName?: string | null;\n /** Полная конфигурация доступа и минимального интервала check-in; null снимает. */\n checkinPermission?: NonNullable<ServiceItemApi[\"checkinPermission\"]> | null;\n /**\n * Полный список автоматических действий события; [] очищает.\n * SDK заполняет только отсутствующий `rid`; trigger, уведомления и фильтр участников задаёт приложение.\n * Одного `{ type: \"RequestFeedback\" }` недостаточно по live-проверке. Проверенный Reminder:\n * services/README.md и examples/node/item-services/services-patch.ts. Требования других типов могут отличаться.\n */\n caseActionList?: NonNullable<ServiceItemApi[\"caseActionList\"]>;\n /** Полный список правил лояльности; [] очищает, транзакции SDK не вычисляет. */\n loyaltyTransactionPropertiesList?: NonNullable<ServiceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n };\n\nexport type ServiceResourceStepUsageType = Extract<\n NonNullable<ResourceGroup[\"usageType\"]>,\n \"Specification\" | \"Rent\" | \"Sale\"\n>;\n\nexport interface AddServiceResourceGroupInput {\n key: string;\n groupId?: string;\n groupName: string;\n minResources?: number | null;\n maxResources?: number | null;\n maxTotalAmount?: number | null;\n quickFilterTags?: string[] | null;\n bookingProperties?: BookingProperties | null;\n}\n\nexport interface AddServiceResourceStepInput extends AddServiceResourceGroupInput {\n usageType: ServiceResourceStepUsageType;\n stepOrder?: number;\n description?: string | null;\n autoChoiceResource?: boolean;\n hiddenStep?: boolean;\n hideResourceDetail?: boolean;\n}\n\nexport type AddServicePaymentGroupInput = AddServiceResourceGroupInput;\n\nexport interface ServiceBuildResult {\n body: ServiceItemForCreateOrUpdate;\n resourceGroupIds: Record<string, string>;\n}\n\nexport type SessionDurationType = NonNullable<SessionDurationProperties[\"sessionDurationType\"]>;\nexport type TimeSelectionType = NonNullable<SessionDurationProperties[\"timeSelectionType\"]>;\nexport type StateManagementType = NonNullable<SessionDurationProperties[\"stateManagementType\"]>;\nexport type SessionPrecisionType = NonNullable<SessionDurationProperties[\"sessionPrecisionType\"]>;\n\nexport const SessionDurationTypeValues = {\n Unknown: \"UnknownSessionDurationType\",\n None: \"SessionDurationNone\",\n Custom: \"Custom\",\n Constant: \"Constant\",\n Sum: \"Sum\",\n} as const satisfies Record<string, SessionDurationType>;\n\nexport const TimeSelectionTypeValues = {\n Unknown: \"UnknownTimeSelectionType\",\n None: \"TimeSelectionNone\",\n Consumer: \"Consumer\",\n Executor: \"Executor\",\n} as const satisfies Record<string, TimeSelectionType>;\n\nexport const StateManagementTypeValues = {\n Unknown: \"UnknownStateManagementType\",\n Auto: \"Auto\",\n Manual: \"Manual\",\n} as const satisfies Record<string, StateManagementType>;\n\nexport const SessionPrecisionTypeValues = {\n Unknown: \"UnknownSessionPrecisionType\",\n None: \"SessionPrecisionNone\",\n DateTime: \"DateTime\",\n Date: \"Date\",\n} as const satisfies Record<string, SessionPrecisionType>;\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Провайдер оплаты из OpenAPI; строковый ввод и неизвестный серверный sentinel сохраняются. */\nexport type PaymentProviderType = OpenApiSchemas[\"PaymentProviderType\"];\n\n/** Именованные значения общего wire-контракта провайдера оплаты. */\nexport enum PaymentProviderTypeValues {\n /** Неизвестный провайдер серверного контракта. */\n Unknown = \"UnknownPaymentProviderType\",\n /** Наличный расчёт. */\n Cash = \"Cash\",\n /** Внешняя ссылка оплаты. */\n CustomLink = \"CustomLink\",\n /** Интеграция YooMoney. */\n YooMoney = \"YooMoney\",\n /** Интеграция Qiwi P2P. */\n QiwiP2P = \"QiwiP2P\",\n /** Серверная ветвь Qiwi B2B. */\n QiwiB2B = \"QiwiB2B\",\n /** Интеграция YooKassa. */\n YooKassa = \"YooKassa\",\n /** Интеграция Сбербанка. */\n Sberbank = \"Sberbank\",\n /** Интеграция Уралсиб. */\n Uralsib = \"Uralsib\",\n /** Интеграция Альфа-Банка. */\n Alfabank = \"Alfabank\",\n /** Интеграция RoboKassa. */\n RoboKassa = \"RoboKassa\",\n /** Интеграция PayKeeper. */\n PayKeeper = \"PayKeeper\",\n /** Серверная ветвь GateLine. */\n GateLine = \"GateLine\",\n /** Интеграция Tinkoff. */\n Tinkoff = \"Tinkoff\",\n /** Интеграция Prodamus. */\n Prodamus = \"Prodamus\",\n /** Тестовый провайдер. */\n Mock = \"MockPaymentProvider\",\n}\n","import type { OpenApiSchemas } from \"../../schema/openapi-schemas.js\";\n\n/** Вид условия использования ресурса из OpenAPI, включая неизвестный серверный sentinel. */\nexport type UsageConditionType = OpenApiSchemas[\"UsageConditionType\"];\n\n/** Полный wire-набор для валидации patch и справочника; публичное подмножество задано отдельно. */\nexport enum UsageConditionTypeWireValues {\n /** Сервер не определил вид условия. */\n Unknown = \"UnknownUsageConditionType\",\n /** Условие использования отсутствует. */\n None = \"None\",\n /** Указанные ресурсы исключают использование текущего. */\n Exclusion = \"Exclusion\",\n /** Указанные ресурсы используются дополнительно к текущему. */\n Additional = \"Additional\",\n}\n\n/** Совместимый публичный набор: три прежних ключа с типами строковых литералов. */\nexport const UsageConditionTypeValues = {\n /** Условие использования отсутствует. */\n None: `${UsageConditionTypeWireValues.None}`,\n /** Исключающее условие использования. */\n Exclusion: `${UsageConditionTypeWireValues.Exclusion}`,\n /** Дополнительное условие использования. */\n Additional: `${UsageConditionTypeWireValues.Additional}`,\n} as const satisfies Record<string, UsageConditionType>;\n","import type { PickOrderRespRead, ReturnOrderRespRead } from \"../common/read-models.js\";\nimport type { NormalizedPublicity } from \"../common/publicity-type.js\";\nimport type { ItemPriceInfoRead } from \"../common/price-read-projection.js\";\nexport { PaymentProviderTypeValues, type PaymentProviderType } from \"../common/payment-provider-type.js\";\nexport { UsageConditionTypeValues, type UsageConditionType } from \"../common/usage-condition-type.js\";\nimport { type UsageConditionTypeWireValues, type UsageConditionType } from \"../common/usage-condition-type.js\";\nimport type { ResourceBehaviorSettings } from \"../common/implicit-tag-params.js\";\nimport type { ResourceItemApiDto, WorkloadPeriodDto, PickOrderReqDto, ReturnOrderReqDto } from \"./dto.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItem, TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nimport type { TorrowItemPatchFields } from \"../common/item-patch-types.js\";\nimport type { ItemPricePatchFields } from \"../common/item-price-patch-types.js\";\nimport type { TorrowItemGetOptions, TorrowItemUpdateOptions } from \"../common/item-crud-options.js\";\nimport type { ResourcePaymentPatchProperties } from \"./resource-payment-patch-types.js\";\nexport type { ResourcePaymentPatchProperties, ResourcePaymentPatchParameters } from \"./resource-payment-patch-types.js\";\nexport type { DeleteResponse, ObjectInfo } from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { ResourceBehaviorSettings } from \"../common/implicit-tag-params.js\";\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения ресурса по идентификатору. */\nexport interface GetResourceOptions extends TorrowItemGetOptions {\n /** Включать основную карточку item в ответ ресурса. */\n isNeedItem?: boolean | null;\n /** Включать родительский ресурс в ответ. */\n isNeedParentResource?: boolean | null;\n}\n\n/** Параметры полного обновления ресурса. */\nexport interface UpdateResourceItemOptions extends TorrowItemUpdateOptions {\n /** Профиль, от имени которого обновляется ресурс; `null` сохраняет wire-семантику query. */\n profileId?: string | null;\n}\n\nexport type ResourceItemApi = NormalizedPublicity<ResourceItemApiDto>;\nexport type ServiceDescription = NonNullable<ResourceItemApi[\"serviceDescriptions\"]>[number];\nexport type UsageCondition = NonNullable<ResourceItemApi[\"usageCondition\"]>;\n/** Дополнительные и исключающие условия; отсутствие условия и неизвестный sentinel сюда не входят. */\nexport type ResourceUsageConditionType = Exclude<\n UsageConditionType,\n `${UsageConditionTypeWireValues.Unknown | UsageConditionTypeWireValues.None}`\n>;\nexport type WorkloadPeriod = WorkloadPeriodDto;\nexport type PickOrderReq = PickOrderReqDto;\nexport type PickOrderResp = PickOrderRespRead;\nexport type ReturnOrderReq = ReturnOrderReqDto;\nexport type ReturnOrderResp = ReturnOrderRespRead;\nexport type ResourceItem = TorrowItemFromDto<\n Omit<\n ResourceItemApi,\n | \"item\"\n | \"parentResource\"\n | \"priceInfo\"\n | \"serviceDescriptions\"\n | \"appendixList\"\n | \"loyaltyTransactionPropertiesList\"\n >\n> & {\n /** Связанный элемент с подготовленными общими read-полями; отсутствие элемента сохраняется. */\n item?: TorrowItem;\n /** Родительский ресурс с подготовленными общими read-полями; отсутствие родителя сохраняется. */\n parentResource?: TorrowItem;\n /** Цена карточки: optional settings без null; исходная обязательность родителя сохранена. */\n priceInfo?: ItemPriceInfoRead;\n /** Связи с услугами; серверный null удаляет ключ, [] сохраняется. Элементы не преобразуются. */\n serviceDescriptions?: NonNullable<ResourceItemApi[\"serviceDescriptions\"]>;\n /** Приложения; серверный null удаляет ключ, [] сохраняется. Даты и остальные поля элементов сохраняются. */\n appendixList?: NonNullable<ResourceItemApi[\"appendixList\"]>;\n /** Правила лояльности; серверный null удаляет ключ, вложенные transactionValues не нормализуются. */\n loyaltyTransactionPropertiesList?: NonNullable<ResourceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n /** Настройки поведения, декодированные из hash-tags ресурса. */\n behaviorSettings?: ResourceBehaviorSettings;\n};\nexport type UsageType = ResourceItemApi[\"usageType\"];\nexport const UsageTypeValues = {\n Unknown: \"UnknownUsageType\",\n Specification: \"Specification\",\n Rent: \"Rent\",\n Sale: \"Sale\",\n Payment: \"Payment\",\n Ticket: \"Ticket\",\n} as const satisfies Record<string, NonNullable<UsageType>>;\nexport type ResourceItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<ResourceItemApi>> & {\n /** Настройки поведения, сериализуемые в hash-tags ресурса. */\n behaviorSettings?: ResourceBehaviorSettings;\n};\n\n/** Подтверждённые обычные поля root Resource update; name/image наследуют общий контракт. */\nexport interface ResourceItemPatchFields extends TorrowItemPatchFields {\n /** Описание ресурса; null/empty очищает содержимое, пропуск сохраняет. */\n description?: string | null;\n /** Идентификатор связанного элемента; null снимает связь. Это не target ID самого patch. */\n itemId?: string | null;\n /** Идентификатор родительского ресурса; null снимает связь. */\n parentResourceId?: string | null;\n /** Идентификатор связанного расписания; null снимает связь. */\n timetableId?: string | null;\n /** Полная замена расписания с Date SDK; отсутствующий `rid` диапазона создаётся SDK, null снимает расписание. */\n schedule?: NonNullable<ResourceItemApi[\"schedule\"]> | null;\n /** Серверный способ использования; UnknownUsageType нормализует сервер, create default не применяется. */\n usageType?: NonNullable<ResourceItemApi[\"usageType\"]>;\n /** Полная замена связей с услугами; [] снимает список, предметные ограничения проверяет сервер. */\n serviceDescriptions?: NonNullable<ResourceItemApi[\"serviceDescriptions\"]>;\n /** Пользовательский код; null/empty очищает содержимое. */\n code?: string | null;\n /** Длительность/расчётная единица в секундах (int32); null снимает значение. */\n duration?: number | null;\n /** Полная замена количественных свойств, включая inventoryDate Date; null снимает структуру. */\n amountProperties?: NonNullable<ResourceItemApi[\"amountProperties\"]> | null;\n /** Полная замена условий использования; null снимает структуру. */\n usageCondition?: NonNullable<ResourceItemApi[\"usageCondition\"]> | null;\n /** Полная замена приложений с Date SDK; [] снимает список. */\n appendixList?: NonNullable<ResourceItemApi[\"appendixList\"]>;\n /** Полная замена конфигурации оплаты; null снимает её, платежи не выполняются. */\n paymentProperties?: ResourcePaymentPatchProperties | null;\n /** Полная замена настроек операций лояльности; [] снимает список, баланс не пересчитывается SDK. */\n loyaltyTransactionPropertiesList?: NonNullable<ResourceItemApi[\"loyaltyTransactionPropertiesList\"]>;\n}\n\n/** Частичное изменение ресурса с одной из взаимоисключающих форм цены ItemPricePatchFields. */\nexport type ResourceItemPatch = ResourceItemPatchFields & ItemPricePatchFields;\n\nexport interface ResourceServiceBindingOptions {\n usageAmount?: number | null;\n sortIndex?: number | null;\n}\n\nexport interface ResourceBuildResult {\n body: ResourceItemForCreateOrUpdate;\n}\n","import type { OpenApiSchemas as Schemas } from \"../../schema/openapi-schemas.js\";\n\n/** OpenAPI `UserAccessLevel` — кто может check-in / запись. */\nexport type UserAccessLevel = Schemas[\"UserAccessLevel\"];\n\nexport const UserAccessLevelValues = {\n Unknown: \"UnknownUserAccessLevel\",\n Authenticated: \"Authenticated\",\n Unauthenticated: \"Unauthenticated\",\n} as const satisfies Record<string, UserAccessLevel>;\n","import type {\n LoyaltySystemItemDto,\n CreateLoyaltyCardReqDto,\n GetLoyaltySystemsStatisticsReqDto,\n GetLoyaltySystemsStatisticsRespDto,\n LoyaltyCardFilterConditionDto,\n LoyaltyCardSortConditionDto,\n LoyaltySystemsStatisticsRespDto,\n OperationTypeDto,\n ItemSortConditionDto,\n SearchLoyaltyCardsReqDto,\n} from \"./dto.js\";\nimport type { TorrowItemPatchFields, TorrowItemPatchImage } from \"../common/item-patch-types.js\";\nimport type { ParticipantType, TorrowObjectType } from \"../../schema/sdk-shared-public-types.js\";\nimport type { PersonalSolutionData, SolutionData } from \"../common/solution-data.js\";\nimport type { TorrowItemGetOptions } from \"../common/item-crud-options.js\";\n\nexport type { TorrowItem, TorrowObject } from \"../common/torrow-entities.js\";\nimport type { TorrowItemForCreateOrUpdate, TorrowItemFromDto } from \"../common/torrow-entities.js\";\nexport type {\n GenerateSecurityTokenReq,\n GenerateSecurityTokenResp,\n GetParticipationCountResp,\n GetShareItemSessionReq,\n ObjectInfo,\n ObjectSortCondition,\n ParticipantState,\n ParticipantType,\n ParticipantView,\n Participation,\n ParticipationResp,\n SaveItemToMindMapReq,\n SendLinkOfItemReq,\n SendLinkOfItemResp,\n SetGroupItemReq,\n ShareItemReq,\n TorrowObjectType,\n UnsetGroupItemReq,\n} from \"../../schema/sdk-shared-public-types.js\";\n\nexport type { PersonalSolutionData, SolutionData };\n\n/** Параметры получения программы лояльности по идентификатору. */\nexport type GetLoyaltySystemOptions = TorrowItemGetOptions;\n\n/** Поля программы из DTO; только три array-only patch-контейнера исключают null, сохраняя optional-модификаторы. */\ntype LoyaltySystemItemReadFields = {\n [K in keyof LoyaltySystemItemDto]: K extends\n \"referralProgramIds\" | \"beginTransactionValues\" | \"accountingProductNames\"\n ? Exclude<LoyaltySystemItemDto[K], null>\n : LoyaltySystemItemDto[K];\n};\n/**\n * Программа лояльности: referralProgramIds — связанные реферальные программы,\n * beginTransactionValues — значения будущего выпуска, accountingProductNames — имена учётных продуктов.\n * Эти списки исключают null, сохраняя optional; остальные поля и элементы наследуются из DTO.\n */\nexport type LoyaltySystemItem = TorrowItemFromDto<LoyaltySystemItemReadFields>;\nexport type CreateLoyaltyCardReq = CreateLoyaltyCardReqDto;\nexport type SearchLoyaltyCardsReq = SearchLoyaltyCardsReqDto;\nexport type LoyaltyCardFilterCondition = LoyaltyCardFilterConditionDto;\nexport type LoyaltyCardSortCondition = LoyaltyCardSortConditionDto;\nexport type GetLoyaltySystemsStatisticsReq = GetLoyaltySystemsStatisticsReqDto;\nexport type GetLoyaltySystemsStatisticsResp = GetLoyaltySystemsStatisticsRespDto;\nexport type LoyaltySystemsStatisticsResp = LoyaltySystemsStatisticsRespDto;\nexport type OperationType = OperationTypeDto;\nexport type ItemSortCondition = ItemSortConditionDto;\n/** Полная запись программы сохраняет исходные nullable списки DTO; ограничения частичного patch не переносятся на CRUD. */\nexport type LoyaltySystemItemForCreateOrUpdate = TorrowItemForCreateOrUpdate<TorrowItemFromDto<LoyaltySystemItemDto>>;\nexport type { LoyaltyParticipantsQuery } from \"../loyalty/loyalty-participants-query.js\";\n\nexport type LoyaltyCardIssueType = NonNullable<LoyaltySystemItem[\"loyaltyCardIssueType\"]>;\nexport type LoyaltyCardUpdateKeyInformation = NonNullable<LoyaltySystemItem[\"loyaltyCardUpdateKeyInformation\"]>;\nexport type LoyaltyCardUpdateNonKeyInformation = NonNullable<LoyaltySystemItem[\"loyaltyCardUpdateNonKeyInformation\"]>;\n\nexport const LoyaltyCardIssueTypeValues = {\n Unknown: \"UnknownLoyaltyCardIssueType\",\n Manual: \"Manual\",\n AutoActive: \"AutoActive\",\n AutoIssued: \"AutoIssued\",\n} as const satisfies Record<string, LoyaltyCardIssueType>;\n\nexport const LoyaltyCardUpdateKeyInformationValues = {\n Unknown: \"UnknownLoyaltyCardUpdateKeyInformation\",\n NonKeyDisallowed: \"NonKeyDisallowed\",\n NonKeyAllowed: \"NonKeyAllowed\",\n} as const satisfies Record<string, LoyaltyCardUpdateKeyInformation>;\n\nexport const LoyaltyCardUpdateNonKeyInformationValues = {\n Unknown: \"UnknownLoyaltyCardUpdateNonKeyInformation\",\n KeyDisallowed: \"KeyDisallowed\",\n KeyAllowed: \"KeyAllowed\",\n} as const satisfies Record<string, LoyaltyCardUpdateNonKeyInformation>;\n\n/** OpenAPI `LoyaltyCardSortCondition` — сортировка поиска карт в программе. */\nexport const LoyaltyCardSortConditionValues = {\n SequenceCardNumberAsc: \"SequenceCardNumberAsc\",\n SequenceCardNumberDesc: \"SequenceCardNumberDesc\",\n LoyaltyCardStateAsc: \"LoyaltyCardStateAsc\",\n LoyaltyCardStateDesc: \"LoyaltyCardStateDesc\",\n SequenceCardNumberAscLoyaltyCardStateAsc: \"SequenceCardNumberAscLoyaltyCardStateAsc\",\n SequenceCardNumberDescLoyaltyCardStateAsc: \"SequenceCardNumberDescLoyaltyCardStateAsc\",\n SequenceCardNumberAscLoyaltyCardStateDesc: \"SequenceCardNumberAscLoyaltyCardStateDesc\",\n SequenceCardNumberDescLoyaltyCardStateDesc: \"SequenceCardNumberDescLoyaltyCardStateDesc\",\n LoyaltyCardStateAscSequenceCardNumberAsc: \"LoyaltyCardStateAscSequenceCardNumberAsc\",\n LoyaltyCardStateAscSequenceCardNumberDesc: \"LoyaltyCardStateAscSequenceCardNumberDesc\",\n LoyaltyCardStateDescSequenceCardNumberAsc: \"LoyaltyCardStateDescSequenceCardNumberAsc\",\n LoyaltyCardStateDescSequenceCardNumberDesc: \"LoyaltyCardStateDescSequenceCardNumberDesc\",\n} as const satisfies Record<string, LoyaltyCardSortCondition>;\n\nexport type LoyaltyGroupListQuery = {\n itemType?: TorrowObjectType | null;\n minParticipantType?: ParticipantType | null;\n operationType?: OperationType | null;\n recursionDepth?: number | null;\n take?: number | null;\n skip?: number | null;\n lmfrom?: Date | null;\n lmto?: Date | null;\n includeDeleted?: boolean | null;\n sort?: ItemSortCondition | null;\n};\n\n/** Частичное изменение настроек программы; общие name/image сохраняют контракт TorrowItemPatchFields. */\nexport interface LoyaltySystemItemPatch extends TorrowItemPatchFields {\n /** Описание программы; null очищает. */\n description?: string | null;\n /** Ссылка на визитку; null снимает связь. */\n businessCardId?: string | null;\n /** Правило выпуска будущих карт; Unknown не принимается. */\n loyaltyCardIssueType?: Exclude<NonNullable<LoyaltySystemItem[\"loyaltyCardIssueType\"]>, \"UnknownLoyaltyCardIssueType\">;\n /** Доступ к выпускаемым картам; это не публичность самого item. */\n loyaltyCardAnyoneAccess?: Exclude<NonNullable<LoyaltySystemItem[\"loyaltyCardAnyoneAccess\"]>, \"UnknownAnyoneAccess\">;\n /** Политика изменения ключевой информации карт. */\n loyaltyCardUpdateKeyInformation?: Exclude<LoyaltyCardUpdateKeyInformation, \"UnknownLoyaltyCardUpdateKeyInformation\">;\n /** Политика изменения неключевой информации карт. */\n loyaltyCardUpdateNonKeyInformation?: Exclude<\n LoyaltyCardUpdateNonKeyInformation,\n \"UnknownLoyaltyCardUpdateNonKeyInformation\"\n >;\n /** Срок действия будущей карты в днях (int32); 0 — значение, null очищает. */\n loyaltyCardUsagePeriod?: number | null;\n /** Начало программы; null снимает ограничение. */\n startDate?: Date | null;\n /** Окончание программы; null снимает ограничение. */\n expiredDate?: Date | null;\n /** Полная замена требований к контакту при выпуске; null очищает. */\n contactInformationFieldsRequirements?: NonNullable<LoyaltySystemItem[\"contactInformationFieldsRequirements\"]> | null;\n /** Полная замена ссылок на реферальные программы; [] очищает. */\n referralProgramIds?: string[];\n /** Начальные значения будущего выпуска; существующие балансы не меняются, [] очищает. */\n beginTransactionValues?: NonNullable<LoyaltySystemItem[\"beginTransactionValues\"]>;\n /** Полная конфигурация стартового абонемента будущих карт; null очищает. */\n initialSubscription?: LoyaltySystemInitialSubscriptionPatch | null;\n /** Полная замена имён учётных продуктов; [] очищает. */\n accountingProductNames?: NonNullable<LoyaltySystemItem[\"accountingProductNames\"]>;\n}\n\n/**\n * Конфигурация будущего стартового абонемента: name — название, usagePeriod — срок в днях,\n * transactionValues — начальные значения. Наследует эти атрибуты InitialSubscription;\n * image ограничено ссылкой файла, URL/служебные метаданные не редактируются.\n */\nexport type LoyaltySystemInitialSubscriptionPatch = Omit<\n NonNullable<LoyaltySystemItem[\"initialSubscription\"]>,\n \"image\"\n> & {\n /** Загруженный файл стартового абонемента; null снимает изображение. */\n image?: TorrowItemPatchImage | null;\n};\n\n/** Полное обновление программы: numeratorInfo доступно только при создании и чтении. */\nexport type LoyaltySystemItemForUpdate = Omit<LoyaltySystemItemForCreateOrUpdate, \"numeratorInfo\">;\n","import { AccountTypeValues, TokenStatusValues, VerificationMethodValues } from \"../resources/auth/auth-enum-values.js\";\nimport { AnyoneAccessValues } from \"../resources/common/anyone-access.js\";\nimport { AvailableResourcesValues } from \"../resources/common/available-resources.js\";\nimport { CaseStateValues, CaseTypeValues } from \"../resources/cases/types.js\";\nimport { CommunicationTypeValues, GenderValues, ProfileTypeValues } from \"../resources/contacts/types.js\";\nimport { ImagePreviewSizeValues, NoteTypeValues } from \"../resources/notes/types.js\";\nimport { ItemViewSortConditionValues } from \"../resources/common/personal-list.js\";\nimport {\n ParticipationFieldRequirementTypeValues,\n ParticipationFieldTypeValues,\n} from \"../resources/common/participation-field.js\";\nimport {\n SessionDurationTypeValues,\n SessionPrecisionTypeValues,\n StateManagementTypeValues,\n TimeSelectionTypeValues,\n} from \"../resources/services/types.js\";\nimport { UsageTypeValues } from \"../resources/resources/types.js\";\nimport { UserAccessLevelValues } from \"../resources/common/user-access-level.js\";\nimport {\n LoyaltyCardIssueTypeValues,\n LoyaltyCardUpdateKeyInformationValues,\n LoyaltyCardUpdateNonKeyInformationValues,\n} from \"../resources/loyalty-systems/types.js\";\nimport { UsageConditionTypeWireValues } from \"../resources/common/usage-condition-type.js\";\nimport { PaymentProviderTypeValues } from \"../resources/common/payment-provider-type.js\";\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nconst ENUM_VALUES = {\n AccountType: Object.values(AccountTypeValues),\n AdvisedItemType: [\"UnknownAdvisedItemType\", \"NearLocation\", \"Recommendation\"],\n AccountingTransactionState: [\"UnknownState\", \"Intended\", \"Preparing\", \"Cancelled\", \"Reserved\", \"Commited\"],\n AccountingTransactionType: [\"UnknownType\", \"Balance\", \"Operation\"],\n ActionHistoryState: [\"Undefined\", \"Executing\", \"Success\", \"Error\", \"Canceled\"],\n ActionHistoryType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"CreateItem\",\n \"EditChildItems\",\n \"SortChildItems\",\n \"EditMindMap\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"CreateIntegrationConfig\",\n \"UpdateIntegrationConfig\",\n \"DeleteIntegrationConfig\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"GetAccountingTransaction\",\n \"CreateAccountingTransaction\",\n \"UpdateAccountingTransaction\",\n \"RemoveAccountingTransaction\",\n \"RequestAccessToItem\",\n \"RevokeRequestAccessToItem\",\n \"AcceptOfferToItem\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"CancelCaseParticipation\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"MeetingCreationError\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"CaseActionReminder\",\n ],\n AnnouncementCategory: [\n \"UnknownAnnouncementCategory\",\n \"Action\",\n \"Alert\",\n \"Inform\",\n \"Success\",\n \"Deleted\",\n \"Analytics\",\n \"Reminder\",\n ],\n AnnouncementPriority: [\"UnknownAnnouncementPriority\", \"Low\", \"Normal\", \"High\"],\n AnnouncementState: [\"Undefined\", \"New\", \"Read\", \"Hidden\"],\n AnnouncementType: [\n \"Unknown\",\n \"GrantAccessToItem\",\n \"DeclineAccessToItem\",\n \"ShareItem\",\n \"SendLinkOfItem\",\n \"RevokeOfferToItem\",\n \"UpdateItem\",\n \"DeleteItem\",\n \"ChangePublicity\",\n \"EditParticipantType\",\n \"InviteToParticipate\",\n \"HaveNotNotificationWays\",\n \"IncludeToParent\",\n \"ExcludeFromParent\",\n \"IncludeToGroup\",\n \"ExcludeFromGroup\",\n \"SetGroupItem\",\n \"UnsetGroupItem\",\n \"RegisterDevice\",\n \"SaveFeedbackMessage\",\n \"DeleteFeedbackMessage\",\n \"UpdateIntegrationConfigList\",\n \"IncludeToAccounts\",\n \"ExcludeFromAccounts\",\n \"RequestAccessToItem\",\n \"RevokeRequestToItem\",\n \"Participate\",\n \"RejectOfferToItem\",\n \"SaveItemToMindMap\",\n \"UpdateParticipantProfile\",\n \"RequestParticipantProfile\",\n \"BlockItem\",\n \"UnblockItem\",\n \"CheckIn\",\n \"BookResources\",\n \"ConfirmOtherCaseParticipation\",\n \"CancelCaseParticipation\",\n \"DisclaimOtherCaseParticipation\",\n \"SendClaimAboutOtherCaseParticipation\",\n \"CreateReminderForConsumer\",\n \"DeleteReminderForConsumer\",\n \"EditReminderForConsumer\",\n \"CreateReminder\",\n \"DeleteReminder\",\n \"EditReminder\",\n \"ChangeTaskStatus\",\n \"ConfirmReminder\",\n \"SendBusinessCard\",\n \"ConfirmMyCaseParticipation\",\n \"DisclaimMyCaseParticipation\",\n \"SendClaimAboutMyCaseParticipation\",\n \"CheckInForExecutor\",\n \"CheckInForConsumer\",\n \"CaseReject\",\n \"CaseDeclineWork\",\n \"CasePlan\",\n \"CaseCancel\",\n \"CaseTakeInWork\",\n \"CaseComplete\",\n \"CaseAccept\",\n \"RequestApproveToCaseParticipation\",\n \"UpdateCase\",\n \"UpdateCaseTime\",\n \"UpdateCasePlace\",\n \"ApproveCaseParticipation\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"CreateServiceSession\",\n \"CreateOrder\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"ChangeOrderService\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"LoyaltyCardExpired\",\n \"SubscriptionExpired\",\n \"LoyaltyCardExpiresSoon\",\n \"SubscriptionExpiresSoon\",\n \"AccountBalanceReachedNotificationLevel\",\n \"AccountBalanceReachedMinimumLevel\",\n ],\n AnyoneAccess: Object.values(AnyoneAccessValues),\n ArchiveState: [\"None\", \"Marked\", \"Archived\"],\n AvailabilityTime: [\"UnknownSystemAvailabilityTime\", \"Free\", \"Busy\"],\n AvailableResources: Object.values(AvailableResourcesValues),\n CaseParticipantState: [\"UnknownCaseParticipantState\", \"Booking\", \"Registered\", \"Canceled\", \"Approving\"],\n CaseParticipantType: [\"UnknownCaseParticipantType\", \"Consumer\", \"Executor\", \"Escort\"],\n CaseState: Object.values(CaseStateValues),\n CaseType: Object.values(CaseTypeValues),\n CommunicationType: Object.values(CommunicationTypeValues),\n TokenStatus: Object.values(TokenStatusValues),\n VerificationMethod: Object.values(VerificationMethodValues),\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: Object.values(GenderValues),\n ImagePreviewSize: Object.values(ImagePreviewSizeValues),\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: Object.values(ItemViewSortConditionValues),\n LinkType: [\"Unknown\", \"User\", \"Pinned\", \"Group\"],\n NoteType: Object.values(NoteTypeValues),\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 \"OwnerRequestExchange\",\n \"RevokeExchange\",\n \"OwnerAllowExchange\",\n \"OwnerAllowAnotherExchange\",\n \"OwnerDeclineExchange\",\n \"FreeCaseSpotOpenedUp\",\n \"ApproveMoneyReceive\",\n \"RejectMoneyReceive\",\n \"RequestApproveMoneyReceive\",\n \"CaseCheckIn\",\n \"UpdateCaseParticipantFields\",\n \"CaseReturnToVerification\",\n \"GetTimetableStatistics\",\n \"MeetingCreationError\",\n \"CaseActionEvent\",\n \"ApproveMoneyReceiveByPaymentLink\",\n \"IncludeCaseToUserCalendar\",\n \"IncludeCaseToCustomCalendar\",\n \"ExcludeCaseToUserCalendar\",\n \"ExcludeCaseToCustomCalendar\",\n \"GetCalendarCase\",\n \"GetCalendarTask\",\n \"IncludeSpecifications\",\n \"ExcludeSpecifications\",\n \"CreateServiceSession\",\n \"GetCheckInSchedule\",\n \"CreateOrder\",\n \"CreateSpecification\",\n \"ServiceDashboard\",\n \"GenerateServiceReport\",\n \"GenerateServicesResourcesReport\",\n \"GenerateResourcesRentReport\",\n \"UpdateOrder\",\n \"UpdateOrderInfo\",\n \"GetReCheckInSchedule\",\n \"ChangeOrderService\",\n \"GetServiceWorkloadInfo\",\n \"GenerateResourceReport\",\n \"UpdateContactProperties\",\n \"PickOrder\",\n \"ReturnOrder\",\n \"CreateLoyaltyCard\",\n \"CreateLoyaltyCardSubscription\",\n \"GetLoyaltySystemCards\",\n \"LoyaltyCardExpired\",\n \"SubscriptionExpired\",\n \"LoyaltyCardExpiresSoon\",\n \"SubscriptionExpiresSoon\",\n \"AccountBalanceReachedNotificationLevel\",\n \"AccountBalanceReachedMinimumValue\",\n \"GetLoyaltySystemsStatistics\",\n \"UserRegister\",\n \"ConfirmCommunicationCode\",\n \"ConsumerTestFunction\",\n \"ExecutorTestFunction\",\n \"PotentialConsumerTestFunction\",\n \"ServiceManagerTestFunction\",\n \"CaseActionReminder\",\n \"CaseActionRequestConfirmation\",\n \"CaseActionCancelUnconfirmed\",\n \"CaseActionCaseChange\",\n ],\n ParticipantState: [\"UnknownParticipantState\", \"Requested\", \"Offered\", \"Revoked\", \"Accepted\", \"Rejected\", \"Declined\"],\n ParticipantType: [\"UnknownParticipantType\", \"Owner\", \"Editor\", \"Reader\", \"Publisher\", \"Manager\", \"PublicReader\"],\n ParticipationFieldRequirementType: Object.values(ParticipationFieldRequirementTypeValues),\n ParticipationFieldType: Object.values(ParticipationFieldTypeValues),\n PaymentProviderType: Object.values(PaymentProviderTypeValues),\n ProfileType: Object.values(ProfileTypeValues),\n ProfileUserAvailability: [\"Unknown\", \"Free\", \"Busy\", \"Hidden\", \"ProfileAuto\", \"UserAuto\"],\n ReminderLocationDirection: [\"In\", \"Out\"],\n ReportDeliveryType: [\"UnknownReportDeliveryType\", \"Link\", \"Email\"],\n ShowCaseInTimetableType: [\"All\", \"ExcludeUser\"],\n TimetableDetailsVisibility: [\"Time\", \"View\"],\n TicketState: [\"UnknownTicketState\", \"Canceled\", \"Waiting\", \"Paid\", \"Used\", \"Error\"],\n TicketPaymentConfirmationSource: [\"UnknownTicketPaymentConfirmationSource\", \"PaymentLink\", \"Manager\"],\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: Object.values(UsageConditionTypeWireValues),\n UsageType: Object.values(UsageTypeValues),\n SessionDurationType: Object.values(SessionDurationTypeValues),\n TimeSelectionType: Object.values(TimeSelectionTypeValues),\n StateManagementType: Object.values(StateManagementTypeValues),\n SessionPrecisionType: Object.values(SessionPrecisionTypeValues),\n UserAccessLevel: Object.values(UserAccessLevelValues),\n LoyaltyCardIssueType: Object.values(LoyaltyCardIssueTypeValues),\n LoyaltyCardUpdateKeyInformation: Object.values(LoyaltyCardUpdateKeyInformationValues),\n LoyaltyCardUpdateNonKeyInformation: Object.values(LoyaltyCardUpdateNonKeyInformationValues),\n} as const;\n\ntype EnumName = keyof typeof ENUM_VALUES;\n\nconst SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS: Partial<Record<EnumName, Record<string, string>>> = {\n AdvisedItemType: {\n UnknownAdvisedItemType: \"Служебное/неопределённое значение режима подборки adviseditems.\",\n NearLocation:\n \"Элементы рядом с точкой: обязательны query `latitude`/`longitude` (WGS84). Пример: **`search-advised-items.ts`**.\",\n Recommendation: \"Персональные рекомендации пользователя (без обязательной геопозиции).\",\n },\n VerificationMethod: {\n UnknownMethod: \"Сервер сам выбирает способ доставки кода (дефолт, если клиент не указал предпочтение).\",\n Sms: \"Код доставляется SMS на телефон.\",\n TelegramGateway: \"Код через Telegram Gateway (не путать с AccountType.Telegram).\",\n FlashCall: \"Flash-call: пользователь вводит последние цифры входящего номера.\",\n MtsMobileId:\n \"МТС Mobile ID: out-of-band подтверждение без классического ввода кода; клиент поллит `requestToken` по `TokenResp.status`. Документация МТС: https://developers.mts.ru/mobile-id/documentation/autentifikatsiya\",\n },\n TokenStatus: {\n TokenReady: \"Токены готовы: в ответе есть access/refresh (классический OTP и успешный Mobile ID).\",\n Pending:\n \"Выдача ещё идёт (типично MTS Mobile ID) — полли `requestToken` с интервалом `SendCodeResp.pollIntervalSeconds`.\",\n AwaitingSmsCode: \"Mobile ID не завершился — нужен fallback: ввод SMS-кода и повторный `requestToken` с `code`.\",\n Failed: \"Выдача токенов не удалась; токены пустые — начать заново с `sendCode`.\",\n },\n LinkType: {\n Unknown: \"Служебный/неопределённый тип связи parent↔child (`ItemLink.linkType`).\",\n User: \"User link: личная ветка mind map; видит владелец связи. Канон create — `saveToMindMap` (не `includeForUser`).\",\n Pinned: \"Pinned link: структурное прикрепление к родителю; видно участникам родителя. Create — `includeToParent`.\",\n Group:\n \"Значение enum в OpenAPI; UI apps не строит ItemLink этого типа. Членство групп — `includeToGroups` / `updateGroups`, не `LinkType.Group`.\",\n },\n CaseState: {\n UnknownCaseState: \"Служебное/неопределенное состояние кейса.\",\n Verifying: \"Кейс на этапе проверки/подтверждения перед исполнением.\",\n Waiting: \"Кейс создан и ожидает начала выполнения или подтверждения.\",\n Processing: \"Кейс находится в активной работе.\",\n Preparing: \"Подготовительный этап перед основным выполнением кейса.\",\n Completed: \"Кейс успешно завершен.\",\n Closed: \"Кейс окончательно закрыт и больше не участвует в активном процессе.\",\n Rejected: \"Кейс отклонен (не принят к выполнению).\",\n Canceled: \"Кейс отменен (инициатором, исполнителем или системой по правилам).\",\n TimeControlled: \"Кейс находится под контролем временных ограничений/таймингов.\",\n TaskNotCompleted: \"Задача по кейсу не выполнена в требуемом объеме/срок.\",\n TaskCompleted: \"Задача по кейсу отмечена как выполненная.\",\n },\n CaseType: {\n UnknownTimeType: \"Служебный/неопределенный тип кейса по времени.\",\n Time: \"Одиночный кейс с конкретным временем.\",\n RepeatedTime: \"Повторяющийся кейс (серия по расписанию).\",\n Today: \"Кейс, относящийся к текущему дню.\",\n Week: \"Кейс/вид, агрегированный на недельном горизонте.\",\n Later: \"Кейс, отложенный на более поздний период.\",\n Date: \"Кейс, привязанный к конкретной дате (без детальной периодики).\",\n State: \"Кейс, фильтруемый/представляемый по состоянию, а не по времени.\",\n },\n TimetableDetailsVisibility: {\n Time: \"Только интервалы занятости (begin/end). Сервер не подгружает CaseView/CaseSummary для всех событий/заказов — лёгкий ответ для фона календаря / busy-bars. В ответе `detailsVisibility` остаётся `Time`, пока запись не обогащена.\",\n View: \"Полные детали событий/заказов: сервер подгружает CaseView и CaseSummary (`name`, `caseSummary`, …). Дефолт в torrow-apps (`TimetableCaseService.getTimetable`, экспорт заказов). В ответе обогащённые записи получают `detailsVisibility=View`.\",\n },\n TicketState: {\n UnknownTicketState: \"Служебное/неопределенное состояние билета.\",\n Canceled: \"Билет отменен и не может быть использован.\",\n Waiting: \"Билет ожидает оплаты или подтверждения.\",\n Paid: \"Билет оплачен и активен для использования.\",\n Used: \"Билет уже использован (услуга/доступ оказаны).\",\n Error: \"Ошибка обработки билета/платежного состояния.\",\n },\n AvailabilityTime: {\n UnknownSystemAvailabilityTime: \"Не удалось определить доступность временного слота.\",\n Free: \"Слот свободен для записи/бронирования.\",\n Busy: \"Слот занят и недоступен для новой записи.\",\n },\n AvailableResources: {\n Unknown: \"Служебное/неопределенное состояние ресурса в выборке.\",\n Free: \"Ресурс свободен.\",\n Booked: \"Ресурс забронирован.\",\n Busy: \"Ресурс занят и недоступен.\",\n },\n AnyoneAccess: {\n UnknownAnyoneAccess: \"Служебное/неопределенное значение уровня публичного доступа.\",\n NoneAnyoneAccess: \"Публичный доступ для «любого пользователя» не задан.\",\n Read: \"Любой пользователь может только читать объект.\",\n ReadWrite: \"Любой пользователь может читать и изменять объект.\",\n Denied: \"Публичный доступ явно запрещен.\",\n },\n DeliveryChannel: {\n UnknownDeliveryChannel: \"Служебный/неопределенный канал доставки.\",\n Push: \"Push-уведомление в приложение.\",\n Email: \"Доставка уведомления по email.\",\n Sms: \"Доставка уведомления через SMS.\",\n InApp: \"Внутреннее уведомление внутри приложения.\",\n Phone: \"Голосовой/телефонный канал.\",\n Announcement: \"Доставка через системное объявление.\",\n Telegram: \"Доставка через Telegram-канал/бот.\",\n Max: \"Доставка через мессенджер Max.\",\n },\n DeliveryStrategy: {\n UnknownDeliveryStrategy: \"Служебная/неопределенная стратегия доставки.\",\n All: \"Отправлять по всем доступным каналам.\",\n FirstDelivered: \"Остановиться после первой успешной доставки.\",\n },\n ProfileUserAvailability: {\n Unknown: \"Служебное/неопределенное состояние доступности профиля.\",\n Free: \"Профиль свободен и доступен для назначения.\",\n Busy: \"Профиль занят.\",\n Hidden: \"Профиль скрыт из сценариев подбора/расписания.\",\n ProfileAuto: \"Доступность определяется автоматически на уровне профиля.\",\n UserAuto: \"Доступность наследуется/рассчитывается автоматически от пользователя.\",\n },\n SessionDurationType: {\n UnknownSessionDurationType: \"Служебный/неопределенный тип длительности сессии.\",\n SessionDurationNone: \"Длительность сессии не используется (например Appeal).\",\n Custom: \"Длительность задаёт потребитель/исполнитель (аренда, кастомный интервал).\",\n Constant: \"Фиксированная длительность (`defaultDuration`).\",\n Sum: \"Длительность = сумма длительностей выбранных ресурсов/шагов (типично RegisterOnTime).\",\n },\n TimeSelectionType: {\n UnknownTimeSelectionType: \"Служебный/неопределенный тип выбора времени.\",\n TimeSelectionNone: \"Время не выбирается.\",\n Consumer: \"Время выбирает потребитель (клиент).\",\n Executor: \"Время выбирает исполнитель.\",\n },\n StateManagementType: {\n UnknownStateManagementType: \"Служебный/неопределенный режим управления состоянием сессии.\",\n Auto: \"Состояния сессии/кейса ведутся автоматически.\",\n Manual: \"Состояния меняет исполнитель вручную.\",\n },\n SessionPrecisionType: {\n UnknownSessionPrecisionType: \"Служебная/неопределенная точность сессии.\",\n SessionPrecisionNone: \"Точность не задана.\",\n DateTime: \"Выбор даты и времени.\",\n Date: \"Выбор только даты (без времени суток).\",\n },\n UserAccessLevel: {\n UnknownUserAccessLevel: \"Служебный/неопределенный уровень доступа для check-in/записи.\",\n Authenticated: \"Только аутентифицированные пользователи.\",\n Unauthenticated: \"Допускаются гости без полноценной сессии.\",\n },\n LoyaltyCardIssueType: {\n UnknownLoyaltyCardIssueType: \"Служебный/неопределенный способ выпуска карты.\",\n Manual: \"Карту выпускает оператор вручную.\",\n AutoActive: \"Карта выпускается и активируется автоматически (дефолт create в apps).\",\n AutoIssued: \"Карта выпускается автоматически без авто-активации.\",\n },\n LoyaltyCardUpdateKeyInformation: {\n UnknownLoyaltyCardUpdateKeyInformation: \"Служебное/неопределенное правило обновления key-полей карты.\",\n NonKeyDisallowed: \"Ключевые поля карты нельзя обновлять через non-key путь (дефолт create).\",\n NonKeyAllowed: \"Обновление ключевых полей через non-key путь разрешено.\",\n },\n LoyaltyCardUpdateNonKeyInformation: {\n UnknownLoyaltyCardUpdateNonKeyInformation: \"Служебное/неопределенное правило обновления non-key полей.\",\n KeyDisallowed: \"Non-key поля карты не обновляются (дефолт create, если чекбокс выключен).\",\n KeyAllowed: \"Non-key поля карты можно обновлять.\",\n },\n};\n\nconst DETAILED_TYPE_STATE_ENUMS = new Set<EnumName>(\n (Object.keys(ENUM_VALUES) as EnumName[]).filter(\n (name) =>\n (name.endsWith(\"Type\") || name.endsWith(\"State\")) && name !== \"ActionHistoryType\" && 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\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\n return byValue[value] ?? `Тип поля участника \\`${value}\\`.`;\n}\n\nfunction getOperationTypeDescription(value: string): string {\n const explicit: Record<string, string> = {\n UnknownOperation: \"Служебный/неопределенный тип операции.\",\n OwnerRequestExchange: \"Запрос владельца на обмен участием в событии.\",\n RevokeExchange: \"Отзыв запроса на обмен участием в событии.\",\n OwnerAllowExchange: \"Разрешение владельцем обмена участием в событии.\",\n OwnerAllowAnotherExchange: \"Разрешение владельцем другого обмена участием в событии.\",\n OwnerDeclineExchange: \"Отклонение владельцем обмена участием в событии.\",\n CaseCheckIn: \"Регистрация присутствия в событии.\",\n CaseActionEvent: \"Выполнение действия события.\",\n LoyaltyCardExpired: \"Уведомление об истечении срока карты лояльности.\",\n SubscriptionExpired: \"Уведомление об истечении срока подписки.\",\n LoyaltyCardExpiresSoon: \"Уведомление о скором истечении срока карты лояльности.\",\n SubscriptionExpiresSoon: \"Уведомление о скором истечении срока подписки.\",\n AccountBalanceReachedNotificationLevel: \"Уведомление о достижении порога баланса счёта.\",\n AccountBalanceReachedMinimumValue: \"Уведомление о достижении минимального баланса счёта.\",\n UserRegister: \"Регистрация пользователя.\",\n ConfirmCommunicationCode: \"Подтверждение кода канала связи.\",\n ServiceManagerTestFunction: \"Тестовая операция для менеджера услуги.\",\n CaseActionRequestConfirmation: \"Действие события: запрос подтверждения участия.\",\n CaseActionCancelUnconfirmed: \"Действие события: отмена неподтверждённого участия.\",\n CaseActionCaseChange: \"Действие при изменении события.\",\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]) {\n return explicit[value];\n }\n\n const readable = toReadableToken(value);\n if (value.startsWith(\"Create\")) {\n return `Создание сущности/объекта в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Update\")) {\n return `Обновление данных в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Delete\") || value.startsWith(\"Remove\")) {\n return `Удаление/снятие привязки в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Get\") || value.startsWith(\"Read\")) {\n return `Чтение/получение данных в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Generate\")) {\n return `Генерация данных/отчета/токена в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Include\")) {\n return `Включение/добавление связи в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Exclude\")) {\n return `Исключение/удаление связи в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Case\")) {\n return `Операция жизненного цикла события (кейса): \"${readable}\".`;\n }\n if (value.startsWith(\"Confirm\")) {\n return `Подтверждение действия/состояния: \"${readable}\".`;\n }\n if (value.startsWith(\"Reject\") || value.startsWith(\"Decline\")) {\n return `Отклонение/отказ в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Approve\")) {\n return `Подтверждение/аппрув в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Request\")) {\n return `Запрос действия/доступа в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Revoke\")) {\n return `Отзыв ранее выданного доступа/предложения в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Send\")) {\n return `Отправка сообщения/уведомления/ссылки в сценарии \"${readable}\".`;\n }\n if (value.startsWith(\"Set\") || value.startsWith(\"Unset\")) {\n return `Установка/сброс параметра или связи: \"${readable}\".`;\n }\n if (value.startsWith(\"Pick\") || value.startsWith(\"Return\")) {\n return `Операция движения заказа/ресурса: \"${readable}\".`;\n }\n if (value.startsWith(\"Book\") || value.startsWith(\"CheckIn\")) {\n return `Операция записи/чекина: \"${readable}\".`;\n }\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\n return `Значение \\`${value}\\` в enum \\`${enumName}\\` определяет режим/категорию \"${readableValue}\" в соответствующем API-сценарии.`;\n}\n\nfunction getEnumValueDescription(enumName: EnumName, value: string): string {\n if (enumName === \"NoteType\") {\n if (value === \"Html\") {\n return \"HTML-заметка: data содержит HTML-строку. Поддерживаемый сценарий SDK.\";\n }\n if (value === \"Markdown\") {\n return \"Markdown-заметка: data содержит исходный Markdown с сохранением пробелов и переносов. Поддерживаемый сценарий SDK.\";\n }\n\n return \"Текстовая заметка: доменное data всегда string, null/missing становятся пустой строкой, другое нестроковое содержимое отклоняется. Также формат чтения остальных серверных типов.\";\n }\n const explicitDescription = SIGNIFICANT_ENUM_VALUE_DESCRIPTIONS[enumName]?.[value];\n if (explicitDescription) {\n return explicitDescription;\n }\n if (enumName === \"PaymentProviderType\") {\n return getPaymentProviderTypeDescription(value);\n }\n if (enumName === \"ParticipationFieldType\") {\n return getParticipationFieldTypeDescription(value);\n }\n if (enumName === \"OperationType\") {\n return getOperationTypeDescription(value);\n }\n if (DETAILED_TYPE_STATE_ENUMS.has(enumName) || EXTRA_DETAILED_ENUMS.has(enumName)) {\n return getDetailedEnumValueDescription(enumName, value);\n }\n if (value.startsWith(\"Unknown\") || value === \"Undefined\") {\n return `Неопределенное/служебное значение enum \\`${enumName}\\` (\\`${value}\\`).`;\n }\n if (value === \"None\") {\n return `Явное отсутствие выбранного значения для enum \\`${enumName}\\`.`;\n }\n\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\n return {\n value: {\n description: summary,\n valueSchema: enumName,\n },\n ...valueEntries,\n };\n}\n\nexport const actionHistoryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryType\",\n \"Тип события истории действий (создание, обновление, удаление, участие и пр.).\",\n);\nexport const actionHistoryTypeFieldDocs = mapFieldDocsToStrings(actionHistoryTypeFieldDocEntries);\n\nexport const actionHistoryStateFieldDocEntries = createEnumFieldDocEntries(\n \"ActionHistoryState\",\n \"Состояние записи action-history (актуальна/архив/служебные состояния API).\",\n);\nexport const actionHistoryStateFieldDocs = mapFieldDocsToStrings(actionHistoryStateFieldDocEntries);\n\nexport const announcementStateFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementState\",\n \"Состояние уведомления (`New`, `Read`, `Hidden` и др.).\",\n);\nexport const announcementStateFieldDocs = mapFieldDocsToStrings(announcementStateFieldDocEntries);\n\nexport const itemViewSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemViewSortCondition\",\n \"Условие сортировки списков view в API (`/views/*`).\",\n);\nexport const itemViewSortConditionFieldDocs = mapFieldDocsToStrings(itemViewSortConditionFieldDocEntries);\n\nexport const participantTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantType\",\n \"Тип/роль участника в participation-модели (владелец, гость, подписчик и т.п.).\",\n);\nexport const participantTypeFieldDocs = mapFieldDocsToStrings(participantTypeFieldDocEntries);\n\nexport const participantStateFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipantState\",\n \"Состояние участия (ожидание, активен, отклонён, отозван и т.п.).\",\n);\nexport const participantStateFieldDocs = mapFieldDocsToStrings(participantStateFieldDocEntries);\n\nexport const accountingTransactionStateFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionState\",\n \"Состояние транзакции (`Intended`, `Reserved`, `Commited`, ...).\",\n);\nexport const accountingTransactionStateFieldDocs = mapFieldDocsToStrings(accountingTransactionStateFieldDocEntries);\n\nexport const operationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"OperationType\",\n \"Тип операции над объектом в связях/participation (по OpenAPI enum).\",\n);\nexport const operationTypeFieldDocs = mapFieldDocsToStrings(operationTypeFieldDocEntries);\n\nexport const torrowObjectTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TorrowObjectType\",\n \"Доменный тип объекта Torrow (`Contact`, `Case`, `Service`, `LoyaltyCard`, ...).\",\n);\nexport const torrowObjectTypeFieldDocs = mapFieldDocsToStrings(torrowObjectTypeFieldDocEntries);\n\nexport const itemSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ItemSortCondition\",\n \"Условие сортировки элементов в group/list API.\",\n);\nexport const itemSortConditionFieldDocs = mapFieldDocsToStrings(itemSortConditionFieldDocEntries);\n\nexport const objectSortConditionFieldDocEntries = createEnumFieldDocEntries(\n \"ObjectSortCondition\",\n \"Условие сортировки объектов (`lm`, `cd`, кастомные поля — по OpenAPI).\",\n);\nexport const objectSortConditionFieldDocs = mapFieldDocsToStrings(objectSortConditionFieldDocEntries);\n\nexport const accountTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountType\",\n \"Тип аккаунта в auth-потоке (`Phone`, `Email`, ...).\",\n);\nexport const accountTypeFieldDocs = mapFieldDocsToStrings(accountTypeFieldDocEntries);\n\nexport const advisedItemTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AdvisedItemType\",\n \"Режим `GET /api/v1/search/adviseditems` (`NearLocation` / `Recommendation`). Query: **`AdvisedItemsSearchQuery`**.\",\n);\nexport const advisedItemTypeFieldDocs = mapFieldDocsToStrings(advisedItemTypeFieldDocEntries);\n\nexport const verificationMethodFieldDocEntries = createEnumFieldDocEntries(\n \"VerificationMethod\",\n \"Способ доставки/подтверждения кода входа (`SendCodeReq.preferredMethod`, `SendCodeResp.usedMethod`).\",\n);\nexport const verificationMethodFieldDocs = mapFieldDocsToStrings(verificationMethodFieldDocEntries);\n\nexport const tokenStatusFieldDocEntries = createEnumFieldDocEntries(\n \"TokenStatus\",\n \"Статус выдачи токенов в `TokenResp.status` (классический OTP → `TokenReady`; Mobile ID — polling).\",\n);\nexport const tokenStatusFieldDocs = mapFieldDocsToStrings(tokenStatusFieldDocEntries);\n\nexport const communicationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CommunicationType\",\n \"Канал коммуникации для подтверждения (`Sms`, `Email`, ...).\",\n);\nexport const communicationTypeFieldDocs = mapFieldDocsToStrings(communicationTypeFieldDocEntries);\n\nexport const accountingTransactionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AccountingTransactionType\",\n \"Тип учетной транзакции (`Balance`, `Operation`).\",\n);\nexport const accountingTransactionTypeFieldDocs = mapFieldDocsToStrings(accountingTransactionTypeFieldDocEntries);\n\nexport const announcementCategoryFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementCategory\",\n \"Категория объявления/уведомления.\",\n);\nexport const announcementCategoryFieldDocs = mapFieldDocsToStrings(announcementCategoryFieldDocEntries);\n\nexport const announcementPriorityFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementPriority\",\n \"Приоритет объявления.\",\n);\nexport const announcementPriorityFieldDocs = mapFieldDocsToStrings(announcementPriorityFieldDocEntries);\n\nexport const announcementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"AnnouncementType\",\n \"Тип объявления (доменное событие, которое вызвало нотификацию).\",\n);\nexport const announcementTypeFieldDocs = mapFieldDocsToStrings(announcementTypeFieldDocEntries);\n\nexport const anyoneAccessFieldDocEntries = createEnumFieldDocEntries(\n \"AnyoneAccess\",\n \"Уровень доступа для «любого пользователя».\",\n);\nexport const anyoneAccessFieldDocs = mapFieldDocsToStrings(anyoneAccessFieldDocEntries);\n\nexport const archiveStateFieldDocEntries = createEnumFieldDocEntries(\"ArchiveState\", \"Состояние архивации объекта.\");\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(\"CaseState\", \"Жизненный цикл события/кейса.\");\nexport const caseStateFieldDocs = mapFieldDocsToStrings(caseStateFieldDocEntries);\n\nexport const caseTypeFieldDocEntries = createEnumFieldDocEntries(\n \"CaseType\",\n \"Тип кейса по времени/формату отображения.\",\n);\nexport const caseTypeFieldDocs = mapFieldDocsToStrings(caseTypeFieldDocEntries);\n\nexport const deleteStateFieldDocEntries = createEnumFieldDocEntries(\"DeleteState\", \"Состояние удаления объекта.\");\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(\"Gender\", \"Пол контакта/пользователя.\");\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 \"Тип содержимого заметки SDK: Html, Markdown или Text. Другие серверные строки при чтении становятся Text.\",\n);\nexport const noteTypeFieldDocs = mapFieldDocsToStrings(noteTypeFieldDocEntries);\n\nexport const linkTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LinkType\",\n \"Тип связи parent↔child в `ItemLink` (User / Pinned). Флоу: `docs/agents/relations-flow.md`.\",\n);\nexport const linkTypeFieldDocs = mapFieldDocsToStrings(linkTypeFieldDocEntries);\n\nexport const participationFieldRequirementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldRequirementType\",\n \"Требование к полю участника (`OptionalField`/`RequiredField`).\",\n);\nexport const participationFieldRequirementTypeFieldDocs = mapFieldDocsToStrings(\n participationFieldRequirementTypeFieldDocEntries,\n);\n\nexport const participationFieldTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ParticipationFieldType\",\n \"Тип поля анкеты/контактных данных участника.\",\n);\nexport const participationFieldTypeFieldDocs = mapFieldDocsToStrings(participationFieldTypeFieldDocEntries);\n\nexport const paymentProviderTypeFieldDocEntries = createEnumFieldDocEntries(\n \"PaymentProviderType\",\n \"Провайдер оплаты для билета/заказа.\",\n);\nexport const paymentProviderTypeFieldDocs = mapFieldDocsToStrings(paymentProviderTypeFieldDocEntries);\n\nexport const profileTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileType\",\n \"Роль контакта как профиля пользователя.\",\n);\nexport const profileTypeFieldDocs = mapFieldDocsToStrings(profileTypeFieldDocEntries);\n\nexport const profileUserAvailabilityFieldDocEntries = createEnumFieldDocEntries(\n \"ProfileUserAvailability\",\n \"Доступность профиля/пользователя в расписании.\",\n);\nexport const profileUserAvailabilityFieldDocs = mapFieldDocsToStrings(profileUserAvailabilityFieldDocEntries);\n\nexport const reminderLocationDirectionFieldDocEntries = createEnumFieldDocEntries(\n \"ReminderLocationDirection\",\n \"Направление гео-триггера напоминания (вход/выход).\",\n);\nexport const reminderLocationDirectionFieldDocs = mapFieldDocsToStrings(reminderLocationDirectionFieldDocEntries);\n\nexport const reportDeliveryTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ReportDeliveryType\",\n \"Способ доставки отчета.\",\n);\nexport const reportDeliveryTypeFieldDocs = mapFieldDocsToStrings(reportDeliveryTypeFieldDocEntries);\n\nexport const showCaseInTimetableTypeFieldDocEntries = createEnumFieldDocEntries(\n \"ShowCaseInTimetableType\",\n \"Режим показа события в расписании.\",\n);\nexport const showCaseInTimetableTypeFieldDocs = mapFieldDocsToStrings(showCaseInTimetableTypeFieldDocEntries);\n\nexport const timetableDetailsVisibilityFieldDocEntries = createEnumFieldDocEntries(\n \"TimetableDetailsVisibility\",\n \"Глубина деталей в `getTimetable` query `visibility` и в ответе `TimetableCase.detailsVisibility`: `Time` — интервалы, `View` — полные события/заказы.\",\n);\nexport const timetableDetailsVisibilityFieldDocs = mapFieldDocsToStrings(timetableDetailsVisibilityFieldDocEntries);\n\nexport const ticketStateFieldDocEntries = createEnumFieldDocEntries(\"TicketState\", \"Состояние билета/оплаты.\");\nexport const ticketStateFieldDocs = mapFieldDocsToStrings(ticketStateFieldDocEntries);\n\nexport const ticketPaymentConfirmationSourceFieldDocEntries = createEnumFieldDocEntries(\n \"TicketPaymentConfirmationSource\",\n \"Источник подтверждения оплаты билета (`PaymentLink`, `Manager`, …).\",\n);\nexport const ticketPaymentConfirmationSourceFieldDocs = mapFieldDocsToStrings(\n ticketPaymentConfirmationSourceFieldDocEntries,\n);\n\nexport const usageTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageType\",\n \"Тип использования ресурса (`Specification`, `Rent`, `Sale`, `Payment`, `Ticket`).\",\n);\nexport const usageTypeFieldDocs = mapFieldDocsToStrings(usageTypeFieldDocEntries);\n\nexport const usageConditionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"UsageConditionType\",\n \"Класс условия использования (`None`, `Exclusion`, `Additional`).\",\n);\nexport const usageConditionTypeFieldDocs = mapFieldDocsToStrings(usageConditionTypeFieldDocEntries);\n\nexport const sessionDurationTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionDurationType\",\n \"Тип длительности сессии услуги (`SessionDurationProperties.sessionDurationType`). В JSON — строковый литерал OpenAPI.\",\n);\nexport const sessionDurationTypeFieldDocs = mapFieldDocsToStrings(sessionDurationTypeFieldDocEntries);\n\nexport const timeSelectionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"TimeSelectionType\",\n \"Кто выбирает время сессии (`Consumer` / `Executor`). В JSON — строка OpenAPI.\",\n);\nexport const timeSelectionTypeFieldDocs = mapFieldDocsToStrings(timeSelectionTypeFieldDocEntries);\n\nexport const stateManagementTypeFieldDocEntries = createEnumFieldDocEntries(\n \"StateManagementType\",\n \"Режим управления состоянием сессии (`Auto` / `Manual`). В JSON — строка OpenAPI.\",\n);\nexport const stateManagementTypeFieldDocs = mapFieldDocsToStrings(stateManagementTypeFieldDocEntries);\n\nexport const sessionPrecisionTypeFieldDocEntries = createEnumFieldDocEntries(\n \"SessionPrecisionType\",\n \"Точность сессии (`DateTime` / `Date`). В JSON — строка OpenAPI.\",\n);\nexport const sessionPrecisionTypeFieldDocs = mapFieldDocsToStrings(sessionPrecisionTypeFieldDocEntries);\n\nexport const userAccessLevelFieldDocEntries = createEnumFieldDocEntries(\n \"UserAccessLevel\",\n \"Уровень доступа для check-in/записи (`Authenticated` / `Unauthenticated`). В JSON — строка OpenAPI.\",\n);\nexport const userAccessLevelFieldDocs = mapFieldDocsToStrings(userAccessLevelFieldDocEntries);\n\nexport const loyaltyCardIssueTypeFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardIssueType\",\n \"Способ выпуска карты лояльности (`Manual` / `AutoActive` / `AutoIssued`). В JSON — строка OpenAPI.\",\n);\nexport const loyaltyCardIssueTypeFieldDocs = mapFieldDocsToStrings(loyaltyCardIssueTypeFieldDocEntries);\n\nexport const loyaltyCardUpdateKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateKeyInformation\",\n \"Правило обновления ключевых полей карты. В JSON — строка OpenAPI (`NonKeyDisallowed`, …).\",\n);\nexport const loyaltyCardUpdateKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n);\n\nexport const loyaltyCardUpdateNonKeyInformationFieldDocEntries = createEnumFieldDocEntries(\n \"LoyaltyCardUpdateNonKeyInformation\",\n \"Правило обновления non-key полей карты. В JSON — строка OpenAPI (`KeyDisallowed`, `KeyAllowed`).\",\n);\nexport const loyaltyCardUpdateNonKeyInformationFieldDocs = mapFieldDocsToStrings(\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n);\n","import { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const torrowIdHelperFieldDocEntries = {\n getTorrowObjectTypeFromTorrowId: {\n description: \"Строго проверяет Torrow ID и возвращает известный SDK `TorrowObjectType` из числового кода ID.\",\n valueSchema: \"string → TorrowObjectType\",\n usage:\n \"Неизвестный numeric code даёт `TorrowIdError` с reason `unknown-object-type-code`; SDK не угадывает соответствие по порядку OpenAPI enum.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowItemTypeHelperFieldDocEntries = {\n getTorrowItemTypeFromTorrowId: {\n description: \"Возвращает `TorrowItemType`, закодированный в одном каноническом Torrow ID.\",\n valueSchema: \"string → TorrowItemType\",\n usage: \"Известные non-item типы (`User`, `File`) дают `unsupported-item-type`.\",\n },\n getTorrowItemTypeFromTorrowIds: {\n description: \"Возвращает общий `TorrowItemType` непустого однотипного списка Torrow ID.\",\n valueSchema: \"readonly string[] → TorrowItemType\",\n usage: \"Пустой список и смешанные item types дают типизированный `TorrowIdError`.\",\n },\n isTorrowItemType: {\n description: \"Runtime guard для внешней строки с семантическим item type (`Note`, `Contact`, ...).\",\n valueSchema: \"string → boolean\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const torrowIdHelperFieldDocs = mapFieldDocsToStrings(torrowIdHelperFieldDocEntries);\nexport const torrowItemTypeHelperFieldDocs = mapFieldDocsToStrings(torrowItemTypeHelperFieldDocEntries);\n","import {\n resourceItemPatchFieldDocEntries,\n resourcePaymentPatchPropertiesFieldDocEntries,\n resourcePaymentPatchParametersFieldDocEntries,\n resourcesPatchSdkMethodFieldDocEntries,\n} from \"./resource-patch-field-docs.js\";\nimport { caseItemPatchFieldDocEntries, casesPatchSdkMethodFieldDocEntries } from \"./case-patch-field-docs.js\";\nimport { serviceItemPatchFieldDocEntries } from \"./service-patch-field-docs.js\";\nimport {\n itemPricePatchPropertiesFieldDocEntries,\n itemPricePatchSettingFieldDocEntries,\n itemPricePatchInfoFieldDocEntries,\n itemPricePatchFieldsFieldDocEntries,\n} from \"./item-price-patch-field-docs.js\";\nimport {\n noteItemPatchFieldDocEntries,\n calendarItemPatchFieldDocEntries,\n calendarItemPatchScheduleRangeExceptionsFieldDocEntries,\n calendarItemPatchTimeRangeFieldDocEntries,\n notesPatchSdkMethodFieldDocEntries,\n calendarsPatchSdkMethodFieldDocEntries,\n} from \"./note-calendar-patch-field-docs.js\";\nimport {\n loyaltySystemItemPatchFieldDocEntries,\n loyaltySystemInitialSubscriptionPatchFieldDocEntries,\n} from \"./loyalty-system-patch-field-docs.js\";\nimport {\n contactItemPatchFieldDocEntries,\n contactCommunicationPatchFieldDocEntries,\n contactsPatchSdkMethodFieldDocEntries,\n} from \"./contact-patch-field-docs.js\";\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 torrowChildItemCreateOptionsFieldDocEntries,\n torrowItemCreateOptionsFieldDocEntries,\n} from \"./item-create-field-docs.js\";\nimport {\n getCalendarOptionsFieldDocEntries,\n getCaseOptionsFieldDocEntries,\n getContactOptionsFieldDocEntries,\n getContextOptionsFieldDocEntries,\n getLoyaltyCardOptionsFieldDocEntries,\n getLoyaltySystemOptionsFieldDocEntries,\n getNoteOptionsFieldDocEntries,\n getResourceOptionsFieldDocEntries,\n getServiceOptionsFieldDocEntries,\n torrowItemDeleteOptionsFieldDocEntries,\n torrowItemGetOptionsFieldDocEntries,\n torrowItemUpdateOptionsFieldDocEntries,\n updateCalendarItemOptionsFieldDocEntries,\n updateCaseItemOptionsFieldDocEntries,\n updateContactItemOptionsFieldDocEntries,\n updateResourceItemOptionsFieldDocEntries,\n updateServiceItemOptionsFieldDocEntries,\n} from \"./item-crud-options-field-docs.js\";\nimport {\n itemPatchOptionsFieldDocEntries,\n itemPatchResultFieldDocEntries,\n itemPatchFieldsFieldDocEntries,\n itemPatchImageFieldDocEntries,\n contextItemPatchFieldDocEntries,\n contextsPatchSdkMethodFieldDocEntries,\n} from \"./item-patch-field-docs.js\";\nimport {\n generateSecurityTokenReqFieldDocEntries,\n generateSecurityTokenRespFieldDocEntries,\n getShareItemSessionReqFieldDocEntries,\n participationFieldDocEntries,\n participationRespFieldDocEntries,\n profileWithErrorFieldDocEntries,\n sendLinkOfItemReqFieldDocEntries,\n sendLinkOfItemRespFieldDocEntries,\n shareItemReqFieldDocEntries,\n} from \"./loyalty-access-field-docs.js\";\nimport {\n accountingTransactionFieldDocEntries,\n actionHistoryInfoFieldDocEntries,\n actionHistoryListQueryFieldDocEntries,\n announcementInfoFieldDocEntries,\n announcementsListQueryFieldDocEntries,\n balanceValueFieldDocEntries,\n exportRequestFieldDocEntries,\n exportGraphFieldDocEntries,\n generateReportReqFieldDocEntries,\n generateReportRespFieldDocEntries,\n getLoyaltySystemsStatisticsReqFieldDocEntries,\n getLoyaltySystemsStatisticsRespFieldDocEntries,\n getParticipationCountRespFieldDocEntries,\n fileInfoFieldDocEntries,\n putUrlRespFieldDocEntries,\n updateFileIdRespFieldDocEntries,\n importByFileRequestFieldDocEntries,\n importByUniqueNameRequestFieldDocEntries,\n loyaltyCardSubscriptionFieldDocEntries,\n createLoyaltyCardReqFieldDocEntries,\n initialTransactionFieldDocEntries,\n loyaltySystemsStatisticsReqFieldDocEntries,\n loyaltySystemsStatisticsRespFieldDocEntries,\n reportPropertiesFieldDocEntries,\n reportOptionsFieldDocEntries,\n torrowErrorClientFieldDocEntries,\n transactionInfoFieldDocEntries,\n updateAnnouncementStateReqFieldDocEntries,\n} from \"./operations-struct-field-docs.js\";\nimport { blockReasonFieldDocEntries, blockReasonsSdkMethodFieldDocEntries } from \"./block-reason-field-docs.js\";\nimport {\n apiKeyInfoFieldDocEntries,\n apiKeysSdkMethodFieldDocEntries,\n createApiKeyRequestFieldDocEntries,\n createApiKeyResponseFieldDocEntries,\n} from \"./api-keys-field-docs.js\";\nimport {\n contactsCommunicationSdkMethodFieldDocEntries,\n sendCommunicationCodeReqFieldDocEntries,\n sendCommunicationCodeRespFieldDocEntries,\n verifyCommunicationCodeReqFieldDocEntries,\n verifyCommunicationCodeRespFieldDocEntries,\n} from \"./contact-communication-field-docs.js\";\nimport { itemDeleteQueryFieldDocEntries } from \"./item-delete-query-field-docs.js\";\nimport {\n torrowItemFacadeContactsItemSdkMethodFieldDocEntries,\n torrowItemFacadeSdkMethodFieldDocEntries,\n torrowItemCoreFacadeSdkMethodFieldDocEntries,\n} from \"./item-social-facet-field-docs.js\";\nimport {\n resourceBehaviorSettingsFieldDocEntries,\n resourceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagMethodsFieldDocEntries,\n serviceImplicitTagParamsFieldDocEntries,\n} from \"./implicit-tag-params-field-docs.js\";\nimport {\n actionHistorySdkMethodFieldDocEntries,\n accountingTransactionsSdkMethodFieldDocEntries,\n announcementsSdkMethodFieldDocEntries,\n exportImportSdkMethodFieldDocEntries,\n loyaltyCardsSdkMethodFieldDocEntries,\n loyaltySystemsSdkMethodFieldDocEntries,\n reportsSdkMethodFieldDocEntries,\n userSdkMethodFieldDocEntries,\n userSettingsSdkMethodFieldDocEntries,\n} from \"./operations-field-docs.js\";\nimport {\n blockInfoFieldDocEntries,\n blockSettingsFieldDocEntries,\n deviceSettingsInfoFieldDocEntries,\n filterFieldDocEntries,\n layoutTypeValuesFieldDocEntries,\n metricsFieldDocEntries,\n notificationPropertiesFieldDocEntries,\n personalSolutionDataFieldDocEntries,\n solutionDataFieldDocEntries,\n userDeliveryWayFieldDocEntries,\n usageConditionFieldDocEntries,\n userSettingsInfoFieldDocEntries,\n viewBlockSettingsFieldDocEntries,\n} from \"./solution-user-settings-field-docs.js\";\nimport {\n accountTypeFieldDocEntries,\n accountingTransactionTypeFieldDocEntries,\n accountingTransactionStateFieldDocEntries,\n actionHistoryStateFieldDocEntries,\n actionHistoryTypeFieldDocEntries,\n advisedItemTypeFieldDocEntries,\n tokenStatusFieldDocEntries,\n verificationMethodFieldDocEntries,\n announcementCategoryFieldDocEntries,\n announcementPriorityFieldDocEntries,\n announcementStateFieldDocEntries,\n announcementTypeFieldDocEntries,\n anyoneAccessFieldDocEntries,\n archiveStateFieldDocEntries,\n availabilityTimeFieldDocEntries,\n availableResourcesFieldDocEntries,\n caseParticipantStateFieldDocEntries,\n caseParticipantTypeFieldDocEntries,\n caseStateFieldDocEntries,\n caseTypeFieldDocEntries,\n communicationTypeFieldDocEntries,\n deleteStateFieldDocEntries,\n deliveryChannelFieldDocEntries,\n deliveryStrategyFieldDocEntries,\n genderFieldDocEntries,\n imagePreviewSizeFieldDocEntries,\n itemSortConditionFieldDocEntries,\n itemViewSortConditionFieldDocEntries,\n noteTypeFieldDocEntries,\n objectSortConditionFieldDocEntries,\n operationTypeFieldDocEntries,\n participantStateFieldDocEntries,\n participantTypeFieldDocEntries,\n participationFieldRequirementTypeFieldDocEntries,\n participationFieldTypeFieldDocEntries,\n paymentProviderTypeFieldDocEntries,\n profileTypeFieldDocEntries,\n profileUserAvailabilityFieldDocEntries,\n reminderLocationDirectionFieldDocEntries,\n reportDeliveryTypeFieldDocEntries,\n showCaseInTimetableTypeFieldDocEntries,\n timetableDetailsVisibilityFieldDocEntries,\n ticketStateFieldDocEntries,\n ticketPaymentConfirmationSourceFieldDocEntries,\n torrowObjectTypeFieldDocEntries,\n usageConditionTypeFieldDocEntries as usageConditionTypeEnumFieldDocEntries,\n usageTypeFieldDocEntries as usageTypeEnumFieldDocEntries,\n sessionDurationTypeFieldDocEntries,\n timeSelectionTypeFieldDocEntries,\n stateManagementTypeFieldDocEntries,\n sessionPrecisionTypeFieldDocEntries,\n userAccessLevelFieldDocEntries,\n loyaltyCardIssueTypeFieldDocEntries,\n loyaltyCardUpdateKeyInformationFieldDocEntries,\n loyaltyCardUpdateNonKeyInformationFieldDocEntries,\n} from \"./shared-enum-field-docs.js\";\nimport { timetableViewTypeValuesFieldDocEntries } from \"./calendar-item.js\";\nimport { contextIconPresetValuesFieldDocEntries } from \"./context-item.js\";\nimport { torrowIdHelperFieldDocEntries, torrowItemTypeHelperFieldDocEntries } from \"./torrow-id-field-docs.js\";\n\nexport const mcpOperationsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n TorrowItemCreateOptions: torrowItemCreateOptionsFieldDocEntries,\n TorrowChildItemCreateOptions: torrowChildItemCreateOptionsFieldDocEntries,\n TorrowItemGetOptions: torrowItemGetOptionsFieldDocEntries,\n TorrowItemUpdateOptions: torrowItemUpdateOptionsFieldDocEntries,\n TorrowItemDeleteOptions: torrowItemDeleteOptionsFieldDocEntries,\n GetCalendarOptions: getCalendarOptionsFieldDocEntries,\n GetContactOptions: getContactOptionsFieldDocEntries,\n GetContextOptions: getContextOptionsFieldDocEntries,\n GetNoteOptions: getNoteOptionsFieldDocEntries,\n GetResourceOptions: getResourceOptionsFieldDocEntries,\n GetServiceOptions: getServiceOptionsFieldDocEntries,\n GetCaseOptions: getCaseOptionsFieldDocEntries,\n GetLoyaltySystemOptions: getLoyaltySystemOptionsFieldDocEntries,\n GetLoyaltyCardOptions: getLoyaltyCardOptionsFieldDocEntries,\n UpdateCalendarItemOptions: updateCalendarItemOptionsFieldDocEntries,\n UpdateContactItemOptions: updateContactItemOptionsFieldDocEntries,\n UpdateResourceItemOptions: updateResourceItemOptionsFieldDocEntries,\n UpdateServiceItemOptions: updateServiceItemOptionsFieldDocEntries,\n UpdateCaseItemOptions: updateCaseItemOptionsFieldDocEntries,\n LoyaltySystemItemPatch: loyaltySystemItemPatchFieldDocEntries,\n LoyaltySystemInitialSubscriptionPatch: loyaltySystemInitialSubscriptionPatchFieldDocEntries,\n ContactItemPatch: contactItemPatchFieldDocEntries,\n ContactCommunicationPatch: contactCommunicationPatchFieldDocEntries,\n ContactsPatchSdkMethods: contactsPatchSdkMethodFieldDocEntries,\n NoteItemPatch: noteItemPatchFieldDocEntries,\n CalendarItemPatch: calendarItemPatchFieldDocEntries,\n CalendarItemPatchScheduleRangeExceptions: calendarItemPatchScheduleRangeExceptionsFieldDocEntries,\n CalendarItemPatchTimeRange: calendarItemPatchTimeRangeFieldDocEntries,\n NotesPatchSdkMethods: notesPatchSdkMethodFieldDocEntries,\n CalendarsPatchSdkMethods: calendarsPatchSdkMethodFieldDocEntries,\n ServiceItemPatch: serviceItemPatchFieldDocEntries,\n ItemPricePatchProperties: itemPricePatchPropertiesFieldDocEntries,\n ItemPricePatchSetting: itemPricePatchSettingFieldDocEntries,\n ItemPricePatchInfo: itemPricePatchInfoFieldDocEntries,\n ItemPricePatchFields: itemPricePatchFieldsFieldDocEntries,\n CaseItemPatch: caseItemPatchFieldDocEntries,\n CasesPatchSdkMethods: casesPatchSdkMethodFieldDocEntries,\n TorrowItemPatchFields: itemPatchFieldsFieldDocEntries,\n TorrowItemPatchImage: itemPatchImageFieldDocEntries,\n ResourceItemPatch: resourceItemPatchFieldDocEntries,\n ResourcePaymentPatchProperties: resourcePaymentPatchPropertiesFieldDocEntries,\n ResourcePaymentPatchParameters: resourcePaymentPatchParametersFieldDocEntries,\n ResourcesPatchSdkMethods: resourcesPatchSdkMethodFieldDocEntries,\n TorrowItemPatchOptions: itemPatchOptionsFieldDocEntries,\n TorrowItemPatchResult: itemPatchResultFieldDocEntries,\n ContextItemPatch: contextItemPatchFieldDocEntries,\n ContextsSdkMethods: contextsPatchSdkMethodFieldDocEntries,\n TorrowIdHelpers: { ...torrowIdHelperFieldDocEntries },\n TorrowItemTypeHelpers: { ...torrowItemTypeHelperFieldDocEntries },\n /** Общие методы {@link TorrowItemCoreFacade} — один источник правды; **Loyalty*SdkMethods** подмешивают подмножество + доменные методы. */\n TorrowItemCoreFacadeSdkMethods: { ...torrowItemCoreFacadeSdkMethodFieldDocEntries },\n /** {@link TorrowItemFacade} без photo: **cases**, **notes**, **services**, **calendars**, **contexts**, **resourceItems** (+ **contacts** кроме photo). Отдельно: booking/search/CRUD в других каталогах. */\n TorrowItemFacadeSdkMethods: { ...torrowItemFacadeSdkMethodFieldDocEntries },\n /** Как **Base**, плюс **`getPhotoInfo`/`getPhotoPutUrl`** — item-слой **`client.contacts`**. */\n TorrowItemFacadeContactsItemSdkMethods: { ...torrowItemFacadeContactsItemSdkMethodFieldDocEntries },\n /** Query `cascade` / `withPinnedItems` для `client.*.delete` (contacts, notes, cases, …). */\n ItemDeleteQuery: { ...itemDeleteQueryFieldDocEntries },\n /** Явный контракт неявных параметров из service.tags (формат `<value>:Suffix`). */\n ServiceImplicitTagParams: { ...serviceImplicitTagParamsFieldDocEntries },\n /** Утилиты SDK для парсинга параметров из service tags. */\n ServiceImplicitTagMethods: { ...serviceImplicitTagMethodsFieldDocEntries },\n /** Явный контракт managed параметров из resource.tags (`MarginTime`, `lockId`). */\n ResourceBehaviorSettings: { ...resourceBehaviorSettingsFieldDocEntries },\n /** Утилиты SDK для парсинга/merge managed resource tags. */\n ResourceImplicitTagMethods: { ...resourceImplicitTagMethodsFieldDocEntries },\n ActionHistorySdkMethods: { ...actionHistorySdkMethodFieldDocEntries },\n ActionHistoryListQuery: { ...actionHistoryListQueryFieldDocEntries },\n AccountingTransactionsSdkMethods: { ...accountingTransactionsSdkMethodFieldDocEntries },\n AnnouncementsSdkMethods: { ...announcementsSdkMethodFieldDocEntries },\n AnnouncementsListQuery: { ...announcementsListQueryFieldDocEntries },\n ExportImportSdkMethods: { ...exportImportSdkMethodFieldDocEntries },\n ReportsSdkMethods: { ...reportsSdkMethodFieldDocEntries },\n LoyaltySystemsSdkMethods: { ...loyaltySystemsSdkMethodFieldDocEntries },\n LoyaltyCardsSdkMethods: { ...loyaltyCardsSdkMethodFieldDocEntries },\n UserSdkMethods: { ...userSdkMethodFieldDocEntries },\n UserSettingsSdkMethods: { ...userSettingsSdkMethodFieldDocEntries },\n BlockReasonsSdkMethods: { ...blockReasonsSdkMethodFieldDocEntries },\n ContactsCommunicationSdkMethods: { ...contactsCommunicationSdkMethodFieldDocEntries },\n BlockReason: { ...blockReasonFieldDocEntries },\n ApiKeysSdkMethods: { ...apiKeysSdkMethodFieldDocEntries },\n ApiKeyInfo: { ...apiKeyInfoFieldDocEntries },\n CreateApiKeyRequest: { ...createApiKeyRequestFieldDocEntries },\n CreateApiKeyResponse: { ...createApiKeyResponseFieldDocEntries },\n SendCommunicationCodeReq: { ...sendCommunicationCodeReqFieldDocEntries },\n SendCommunicationCodeResp: { ...sendCommunicationCodeRespFieldDocEntries },\n VerifyCommunicationCodeReq: { ...verifyCommunicationCodeReqFieldDocEntries },\n VerifyCommunicationCodeResp: { ...verifyCommunicationCodeRespFieldDocEntries },\n GenerateSecurityTokenReq: { ...generateSecurityTokenReqFieldDocEntries },\n GenerateSecurityTokenResp: { ...generateSecurityTokenRespFieldDocEntries },\n ShareItemReq: { ...shareItemReqFieldDocEntries },\n GetShareItemSessionReq: { ...getShareItemSessionReqFieldDocEntries },\n SendLinkOfItemReq: { ...sendLinkOfItemReqFieldDocEntries },\n SendLinkOfItemResp: { ...sendLinkOfItemRespFieldDocEntries },\n Participation: { ...participationFieldDocEntries },\n ProfileWithError: { ...profileWithErrorFieldDocEntries },\n ParticipationResp: { ...participationRespFieldDocEntries },\n AccountingTransaction: { ...accountingTransactionFieldDocEntries },\n BalanceValue: { ...balanceValueFieldDocEntries },\n ActionHistoryInfo: { ...actionHistoryInfoFieldDocEntries },\n AnnouncementInfo: { ...announcementInfoFieldDocEntries },\n UpdateAnnouncementStateReq: { ...updateAnnouncementStateReqFieldDocEntries },\n ExportRequest: { ...exportRequestFieldDocEntries },\n ExportGraph: { ...exportGraphFieldDocEntries },\n ImportByFileRequest: { ...importByFileRequestFieldDocEntries },\n ImportByUniqueNameRequest: { ...importByUniqueNameRequestFieldDocEntries },\n GenerateReportReq: { ...generateReportReqFieldDocEntries },\n ReportOptions: { ...reportOptionsFieldDocEntries },\n ReportProperties: { ...reportPropertiesFieldDocEntries },\n GenerateReportResp: { ...generateReportRespFieldDocEntries },\n LoyaltyCardSubscription: { ...loyaltyCardSubscriptionFieldDocEntries },\n CreateLoyaltyCardReq: { ...createLoyaltyCardReqFieldDocEntries },\n InitialTransaction: { ...initialTransactionFieldDocEntries },\n LoyaltySystemsStatisticsReq: { ...loyaltySystemsStatisticsReqFieldDocEntries },\n LoyaltySystemsStatisticsResp: { ...loyaltySystemsStatisticsRespFieldDocEntries },\n GetLoyaltySystemsStatisticsReq: { ...getLoyaltySystemsStatisticsReqFieldDocEntries },\n GetLoyaltySystemsStatisticsResp: { ...getLoyaltySystemsStatisticsRespFieldDocEntries },\n GetParticipationCountResp: { ...getParticipationCountRespFieldDocEntries },\n FileInfo: { ...fileInfoFieldDocEntries },\n PutUrlResp: { ...putUrlRespFieldDocEntries },\n UpdateFileIdResp: { ...updateFileIdRespFieldDocEntries },\n TransactionInfo: { ...transactionInfoFieldDocEntries },\n TorrowErrorClient: { ...torrowErrorClientFieldDocEntries },\n ActionHistoryType: { ...actionHistoryTypeFieldDocEntries },\n ActionHistoryState: { ...actionHistoryStateFieldDocEntries },\n AnnouncementState: { ...announcementStateFieldDocEntries },\n ItemViewSortCondition: { ...itemViewSortConditionFieldDocEntries },\n ParticipantType: { ...participantTypeFieldDocEntries },\n ParticipantState: { ...participantStateFieldDocEntries },\n AccountingTransactionState: { ...accountingTransactionStateFieldDocEntries },\n AccountingTransactionType: { ...accountingTransactionTypeFieldDocEntries },\n OperationType: { ...operationTypeFieldDocEntries },\n TorrowObjectType: { ...torrowObjectTypeFieldDocEntries },\n ItemSortCondition: { ...itemSortConditionFieldDocEntries },\n ObjectSortCondition: { ...objectSortConditionFieldDocEntries },\n AccountType: { ...accountTypeFieldDocEntries },\n AdvisedItemType: { ...advisedItemTypeFieldDocEntries },\n VerificationMethod: { ...verificationMethodFieldDocEntries },\n TokenStatus: { ...tokenStatusFieldDocEntries },\n CommunicationType: { ...communicationTypeFieldDocEntries },\n AnnouncementCategory: { ...announcementCategoryFieldDocEntries },\n AnnouncementPriority: { ...announcementPriorityFieldDocEntries },\n AnnouncementType: { ...announcementTypeFieldDocEntries },\n AnyoneAccess: { ...anyoneAccessFieldDocEntries },\n ArchiveState: { ...archiveStateFieldDocEntries },\n AvailabilityTime: { ...availabilityTimeFieldDocEntries },\n AvailableResources: { ...availableResourcesFieldDocEntries },\n CaseParticipantState: { ...caseParticipantStateFieldDocEntries },\n CaseParticipantType: { ...caseParticipantTypeFieldDocEntries },\n CaseState: { ...caseStateFieldDocEntries },\n CaseType: { ...caseTypeFieldDocEntries },\n DeleteState: { ...deleteStateFieldDocEntries },\n DeliveryChannel: { ...deliveryChannelFieldDocEntries },\n DeliveryStrategy: { ...deliveryStrategyFieldDocEntries },\n Gender: { ...genderFieldDocEntries },\n ImagePreviewSize: { ...imagePreviewSizeFieldDocEntries },\n NoteType: { ...noteTypeFieldDocEntries },\n ParticipationFieldRequirementType: { ...participationFieldRequirementTypeFieldDocEntries },\n ParticipationFieldType: { ...participationFieldTypeFieldDocEntries },\n PaymentProviderType: { ...paymentProviderTypeFieldDocEntries },\n ProfileType: { ...profileTypeFieldDocEntries },\n ProfileUserAvailability: { ...profileUserAvailabilityFieldDocEntries },\n ReminderLocationDirection: { ...reminderLocationDirectionFieldDocEntries },\n ReportDeliveryType: { ...reportDeliveryTypeFieldDocEntries },\n ShowCaseInTimetableType: { ...showCaseInTimetableTypeFieldDocEntries },\n TimetableDetailsVisibility: { ...timetableDetailsVisibilityFieldDocEntries },\n TicketState: { ...ticketStateFieldDocEntries },\n TicketPaymentConfirmationSource: { ...ticketPaymentConfirmationSourceFieldDocEntries },\n UserSettingsInfo: { ...userSettingsInfoFieldDocEntries },\n SolutionData: { ...solutionDataFieldDocEntries },\n LayoutTypeValues: { ...layoutTypeValuesFieldDocEntries },\n TimetableViewTypeValues: { ...timetableViewTypeValuesFieldDocEntries },\n ContextIconPresetValues: { ...contextIconPresetValuesFieldDocEntries },\n BlockInfo: { ...blockInfoFieldDocEntries },\n UsageCondition: { ...usageConditionFieldDocEntries },\n UsageType: { ...usageTypeEnumFieldDocEntries },\n UsageConditionType: { ...usageConditionTypeEnumFieldDocEntries },\n SessionDurationType: { ...sessionDurationTypeFieldDocEntries },\n TimeSelectionType: { ...timeSelectionTypeFieldDocEntries },\n StateManagementType: { ...stateManagementTypeFieldDocEntries },\n SessionPrecisionType: { ...sessionPrecisionTypeFieldDocEntries },\n UserAccessLevel: { ...userAccessLevelFieldDocEntries },\n LoyaltyCardIssueType: { ...loyaltyCardIssueTypeFieldDocEntries },\n LoyaltyCardUpdateKeyInformation: { ...loyaltyCardUpdateKeyInformationFieldDocEntries },\n LoyaltyCardUpdateNonKeyInformation: { ...loyaltyCardUpdateNonKeyInformationFieldDocEntries },\n ViewBlockSettings: { ...viewBlockSettingsFieldDocEntries },\n BlockSettings: { ...blockSettingsFieldDocEntries },\n Filter: { ...filterFieldDocEntries },\n Metrics: { ...metricsFieldDocEntries },\n PersonalSolutionData: { ...personalSolutionDataFieldDocEntries },\n NotificationProperties: { ...notificationPropertiesFieldDocEntries },\n UserDeliveryWay: { ...userDeliveryWayFieldDocEntries },\n DeviceSettingsInfo: { ...deviceSettingsInfoFieldDocEntries },\n};\n","/**\n * Профили пользователя (**User** `/api/v1/user/profiles`): ответы и методы класса `Profiles`.\n * Сам Профиль в данных — `ContactItem`; смысл `profileType` см. в `contactItemFieldDocEntries.profileType`.\n * Тело **`POST /api/v1/user/profiles`** в типах SDK — **`UserProfileItemForAdd`**.\n */\n// MCP method descriptions: write-prep by effects only; do not name the internal\n// profile write-defaults helper (not a public package export). Helper symbol stays\n// intentional in docs/sdk-maintenance-guide.md and facade @link JSDoc.\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const profilesSdkMethodFieldDocEntries = {\n list: {\n description:\n \"`GET /api/v1/user/profiles`. Разворачивает ответ **`ProfileListResp`**: возвращает **`ContactItem[]`** (Профили текущего пользователя; не общий CRUD `/api/v1/contacts`). Пустой массив, если **`profileList`** отсутствует или **`null`**. Требуется Bearer пользователя.\",\n valueSchema: \"→ ContactItem[]\",\n },\n add: {\n description:\n \"`POST /api/v1/user/profiles`. Тело: **`UserProfileItemForAdd`** (поля контакта для write из **`ContactItemForCreateOrUpdate`** плюс **`profileType`**, **`profileProperties`**, **`hasTimetable`**). OpenAPI ссылается на **`ContactItem`**. Фасад разворачивает **`AddProfileResp.profile`** и возвращает **`ContactItem`**. Мутация учётки: создаёт Профиль; не путать с CRUD `/api/v1/contacts`. Перед POST фасад заполняет `publicityType`, непустое `name` и нормализует поля контакта, включая `visitCard`.\",\n valueSchema: \"UserProfileItemForAdd → ContactItem\",\n },\n addByContactId: {\n description:\n \"`PUT /api/v1/user/profiles`. Тело в OpenAPI — **строка** (JSON-строка): `torrow id` уже существующего контакта, который нужно зарегистрировать как Профиль. Фасад возвращает **`ContactItem`** (`AddProfileResp.profile`). Не путать с `PUT` обновления обычного контакта по `/api/v1/contacts/{id}`.\",\n valueSchema: \"string (contactId) → ContactItem\",\n usage: \"Передай строку id существующего контакта; SDK сериализует её как JSON string.\",\n },\n updateProfileProperties: {\n description:\n \"`PUT /api/v1/user/profiles/{profileId}/profileproperties`. Тело: **`ProfileProperties`** (цвет карточки, доступность, заметка). Фасад возвращает **`torrowObject`** из ответа (если сервер его прислал), иначе `undefined`.\",\n valueSchema: \"ProfileProperties → TorrowObject | undefined\",\n },\n remove: {\n description:\n \"`GET /api/v1/user/profiles` → `GET /api/v1/user/defaultprofile` (при null — fallback-список) → `DELETE /api/v1/user/profiles/{profileId}`. Снять только существующую связь по точному ID, если остаётся другой Профиль и выбранный SDK default не затронут. Первый список должен быть пригодным и остаётся снимком проверки; один signal на всю цепочку. Успех: **`personalContactList` как `ContactItem[]`**, включая [] при null/отсутствии поля. Contact не удаляется. Защитный отказ: `TorrowSdkError` с доменом `Profiles`, причиной и `Remote/Write` effect; после начала DELETE без подтверждения исход Unknown. GET→DELETE не атомарны; связанные personal-link и другие ограничения проверяет сервер.\",\n valueSchema: \"→ ContactItem[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profileListRespFieldDocEntries = {\n profileList: {\n description:\n \"Массив контактов — **Профили** пользователя (`ContactItem`, ожидаемо с `profileType` вроде `MyProfile`). Пустой или отсутствует, если профилей нет.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const addProfileRespFieldDocEntries = {\n profile: {\n description: \"Созданный или связанный **Профиль** после операции добавления.\",\n valueSchema: \"ContactItem\",\n },\n personalContactList: {\n description: \"Устаревшее поле в схеме OpenAPI; предпочитай `profile` и актуальный список через `list`.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const removeProfileRespFieldDocEntries = {\n personalContactList: {\n description:\n \"Список контактов-Профилей после удаления (в том числе пустой), в форме ответа сервера на эту операцию.\",\n valueSchema: \"ContactItem[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateProfilePropertiesRespFieldDocEntries = {\n torrowObject: {\n description: \"Обёртка сервера над обновлённым объектом после смены свойств профиля (если вернулась).\",\n valueSchema: \"TorrowObject\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** Поля тела `PUT .../profileproperties` — те же `ProfileProperties`, что у `ContactItem.profileProperties`. */\nexport const profilePropertiesFieldDocEntries = {\n id: {\n description: \"Идентификатор сущности свойств профиля (если задан в API).\",\n valueSchema: \"string | null\",\n },\n profileUserAvailability: {\n description: \"Доступность владельца профиля для отображения (занят, свободен, скрыт и т.д.).\",\n valueSchema: \"ProfileUserAvailability\",\n },\n availabilityNote: {\n description: \"Текстовая заметка к доступности.\",\n valueSchema: \"string | null\",\n },\n color: {\n description: \"Цвет акцента карточки Профиля в UI (часто hex).\",\n valueSchema: \"string | null\",\n examples: [\"#4a90d9\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const profilesSdkMethodFieldDocs = mapFieldDocsToStrings(profilesSdkMethodFieldDocEntries);\nexport const profileListRespFieldDocs = mapFieldDocsToStrings(profileListRespFieldDocEntries);\nexport const addProfileRespFieldDocs = mapFieldDocsToStrings(addProfileRespFieldDocEntries);\nexport const removeProfileRespFieldDocs = mapFieldDocsToStrings(removeProfileRespFieldDocEntries);\nexport const updateProfilePropertiesRespFieldDocs = mapFieldDocsToStrings(updateProfilePropertiesRespFieldDocEntries);\nexport const profilePropertiesFieldDocs = mapFieldDocsToStrings(profilePropertiesFieldDocEntries);\n","/**\n * Каталог **Профилей пользователя** (User API) для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n addProfileRespFieldDocEntries,\n profileListRespFieldDocEntries,\n profilePropertiesFieldDocEntries,\n profilesSdkMethodFieldDocEntries,\n removeProfileRespFieldDocEntries,\n updateProfilePropertiesRespFieldDocEntries,\n} from \"./user-profiles-field-docs.js\";\n\nexport const mcpUserProfilesFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ProfilesSdkMethods: { ...profilesSdkMethodFieldDocEntries },\n ProfileListResp: { ...profileListRespFieldDocEntries },\n AddProfileResp: { ...addProfileRespFieldDocEntries },\n RemoveProfileResp: { ...removeProfileRespFieldDocEntries },\n UpdateProfilePropertiesResp: { ...updateProfilePropertiesRespFieldDocEntries },\n ProfileProperties: { ...profilePropertiesFieldDocEntries },\n};\n","/**\n * Описания **представлений (views)** и тел запросов для MCP / агентов.\n * REST: `/api/v1/{domain}/.../views/...`; public SDK скрывает domain и выводит его из child ID, когда это возможно.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\nexport const userViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.user.listForParent`: `GET /api/v1/{domain}/{parentId}/views/user`. Список пользовательских представлений дочерних элементов под родителем (mind map). Query: `tags`, `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`. Ответ: массив `*View` по домену (`ContactView`, `NoteView`, …).\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.user.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/user`. Прямое создание User view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.saveToMindMap`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: массив **`ViewInfo`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n listAll: {\n description:\n \"`client.views.user.listAll`: `GET /api/v1/{domain}/views/user`. Все пользовательские представления по типу элемента без фильтра по одному `parentId`. Query: `take`, `skip`, `lmFrom`, `lmTo`, `includeDeleted`, `sort`.\",\n valueSchema: \"TorrowItemType + ViewListRootQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n get: {\n description:\n \"`client.views.user.get`: `GET /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.user.delete`: `DELETE /api/v1/{domain}/{parentId}/views/user/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`** (`DeleteResponse.deleteCount`).\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.user.updateOrder(parentId, orderedViews)`: `POST .../views/user/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const pinnedViewsSdkMethodFieldDocEntries = {\n listForParent: {\n description:\n \"`client.views.pinned.listForParent`: `GET /api/v1/{domain}/{parentId}/views/pinned`. Список закреплённых; query как у `client.views.user.listForParent`.\",\n valueSchema: \"TorrowItemType + ViewListQuery → TorrowItemViewByTypeMap[itemType][]\",\n },\n create: {\n description:\n \"`client.views.pinned.create(parentId, childIds)`: `POST /api/v1/{domain}/{parentId}/views/pinned`. Прямое создание Pinned view под parent; не объявляй его автоматически эквивалентным доменному `client.relations.includeToParent`. Domain выводится из непустого однотипного `childIds`; SDK формирует wire-body `{ childIdList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly string[] → ViewInfo[]\",\n },\n get: {\n description:\n \"`client.views.pinned.get`: `GET .../views/pinned/{childId}`. Domain выводится из `childId`; возвращается общее объединение `TorrowItemView`.\",\n valueSchema: \"childId → TorrowItemView\",\n },\n delete: {\n description:\n \"`client.views.pinned.delete`: `DELETE .../views/pinned/{childId}`. Domain выводится из `childId`. Ответ: **`deleteCount`**.\",\n valueSchema: \"→ number (deleteCount)\",\n },\n updateOrder: {\n description:\n \"`client.views.pinned.updateOrder(parentId, orderedViews)`: `POST .../views/pinned/updateorder`. Domain выводится из `orderedViews[].childId`; SDK формирует wire-body `{ orderedViewList }`. Ответ: **`ViewInfo[]`**.\",\n valueSchema: \"parentId + readonly ViewOrderInput[] → ViewInfo[]\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocEntries = {\n pin: {\n description:\n \"`client.views.pin`: `POST .../views/user/{childId}/pin`. Query `alias`. Ответ: `ObjectInfo`. Конвертация **User → Pinned** (`LinkType`).\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`. Это переход User → Pinned, а не первоначальное создание связи. Для доменного создания используй `client.relations.saveToMindMap` / `includeToParent`; для списков и порядка — `client.views.*`. Связи: `docs/agents/relations-flow.md`.\",\n },\n unpin: {\n description:\n \"`client.views.unpin`: `POST .../unpin`. Для домена **`contacts`** путь: `.../views/pinned/{childId}/unpin`; для остальных (`notes`, `contexts`, `resources`, `services`, `cases`, `calendars`): `.../views/user/{childId}/unpin`. Query `alias`. Ответ: `ObjectInfo`. **Pinned → User**.\",\n valueSchema: \"query alias → ObjectInfo\",\n usage:\n \"Domain SDK выводит из `childId`; затем выбирает сегмент `user` или `pinned`. Это переход Pinned → User, не замена `relations.exclude*`; не дублируется на `RelationsFacade`.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const createViewListReqFieldDocEntries = {\n childIdList: {\n description:\n \"Список id дочерних элементов, для которых создаются представления под выбранным родителем. В SDK facade список должен быть непустым и однотипным, поскольку определяет REST domain.\",\n valueSchema: \"string[] | null\",\n examples: ['[\"550e8400-e29b-41d4-a716-446655440000\"]'],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const createViewListReqFieldDocs = mapFieldDocsToStrings(createViewListReqFieldDocEntries);\n\nexport const updateViewListOrderReqFieldDocEntries = {\n orderedViewList: {\n description: \"Новый порядок: пары `childId` и числовой `order` для сортировки в UI.\",\n valueSchema: \"ViewOrder[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const updateViewListOrderReqFieldDocs = mapFieldDocsToStrings(updateViewListOrderReqFieldDocEntries);\n\nexport const viewInfoFieldDocEntries = {\n itemLinkKey: {\n description: \"Ключ связи родитель–потомок для созданного представления.\",\n valueSchema: \"ItemLinkKey\",\n },\n itemLinkInfo: {\n description: \"Мета связи и объекта после операции.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\nexport const viewInfoFieldDocs = mapFieldDocsToStrings(viewInfoFieldDocEntries);\n\nexport const createViewListRespFieldDocEntries = {\n createdViewInfoList: {\n description: \"Список созданных view-записей с линками и метаданными.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const updateViewListOrderRespFieldDocEntries = {\n updatedViewInfoList: {\n description: \"Список view, для которых успешно обновился `order`.\",\n valueSchema: \"ViewInfo[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const deleteResponseFieldDocEntries = {\n deleteCount: {\n description:\n \"Количество удалённых записей. Для view-операций обычно 0 или 1; для `client.*.delete` — 1 при удалении только элемента, больше при `cascade: true` и/или `withPinnedItems: true` (см. **`ItemDeleteQuery`**).\",\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const viewsSdkMethodFieldDocs = mapFieldDocsToStrings(viewsSdkMethodFieldDocEntries);\nexport const userViewsSdkMethodFieldDocs = mapFieldDocsToStrings(userViewsSdkMethodFieldDocEntries);\nexport const pinnedViewsSdkMethodFieldDocs = mapFieldDocsToStrings(pinnedViewsSdkMethodFieldDocEntries);\nexport const createViewListRespFieldDocs = mapFieldDocsToStrings(createViewListRespFieldDocEntries);\nexport const updateViewListOrderRespFieldDocs = mapFieldDocsToStrings(updateViewListOrderRespFieldDocEntries);\nexport const deleteResponseFieldDocs = mapFieldDocsToStrings(deleteResponseFieldDocEntries);\n","/**\n * Каталог полей **представлений (views)** для MCP и агентов. Объединяется в {@link mcpFullFieldCatalog}.\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport {\n createViewListReqFieldDocEntries,\n createViewListRespFieldDocEntries,\n deleteResponseFieldDocEntries,\n updateViewListOrderRespFieldDocEntries,\n updateViewListOrderReqFieldDocEntries,\n viewInfoFieldDocEntries,\n pinnedViewsSdkMethodFieldDocEntries,\n userViewsSdkMethodFieldDocEntries,\n viewsSdkMethodFieldDocEntries,\n} from \"./views-field-docs.js\";\n\nexport const mcpViewsFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ViewsSdkMethods: { ...viewsSdkMethodFieldDocEntries },\n UserViewsSdkMethods: { ...userViewsSdkMethodFieldDocEntries },\n PinnedViewsSdkMethods: { ...pinnedViewsSdkMethodFieldDocEntries },\n CreateViewListReq: { ...createViewListReqFieldDocEntries },\n CreateViewListResp: { ...createViewListRespFieldDocEntries },\n UpdateViewListOrderReq: { ...updateViewListOrderReqFieldDocEntries },\n UpdateViewListOrderResp: { ...updateViewListOrderRespFieldDocEntries },\n DeleteResponse: { ...deleteResponseFieldDocEntries },\n ViewInfo: { ...viewInfoFieldDocEntries },\n};\n","/**\n * Описания полей **запросов/ответов связей и mind map** (`components.schemas` в OpenAPI),\n * в том же формате {@link ItemFieldDoc}, что и у *Item — для промптов и MCP `inputSchema`.\n *\n * Соответствие REST: {@link RelationsFacade} в `src/resources/relations/RelationsFacade.ts`.\n */\nimport { type ItemFieldDoc, mapFieldDocsToStrings } from \"./field-doc-entry.js\";\n\n/**\n * Соответствие методов `TorrowClient.relations` телам запросов и путям REST.\n * Удобно для MCP-инструментов с именами `torrow_relations_include_to_parent` и т.д.\n */\nexport const relationsSdkMethodFieldDocEntries = {\n includeToParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/items`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order` и свойства item), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. **Pinned link** (`LinkType.Pinned`): доменная операция создания связи parent → child. Для чтения и порядка результата используй `client.views.pinned.*`.\",\n valueSchema: \"parentId + ItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. Канон apps AttachItemTask. Pin User→Pinned — `client.views.pin`, не этот метод. Не путай с прямым `views.pinned.create`. См. `docs/agents/relations-flow.md`.\",\n },\n includeForUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/include/foruser`. Параметры SDK: `parentId`, массив `itemPropertiesList` (`itemId`, опционально `order`), опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `IncludeExcludeResp`. Batch-операция создания нескольких User-связей под parent (`LinkType.User`). Для одного item предпочитай `saveToMindMap`; для чтения используй `client.views.user.*`.\",\n valueSchema: \"parentId + BaseItemProperties[] + TorrowOptions → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `parentId`. OpenAPI batch. torrow-apps для user link вызывает `saveToMindMap`, не этот эндпоинт. Предпочитай `saveToMindMap` в продукте.\",\n },\n excludeFromParent: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/items`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия Pinned-связи с родителя; для удаления конкретного view есть отдельный `client.views.pinned.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n excludeFromUser: {\n description:\n \"`PUT /api/v1/{domain}/{parentId}/exclude/fromuser`. Параметры SDK: `parentId`, `childIds`, опции `versionToCheck`/`isNeedAnnouncement`. Ответ: `ExcludeResp`. Доменная операция снятия User-связи; для удаления конкретного view есть отдельный `client.views.user.delete`.\",\n valueSchema: \"childIds + TorrowOptions → ExcludeResp\",\n },\n includeToGroups: {\n description:\n \"`PUT /api/v1/{domain}/include/togroups`. Тело: `IncludeToGroupsReq`. Ответ: `IncludeExcludeResp`. Массовое включение в группы (ACL).\",\n valueSchema: \"IncludeToGroupsReq → IncludeExcludeResp\",\n usage:\n \"Domain SDK выводит из `groupIds`; список должен быть непустым и однотипным. Члены группы — `search.*(groupIds)`, не `listGroups`. UI apps часто `updateGroups` на item.\",\n },\n excludeFromGroups: {\n description: \"`PUT /api/v1/{domain}/exclude/fromgroups`. Тело: `ExcludeFromGroupsReq`. Ответ: `ExcludeResp`.\",\n valueSchema: \"ExcludeFromGroupsReq → ExcludeResp\",\n usage: \"Domain SDK выводит из `itemIds`; список должен быть непустым и однотипным.\",\n },\n saveToMindMap: {\n description:\n \"`PUT /api/v1/{domain}/{itemId}/savetomindmap`. Тело: `SaveItemToMindMapReq`. Ответ: `Participation`. Доменная операция сохранения **одного item** в личную структуру (`LinkType.User`); для чтения результата используй `client.views.user.*`.\",\n valueSchema: \"SaveItemToMindMapReq → Participation\",\n usage:\n \"Domain SDK выводит из `itemId` аргумента. Передавай `offlinable: true`, `parentItemId`, `userProfileId`. Не путать с participation accept на item-фасаде.\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemLinkKeyFieldDocEntries = {\n parentId: {\n description: \"Идентификатор родительского элемента в связи (mind map / иерархия).\",\n valueSchema: \"string (torrow id)\",\n },\n itemId: {\n description: \"Идентификатор дочернего или связанного элемента.\",\n valueSchema: \"string (torrow id)\",\n },\n ownerId: {\n description: \"Владелец связи (профиль/пользователь), если применимо к персональному представлению.\",\n valueSchema: \"string | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\n/** OpenAPI `ItemLink` — связь parent↔child в view/hit (`NoteView.itemLink` и т.п.). */\nexport const itemLinkFieldDocEntries = {\n parentId: {\n description: \"Родительский элемент связи.\",\n valueSchema: \"string | null\",\n },\n meta: {\n description: \"Метаданные связи (версия и т.п.).\",\n valueSchema: \"ObjectInfo\",\n },\n itemId: {\n description: \"Дочерний / связанный элемент.\",\n valueSchema: \"string | null\",\n },\n linkType: {\n description: \"Тип связи User / Pinned (и пр.). Флоу: `docs/agents/relations-flow.md`.\",\n valueSchema: \"LinkType\",\n usage: \"Assert в examples — best-effort; membership в listUser/listPinned — канон проверки.\",\n },\n order: {\n description: \"Порядок среди соседей под родителем.\",\n valueSchema: \"int32 | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для этой связи.\",\n valueSchema: \"string | null\",\n },\n tags: {\n description: \"Теги связи.\",\n valueSchema: \"string[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includedLinkMetaFieldDocEntries = {\n key: {\n description: \"Составной ключ созданной или обновлённой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n info: {\n description: \"Мета связи (версия и т.п.) после include.\",\n valueSchema: \"ObjectInfo\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludedLinkMetaFieldDocEntries = {\n key: {\n description: \"Ключ удалённой или затронутой связи.\",\n valueSchema: \"ItemLinkKey\",\n },\n count: {\n description: \"Число затронутых связей/записей для данного ключа (контракт API).\",\n examples: [\"1\", \"0\"],\n valueSchema: \"int32\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const itemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Torrow id элемента, который включают под родителя в иерархии.\",\n usage: \"Обязательное поле в каждом элементе `itemPropertiesList` для `includeToParent`.\",\n },\n order: {\n description: \"Порядок сортировки среди детей одного родителя (меньше — выше в списке, согласно клиенту).\",\n examples: [\"0\", \"1\", \"10\"],\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги связи элемента с родителем (фильтры, группировка в UI).\",\n examples: ['[\"важное\"]', \"[]\"],\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним узла в mind map для данной связи.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее: теги по id элемента. Предпочитать `tags`.\",\n valueSchema: \"deprecated map\",\n },\n aliasByItemId: {\n description: \"Устаревшее: псевдонимы по id. Предпочитать `alias`.\",\n valueSchema: \"deprecated map\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const baseItemPropertiesFieldDocEntries = {\n itemId: {\n description: \"Элемент, который добавляют в персональное представление пользователя под `parentId` маршрута.\",\n usage: \"Используется в `IncludeForUserReq` (include/foruser).\",\n },\n order: {\n description: \"Порядок узла в списке представления пользователя.\",\n examples: [\"0\", \"1\"],\n valueSchema: \"int32 | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const groupItemPropertiesFieldDocEntries = {\n itemId: {\n description:\n \"Элемент, включаемый в каждую из групп из `IncludeToGroupsReq.groupIds` (список id групп задаётся на уровне запроса, не здесь).\",\n },\n participantType: {\n description: \"Роль участия элемента в группе (Owner, Editor, Reader, …).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"Editor\", \"Owner\"],\n },\n order: {\n description: \"Порядок внутри группы.\",\n valueSchema: \"int32 | null\",\n },\n tags: {\n description: \"Теги для связи элемент–группа.\",\n valueSchema: \"string[] | null\",\n },\n alias: {\n description: \"Псевдоним в группе.\",\n valueSchema: \"string | null\",\n },\n tagsByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n aliasByItemId: {\n description: \"Устаревшее.\",\n valueSchema: \"deprecated\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeToParentReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Список детей, привязываемых к `parentId` из URL (`PUT .../{parentId}/include/items`).\",\n valueSchema: \"ItemProperties[]\",\n usage: \"Сценарий «прикрепить элемент к контакту/контексту/…» в продукте.\",\n },\n versionToCheck: {\n description: \"Ожидаемая версия родителя для оптимистичной блокировки; несовпадение — конфликт.\",\n examples: [\"1\", \"18\"],\n valueSchema: \"int32 | null\",\n usage: \"Берётся из `parent.meta.version`, если нужна проверка.\",\n },\n isNeedAnnouncement: {\n description: \"Сгенерировать уведомление/анонс об изменении для подписчиков.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeForUserReqFieldDocEntries = {\n itemPropertiesList: {\n description: \"Элементы и порядок для добавления в mind map **текущего пользователя** под родителем из пути.\",\n valueSchema: \"BaseItemProperties[]\",\n usage: \"Маршрут `include/foruser`; отличается от include/items тем, что работает с персональным представлением.\",\n },\n versionToCheck: {\n description: \"Версия родителя для проверки при изменении (если API ожидает).\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Нужен ли анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeReqFieldDocEntries = {\n itemIds: {\n description:\n \"Список 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:\n \"Элементы с опциональной ролью (`participantType`), порядком и тегами; каждый `itemId` будет связан со **всеми** `groupIds`.\",\n valueSchema: \"GroupItemProperties[]\",\n },\n parentId: {\n description: \"Общий родительский контекст для операции (если задан в API).\",\n valueSchema: \"string | null\",\n },\n groupIds: {\n description: \"Идентификаторы групп (элементов-групп), в которые включают перечисленные `itemId`.\",\n valueSchema: \"string[]\",\n usage: \"Маршрут без `{parentId}` в пути: `PUT /api/v1/{domain}/include/togroups`.\",\n },\n recursive: {\n description: \"Рекурсивное включение в подгруппы (семантика сервера).\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n versionToCheck: {\n description: \"Версия для проверки согласованности.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeFromGroupsReqFieldDocEntries = {\n groupIds: {\n description: \"Группы, из которых убирают элементы.\",\n valueSchema: \"string[]\",\n },\n itemIds: {\n description: \"Элементы для исключения из указанных групп.\",\n valueSchema: \"string[]\",\n },\n versionToCheck: {\n description: \"Версия для оптимистичной проверки.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const saveItemToMindMapReqFieldDocEntries = {\n userProfileId: {\n description: \"Профиль пользователя, для чьего mind map применяется операция (если отличается от токена).\",\n valueSchema: \"string | null\",\n },\n parentItemId: {\n description:\n \"Родитель для **User-link placement** (`client.relations.saveToMindMap`). Для participation accept часто не нужен — см. `participation-flow.md`. `null` — по правилам API (корень / снятие).\",\n valueSchema: \"string | null\",\n },\n alias: {\n description: \"Отображаемый псевдоним узла в карте.\",\n valueSchema: \"string | null\",\n },\n offlinable: {\n description:\n \"Офлайн-доступность узла. Для placement apps обычно `true`; не обязателен для accept offer / `securityToken` — см. `participation-flow.md`.\",\n examples: [\"true\", \"false\"],\n valueSchema: \"boolean\",\n },\n order: {\n description: \"Позиция среди соседей в ветке.\",\n valueSchema: \"int32 | null\",\n },\n versionToCheck: {\n description: \"Версия **самого элемента** `itemId` из пути, если требуется проверка.\",\n valueSchema: \"int32 | null\",\n },\n isNeedAnnouncement: {\n description: \"Анонс.\",\n valueSchema: \"boolean | null\",\n },\n securityToken: {\n description: \"Гостевой или ограниченный доступ по токену (как в других операциях API).\",\n valueSchema: \"string | null\",\n },\n participantType: {\n description: \"Тип участия при сохранении в mind map (например PublicReader для публичной карточки).\",\n valueSchema: \"ParticipantType\",\n examples: [\"Reader\", \"PublicReader\", \"Owner\"],\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeRespFieldDocEntries = {\n success: {\n description: \"Признак успешного include на стороне сервера.\",\n examples: [\"true\"],\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Метаданные по созданным/изменённым связям.\",\n valueSchema: \"IncludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const excludeRespFieldDocEntries = {\n success: {\n description: \"Успешность exclude.\",\n valueSchema: \"boolean\",\n },\n linkMetaList: {\n description: \"Сводка по исключённым связям (ключи и счётчики).\",\n valueSchema: \"ExcludedLinkMeta[] | null\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const includeExcludeRespFieldDocEntries = {\n includeResp: {\n description: \"Результат части include, если в одном ответе объединены операции.\",\n valueSchema: \"IncludeResp\",\n },\n excludeResp: {\n description: \"Результат части exclude.\",\n valueSchema: \"ExcludeResp\",\n },\n} as const satisfies Record<string, ItemFieldDoc>;\n\nexport const relationsSdkMethodFieldDocs = mapFieldDocsToStrings(\n relationsSdkMethodFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const itemPropertiesFieldDocs = mapFieldDocsToStrings(\n itemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const baseItemPropertiesFieldDocs = mapFieldDocsToStrings(\n baseItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const groupItemPropertiesFieldDocs = mapFieldDocsToStrings(\n groupItemPropertiesFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeToParentReqFieldDocs = mapFieldDocsToStrings(\n includeToParentReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const includeForUserReqFieldDocs = mapFieldDocsToStrings(\n includeForUserReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeReqFieldDocs = mapFieldDocsToStrings(excludeReqFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeToGroupsReqFieldDocs = mapFieldDocsToStrings(\n includeToGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludeFromGroupsReqFieldDocs = mapFieldDocsToStrings(\n excludeFromGroupsReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const saveItemToMindMapReqFieldDocs = mapFieldDocsToStrings(\n saveItemToMindMapReqFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n\nexport const includeRespFieldDocs = mapFieldDocsToStrings(includeRespFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const excludeRespFieldDocs = mapFieldDocsToStrings(excludeRespFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includeExcludeRespFieldDocs = mapFieldDocsToStrings(\n includeExcludeRespFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const itemLinkKeyFieldDocs = mapFieldDocsToStrings(itemLinkKeyFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const itemLinkFieldDocs = mapFieldDocsToStrings(itemLinkFieldDocEntries as Record<string, ItemFieldDoc>);\nexport const includedLinkMetaFieldDocs = mapFieldDocsToStrings(\n includedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\nexport const excludedLinkMetaFieldDocs = mapFieldDocsToStrings(\n excludedLinkMetaFieldDocEntries as Record<string, ItemFieldDoc>,\n);\n","import { mcpSdkErrorFieldCatalog } from \"./sdk-error-field-docs.js\";\n/**\n * Каталог описаний схем **связей и mind map** для MCP / агентов.\n * Имена верхнего уровня совпадают с `components.schemas` в OpenAPI (кроме `RelationsSdkMethods`).\n */\nimport type { ItemFieldDoc } from \"./field-doc-entry.js\";\nimport { mcpBookingFieldCatalog } from \"./mcp-booking-catalog.js\";\nimport { mcpItemFieldCatalog } from \"./mcp-field-catalog.js\";\nimport { mcpAuthFieldCatalog } from \"./mcp-auth-catalog.js\";\nimport { mcpSearchFieldCatalog } from \"./mcp-search-catalog.js\";\nimport { mcpNotesFieldCatalog } from \"./mcp-notes-catalog.js\";\nimport { mcpOperationsFieldCatalog } from \"./mcp-operations-catalog.js\";\nimport { mcpUserProfilesFieldCatalog } from \"./mcp-user-profiles-catalog.js\";\nimport { mcpViewsFieldCatalog } from \"./mcp-views-catalog.js\";\nimport {\n baseItemPropertiesFieldDocEntries,\n excludedLinkMetaFieldDocEntries,\n excludeFromGroupsReqFieldDocEntries,\n excludeReqFieldDocEntries,\n excludeRespFieldDocEntries,\n includeExcludeRespFieldDocEntries,\n includeForUserReqFieldDocEntries,\n includedLinkMetaFieldDocEntries,\n includeRespFieldDocEntries,\n includeToGroupsReqFieldDocEntries,\n includeToParentReqFieldDocEntries,\n itemLinkKeyFieldDocEntries,\n itemLinkFieldDocEntries,\n itemPropertiesFieldDocEntries,\n groupItemPropertiesFieldDocEntries,\n relationsSdkMethodFieldDocEntries,\n saveItemToMindMapReqFieldDocEntries,\n} from \"./relations-field-docs.js\";\nimport { linkTypeFieldDocEntries } from \"./shared-enum-field-docs.js\";\n\nexport const mcpRelationFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n /** Методы класса `TorrowClient.relations` ↔ OpenAPI пути и схемы тел. */\n RelationsSdkMethods: { ...relationsSdkMethodFieldDocEntries },\n /** `ItemLink.linkType` — User / Pinned (флоу: `docs/agents/relations-flow.md`). */\n LinkType: { ...linkTypeFieldDocEntries },\n ItemLink: { ...itemLinkFieldDocEntries },\n ItemLinkKey: { ...itemLinkKeyFieldDocEntries },\n IncludedLinkMeta: { ...includedLinkMetaFieldDocEntries },\n ExcludedLinkMeta: { ...excludedLinkMetaFieldDocEntries },\n ItemProperties: { ...itemPropertiesFieldDocEntries },\n BaseItemProperties: { ...baseItemPropertiesFieldDocEntries },\n GroupItemProperties: { ...groupItemPropertiesFieldDocEntries },\n IncludeToParentReq: { ...includeToParentReqFieldDocEntries },\n IncludeForUserReq: { ...includeForUserReqFieldDocEntries },\n ExcludeReq: { ...excludeReqFieldDocEntries },\n IncludeToGroupsReq: { ...includeToGroupsReqFieldDocEntries },\n ExcludeFromGroupsReq: { ...excludeFromGroupsReqFieldDocEntries },\n SaveItemToMindMapReq: { ...saveItemToMindMapReqFieldDocEntries },\n IncludeResp: { ...includeRespFieldDocEntries },\n ExcludeResp: { ...excludeRespFieldDocEntries },\n IncludeExcludeResp: { ...includeExcludeRespFieldDocEntries },\n};\n\n/** Объединение каталогов *Item, связей, записи/оплаты и представлений — один объект для генерации MCP. */\nexport const mcpFullFieldCatalog: Record<string, Record<string, ItemFieldDoc>> = {\n ...mcpItemFieldCatalog,\n ...mcpRelationFieldCatalog,\n ...mcpBookingFieldCatalog,\n ...mcpSdkErrorFieldCatalog,\n ...mcpViewsFieldCatalog,\n ...mcpUserProfilesFieldCatalog,\n ...mcpAuthFieldCatalog,\n ...mcpSearchFieldCatalog,\n ...mcpNotesFieldCatalog,\n ...mcpOperationsFieldCatalog,\n};\n\nexport { mcpAuthFieldCatalog };\nexport { mcpSearchFieldCatalog };\nexport { mcpNotesFieldCatalog };\nexport { mcpOperationsFieldCatalog };\nexport { mcpBookingFieldCatalog };\nexport { mcpViewsFieldCatalog };\nexport { mcpUserProfilesFieldCatalog };\n"],"mappings":"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,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":["VerificationMethodValues","TokenStatusValues","AvailableResourcesValues","NoteTypeValues","PaymentProviderTypeValues","UsageConditionTypeWireValues","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageTypeFieldDocs","usageConditionTypeFieldDocEntries","usageConditionTypeFieldDocs","availabilityTimeFieldDocEntries","usageTypeFieldDocEntries","usageConditionTypeFieldDocEntries","profilePropertiesFieldDocEntries","profilePropertiesFieldDocEntries"]}
|