2.5 KiB
2.5 KiB
Спецификация: конфигурация порогов 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-А).