{
    "project": "EE DataCollector Esoteric API v2.3.0",
    "generated_at": "2026-07-10T01:19:04+00:00",
    "export_type": "ai_single_file",
    "source": "doc/index.php?download=ai",
    "toc_meta": {
        "project": "API V2.3 Beta",
        "version": "2.3.0",
        "updated_at": "2026-03-18",
        "author": "Евгений Ефимченко",
        "description": "Актуальная техническая документация по асинхронному API портрета, прогноза, Synthesis++ и новому синхронному почасовому geocentric-прогнозу Луны."
    },
    "response_field_dictionary": [
        {
            "path": "**.status",
            "type": "string",
            "title": "Статус блока",
            "description": "Состояние выполнения операции или расчета блока.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.message",
            "type": "string",
            "title": "Сообщение",
            "description": "Человекочитаемое сообщение о состоянии или ошибке.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.error",
            "type": "string|object",
            "title": "Ошибка",
            "description": "Описание ошибки выполнения запроса или задачи.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.request_id",
            "type": "string",
            "title": "ID задачи",
            "description": "Внешний идентификатор задачи для polling и экспорта.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.schema_version",
            "type": "string",
            "title": "Версия схемы",
            "description": "Версия контракта соответствующего блока данных.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.date",
            "type": "string",
            "title": "Дата",
            "description": "Календарная дата в формате YYYY-MM-DD или ISO-8601.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.type",
            "type": "string",
            "title": "Тип",
            "description": "Машинный тип объекта или режима.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.name",
            "type": "string",
            "title": "Название",
            "description": "Человекочитаемое название объекта.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.label",
            "type": "string",
            "title": "Название",
            "description": "Краткая человекочитаемая подпись значения.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.desc",
            "type": "string",
            "title": "Описание",
            "description": "Краткое смысловое описание значения.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.description",
            "type": "string",
            "title": "Описание",
            "description": "Человекочитаемое описание объекта или правила.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.value",
            "type": "mixed",
            "title": "Значение",
            "description": "Расчетное или справочное значение поля.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.val",
            "type": "integer|float|string",
            "title": "Значение",
            "description": "Основное расчетное значение элемента.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.source",
            "type": "string|object",
            "title": "Источник",
            "description": "Источник данных или расчета.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.meta",
            "type": "object",
            "title": "Метаданные",
            "description": "Служебные метаданные расчета, версии или источника.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.city",
            "type": "string",
            "title": "Город",
            "description": "Город, использованный в геоконтексте расчета.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.country",
            "type": "string",
            "title": "Страна",
            "description": "Страна, переданная или определенная для геоконтекста.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.lat",
            "type": "float",
            "title": "Широта",
            "description": "Географическая широта в градусах.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.lng",
            "type": "float",
            "title": "Долгота",
            "description": "Географическая долгота в градусах.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.timezone",
            "type": "string",
            "title": "Часовой пояс",
            "description": "IANA-идентификатор часового пояса.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.calculated_at_utc",
            "type": "string",
            "title": "Время расчета UTC",
            "description": "Момент расчета в UTC.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.calculated_at_local",
            "type": "string",
            "title": "Локальное время расчета",
            "description": "Момент расчета в локальном часовом поясе.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.location_used",
            "type": "object",
            "title": "Использованная локация",
            "description": "Фактическая локация, примененная в расчете.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.source_formula",
            "type": "object",
            "title": "Формула расчета",
            "description": "Структурированная формула получения значения.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.raw_expression",
            "type": "string",
            "title": "Исходная формула",
            "description": "Человекочитаемое выражение формулы.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.operands",
            "type": "array",
            "title": "Операнды",
            "description": "Входные значения формулы.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.raw_result",
            "type": "integer|float|string",
            "title": "Сырой результат",
            "description": "Результат до нормализации.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.normalized_result",
            "type": "integer|float|string",
            "title": "Нормализованный результат",
            "description": "Результат после применения правила нормализации.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.rule",
            "type": "string",
            "title": "Правило",
            "description": "Идентификатор правила нормализации или расчета.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.ecliptic_longitude_deg",
            "type": "float",
            "title": "Эклиптическая долгота",
            "description": "Положение объекта на эклиптике в градусах.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.ecliptic_latitude_deg",
            "type": "float|null",
            "title": "Эклиптическая широта",
            "description": "Эклиптическая широта объекта в градусах.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.sign",
            "type": "string",
            "title": "Знак",
            "description": "Машинный код знака Зодиака.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.sign_label",
            "type": "string",
            "title": "Название знака",
            "description": "Русское название знака Зодиака.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.sign_degree",
            "type": "float|integer",
            "title": "Градус в знаке",
            "description": "Положение внутри текущего знака.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.is_retro",
            "type": "boolean",
            "title": "Ретроградность",
            "description": "Признак ретроградного движения объекта.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.speed_deg_h",
            "type": "float|null",
            "title": "Скорость",
            "description": "Оценочная скорость движения в градусах в час.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.gate",
            "type": "integer",
            "title": "Ворота HD",
            "description": "Номер ворот Human Design.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.line",
            "type": "integer",
            "title": "Линия HD",
            "description": "Номер линии Human Design.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "**.defined",
            "type": "boolean",
            "title": "Определенность центра",
            "description": "Признак определенного центра в bodygraph.",
            "category": "common",
            "visibility": "public"
        },
        {
            "path": "status",
            "type": "string",
            "title": "Статус ответа",
            "description": "Статус верхнего уровня: pending, processing, success или error.",
            "category": "root",
            "visibility": "public",
            "example": "success"
        },
        {
            "path": "request_id",
            "type": "string",
            "title": "ID задачи",
            "description": "Внешний идентификатор задачи, возвращаемый create_task и включаемый в get_result/export_result для трассировки результата.",
            "category": "root",
            "visibility": "public",
            "example": "task_e2475dfc1c5d07bc148e7da7"
        },
        {
            "path": "warnings",
            "type": "array",
            "title": "Предупреждения ответа",
            "description": "Список глобальных предупреждений worker-процесса или расчетного блока.",
            "category": "root",
            "visibility": "public"
        },
        {
            "path": "warnings[]",
            "type": "string",
            "title": "Предупреждение",
            "description": "Глобальное предупреждение worker-процесса или расчетного блока.",
            "category": "root",
            "visibility": "public"
        },
        {
            "path": "context.timezone",
            "type": "string",
            "title": "Часовой пояс ответа",
            "description": "Legacy alias subject timezone в верхнеуровневом API-контексте. Для новых интеграций используйте context.subject_timezone и context.temporal_timezone/systems.context.*_timezone.",
            "category": "context",
            "visibility": "public",
            "example": "Asia/Krasnoyarsk",
            "status": "legacy"
        },
        {
            "path": "context.subject_timezone",
            "type": "string",
            "title": "Subject timezone",
            "description": "IANA timezone натального subject-контекста.",
            "category": "context",
            "visibility": "public",
            "example": "Asia/Krasnoyarsk"
        },
        {
            "path": "context.temporal_timezone",
            "type": "string",
            "title": "Temporal timezone",
            "description": "IANA timezone temporal-контекста target_date/target_time.",
            "category": "context",
            "visibility": "public",
            "example": "Europe/Moscow"
        },
        {
            "path": "context.quota",
            "type": "object",
            "title": "Квота запроса",
            "description": "Технический блок списания и возврата почасовой квоты API-ключа.",
            "category": "quota",
            "visibility": "technical"
        },
        {
            "path": "context.quota.charged_cost",
            "type": "integer",
            "title": "Списанная стоимость запроса",
            "description": "Изначально списанная стоимость запроса в условных единицах квоты.",
            "category": "quota",
            "visibility": "technical",
            "example": 3
        },
        {
            "path": "context.quota.effective_cost",
            "type": "integer",
            "title": "Итоговая стоимость запроса",
            "description": "Стоимость после применения политики кэша и возможного возврата квоты.",
            "category": "quota",
            "visibility": "technical",
            "example": 1
        },
        {
            "path": "context.quota.refunded_cost",
            "type": "integer",
            "title": "Возвращенная квота",
            "description": "Количество условных единиц квоты, возвращенное после cache-hit.",
            "category": "quota",
            "visibility": "technical",
            "example": 2
        },
        {
            "path": "context.quota.cache_hit",
            "type": "boolean",
            "title": "Признак cache-hit",
            "description": "true означает, что расчет был обслужен из кэша с учетом политики возврата.",
            "category": "quota",
            "visibility": "technical",
            "example": true
        },
        {
            "path": "context.quota.policy",
            "type": "string",
            "title": "Политика квоты",
            "description": "Идентификатор примененной политики списания и возврата квоты.",
            "category": "quota",
            "visibility": "technical",
            "example": "refund_after_successful_cache_hit"
        },
        {
            "path": "systems",
            "type": "object",
            "title": "Расчетные системы",
            "description": "Классический ответ с выбранными модулями расчета.",
            "category": "systems",
            "visibility": "public"
        },
        {
            "path": "systems.schema_version",
            "type": "string",
            "title": "Версия схемы systems",
            "description": "Версия схемы верхнего блока systems.",
            "category": "systems",
            "visibility": "public",
            "example": "2.2.5"
        },
        {
            "path": "systems.context",
            "type": "object",
            "title": "Контекст расчета",
            "description": "Subject/temporal контекст и параметры проекции ответа.",
            "category": "systems.context",
            "visibility": "public"
        },
        {
            "path": "systems.context.subject.**",
            "type": "mixed",
            "title": "Параметр субъекта",
            "description": "Натальные неизменяемые данные пользователя: ФИО, дата/время/место рождения и координаты.",
            "category": "systems.context",
            "visibility": "public"
        },
        {
            "path": "systems.context.portrait.user_hash",
            "type": "string",
            "title": "Хеш портрета",
            "description": "Стабильный хеш subject-контекста для кэша портрета.",
            "category": "systems.context",
            "visibility": "technical"
        },
        {
            "path": "systems.context.portrait.cached",
            "type": "boolean",
            "title": "Портрет из кэша",
            "description": "true означает, что immutable portrait был прочитан из кэша.",
            "category": "systems.context",
            "visibility": "technical"
        },
        {
            "path": "systems.context.response.omit_portrait_payload",
            "type": "boolean",
            "title": "Исключение портрета",
            "description": "true означает, что тяжелые portrait-блоки не включены в ответ.",
            "category": "systems.context",
            "visibility": "public"
        },
        {
            "path": "systems.context.calc_profile_id",
            "type": "string",
            "title": "Профиль расчета",
            "description": "Профиль весов synthesis: A или B.",
            "category": "systems.context",
            "visibility": "public",
            "example": "A"
        },
        {
            "path": "systems.context.subject_timezone",
            "type": "string",
            "title": "Subject timezone",
            "description": "IANA timezone натального subject-контекста. Дублирует systems.context.subject.birth_timezone для явности.",
            "category": "systems.context",
            "visibility": "public",
            "example": "Asia/Krasnoyarsk"
        },
        {
            "path": "systems.context.temporal.**",
            "type": "mixed",
            "title": "Параметр temporal-контекста",
            "description": "Временной и географический параметр прогноза или транзитов.",
            "category": "systems.context",
            "visibility": "public"
        },
        {
            "path": "systems.context.temporal.target_time",
            "type": "string",
            "title": "Целевое локальное время",
            "description": "Локальное время temporal-контекста. Используется одинаково для root transits, forecast day transits, Raziel planetary hours и Chaldean/Vedic daily calculations.",
            "category": "systems.context",
            "visibility": "public"
        },
        {
            "path": "systems.context.temporal_timezone",
            "type": "string",
            "title": "Temporal timezone",
            "description": "IANA timezone temporal-контекста. Дублирует systems.context.temporal.timezone для явности.",
            "category": "systems.context",
            "visibility": "public",
            "example": "Europe/Moscow"
        },
        {
            "path": "systems.context.forecast_cache.cached",
            "type": "boolean",
            "title": "Прогноз из кэша",
            "description": "true означает, что temporal forecast был прочитан из кэша.",
            "category": "systems.context",
            "visibility": "technical"
        },
        {
            "path": "systems.numerology",
            "type": "object",
            "title": "Нумерология",
            "description": "Портретные и temporal нумерологические расчеты.",
            "category": "numerology",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.life_path",
            "type": "integer",
            "title": "Число жизненного пути",
            "description": "Число жизненного пути по дате рождения.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.destiny",
            "type": "integer",
            "title": "Число судьбы",
            "description": "Число судьбы по полному имени.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.personality",
            "type": "integer",
            "title": "Число личности",
            "description": "Число личности по согласным полного имени.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.soul_urge",
            "type": "integer",
            "title": "Число души",
            "description": "Число души по гласным полного имени.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.maturity",
            "type": "integer",
            "title": "Число зрелости",
            "description": "Сводное число зрелости на базе life_path и destiny.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.name_breakdown.*",
            "type": "mixed",
            "title": "Разбор имени",
            "description": "Промежуточные суммы полного имени, гласных и согласных.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.meta.context",
            "type": "string",
            "title": "Контекст нумерологии",
            "description": "Режим нумерологического расчета: portrait или temporal.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.meta.calculation_basis",
            "type": "string",
            "title": "Основа расчета нумерологии",
            "description": "Источник входных данных, использованный для нумерологического расчета.",
            "category": "numerology.base",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.raziel_system.hebrew_spelling",
            "type": "string",
            "title": "Еврейская запись имени",
            "description": "Транслитерированная запись полного имени в символах еврейского алфавита для расчета Raziel.",
            "category": "numerology.raziel",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.raziel_system.gematria_full",
            "type": "integer",
            "title": "Полная гематрия",
            "description": "Полная сумма гематрии имени.",
            "category": "numerology.raziel",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.raziel_system.gematria_reduced",
            "type": "integer",
            "title": "Редуцированная гематрия",
            "description": "Редуцированное значение гематрии имени.",
            "category": "numerology.raziel",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny.*.val",
            "type": "integer",
            "title": "Аркан legacy-матрицы",
            "description": "Числовое значение аркана 1..22.",
            "category": "numerology.matrix_destiny",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny.*.label",
            "type": "string",
            "title": "Название аркана",
            "description": "Русское название аркана legacy-матрицы.",
            "category": "numerology.matrix_destiny",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny.*.desc",
            "type": "string",
            "title": "Роль точки матрицы",
            "description": "Краткая смысловая роль точки в legacy-матрице.",
            "category": "numerology.matrix_destiny",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny.sky_line",
            "type": "integer",
            "title": "Небесная линия",
            "description": "Значение небесной линии legacy-матрицы.",
            "category": "numerology.matrix_destiny",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny.earth_line",
            "type": "integer",
            "title": "Земная линия",
            "description": "Значение земной линии legacy-матрицы.",
            "category": "numerology.matrix_destiny",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.chaldean.**",
            "type": "mixed",
            "title": "Халдейская нумерология",
            "description": "Поле халдейской ветки: системное имя, числа, управители, составные значения или meta-контекст.",
            "category": "numerology.chaldean",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.vedic.**",
            "type": "mixed",
            "title": "Ведическая нумерология",
            "description": "Поле ведической ветки: jiva, karma, nama, отношения планет или meta-контекст.",
            "category": "numerology.vedic",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.system_name",
            "type": "string",
            "title": "Название психоматрицы",
            "description": "Название системы психоматрицы.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.**",
            "type": "mixed",
            "title": "Психоматрица",
            "description": "Поле психоматрицы Пифагора: рабочие числа, ячейки матрицы, линии и метаданные.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.working_numbers[]",
            "type": "integer",
            "title": "Рабочее число психоматрицы",
            "description": "Промежуточное рабочее число квадрата Пифагора.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.matrix.*.count",
            "type": "integer",
            "title": "Количество цифр",
            "description": "Количество повторений цифры в квадрате Пифагора.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.matrix.*.val",
            "type": "string",
            "title": "Повторы цифры",
            "description": "Строковое представление повторений цифры.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.matrix.*.quality",
            "type": "string",
            "title": "Качество цифры",
            "description": "Смысловая зона цифры в психоматрице.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.psycho_matrix.lines.*",
            "type": "mixed",
            "title": "Линия психоматрицы",
            "description": "Рассчитанный показатель линии психоматрицы.",
            "category": "numerology.psycho_matrix",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2",
            "type": "object",
            "title": "MatrixDestiny22 v2",
            "description": "Новый контракт матрицы судьбы: basis, canonical, derived_experimental и meta.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.**",
            "type": "mixed",
            "title": "Поле MatrixDestiny22 v2",
            "description": "Поле нового контракта MatrixDestiny22: basis, canonical, derived_experimental или meta.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.system_name",
            "type": "string",
            "title": "Название MatrixDestiny22",
            "description": "Название канонической модели матрицы судьбы.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public",
            "example": "MatrixDestiny22"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.version",
            "type": "string",
            "title": "Версия MatrixDestiny22",
            "description": "Версия контракта MatrixDestiny22.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public",
            "example": "2.1.0"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.basis.*",
            "type": "mixed",
            "title": "База MatrixDestiny22",
            "description": "Исходные данные и правила расчета MatrixDestiny22.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.canonical.core.*.*",
            "type": "mixed",
            "title": "Каноническое ядро MatrixDestiny22",
            "description": "Поле базового канонического якоря: val, label, desc, semantic_role или source_formula.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.canonical.age_nodes.*.*",
            "type": "mixed",
            "title": "Возрастной узел MatrixDestiny22",
            "description": "Поле канонического возрастного узла.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.canonical.generic_programs.*.*",
            "type": "mixed",
            "title": "Родовая программа MatrixDestiny22",
            "description": "Поле канонической родовой линии.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.canonical.channels.*.*",
            "type": "mixed",
            "title": "Канал MatrixDestiny22",
            "description": "Поле канонического канала self_search, socialization или spiritual_exam.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.canonical.health_map.*.*",
            "type": "mixed",
            "title": "Карта здоровья MatrixDestiny22",
            "description": "Поле строки канонической карты здоровья.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.nodes.*.*",
            "type": "mixed",
            "title": "Производный узел MatrixDestiny22",
            "description": "Поле explain-узла: id, val, label, group, semantic_role, description, source_formula или position_hint.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.lines.*.*",
            "type": "mixed",
            "title": "Производная линия MatrixDestiny22",
            "description": "Поле explain-линии матрицы.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.sectors.*.*",
            "type": "mixed",
            "title": "Производный сектор MatrixDestiny22",
            "description": "Поле explain-сектора матрицы.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.age_cycle.*",
            "type": "mixed",
            "title": "Возрастной цикл MatrixDestiny22",
            "description": "Статические возрастные anchors MatrixDestiny22. Temporal current_age/current_segment/reference_date удалены из immutable portrait.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.*",
            "type": "mixed",
            "title": "Интерпретация MatrixDestiny22",
            "description": "Метрики и текстовые признаки explain-интерпретации.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.shadow_arcana",
            "type": "array<int>",
            "title": "Legacy shadow arcana",
            "description": "Legacy explain-поле. Список уникальных арканов из derived_experimental.nodes, у которых polarity=shadow. Это статический маркер геометрии матрицы, не дневная активация, не текущий кризис, не прогноз и не диагноз.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "status": "legacy",
            "deprecated_after": "matrix-destiny-interpretation-2.2.0",
            "replacement": "static_shadow_arcana"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.shadow_arcana_deprecated",
            "type": "boolean",
            "title": "Признак legacy shadow_arcana",
            "description": "true означает, что shadow_arcana сохранен только как legacy alias для static_shadow_arcana.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": true,
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.static_shadow_arcana",
            "type": "array<int>",
            "title": "Статические теневые арканы",
            "description": "Список уникальных арканов с polarity=shadow, присутствующих в статической геометрии derived_experimental.nodes. Не является temporal-прогнозом и не создает conflict_nodes без активирующего evidence.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": [
                16
            ],
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.static_shadow_nodes",
            "type": "object<string,array<string>>",
            "title": "Узлы статических теневых арканов",
            "description": "Карта arcana => список node_id, где этот shadow-аркан присутствует в derived_experimental.nodes.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": {
                "16": [
                    "money_c"
                ]
            },
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.static_shadow_domains",
            "type": "object<string,array<string>>",
            "title": "Домены статических теневых узлов",
            "description": "Карта domain/group => список node_id, где присутствуют статические shadow-арканы.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": {
                "money": [
                    "money_c"
                ]
            },
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.interpretation_version",
            "type": "string",
            "title": "Версия интерпретации",
            "description": "Версия алгоритма статической explain-интерпретации. Для исправленной модели: matrix-destiny-interpretation-2.2.0.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": "matrix-destiny-interpretation-2.2.0",
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.shadow_arcana_semantics",
            "type": "string",
            "title": "Семантика shadow_arcana",
            "description": "Фиксирует, что shadow_arcana/static_shadow_arcana является static_geometry_marker_not_temporal_prediction.",
            "category": "numerology.matrix_destiny_v2.interpretation",
            "visibility": "public",
            "example": "static_geometry_marker_not_temporal_prediction",
            "status": "actual"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.today",
            "type": "removed",
            "title": "Удаленная portrait activation.today",
            "description": "Удалено из immutable portrait: дневная активация является temporal-слоем и доступна только в forecast projection.",
            "category": "numerology.matrix_destiny_v2.activation",
            "visibility": "technical",
            "status": "removed",
            "removed_in": "systems.schema_version 2.2.4",
            "replacement": "systems.forecast.data.days[].numerology.matrix_destiny_activation"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta.time_scope",
            "type": "string",
            "title": "Scope активации MatrixDestiny22",
            "description": "Фиксирует, что activation является temporal-слоем и не хранит дневные данные внутри immutable portrait.",
            "category": "numerology.matrix_destiny_v2.activation",
            "visibility": "public",
            "example": "temporal"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta.available_in",
            "type": "string",
            "title": "Где доступна активация",
            "description": "Путь к актуальной forecast-проекции дневной активации MatrixDestiny22.",
            "category": "numerology.matrix_destiny_v2.activation",
            "visibility": "public",
            "example": "systems.forecast.data.days[].numerology.matrix_destiny_activation"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta.*",
            "type": "mixed",
            "title": "Метаданные активации MatrixDestiny22",
            "description": "Метаданные temporal-слоя активации и путь к forecast projection.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.numerology.data.matrix_destiny_v2.meta.*",
            "type": "mixed",
            "title": "Метаданные MatrixDestiny22",
            "description": "Режимы canonical/derived, списки блоков и признаки совместимости контракта.",
            "category": "numerology.matrix_destiny_v2",
            "visibility": "public"
        },
        {
            "path": "systems.astrology",
            "type": "object",
            "title": "Астрология",
            "description": "Натальная карта, планеты, точки, аспекты, дома и лунный статус.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.**",
            "type": "mixed",
            "title": "Поле астрологии",
            "description": "Поле натальной астрологической карты, эфемерид, аспектов, домов или метаданных.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.source.*",
            "type": "mixed",
            "title": "Источник астрологии",
            "description": "Источник эфемерид натальной карты.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.meta.*",
            "type": "mixed",
            "title": "Метаданные астрологии",
            "description": "Метаданные расчета натальной карты и использованной локации.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.meta.houses_system",
            "type": "string",
            "title": "Примененная система домов",
            "description": "Реально примененная система домов. Не должна называться Placidus, если использован fallback.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.meta.houses_system_requested",
            "type": "string",
            "title": "Запрошенная система домов",
            "description": "Система домов, которую предпочитает контракт расчета. Текущее значение: Placidus.",
            "category": "astrology",
            "visibility": "public",
            "example": "Placidus"
        },
        {
            "path": "systems.astrology.data.meta.houses_system_applied",
            "type": "string",
            "title": "Фактическая система домов",
            "description": "Система домов, реально примененная расчетом: Porphyry или Equal (MC) при fallback.",
            "category": "astrology",
            "visibility": "public",
            "example": "Porphyry"
        },
        {
            "path": "systems.astrology.data.meta.houses_fallback_used",
            "type": "boolean",
            "title": "Fallback домов",
            "description": "true означает, что вместо запрошенного Placidus применена стабильная fallback-система.",
            "category": "astrology",
            "visibility": "public",
            "example": true
        },
        {
            "path": "systems.astrology.data.meta.houses_fallback_reason",
            "type": "string",
            "title": "Причина fallback домов",
            "description": "Машинно-читаемое/человекочитаемое объяснение, почему Placidus не применен.",
            "category": "astrology",
            "visibility": "public",
            "example": "Placidus unavailable in current PHP implementation; stable fallback applied"
        },
        {
            "path": "systems.astrology.data.lunar.*",
            "type": "mixed",
            "title": "Лунный статус",
            "description": "Фаза Луны, лунный день, затмения и void-of-course для натального контекста.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.planets.*.*",
            "type": "mixed",
            "title": "Планета натальной карты",
            "description": "Положение планеты в натальной карте.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.planets.north_node",
            "type": "object",
            "title": "Северный узел",
            "description": "Канонический ключ северного лунного узла. Legacy northnode не возвращается в planets.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.planets.south_node",
            "type": "object",
            "title": "Южный узел",
            "description": "Канонический ключ южного лунного узла. Legacy southnode не возвращается в planets.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.points.*.*",
            "type": "mixed",
            "title": "Точка натальной карты",
            "description": "Положение расчетной точки натальной карты.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.aspects[].*",
            "type": "mixed",
            "title": "Аспект натальной карты",
            "description": "Поле аспекта: p1, p2, type, угол, орбис, точность, сила или тональность.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.astrology.data.houses.*.*",
            "type": "mixed",
            "title": "Дом натальной карты",
            "description": "Поле дома: номер, знак, градус и координаты.",
            "category": "astrology",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph",
            "type": "object",
            "title": "Human Design",
            "description": "Bodygraph: тип, профиль, авторитет, стратегия, центры, каналы и активации.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.**",
            "type": "mixed",
            "title": "Поле Human Design",
            "description": "Поле bodygraph: тип, профиль, авторитет, центры, каналы, активации или метаданные.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.type",
            "type": "string",
            "title": "Тип Human Design",
            "description": "Тип bodygraph: Generator, Projector, Manifestor, Manifesting Generator или Reflector.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.profile",
            "type": "string",
            "title": "Профиль Human Design",
            "description": "Профиль линий личности/дизайна.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.authority",
            "type": "string",
            "title": "Авторитет",
            "description": "Определенный авторитет принятия решений.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.strategy",
            "type": "string",
            "title": "Стратегия",
            "description": "Стратегия типа Human Design.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.incarnation_cross",
            "type": "string",
            "title": "Инкарнационный крест",
            "description": "Итоговая строка инкарнационного креста по воротам Солнца/Земли.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.centers.*.defined",
            "type": "boolean",
            "title": "Определенность центра",
            "description": "true означает, что центр определен активными каналами.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.channels[]",
            "type": "string",
            "title": "Канал",
            "description": "Активный канал Human Design в формате gate-gate.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.personality.*.*",
            "type": "mixed",
            "title": "Активация личности",
            "description": "Ворота и линия планеты в personality-слое.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.personality.north_node",
            "type": "object",
            "title": "Северный узел личности",
            "description": "Канонический ключ северного лунного узла в personality-активациях. Legacy northnode не возвращается.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.personality.south_node",
            "type": "object",
            "title": "Южный узел личности",
            "description": "Канонический ключ южного лунного узла в personality-активациях. Legacy southnode не возвращается.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.design.*.*",
            "type": "mixed",
            "title": "Активация дизайна",
            "description": "Ворота и линия планеты в design-слое.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.design.north_node",
            "type": "object",
            "title": "Северный узел дизайна",
            "description": "Канонический ключ северного лунного узла в design-активациях. Legacy northnode не возвращается.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.activations.design.south_node",
            "type": "object",
            "title": "Южный узел дизайна",
            "description": "Канонический ключ южного лунного узла в design-активациях. Legacy southnode не возвращается.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.bodygraph.data.meta.*",
            "type": "mixed",
            "title": "Метаданные Bodygraph",
            "description": "Метод расчета, design time и контрольные градусы Солнца.",
            "category": "bodygraph",
            "visibility": "public"
        },
        {
            "path": "systems.transits",
            "type": "object",
            "title": "Транзиты",
            "description": "Транзитный срез планет и аспектов для temporal-контекста.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.**",
            "type": "mixed",
            "title": "Поле транзитов",
            "description": "Поле транзитного среза: планеты, аспекты, источник, дата или метаданные.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.date",
            "type": "string",
            "title": "UTC-дата транзитов",
            "description": "UTC-дата и время транзитного среза, рассчитанные из systems.context.temporal.target_date + target_time в локальной timezone.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.source.*",
            "type": "mixed",
            "title": "Источник транзитов",
            "description": "Источник эфемерид транзитного среза.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.planets.*.*",
            "type": "mixed",
            "title": "Планета транзитов",
            "description": "Положение планеты в транзитном срезе.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.planets.north_node",
            "type": "object",
            "title": "Северный узел транзита",
            "description": "Канонический ключ северного лунного узла в транзитах. Legacy northnode не возвращается.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.planets.south_node",
            "type": "object",
            "title": "Южный узел транзита",
            "description": "Канонический ключ южного лунного узла в транзитах. Legacy southnode не возвращается.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.aspects[].*",
            "type": "mixed",
            "title": "Аспект транзитов",
            "description": "Поле аспекта транзитного среза.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.meta.location_used.*",
            "type": "mixed",
            "title": "Локация транзитов",
            "description": "Фактически использованная локация транзитного расчета.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.transits.data.meta.*",
            "type": "mixed",
            "title": "Метаданные транзитов",
            "description": "Метаданные транзитного расчета.",
            "category": "transits",
            "visibility": "public"
        },
        {
            "path": "systems.forecast",
            "type": "object",
            "title": "Прогноз",
            "description": "Temporal-прогноз на день, неделю или месяц.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.period.**",
            "type": "mixed",
            "title": "Период прогноза",
            "description": "Тип периода, даты начала/окончания и опорный момент расчета.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].date",
            "type": "string",
            "title": "Дата дня прогноза",
            "description": "Дата конкретного дня в прогнозе.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].**",
            "type": "mixed",
            "title": "Поле дня прогноза",
            "description": "Поле конкретного дня прогноза: нумерология, биоритмы, лунный блок, транзиты, расширения или метаданные.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.**",
            "type": "mixed",
            "title": "Нумерология дня",
            "description": "Нумерологический показатель или расширение для конкретной даты прогноза.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.day_ruler.*",
            "type": "mixed",
            "title": "Управитель дня",
            "description": "Планетарный управитель дня недели.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.solar_return_exact.*",
            "type": "mixed",
            "title": "Точный соляр",
            "description": "Поля точного солнечного возвращения для года цикла.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.solar_return_exact.natal_sun_deg",
            "type": "float",
            "title": "Натальное Солнце соляра",
            "description": "Натальная долгота Солнца, синхронизированная с systems.astrology.data.planets.sun.ecliptic_longitude_deg при наличии portrait astrology.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.solar_return_exact.natal_sun_source",
            "type": "string",
            "title": "Источник натального Солнца",
            "description": "Источник natal_sun_deg. Основной контракт: systems.astrology.data.planets.sun.ecliptic_longitude_deg.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.vedic.**",
            "type": "mixed",
            "title": "Ведическая нумерология дня",
            "description": "Temporal-ветка ведической нумерологии для дня прогноза.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.vedic.meta.sunrise_utc",
            "type": "string",
            "title": "Восход UTC",
            "description": "UTC timestamp восхода, использованный для Vedic daily day-boundary.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.vedic.meta.sunrise_local",
            "type": "string",
            "title": "Локальный восход",
            "description": "Локальный timestamp восхода в timezone temporal-контекста.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.vedic.meta.timezone",
            "type": "string",
            "title": "Timezone восхода",
            "description": "Timezone, в которой рассчитан sunrise_local и Vedic daily day-boundary.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.chaldean.**",
            "type": "mixed",
            "title": "Халдейская нумерология дня",
            "description": "Temporal-ветка халдейской нумерологии для дня прогноза.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.chaldean.meta.sunrise_utc",
            "type": "string",
            "title": "Восход UTC",
            "description": "UTC timestamp восхода, использованный для Chaldean daily day-boundary.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.chaldean.meta.sunrise_local",
            "type": "string",
            "title": "Локальный восход",
            "description": "Локальный timestamp восхода в timezone temporal-контекста.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.chaldean.meta.timezone",
            "type": "string",
            "title": "Timezone восхода",
            "description": "Timezone, в которой рассчитан sunrise_local и Chaldean daily day-boundary.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.**",
            "type": "mixed",
            "title": "Активация матрицы дня",
            "description": "Дневная активация MatrixDestiny: активные арканы, совпадения, конфликты, резонанс и состояние.",
            "category": "forecast.numerology",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment",
            "type": "object",
            "title": "Возрастной сегмент MatrixDestiny22",
            "description": "Temporal возрастной сегмент на target_date. Вынесен из immutable portrait age_cycle и используется как один из активаторов дневной активации.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_at_target",
            "type": "integer",
            "title": "Возраст на target_date",
            "description": "Полный возраст субъекта на target_date forecast-дня.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": 44
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_from",
            "type": "integer",
            "title": "Начало возрастного сегмента",
            "description": "Нижняя граница возрастного сегмента MatrixDestiny22 включительно.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": 40
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_to",
            "type": "integer",
            "title": "Конец возрастного сегмента",
            "description": "Верхняя граница возрастного сегмента MatrixDestiny22 не включительно.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": 50
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.node_id",
            "type": "string",
            "title": "Узел возрастного сегмента",
            "description": "node_id статического age_cycle anchor, активного на target_date.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": "right"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.val",
            "type": "integer",
            "title": "Аркан возрастного сегмента",
            "description": "Аркан активного возрастного сегмента.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": 19
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.label",
            "type": "string",
            "title": "Название возрастного аркана",
            "description": "Человекочитаемое название аркана возрастного сегмента.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": "Солнце"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.source",
            "type": "string",
            "title": "Источник возрастного сегмента",
            "description": "Источник данных age_segment: matrix_destiny_v2.derived_experimental.age_cycle.anchors.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": "matrix_destiny_v2.derived_experimental.age_cycle.anchors"
        },
        {
            "path": "systems.forecast.data.days[].biorhythms.**",
            "type": "mixed",
            "title": "Биоритм дня",
            "description": "Физический, эмоциональный, интеллектуальный или средний биоритм дня.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].lunar.**",
            "type": "mixed",
            "title": "Лунный блок дня",
            "description": "Фаза, лунный день, satanic-флаги, затмение и void-of-course для дня прогноза.",
            "category": "forecast.lunar",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].lunar.void_of_course_day.**",
            "type": "mixed",
            "title": "Void of course дня",
            "description": "Дневная сводка холостой Луны: окна, длительности, политика отображения и источник.",
            "category": "forecast.lunar",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].transits.**",
            "type": "mixed",
            "title": "Транзиты дня",
            "description": "Транзитные планеты, аспекты и источник для дня прогноза.",
            "category": "forecast.transits",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].transits.date",
            "type": "string",
            "title": "UTC-дата транзитов дня",
            "description": "UTC-дата и время forecast transits, рассчитанные из day date + systems.context.temporal.target_time в локальной timezone.",
            "category": "forecast.transits",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].transits.planets.north_node",
            "type": "object",
            "title": "Северный узел транзита",
            "description": "Канонический ключ северного лунного узла в forecast transits. Legacy northnode не возвращается.",
            "category": "forecast.transits",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].transits.planets.south_node",
            "type": "object",
            "title": "Южный узел транзита",
            "description": "Канонический ключ южного лунного узла в forecast transits. Legacy southnode не возвращается.",
            "category": "forecast.transits",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].space_weather.**",
            "type": "mixed",
            "title": "Космическая погода дня",
            "description": "Kp-индекс, уровень, storm scale, качество данных и режим источника.",
            "category": "forecast.space_weather",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].extensions.**",
            "type": "mixed",
            "title": "Расширение прогноза",
            "description": "Дополнительная эзотерическая или справочная ветка прогноза.",
            "category": "forecast.extensions",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.is_day",
            "type": "boolean",
            "title": "Дневной планетарный час",
            "description": "true означает, что target local datetime находится между локальным sunrise и sunset.",
            "category": "forecast.extensions",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.sunrise_utc",
            "type": "string",
            "title": "Восход Raziel UTC",
            "description": "UTC timestamp восхода, использованный для Raziel planetary hours.",
            "category": "forecast.extensions",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.sunrise_local",
            "type": "string",
            "title": "Локальный восход Raziel",
            "description": "Локальный timestamp восхода в timezone temporal-контекста для Raziel planetary hours.",
            "category": "forecast.extensions",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.timezone",
            "type": "string",
            "title": "Timezone Raziel",
            "description": "Timezone, в которой рассчитаны target_local и sunrise_local для Raziel planetary hours.",
            "category": "forecast.extensions",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].meta.**",
            "type": "mixed",
            "title": "Метаданные дня прогноза",
            "description": "Метаданные расчета дня, включая использованную локацию.",
            "category": "forecast",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].magic_schedule.**",
            "type": "mixed",
            "title": "Планетарное расписание",
            "description": "Расписание планетарных часов и периодов для дня прогноза.",
            "category": "forecast.magic",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.conflict_nodes",
            "type": "array<string>",
            "title": "Конфликтные узлы дневной активации",
            "description": "Список node_id, у которых temporal activation создала подтвержденное напряжение. Статический shadow-узел без активирующего evidence не считается конфликтом.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_scores",
            "type": "object<string,float>",
            "title": "Legacy compact node scores",
            "description": "Legacy compact signed score по node_id. Поле сохранено для обратной совместимости; для explain используйте node_score_details.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "legacy",
            "replacement": "node_score_details"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_scores_deprecated",
            "type": "boolean",
            "title": "Признак legacy node_scores",
            "description": "true означает, что node_scores сохранен только как компактный legacy net_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": true,
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details",
            "type": "object<string,object>",
            "title": "Детализация расчета узлов",
            "description": "Подробный explain-расчет по каждому node_id: activation_score, support_score, tension_score, net_score, state, evidence и breakdown правил.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_val",
            "type": "integer",
            "title": "Аркан узла",
            "description": "Числовое значение аркана node_id в forecast-проекции дневной активации MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_label",
            "type": "string",
            "title": "Название аркана узла",
            "description": "Человекочитаемое название аркана узла в forecast-проекции дневной активации MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_polarity",
            "type": "string",
            "title": "Полярность узла",
            "description": "Полярность аркана узла из MatrixDestinyDictionary: support, balanced, relational, active, dynamic, transforming, receptive или shadow.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.activation_score",
            "type": "float",
            "title": "Сила активации",
            "description": "Насколько дневные активаторы явно активируют узел.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.support_score",
            "type": "float",
            "title": "Поддерживающий вклад",
            "description": "Поддерживающий вклад совместимых дневных активаторов.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.tension_score",
            "type": "float",
            "title": "Напряжение",
            "description": "Напряжение узла, созданное только явными активирующими причинами.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.net_score",
            "type": "float",
            "title": "Итоговый баланс",
            "description": "Итоговый баланс activation_score + support_score - tension_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.state",
            "type": "string",
            "title": "Состояние узла",
            "description": "Состояние узла: neutral, resonant, supportive, tense_active или neutral_static_shadow.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence",
            "type": "array<object>",
            "title": "Положительные evidence",
            "description": "Машинно-читаемые причины поддержки или активации узла в forecast-проекции MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence",
            "type": "array<object>",
            "title": "Отрицательные evidence",
            "description": "Машинно-читаемые причины напряжения узла. Без negative_evidence узел не должен попадать в conflict_nodes.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[]",
            "type": "object",
            "title": "Разбор вклада активатора",
            "description": "Постатейный список правил дневного активатора.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].source",
            "type": "string",
            "title": "Источник активатора",
            "description": "Код источника дневного активатора: personal_day, personal_month, personal_year, chaldean_daily, vedic_jiva, vedic_karma или age_segment.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].activator_val",
            "type": "integer",
            "title": "Аркан активатора",
            "description": "Числовое значение активатора после редукции MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].activator_label",
            "type": "string",
            "title": "Название активатора",
            "description": "Человекочитаемое название аркана активатора.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].weight",
            "type": "float",
            "title": "Вес активатора",
            "description": "Вес источника активатора в scoring v2.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].repetition",
            "type": "integer",
            "title": "Повтор активатора",
            "description": "Количество повторений того же аркана среди дневных активаторов.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].rule",
            "type": "string",
            "title": "Правило scoring",
            "description": "Правило, по которому активатор дал вклад: exact_match, support_support или none.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].reason",
            "type": "string",
            "title": "Причина scoring",
            "description": "Машинно-читаемая причина вклада или отсутствия связи.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].activation_delta",
            "type": "float",
            "title": "Вклад активации",
            "description": "Вклад активатора в activation_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].support_delta",
            "type": "float",
            "title": "Поддерживающий вклад",
            "description": "Вклад активатора в support_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].tension_delta",
            "type": "float",
            "title": "Вклад напряжения",
            "description": "Вклад активатора в tension_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].source",
            "type": "string",
            "title": "Источник активатора",
            "description": "Код источника дневного активатора: personal_day, personal_month, personal_year, chaldean_daily, vedic_jiva, vedic_karma или age_segment.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].activator_val",
            "type": "integer",
            "title": "Аркан активатора",
            "description": "Числовое значение активатора после редукции MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].activator_label",
            "type": "string",
            "title": "Название активатора",
            "description": "Человекочитаемое название аркана активатора.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].weight",
            "type": "float",
            "title": "Вес активатора",
            "description": "Вес источника активатора в scoring v2.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].repetition",
            "type": "integer",
            "title": "Повтор активатора",
            "description": "Количество повторений того же аркана среди дневных активаторов.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].rule",
            "type": "string",
            "title": "Правило scoring",
            "description": "Правило, по которому активатор дал вклад: exact_match, support_support или none.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].reason",
            "type": "string",
            "title": "Причина scoring",
            "description": "Машинно-читаемая причина вклада или отсутствия связи.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].activation_delta",
            "type": "float",
            "title": "Вклад активации",
            "description": "Вклад активатора в activation_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].support_delta",
            "type": "float",
            "title": "Поддерживающий вклад",
            "description": "Вклад активатора в support_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].tension_delta",
            "type": "float",
            "title": "Вклад напряжения",
            "description": "Вклад активатора в tension_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].source",
            "type": "string",
            "title": "Источник активатора",
            "description": "Код источника дневного активатора: personal_day, personal_month, personal_year, chaldean_daily, vedic_jiva, vedic_karma или age_segment.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].activator_val",
            "type": "integer",
            "title": "Аркан активатора",
            "description": "Числовое значение активатора после редукции MatrixDestiny22.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].activator_label",
            "type": "string",
            "title": "Название активатора",
            "description": "Человекочитаемое название аркана активатора.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].weight",
            "type": "float",
            "title": "Вес активатора",
            "description": "Вес источника активатора в scoring v2.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].repetition",
            "type": "integer",
            "title": "Повтор активатора",
            "description": "Количество повторений того же аркана среди дневных активаторов.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].rule",
            "type": "string",
            "title": "Правило scoring",
            "description": "Правило, по которому активатор дал вклад: exact_match, support_support или none.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].reason",
            "type": "string",
            "title": "Причина scoring",
            "description": "Машинно-читаемая причина вклада или отсутствия связи.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].activation_delta",
            "type": "float",
            "title": "Вклад активации",
            "description": "Вклад активатора в activation_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].support_delta",
            "type": "float",
            "title": "Поддерживающий вклад",
            "description": "Вклад активатора в support_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].tension_delta",
            "type": "float",
            "title": "Вклад напряжения",
            "description": "Вклад активатора в tension_score.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "status": "actual"
        },
        {
            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.scoring_version",
            "type": "string",
            "title": "Версия scoring активации",
            "description": "Версия алгоритма дневного scoring. Для исправленной модели: matrix-destiny-activation-2.2.0.",
            "category": "forecast.numerology.matrix_destiny_activation",
            "visibility": "public",
            "example": "matrix-destiny-activation-2.2.0"
        },
        {
            "path": "view",
            "type": "string",
            "title": "Режим synthesis-view",
            "description": "Режим экспортного ответа synthesis: summary, explain или raw.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "summary.**",
            "type": "mixed",
            "title": "Сводка synthesis",
            "description": "Компактная сводка synthesis-view.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "health.**",
            "type": "mixed",
            "title": "Здоровье модели synthesis",
            "description": "Операционные метрики synthesis-анализа.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "domain_components.**",
            "type": "float",
            "title": "Доменный вклад",
            "description": "Нормализованный вклад домена в шкалу synthesis.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "breakdown_short.*.*[]",
            "type": "object",
            "title": "Фактор breakdown",
            "description": "Краткий список главных положительных или отрицательных факторов шкалы.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "conflicts[]",
            "type": "object",
            "title": "Конфликт synthesis",
            "description": "Детектированный конфликт с evidence.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "reliability_summary.**",
            "type": "mixed",
            "title": "Надежность synthesis",
            "description": "Расширенная диагностика надежности данных и инвариантов модели.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "model_health.**",
            "type": "mixed",
            "title": "Инварианты модели",
            "description": "Состояние инвариантов и технических проверок synthesis.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "raw_profile.**",
            "type": "mixed",
            "title": "Raw-профиль synthesis",
            "description": "Полный внутренний профиль synthesis для диагностики.",
            "category": "synthesis",
            "visibility": "technical",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.schema_version",
            "type": "string",
            "title": "Версия archetype profile",
            "description": "Версия top-level archetype_profile contract в synthesis_get_result.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.archetype_rules_version",
            "type": "string",
            "title": "Версия archetype rules",
            "description": "Версия rules registry для архетипического профиля.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.archetype_balance_hash",
            "type": "string",
            "title": "Hash archetype balancing",
            "description": "SHA-256 hash конфигурации archetype evidence balancing: rules, caps, saturation, dedupe, source priority и confidence policy.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.raw_scores",
            "type": "object<string,float>",
            "title": "Raw archetype scores",
            "description": "Архетипические scores до saturation, dedupe и family/single caps.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.raw_scores.**",
            "type": "float",
            "title": "Raw archetype score",
            "description": "Raw score конкретного архетипа до balancing.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.scores",
            "type": "object<string,float>",
            "title": "Effective archetype scores",
            "description": "Архетипические scores после saturation, dedupe, family caps и single evidence caps.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.scores.**",
            "type": "float",
            "title": "Effective archetype score",
            "description": "Итоговый score конкретного архетипа после balancing.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[]",
            "type": "object",
            "title": "Archetype evidence",
            "description": "Evidence item, из которого построен archetype_profile.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].rule_id",
            "type": "string",
            "title": "Archetype evidence rule ID",
            "description": "Идентификатор правила archetype evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].rule_version",
            "type": "string",
            "title": "Archetype evidence rule version",
            "description": "Версия правила archetype evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].source",
            "type": "string",
            "title": "Archetype evidence source",
            "description": "Источник evidence в человеко- или машинно-читаемом виде.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].source_path",
            "type": "string",
            "title": "Archetype evidence source path",
            "description": "JSON-path источника evidence в расчетном payload.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].value",
            "type": "mixed",
            "title": "Archetype evidence value",
            "description": "Значение source_path, использованное правилом evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].archetype_impacts",
            "type": "object<string,float>",
            "title": "Archetype impacts",
            "description": "Карта archetype => impact до умножения на effective_weight.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].evidence_family",
            "type": "string",
            "title": "Archetype evidence family",
            "description": "Семейство конкретного evidence: NUM_CORE, MATRIX_DESTINY_CANONICAL, ASTRO_NATAL, BODYGRAPH и т.п.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].family_group",
            "type": "string",
            "title": "Archetype family group",
            "description": "Агрегированная группа источника evidence: NUM_MATRIX, ASTROLOGY, BODYGRAPH, RAZIEL или OTHER.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].saturation_key",
            "type": "string",
            "title": "Archetype saturation key",
            "description": "Ключ same-symbol saturation, например arcana:19 или astro_sign:moon:libra.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].source_priority",
            "type": "integer",
            "title": "Archetype source priority",
            "description": "Приоритет источника для dedupe и saturation ordering.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].raw_weight",
            "type": "float",
            "title": "Raw archetype evidence weight",
            "description": "Вес evidence до dedupe, saturation и caps.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].saturation_factor",
            "type": "float",
            "title": "Archetype saturation factor",
            "description": "Коэффициент same-symbol saturation: 1.0, 0.5, 0.25 или 0.1.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].family_cap_factor",
            "type": "float",
            "title": "Archetype family cap factor",
            "description": "Коэффициент family cap для предотвращения доминирования одного семейства источников.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].single_cap_factor",
            "type": "float",
            "title": "Single archetype evidence cap factor",
            "description": "Коэффициент ограничения единичного archetype evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].effective_weight",
            "type": "float",
            "title": "Effective archetype evidence weight",
            "description": "Итоговый вес evidence после dedupe, saturation, family cap и single evidence cap.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].is_duplicate",
            "type": "boolean",
            "title": "Duplicate archetype evidence flag",
            "description": "true, если evidence является duplicate representation и не участвует в effective scoring.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].duplicate_of",
            "type": "string|null",
            "title": "Canonical duplicate target",
            "description": "ID canonical evidence, вместо которого оставлен duplicate evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].dedupe_reason",
            "type": "string|null",
            "title": "Archetype dedupe reason",
            "description": "Причина исключения duplicate evidence из effective scoring.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].confidence",
            "type": "float",
            "title": "Archetype evidence confidence",
            "description": "Confidence исходного evidence до общей confidence recalculation.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence[].rationale",
            "type": "string",
            "title": "Archetype evidence rationale",
            "description": "Краткое объяснение, почему evidence влияет на archetype_profile.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance",
            "type": "object",
            "title": "Archetype evidence balance",
            "description": "Диагностика saturation, family caps, single evidence caps, dedupe и raw/effective shares.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.caps",
            "type": "object",
            "title": "Archetype caps",
            "description": "Конфигурация ограничений archetype evidence balancing.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.caps.max_archetype_evidence_family_share",
            "type": "float",
            "title": "Max family share",
            "description": "Максимальная доля одного family group в effective archetype evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.caps.family_caps",
            "type": "object<string,float>",
            "title": "Family caps",
            "description": "Карта family_group => max effective share.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.caps.max_single_archetype_evidence_share",
            "type": "float",
            "title": "Max single evidence share",
            "description": "Максимальная доля одного evidence item в effective archetype evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.caps.same_symbol_saturation",
            "type": "object<string,float>",
            "title": "Same-symbol saturation table",
            "description": "Таблица saturation factors для повторов одного символа.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.families",
            "type": "object",
            "title": "Archetype evidence families",
            "description": "Raw/effective вес и доли по family group.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.families.**",
            "type": "mixed",
            "title": "Archetype evidence family meta",
            "description": "Метрики конкретной family group: raw_weight, effective_weight, raw_share, effective_share и counts.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.max_family_share_detected",
            "type": "float",
            "title": "Max family share detected",
            "description": "Максимальная detected effective share среди family groups после balancing.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.family_caps_applied[]",
            "type": "object",
            "title": "Family cap applied",
            "description": "Запись о примененном family cap.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.symbol_saturation_applied[]",
            "type": "object",
            "title": "Symbol saturation applied",
            "description": "Запись о примененной same-symbol saturation.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.single_evidence_caps_applied[]",
            "type": "object",
            "title": "Single evidence cap applied",
            "description": "Запись о примененном ограничении единичного evidence.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "archetype_profile.evidence_balance.deduplicated_evidence[]",
            "type": "object",
            "title": "Deduplicated archetype evidence",
            "description": "Запись о duplicate evidence, исключенном из effective scoring.",
            "category": "synthesis.archetype",
            "visibility": "public",
            "contract": "synthesis_get_result",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.status",
            "type": "string",
            "title": "Статус Synthesis++",
            "description": "Optional embedded статус блока Synthesis++ v4: ok или error. Не входит в legacy get_result по умолчанию.",
            "category": "synthesis.embedded",
            "visibility": "public",
            "example": "ok",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.schema_version",
            "type": "string",
            "title": "Версия схемы Synthesis++",
            "description": "Версия optional embedded production-контракта Synthesis++ v4. Возвращается только если synthesis явно запрошен.",
            "category": "synthesis.embedded",
            "visibility": "public",
            "example": "synthesis-4.0.0",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.calculation_version",
            "type": "string",
            "title": "Версия расчёта Synthesis++",
            "description": "Версия персонализированного алгоритма synthesis.",
            "category": "synthesis",
            "visibility": "public",
            "example": "ipsm-personalized-1.1.0",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.rules_version",
            "type": "string",
            "title": "Версия правил Synthesis++",
            "description": "Версия RuleRegistry/mapping table для observations и архетипов.",
            "category": "synthesis",
            "visibility": "public",
            "example": "synthesis-rules-4.1.0",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.weights_hash",
            "type": "string",
            "title": "Hash правил и весов",
            "description": "SHA-256 hash правил, весов и normalization metadata; меняется при изменении mapping/weights.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.normalization_version",
            "type": "string",
            "title": "Версия нормализации",
            "description": "Версия domain-balanced personalized normalization.",
            "category": "synthesis",
            "visibility": "public",
            "example": "domain-balanced-personalized-1.0.0",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.conflict_rules_version",
            "type": "string",
            "title": "Версия конфликтных правил",
            "description": "Версия правил conflicts/shadow/superpower confidence.",
            "category": "synthesis",
            "visibility": "public",
            "example": "conflict-rules-1.0.0",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.mode",
            "type": "string",
            "title": "Режим Synthesis++",
            "description": "Режим портретно-временного баланса: daily_synthesis используется текущим auto report.",
            "category": "synthesis",
            "visibility": "public",
            "example": "daily_synthesis",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.**",
            "type": "mixed",
            "title": "Архетипический профиль",
            "description": "Профиль inferred from symbolic/esoteric data, not from PMAI questionnaire. Не является диагнозом или PMAI score.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.archetype_balance_hash",
            "type": "string",
            "title": "Hash archetype balancing",
            "description": "SHA-256 hash конфигурации archetype evidence balancing. Optional embedded path; основной synthesis_get_result path: archetype_profile.archetype_balance_hash.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.raw_scores.**",
            "type": "float",
            "title": "Raw archetype scores",
            "description": "Архетипические scores до saturation, dedupe и family/single caps. Доступно для explain/debug сравнения.",
            "category": "synthesis",
            "visibility": "technical",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].evidence_family",
            "type": "string",
            "title": "Archetype evidence family",
            "description": "Семейство конкретного evidence: NUM_CORE, MATRIX_DESTINY_CANONICAL, ASTRO_NATAL, BODYGRAPH и т.п.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].family_group",
            "type": "string",
            "title": "Archetype evidence family group",
            "description": "Агрегированная группа источника evidence: NUM_MATRIX, ASTROLOGY, BODYGRAPH, RAZIEL или OTHER.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].saturation_key",
            "type": "string",
            "title": "Archetype saturation key",
            "description": "Ключ same-symbol saturation, например arcana:19 или astro_sign:moon:libra.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].raw_weight",
            "type": "float",
            "title": "Raw archetype evidence weight",
            "description": "Вес evidence до dedupe, saturation и caps.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].saturation_factor",
            "type": "float",
            "title": "Archetype saturation factor",
            "description": "Коэффициент same-symbol saturation: 1.0, 0.5, 0.25 или 0.1.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].family_cap_factor",
            "type": "float",
            "title": "Archetype family cap factor",
            "description": "Коэффициент family cap для предотвращения доминирования одного семейства источников.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].single_cap_factor",
            "type": "float",
            "title": "Single archetype evidence cap factor",
            "description": "Коэффициент ограничения единичного archetype evidence.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].effective_weight",
            "type": "float",
            "title": "Effective archetype evidence weight",
            "description": "Итоговый вес evidence после dedupe, saturation, family cap и single evidence cap.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].is_duplicate",
            "type": "boolean",
            "title": "Duplicate archetype evidence flag",
            "description": "true, если evidence является duplicate representation и не участвует в effective scoring.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].duplicate_of",
            "type": "string|null",
            "title": "Canonical duplicate target",
            "description": "ID canonical evidence, вместо которого оставлен duplicate evidence.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence[].dedupe_reason",
            "type": "string|null",
            "title": "Archetype dedupe reason",
            "description": "Причина исключения duplicate evidence из effective scoring.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.archetype_profile.evidence_balance.**",
            "type": "mixed",
            "title": "Archetype evidence balance meta",
            "description": "Диагностика saturation, family caps, single evidence caps, dedupe и raw/effective shares.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.individual_sensitivity_model.**",
            "type": "mixed",
            "title": "Модель чувствительности",
            "description": "Ограниченные modifiers шкал/доменов с объяснимыми reasons.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.reliability_model.**",
            "type": "mixed",
            "title": "Модель надежности Synthesis++",
            "description": "Оценка качества источников, полноты данных, fallback penalties и исключенных observations.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.legacy_flat_scales.**",
            "type": "float",
            "title": "Legacy flat шкалы",
            "description": "Старый flat result только для explain/debug сравнения.",
            "category": "synthesis",
            "visibility": "technical",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.base_balanced_scales.**",
            "type": "float",
            "title": "Base balanced шкалы",
            "description": "Результат после domain-balanced aggregation, до персонализации.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.personalized_scales.**",
            "type": "float",
            "title": "Personalized шкалы",
            "description": "Основной production result после ограниченных personalized modifiers.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.personalization_delta.**",
            "type": "float",
            "title": "Delta персонализации",
            "description": "Разница personalized_scales - base_balanced_scales по каждой шкале.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.domain_scores.**",
            "type": "mixed",
            "title": "Domain scores",
            "description": "Внутридоменные score по scale/domain до междоменной сборки.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.domain_contributions.**",
            "type": "mixed",
            "title": "Domain contributions",
            "description": "Итоговые доменные вклады после domain weights/relevance.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.observations[].rule_id",
            "type": "string",
            "title": "ID правила observation",
            "description": "Версионированный ID правила, породившего observation.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.observations[].rule_version",
            "type": "string",
            "title": "Версия правила observation",
            "description": "Версия rule_id для explain/debug трассировки.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.observations[].personalization_reasons[]",
            "type": "object",
            "title": "Причины персонализации",
            "description": "Объяснение modifiers и cap применения для observation.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.superpower.**",
            "type": "mixed",
            "title": "Superpower selector",
            "description": "Выбор superpower по score, margin, balance, reliability, conflicts и personalization delta.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.conflicts[]",
            "type": "object",
            "title": "Конфликт Synthesis++ v4",
            "description": "Конфликтная модель как часть индивидуальности, не ошибка и не диагноз.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.shadow_flags[]",
            "type": "object",
            "title": "Shadow flags",
            "description": "Потенциальные перегибы доминирующих архетипов, не диагноз.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "systems.synthesis.data.model_health.**",
            "type": "mixed",
            "title": "Model health Synthesis++ v4",
            "description": "Диагностика domain caps, reliability, drift, excluded observations и warnings.",
            "category": "synthesis",
            "visibility": "public",
            "contract": "embedded_synthesis_optional",
            "status": "optional",
            "condition": "returned only when synthesis is explicitly requested via systems[]=synthesis or a future include_synthesis=1 mode",
            "not_part_of": [
                "legacy_get_result"
            ]
        },
        {
            "path": "cached",
            "type": "boolean",
            "title": "Ответ из кэша",
            "description": "true означает, что данные были получены из кэша.",
            "category": "hourly_forecast",
            "visibility": "technical"
        },
        {
            "path": "data.meta.**",
            "type": "mixed",
            "title": "Метаданные hourly forecast",
            "description": "Метаданные синхронного почасового geocentric-прогноза.",
            "category": "hourly_forecast",
            "visibility": "public"
        },
        {
            "path": "data.hours[].**",
            "type": "mixed",
            "title": "Час hourly forecast",
            "description": "Почасовая точка прогноза Луны и планет.",
            "category": "hourly_forecast",
            "visibility": "public"
        },
        {
            "path": "data.hours[].moon.**",
            "type": "mixed",
            "title": "Луна в hourly forecast",
            "description": "Геоцентрическое положение Луны для часа.",
            "category": "hourly_forecast",
            "visibility": "public"
        },
        {
            "path": "data.hours[].planets.**",
            "type": "mixed",
            "title": "Планета в hourly forecast",
            "description": "Геоцентрическое положение планеты для часа.",
            "category": "hourly_forecast",
            "visibility": "public"
        },
        {
            "path": "data.hours[].moon_aspects[].*",
            "type": "mixed",
            "title": "Лунный аспект hourly forecast",
            "description": "Аспект Луны к планете в пределах орбиса.",
            "category": "hourly_forecast",
            "visibility": "public"
        },
        {
            "path": "data.hours[].lunar.**",
            "type": "mixed",
            "title": "Лунный статус hourly forecast",
            "description": "Фаза, лунный день и void-of-course для часа.",
            "category": "hourly_forecast",
            "visibility": "public"
        }
    ],
    "sections": [
        {
            "id": "01_introduction",
            "title": "1. Введение и архитектура",
            "description": "Общая модель API, очередь задач, разделение SubjectContext/TemporalContext и синхронный hourly-endpoint.",
            "file_name": "doc_01_intro.json",
            "content": {
                "title": "1. Введение",
                "version": "2.3.0",
                "last_updated": "2026-03-18",
                "description": "EE DataCollector API сочетает асинхронный контур расчётов портрета/прогноза и новый синхронный hourly-endpoint для geocentric-прогноза Луны. Архитектура по-прежнему разделяет SubjectContext и TemporalContext, а hourly-метод работает поверх отдельного серверного кэша эфемерид.",
                "key_changes": [
                    "Сохранён асинхронный контур `create_task -> worker -> get_result` для тяжёлых составных расчётов.",
                    "Добавлен новый синхронный `GET /get_hourly_forecast` для почасового прогноза Луны и планет на локальные сутки.",
                    "Hourly-endpoint возвращает geocentric-позиции Луны/планет, текущие аспекты Луны, окно `void of course`, лунный день и флаг «сатанинского» дня.",
                    "Для hourly-endpoint добавлен двухуровневый кэш: batch-cache эфемерид NASA и result-cache по `date + lat + lng + timezone`.",
                    "Канонический слой Synthesis++ и export_result продолжают работать без изменения контракта."
                ],
                "info_block": {
                    "base_url": "https://digihash.ru/datacollector/api.php",
                    "version": "2.3.0",
                    "protocol": "HTTPS / JSON"
                },
                "features": [
                    "Асинхронная очередь задач для портрета, периодического прогноза и Synthesis++.",
                    "Синхронный hourly-endpoint для UI и сервисов, которым нужен готовый почасовой результат сразу.",
                    "Разделение SubjectContext/TemporalContext во всех вычислениях.",
                    "Серверное кэширование портретов, дневных прогнозов и нового почасового geocentric-прогноза.",
                    "Режим критического отказа для внешних источников: при проблемах NASA JPL Horizons API не отдаёт фальшивый частичный успех."
                ],
                "architecture": {
                    "title": "Как работает API",
                    "description": "В системе теперь два рабочих контура: асинхронный и синхронный.",
                    "lifecycle_steps": [
                        {
                            "step": 1,
                            "actor": "Клиент",
                            "action": "POST create_task",
                            "description": "Запускает тяжёлую составную задачу для портрета/прогноза/Synthesis++."
                        },
                        {
                            "step": 2,
                            "actor": "Worker",
                            "action": "Асинхронный расчёт",
                            "description": "Собирает итоговый payload и сохраняет его для последующего `get_result`."
                        },
                        {
                            "step": 3,
                            "actor": "Клиент",
                            "action": "GET get_result",
                            "description": "Опрос статуса или получение итогового async-результата."
                        },
                        {
                            "step": 4,
                            "actor": "Клиент",
                            "action": "GET get_hourly_forecast",
                            "description": "Синхронный запрос почасового прогноза на local-день с отдельным result-cache."
                        }
                    ]
                },
                "caching_policy": {
                    "title": "Модель хранения и кэширования",
                    "description": "Кэш разделён по доменам данных. В публичных ответах файловые пути никогда не раскрываются.",
                    "strategies": [
                        {
                            "data_type": "Портретные данные",
                            "ttl": "Постоянно",
                            "icon": "database",
                            "desc": "Immutable SubjectContext и производные portrait-расчёты."
                        },
                        {
                            "data_type": "Периодические forecast-данные",
                            "ttl": "По temporal-контексту",
                            "icon": "clock",
                            "desc": "Классический дневной/недельный/месячный forecast."
                        },
                        {
                            "data_type": "Hourly geocentric forecast",
                            "ttl": "По `date + lat + lng + timezone`",
                            "icon": "bolt",
                            "desc": "Отдельный JSON-cache для нового почасового метода."
                        }
                    ]
                },
                "technical_requirements": {
                    "title": "Технические требования",
                    "list": [
                        "Формат обмена: JSON",
                        "Кодировка: UTF-8",
                        "Дата: YYYY-MM-DD",
                        "Время: HH:MM или HH:MM:SS",
                        "Все запросы выполняются по HTTPS"
                    ]
                }
            }
        },
        {
            "id": "02_authentication",
            "title": "2. Аутентификация и доступ",
            "description": "Правила api_key, заголовки, лимиты и доступ к sync/async методам.",
            "file_name": "doc_02_auth.json",
            "content": {
                "title": "2. Аутентификация и доступ",
                "description": "Для create_task обязателен api_key в JSON. Для get_result/export_result доступ зависит от ключа, которым создана задача: публичные ключи дают открытый доступ по request_id, приватные требуют тот же API-ключ через X-API-Key или query api_key.",
                "security_card": {
                    "type": "API key",
                    "in": "Тело запроса (JSON), заголовок X-API-Key или query api_key",
                    "name": "api_key",
                    "example": "655351024"
                },
                "headers_table": [
                    {
                        "header": "Content-Type",
                        "value": "application/json",
                        "desc": "Обязателен для POST /api.php?action=create_task"
                    },
                    {
                        "header": "X-Calc-Profile",
                        "value": "A | B",
                        "desc": "Опциональный выбор профиля расчёта. Приоритет: header > query > body > default(A)."
                    },
                    {
                        "header": "X-API-Key",
                        "value": "<your_key>",
                        "desc": "Опционален для публичных задач и обязателен для приватных request_id в get_result/export_result."
                    },
                    {
                        "header": "Accept",
                        "value": "application/json",
                        "desc": "Рекомендуется для API-запросов."
                    }
                ],
                "auth_methods": [
                    {
                        "method": "POST",
                        "endpoint": "/api.php?action=create_task",
                        "badge": "Требуется авторизация",
                        "desc": "Всегда требуется валидный api_key в JSON-теле.",
                        "snippet": "{\n  \"api_key\": \"655351024\",\n  \"user\": { ... }\n}"
                    },
                    {
                        "method": "GET",
                        "endpoint": "/api.php?action=get_result&request_id=...",
                        "badge": "Условно публичный",
                        "desc": "Если задача создана публичным ключом (public_result_access=true), достаточно request_id. Для приватных ключей нужен X-API-Key или query api_key.",
                        "snippet": "GET /api.php?action=get_result&request_id=task_...&view=summary&api_key=<private_key>"
                    },
                    {
                        "method": "GET",
                        "endpoint": "/api.php?action=export_result&request_id=...&format=ndjson",
                        "badge": "Условно публичный",
                        "desc": "Правило такое же, как у get_result: для приватных ключей обязателен тот же ключ доступа.",
                        "snippet": "GET /api.php?action=export_result&request_id=task_...&format=ndjson&api_key=<private_key>"
                    }
                ],
                "ranking_system": {
                    "title": "Система ранжирования API-ключей",
                    "description": "Ранг API-ключа определяет почасовую квоту и доступный профиль нагрузки. Базовые значения хранятся в config/ranks.php. Для публичного тестового ключа 655351024 используется ранг adept.",
                    "rank_table": [
                        {
                            "name": "demiurge",
                            "type": "безлимит",
                            "description": "Флаг is_god=true. limit_per_hour = -1 (без ограничения)."
                        },
                        {
                            "name": "magus",
                            "type": "квота",
                            "description": "limit_per_hour = 1000 условных единиц в час."
                        },
                        {
                            "name": "master",
                            "type": "квота",
                            "description": "limit_per_hour = 500 условных единиц в час."
                        },
                        {
                            "name": "adept",
                            "type": "квота",
                            "description": "limit_per_hour = 100 условных единиц в час. Ранг тестового ключа."
                        }
                    ],
                    "limits_block": [
                        "Стоимость новой задачи учитывается коэффициентом cost_new (по умолчанию 3).",
                        "Стоимость повторного/кэшированного обращения может учитываться коэффициентом cost_cached (по умолчанию 1).",
                        "Дополнительно действует лимит per_minute из реестра ключей (config/api_keys.php)."
                    ]
                },
                "limits_block": {
                    "title": "Ограничения и поведение",
                    "list": [
                        "Глобальный лимит API: 360 запросов за 60 секунд по IP (429 + Retry-After: 60).",
                        "Дополнительный лимит по ключу: per_minute из реестра API-ключей.",
                        "Почасовая квота по рангу/ключу учитывает стоимость новой задачи (cost_new).",
                        "Тестовый ключ 655351024 остаётся публичным и предназначен для интеграционных проверок.",
                        "run_worker защищён: доступ только с localhost или с валидным X-Worker-Token."
                    ]
                },
                "error_table": {
                    "401": "Unauthorized: ключ отсутствует/невалиден или не передан для приватного request_id.",
                    "403": "Forbidden: передан неверный ключ для приватного request_id или запрещён доступ к run_worker.",
                    "405": "Метод не разрешён для выбранного HTTP-метода.",
                    "429": "Превышен лимит запросов (глобальный или ключевой)."
                }
            }
        },
        {
            "id": "03_methods_create",
            "title": "3. Создание задачи (POST /create_task)",
            "description": "Структура запроса, параметры forecast/response, calc_profile.",
            "file_name": "doc_03_create_task.json",
            "content": {
                "title": "3. Создание задачи (POST /create_task)",
                "description": "Метод ставит задачу в очередь и возвращает request_id. Фактический расчёт выполняется worker-процессом асинхронно.",
                "endpoint": {
                    "method": "POST",
                    "url": "/api.php?action=create_task",
                    "content_type": "application/json"
                },
                "request_body_schema": {
                    "root_parameters": [
                        {
                            "name": "api_key",
                            "type": "string | number",
                            "required": true,
                            "description": "Ключ доступа API (публичный тестовый: 655351024)."
                        },
                        {
                            "name": "calc_profile",
                            "type": "enum",
                            "required": false,
                            "values": [
                                "A",
                                "B"
                            ],
                            "default": "A",
                            "description": "Профиль расчёта весов для synthesis. Приоритет источников: X-Calc-Profile > query > body > default."
                        },
                        {
                            "name": "user",
                            "type": "object",
                            "required": true,
                            "description": "Натальные данные пользователя (SubjectContext)."
                        },
                        {
                            "name": "systems",
                            "type": "array[string]",
                            "required": false,
                            "description": "Список модулей: numerology, astrology, bodygraph, transits, forecast, synthesis."
                        },
                        {
                            "name": "current_location",
                            "type": "object",
                            "required": false,
                            "description": "Текущая локация для TemporalContext (прогнозы/транзиты/дневные ветки)."
                        },
                        {
                            "name": "forecast",
                            "type": "object",
                            "required": false,
                            "description": "Параметры периода прогноза и режим качества space_weather."
                        },
                        {
                            "name": "response",
                            "type": "object",
                            "required": false,
                            "description": "Опции проекции ответа (например, omit_portrait_payload)."
                        }
                    ],
                    "user_object": [
                        {
                            "name": "first_name",
                            "type": "string",
                            "required": true,
                            "example": "Евгений"
                        },
                        {
                            "name": "last_name",
                            "type": "string",
                            "required": true,
                            "example": "Ефимченко"
                        },
                        {
                            "name": "middle_name",
                            "type": "string",
                            "required": false,
                            "example": "Владимирович"
                        },
                        {
                            "name": "birth_date",
                            "type": "string (date)",
                            "required": true,
                            "format": "YYYY-MM-DD",
                            "example": "1981-10-27"
                        },
                        {
                            "name": "birth_time",
                            "type": "string (time)",
                            "required": true,
                            "format": "HH:MM или HH:MM:SS",
                            "example": "04:13"
                        },
                        {
                            "name": "birth_city",
                            "type": "string",
                            "required": true,
                            "example": "Норильск"
                        },
                        {
                            "name": "birth_country",
                            "type": "string",
                            "required": false,
                            "example": "Россия"
                        }
                    ],
                    "forecast_object": [
                        {
                            "name": "period_type",
                            "type": "enum",
                            "required": false,
                            "values": [
                                "day",
                                "week",
                                "month"
                            ],
                            "default": "day",
                            "description": "Тип периода прогноза."
                        },
                        {
                            "name": "period_start_date",
                            "type": "string (date)",
                            "required": false,
                            "description": "Дата начала периода (алиас target_date).",
                            "example": "2026-02-14"
                        },
                        {
                            "name": "target_time",
                            "type": "string (time)",
                            "required": false,
                            "description": "Время якоря расчёта для TemporalContext.",
                            "example": "12:00:00"
                        },
                        {
                            "name": "space_weather_mode",
                            "type": "enum",
                            "required": false,
                            "values": [
                                "allow_simulated",
                                "observed_or_estimated",
                                "observed_only"
                            ],
                            "default": "allow_simulated",
                            "description": "Режим качества Kp-данных."
                        }
                    ],
                    "response_object": [
                        {
                            "name": "omit_portrait_payload",
                            "type": "boolean",
                            "required": false,
                            "default": false,
                            "description": "Если true, в итоговом payload скрываются тяжёлые портретные ветки systems.numerology/astrology/bodygraph."
                        }
                    ]
                },
                "feature_guidelines": {
                    "title": "Связка с Synthesis++",
                    "list": [
                        "Чтобы получить канонический слой, добавьте \"synthesis\" в systems.",
                        "Подробный разбор режимов summary/explain/raw вынесен в раздел «5. Работа с Synthesis++ (IPSM v2)».",
                        "Если нужен компактный ответ, передавайте response.omit_portrait_payload=true."
                    ]
                },
                "examples": {
                    "full_request": {
                        "description": "Запрос с synthesis и компактным режимом ответа.",
                        "payload": {
                            "api_key": "655351024",
                            "calc_profile": "B",
                            "user": {
                                "first_name": "Евгений",
                                "middle_name": "Владимирович",
                                "last_name": "Ефимченко",
                                "birth_date": "1981-10-27",
                                "birth_time": "04:13",
                                "birth_city": "Норильск",
                                "birth_country": "Россия"
                            },
                            "systems": [
                                "numerology",
                                "astrology",
                                "bodygraph",
                                "transits",
                                "forecast",
                                "synthesis"
                            ],
                            "current_location": {
                                "city": "Орел",
                                "country": "Россия"
                            },
                            "forecast": {
                                "period_type": "day",
                                "period_start_date": "2026-02-14",
                                "target_time": "12:00:00",
                                "space_weather_mode": "observed_or_estimated"
                            },
                            "response": {
                                "omit_portrait_payload": true
                            }
                        }
                    },
                    "success_response": {
                        "status": 202,
                        "description": "Задача поставлена в очередь.",
                        "payload": {
                            "status": "queued",
                            "message": "Task accepted",
                            "request_id": "task_698cdc670473d"
                        }
                    },
                    "error_response": {
                        "status": 400,
                        "description": "Ошибка валидации обязательных полей user.",
                        "payload": {
                            "status": "error",
                            "errors": [
                                "Field 'last_name' is required"
                            ]
                        }
                    }
                }
            }
        },
        {
            "id": "04_methods_hourly",
            "title": "4. Почасовой лунный прогноз (GET /get_hourly_forecast)",
            "description": "Синхронный geocentric endpoint: почасовые позиции Луны/планет, аспекты Луны, void of course и лунный день.",
            "file_name": "doc_04_hourly_forecast.json",
            "content": {
                "title": "4. Почасовой лунный прогноз (GET /get_hourly_forecast)",
                "description": "Метод возвращает синхронный geocentric-прогноз на локальные сутки. В ответе есть почасовые положения Луны и основных планет, текущие аспекты Луны, окно `void of course`, лунный день и отметка «сатанинского» дня.",
                "endpoint": {
                    "method": "GET",
                    "url": "/api.php?action=get_hourly_forecast",
                    "content_type": "application/json"
                },
                "query_parameters": [
                    {
                        "name": "date",
                        "type": "string (YYYY-MM-DD)",
                        "required": true,
                        "description": "Локальная дата, для которой строится hourly-массив.",
                        "example": "2026-03-18"
                    },
                    {
                        "name": "city",
                        "type": "string",
                        "required": false,
                        "description": "Город для server-side геокодинга. Можно использовать вместо ручных координат.",
                        "example": "Москва"
                    },
                    {
                        "name": "country",
                        "type": "string",
                        "required": false,
                        "description": "Опциональное уточнение для `city`.",
                        "example": "Россия"
                    },
                    {
                        "name": "lat",
                        "type": "float",
                        "required": false,
                        "description": "Широта. Используется вместе с `lng` и `timezone`.",
                        "example": "55.7558"
                    },
                    {
                        "name": "lng",
                        "type": "float",
                        "required": false,
                        "description": "Долгота.",
                        "example": "37.6176"
                    },
                    {
                        "name": "timezone",
                        "type": "string",
                        "required": false,
                        "description": "IANA timezone. Обязательна при ручных координатах без `city`.",
                        "example": "Europe/Moscow"
                    },
                    {
                        "name": "api_key / X-API-Key",
                        "type": "string",
                        "required": true,
                        "description": "API-ключ для авторизации sync-endpoint."
                    }
                ],
                "feature_guidelines": [
                    "Диапазон ответа: от local `00:00` запрошенного дня до local `00:00` следующего дня включительно.",
                    "Астрономическая рамка: `geocentric`.",
                    "Если timezone содержит DST-переход, число точек может отличаться от 25, потому что сохраняются локальные календарные часы.",
                    "Повторный запрос по тем же `date + lat + lng + timezone` возвращается из JSON-cache без нового обращения к NASA JPL Horizons."
                ],
                "response_model": [
                    {
                        "name": "status",
                        "type": "string",
                        "description": "Статус синхронного ответа.",
                        "example": "success"
                    },
                    {
                        "name": "cached",
                        "type": "boolean",
                        "description": "Признак попадания в result-cache."
                    },
                    {
                        "name": "data.meta",
                        "type": "object",
                        "description": "Метаданные диапазона, локации, шага и источника эфемерид."
                    },
                    {
                        "name": "data.hours[]",
                        "type": "array<object>",
                        "description": "Почасовой массив результата."
                    }
                ],
                "hour_fields": [
                    {
                        "name": "hour_index",
                        "type": "integer",
                        "description": "Индекс точки внутри local-day массива."
                    },
                    {
                        "name": "local_datetime / utc_datetime",
                        "type": "ISO-8601 datetime",
                        "description": "Локальная и UTC-временные отметки часа."
                    },
                    {
                        "name": "moon",
                        "type": "object",
                        "description": "Положение Луны: longitude, latitude, sign, sign_degree, speed, is_retro."
                    },
                    {
                        "name": "planets",
                        "type": "object",
                        "description": "Geocentric-положения Солнца, Меркурия, Венеры, Марса, Юпитера, Сатурна, Урана, Нептуна и Плутона."
                    },
                    {
                        "name": "moon_aspects[]",
                        "type": "array<object>",
                        "description": "Текущие мажорные аспекты Луны к планетам: conjunction, sextile, square, trine, opposition."
                    },
                    {
                        "name": "lunar",
                        "type": "object",
                        "description": "Фаза Луны, возраст, лунный день, moonrise-коррекция, флаг `is_satanic`, `void_of_course`."
                    }
                ],
                "void_of_course_fields": [
                    {
                        "name": "is_void_now",
                        "type": "boolean",
                        "description": "Находится ли Луна без курса в текущей точке."
                    },
                    {
                        "name": "starts_at_local / ends_at_local",
                        "type": "ISO-8601 datetime",
                        "description": "Границы текущего или ближайшего окна void of course в локальном времени."
                    },
                    {
                        "name": "next_sign",
                        "type": "string",
                        "description": "Следующий знак Луны после выхода из текущего окна."
                    },
                    {
                        "name": "last_aspect / next_aspect_before_sign_change",
                        "type": "object|null",
                        "description": "Последний и ближайший мажорный аспект до смены знака."
                    }
                ],
                "caching_policy": {
                    "title": "Кэширование",
                    "description": "Метод использует двухуровневый кэш.",
                    "strategies": [
                        {
                            "data_type": "Результат hourly-forecast",
                            "ttl": "До инвалидирования входными параметрами",
                            "icon": "clock",
                            "desc": "JSON-cache по `date + lat + lng + timezone`."
                        },
                        {
                            "data_type": "Geocentric hourly ephemeris",
                            "ttl": "До повторного использования того же диапазона",
                            "icon": "database",
                            "desc": "Пакетный cache рядов NASA для всего диапазона и lookahead-окна."
                        }
                    ]
                },
                "examples": [
                    {
                        "language": "Bash (cURL)",
                        "description": "Запрос по координатам и timezone.",
                        "code": "curl -s \"https://digihash.ru/datacollector/api.php?action=get_hourly_forecast&date=2026-03-18&lat=55.7558&lng=37.6176&timezone=Europe/Moscow&api_key=655351024\""
                    },
                    {
                        "language": "Bash (cURL)",
                        "description": "Запрос по названию города с server-side геокодингом.",
                        "code": "curl -s \"https://digihash.ru/datacollector/api.php?action=get_hourly_forecast&date=2026-03-18&city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&country=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&api_key=655351024\""
                    }
                ]
            }
        },
        {
            "id": "04_methods_get",
            "title": "5. Получение результата (GET /get_result)",
            "description": "Модель опроса, статусы, view=summary|explain|raw для synthesis-задач.",
            "file_name": "doc_04_get_result.json",
            "content": {
                "title": "4. Получение результата (GET /get_result)",
                "description": "Метод возвращает статус задачи или финальные данные. Для synthesis-задач поддерживаются режимы view=summary|explain|raw.",
                "endpoint": {
                    "method": "GET",
                    "url": "/api.php?action=get_result",
                    "parameters": [
                        {
                            "name": "request_id",
                            "in": "query",
                            "required": true,
                            "type": "string",
                            "description": "ID задачи, полученный при create_task."
                        },
                        {
                            "name": "view",
                            "in": "query",
                            "required": false,
                            "type": "enum",
                            "values": [
                                "summary",
                                "explain",
                                "raw"
                            ],
                            "default": "summary",
                            "description": "Режим выдачи для synthesis-задач. Для legacy-ответа параметр игнорируется."
                        },
                        {
                            "name": "api_key",
                            "in": "query",
                            "required": false,
                            "type": "string",
                            "description": "Для приватных ключей обязателен (альтернатива: заголовок X-API-Key). Для публичного ключа 655351024 не требуется."
                        }
                    ]
                },
                "synthesis_views": [
                    {
                        "name": "summary",
                        "type": "режим",
                        "description": "Режим по умолчанию. Возвращает стабильный компактный слой: versioning, summary.scales, superpower, quality_score, health."
                    },
                    {
                        "name": "explain",
                        "type": "режим",
                        "description": "Расширенный слой объяснимости: domain_components, breakdown_short, conflicts, reliability_summary, model_health."
                    },
                    {
                        "name": "raw",
                        "type": "режим",
                        "description": "Отладочный режим. Возвращает полный raw_profile synthesis вместе с versioning и health."
                    }
                ],
                "feature_guidelines": {
                    "title": "Практика использования",
                    "list": [
                        "В прод-интеграциях по умолчанию используйте view=summary.",
                        "view=explain запрашивайте по требованию, когда нужно объяснить причины результата.",
                        "view=raw используйте только для диагностики и внутренней разработки.",
                        "Для подробного практического сценария см. раздел «5. Работа с Synthesis++ (IPSM v2)»."
                    ]
                },
                "polling_strategy": {
                    "recommendation": "Опрос каждые 2-3 секунды.",
                    "timeout": "Если задача долго не переходит в success/error, проверьте логи worker и/или создайте новую задачу.",
                    "flow_diagram": "Клиент -> GET get_result -> статус очереди -> success/error"
                },
                "statuses": [
                    {
                        "code": "pending",
                        "meaning": "Задача в очереди, ещё не взята worker-процессом."
                    },
                    {
                        "code": "processing",
                        "meaning": "Задача выполняется worker-процессом."
                    },
                    {
                        "code": "success",
                        "meaning": "Расчёт завершён, доступен финальный payload."
                    },
                    {
                        "code": "error",
                        "meaning": "Расчёт завершился ошибкой; поле error содержит текст или объект ошибки."
                    }
                ],
                "examples": {
                    "processing_response": {
                        "description": "Задача ещё не завершена.",
                        "payload": {
                            "status": "processing",
                            "message": "Calculation in progress..."
                        }
                    },
                    "success_response": {
                        "description": "Пример synthesis-ответа в режиме view=summary.",
                        "payload": {
                            "status": "success",
                            "view": "summary",
                            "schema_version": "export-1.0.0",
                            "calculation_version": "ipsm-2.0.0",
                            "weights_hash": "b7c5...",
                            "conflict_rules_version": "conflict-rules-2.0.0",
                            "normalization_version": "normalization-2.0.0",
                            "calc_profile_id": "A",
                            "request_id": "task_698cdc670473d",
                            "date": "2026-02-14",
                            "summary": {
                                "scales": {
                                    "control": -11.1,
                                    "cognition": 24.5,
                                    "dynamics": 8.3,
                                    "focus": 31.9,
                                    "social": -4.2
                                },
                                "superpower": "focus",
                                "quality_score": 87.4,
                                "conflicts_count": 0
                            },
                            "health": {
                                "analysis_time_ms": 148,
                                "memory_peak_mb": 18.25,
                                "observations_used": 126,
                                "observations_total": 151,
                                "aggregation_drift_detected": false
                            }
                        }
                    },
                    "error_response": {
                        "description": "Ошибка исполнения задачи.",
                        "payload": {
                            "status": "error",
                            "error": "[CRITICAL_EXTERNAL] Ephemeris NASA data unavailable"
                        }
                    }
                }
            }
        },
        {
            "id": "05_synthesis_usage",
            "title": "6. Работа с Synthesis++ (IPSM v2)",
            "description": "Практическая интеграция с каноническим слоем: выбор view, интерпретация шкал, конфликтов и экспорт в BI.",
            "file_name": "doc_05_synthesis_usage.json",
            "content": {
                "title": "5. Работа с Synthesis++ v4",
                "description": "Synthesis++ v4 — отдельный view/export contract поверх numerology/astrology/bodygraph/transits/forecast. Он не является обязательной частью legacy full get_result: без explicit request обычный get_result возвращает status/context/systems/warnings/request_id. Production result строится как domain-balanced base result, затем ограниченно персонализируется через archetype/sensitivity/reliability modifiers. Архетипический профиль inferred from symbolic/esoteric data, not from PMAI questionnaire.",
                "synthesis_usage": {
                    "title": "Когда и зачем включать Synthesis++",
                    "list": [
                        "Добавляйте \"synthesis\" в systems, если нужен устойчивый слой аналитики для UI, BI и внешних моделей.",
                        "Не ожидайте systems.synthesis в legacy full get_result по умолчанию: canonical Synthesis++ contract — get_result view=summary|explain|raw или export_result.",
                        "Используйте view=summary как основной прод-контракт: это минимальный, стабильный и дешёвый по объёму ответ.",
                        "Используйте view=explain только там, где нужно объяснение причин результата: доменные вклады, конфликты и топ-факторы.",
                        "Используйте view=raw только для диагностики, аудита и проверки изменений модели.",
                        "Для BI/витрин не парсите raw_profile вручную — используйте export_result с row_type."
                    ]
                },
                "lifecycle_steps": [
                    {
                        "step": 1,
                        "actor": "Клиент",
                        "action": "POST create_task",
                        "description": "Передайте api_key, user и systems с \"synthesis\". При необходимости добавьте forecast/current_location/response."
                    },
                    {
                        "step": 2,
                        "actor": "Клиент",
                        "action": "GET get_result&view=summary",
                        "description": "Получите стабильный result: personalized_scales как summary.scales, base_balanced_scales, personalization_delta, superpower confidence и health."
                    },
                    {
                        "step": 3,
                        "actor": "Клиент",
                        "action": "GET get_result&view=explain",
                        "description": "При запросе объяснимости получите domain_components, observations с rule_id/rule_version, archetype_profile, reliability_model, conflicts, shadow_flags и model_health."
                    },
                    {
                        "step": 4,
                        "actor": "Клиент",
                        "action": "GET export_result",
                        "description": "Для BI-слоя выгружайте NDJSON/CSV: summary, domain_component и breakdown_item без дополнительного парсинга."
                    }
                ],
                "synthesis_views": [
                    {
                        "name": "summary",
                        "type": "режим",
                        "description": "Режим по умолчанию. Канонический слой v4: schema/calculation/rules/weights версии, personalized summary.scales, base_balanced_scales, personalization_delta, superpower confidence, conflicts_count и health."
                    },
                    {
                        "name": "explain",
                        "type": "режим",
                        "description": "Расширенный слой причин: domain_components, observations с rule_id/rule_version, archetype_profile, individual_sensitivity_model, reliability_model, conflicts, shadow_flags и model_health."
                    },
                    {
                        "name": "raw",
                        "type": "режим",
                        "description": "Отладочный режим. Возвращает полный raw_profile synthesis для внутренних проверок. Не использовать как внешний стабильный контракт."
                    }
                ],
                "root_parameters": [
                    {
                        "name": "summary.scales",
                        "type": "object",
                        "description": "Пять personalized шкал Synthesis++ v4 в диапазоне около -100..100: dynamics/control/cognition/focus/social."
                    },
                    {
                        "name": "summary.scale_source",
                        "type": "string",
                        "description": "Всегда personalized_scales: summary.scales является production personalized result."
                    },
                    {
                        "name": "summary.superpower",
                        "type": "string",
                        "description": "Ведущий вектор выбирается не только по max(score), но и по margin_to_second, reliability, domain balance, conflict severity и personalization_delta."
                    },
                    {
                        "name": "summary.quality_score",
                        "type": "number",
                        "description": "Интегральная оценка качества данных 0..100."
                    },
                    {
                        "name": "domain_components",
                        "type": "object",
                        "description": "Нормализованные вклады доменов по шкалам в том же пространстве, что и финальные score. Возможные домены: NUM, MATRIX_DESTINY, ASTRO, HD, TRANSITS, LUNAR, SPACE_WEATHER, RAZIEL."
                    },
                    {
                        "name": "breakdown_short",
                        "type": "object",
                        "description": "Короткое объяснение: топ-положительные и топ-отрицательные факторы по каждой шкале."
                    },
                    {
                        "name": "conflicts",
                        "type": "array",
                        "description": "Конфликтная модель с severity и evidence. Конфликт — не ошибка и не диагноз, а часть индивидуального профиля."
                    },
                    {
                        "name": "reliability_model",
                        "type": "object",
                        "description": "Модель надёжности: source_quality, completeness, method_confidence, temporal_validity, fallback penalties, module statuses и reasons."
                    },
                    {
                        "name": "model_health",
                        "type": "object",
                        "description": "Диагностика caps, reliability, excluded observations, domain dominance, correlation groups и personalization drift."
                    }
                ],
                "feature_guidelines": {
                    "title": "Рекомендации по интеграции",
                    "list": [
                        "Всегда храните и проверяйте schema_version, calculation_version, rules_version, normalization_version и weights_hash: это защита от тихих изменений логики.",
                        "Считайте summary.scales production personalized result; для сравнения используйте explain.base_balanced_scales и explain.legacy_flat_scales.",
                        "Показывайте explain по требованию пользователя: это снижает объём трафика и сложность клиента.",
                        "Для матрицы судьбы используйте domain_components.*.MATRIX_DESTINY и breakdown_short с source MATRIX_DESTINY:*; не извлекайте выводы из картинки или порядка узлов.",
                        "Если quality_score низкий, учитывайте reliability_model и model_health.warnings перед выводом жёстких рекомендаций.",
                        "Если нужно только темпоральное обновление, используйте response.omit_portrait_payload=true."
                    ]
                },
                "examples": [
                    {
                        "language": "Bash (cURL)",
                        "description": "Полный цикл: create_task с Synthesis++, затем чтение summary и explain.",
                        "code": "# 1) Создание задачи\nTASK=$(curl -s -X POST \"https://digihash.ru/datacollector/api.php?action=create_task\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-Calc-Profile: A\" \\\n  -d '{\n    \"api_key\": \"655351024\",\n    \"user\": {\n      \"first_name\": \"Иван\",\n      \"last_name\": \"Иванов\",\n      \"birth_date\": \"1990-01-01\",\n      \"birth_time\": \"12:00\",\n      \"birth_city\": \"Москва\"\n    },\n    \"systems\": [\"forecast\", \"transits\", \"synthesis\"],\n    \"forecast\": {\n      \"period_type\": \"day\",\n      \"period_start_date\": \"2026-02-14\"\n    },\n    \"response\": {\n      \"omit_portrait_payload\": true\n    }\n  }')\n\nREQUEST_ID=$(echo \"$TASK\" | jq -r '.request_id')\n\n# 2) Канонический слой summary\ncurl -s \"https://digihash.ru/datacollector/api.php?action=get_result&request_id=$REQUEST_ID&view=summary\"\n\n# 3) Слой объяснимости explain\ncurl -s \"https://digihash.ru/datacollector/api.php?action=get_result&request_id=$REQUEST_ID&view=explain\""
                    },
                    {
                        "language": "PHP",
                        "description": "Пример опроса до success и безопасного переключения между view=summary и view=explain.",
                        "code": "<?php\n$api = 'https://digihash.ru/datacollector/api.php';\n$requestId = 'task_xxx';\n\nfor ($i = 0; $i < 60; $i++) {\n    sleep(2);\n    $summary = json_decode(file_get_contents($api . '?action=get_result&view=summary&request_id=' . urlencode($requestId)), true);\n\n    if (($summary['status'] ?? '') === 'success') {\n        $scales = $summary['summary']['scales'] ?? [];\n        $superpower = $summary['summary']['superpower'] ?? null;\n\n        // Explain запрашиваем только по требованию\n        $explain = json_decode(file_get_contents($api . '?action=get_result&view=explain&request_id=' . urlencode($requestId)), true);\n        $conflicts = $explain['conflicts'] ?? [];\n\n        print_r(['scales' => $scales, 'superpower' => $superpower, 'conflicts' => count($conflicts)]);\n        exit;\n    }\n\n    if (($summary['status'] ?? '') === 'error') {\n        throw new RuntimeException('Ошибка расчёта: ' . json_encode($summary['error'] ?? null, JSON_UNESCAPED_UNICODE));\n    }\n}\n\nthrow new RuntimeException('Таймаут ожидания результата');\n?>"
                    },
                    {
                        "language": "JavaScript (Fetch)",
                        "description": "Экспорт NDJSON в BI и разбор row_type без привязки к raw_profile.",
                        "code": "async function exportSynthesisNdjson(requestId) {\n  const url = `https://digihash.ru/datacollector/api.php?action=export_result&request_id=${encodeURIComponent(requestId)}&format=ndjson`;\n  const response = await fetch(url);\n  const text = await response.text();\n\n  const rows = text.trim().split('\\n').map(line => JSON.parse(line));\n  const summary = rows.find(r => r.row_type === 'summary');\n  const domainRows = rows.filter(r => r.row_type === 'domain_component');\n  const breakdownRows = rows.filter(r => r.row_type === 'breakdown_item');\n\n  return { summary, domainRows, breakdownRows };\n}"
                    }
                ]
            }
        },
        {
            "id": "05_response_models_1",
            "title": "7. Модели данных: астрология и транзиты",
            "description": "Ключевые структуры astrology/transits и базовые объекты планет/аспектов.",
            "file_name": "doc_05_models_astro.json",
            "content": {
                "title": "6. Модели данных: астрология и транзиты",
                "description": "Раздел описывает ключевые структуры для натальных и транзитных астрологических данных.",
                "common_models": {
                    "title": "Базовые объекты (Models)",
                    "PlanetObject": [
                        {
                            "name": "ecliptic_longitude_deg",
                            "type": "float",
                            "example": "322.6370",
                            "description": "Эклиптическая долгота (0..360)."
                        },
                        {
                            "name": "sign",
                            "type": "string",
                            "example": "aquarius",
                            "description": "Ключ знака зодиака."
                        },
                        {
                            "name": "sign_degree",
                            "type": "integer",
                            "example": "22",
                            "description": "Позиция внутри знака (0..29)."
                        },
                        {
                            "name": "is_retro",
                            "type": "boolean",
                            "example": "false",
                            "description": "Признак ретроградности."
                        },
                        {
                            "name": "hd",
                            "type": "object",
                            "description": "Маппинг Human Design (ворота/линия)."
                        }
                    ]
                },
                "systems_structure": {
                    "title": "Структура модулей astrology/transits",
                    "root": {
                        "schema_version": "string (например 2.2.5)",
                        "description": "Версия схемы верхнего блока systems для legacy-ветки."
                    },
                    "astrology": {
                        "description": "Натальная карта. Источник локации: SubjectContext (данные рождения).",
                        "structure_example": {
                            "status": "ok",
                            "data": {
                                "source": {
                                    "name": "NASA JPL Horizons",
                                    "type": "ephemeris"
                                },
                                "meta": {
                                    "calculated_for": "1981-10-27 04:13:00",
                                    "timezone": "Asia/Krasnoyarsk",
                                    "houses_system": "Porphyry",
                                    "houses_system_requested": "Placidus",
                                    "houses_system_applied": "Porphyry",
                                    "houses_fallback_used": true,
                                    "houses_fallback_reason": "Placidus unavailable in current PHP implementation; stable fallback applied",
                                    "location_used": {
                                        "context": "subject"
                                    }
                                },
                                "planets": {
                                    "sun": {
                                        "$ref": "PlanetObject"
                                    },
                                    "north_node": {
                                        "$ref": "PlanetObject"
                                    },
                                    "south_node": {
                                        "$ref": "PlanetObject"
                                    }
                                },
                                "aspects": [
                                    {
                                        "p1": "sun",
                                        "p2": "moon",
                                        "aspect": "conjunction",
                                        "actual_angle_deg": 10.66,
                                        "quality_tone": "neutral"
                                    }
                                ]
                            }
                        }
                    },
                    "transits": {
                        "description": "Транзитная карта. Источник локации: TemporalContext (current_location/target_date).",
                        "structure_example": {
                            "status": "ok",
                            "data": {
                                "date": "2026-02-14 09:00:00",
                                "source": {
                                    "name": "NASA JPL Horizons",
                                    "type": "ephemeris"
                                },
                                "planets": {
                                    "sun": {
                                        "$ref": "PlanetObject"
                                    }
                                },
                                "aspects": [
                                    {
                                        "p1": "sun",
                                        "p2": "moon",
                                        "aspect": "sextile"
                                    }
                                ],
                                "meta": {
                                    "location_used": {
                                        "city": "Орел",
                                        "timezone": "Europe/Moscow"
                                    },
                                    "calculated_at_utc": "2026-02-14 09:00:00"
                                }
                            }
                        }
                    }
                },
                "dictionaries": {
                    "title": "Справочники",
                    "planet_keys": [
                        {
                            "key": "sun",
                            "label": "Солнце",
                            "desc": "Сознание, воля, самопрезентация"
                        },
                        {
                            "key": "moon",
                            "label": "Луна",
                            "desc": "Эмоции, реакции, внутренние состояния"
                        },
                        {
                            "key": "north_node",
                            "label": "Северный узел",
                            "desc": "Вектор развития"
                        },
                        {
                            "key": "south_node",
                            "label": "Южный узел",
                            "desc": "Накопленный опыт"
                        }
                    ]
                }
            }
        },
        {
            "id": "06_models_forecast",
            "title": "8. Модели данных: нумерология и прогноз",
            "description": "Структуры numerology/forecast и модель нового hourly-forecast ответа.",
            "file_name": "doc_06_models_forecast.json",
            "content": {
                "title": "7. Модели данных: нумерология и прогноз",
                "description": "Раздел описывает основные блоки systems.numerology.data и systems.forecast.data. Полный path-level словарь доступен в AI-экспорте как response_field_dictionary.",
                "numerology_model": {
                    "description": "Блок response.systems.numerology.data содержит портретные значения, legacy matrix_destiny и MatrixDestiny22 v2.",
                    "fields": [
                        {
                            "name": "life_path",
                            "type": "integer",
                            "example": 2,
                            "desc": "Число жизненного пути по дате рождения."
                        },
                        {
                            "name": "destiny",
                            "type": "integer",
                            "example": 7,
                            "desc": "Число судьбы по полному имени."
                        },
                        {
                            "name": "personality",
                            "type": "integer",
                            "desc": "Число личности по согласным полного имени."
                        },
                        {
                            "name": "soul_urge",
                            "type": "integer",
                            "desc": "Число души по гласным полного имени."
                        },
                        {
                            "name": "maturity",
                            "type": "integer",
                            "desc": "Сводное число зрелости."
                        },
                        {
                            "name": "raziel_system",
                            "type": "object",
                            "desc": "Гематрический блок Raziel: hebrew_spelling, gematria_full, gematria_reduced."
                        },
                        {
                            "name": "matrix_destiny",
                            "type": "object",
                            "desc": "Legacy-матрица судьбы. Контракт сохранен для обратной совместимости."
                        },
                        {
                            "name": "matrix_destiny_v2",
                            "type": "object",
                            "desc": "MatrixDestiny22 v2.1.0: basis, canonical, derived_experimental, meta. Interpretation/scoring-контракты версионируются отдельно."
                        },
                        {
                            "name": "chaldean",
                            "type": "object",
                            "desc": "Халдейская нумерология."
                        },
                        {
                            "name": "vedic",
                            "type": "object",
                            "desc": "Ведическая нумерология."
                        },
                        {
                            "name": "psycho_matrix",
                            "type": "object",
                            "desc": "Психоматрица/квадрат Пифагора."
                        }
                    ]
                },
                "matrix_destiny_v2_model": {
                    "description": "MatrixDestiny22 v2.1.0 разделяет стабильный canonical-слой и derived_experimental explain-слой. Для интеграций используйте canonical, для диагностики и Synthesis++ можно читать derived_experimental. Начиная с matrix-destiny-activation-2.2.0 static shadow geometry отделена от temporal/day activation.",
                    "contract": {
                        "system_name": "MatrixDestiny22",
                        "version": "2.1.0",
                        "blocks": [
                            "basis",
                            "canonical",
                            "derived_experimental",
                            "meta"
                        ]
                    },
                    "blocks": [
                        {
                            "name": "basis",
                            "description": "Исходные данные и правила расчета: birth_date, birth_time, calendar, arcana_range, reduction_rule, zero_maps_to."
                        },
                        {
                            "name": "canonical.core",
                            "description": "Базовые канонические якоря: day_arcana, month_arcana, year_arcana, karma_tail_base, center_comfort, sky_line, earth_line."
                        },
                        {
                            "name": "canonical.age_nodes",
                            "description": "Канонические возрастные внешние узлы."
                        },
                        {
                            "name": "canonical.generic_programs",
                            "description": "Канонические родовые линии male_line и female_line."
                        },
                        {
                            "name": "canonical.channels",
                            "description": "Каналы self_search, socialization, spiritual_exam."
                        },
                        {
                            "name": "canonical.health_map",
                            "description": "Карта здоровья по формуле canonical-health-map-1.0.0."
                        },
                        {
                            "name": "derived_experimental",
                            "description": "Explain-слой: nodes, lines, sectors, age_cycle, interpretation, activation."
                        },
                        {
                            "name": "meta",
                            "description": "Метаданные режима canonical/derived и совместимости контракта."
                        }
                    ]
                },
                "matrix_destiny_v2_scoring_v2": {
                    "description": "Actual contract для исправленной модели MatrixDestiny22. derived_experimental.interpretation описывает статическую геометрию, derived_experimental.activation содержит только meta temporal-слоя, а дневная активация возвращается в forecast.days[].numerology.matrix_destiny_activation.",
                    "canonical_layer": "Стабильный слой MatrixDestiny22: canonical.core, age_nodes, generic_programs, channels, health_map.",
                    "static_interpretation_layer": {
                        "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation",
                        "fields": {
                            "shadow_arcana": "Legacy alias. Статический список shadow-арканов из nodes; не является прогнозом, кризисом или диагнозом.",
                            "shadow_arcana_deprecated": "true",
                            "static_shadow_arcana": "Список shadow-арканов в статической геометрии.",
                            "static_shadow_nodes": "Карта arcana => node_id[].",
                            "static_shadow_domains": "Карта domain/group => node_id[].",
                            "interpretation_version": "matrix-destiny-interpretation-2.2.0"
                        }
                    },
                    "portrait_activation_meta": {
                        "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta",
                        "fields": {
                            "time_scope": "temporal",
                            "available_in": "systems.forecast.data.days[].numerology.matrix_destiny_activation"
                        },
                        "removed": {
                            "path": "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.today",
                            "removed_in": "systems.schema_version 2.2.4",
                            "replacement": "systems.forecast.data.days[].numerology.matrix_destiny_activation"
                        }
                    },
                    "temporal_activation_layer": {
                        "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation",
                        "fields": {
                            "node_scores": "Legacy compact net_score по node_id.",
                            "node_scores_deprecated": "true",
                            "node_score_details": "Основной explain-слой scoring v2: activation_score, support_score, tension_score, net_score, state, evidence, breakdown.",
                            "age_segment": "Temporal возрастной сегмент на target_date: age_at_target, age_from, age_to, node_id, val, label, source.",
                            "conflict_nodes": "Только узлы с tension_score >= 0.45 и negative_evidence.",
                            "scoring_version": "matrix-destiny-activation-2.2.0"
                        }
                    },
                    "forecast_projection_node_score_details_schema": {
                        "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details",
                        "description": "Forecast-проекция дневной активации MatrixDestiny22 содержит explain-контракт scoring v2 внутри каждого forecast days[]. Portrait activation.today удален.",
                        "age_segment_schema": {
                            "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment",
                            "fields": {
                                "age_at_target": "integer: полный возраст субъекта на target_date.",
                                "age_from": "integer: начало возрастного сегмента включительно.",
                                "age_to": "integer: конец возрастного сегмента не включительно.",
                                "node_id": "string: node_id статического age_cycle anchor.",
                                "val": "integer: аркан активного возрастного сегмента.",
                                "label": "string: название аркана.",
                                "source": "string: matrix_destiny_v2.derived_experimental.age_cycle.anchors."
                            }
                        },
                        "node_id_object": {
                            "node_val": "integer: числовое значение аркана node_id в forecast-проекции.",
                            "node_label": "string: человекочитаемое название аркана узла.",
                            "node_polarity": "string: полярность аркана узла из MatrixDestinyDictionary.",
                            "activation_score": "float: явная сила дневной активации узла.",
                            "support_score": "float: поддерживающий вклад совместимых активаторов.",
                            "tension_score": "float: напряжение только от явных активирующих причин.",
                            "net_score": "float: activation_score + support_score - tension_score.",
                            "state": "string: neutral, resonant, supportive, tense_active или neutral_static_shadow.",
                            "positive_evidence": "array<object>: причины поддержки или активации узла.",
                            "negative_evidence": "array<object>: причины напряжения узла.",
                            "breakdown": "array<object>: постатейный разбор вклада дневных активаторов."
                        },
                        "evidence_item_fields": {
                            "source": "string: источник активатора.",
                            "activator_val": "integer: аркан активатора после редукции MatrixDestiny22.",
                            "activator_label": "string: название аркана активатора.",
                            "weight": "float: вес источника активатора.",
                            "repetition": "integer: количество повторений того же аркана.",
                            "rule": "string: exact_match, support_support или none.",
                            "reason": "string: машинно-читаемая причина вклада.",
                            "activation_delta": "float: вклад в activation_score.",
                            "support_delta": "float: вклад в support_score.",
                            "tension_delta": "float: вклад в tension_score."
                        }
                    },
                    "known_limitation_v2_1_0": "В старой модели v2.1.0 node_scores мог штрафовать shadow-узлы без явной дневной активации. Не интерпретируйте node_scores.* < 0 из старых кешей как самостоятельное evidence текущего негативного прогноза.",
                    "regression_example": {
                        "subject_birth_date": "1981-10-27",
                        "target_date": "2026-06-17",
                        "node": "money_c",
                        "node_val": 16,
                        "active_arcana_without_16": [
                            1,
                            2,
                            6,
                            7,
                            8,
                            19
                        ],
                        "expected": {
                            "conflict_nodes": [],
                            "node_scores": {
                                "money_c": 0
                            },
                            "node_score_details": {
                                "money_c": {
                                    "activation_score": 0,
                                    "support_score": 0,
                                    "tension_score": 0,
                                    "net_score": 0,
                                    "state": "neutral_static_shadow",
                                    "positive_evidence": [],
                                    "negative_evidence": []
                                }
                            }
                        }
                    }
                },
                "forecast_model": {
                    "description": "Блок response.systems.forecast.data содержит period и массив days. Для каждого дня возвращаются numerology, biorhythms, lunar, transits, space_weather, magic_schedule, extensions и meta.",
                    "temporal_consistency": {
                        "target_time_rule": "systems.context.temporal.target_time является единым локальным временем для systems.transits, forecast.days[].transits, Raziel planetary hours и Chaldean/Vedic daily calculations.",
                        "utc_projection": "Для timezone Europe/Moscow target_time=12:00:00 проецируется в transits UTC 09:00:00.",
                        "sunrise_fields": "Daily sunrise-boundary поля возвращаются явно как sunrise_utc, sunrise_local и timezone.",
                        "node_keys": "В planets и bodygraph.activations используются canonical north_node/south_node; legacy northnode/southnode не возвращаются.",
                        "portrait_cache": "Immutable portrait cache не содержит temporal activation.today, current_age/current_segment/reference_date внутри age_cycle."
                    },
                    "period_fields": [
                        {
                            "name": "type",
                            "type": "string",
                            "description": "Тип периода: day, week или month."
                        },
                        {
                            "name": "start_date",
                            "type": "string",
                            "description": "Дата начала периода."
                        },
                        {
                            "name": "end_date",
                            "type": "string",
                            "description": "Дата окончания периода."
                        },
                        {
                            "name": "anchor_datetime",
                            "type": "string",
                            "description": "Опорный момент расчета периода."
                        }
                    ],
                    "day_fields": [
                        {
                            "name": "date",
                            "type": "string",
                            "description": "Дата конкретного дня прогноза."
                        },
                        {
                            "name": "numerology",
                            "type": "object",
                            "description": "Temporal-нумерология дня: personal_year, personal_month, personal_day, day_ruler, solar_return_exact, vedic, chaldean, matrix_destiny_activation."
                        },
                        {
                            "name": "biorhythms",
                            "type": "object",
                            "description": "Физический, эмоциональный, интеллектуальный и средний биоритм."
                        },
                        {
                            "name": "lunar",
                            "type": "object",
                            "description": "Лунная фаза, лунный день, satanic-флаги, затмение и void_of_course_day."
                        },
                        {
                            "name": "transits",
                            "type": "object",
                            "description": "Транзитный срез планет и аспектов для дня."
                        },
                        {
                            "name": "space_weather",
                            "type": "object",
                            "description": "Kp-индекс, уровень, storm scale, качество данных и режим источника."
                        },
                        {
                            "name": "magic_schedule",
                            "type": "object",
                            "description": "Планетарное расписание дня."
                        },
                        {
                            "name": "extensions",
                            "type": "object",
                            "description": "Дополнительные ветки прогноза, включая raziel_wisdom."
                        },
                        {
                            "name": "meta",
                            "type": "object",
                            "description": "Метаданные дня прогноза и использованная локация."
                        }
                    ],
                    "structure_example": {
                        "period": {
                            "type": "week",
                            "start_date": "2026-02-14",
                            "end_date": "2026-02-20",
                            "anchor_datetime": "2026-02-14T12:00:00+03:00"
                        },
                        "days": [
                            {
                                "date": "2026-02-14",
                                "numerology": {
                                    "personal_year": 3,
                                    "personal_month": 8,
                                    "personal_day": 5,
                                    "matrix_destiny_activation": {
                                        "active_arcana": [
                                            5,
                                            8,
                                            14
                                        ],
                                        "conflict_nodes": [],
                                        "node_scores_deprecated": true,
                                        "age_segment": {
                                            "age_at_target": 44,
                                            "age_from": 40,
                                            "age_to": 50,
                                            "node_id": "right",
                                            "val": 19,
                                            "label": "Солнце",
                                            "source": "matrix_destiny_v2.derived_experimental.age_cycle.anchors"
                                        },
                                        "node_score_details": {
                                            "money_c": {
                                                "node_val": 16,
                                                "node_label": "Башня",
                                                "node_polarity": "shadow",
                                                "activation_score": 0,
                                                "support_score": 0,
                                                "tension_score": 0,
                                                "net_score": 0,
                                                "state": "neutral_static_shadow",
                                                "positive_evidence": [],
                                                "negative_evidence": [],
                                                "breakdown": []
                                            }
                                        },
                                        "resonance_score": 0.42,
                                        "state": "resonant",
                                        "scoring_version": "matrix-destiny-activation-2.2.0"
                                    }
                                },
                                "biorhythms": {
                                    "physical": 17,
                                    "emotional": -24,
                                    "intellectual": 63,
                                    "average": 19
                                },
                                "space_weather": {
                                    "status": "ok",
                                    "data_quality": "estimated",
                                    "kp_index": {
                                        "value": 4,
                                        "unit": "Kp"
                                    }
                                }
                            }
                        ]
                    }
                },
                "response_field_dictionary_note": {
                    "description": "Точные описания leaf-полей, включая wildcard-пути systems.forecast.data.days[].*, находятся в response_field_dictionary AI-экспорта."
                }
            }
        },
        {
            "id": "07_errors_troubleshooting",
            "title": "9. Ошибки и диагностика",
            "description": "Http status codes, внутренние ошибки worker и практические рекомендации.",
            "file_name": "doc_07_errors.json",
            "content": {
                "title": "8. Коды ошибок и решение проблем",
                "description": "API использует HTTP-коды для синхронных ошибок и статусные поля в JSON для асинхронного жизненного цикла задач.",
                "http_status_codes": [
                    {
                        "code": 200,
                        "meaning": "OK",
                        "desc": "Успешный синхронный ответ (например, get_result/get_spec/get_reference)."
                    },
                    {
                        "code": 202,
                        "meaning": "Accepted",
                        "desc": "create_task: задача поставлена в очередь."
                    },
                    {
                        "code": 400,
                        "meaning": "Bad Request",
                        "desc": "Неверный JSON, отсутствует request_id или ошибка валидации обязательных полей."
                    },
                    {
                        "code": 401,
                        "meaning": "Unauthorized",
                        "desc": "api_key отсутствует/невалиден в create_task или не передан для приватного request_id в get_result/export_result."
                    },
                    {
                        "code": 403,
                        "meaning": "Forbidden",
                        "desc": "Передан неверный ключ для приватного request_id или нет доступа к run_worker (не localhost и нет валидного X-Worker-Token)."
                    },
                    {
                        "code": 404,
                        "meaning": "Not Found",
                        "desc": "Задача по request_id не найдена."
                    },
                    {
                        "code": 405,
                        "meaning": "Метод не разрешен",
                        "desc": "Использован неверный HTTP-метод."
                    },
                    {
                        "code": 409,
                        "meaning": "Conflict",
                        "desc": "export_result: задача еще не готова к экспорту."
                    },
                    {
                        "code": 429,
                        "meaning": "Too Many Requests",
                        "desc": "Сработал rate limiter (есть заголовок Retry-After)."
                    },
                    {
                        "code": 500,
                        "meaning": "Internal Server Error",
                        "desc": "Критическая ошибка API-обработчика."
                    }
                ],
                "task_internal_errors": {
                    "description": "Ошибки, которые worker записывает в результат задачи (status=error).",
                    "common_messages": [
                        {
                            "error": "[CRITICAL_EXTERNAL] Ephemeris NASA data unavailable",
                            "cause": "Внешний источник эфемерид недоступен или вернул невалидные данные.",
                            "solution": "Сервис выполняет до 5 попыток с паузами. Если неуспешно — задача завершается ошибкой без частичного результата."
                        },
                        {
                            "error": "[CRITICAL_EXTERNAL] GeoProvider timezone unavailable",
                            "cause": "Не удалось определить таймзону/координаты через внешние geo-сервисы.",
                            "solution": "Проверьте корректность current_location/birth_city и доступность внешних API."
                        },
                        {
                            "error": "Portrait context is missing",
                            "cause": "Поврежденный или неполный portrait-кеш.",
                            "solution": "Пересоздайте задачу; при повторе проверьте целостность portrait-данных на сервере."
                        }
                    ]
                },
                "troubleshooting_faq": [
                    {
                        "problem": "space_weather показывает simulated данные",
                        "diagnosis": "Использован fallback-режим или нет наблюдаемых данных для окна расчета.",
                        "action": "Проверяйте data_quality/meta.is_simulated. Для строгого режима используйте forecast.space_weather_mode=observed_only."
                    },
                    {
                        "problem": "run_worker возвращает 403",
                        "diagnosis": "Это ожидаемо для внешних клиентов без локального доступа/токена.",
                        "action": "Не используйте run_worker из публичного фронта; запуск worker выполняется инфраструктурой сервера."
                    },
                    {
                        "problem": "get_result/export_result возвращает 401 или 403",
                        "diagnosis": "Задача создана приватным ключом и для чтения не передан ключ, либо передан другой ключ.",
                        "action": "Передайте тот же API-ключ через X-API-Key или query api_key, которым создавалась задача."
                    },
                    {
                        "problem": "Задача долго в processing",
                        "diagnosis": "Ожидание внешних источников или тяжелый расчет большого периода.",
                        "action": "Проверьте app.log/worker.log и попробуйте уменьшить состав systems или период forecast."
                    },
                    {
                        "problem": "Экспорт возвращает 409",
                        "diagnosis": "Расчет еще не завершен статусом success.",
                        "action": "Продолжайте polling get_result до success, затем вызывайте export_result."
                    }
                ]
            }
        },
        {
            "id": "08_integration_examples",
            "title": "10. Примеры интеграции",
            "description": "Практические примеры create/get, hourly-forecast, view-режимов и export_result.",
            "file_name": "doc_08_examples.json",
            "content": {
                "title": "9. Примеры интеграции",
                "description": "Базовые примеры create_task, polling get_result, режимов view для synthesis и экспорта NDJSON/CSV. Подробные правила работы с синергией см. в разделе 5.",
                "examples": [
                    {
                        "language": "Bash (cURL)",
                        "description": "Базовый сценарий: create_task + get_result (view=summary).",
                        "code": "# 1) Создать задачу\nRESPONSE=$(curl -s -X POST \"https://digihash.ru/datacollector/api.php?action=create_task\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-Calc-Profile: B\" \\\n  -d '{\n    \"api_key\": \"655351024\",\n    \"user\": {\n      \"first_name\": \"Иван\",\n      \"last_name\": \"Иванов\",\n      \"birth_date\": \"1990-01-01\",\n      \"birth_time\": \"12:00\",\n      \"birth_city\": \"Москва\"\n    },\n    \"systems\": [\"forecast\", \"synthesis\"],\n    \"forecast\": {\n      \"period_type\": \"day\",\n      \"period_start_date\": \"2026-02-14\"\n    }\n  }')\n\necho \"$RESPONSE\"\nTASK_ID=$(echo \"$RESPONSE\" | jq -r '.request_id')\n\n# 2) Опрос результата\nsleep 3\ncurl -s \"https://digihash.ru/datacollector/api.php?action=get_result&request_id=$TASK_ID&view=summary\""
                    },
                    {
                        "language": "Bash (cURL)",
                        "description": "Получение explain-режима и экспорт NDJSON.",
                        "code": "# Explain-слой synthesis\ncurl -s \"https://digihash.ru/datacollector/api.php?action=get_result&request_id=task_123&view=explain\"\n\n# Экспорт NDJSON\ncurl -s \"https://digihash.ru/datacollector/api.php?action=export_result&request_id=task_123&format=ndjson\""
                    },
                    {
                        "language": "Bash (cURL)",
                        "description": "Доступ к приватному request_id через заголовок X-API-Key.",
                        "code": "# Приватный get_result\ncurl -s \"https://digihash.ru/datacollector/api.php?action=get_result&request_id=task_private_123&view=summary\" \\\n  -H \"X-API-Key: your_private_key\"\n\n# Приватный export_result\ncurl -s \"https://digihash.ru/datacollector/api.php?action=export_result&request_id=task_private_123&format=ndjson\" \\\n  -H \"X-API-Key: your_private_key\""
                    },
                    {
                        "language": "PHP",
                        "description": "Пример с опросом результата и переключением view.",
                        "code": "<?php\n$apiUrl = 'https://digihash.ru/datacollector/api.php';\n$requestId = 'task_123';\n\nfor ($i = 0; $i < 30; $i++) {\n    sleep(2);\n    $result = json_decode(file_get_contents($apiUrl . '?action=get_result&request_id=' . urlencode($requestId) . '&view=summary'), true);\n\n    if (($result['status'] ?? '') === 'success') {\n        // Для synthesis-задачи это канонический слой summary\n        print_r($result['summary'] ?? []);\n\n        // При необходимости запрашиваем расширенное объяснение\n        $explain = json_decode(file_get_contents($apiUrl . '?action=get_result&request_id=' . urlencode($requestId) . '&view=explain'), true);\n        print_r($explain['domain_components'] ?? []);\n        exit;\n    }\n\n    if (($result['status'] ?? '') === 'error') {\n        throw new RuntimeException('Ошибка worker: ' . json_encode($result['error'] ?? null, JSON_UNESCAPED_UNICODE));\n    }\n}\n\nthrow new RuntimeException('Превышено время ожидания результата');\n?>"
                    },
                    {
                        "language": "JavaScript (Fetch)",
                        "description": "Фронтенд-опрос с view=summary и последующим экспортом csv.",
                        "code": "async function getSynthesisAndExport(requestId) {\n  const base = 'https://digihash.ru/datacollector/api.php';\n\n  const summaryRes = await fetch(`${base}?action=get_result&request_id=${encodeURIComponent(requestId)}&view=summary`);\n  const summary = await summaryRes.json();\n\n  if (summary.status !== 'success') {\n    throw new Error(`Задача еще не готова: ${summary.status}`);\n  }\n\n  const csvRes = await fetch(`${base}?action=export_result&request_id=${encodeURIComponent(requestId)}&format=csv`);\n  const csvText = await csvRes.text();\n  return { summary, csvText };\n}"
                    }
                ]
            }
        },
        {
            "id": "09_response_map",
            "title": "11. Полная карта ответа",
            "description": "Карта полей для async-задач и ссылка на структуру hourly-forecast ответа.",
            "file_name": "doc_09_response_map.json",
            "content": {
                "title": "10. Полная карта ответа",
                "description": "Карта верхних блоков get_result и export_result. Полное покрытие leaf-полей хранится в машинно-читаемом response_field_dictionary, который включается в doc/index.php?download=ai.",
                "response_contracts": {
                    "legacy_get_result": {
                        "description": "Обычный full get_result возвращает классический ответ с веткой systems. Synthesis++ не включается в legacy full get_result по умолчанию; используйте synthesis view/export contract.",
                        "top_level": [
                            "status",
                            "request_id",
                            "context",
                            "systems",
                            "warnings"
                        ],
                        "systems": [
                            "schema_version",
                            "context",
                            "numerology",
                            "astrology",
                            "bodygraph",
                            "transits",
                            "forecast"
                        ]
                    },
                    "synthesis_get_result": {
                        "description": "Отдельный synthesis view contract для задач, где synthesis был явно запрошен. get_result возвращает view=summary|explain|raw, export_result возвращает NDJSON/CSV.",
                        "views": {
                            "summary": [
                                "status",
                                "view",
                                "schema_version",
                                "calculation_version",
                                "rules_version",
                                "weights_hash",
                                "conflict_rules_version",
                                "normalization_version",
                                "calc_profile_id",
                                "request_id",
                                "date",
                                "summary",
                                "health",
                                "warnings"
                            ],
                            "explain": [
                                "summary fields",
                                "domain_components",
                                "breakdown_short",
                                "mode",
                                "archetype_profile",
                                "life_stage_profile",
                                "domain_personal_relevance",
                                "trait_concentration",
                                "cross_system_confirmation",
                                "symbol_resonance",
                                "portrait_temporal_balance",
                                "reliability_model",
                                "individual_sensitivity_model",
                                "legacy_flat_scales",
                                "base_balanced_scales",
                                "personalized_scales",
                                "personalization_delta",
                                "delta_flat_to_balanced",
                                "delta_balanced_to_personalized",
                                "domain_scores",
                                "domain_contributions",
                                "domain_contributions_meta",
                                "observations",
                                "excluded_observations",
                                "conflicts",
                                "shadow_flags",
                                "model_health"
                            ],
                            "raw": [
                                "view/version fields",
                                "raw_profile",
                                "synthesis"
                            ]
                        }
                    },
                    "embedded_synthesis_optional": {
                        "description": "Optional embedded systems.synthesis block. This block is returned only when synthesis is explicitly requested; it is not present in default full get_result.",
                        "condition": "systems[]=synthesis or future include_synthesis=1",
                        "shape": {
                            "systems": {
                                "synthesis": {
                                    "status": "ok",
                                    "data": {
                                        "schema_version": "synthesis-4.0.0"
                                    }
                                }
                            }
                        }
                    },
                    "export_result": {
                        "description": "Экспорт synthesis в NDJSON или CSV. Основные row_type: summary, domain_component, breakdown_item.",
                        "formats": [
                            "ndjson",
                            "csv"
                        ]
                    }
                },
                "response_map_tree": {
                    "status": {
                        "type": "string",
                        "desc": "Статус задачи или ответа: pending, processing, success, error."
                    },
                    "request_id": {
                        "type": "string",
                        "desc": "Внешний идентификатор задачи, возвращаемый create_task и включаемый в get_result/export_result для трассировки результата."
                    },
                    "context": {
                        "type": "object",
                        "desc": "Верхнеуровневый контекст ответа. context.timezone является legacy subject timezone; новые поля: subject_timezone и temporal_timezone."
                    },
                    "context.timezone": {
                        "type": "string",
                        "desc": "Legacy alias subject timezone в верхнеуровневом API-контексте."
                    },
                    "context.subject_timezone": {
                        "type": "string",
                        "desc": "IANA timezone натального subject-контекста."
                    },
                    "context.temporal_timezone": {
                        "type": "string",
                        "desc": "IANA timezone temporal-контекста target_date/target_time."
                    },
                    "context.quota": {
                        "type": "object",
                        "desc": "Технический блок квоты: charged_cost, effective_cost, refunded_cost, cache_hit, policy."
                    },
                    "systems": {
                        "type": "object",
                        "desc": "Классические расчетные системы: numerology, astrology, bodygraph, transits, forecast. Synthesis++ не является обязательной веткой legacy full get_result."
                    },
                    "systems.context": {
                        "type": "object",
                        "desc": "Subject/temporal контекст расчета, параметры response и признаки кэша."
                    },
                    "systems.context.temporal.target_time": {
                        "type": "string",
                        "desc": "Единое локальное время temporal-контекста для root transits, forecast transits, Raziel planetary hours и Chaldean/Vedic daily calculations."
                    },
                    "systems.context.subject_timezone": {
                        "type": "string",
                        "desc": "IANA timezone натального subject-контекста."
                    },
                    "systems.context.temporal_timezone": {
                        "type": "string",
                        "desc": "IANA timezone temporal-контекста target_date/target_time."
                    },
                    "systems.astrology.data.meta.houses_system": {
                        "type": "string",
                        "desc": "Реально примененная система домов. Не должна называться Placidus, если использован fallback."
                    },
                    "systems.astrology.data.meta.houses_system_requested": {
                        "type": "string",
                        "desc": "Запрошенная система домов. Текущее значение: Placidus."
                    },
                    "systems.astrology.data.meta.houses_system_applied": {
                        "type": "string",
                        "desc": "Фактически примененная система домов: Porphyry или Equal (MC) при fallback."
                    },
                    "systems.astrology.data.meta.houses_fallback_used": {
                        "type": "boolean",
                        "desc": "true означает, что вместо Placidus применена стабильная fallback-система."
                    },
                    "systems.astrology.data.meta.houses_fallback_reason": {
                        "type": "string",
                        "desc": "Причина применения fallback-системы домов."
                    },
                    "systems.numerology": {
                        "type": "object",
                        "desc": "Нумерология: базовые числа, Raziel, Chaldean, Vedic, PsychoMatrix, legacy matrix_destiny и MatrixDestiny22 v2."
                    },
                    "systems.numerology.data.matrix_destiny_v2": {
                        "type": "object",
                        "desc": "MatrixDestiny22 v2.1.0: basis, canonical, derived_experimental, meta. Корневые дубли core/nodes/lines/sectors/age_cycle/activation удалены."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.shadow_arcana": {
                        "type": "array<int>",
                        "desc": "Legacy static marker: список shadow-арканов из derived_experimental.nodes. Не является дневной активацией, текущим кризисом, прогнозом или диагнозом."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.static_shadow_arcana": {
                        "type": "array<int>",
                        "desc": "Статические shadow-арканы геометрии MatrixDestiny22; сами по себе не создают conflict_nodes."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.interpretation.static_shadow_nodes": {
                        "type": "object<string,array<string>>",
                        "desc": "Карта arcana => список node_id, где shadow-аркан присутствует в derived_experimental.nodes."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.today": {
                        "type": "removed",
                        "desc": "Удалено с systems.schema_version 2.2.4. Дневная активация доступна в systems.forecast.data.days[].numerology.matrix_destiny_activation."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta.time_scope": {
                        "type": "string",
                        "desc": "Значение temporal: activation не хранит дневные данные внутри immutable portrait."
                    },
                    "systems.numerology.data.matrix_destiny_v2.derived_experimental.activation.meta.available_in": {
                        "type": "string",
                        "desc": "Путь к актуальной forecast-проекции дневной активации MatrixDestiny22."
                    },
                    "systems.synthesis.status": {
                        "type": "string",
                        "desc": "Optional embedded статус Synthesis++ v4: ok или error. Возвращается только если synthesis явно запрошен; не часть default legacy full get_result."
                    },
                    "systems.synthesis.data": {
                        "type": "object",
                        "desc": "Optional embedded production-контракт Synthesis++ v4. Канонический пользовательский контракт — отдельный synthesis view/export."
                    },
                    "systems.synthesis.data.schema_version": {
                        "type": "string",
                        "desc": "Версия схемы Synthesis++ v4: synthesis-4.0.0."
                    },
                    "systems.synthesis.data.rules_version": {
                        "type": "string",
                        "desc": "Версия RuleRegistry/mapping table. weights_hash меняется при изменении правил, весов или normalization metadata."
                    },
                    "systems.synthesis.data.archetype_profile": {
                        "type": "object",
                        "desc": "Архетипический профиль inferred from symbolic/esoteric data, not from PMAI questionnaire; не является диагнозом или PMAI score."
                    },
                    "systems.synthesis.data.legacy_flat_scales": {
                        "type": "object",
                        "desc": "Старый flat result сохранён только для explain/debug сравнения."
                    },
                    "systems.synthesis.data.base_balanced_scales": {
                        "type": "object",
                        "desc": "Базовый результат после domain-balanced aggregation, до персонализации."
                    },
                    "systems.synthesis.data.personalized_scales": {
                        "type": "object",
                        "desc": "Основной production result после ограниченных personalized modifiers."
                    },
                    "systems.synthesis.data.personalization_delta": {
                        "type": "object",
                        "desc": "Разница personalized_scales - base_balanced_scales."
                    },
                    "systems.synthesis.data.model_health": {
                        "type": "object",
                        "desc": "Диагностика caps, reliability, excluded observations, domain dominance и personalization drift."
                    },
                    "systems.astrology.data.planets.north_node": {
                        "type": "object",
                        "desc": "Канонический северный лунный узел в planets. Legacy northnode не возвращается."
                    },
                    "systems.astrology.data.planets.south_node": {
                        "type": "object",
                        "desc": "Канонический южный лунный узел в planets. Legacy southnode не возвращается."
                    },
                    "systems.astrology": {
                        "type": "object",
                        "desc": "Натальная карта: source, meta, lunar, planets, points, aspects, houses."
                    },
                    "systems.bodygraph": {
                        "type": "object",
                        "desc": "Human Design: type, profile, authority, strategy, incarnation_cross, centers, channels, activations, meta."
                    },
                    "systems.bodygraph.data.activations.personality.north_node": {
                        "type": "object",
                        "desc": "Канонический северный лунный узел в personality-активациях. Legacy northnode не возвращается."
                    },
                    "systems.bodygraph.data.activations.personality.south_node": {
                        "type": "object",
                        "desc": "Канонический южный лунный узел в personality-активациях. Legacy southnode не возвращается."
                    },
                    "systems.bodygraph.data.activations.design.north_node": {
                        "type": "object",
                        "desc": "Канонический северный лунный узел в design-активациях. Legacy northnode не возвращается."
                    },
                    "systems.bodygraph.data.activations.design.south_node": {
                        "type": "object",
                        "desc": "Канонический южный лунный узел в design-активациях. Legacy southnode не возвращается."
                    },
                    "systems.transits": {
                        "type": "object",
                        "desc": "Транзитный срез: date, source, planets, aspects, meta."
                    },
                    "systems.transits.data.date": {
                        "type": "string",
                        "desc": "UTC-дата и время root transits, рассчитанные из systems.context.temporal.target_date + target_time в локальной timezone."
                    },
                    "systems.transits.data.planets.north_node": {
                        "type": "object",
                        "desc": "Канонический северный лунный узел в root transits. Legacy northnode не возвращается."
                    },
                    "systems.transits.data.planets.south_node": {
                        "type": "object",
                        "desc": "Канонический южный лунный узел в root transits. Legacy southnode не возвращается."
                    },
                    "systems.forecast": {
                        "type": "object",
                        "desc": "Прогноз: period и days[]. Каждый день содержит numerology, biorhythms, lunar, transits, space_weather, magic_schedule, extensions, meta."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation": {
                        "type": "object",
                        "desc": "Дневная активация MatrixDestiny scoring v2: active_arcana, age_segment, matched_nodes, matched_lines, matched_sectors, evidence-based conflict_nodes, legacy node_scores, node_score_details, resonance_score, state, scoring_version."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment": {
                        "type": "object",
                        "desc": "Temporal возрастной сегмент MatrixDestiny22 на target_date."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_at_target": {
                        "type": "integer",
                        "desc": "Полный возраст субъекта на target_date forecast-дня."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_from": {
                        "type": "integer",
                        "desc": "Нижняя граница возрастного сегмента включительно."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.age_to": {
                        "type": "integer",
                        "desc": "Верхняя граница возрастного сегмента не включительно."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.node_id": {
                        "type": "string",
                        "desc": "node_id статического age_cycle anchor, активного на target_date."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.val": {
                        "type": "integer",
                        "desc": "Аркан активного возрастного сегмента."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.label": {
                        "type": "string",
                        "desc": "Человекочитаемое название аркана возрастного сегмента."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.age_segment.source": {
                        "type": "string",
                        "desc": "Источник age_segment: matrix_destiny_v2.derived_experimental.age_cycle.anchors."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details": {
                        "type": "object<string,object>",
                        "desc": "Forecast explain-слой scoring v2 по каждому node_id: node_val, node_label, node_polarity, scores, state, evidence и breakdown."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_val": {
                        "type": "integer",
                        "desc": "Числовое значение аркана node_id в forecast-проекции дневной активации MatrixDestiny22."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_label": {
                        "type": "string",
                        "desc": "Человекочитаемое название аркана узла в forecast-проекции дневной активации MatrixDestiny22."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.node_polarity": {
                        "type": "string",
                        "desc": "Полярность аркана узла из MatrixDestinyDictionary: support, balanced, relational, active, dynamic, transforming, receptive или shadow."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence": {
                        "type": "array<object>",
                        "desc": "Машинно-читаемые причины поддержки или активации узла в forecast-проекции MatrixDestiny22."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.positive_evidence[].source": {
                        "type": "string",
                        "desc": "Код источника дневного активатора."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.negative_evidence[].reason": {
                        "type": "string",
                        "desc": "Машинно-читаемая причина напряжения узла."
                    },
                    "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.*.breakdown[].activation_delta": {
                        "type": "float",
                        "desc": "Вклад активатора в activation_score."
                    },
                    "systems.forecast.data.days[].numerology.solar_return_exact.natal_sun_deg": {
                        "type": "float",
                        "desc": "Натальная долгота Солнца, синхронизированная с systems.astrology.data.planets.sun.ecliptic_longitude_deg при наличии portrait astrology."
                    },
                    "systems.forecast.data.days[].numerology.solar_return_exact.natal_sun_source": {
                        "type": "string",
                        "desc": "Источник natal_sun_deg; основной контракт: systems.astrology.data.planets.sun.ecliptic_longitude_deg."
                    },
                    "systems.forecast.data.days[].numerology.chaldean.meta.sunrise_utc": {
                        "type": "string",
                        "desc": "UTC timestamp восхода для Chaldean daily day-boundary."
                    },
                    "systems.forecast.data.days[].numerology.chaldean.meta.sunrise_local": {
                        "type": "string",
                        "desc": "Локальный timestamp восхода в timezone temporal-контекста."
                    },
                    "systems.forecast.data.days[].numerology.vedic.meta.sunrise_utc": {
                        "type": "string",
                        "desc": "UTC timestamp восхода для Vedic daily day-boundary."
                    },
                    "systems.forecast.data.days[].numerology.vedic.meta.sunrise_local": {
                        "type": "string",
                        "desc": "Локальный timestamp восхода в timezone temporal-контекста."
                    },
                    "systems.forecast.data.days[].transits.date": {
                        "type": "string",
                        "desc": "UTC-дата и время forecast transits, рассчитанные из day date + systems.context.temporal.target_time в локальной timezone."
                    },
                    "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.is_day": {
                        "type": "boolean",
                        "desc": "true означает, что target local datetime находится между локальным sunrise и sunset."
                    },
                    "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.sunrise_utc": {
                        "type": "string",
                        "desc": "UTC timestamp восхода для Raziel planetary hours."
                    },
                    "systems.forecast.data.days[].extensions.raziel_wisdom.planetary_meta.sunrise_local": {
                        "type": "string",
                        "desc": "Локальный timestamp восхода в timezone temporal-контекста для Raziel planetary hours."
                    },
                    "systems.forecast.data.days[].lunar.void_of_course_day": {
                        "type": "object",
                        "desc": "Дневная сводка холостой Луны: окна, длительности, long_windows, display_policy и источник."
                    },
                    "summary": {
                        "type": "object",
                        "desc": "Компактный synthesis summary: scales, superpower, quality_score, conflicts_count."
                    },
                    "health": {
                        "type": "object",
                        "desc": "Операционные метрики synthesis: analysis_time_ms, memory_peak_mb, observations_used, observations_total, aggregation_drift_detected."
                    },
                    "domain_components": {
                        "type": "object",
                        "desc": "Доступно в view=explain: доменные вклады по шкалам."
                    },
                    "breakdown_short": {
                        "type": "object",
                        "desc": "Доступно в view=explain: краткий top положительных и отрицательных факторов."
                    },
                    "conflicts": {
                        "type": "array<object>",
                        "desc": "Доступно в view=explain: найденные конфликты с evidence."
                    },
                    "reliability_summary": {
                        "type": "object",
                        "desc": "Доступно в view=explain: расширенный отчет по надежности, статусам модулей и инвариантам."
                    },
                    "model_health": {
                        "type": "object",
                        "desc": "Доступно в view=explain: состояние инвариантов модели."
                    },
                    "raw_profile": {
                        "type": "object",
                        "desc": "Доступно в view=raw: полный внутренний synthesis-профиль для диагностики."
                    },
                    "warnings": {
                        "type": "array<string>",
                        "desc": "Глобальные предупреждения worker-процесса или расчетных модулей."
                    }
                },
                "response_field_dictionary": {
                    "description": "Полный машинно-читаемый словарь leaf-полей экспортируется в doc/index.php?download=ai как response_field_dictionary.",
                    "matching_order": [
                        "exact path",
                        "wildcard path with array indexes normalized to []",
                        "wildcard path with numeric object keys normalized to *",
                        "nearest parent object",
                        "leaf-name fallback"
                    ],
                    "coverage_levels": {
                        "total_coverage": "exact + specific wildcard + broad wildcard + common fallback",
                        "production_coverage": "exact + specific wildcard only. Broad patterns like **.date, **.val, **.source, **.meta, systems.*.**, systems.forecast.data.days[].**, systems.numerology.data.matrix_destiny_v2.**, systems.astrology.data.**, systems.bodygraph.data.** and systems.transits.data.** are not counted as production coverage.",
                        "strict_metrics": "leaf_total, unique_normalized_leaf_total, exact_count, specific_wildcard_count, broad_wildcard_count, common_fallback_count, missing_count, scalar_object_mismatch_count, documented_but_absent_exact_count, strict_production_coverage_percent."
                    },
                    "entry_schema": {
                        "path": "string",
                        "type": "string",
                        "title": "string",
                        "description": "string",
                        "category": "string",
                        "visibility": "public|technical",
                        "example": "optional mixed",
                        "notes": "optional string"
                    }
                },
                "examples": {
                    "quota_field": {
                        "path": "context.quota.effective_cost",
                        "description": "Итоговая стоимость запроса после применения политики кэша и возврата квоты."
                    },
                    "forecast_wildcard": {
                        "path": "systems.forecast.data.days[].numerology.personal_day",
                        "description": "Персональный день для конкретной даты прогноза."
                    },
                    "numeric_object_key": {
                        "path": "systems.numerology.data.psycho_matrix.matrix.*.count",
                        "description": "Количество повторений цифры в квадрате Пифагора."
                    },
                    "matrix_destiny_shadow_regression": {
                        "path": "systems.forecast.data.days[].numerology.matrix_destiny_activation.node_score_details.money_c",
                        "description": "Для 1981-10-27 при active_arcana без 16 узел money_c=16 остается neutral_static_shadow: activation_score=0, tension_score=0, conflict_nodes=[]."
                    }
                }
            }
        }
    ]
}