VEU.WathBody/1-docs/4-modules/m04-metrics-engine/api_specs/01-metrics-config.md

2.5 KiB
Raw Permalink Blame History

Спецификация: конфигурация порогов Safety (MetricsConfig)

Источники: Ф-13.5 (Р3-А: пороги конфигурируемые, умолчания — документ метрик), документ метрик п. 2.1–2.3, правила 1, 6.

1. Секция Safety в appsettings (json, camelCase)

"Safety": {
  "bpCancelSys": 150,        // АД сист. → отмена (документ метрик п. 2.2)
  "bpCancelDias": 90,        // АД диаст. → отмена
  "bpElevatedSys": 140,      // нижняя граница коридора «только кардио»
  "bpElevatedDias": 95,      // диаст. коридора
  "hrRestingRise": 8,        // пульс покоя ≥ базовый +8 (правило 1)
  "hrRestingDays": 2,        // …дней подряд
  "wellbeingLow": 2,         // самочувствие ≤2 (правило 1)
  "wellbeingDays": 2,        // …дней подряд
  "lightDayCount": 3,        // 3+ дня → cancel_recommendation
  "kneePainMin": 1,          // боль ≥1 (правило 6)
  "kneeRepeatSessions": 2,   // …занятий подряд
  "hrBaselineDays": 14,      // окно базового пульса покоя
  "hrBaselineMin": 3         // минимум значений для базового
}

2. Класс Core\Metrics\MetricsConfig.cs

  • свойства int с умолчаниями из таблицы выше;
  • static MetricsConfig Load(JsonElement root) — чтение секции Safety (отсутствует/частичная секция → умолчания по каждому полю; нечисловое значение → исключение с именем поля);
  • объект хранится в ServerConfig (поле Safety) и в DI как синглтон; валидация ServerConfig.Validate дополняется проверкой: bpElevatedSys ≤ bpCancelSys, все значения > 0, иначе ошибка валидации конфига (фатально). Коридоры диастолы по документу метрик перекрываются (отмена >90, «кардио» до 95) — проверка bpElevatedDias ≤ bpCancelDias не применяется.

3. Инвариант

🛡 Пороги читаются только из конфигурации; в расчётном коде числовые пороги не хардкодятся (Р3-А).