{
  "profile": "open-alert-draft/0.20",
  "types": {
    "profile": {
      "values": [
        "bootstrap/1",
        "open-alert-draft/0.20"
      ],
      "description": "profile"
    },
    "bool": {
      "values": [
        "true",
        "false"
      ],
      "description": "bool"
    },
    "mode": {
      "values": [
        "siren",
        "recording",
        "test",
        "program",
        "stream"
      ],
      "description": "mode"
    },
    "purpose": {
      "values": [
        "real",
        "exercise",
        "technical"
      ],
      "description": "purpose"
    },
    "policy": {
      "values": [
        "stop",
        "finish"
      ],
      "description": "policy"
    },
    "phase": {
      "values": [
        "starting",
        "running",
        "stopping",
        "finished"
      ],
      "description": "phase"
    },
    "output": {
      "values": [
        "off",
        "commandedOff",
        "onObserved",
        "unknown",
        "fault"
      ],
      "description": "output"
    },
    "result": {
      "values": [
        "succeeded",
        "failed",
        "cancelled",
        "unknown"
      ],
      "description": "result"
    },
    "ownershipState": {
      "values": [
        "free",
        "held",
        "detached",
        "draining",
        "blocked",
        "released"
      ],
      "description": "Состояние владения"
    },
    "recoveryState": {
      "values": [
        "reconciling",
        "ready",
        "localInterventionRequired"
      ],
      "description": "Восстановление после сбоя"
    },
    "checkStatus": {
      "values": [
        "passed",
        "failed",
        "inconclusive",
        "skipped",
        "pending"
      ],
      "description": "Итог проверки; pending только для незавершенного сеанса. Все статусы кроме passed требуют reason."
    },
    "presence": {
      "values": [
        "present",
        "absent",
        "expectedMissing",
        "unknown"
      ],
      "description": "Физическое наличие точки"
    },
    "readMethod": {
      "values": [
        "cached",
        "refreshable",
        "checkOnly"
      ],
      "description": "Способ получения показания"
    },
    "sourceKind": {
      "values": [
        "localInput",
        "ouReply",
        "controllerMetric",
        "derived"
      ],
      "description": "Источник данных"
    },
    "validity": {
      "values": [
        "valid",
        "invalid",
        "unavailable"
      ],
      "description": "Достоверность значения"
    },
    "freshness": {
      "values": [
        "fresh",
        "stale",
        "never"
      ],
      "description": "Свежесть наблюдения"
    },
    "facet": {
      "values": [
        "identity",
        "meaning",
        "source",
        "acquisition"
      ],
      "description": "Часть описания точки"
    },
    "pointType": {
      "values": [
        "bool",
        "enum",
        "int",
        "counter"
      ],
      "description": "Тип значения точки"
    },
    "support": {
      "values": [
        "supported",
        "unsupported"
      ],
      "description": "Поддержка точки, отдельно от ее наличия"
    },
    "alarmState": {
      "values": [
        "active",
        "cleared",
        "unknown"
      ],
      "description": "Состояние аварийного эпизода"
    },
    "severity": {
      "values": [
        "info",
        "warning",
        "critical"
      ],
      "description": "Категория важности аварии"
    },
    "continuity": {
      "values": [
        "continuous",
        "unknown"
      ],
      "description": "Подтвержденная непрерывность эпизода"
    },
    "thresholdOperator": {
      "values": [
        "lt",
        "le",
        "gt",
        "ge",
        "eq",
        "ne"
      ],
      "description": "Сравнение значения с порогом"
    },
    "conflictDetail": {
      "values": [
        "requestMismatch",
        "configRevisionMismatch",
        "capabilityRevisionMismatch",
        "bindingChanged",
        "contentRevisionMismatch",
        "instanceMismatch",
        "operationStateMismatch"
      ],
      "description": "Машинная причина conflict"
    },
    "errorCode": {
      "values": [
        "incompatibleProfile",
        "staleAttachment",
        "unsupportedVersion",
        "unsupported",
        "invalidArgument",
        "forbidden",
        "staleBoot",
        "staleEpoch",
        "busy",
        "unsafeState",
        "startWindowExpired",
        "confirmationWindowExpired",
        "startBlockedByCancel",
        "conflict",
        "resultExpired",
        "notFound",
        "snapshotExpired",
        "cursorExpired",
        "sourceUnavailable",
        "storageFault",
        "incompatible",
        "incomplete",
        "noSpace",
        "invalidSignature",
        "rollbackDenied"
      ],
      "description": "Коды отказа приема; причины результата не являются кодами отказа"
    },
    "digestAlgorithm": {
      "values": [
        "streebog256"
      ],
      "description": "Стрибог-256 для содержимого и образов; 32 байта, 64 строчных hex-символа"
    },
    "evidence": {
      "values": [
        "none",
        "commandSent",
        "reportedMode",
        "electrical",
        "acoustic",
        "localConfirmation"
      ],
      "description": "Уровень доказательства: нет, отправленная команда, режим ОУ, электрическое/акустическое наблюдение, местное подтверждение. off запрещен для none/commandSent."
    },
    "eventType": {
      "values": [
        "session.started",
        "session.finished",
        "resource.changed",
        "sensor.qualityChanged",
        "inventory.changed",
        "alarm.raised",
        "alarm.cleared",
        "alarm.qualityChanged",
        "session.execution",
        "session.fault"
      ],
      "description": "События ядра; обязательное тело зависит от типа. poll.finished задается отдельным профилем."
    },
    "observationPhase": {
      "values": [
        "baseline",
        "running",
        "stopped"
      ],
      "description": "До воздействия, при воздействии, после остановки."
    },
    "limitName": {
      "values": [
        "maxXmlBytes",
        "heartbeatIntervalMs",
        "controlLeaseMs",
        "frameAssemblyMs",
        "writeProgressMs",
        "ordinaryResponseMs",
        "cancelAdmissionMs",
        "snapshotLifetimeMs",
        "maxSnapshots",
        "maxSnapshotsPerPrincipal",
        "snapshotMaxPages",
        "snapshotReadMaxMs",
        "eventCapacity",
        "eventRateMax",
        "eventBurstMax",
        "eventDrainMinPerSec",
        "stopBeginMs",
        "stopConfirmMs",
        "prepareTimeoutMs",
        "recoveryTimeoutMs",
        "resultRetentionMs",
        "cmdSeqWindow",
        "technicalDurationMaxMs",
        "exerciseDurationMaxMs"
      ],
      "description": "Обязательные лимиты capabilities; значения и единицы заданы паспортом ядра. Неизвестные имена требуют другого согласованного профиля."
    },
    "resultReason": {
      "values": [
        "completed",
        "operatorStop",
        "controlLostStop",
        "maxDurationExceeded",
        "prepareTimeout",
        "stopDispatchTimeout",
        "stopConfirmTimeout",
        "sourceUnavailable",
        "driverFault",
        "storageFault",
        "contentMismatch",
        "mediaIncomplete",
        "hardwareProtection",
        "testFailed",
        "stopUnconfirmed",
        "observationLost",
        "recoveryUncertain",
        "mediaClockFault",
        "equipmentFault",
        "programAborted"
      ],
      "description": "Закрытый словарь причин. programAborted допустим только у stageResult со state=notStarted и без result; у session и finished-этапа запрещен. Остальные пары result/reason заданы временной моделью."
    },
    "ownershipPurpose": {
      "values": [
        "real",
        "exercise",
        "technical",
        "maintenance"
      ],
      "description": "Назначение эпохи; START совпадает с ним, maintenance не допускает START."
    },
    "executionStatus": {
      "values": [
        "pending",
        "confirmed",
        "notExecuted",
        "unknown"
      ],
      "description": "Историческое подтверждение начала воздействия; confirmed не стирается остановкой или поздним отказом."
    },
    "completionState": {
      "values": [
        "pending",
        "complete",
        "interrupted",
        "unknown"
      ],
      "description": "Полнота принятого задания отдельно от подтверждения начала."
    },
    "stopMode": {
      "values": [
        "duration",
        "command"
      ],
      "description": "Сирена заданной длительности либо до штатной адресной остановки; maxDurationMs обязателен в обоих случаях."
    },
    "forbiddenDetail": {
      "values": [
        "roleDenied",
        "scopeDenied",
        "ownerMismatch"
      ],
      "description": "Машинная причина отказа по полномочиям; сведения о чужом исполнении не раскрываются."
    },
    "busyDetail": {
      "values": [
        "ownershipHeld",
        "executionActive",
        "localControl",
        "serviceActive",
        "capacityExhausted"
      ],
      "description": "Причина занятости; START не ставится в очередь."
    },
    "faultEffect": {
      "values": [
        "none",
        "degraded",
        "failed",
        "unknown"
      ],
      "description": "Влияние диагностического условия на выбранное исполнение, независимо от важности severity."
    },
    "faultCode": {
      "values": [
        "powerLost",
        "phaseLost",
        "batteryLow",
        "lineOpen",
        "lineShort",
        "amplifierFault",
        "ouLinkLost",
        "outputMismatch",
        "sourceLost",
        "overTemperature",
        "hardwareProtection",
        "storageFault",
        "mediaIncomplete",
        "mediaClockFault",
        "driverFault",
        "sourceUnavailable",
        "contentMismatch",
        "maxDurationExceeded",
        "prepareTimeout",
        "stopDispatchTimeout",
        "stopConfirmTimeout",
        "testFailed",
        "observationLost",
        "vendorFault"
      ],
      "description": "Код нарушения во время исполнения; конкретная область и влияние передаются отдельно."
    },
    "responseStatus": {
      "values": [
        "ok",
        "accepted",
        "error"
      ],
      "description": "responseStatus"
    },
    "testEffect": {
      "values": [
        "none",
        "readBus",
        "switchOutput",
        "audible",
        "pauseAudio",
        "resetInterface",
        "writeStorage"
      ],
      "description": "testEffect"
    }
  },
  "errors": [
    [
      "incompatibleProfile / staleAttachment",
      "Нет общего профиля / номер прикрепления устарел либо уже использован другим каналом."
    ],
    [
      "unsupportedVersion / unsupported",
      "Не поддержана версия или функция. Нельзя подменять запрошенный режим другим."
    ],
    [
      "invalidArgument",
      "Поле, сочетание полей или диапазон неверны; действий нет."
    ],
    [
      "forbidden",
      "Нет права действия, области либо управления чужим исполнением; detail обязателен: roleDenied, scopeDenied, ownerMismatch."
    ],
    [
      "staleBoot / staleEpoch",
      "Контекст загрузки или владения устарел. Старое поручение не переносится в новый контекст."
    ],
    [
      "busy / unsafeState",
      "busy: разрешенная операция конфликтует с владением, исполнением, местным управлением, сервисом или квотой; detail обязателен. unsafeState: состояние физически небезопасно, в том числе недоказанный off."
    ],
    [
      "startWindowExpired",
      "Отказ приема START: истек срок приема нового запуска."
    ],
    [
      "confirmationWindowExpired",
      "Отказ подтверждения сетевой настройки: истек срок подтверждения."
    ],
    [
      "maxDurationExceeded / stopUnconfirmed",
      "Причины результата уже принятого исполнения: исчерпан общий предел / выключение не подтверждено. Это не отказ приема START и не доказательство успешного окончания."
    ],
    [
      "startBlockedByCancel",
      "Поздний START блокирован сохраненной отменой cancelSeq. Код не доказывает, что до отмены исполнения не было."
    ],
    [
      "conflict",
      "Несовпадение содержимого повтора, ревизии или состояния операции. Причина уточняется машинным detail."
    ],
    [
      "resultExpired / notFound",
      "Решение уже недоступно / ссылка не найдена в доступной области. Ни одно не доказывает, что действие исторически не происходило."
    ],
    [
      "snapshotExpired / cursorExpired",
      "Снимок или курсор недействителен; нужна новая последовательность чтения."
    ],
    [
      "sourceUnavailable / storageFault",
      "Источник или хранилище недоступны; последующие попытки требуют оценки состояния."
    ],
    [
      "incompatible / incomplete / noSpace",
      "Неподходящий образ, незавершенная передача или недостаточный ресурс."
    ],
    [
      "invalidSignature / rollbackDenied",
      "Не подтверждена подлинность либо версия не разрешена политикой отката."
    ]
  ],
  "limits": {
    "maxXmlBytes": {
      "unit": "bytes",
      "fixed": 1024
    },
    "heartbeatIntervalMs": {
      "unit": "ms",
      "fixed": 5000
    },
    "controlLeaseMs": {
      "unit": "ms",
      "fixed": 30000
    },
    "frameAssemblyMs": {
      "unit": "ms",
      "fixed": 10000
    },
    "writeProgressMs": {
      "unit": "ms",
      "fixed": 10000
    },
    "ordinaryResponseMs": {
      "unit": "ms",
      "fixed": 500
    },
    "cancelAdmissionMs": {
      "unit": "ms",
      "fixed": 100
    },
    "snapshotLifetimeMs": {
      "unit": "ms",
      "fixed": 30000
    },
    "maxSnapshots": {
      "unit": "count",
      "min": 1
    },
    "maxSnapshotsPerPrincipal": {
      "unit": "count",
      "min": 1
    },
    "snapshotMaxPages": {
      "unit": "count",
      "min": 1
    },
    "snapshotReadMaxMs": {
      "unit": "ms",
      "min": 1,
      "max": 27000
    },
    "eventCapacity": {
      "unit": "count",
      "min": 1
    },
    "eventRateMax": {
      "unit": "events/s",
      "min": 1
    },
    "eventBurstMax": {
      "unit": "count",
      "min": 0
    },
    "eventDrainMinPerSec": {
      "unit": "events/s",
      "min": 1
    },
    "stopBeginMs": {
      "unit": "ms",
      "min": 1,
      "max": 1000
    },
    "stopConfirmMs": {
      "unit": "ms",
      "min": 1,
      "max": 10000
    },
    "prepareTimeoutMs": {
      "unit": "ms",
      "min": 1
    },
    "recoveryTimeoutMs": {
      "unit": "ms",
      "min": 1
    },
    "resultRetentionMs": {
      "unit": "ms",
      "min": 30000
    },
    "cmdSeqWindow": {
      "unit": "count",
      "fixed": 4096
    },
    "technicalDurationMaxMs": {
      "unit": "ms",
      "fixed": 30000
    },
    "exerciseDurationMaxMs": {
      "unit": "ms",
      "fixed": 1080000
    }
  },
  "deploymentLimits": {
    "alarmTransitionMaxMs": {
      "unit": "ms",
      "min": 100,
      "max": 35000,
      "scope": "technical-test admission"
    }
  },
  "bulkErrorCodes": {
    "1": "invalidArgument",
    "2": "conflict",
    "3": "forbidden",
    "4": "staleEpoch",
    "5": "resultExpired",
    "6": "storageFault",
    "7": "busy",
    "8": "unsafeState"
  }
}
