# Спецификация 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`.