Изменение vision 1.1 (несколько атлетов на сервере, разные модели часов); требования — черновик 2

This commit is contained in:
virus-home 2026-10-17 18:20:02 +05:00
parent 7f88753be0
commit acfef60245
4 changed files with 319 additions and 37 deletions

View File

@ -4,8 +4,9 @@
> Источник: [vision.md](vision.md) (утверждён 2026-10-17, v1.0), разделы
> 1.3 (БЦ), 1.4 (КУ), 2.1–2.4; решения опросников 4.1–4.7; ТЗ
> (`..\..\Техническое задание.md`), дизайн LLM-планирования (разд. 2–3,
> 6–8, 11 — шаг 1).
> Версия: черновик 1 (2026-10-17). Формулировки — проверяемые (d-req-7).
> 6–8, 11 — шаг 1); изменение vision 1.1 (2026-10-17) — несколько
> атлетов на сервере, разные модели часов.
> Версия: черновик 2 (2026-10-17). Формулировки — проверяемые (d-req-7).
## 1. Назначение и границы
@ -18,25 +19,36 @@
из Garmin Connect неофициальным клиентом и парсинг на сервере;
REST API со статическим ключом; веб-история с CSV; программы
(версионированный JSON) с контролем «план/факт» и правилами
прогрессии (без LLM).
прогрессии (без LLM); поддержка нескольких атлетов на сервере —
у каждого свои программы, профиль и данные (изменение vision 1.1);
поддержка разных моделей часов Garmin (мультитаргет-сборка одного
поля данных).
- **Вне границ v1:** LLM-планирование — еженедельный контур (v2,
опросник 4.6), мезоциклы и «генератор+ревьюер» (v2.x); wake-word
«Феникс, записывай» (v2, опросник 4.5); iOS (v2, опросник 4.2);
экспорт FIT из приложения и доставка программ на часы (v2);
трековые виды спорта — бег/вело (v3+, опросник 4.7); полная
автоматическая смена программы без подтверждения (vision 2.4).
автоматическая смена программы без подтверждения (vision 2.4);
саморегистрация атлетов и публичный доступ (vision 2.4, изменение
1.1).
## 2. Состав системы, точки входа и режимы
Система — три компонента. Каждый работает автономно от остальных
(vision 2.2, «независимость частей»).
(vision 2.2, «независимость частей»). Клиентская часть одноатлетная
(изменение vision 1.1): один телефон + одни часы принадлежат одному
атлету; множество атлетов поддерживается на сервере — каждый своим
API-ключом.
### 2.1. Часы — поле данных «Феникс» (Monkey C, Connect IQ)
Точка входа: добавление поля данных в штатный профиль «Силовая»
(решение — опросник 4.1). Отдельных режимов нет: поле живёт в течение
активности. Кнопки не перехватываются (Lap и Start/Stop обрабатывает
Garmin штатно — Ф-2.5, Ф-2.6).
Garmin штатно — Ф-2.5, Ф-2.6). Код поля данных переносимый: сборки под
разные модели Garmin — конфигурациями одного проекта (разметка под
размеры/разрешения экранов); перечень моделей — открытый вопрос 8.
Якорное устройство — Fenix 6.
### 2.2. Телефон — приложение «Феникс» (Android, Kotlin)
@ -80,7 +92,8 @@ Garmin штатно — Ф-2.5, Ф-2.6).
| Параметр | Семантика | Умолчание |
|---|---|---|
| `Api.Key` | статический API-ключ для телефона | — (обязательный) |
| `Api.Key` | статический API-ключ по умолчанию (владелец) | — (обязательный) |
| `Api.Athletes` | список атлетов: `{ name, apiKey }` — ключ идентифицирует атлета (изменение vision 1.1; способ заведения — открытый вопрос 9) | — (минимум владелец) |
| `Api.Port` | порт HTTPS | `8443` |
| `Db.ConnectionString` | подключение к PostgreSQL | — (обязательный) |
| `Garmin.Login / Garmin.Password` | учётная запись Garmin Connect (решение — опросник 4.3) | — (обязателен для `fetch`) |
@ -142,6 +155,11 @@ Garmin штатно — Ф-2.5, Ф-2.6).
подтверждений и не блокирует штатное сохранение тренировки.
7. 🛡 Поле не пишет в сеть и не хранит историю: только отображение;
запись ведёт сама платформа Garmin.
8. Разметка экрана — на ресурсы макета по семействам разрешений;
функциональное поведение (Ф-2.1–Ф-2.7) одинаково на всех целевых
моделях; функциональность, отсутствующая на модели (например,
вибрация), молча пропускается — поле не падает (изменение vision
1.1).
### Ф-3. Экран активной тренировки (телефон)
@ -172,6 +190,9 @@ Garmin штатно — Ф-2.5, Ф-2.6).
(`is_active=0`): история остаётся читаемой.
3. 🛡 Идентификаторы упражнений (`exercise_id`) неизменяемы: программы
и факты ссылаются по ID (дизайн LLM-планирования, разд. 2).
4. 🛡 Библиотека принадлежит атлету (изоляция, изменение vision 1.1):
упражнения другого атлета недоступны; общий справочник на всех —
кандидат v2 (открытый вопрос 11).
### Ф-5. История тренировок (телефон)
@ -198,6 +219,8 @@ Garmin штатно — Ф-2.5, Ф-2.6).
2. Очередь `sync_pending`: каждая новая/изменённая сущность получает
`client_guid` (UUID v4, генерирует телефон) и попадает в очередь;
порядок — по времени создания; отправка — пакетами ≤ 50 записей.
🛡 Атлета определяет API-ключ: все записи пакета пишутся на сервере
от его имени; телефон не передаёт идентификатор атлета в данных.
3. Отправка: `POST /api/v1/sync` (пакет записей + `client_guid` каждой);
успех записи на сервере подтверждается ответом (принятые GUID);
подтверждённые удаляются из очереди. Неудача сети — тихий баннер
@ -236,21 +259,25 @@ Garmin штатно — Ф-2.5, Ф-2.6).
сопоставлённая пара связывается; несопоставленные остаются
раздельными (сопоставление не удаляет и не переписывает данные
— 🛡).
5. REST API (HTTPS, заголовок `X-Api-Key` = `Api.Key`; без ключа —
`401`): `POST /api/v1/sync` (Ф-7.3); `GET /api/v1/workouts`
(список с пагинацией); `GET /api/v1/workouts/{id}` (карточка);
`GET /api/v1/programs/active` (активная версия программы).
5. REST API (HTTPS, заголовок `X-Api-Key` = ключ атлета; без ключа или
с чужим ключом — `401`): `POST /api/v1/sync` (Ф-7.3);
`GET /api/v1/workouts` (список с пагинацией); `GET /api/v1/workouts/{id}`
(карточка); `GET /api/v1/programs/active` (активная версия программы).
🛡 Каждой запрос видит данные только своего атлета (изоляция,
изменение vision 1.1).
6. 🛡 API пишет факт-данные только из sync и импорта; ручного ввода
на сервере нет.
### Ф-9. Веб-интерфейс сервера
1. Страница истории: таблица тренировок (дата, длительность, средний
пульс, подходы, упражнений), сортировка по дате, пагинация.
пульс, подходы, упражнений), сортировка по дате, пагинация;
владелец (ключ `Api.Key`) видит все данные, атлет — только свои;
фильтр по атлету для владельца (изменение vision 1.1).
2. Карточка тренировки: подходы, пульс-тренд, соответствие программе
(план/факт — Ф-11.4).
3. Выгрузка CSV текущей выборки (КУ-4). Доступ — по тому же
`X-Api-Key` (формa входа — ввод ключа; открытый вопрос 6).
3. Выгрузка CSV текущей выборки (КУ-4). Доступ — по ключу атлета
(форма входа — ввод ключа; открытый вопрос 6).
### Ф-10. Программы тренировок (сервер + телефон)
@ -258,7 +285,8 @@ Garmin штатно — Ф-2.5, Ф-2.6).
LLM-планирования, разд. 2): недели → тренировки (день, фокус) →
упражнения (`exercise_id` из библиотеки) → подходы-план (вес,
повторения, `target_rpe`, отдых). Хранение — таблица `programs`
(PostgreSQL); каждая версия неизменяема (🛡).
(PostgreSQL); каждая версия неизменяема (🛡). 🛡 Программы принадлежат
атлету — у каждого свои (изменение vision 1.1).
2. В v1 создание/правка версии — вручную в приложении на телефоне
(редактор программы) с отправкой на сервер; `author=user`.
3. Ровно одна версия в статусе `active` (🛡); смена активной — явным
@ -282,9 +310,11 @@ Garmin штатно — Ф-2.5, Ф-2.6).
### Ф-12. Правила прогрессии (без LLM, v1)
1. После каждой синхронизированной тренировки MetricsEngine (сервер)
считает: adherence (доля закрытых подходов), тоннаж по упражнению
и группе, оценочный 1ПМ (формула — открытый вопрос 7) — в
`workout_metrics` (дизайн LLM-планирования, разд. 4).
считает по данным этого атлета: adherence (доля закрытых подходов),
тоннаж по упражнению и группе, оценочный 1ПМ (формула — открытый
вопрос 7) — в `workout_metrics` (дизайн LLM-планирования, разд. 4).
🛡 Метрики и правила считаются по каждому атлету независимо
(изоляция, изменение vision 1.1).
2. Микроправка весов на следующее занятие (правила, детерминированно):
- все запланированные подходы закрыты «по плану» → вес +
`Progression.BaseStepKg` на базовых, + `BaseStepKg`/2 на изоляции;
@ -323,6 +353,9 @@ Garmin штатно — Ф-2.5, Ф-2.6).
и повторный `fetch`/`import` не создают дублей (КУ-3, Ф-8.1).
- 🛡 **Неизменяемость истории:** версии программ неизменяемы; факт-записи
сервер не переписывает; удаление упражнения — только логическое.
- 🛡 **Изоляция атлетов:** API-ключ идентифицирует атлета; ни API,
ни веб не отдают атлету чужие данные; метрики, правила и программы
считаются по атлетам независимо (изменение vision 1.1).
- 🛡 **Тайны:** пароль Garmin и API-ключи — только в настройках;
в логах их нет.
- 🛡 **Безопасность нагрузки:** автоматические изменения программы
@ -363,3 +396,7 @@ Garmin штатно — Ф-2.5, Ф-2.6).
| 5 | Способ сопоставления тренировок телефон ↔ .fit | Окно ± 15 минут (Ф-8.4) против точной метки начала из sync | ✅ Закрыт в этом документе (раздел 4, Ф-8.4) |
| 6 | Доступ в веб-интерфейс | Ввод ключа в форме против Basic Auth; личное использование — проще форма с ключом | Закрыт шагом 5 |
| 7 | Формула оценочного 1ПМ | Эпли против Бжицки (разд. 4 дизайна LLM-планирования); различие ~5 % на малых повторениях | Закрыт шагом 5 |
| 8 | Перечень моделей часов v1 | Якорь — Fenix 6 (изменение vision 1.1); каждая модель — конфигурация сборки (экран, память). Кандидаты: модели с профилем «Силовая» и Connect IQ 4+ у участников; список фиксируется по фактическому парку устройств | Закрыт шагом 4 |
| 9 | Способ заведения атлетов | Список `{name, apiKey}` в `appsettings.json` (просто, но правка — с перезапуском) против раздела веб-администрирования владельца (удобнее, дороже). Для v1 — конфиг с последующим переносом в веб без смены схемы БД | Закрыт шагом 5 |
| 10 | Источник .fit для атлетов без учётки владельца | `fetch` идёт под учётной записью владельца (опросник 4.3); другие атлеты: (а) делят доступ к своему Garmin (передача файла в папку импорта), (б) свой экземпляр учётки в конфиге, (в) только ручной импорт. Кандидат для v1 — (в) папка импорта | Закрыт шагом 5 |
| 11 | Общий справочник упражнений | Сейчас библиотека у каждого атлета своя (Ф-4.4); общий справочник + личные дополнения — кандидат v2 (дубли при малом числе атлетов не критичны) | Открыт (до v2) |

