{
    "project": "pullups_daily_plan_fact",
    "instruction_for_next_plan": "Проанализируй подтягивания отдельно от разбавляющих упражнений. Построй план на следующий день с учетом восстановления, чередования хватов, Garmin нагрузки и поддержки push\/core: отжимания, пресс, умеренные брусья без отказа.",
    "plan": {
        "id": 8,
        "date": "2026-05-26",
        "title": "90 подтягиваний · авто",
        "target_total": 170,
        "fact_total": 70,
        "completion_percent": 41.2,
        "pullup_target_total": 90,
        "pullup_fact_total": 40,
        "pullup_completion_percent": 44.4
    },
    "exercise_stats": {
        "pullup": {
            "label": "Подтягивания",
            "target": 90,
            "fact": 40,
            "rows": 10,
            "done": 4,
            "partial": 0,
            "missed": 6,
            "hard": 0,
            "easy": 0
        },
        "pushup": {
            "label": "Отжимания",
            "target": 40,
            "fact": 30,
            "rows": 2,
            "done": 1,
            "partial": 0,
            "missed": 1,
            "hard": 0,
            "easy": 0
        },
        "dips": {
            "label": "Брусья",
            "target": 16,
            "fact": 0,
            "rows": 1,
            "done": 0,
            "partial": 0,
            "missed": 1,
            "hard": 0,
            "easy": 0
        },
        "abs": {
            "label": "Пресс",
            "target": 24,
            "fact": 0,
            "rows": 1,
            "done": 0,
            "partial": 0,
            "missed": 1,
            "hard": 0,
            "easy": 0
        }
    },
    "grip_stats": {
        "Нейтральный": {
            "fact": 15,
            "target": 43,
            "rows": 9,
            "hard": 0,
            "missed": 6,
            "partial": 0,
            "done": 3,
            "easy": 0
        },
        "Средний": {
            "fact": 12,
            "target": 17,
            "rows": 4,
            "hard": 0,
            "missed": 1,
            "partial": 0,
            "done": 3,
            "easy": 0
        },
        "Узкий": {
            "fact": 5,
            "target": 15,
            "rows": 3,
            "hard": 0,
            "missed": 2,
            "partial": 0,
            "done": 1,
            "easy": 0
        },
        "Обратный": {
            "fact": 5,
            "target": 10,
            "rows": 2,
            "hard": 0,
            "missed": 1,
            "partial": 0,
            "done": 1,
            "easy": 0
        },
        "Широкий": {
            "fact": 3,
            "target": 5,
            "rows": 2,
            "hard": 0,
            "missed": 1,
            "partial": 0,
            "done": 1,
            "easy": 0
        }
    },
    "time_stats": [
        {
            "time": "09:00",
            "target": 10,
            "fact": 10,
            "percent": 100,
            "status": "done",
            "comment": ""
        },
        {
            "time": "10:00",
            "target": 10,
            "fact": 10,
            "percent": 100,
            "status": "done",
            "comment": ""
        },
        {
            "time": "11:00",
            "target": 10,
            "fact": 10,
            "percent": 100,
            "status": "done",
            "comment": ""
        },
        {
            "time": "12:00",
            "target": 10,
            "fact": 10,
            "percent": 100,
            "status": "done",
            "comment": ""
        },
        {
            "time": "13:00",
            "target": 10,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "14:00",
            "target": 10,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "15:00",
            "target": 10,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "16:00",
            "target": 10,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "17:00",
            "target": 5,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "18:00",
            "target": 5,
            "fact": 0,
            "percent": 0,
            "status": "missed",
            "comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        }
    ],
    "local_recommendations": [
        "Сегодня сильная просадка. Завтра лучше оставить цель 100 только при нормальном самочувствии; широкий хват снизить и добавить больше нейтрального.",
        "Широкий хват просел. Завтра делать его только в начале дня и малыми блоками 2–3 повтора.",
        "После 15:00 есть просадка. Завтра перенести сложные подходы до 14:00, вечером оставить узкий\/нейтральный.",
        "Есть упоминания боли\/суставов. Не работать через суставную боль; заменить часть объёма нейтральным хватом."
    ],
    "running_day": {
        "date": "2026-05-26",
        "runs_count": 0,
        "distance_km": 0,
        "duration_sec": 0,
        "moving_sec": 0,
        "avg_pace_sec_km": 0,
        "avg_pace": "—",
        "avg_hr": 0,
        "max_training_effect": 0,
        "recommendations": [
            "Бега за этот день нет. Если руки ватные после подтягиваний — можно сделать лёгкую прогулку или восстановительный бег 15–25 минут."
        ]
    },
    "rows": [
        {
            "time": "09:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Мягкий старт",
            "plan_set1": "5 нейтральным",
            "plan_set2": "5 средним",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 5,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "5",
            "fact_set2": "5",
            "fact_reps": 10,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 5,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "done",
            "fact_comment": ""
        },
        {
            "time": "10:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "База",
            "plan_set1": "5 узким",
            "plan_set2": "5 нейтральным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 5,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "5",
            "fact_set2": "5",
            "fact_reps": 10,
            "fact_by_grip": {
                "Узкий": 5,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "done",
            "fact_comment": ""
        },
        {
            "time": "10:30",
            "exercise_type": "pushup",
            "exercise_label": "Отжимания",
            "grip_type": "Отжимания",
            "plan_set1": "15 отжиманий",
            "plan_set2": "15 отжиманий",
            "target_reps": 30,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 30
            },
            "fact_set1": "15",
            "fact_set2": "15",
            "fact_reps": 30,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 30
            },
            "status": "done",
            "fact_comment": ""
        },
        {
            "time": "11:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Сложный блок",
            "plan_set1": "3 широким + 2 средним",
            "plan_set2": "5 нейтральным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 2,
                "Широкий": 3,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "5",
            "fact_set2": "5",
            "fact_reps": 10,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 2,
                "Широкий": 3,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "done",
            "fact_comment": ""
        },
        {
            "time": "12:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "База",
            "plan_set1": "5 средним",
            "plan_set2": "5 обратным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 5,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 5,
                "Другое": 0
            },
            "fact_set1": "5",
            "fact_set2": "5",
            "fact_reps": 10,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 5,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 5,
                "Другое": 0
            },
            "status": "done",
            "fact_comment": ""
        },
        {
            "time": "12:30",
            "exercise_type": "abs",
            "exercise_label": "Пресс",
            "grip_type": "Пресс",
            "plan_set1": "12 подъёмов ног \/ скручиваний",
            "plan_set2": "12 подъёмов ног \/ скручиваний",
            "target_reps": 24,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 24
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "13:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "База",
            "plan_set1": "5 узким",
            "plan_set2": "5 нейтральным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 5,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "14:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Контрольный блок",
            "plan_set1": "2 широким + 3 нейтральным",
            "plan_set2": "5 обратным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 2,
                "Нейтральный": 3,
                "Обратный": 5,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "14:30",
            "exercise_type": "dips",
            "exercise_label": "Брусья",
            "grip_type": "Брусья",
            "plan_set1": "8 брусьев",
            "plan_set2": "8 брусьев",
            "target_reps": 16,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 16
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "15:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Вечерняя разгрузка",
            "plan_set1": "5 нейтральным",
            "plan_set2": "5 узким",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 5,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "15:30",
            "exercise_type": "pushup",
            "exercise_label": "Отжимания",
            "grip_type": "Recovery push",
            "plan_set1": "10 лёгких отжиманий",
            "plan_set2": "",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 10
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "16:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Вечерняя разгрузка",
            "plan_set1": "5 средним",
            "plan_set2": "5 нейтральным",
            "target_reps": 10,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 5,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "17:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Финишная база",
            "plan_set1": "5 нейтральным",
            "plan_set2": "",
            "target_reps": 5,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        },
        {
            "time": "18:00",
            "exercise_type": "pullup",
            "exercise_label": "Подтягивания",
            "grip_type": "Финиш",
            "plan_set1": "5 нейтральным",
            "plan_set2": "",
            "target_reps": 5,
            "target_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 5,
                "Обратный": 0,
                "Другое": 0
            },
            "fact_set1": "",
            "fact_set2": "",
            "fact_reps": 0,
            "fact_by_grip": {
                "Узкий": 0,
                "Средний": 0,
                "Широкий": 0,
                "Нейтральный": 0,
                "Обратный": 0,
                "Другое": 0
            },
            "status": "missed",
            "fact_comment": "не успел, планы поменялись по работе, и болит сгиб локтя на правой руке"
        }
    ]
}