38 lines
2.6 KiB
Markdown
38 lines
2.6 KiB
Markdown
# Спецификация 01: конфиг ProgressionConfig
|
||
|
||
Источники: requirements разд. 3 (`Progression.*`, `Deload.*`);
|
||
умолчания там же. По образцу `MetricsConfig` (m04, spec 01).
|
||
|
||
## 1. Поля (секция `Progression` в appsettings.json)
|
||
|
||
| Поле | Ключ | Умолчание | Семантика |
|
||
|---|---|---|---|
|
||
| `BaseStepKg` | `progression.baseStepKg` | `2.5` | шаг прогрессии базовых (правило 1) |
|
||
| `IsoStepKg` | `progression.isoStepKg` | `1.0` | шаг прогрессии изоляции (валидация 0.25–5, О-3-А) |
|
||
| `BackoffPercent` | `progression.backoffPercent` | `5` | снижение при недовыполнении, % |
|
||
| `DeloadMaxWeeks` | `progression.deloadMaxWeeks` | `6` | недель между делоадами |
|
||
| `MissDaysForBreak` | `progression.missDaysForBreak` | `4` | дней пропуска всех сессий → break (Ф-14.1, Жижин) |
|
||
| `ReturnMinFactor` | `progression.returnMinFactor` | `0.6` | нижняя граница коэффициента возврата (−40 %) |
|
||
| `ReturnMaxFactor` | `progression.returnMaxFactor` | `0.9` | верхняя граница снижения простоя 7–13 дней (−10 %) |
|
||
|
||
Загрузка — `ProgressionConfig.Load(JsonElement root)`: секция
|
||
`progression`, reflection по свойствам, camelCase → PascalCase,
|
||
нечисловое значение → исключение (упадёт при старте `serve`, как у
|
||
`MetricsConfig`). Регистрация в DI: `AddSingleton(config.Progression)`.
|
||
|
||
## 2. Валидация `Validate()`
|
||
|
||
- `IsoStepKg` вне [0.25; 5] → ошибка (коридор метрик «+0,5–1 кг», О-3-А);
|
||
- `BaseStepKg` вне [0.5; 10] → ошибка;
|
||
- `BackoffPercent` вне [1; 20] → ошибка (утверждённый диапазон, З-37 п. 4);
|
||
- `DeloadMaxWeeks` вне [3; 12], `MissDaysForBreak` < 2 → ошибка (диапазон делаода — З-37 п. 4);
|
||
- `ReturnMinFactor` вне [0.3; 0.9], `ReturnMaxFactor` вне (0.5; 1],
|
||
`ReturnMinFactor > ReturnMaxFactor` → ошибка.
|
||
|
||
## 3. Инвариант 🛡
|
||
|
||
Пороги правил — только из конфига; в коде не хардкодятся (Р3-А).
|
||
Коэффициенты возврата по длительности простоя — константы таблицы
|
||
документа перерывов (разд. 3.2), фактор ограничен конфигом
|
||
`ReturnMinFactor`/`ReturnMaxFactor`.
|