38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
# Спецификация 03: делоад — ProgressionRules.CheckDeload
|
||
|
||
Источники: Ф-12.4, документ метрик правило 10, дизайн LLM-планирования
|
||
разд. 6 («делоад не реже чем каждые 6 недель, объём −40–50 %»).
|
||
|
||
## 1. Сигнатура
|
||
|
||
```csharp
|
||
public ProgramVersion? CheckDeload(int athleteId, DateOnly today)
|
||
```
|
||
|
||
## 2. Условие
|
||
|
||
1. Активная версия есть; тренировок достаточно: последняя тренировка
|
||
атлета старше `DeloadMaxWeeks` недель назад от «сегодня» → нет
|
||
делаода (атлет не тренируется — это break-домен, не делоад).
|
||
2. Опорная точка — последнее делоад-событие (v1, З-42 п. 5):
|
||
- тренировка с `session_kind=deload` (максимальная `started_at`), или
|
||
- начало активной версии (нет истории) — дата создания версии.
|
||
Вариант «rules-draft с `session_kind: deload` в week 1» как опорная
|
||
точка **не реализован** (черновик ещё не подтверждён, тренировок
|
||
с kind=deload нет) — кандидат на доработку в m08.
|
||
3. `сегодня − опорная ≥ DeloadMaxWeeks × 7 дней` → предложение делаода.
|
||
4. Дедупликация: та же, что в spec 02 (rules-draft на активную версию
|
||
существует → null).
|
||
|
||
## 3. Формирование draft
|
||
|
||
Deep-copy активного body; week 1:
|
||
|
||
- веса `× 0.6` (середина коридора −40–50 %), округление к 0.5 кг;
|
||
- число подходов `−1` (минимум 1);
|
||
- всем сессиям week 1 → `"session_kind": "deload"`;
|
||
- `ProgramStore.CreateDraft(..., "rules", rationale)`; rationale —
|
||
«делоад: N недель без лёгкой недели (порог M)».
|
||
|
||
🛡 Активация — только человеком; авто-делоада активной версии нет.
|