# Спецификация 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)». 🛡 Активация — только человеком; авто-делоада активной версии нет.