Изменение vision 1.1 (несколько атлетов на сервере, разные модели часов); требования — черновик 2
This commit is contained in:
parent
7f88753be0
commit
acfef60245
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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); с системой ничего не делает.
|
||||
|
||||
|
|
|
|||
|
|
@ -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 с конкретными весами."
|
||||
}
|
||||
|
|
@ -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): лёгкая неделя.
|
||||
|
||||
> Перед стартом — контрольное АД и по возможности консультация кардиолога: книга писалась как замена врачебному контролю при его отсутствии, а не вместо него.
|
||||
Loading…
Reference in New Issue