View File

@ -1,7 +1,15 @@
# Vision: Феникс 6X — контроль силовых тренировок (телефон + Garmin Fenix 6 + личный сервер)
> Версия 1.0 — **УТВЕРЖДЕНО** (2026-10-17; вопросы опросника 4.1–4.7
> Версия 1.1 — **УТВЕРЖДЕНО** (2026-10-17; вопросы опросника 4.1–4.7
> отвечены, ответы применены; утверждение — 2026-10-17).
> Изменение 1.1 (указание пользователя, 2026-10-17): серверная часть
> поддерживает нескольких атлетов — у каждого свои программы, профиль
> и данные, с собственных телефона и часов (пп. 2.2, 2.4, 3.1);
> саморегистрации нет — учётные записи и API-ключи создаёт владелец
> сервера. Приложение на телефоне при этом не меняется (одно устройство —
> один атлет); часы поддерживаются различные: одно поле данных
> (Connect IQ) собирается под разные модели Garmin, серверу источник
> .fit безразличен (пп. 2.2, 2.4).
> Источник идеи: техническое задание
> «Феникс 6X» (Garmin Edition) от 17.10.2026
> ([Техническое задание.md](../../Техническое%20задание.md)); требование
@ -175,9 +183,11 @@ Garmin, наш продукт фиксирует результаты без р
Смягчение: локальный движок с ограниченным словарём (вес, повторы,
отдых), голосовое подтверждение каждой команды, правка вручную
за ≤ 2 касания (КУ-1).
- **БР-3. Ограничения Connect IQ на Fenix 6** (память приложения,
тип поля данных). Смягчение: минимальное поле данных, метрики —
штатными источниками платформы.
- **БР-3. Ограничения Connect IQ и разнородность часов** (память
приложения, разные экраны/возможности моделей). Смягчение:
минимальное поле данных, метрики — штатными источниками платформы;
переносимый код + конфигурации сборки под модели (изменение 1.1);
якорное устройство — Fenix 6.
- **БР-4. Ограниченный канал телефон ↔ часы в реальном времени**
(companion-канал Connect IQ, не прямой BLE). Смягчение: часы автономны
(ТЗ п. 2.2), телефон показывает то, что канал передаёт; потеря канала
@ -195,7 +205,7 @@ Garmin, наш продукт фиксирует результаты без р
### 1.7. Предположения и зависимости
- **Предположение П-1.** Часы Garmin Fenix 6 носятся на каждой
- **Предположение П-1.** Часы Garmin (Connect IQ) носятся на каждой
тренировке; смартфон обычно находится в зоне доступа микрофона
(сумка, подставка), но его присутствие и связь с ним не обязательны:
тренировка фиксируется часами и без телефона.
@ -209,8 +219,9 @@ Garmin, наш продукт фиксирует результаты без р
(решение — [Требование.md](../../Требование.md)).
- **Зависимость З-2.** Аккаунт Garmin Connect; учётные данные/токен —
в конфигурации сервера, не в коде.
- **Зависимость З-3.** Connect IQ SDK (Monkey C) и устройство Fenix 6
для сборки и отладки части часов.
- **Зависимость З-3.** Connect IQ SDK (Monkey C) и целевые устройства
Garmin для сборки и отладки части часов; список моделей — открытый
вопрос шага 4 (якорь — Fenix 6).
- **Зависимость З-4.** Garmin FIT SDK (официальный, бесплатный, есть
порт для C#) — парсинг .fit на сервере; Garmin может изменять
интерфейсы Garmin Connect — риск БР-1.
@ -234,7 +245,8 @@ Garmin, наш продукт фиксирует результаты без р
текущий пульс, средний пульс за подход, время под нагрузкой, цветовая
индикация зон (50/70/85 %), фиксация конца подхода кнопкой Lap,
виброотклик; часы автономно пишут трек пульса и нажатия (форма —
поле данных в профиле «Силовая», решение — опросник 4.1).
поле данных в профиле «Силовая», решение — опросник 4.1); одно
поле данных собирается под разные модели Garmin (изменение 1.1).
- **Ф-3. Экран активной тренировки (телефон)** — текущий пульс (значение
и график за подход), таймер отдыха с цветовой индикацией, текущая
позиция программы (Ф-11), статусы связи с часами и сетью.
@ -329,11 +341,16 @@ LLM-контур Ф-12 — v2**.
Ограничения (принимаем как данность):
- личное использование: один пользователь, без авторизации и регистрации;
телефон ↔ сервер — статический API-ключ;
- железо Fenix 6: экран 260×260 MIP без сенсора, управление кнопками,
Connect IQ 4+; пульс в реальном времени на телефон — только через
нативное приложение часов (ограничение Garmin);
- использование без саморегистрации: учётные записи атлетов и API-ключи
создаёт владелец сервера; сервер поддерживает несколько атлетов —
у каждого свои программы, профиль и данные, с собственных телефона
и часов (изменение 1.1); клиентская часть (телефон + часы) —
одноатлетная: устройство принадлежит одному человеку;
- часы — модели Garmin с Connect IQ: одно поле данных собирается
под разные модели (размеры/разрешения экранов — конфигурации сборки
одного кода); якорное устройство v1 — Fenix 6 (260×260 MIP, кнопки),
добавление моделей — новой конфигурацией сборки без переделки кода
(перечень устройств v1+ — открытый вопрос шага 4);
- пульсофическая телеметрия силовых тренировок — только из FIT
(TCX/GPX непригодны — документ форматов);
- один личный сервер; без оплаты внешних сервисов и подписок.
@ -343,8 +360,8 @@ LLM-контур Ф-12 — v2**.
- не применяет изменения программы вне бюджета доверия (±5 %) без
подтверждения пользователя; полностью автоматическая смена программы
без подтверждений исключена (дизайн LLM-планирования, разд. 6);
- не является многопользовательской и не публикует данные в сторонние
сервисы — только собственный сервер;
- не даёт саморегистрации и публичного доступа: работают только
атлеты, созданные владельцем сервера;
- не заменяет Garmin Connect — использует его как источник .fit;
- не изобретает собственные форматы обмена — FIT/JSON/CSV
(документ форматов, п. 5.4);
@ -354,10 +371,13 @@ LLM-контур Ф-12 — v2**.
### 3.1. Профили заинтересованных лиц
- **Пользователь-владелец (атлет, заказчик и единственный пользователь
в одном лице).** Ценность: ничего не теряется, тренировки идут по
программе, прогресс управляем; вероятное отношение — соавтор
требований. Важные функции: все — Ф-1–Ф-12.
- **Пользователь-владелец (атлет, заказчик, владелец сервера).**
Ценность: ничего не теряется, тренировки идут по программе, прогресс
управляем; вероятное отношение — соавтор требований. Важные функции:
все — Ф-1–Ф-12.
- **Другие атлеты (изменение 1.1)** — тренируются по своим программам
со своих телефона и часов; данные изолированы в рамках сервера.
Важные функции: Ф-1–Ф-11 (кроме владения сервером).
- **Garmin (внешняя платформа, не пользователь).** Источник SDK, .fit,
ограничений (БР-1, БР-3, БР-4); с системой ничего не делает.

123
program-trenirovok.json Normal file
View File

@ -0,0 +1,123 @@
{
"program_id": "prg_2026_10_health_start",
"version": 1,
"based_on_version": null,
"status": "draft",
"author": "user",
"created_at": "2026-10-17T00:00:00Z",
"profile": {
"age_group": "45+",
"experience": "novice",
"equipment": "gym",
"days_per_week": 3,
"goals": ["weight_normalization", "muscle_tone", "testosterone_support"],
"limitations": [
"hypertension: no breath-holding/valsava, cancel if BP>150/90 pre-session, HR cap 120 strength / 135 cardio",
"obesity: low-impact cardio only, moderate caloric deficit 300-500 kcal",
"meniscus injury: no running/jumping/deep knee flexion, squats replaced by leg press short ROM"
]
},
"weeks": [
{
"week": 1,
"goal": "вводная, адаптация: по 1 рабочему подходу, веса калибруются (последние 2 повторения с трудом, без отказа)",
"load_level": "medium_week_pattern_medium_large_small",
"sessions": [
{
"day": "monday",
"focus": "full_body_a",
"warmup_min": 12,
"cardio_after_min": 20,
"exercises": [
{"exercise_id": "leg_press_short_rom", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150, "notes": "колено не глубже 60-70° сгибания, без боли"}]},
{"exercise_id": "chest_press_machine", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "seated_cable_row", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "lat_pulldown", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "seated_dumbbell_shoulder_press", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150, "notes": "спинка 40-50°, без прогиба"}]},
{"exercise_id": "dumbbell_curl", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 120, "notes": "локти прижаты"}]},
{"exercise_id": "triceps_pushdown", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 120, "notes": "локти к бокам, не блокировать сустав"}]},
{"exercise_id": "incline_crunch", "sets": [{"weight_kg": 0, "reps": 15, "target_rpe": 6, "rest_sec": 90}]},
{"exercise_id": "forearm_plank", "sets": [{"weight_kg": null, "reps": 1, "duration_sec": 25, "target_rpe": 6, "rest_sec": 90}]}
]
},
{
"day": "wednesday",
"focus": "lower_pull_b",
"warmup_min": 12,
"cardio_after_min": 10,
"exercises": [
{"exercise_id": "leg_press_short_rom", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "lying_leg_curl", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 120}]},
{"exercise_id": "lat_pulldown", "sets": [{"weight_kg": null, "reps": 12, "target_rpe": 7, "rest_sec": 150}]},
{"exercise_id": "seated_cable_row", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "chest_press_machine", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "shoulder_press_machine", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 6, "rest_sec": 150}]},
{"exercise_id": "back_extension", "sets": [{"weight_kg": 0, "reps": 15, "target_rpe": 6, "rest_sec": 120, "notes": "без переразгибания"}]},
{"exercise_id": "incline_crunch", "sets": [{"weight_kg": 0, "reps": 15, "target_rpe": 6, "rest_sec": 90}]},
{"exercise_id": "forearm_plank", "sets": [{"weight_kg": null, "reps": 1, "duration_sec": 25, "target_rpe": 6, "rest_sec": 90}]}
]
},
{
"day": "friday",
"focus": "full_body_a_light",
"warmup_min": 12,
"cardio_after_min": 25,
"exercises_note": "повторить monday с весами −30%, кардио длиннее",
"exercises": [
{"exercise_id": "leg_press_short_rom", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 150, "notes": "вес = 70% от понедельника"}]},
{"exercise_id": "chest_press_machine", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 150}]},
{"exercise_id": "seated_cable_row", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 150}]},
{"exercise_id": "lat_pulldown", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 150}]},
{"exercise_id": "seated_dumbbell_shoulder_press", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 150}]},
{"exercise_id": "dumbbell_curl", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 120}]},
{"exercise_id": "triceps_pushdown", "sets": [{"weight_kg": null, "reps": 15, "target_rpe": 5, "rest_sec": 120}]},
{"exercise_id": "incline_crunch", "sets": [{"weight_kg": 0, "reps": 15, "target_rpe": 5, "rest_sec": 90}]},
{"exercise_id": "forearm_plank", "sets": [{"weight_kg": null, "reps": 1, "duration_sec": 25, "target_rpe": 5, "rest_sec": 90}]}
]
}
]
},
{
"week": 2,
"goal": "закрепление техники, +1 повторение там, где все подходы закрыты легко",
"sessions_note": "те же тренировки monday/wednesday/friday; в каждом упражнении 2 рабочих подхода",
"progression": {"sets": 2, "reps_delta": 0, "weight_delta_pct": 0},
"sessions": []
},
{
"week": 3,
"goal": "прогрессия повторений: +1-2 повторения в каждом подходе при том же весе",
"sessions_note": "те же тренировки; 2 подхода",
"progression": {"sets": 2, "reps_delta": 1, "weight_delta_pct": 0},
"sessions": []
},
{
"week": 4,
"goal": "достигли 15-20 повторений — +2,5-5% веса (ноги +2,5 кг, руки +0,5-1 кг), повторения откатываются к 12-15",
"sessions_note": "те же тренировки; 2 подхода; лёгкая пятница сохраняется",
"progression": {"sets": 2, "reps_delta": 0, "weight_delta_pct": 3, "weight_delta_rule": "arms +0.5-1kg, legs +2.5kg, max +400g small muscle groups"},
"sessions": []
},
{
"week": 5,
"goal": "начало месяцев 3-4: 2-3 рабочих подхода, 12-15 повторений, отдых 1,5-2 мин",
"sessions_note": "переход к блоку «добавляем объём»; каждую 8-ю неделю — лёгкая (веса −30%)",
"progression": {"sets": 3, "reps_delta": 1, "weight_delta_pct": 2, "rest_sec": 110},
"sessions": []
}
],
"safety": {
"pre_session_check": {"resting_hr_max": 90, "bp_cancel_over": "150/90", "bp_walk_only": "140-150/90-95"},
"strength_hr_cap": 120,
"cardio_hr_zone": [110, 135],
"recovery_rule": "пульс к исходному за 3-5 мин после подхода; АД за 5-10 мин после тренировки",
"red_flags": ["боль/давление в груди", "головокружение", "острая боль или щелчки в колене", "утренний пульс +8-10 от обычного 2 дня подряд"]
},
"nutrition": {
"deficit_kcal": [300, 500],
"protein_g_per_kg_target_weight": [1.6, 2.0],
"fat_g_per_kg_min": 0.8,
"notes": "соль минимум; сон 8 ч; алкоголь минимум; натуральные продукты (Жижин гл. 7)"
},
"rationale": "Программа по Жижину (вводный комплекс, схема недели средняя-большая-малая, самоконтроль АД/пульса), с правилами из статей об ошибках (качество вместо количества, фиксация локтей, без блокировки суставов) и «12 заповедей» (прогрессия +1-2 повторения, затем малый шаг веса 300-400 г). Приседания/бег заменены из-за мениска; натуживание исключено из-за гипертонии. Веса первой недели калибруются на месте (weight_kg=null) — после первой недели вносится версия 2 с конкретными весами."
}

