43 lines
2.5 KiB
Markdown
43 lines
2.5 KiB
Markdown
# Спецификация: конфигурация порогов Safety (MetricsConfig)
|
||
|
||
> Источники: Ф-13.5 (Р3-А: пороги конфигурируемые, умолчания —
|
||
> документ метрик), документ метрик п. 2.1–2.3, правила 1, 6.
|
||
|
||
## 1. Секция `Safety` в appsettings (json, camelCase)
|
||
|
||
```json
|
||
"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-А).
|