102
program-trenirovok.md Normal file
View File

@ -0,0 +1,102 @@
# Программа тренировок: нормализация веса, тонус мышц, тестостерон
> Составлена по книгам из `I:\Skill\WatchBody\books`: Жижин «Бодибилдинг: личный опыт врача», «10 ошибок начинающих бодибилдеров», «8 типичных ошибок в тренировке трицепса», «12 заповедей бодибилдера».
> Профиль: мужчина 45+, новичок, тренажёрный зал, 3 раза в неделю. Ограничения: повышенное АД, лишний вес, повреждённый мениск (бег и ударная нагрузка на колено исключены).
## Принципы (из книг)
1. **«Не навреди»** (Жижин, гл. 3): нагрузки оздоровительные, никаких предельных весов. Личный эксперимент автора показал: веса 25–100% от максимума дают одинаковый прирост силы при регулярности — форсировать незачем.
2. **Качество вместо количества** («10 ошибок», №2): техника важнее тоннажа; вес такой, чтобы последние 2 повторения давались с трудом, но без нарушения техники и без задержки дыхания.
3. **Тренировка через боль запрещена** (ошибка №4): острая боль в колене = стоп-сигнал для упражнения.
4. **Не блокировать суставы** («8 ошибок трицепса», №8): в локтях и коленях — не выпрямляться «в замок».
5. **Мышцы растут на отдыхе** (Жижин, гл. 5): перерыв между тренировками одной группы — 48–72 ч; сон не меньше 8 ч (прямо важно для тестостерона).
6. **Питание — почти 99,9% успеха** (Жижин, гл. 7): для снижения веса — умеренный дефицит (не более 900 г/нед, лучше 300–500 г/нед при тренировках), белок 1,6–2 г/кг, без жёстких диет.
## Что меняется из-за мениска и давления
| Ограничение | Замена |
|---|---|
| Бег, прыжки, скакалка | Велотренажёр / эллипс без сопротивления, ходьба, плавание (аэробика — 35% нагрузки, Жижин гл. 6) |
| Приседания со штангой, выпады, становая с пола | Жим ногами в укороченной амплитуде (без глубокого сгибания колена, ~до 60–70°), разгибания/сгибания голени лёгкие, без боли |
| Натуживание и задержка дыхания (при гипертонии) | Выдох на усилии, вдох при опускании; дыхание через нос (Жижин гл. 4) |
| Предельные веса и «до отказа» в каждом сете | До лёгкого утомления, запас 2–3 повторения первые 2 месяца |
## Самоконтроль (обязателен — гипертония)
- **До тренировки**: пульс сидя за 1 мин (после 3–5 мин отдыха). Больше 90 уд/мин — тренировка переносятся или отменяется. АД утром и перед залом: выше 150/90 — только прогулка/дыхание, выше 160/100 — отмена, к врачу.
- **Во время**: пульс при силовой — не выше ~110–120 уд/мин; на аэробике — по формуле (180 − возраст) ≈ 130–135 уд/мин максимум.
- **После**: пульс должен вернуться к исходному за 3–5 мин; АД — за 5–10 мин к исходному. Не восстанавливается — нагрузка велика.
- **Дневник** (Жижин гл. 2): дата, упражнения, вес × повторения, пульс до/после, самочувствие, давление. Раз в месяц — обхваты (талия!) и вес.
## Структура недели (схема Жижина для 3 занятий: средняя — большая — малая)
| День | Тип | Содержание |
|---|---|---|
| Пн | Средняя | Силовая А (весь корпус) + кардио 20 мин |
| Ср | Большая | Силовая B (акцент ноги+спина) + кардио 10 мин |
| Пт | Малая | Силовая A (лёгкая, −30% весов) + кардио 25–30 мин |
Разминка (все дни, 12–15 мин, Жижин гл. 4): 5–7 мин велотренажёр без сопротивления → суставная гимнастика → наклоны/вращения головы 20–30 раз (шея при гипертонии — приоритет) → перед каждым упражнением 1 лёгкий разминочный подход 15 повторений с 40% рабочего веса.
Заминка: 5 мин спокойная ходьба + растяжка; дома контрастный душ (Жижин гл. 4).
## Месяцы 1–2: вводный комплекс
Каждое упражнение: **1 рабочий подход 15–20 повторений** (первые 2 недели — только 1 сет, далее 2 сета). Отдых между упражнениями 2–3 мин, пульс перед следующим подходом < 90.
### Силовая A (верх + пресс)
1. Жим ногами в тренажёре, укороченная амплитуда — 15–20 (кровоток в ноги, минимум риска колену)
2. Жим в тренажёре / жим гантелей лёжа (или жим от груди сидя в тренажёре — безопаснее) — 15
3. Тяга горизонтального блока к поясу — 15
4. Тяга верхнего блока к груди — 15
5. Жим гантелей сидя с опорой на спинку (40–50°) — 15
6. Сгибание рук с гантелями — 15 (локти прижаты, «8 ошибок трицепса»)
7. Разгибания на блоке — 15 (локти к бокам, без блокировки сустава)
8. Скручивания на наклонной скамье (лёгкие) — 15–20
9. Планка на предплечьях — 20–40 сек (мягко для спины и кора)
### Силовая B (акцент на крупные мышцы — главный тестостероновый стимул)
1. Жим ногами — 2×15 (амплитуда комфортная для колена)
2. Сгибания голени лёжа — 2×15
3. Тяга верхнего блока / подтягивания в гравитроне — 2×12–15
4. Тяга горизонтального блока — 2×15
5. Жим лёжа в тренажёре — 2×15
6. Жим сидя на плечи в тренажёре — 2×15
7. Гиперэкстензия (без переразгибания) — 2×15
8. Скручивания + планка — как в A
### Кардио (после силовой, не перед)
Велотренажёр/эллипс/ходьба в горку: пульс 110–130 уд/мин, разговорчивый темп. Бег исключён (мениск). Плавание — идеально в любой свободный день.
## Месяцы 3–4: добавляем объём
- Рабочих подходов 2–3, повторения 12–15, отдых 1,5–2 мин.
- Раз в 2 недели — «сюрприз»-прогрессия (Жижин гл. 6): +1–2 повторения в каждом подходе; когда достигли 15–20 — +2,5–5% веса (минимальные шаги, не более 300–400 г на руки, 2,5 кг на ноги).
- Каждую 6–8-ю неделю — лёгкая неделя (веса −30%): защита суставов и ЦНС.
- Схема нагрузки на неделе остаётся: средняя → большая → малая.
## Ожидаемые вехи (по книге-тесту Жижина, гл. 5, сниженные под профиль)
К концу месяца 3 должно получаться без одышки и боли:
- 20 приседаний без веса за 30 сек — без боли в колене;
- отжимания от опоры (скамья) — 15–20;
- ходьба 40 мин в темпе — без одышки;
- талия −3–5 см, утреннее АД −5–10 мм рт. ст., пульс покоя −3–5 уд/мин.
## Питание и образ жизни для тестостерона (по Жижину гл. 7 + поправка на снижение веса)
- Дефицит калорий умеренный: −300–500 ккал от расхода, темп 0,3–0,5 кг/нед — резкое урезание роняет тестостерон.
- Белок 1,6–2 г/кг веса цели (не текущего), жиры не ниже 0,8 г/кг — жиры животные 65%/растительные 35% (холестерин — сырье для тестостерона), углеводы в основном вокруг тренировки.
- Соль минимум (важно при АД), вода до 1,5–2 л, овощи местные, жареное/колбасы/майонез — минимум (Жижин гл. 7, п. 7–8).
- Сон 8 ч в одно и то же время — главный бесплатный «бустер» тестостерона; тренировка заканчивается за 2 ч до сна.
- Алкоголь — минимум: прямой подавитель синтеза тестостерона.
- Натуральная еда вместо «чудо-коктейлей»: молоко, творог, яйца, мясо, рыба, крупы, мед (Жижин гл. 7).
## Красные флаги — немедленно прекратить и к врачу
- Боль/давление в груди, сильная одышка, головокружение, потемнение в глазах.
- Пульс после нагрузки выше 130 и не снижается за 5 мин.
- Острая боль или щелчки в колене, отёк на следующий день.
- Утренний пульс на 8–10 уд/мин выше обычного, «разбитость» 2 дня подряд — перетренированность (Жижин гл. 6): лёгкая неделя.
> Перед стартом — контрольное АД и по возможности консультация кардиолога: книга писалась как замена врачебному контролю при его отсутствии, а не вместо него.