>_ rehablogger
Система работает
← Все сессии
СЕССИЯ УСТРОЙСТВА

rehabapp_2026-08-26_14-15-08

Подключение…
Rehab Logger console · история загружается порциями по 250 записей
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/rehabilitation/calendar/day?date=2026-08-26
INFO [console] [DIO] statusCode: 200
INFO [console] [DIO] statusMessage: OK
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Wed, 26 Aug 2026 11:15:47 GMT
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-08-26T11:15:47.765555Z","request_id":"7db0335c-d3d0-45d5-a361-369a511ef4b2","version":"v1"},"data":{"rehabilitation_day_id":2769,"phase_id":331,"diagnosis_rehab":"Пластика передней крестообразной связки (ПКС)","start_rehab":"2026-08-21 00:00:00","end_rehab":"2026-09-10 00:00:00","name_rehab_phase":"Защита и восстановление","status":["none"],"recommendations_count":3,"date":"2026-08-26","training":[{"mode":"correction_unit","status":"not_done","progress":null,"unit_id":1000,"time":"5 - 10 мин","count_questions":null,"status_questions":false,"workout_id":null}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-26T11:15:47.765555Z, request_id: 7db0335c-d3d0-45d5-a361-369a511ef4b2, version: v1}, data: {rehabilitation_day_id: 2769, phase_id: 331, diagnosis_rehab: Пластика передней крестообразной связки (ПКС), start_rehab: 2026-08-21 00:00:00, end_rehab: 2026-09-10 00:00:00, name_rehab_phase: Защита и восстановление, status: [none], recommendations_count: 3, date: 2026-08-26, training: [{mode: correction_unit, status: not_done, progress: null, unit_id: 1000, time: 5 - 10 мин, count_questions: null, status_questions: false, workout_id: null}]}}
INFO [console] shrinkOffset: 19.710416666666674, progress: 0.07902228904161897
INFO [console] shrinkOffset: 30.377083333333303, progress: 0.12178670294005334
INFO [console] shrinkOffset: 40.55451388888889, progress: 0.16258968913071148
INFO [console] shrinkOffset: 50.75416666666672, progress: 0.20348176785032476
INFO [console] shrinkOffset: 70.37604166666677, progress: 0.28214907884688856
INFO [console] shrinkOffset: 77.88680555555572, progress: 0.3122609615629382
INFO [console] shrinkOffset: 90.55312500000014, progress: 0.36304231099656414
INFO [console] shrinkOffset: 99.1305555555557, progress: 0.397430635102457
INFO [console] shrinkOffset: 102.26388888888903, progress: 0.40999268168512215
INFO [console] shrinkOffset: 113.21909722222244, progress: 0.453913906389208
INFO [console] shrinkOffset: 121.50798611111134, progress: 0.4871454196894498
INFO [console] shrinkOffset: 125.21875000000023, progress: 0.5020224799541819
INFO [console] shrinkOffset: 132.8409722222225, progress: 0.5325812173857718
INFO [console] shrinkOffset: 139.01840277777808, progress: 0.5573475483645169
INFO [console] shrinkOffset: 144.55173611111138, progress: 0.5795315880743297
INFO [console] shrinkOffset: 147.5072916666669, progress: 0.5913808944253541
INFO [console] shrinkOffset: 151.68472222222243, progress: 0.6081288977981426
INFO [console] shrinkOffset: 154.640277777778, progress: 0.6199782041491673
INFO [console] shrinkOffset: 155.59583333333353, progress: 0.6238091828942353
INFO [console] shrinkOffset: 156.9291666666669, progress: 0.6291547346315397
INFO [console] shrinkOffset: 157.7736111111114, progress: 0.6325402507318326
INFO [console] shrinkOffset: 158.1513888888892, progress: 0.634054823724069
INFO [console] shrinkOffset: 158.44027777777808, progress: 0.6352130266004848
INFO [console] shrinkOffset: 158.55138888888916, progress: 0.6356584892452601
INFO [console] shrinkOffset: 158.72916666666697, progress: 0.6363712294769008
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] method: GET
INFO [console] [DIO] responseType: ResponseType.json
INFO [console] [DIO] followRedirects: true
INFO [console] [DIO] persistentConnection: true
INFO [console] [DIO] connectTimeout: 0:00:10.000000
INFO [console] [DIO] sendTimeout: null
INFO [console] [DIO] receiveTimeout: 0:00:10.000000
INFO [console] [DIO] transformTimeout: null
INFO [console] [DIO] receiveDataWhenStatusError: true
INFO [console] [DIO] extra: {}
INFO [console] [DIO] headers:
INFO [console] [DIO] Authorization: Bearer 687|9DgfYWGl8Vu3I2nnJoHMjQ02txk5m5wfR85Pep8V6cd8daf3
INFO [console] [DIO] data:
INFO [console] [DIO] null
INFO [console] [DIO]
INFO [console] [DIO] *** Response ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] statusCode: 200
INFO [console] [DIO] statusMessage: OK
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Wed, 26 Aug 2026 11:15:50 GMT
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-08-26T11:15:50.974696Z","request_id":"6af56139-56d7-4b1d-9710-7d1864f97808","version":"v1"},"data":{"unit_id":1000,"workout_duration_start":5,"workout_duration_end":10,"body_side":"left","exercises":[{"id":85,"sequence_number":1,"name":"Тренировка икроножных мышц стоя","image":"https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png","by_body_side":"not_by_side","execution_order_type":null,"approaches_count":2,"execution_count":7,"execution_time":null,"instruction":{"exercise_name":"Тренировка икроножных мышц стоя","video":"https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov","inventory":"Опора (стул, подоконник, стена)","warning":"Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги между стопами\nСледите, чтобы спина была прямая\nНе уводите таз вперед/назад\nКолени держите выпрямленными","general_description":"В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени.","steps":[{"exercise_id":85,"sequence_number":1,"step_text":"Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере"},{"exercise_id":85,"sequence_number":2,"step_text":"Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу"},{"exercise_id":85,"sequence_number":3,"step_text":"Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела"},{"exercise_id":85,"sequence_number":4,"step_text":"Спина прямая, живот слегка подтянут, взгляд направлен вперёд"},{"exercise_id":85,"sequence_number":5,"step_text":"Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп"},{"exercise_id":85,"sequence_number":6,"step_text":"Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке"},{"exercise_id":85,"sequence_number":7,"step_text":"Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение"},{"exercise_id":85,"sequence_number":8,"step_text":"Выполните поднятие на носки необходимое количество раз"}]}},{"id":47,"sequence_number":2,"name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":null,"execution_time":20,"instruction":{"exercise_name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov","inventory":"Возвышенность (стул и т.п.)","warning":"Не допускайте разворота/заваливания поднятой ноги","general_description":"Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; \nстопа и колено поднятой ноги не должны \"заваливаться\" наружу (отсутствие ротации); \nнаклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; \nдыхание свободное, без задержек; \nощущение растяжения должно быть комфортным, без острой боли.","steps":[{"exercise_id":47,"sequence_number":1,"step_text":"Встаньте боком растягиваемой ноги к камере"},{"exercise_id":47,"sequence_number":2,"step_text":"Поставьте рабочую ногу на возвышенность, другая нога опорная"},{"exercise_id":47,"sequence_number":3,"step_text":"Держите спину прямой"},{"exercise_id":47,"sequence_number":4,"step_text":"Стопа поднятой ноги смотрит на себя"},{"exercise_id":47,"sequence_number":5,"step_text":"Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной"},{"exercise_id":47,"sequence_number":6,"step_text":"В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время"}]}}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-26T11:15:50.974696Z, request_id: 6af56139-56d7-4b1d-9710-7d1864f97808, version: v1}, data: {unit_id: 1000, workout_duration_start: 5, workout_duration_end: 10, body_side: left, exercises: [{id: 85, sequence_number: 1, name: Тренировка икроножных мышц стоя, image: https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png, by_body_side: not_by_side, execution_order_type: null, approaches_count: 2, execution_count: 7, execution_time: null, instruction: {exercise_name: Тренировка икроножных мышц стоя, video: https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov, inventory: Опора (стул, подоконник, стена), warning: Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги между стопами Следи
INFO [console] те, чтобы спина была прямая Не уводите таз вперед/назад Колени держите выпрямленными, general_description: В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени., steps: [{exercise_id: 85, sequence_number: 1, step_text: Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере}, {exercise_id: 85, sequence_number: 2, step_text: Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу}, {exercise_id: 85, sequence_number: 3, step_text: Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела}, {exercise_id: 85, sequence_number: 4, step_text: Спина прямая, живот слегка подтянут, взгляд направлен вперёд}, {exercise_id: 85, sequence_number:
INFO [console] 5, step_text: Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп}, {exercise_id: 85, sequence_number: 6, step_text: Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке}, {exercise_id: 85, sequence_number: 7, step_text: Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение}, {exercise_id: 85, sequence_number: 8, step_text: Выполните поднятие на носки необходимое количество раз}]}}, {id: 47, sequence_number: 2, name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, image: https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: null, execution_time: 20, instruction: {exercise_name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, video: https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2
INFO [console] W892Q.mov, inventory: Возвышенность (стул и т.п.), warning: Не допускайте разворота/заваливания поднятой ноги, general_description: Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; стопа и колено поднятой ноги не должны "заваливаться" наружу (отсутствие ротации); наклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; дыхание свободное, без задержек; ощущение растяжения должно быть комфортным, без острой боли., steps: [{exercise_id: 47, sequence_number: 1, step_text: Встаньте боком растягиваемой ноги к камере}, {exercise_id: 47, sequence_number: 2, step_text: Поставьте рабочую ногу на возвышенность, другая нога опорная}, {exercise_id: 47, sequence_number: 3, step_text: Держите спину прямой}, {exercise_id: 47, sequence_num
INFO [console] ber: 4, step_text: Стопа поднятой ноги смотрит на себя}, {exercise_id: 47, sequence_number: 5, step_text: Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной}, {exercise_id: 47, sequence_number: 6, step_text: В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время}]}}]}}
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] method: GET
INFO [console] [DIO] responseType: ResponseType.json
INFO [console] [DIO] followRedirects: true
INFO [console] [DIO] persistentConnection: true
INFO [console] [DIO] connectTimeout: 0:00:10.000000
INFO [console] [DIO] sendTimeout: null
INFO [console] [DIO] receiveTimeout: 0:00:10.000000
INFO [console] [DIO] transformTimeout: null
INFO [console] [DIO] receiveDataWhenStatusError: true
INFO [console] [DIO] extra: {}
INFO [console] [DIO] headers:
INFO [console] [DIO] Authorization: Bearer 687|9DgfYWGl8Vu3I2nnJoHMjQ02txk5m5wfR85Pep8V6cd8daf3
INFO [console] [DIO] data:
INFO [console] [DIO] null
INFO [console] [DIO]
INFO [console] [DIO] *** Response ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] statusCode: 200
INFO [console] [DIO] statusMessage: OK
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Wed, 26 Aug 2026 11:15:55 GMT
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-08-26T11:15:55.578404Z","request_id":"5a33328b-9ea5-415a-be8c-60b29e0e3e86","version":"v1"},"data":{"unit_id":1000,"workout_duration_start":5,"workout_duration_end":10,"body_side":"left","exercises":[{"id":85,"sequence_number":1,"is_monitored":true,"name":"Тренировка икроножных мышц стоя","image":"https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png","by_body_side":"not_by_side","execution_order_type":null,"approaches_count":2,"execution_count":7,"execution_time":null,"instruction":{"exercise_name":"Тренировка икроножных мышц стоя","video":"https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov","inventory":"Опора (стул, подоконник, стена)","warning":"Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги между стопами\nСледите, чтобы спина была прямая\nНе уводите таз вперед/назад\nКолени держите выпрямленными","general_description":"В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени.","steps":[{"exercise_id":85,"sequence_number":1,"step_text":"Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере"},{"exercise_id":85,"sequence_number":2,"step_text":"Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу"},{"exercise_id":85,"sequence_number":3,"step_text":"Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела"},{"exercise_id":85,"sequence_number":4,"step_text":"Спина прямая, живот слегка подтянут, взгляд направлен вперёд"},{"exercise_id":85,"sequence_number":5,"step_text":"Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп"},{"exercise_id":85,"sequence_number":6,"step_text":"Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке"},{"exercise_id":85,"sequence_number":7,"step_text":"Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение"},{"exercise_id":85,"sequence_number":8,"step_text":"Выполните поднятие на носки необходимое количество раз"}]},"camera_orientation":"vertical","neural_network_type":"mediapipe","base_main_command":"Поднимайтесь и опускайтесь на носках","left_main_command":null,"calibration_parameters":[{"id":107,"name":" Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":148,"component_side":"left","segment_type":null,"parts":[{"id":397,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":398,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":399,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":159,"command_side":"left","position_number":1,"position_message":"Примите исходную позицию. Встаньте боком оперированной ноги к камере, держите ноги выпрямленными","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите рабочее колено выпрямленным"}]},{"id":108,"name":"Калибровка угла в тазе","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":150,"component_side":"left","segment_type":null,"parts":[{"id":403,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":404,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":405,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":161,"command_side":"left","position_number":1,"position_message":"Теперь выпрямите спину, она должна быть продолжением ног. Не заваливайте ее в стороны","fixation_message":"Фиксируем угол в тазу, оставайтесь в нужном положении","error_message":"Держите спину прямой"}]},{"id":109,"name":"Калибровка амплитуды рабочего угла","sequence_number":3,"calibration_parameter_type":"angle_amplitude","fixation_type":"alternate","fixation_order":"min_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":152,"component_side":"left","segment_type":null,"parts":[{"id":409,"sequence_number":1,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":410,"sequence_number":2,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"},{"id":411,"sequence_number":3,"body_point":{"id":32,"mediapipe_index":31,"movenet_index":null},"line_type":null,"part_type":"point"}]}],"commands":[{"id":163,"command_side":"left","position_number":1,"position_message":"Стойте боком оперированной ноги к камере, стопы на полу","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайтесь на необходимую высоту"},{"id":165,"command_side":"left","position_number":2,"position_message":"Теперь поднимитесь на носки до максимальной комфортной вам высоты","fixation_message":"Фиксируем значение, не опускайтесь","error_message":"Поднимайтесь на необходимую высоту"}]}]},{"id":47,"sequence_number":2,"is_monitored":true,"name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":null,"execution_time":20,"instruction":{"exercise_name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov","inventory":"Возвышенность (стул и т.п.)","warning":"Не допускайте разворота/заваливания поднятой ноги","general_description":"Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; \nстопа и колено поднятой ноги не должны \"заваливаться\" наружу (отсутствие ротации); \nнаклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; \nдыхание свободное, без задержек; \nощущение растяжения должно быть комфортным, без острой боли.","steps":[{"exercise_id":47,"sequence_number":1,"step_text":"Встаньте боком растягиваемой ноги к камере"},{"exercise_id":47,"sequence_number":2,"step_text":"Поставьте рабочую ногу на возвышенность, другая нога опорная"},{"exercise_id":47,"sequence_number":3,"step_text":"Держите спину прямой"},{"exercise_id":47,"sequence_number":4,"step_text":"Стопа поднятой ноги смотрит на себя"},{"exercise_id":47,"sequence_number":5,"step_text":"Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной"},{"exercise_id":47,"sequence_number":6,"step_text":"В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время"}]},"camera_orientation":"vertical","neural_network_type":"mediapipe","base_main_command":"Наклонитесь к правой ноге","left_main_command":null,"calibration_parameters":[{"id":64,"name":"Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":100,"component_side":"left","segment_type":null,"parts":[{"id":259,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":260,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":261,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":121,"command_side":"left","position_number":1,"position_message":"Встаньте левым боком к камере и положите левую ногу на возвышенность, колено прямое","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колено выпрямленным"}]},{"id":106,"name":"Калибровка рабочего угла","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"min_value","fixation_order":null,"deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":146,"component_side":"left","segment_type":null,"parts":[{"id":391,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":392,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":393,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":157,"command_side":"left","position_number":1,"position_message":"Наклонитесь к левой ноге до ощущения комфортного растяжения","fixation_message":"Фиксируем угол наклона, оставайтесь в нужном положении","error_message":"Опускайте корпус ниже"}]}]}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-26T11:15:55.578404Z, request_id: 5a33328b-9ea5-415a-be8c-60b29e0e3e86, version: v1}, data: {unit_id: 1000, workout_duration_start: 5, workout_duration_end: 10, body_side: left, exercises: [{id: 85, sequence_number: 1, is_monitored: true, name: Тренировка икроножных мышц стоя, image: https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png, by_body_side: not_by_side, execution_order_type: null, approaches_count: 2, execution_count: 7, execution_time: null, instruction: {exercise_name: Тренировка икроножных мышц стоя, video: https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov, inventory: Опора (стул, подоконник, стена), warning: Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги
INFO [console] между стопами Следите, чтобы спина была прямая Не уводите таз вперед/назад Колени держите выпрямленными, general_description: В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени., steps: [{exercise_id: 85, sequence_number: 1, step_text: Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере}, {exercise_id: 85, sequence_number: 2, step_text: Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу}, {exercise_id: 85, sequence_number: 3, step_text: Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела}, {exercise_id: 85, sequence_number: 4, step_text: Спина прямая, живот слегка подтянут, взгляд направлен вперёд}, {exercise_id: 8
INFO [console] 5, sequence_number: 5, step_text: Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп}, {exercise_id: 85, sequence_number: 6, step_text: Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке}, {exercise_id: 85, sequence_number: 7, step_text: Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение}, {exercise_id: 85, sequence_number: 8, step_text: Выполните поднятие на носки необходимое количество раз}]}, camera_orientation: vertical, neural_network_type: mediapipe, base_main_command: Поднимайтесь и опускайтесь на носках, left_main_command: null, calibration_parameters: [{id: 107, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 148, componen
INFO [console] t_side: left, segment_type: null, parts: [{id: 397, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 398, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 399, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 159, command_side: left, position_number: 1, position_message: Примите исходную позицию. Встаньте боком оперированной ноги к камере, держите ноги выпрямленными, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите рабочее колено выпрямленным}]}, {id: 108, name: Калибровка угла в тазе, sequence_number: 2, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_moni
INFO [console] tored: false, components: [{id: 150, component_side: left, segment_type: null, parts: [{id: 403, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, line_type: null, part_type: point}, {id: 404, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 405, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 161, command_side: left, position_number: 1, position_message: Теперь выпрямите спину, она должна быть продолжением ног. Не заваливайте ее в стороны, fixation_message: Фиксируем угол в тазу, оставайтесь в нужном положении, error_message: Держите спину прямой}]}, {id: 109, name: Калибровка амплитуды рабочего угла, sequence_number: 3, calibration_parameter_type: angle_amplitude, fixation_type: alternate, fixation_order: min_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibration
INFO [console] s: false, has_division_by_side: true, is_monitored: true, components: [{id: 152, component_side: left, segment_type: null, parts: [{id: 409, sequence_number: 1, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 410, sequence_number: 2, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}, {id: 411, sequence_number: 3, body_point: {id: 32, mediapipe_index: 31, movenet_index: null}, line_type: null, part_type: point}]}], commands: [{id: 163, command_side: left, position_number: 1, position_message: Стойте боком оперированной ноги к камере, стопы на полу, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Поднимайтесь на необходимую высоту}, {id: 165, command_side: left, position_number: 2, position_message: Теперь поднимитесь на носки до максимальной комфортной вам высоты, fixation_message: Фиксируем значение, не опускайтесь, error_message: Поднимайтесь на не
INFO [console] обходимую высоту}]}]}, {id: 47, sequence_number: 2, is_monitored: true, name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, image: https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: null, execution_time: 20, instruction: {exercise_name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, video: https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov, inventory: Возвышенность (стул и т.п.), warning: Не допускайте разворота/заваливания поднятой ноги, general_description: Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; стопа и колено поднятой ноги не должны
INFO [console] "заваливаться" наружу (отсутствие ротации); наклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; дыхание свободное, без задержек; ощущение растяжения должно быть комфортным, без острой боли., steps: [{exercise_id: 47, sequence_number: 1, step_text: Встаньте боком растягиваемой ноги к камере}, {exercise_id: 47, sequence_number: 2, step_text: Поставьте рабочую ногу на возвышенность, другая нога опорная}, {exercise_id: 47, sequence_number: 3, step_text: Держите спину прямой}, {exercise_id: 47, sequence_number: 4, step_text: Стопа поднятой ноги смотрит на себя}, {exercise_id: 47, sequence_number: 5, step_text: Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной}, {exercise_id: 47, sequence_number: 6, step_text: В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время}]}, camera_orientation:
INFO [console] vertical, neural_network_type: mediapipe, base_main_command: Наклонитесь к правой ноге, left_main_command: null, calibration_parameters: [{id: 64, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 100, component_side: left, segment_type: null, parts: [{id: 259, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 260, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 261, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 121, command_side: left, position_number: 1, position_message: Встаньте левым боком к камере и положите лев
INFO [console] ую ногу на возвышенность, колено прямое, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колено выпрямленным}]}, {id: 106, name: Калибровка рабочего угла, sequence_number: 2, calibration_parameter_type: angle, fixation_type: min_value, fixation_order: null, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 146, component_side: left, segment_type: null, parts: [{id: 391, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, line_type: null, part_type: point}, {id: 392, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 393, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 157, command_side: left, position_number: 1, position_message: Наклонитесь к левой н
INFO [console] оге до ощущения комфортного растяжения, fixation_message: Фиксируем угол наклона, оставайтесь в нужном положении, error_message: Опускайте корпус ниже}]}]}]}}
FATAL [zone] Unhandled asynchronous error
Bad state: No element
#0      ListBase.firstWhere (dart:collection/list.dart:132)
#1      ProgressEngine.getCurrentRulesCalibrations (package:testapp/features/training/domain/runtime/engine/progress_engine.dart:230)
#2      ProgressEngine.currentExerciseBodyPoint (package:testapp/features/training/domain/runtime/engine/progress_engine.dart:109)
#3      BodyPointPhase.startSession (package:testapp/features/training/domain/runtime/phase/body_point_phase.dart:52)
#4      PhaseBaseTraining.start (package:testapp/features/training/domain/runtime/phase/phase_base_training.dart:30)
#5      BodyPointPhase.start (package:testapp/features/training/domain/runtime/phase/body_point_phase.dart:30)
#6      RuntimeTrainingImpl._changePhase (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:62)
#7      RuntimeTrainingImpl.onBodyPoints (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:114)
#8      RuntimeTrainingImpl.onStartExercise (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:92)
#9      new TrainingCoordinatorBloc.<anonymous closure> (package:testapp/features/training/presentation/bloc/conducting_training/%20training_coordinator/training_coordinator_bloc.dart:34)
#10     Bloc.on.<anonymous closure>.handleEvent (package:bloc/src/bloc.dart:226)
#11     Bloc.on.<anonymous closure> (package:bloc/src/bloc.dart:237)
#12     _MapStream._handleData (dart:async/stream_pipe.dart:247)
#13     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#14     _rootRunUnary (dart:async/zone_root.dart:48)
#15     _CustomZone.runUnary (dart:async/zone.dart:816)
#16     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#17     CastStreamSubscription._onData (dart:_internal/async_cast.dart:95)
#18     _rootRunUnary (dart:async/zone_root.dart:48)
#19     _CustomZone.runUnary (dart:async/zone.dart:816)
#20     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#21     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#22     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312)
#23     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:154)
#24     _WhereStream._handleData (dart:async/stream_pipe.dart:229)
#25     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#26     _rootRunUnary (dart:async/zone_root.dart:56)
#27     _CustomZone.runUnary (dart:async/zone.dart:816)
#28     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#29     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#30     _DelayedData.perform (dart:async/stream_impl.dart:573)
#31     _PendingEvents.handleNext (dart:async/stream_impl.dart:678)
#32     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:649)
#33     _microtaskLoop (dart:async/schedule_microtask.dart:40)
#34     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49)
INFO [console] PoseEstimator: worker isolate up (gpu=true, fallback=none, model=pose_landmarks_detector_heavy.tflite (27055 KB), cores=cores=[6, 7]@2200MHz ok, on cpu6)
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_LM: [0 frame=(242,25)] [11 frame=(326,113)] [12 frame=(171,124)] [23 frame=(299,288)] [24 frame=(213,296)] frameSize=480 x 720 screenSize=384x806
INFO [console] POSE_MAP: [0 norm=(0.494,0.035)] [11 norm=(0.249,0.156)] [12 norm=(0.702,0.172)] [23 norm=(0.329,0.401)] [24 norm=(0.580,0.411)]
INFO [console] POSE_METRICS: received=35(34.9fps) processed=11(11.0fps) replaced=22(22.0fps) buildMs=1.23 estimatorMs=95.73 (pre=14.5 infer=69.6 det=0.0) totalMs=95.96 actualFps=11.0
INFO [console] POSE_METRICS: received=30(29.3fps) processed=9(8.8fps) replaced=21(20.5fps) buildMs=1.72 estimatorMs=113.05 (pre=70.7 infer=58.7 det=0.0) totalMs=113.84 actualFps=8.8
INFO [console] POSE_METRICS: received=34(30.1fps) processed=10(8.8fps) replaced=24(21.2fps) buildMs=1.56 estimatorMs=112.30 (pre=80.0 infer=68.5 det=0.0) totalMs=112.45 actualFps=8.8
INFO [console] POSE_METRICS: received=31(29.3fps) processed=10(9.4fps) replaced=21(19.8fps) buildMs=1.39 estimatorMs=105.71 (pre=30.4 infer=73.3 det=0.0) totalMs=105.89 actualFps=9.4
INFO [console] POSE_METRICS: received=32(30.5fps) processed=9(8.6fps) replaced=23(21.9fps) buildMs=1.77 estimatorMs=116.46 (pre=57.8 infer=61.9 det=0.0) totalMs=116.59 actualFps=8.6
INFO [console] POSE_METRICS: received=30(29.0fps) processed=10(9.7fps) replaced=20(19.3fps) buildMs=1.25 estimatorMs=103.15 (pre=30.4 infer=66.7 det=0.0) totalMs=103.34 actualFps=9.7
INFO [console] POSE_METRICS: received=32(29.9fps) processed=10(9.3fps) replaced=22(20.5fps) buildMs=1.36 estimatorMs=106.93 (pre=23.3 infer=64.2 det=0.0) totalMs=107.11 actualFps=9.3
INFO [console] POSE_METRICS: received=31(30.3fps) processed=9(8.8fps) replaced=22(21.5fps) buildMs=1.44 estimatorMs=113.44 (pre=59.7 infer=56.2 det=0.0) totalMs=113.65 actualFps=8.8
INFO [console] POSE_METRICS: received=30(30.0fps) processed=9(9.0fps) replaced=21(21.0fps) buildMs=1.27 estimatorMs=110.88 (pre=19.1 infer=64.4 det=0.0) totalMs=111.07 actualFps=9.0
INFO [console] POSE_METRICS: received=30(29.7fps) processed=10(9.9fps) replaced=20(19.8fps) buildMs=1.29 estimatorMs=100.89 (pre=15.5 infer=62.2 det=0.0) totalMs=101.04 actualFps=9.9
INFO [console] POSE_METRICS: received=32(30.0fps) processed=11(10.3fps) replaced=21(19.7fps) buildMs=1.26 estimatorMs=96.73 (pre=66.7 infer=53.9 det=0.0) totalMs=96.92 actualFps=10.3
INFO [console] POSE_METRICS: received=32(30.2fps) processed=10(9.5fps) replaced=22(20.8fps) buildMs=1.51 estimatorMs=105.51 (pre=80.7 infer=62.1 det=0.0) totalMs=105.77 actualFps=9.5
INFO [console] POSE_METRICS: received=32(29.6fps) processed=10(9.3fps) replaced=22(20.4fps) buildMs=1.61 estimatorMs=107.69 (pre=25.2 infer=63.8 det=0.0) totalMs=107.96 actualFps=9.3
INFO [console] POSE_METRICS: received=32(30.3fps) processed=10(9.5fps) replaced=22(20.8fps) buildMs=1.38 estimatorMs=105.35 (pre=18.7 infer=60.9 det=0.0) totalMs=105.58 actualFps=9.5
INFO [console] POSE_METRICS: received=32(29.8fps) processed=11(10.2fps) replaced=21(19.5fps) buildMs=1.82 estimatorMs=97.45 (pre=19.0 infer=61.6 det=0.0) totalMs=97.75 actualFps=10.2
INFO [console] POSE_METRICS: received=30(29.9fps) processed=10(10.0fps) replaced=20(19.9fps) buildMs=1.22 estimatorMs=100.28 (pre=25.3 infer=61.3 det=0.0) totalMs=100.49 actualFps=10.0
INFO [console] POSE_METRICS: received=32(30.1fps) processed=10(9.4fps) replaced=22(20.7fps) buildMs=1.66 estimatorMs=105.90 (pre=30.4 infer=59.8 det=0.0) totalMs=106.13 actualFps=9.4
INFO [console] POSE_METRICS: received=32(29.4fps) processed=11(10.1fps) replaced=21(19.3fps) buildMs=1.08 estimatorMs=98.74 (pre=23.7 infer=70.3 det=0.0) totalMs=98.95 actualFps=10.1
INFO [console] POSE_METRICS: received=32(30.5fps) processed=10(9.5fps) replaced=22(21.0fps) buildMs=1.16 estimatorMs=104.59 (pre=70.1 infer=56.6 det=0.0) totalMs=104.81 actualFps=9.5
INFO [console] POSE_METRICS: received=32(29.9fps) processed=11(10.3fps) replaced=21(19.6fps) buildMs=1.21 estimatorMs=96.85 (pre=27.4 infer=62.4 det=0.0) totalMs=97.08 actualFps=10.3
INFO [console] POSE_METRICS: received=30(29.8fps) processed=10(9.9fps) replaced=20(19.9fps) buildMs=1.23 estimatorMs=100.50 (pre=34.0 infer=64.2 det=0.0) totalMs=100.71 actualFps=9.9
INFO [console] POSE_METRICS: received=30(29.2fps) processed=9(8.7fps) replaced=21(20.4fps) buildMs=1.57 estimatorMs=113.91 (pre=71.4 infer=53.5 det=0.0) totalMs=114.27 actualFps=8.7
INFO [console] POSE_METRICS: received=33(31.3fps) processed=10(9.5fps) replaced=23(21.8fps) buildMs=1.54 estimatorMs=105.21 (pre=31.4 infer=62.6 det=0.0) totalMs=105.42 actualFps=9.5
INFO [console] POSE_METRICS: received=32(29.6fps) processed=12(11.1fps) replaced=20(18.5fps) buildMs=1.31 estimatorMs=89.89 (pre=19.0 infer=61.6 det=0.0) totalMs=90.11 actualFps=11.1
INFO [console] POSE_METRICS: received=31(29.5fps) processed=11(10.5fps) replaced=20(19.0fps) buildMs=1.12 estimatorMs=95.22 (pre=29.2 infer=64.4 det=0.0) totalMs=95.42 actualFps=10.5
INFO [console] BODY_POINT_PHASE: timeout — no geometry data in 30s
INFO [console] 🎯 БОДИПОИНТ: Скрытый 30-секундный таймер-убийца успешно обезврежен!
INFO [console] POSE_METRICS: received=33(30.0fps) processed=11(10.0fps) replaced=22(20.0fps) buildMs=1.24 estimatorMs=99.92 (pre=51.6 infer=63.6 det=0.0) totalMs=100.10 actualFps=10.0
INFO [console] POSE_METRICS: received=31(29.8fps) processed=11(10.6fps) replaced=20(19.2fps) buildMs=1.22 estimatorMs=94.19 (pre=18.3 infer=71.6 det=0.0) totalMs=94.34 actualFps=10.6
INFO [console] POSE_METRICS: received=32(29.9fps) processed=10(9.3fps) replaced=22(20.6fps) buildMs=1.62 estimatorMs=106.88 (pre=28.7 infer=64.0 det=0.0) totalMs=107.04 actualFps=9.3
INFO [console] POSE_METRICS: received=31(30.6fps) processed=11(10.9fps) replaced=20(19.7fps) buildMs=1.57 estimatorMs=91.82 (pre=20.6 infer=54.9 det=0.0) totalMs=91.98 actualFps=10.9
INFO [console] POSE_METRICS: received=31(29.2fps) processed=11(10.4fps) replaced=20(18.9fps) buildMs=1.40 estimatorMs=96.14 (pre=16.2 infer=55.7 det=0.0) totalMs=96.34 actualFps=10.4
INFO [console] POSE_METRICS: received=31(29.2fps) processed=10(9.4fps) replaced=21(19.8fps) buildMs=1.50 estimatorMs=106.09 (pre=44.2 infer=54.1 det=0.0) totalMs=106.32 actualFps=9.4
INFO [console] POSE_METRICS: received=30(29.6fps) processed=11(10.9fps) replaced=19(18.8fps) buildMs=1.15 estimatorMs=91.84 (pre=62.0 infer=59.5 det=0.0) totalMs=92.01 actualFps=10.9
INFO [console] POSE_METRICS: received=30(28.3fps) processed=11(10.4fps) replaced=19(17.9fps) buildMs=1.49 estimatorMs=96.09 (pre=40.4 infer=64.8 det=0.0) totalMs=96.30 actualFps=10.4
INFO [console] POSE_METRICS: received=31(30.4fps) processed=10(9.8fps) replaced=21(20.6fps) buildMs=1.19 estimatorMs=101.72 (pre=68.8 infer=57.0 det=0.0) totalMs=101.89 actualFps=9.8
INFO [console] POSE_METRICS: received=30(29.4fps) processed=9(8.8fps) replaced=21(20.6fps) buildMs=1.47 estimatorMs=113.05 (pre=53.3 infer=53.3 det=0.0) totalMs=113.25 actualFps=8.8
INFO [console] POSE_METRICS: received=31(30.3fps) processed=10(9.8fps) replaced=21(20.5fps) buildMs=1.23 estimatorMs=101.91 (pre=29.3 infer=62.0 det=0.0) totalMs=102.23 actualFps=9.8
INFO [console] POSE_METRICS: received=32(29.4fps) processed=10(9.2fps) replaced=22(20.2fps) buildMs=1.42 estimatorMs=108.57 (pre=45.8 infer=53.7 det=0.0) totalMs=108.88 actualFps=9.2
INFO [console] POSE_METRICS: received=31(30.5fps) processed=10(9.9fps) replaced=21(20.7fps) buildMs=1.57 estimatorMs=101.23 (pre=65.9 infer=57.1 det=0.0) totalMs=101.51 actualFps=9.9
INFO [console] POSE_METRICS: received=31(29.5fps) processed=11(10.5fps) replaced=20(19.0fps) buildMs=1.12 estimatorMs=95.23 (pre=76.8 infer=57.0 det=0.0) totalMs=95.48 actualFps=10.5
INFO [console] POSE_METRICS: received=32(29.7fps) processed=10(9.3fps) replaced=22(20.4fps) buildMs=1.31 estimatorMs=107.39 (pre=54.9 infer=52.9 det=0.0) totalMs=107.59 actualFps=9.3
INFO [console] POSE_METRICS: received=32(29.5fps) processed=11(10.1fps) replaced=21(19.3fps) buildMs=1.53 estimatorMs=98.45 (pre=17.9 infer=78.7 det=0.0) totalMs=98.67 actualFps=10.1
INFO [console] POSE_METRICS: received=31(29.4fps) processed=11(10.4fps) replaced=20(19.0fps) buildMs=1.49 estimatorMs=95.68 (pre=14.2 infer=70.0 det=0.0) totalMs=95.93 actualFps=10.4
INFO [console] POSE_METRICS: received=31(29.9fps) processed=11(10.6fps) replaced=20(19.3fps) buildMs=1.83 estimatorMs=93.92 (pre=16.4 infer=52.7 det=102.2) totalMs=94.09 actualFps=10.6
INFO [console] POSE_METRICS: received=31(29.8fps) processed=11(10.6fps) replaced=20(19.2fps) buildMs=1.32 estimatorMs=94.59 (pre=21.8 infer=67.8 det=0.0) totalMs=94.78 actualFps=10.6
FATAL [zone] Unhandled asynchronous error
LateInitializationError: Field '_session@1492167826' has not been initialized.
#0      PhaseBaseTraining.pause (package:testapp/features/training/domain/runtime/phase/phase_base_training.dart)
#1      RuntimeTrainingImpl.onPausePhase (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:66)
#2      new TrainingCoordinatorBloc.<anonymous closure> (package:testapp/features/training/presentation/bloc/conducting_training/%20training_coordinator/training_coordinator_bloc.dart:45)
#3      Bloc.on.<anonymous closure>.handleEvent (package:bloc/src/bloc.dart:226)
#4      Bloc.on.<anonymous closure> (package:bloc/src/bloc.dart:237)
#5      _MapStream._handleData (dart:async/stream_pipe.dart:247)
#6      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#7      _rootRunUnary (dart:async/zone_root.dart:48)
#8      _CustomZone.runUnary (dart:async/zone.dart:816)
#9      _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#10     CastStreamSubscription._onData (dart:_internal/async_cast.dart:95)
#11     _rootRunUnary (dart:async/zone_root.dart:48)
#12     _CustomZone.runUnary (dart:async/zone.dart:816)
#13     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#15     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312)
#16     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:154)
#17     _WhereStream._handleData (dart:async/stream_pipe.dart:229)
#18     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#19     _rootRunUnary (dart:async/zone_root.dart:56)
#20     _CustomZone.runUnary (dart:async/zone.dart:816)
#21     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#22     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#23     _DelayedData.perform (dart:async/stream_impl.dart:573)
#24     _PendingEvents.handleNext (dart:async/stream_impl.dart:678)
#25     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:649)
#26     _microtaskLoop (dart:async/schedule_microtask.dart:40)
#27     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49)
INFO [console] POSE_METRICS: received=31(30.4fps) processed=12(11.8fps) replaced=19(18.6fps) buildMs=1.82 estimatorMs=84.96 (pre=18.8 infer=64.1 det=80.1) totalMs=85.03 actualFps=11.8
INFO [console] ✅ AudioPlayerService успешно закрыт
INFO [console] ✅ VideoPlayerService успешно уничтожен
INFO [console] ✅ Стрим GeometryBus успешно затушен
INFO [console] ✅ Стрим MediaBus успешно затушен
INFO [console] ✅ Стрим CoordinatorEffectBus успешно затушен
INFO [console] ✅ AudioPlayerService успешно закрыт
INFO [console] ✅ VideoPlayerService успешно уничтожен
INFO [console] ✅ Стрим GeometryBus успешно затушен
INFO [console] ✅ Стрим MediaBus успешно затушен
INFO [console] ✅ Стрим CoordinatorEffectBus успешно затушен
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] method: GET
INFO [console] [DIO] responseType: ResponseType.json
INFO [console] [DIO] followRedirects: true
INFO [console] [DIO] persistentConnection: true
INFO [console] [DIO] connectTimeout: 0:00:10.000000
INFO [console] [DIO] sendTimeout: null
INFO [console] [DIO] receiveTimeout: 0:00:10.000000
INFO [console] [DIO] transformTimeout: null
INFO [console] [DIO] receiveDataWhenStatusError: true
INFO [console] [DIO] extra: {}
INFO [console] [DIO] headers:
INFO [console] [DIO] Authorization: Bearer 687|9DgfYWGl8Vu3I2nnJoHMjQ02txk5m5wfR85Pep8V6cd8daf3
INFO [console] [DIO] data:
INFO [console] [DIO] null
INFO [console] [DIO]
INFO [console] [DIO] *** Response ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/detailed-exercises?unit_id=1000&rehabilitation_day_id=2769&workout_id
INFO [console] [DIO] statusCode: 200
INFO [console] [DIO] statusMessage: OK
INFO [console] [DIO] headers:
INFO [console] [DIO] x-served-by: rehabilitation.most.team
INFO [console] [DIO] access-control-allow-credentials: true
INFO [console] [DIO] connection: keep-alive
INFO [console] [DIO] cache-control: no-cache, private
INFO [console] [DIO] date: Wed, 26 Aug 2026 11:17:25 GMT
INFO [console] [DIO] transfer-encoding: chunked
INFO [console] [DIO] access-control-allow-origin: http://localhost:3000
INFO [console] [DIO] content-type: application/json
INFO [console] [DIO] server: openresty
INFO [console] [DIO] Response Text:
INFO [console] [DIO] {"success":true,"meta":{"timestamp":"2026-08-26T11:17:25.500668Z","request_id":"e2f96a4a-93b2-4c7d-8798-008cf36705b6","version":"v1"},"data":{"unit_id":1000,"workout_duration_start":5,"workout_duration_end":10,"body_side":"left","exercises":[{"id":85,"sequence_number":1,"is_monitored":true,"name":"Тренировка икроножных мышц стоя","image":"https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png","by_body_side":"not_by_side","execution_order_type":null,"approaches_count":2,"execution_count":7,"execution_time":null,"instruction":{"exercise_name":"Тренировка икроножных мышц стоя","video":"https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov","inventory":"Опора (стул, подоконник, стена)","warning":"Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги между стопами\nСледите, чтобы спина была прямая\nНе уводите таз вперед/назад\nКолени держите выпрямленными","general_description":"В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени.","steps":[{"exercise_id":85,"sequence_number":1,"step_text":"Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере"},{"exercise_id":85,"sequence_number":2,"step_text":"Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу"},{"exercise_id":85,"sequence_number":3,"step_text":"Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела"},{"exercise_id":85,"sequence_number":4,"step_text":"Спина прямая, живот слегка подтянут, взгляд направлен вперёд"},{"exercise_id":85,"sequence_number":5,"step_text":"Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп"},{"exercise_id":85,"sequence_number":6,"step_text":"Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке"},{"exercise_id":85,"sequence_number":7,"step_text":"Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение"},{"exercise_id":85,"sequence_number":8,"step_text":"Выполните поднятие на носки необходимое количество раз"}]},"camera_orientation":"vertical","neural_network_type":"mediapipe","base_main_command":"Поднимайтесь и опускайтесь на носках","left_main_command":null,"calibration_parameters":[{"id":107,"name":" Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":148,"component_side":"left","segment_type":null,"parts":[{"id":397,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":398,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":399,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":159,"command_side":"left","position_number":1,"position_message":"Примите исходную позицию. Встаньте боком оперированной ноги к камере, держите ноги выпрямленными","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите рабочее колено выпрямленным"}]},{"id":108,"name":"Калибровка угла в тазе","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":150,"component_side":"left","segment_type":null,"parts":[{"id":403,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":404,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":405,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":161,"command_side":"left","position_number":1,"position_message":"Теперь выпрямите спину, она должна быть продолжением ног. Не заваливайте ее в стороны","fixation_message":"Фиксируем угол в тазу, оставайтесь в нужном положении","error_message":"Держите спину прямой"}]},{"id":109,"name":"Калибровка амплитуды рабочего угла","sequence_number":3,"calibration_parameter_type":"angle_amplitude","fixation_type":"alternate","fixation_order":"min_at_first","deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":152,"component_side":"left","segment_type":null,"parts":[{"id":409,"sequence_number":1,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":410,"sequence_number":2,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"},{"id":411,"sequence_number":3,"body_point":{"id":32,"mediapipe_index":31,"movenet_index":null},"line_type":null,"part_type":"point"}]}],"commands":[{"id":163,"command_side":"left","position_number":1,"position_message":"Стойте боком оперированной ноги к камере, стопы на полу","fixation_message":"Фиксируем значение, оставайтесь в нужном положении","error_message":"Поднимайтесь на необходимую высоту"},{"id":165,"command_side":"left","position_number":2,"position_message":"Теперь поднимитесь на носки до максимальной комфортной вам высоты","fixation_message":"Фиксируем значение, не опускайтесь","error_message":"Поднимайтесь на необходимую высоту"}]}]},{"id":47,"sequence_number":2,"is_monitored":true,"name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","image":"https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png","by_body_side":"by_side","execution_order_type":"isolated","approaches_count":2,"execution_count":null,"execution_time":20,"instruction":{"exercise_name":"Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге","video":"https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov","inventory":"Возвышенность (стул и т.п.)","warning":"Не допускайте разворота/заваливания поднятой ноги","general_description":"Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; \nстопа и колено поднятой ноги не должны \"заваливаться\" наружу (отсутствие ротации); \nнаклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; \nдыхание свободное, без задержек; \nощущение растяжения должно быть комфортным, без острой боли.","steps":[{"exercise_id":47,"sequence_number":1,"step_text":"Встаньте боком растягиваемой ноги к камере"},{"exercise_id":47,"sequence_number":2,"step_text":"Поставьте рабочую ногу на возвышенность, другая нога опорная"},{"exercise_id":47,"sequence_number":3,"step_text":"Держите спину прямой"},{"exercise_id":47,"sequence_number":4,"step_text":"Стопа поднятой ноги смотрит на себя"},{"exercise_id":47,"sequence_number":5,"step_text":"Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной"},{"exercise_id":47,"sequence_number":6,"step_text":"В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время"}]},"camera_orientation":"vertical","neural_network_type":"mediapipe","base_main_command":"Наклонитесь к правой ноге","left_main_command":null,"calibration_parameters":[{"id":64,"name":"Калибровка угла в колене","sequence_number":1,"calibration_parameter_type":"angle","fixation_type":"max_value","fixation_order":null,"deviation_critical":10,"deviation_uncritical":null,"check_on_next_calibrations":true,"has_division_by_side":true,"is_monitored":false,"components":[{"id":100,"component_side":"left","segment_type":null,"parts":[{"id":259,"sequence_number":1,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":260,"sequence_number":2,"body_point":{"id":26,"mediapipe_index":25,"movenet_index":13},"line_type":null,"part_type":"point"},{"id":261,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":121,"command_side":"left","position_number":1,"position_message":"Встаньте левым боком к камере и положите левую ногу на возвышенность, колено прямое","fixation_message":"Фиксируем угол в колене, оставайтесь в нужном положении","error_message":"Держите колено выпрямленным"}]},{"id":106,"name":"Калибровка рабочего угла","sequence_number":2,"calibration_parameter_type":"angle","fixation_type":"min_value","fixation_order":null,"deviation_critical":20,"deviation_uncritical":10,"check_on_next_calibrations":false,"has_division_by_side":true,"is_monitored":true,"components":[{"id":146,"component_side":"left","segment_type":null,"parts":[{"id":391,"sequence_number":1,"body_point":{"id":12,"mediapipe_index":11,"movenet_index":5},"line_type":null,"part_type":"point"},{"id":392,"sequence_number":2,"body_point":{"id":24,"mediapipe_index":23,"movenet_index":11},"line_type":null,"part_type":"point"},{"id":393,"sequence_number":3,"body_point":{"id":28,"mediapipe_index":27,"movenet_index":15},"line_type":null,"part_type":"point"}]}],"commands":[{"id":157,"command_side":"left","position_number":1,"position_message":"Наклонитесь к левой ноге до ощущения комфортного растяжения","fixation_message":"Фиксируем угол наклона, оставайтесь в нужном положении","error_message":"Опускайте корпус ниже"}]}]}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-26T11:17:25.500668Z, request_id: e2f96a4a-93b2-4c7d-8798-008cf36705b6, version: v1}, data: {unit_id: 1000, workout_duration_start: 5, workout_duration_end: 10, body_side: left, exercises: [{id: 85, sequence_number: 1, is_monitored: true, name: Тренировка икроножных мышц стоя, image: https://rehabilitation.most.team/storage/exercise/photos/01KSM578DSDH215A8W6P26RXEH.png, by_body_side: not_by_side, execution_order_type: null, approaches_count: 2, execution_count: 7, execution_time: null, instruction: {exercise_name: Тренировка икроножных мышц стоя, video: https://rehabilitation.most.team/storage/exercise/videos/01KRJHJR20X1FNE739BG0QDYN4.mov, inventory: Опора (стул, подоконник, стена), warning: Следите за положением пяток и стоп. Пятки не должны заваливаться внутрь (это признак неправильной нагрузки). Стопы должны оставаться параллельными на протяжении всего движения, для более наглядного контроля вы можете положить кубик для йоги
INFO [console] между стопами Следите, чтобы спина была прямая Не уводите таз вперед/назад Колени держите выпрямленными, general_description: В исходном положении стоя, ноги на ширине таза, руками опереться на спинку стула или стол, выполнить подъём на носки. Следить за тем, чтобы пятки не уходили внутрь, и стопы оставались параллельными. Цель – тренировка мышц голени., steps: [{exercise_id: 85, sequence_number: 1, step_text: Встаньте прямо, лицом к устойчивой опоре (спинка стула, стол, подоконник, стена). Вы должны находиться боком оперированной ноги к камере}, {exercise_id: 85, sequence_number: 2, step_text: Поставьте ноги на ширине таза (примерно на расстоянии 10-15 см друг от друга). Стопы должны быть параллельны друг другу}, {exercise_id: 85, sequence_number: 3, step_text: Слегка обопритесь руками на опору для сохранения равновесия. Не переносите на руки весь вес тела}, {exercise_id: 85, sequence_number: 4, step_text: Спина прямая, живот слегка подтянут, взгляд направлен вперёд}, {exercise_id: 8
INFO [console] 5, sequence_number: 5, step_text: Медленно и плавно поднимитесь как можно выше на носки, перенося вес тела на передние части стоп}, {exercise_id: 85, sequence_number: 6, step_text: Движение должно быть контролируемым. Максимально напрягите икроножные мышцы в верхней точке}, {exercise_id: 85, sequence_number: 7, step_text: Также под контролем медленно опустите пятки на пол, возвращаясь в исходное положение}, {exercise_id: 85, sequence_number: 8, step_text: Выполните поднятие на носки необходимое количество раз}]}, camera_orientation: vertical, neural_network_type: mediapipe, base_main_command: Поднимайтесь и опускайтесь на носках, left_main_command: null, calibration_parameters: [{id: 107, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 148, componen
INFO [console] t_side: left, segment_type: null, parts: [{id: 397, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 398, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 399, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 159, command_side: left, position_number: 1, position_message: Примите исходную позицию. Встаньте боком оперированной ноги к камере, держите ноги выпрямленными, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите рабочее колено выпрямленным}]}, {id: 108, name: Калибровка угла в тазе, sequence_number: 2, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_moni
INFO [console] tored: false, components: [{id: 150, component_side: left, segment_type: null, parts: [{id: 403, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, line_type: null, part_type: point}, {id: 404, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 405, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 161, command_side: left, position_number: 1, position_message: Теперь выпрямите спину, она должна быть продолжением ног. Не заваливайте ее в стороны, fixation_message: Фиксируем угол в тазу, оставайтесь в нужном положении, error_message: Держите спину прямой}]}, {id: 109, name: Калибровка амплитуды рабочего угла, sequence_number: 3, calibration_parameter_type: angle_amplitude, fixation_type: alternate, fixation_order: min_at_first, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibration
INFO [console] s: false, has_division_by_side: true, is_monitored: true, components: [{id: 152, component_side: left, segment_type: null, parts: [{id: 409, sequence_number: 1, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 410, sequence_number: 2, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}, {id: 411, sequence_number: 3, body_point: {id: 32, mediapipe_index: 31, movenet_index: null}, line_type: null, part_type: point}]}], commands: [{id: 163, command_side: left, position_number: 1, position_message: Стойте боком оперированной ноги к камере, стопы на полу, fixation_message: Фиксируем значение, оставайтесь в нужном положении, error_message: Поднимайтесь на необходимую высоту}, {id: 165, command_side: left, position_number: 2, position_message: Теперь поднимитесь на носки до максимальной комфортной вам высоты, fixation_message: Фиксируем значение, не опускайтесь, error_message: Поднимайтесь на не
INFO [console] обходимую высоту}]}]}, {id: 47, sequence_number: 2, is_monitored: true, name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, image: https://rehabilitation.most.team/storage/exercise/photos/01KQCHWY0J06QHXQ4P2BH5VD3A.png, by_body_side: by_side, execution_order_type: isolated, approaches_count: 2, execution_count: null, execution_time: 20, instruction: {exercise_name: Растяжка мышц задней поверхности бедра - В и.п. стоя на одной ноге, video: https://rehabilitation.most.team/storage/exercise/videos/01KQCHWY0PXRQ1HM420M2W892Q.mov, inventory: Возвышенность (стул и т.п.), warning: Не допускайте разворота/заваливания поднятой ноги, general_description: Стоя на одной ноге, другая нога выпрямлена в колене и расположена на возвышенности (стул, скамейка, ступенька). Корпус наклонён вперёд, руки тянутся к стопе поднятой ноги. Удерживать это положение заданное количество времени. Важно: колено поднятой ноги должно оставаться выпрямленным; стопа и колено поднятой ноги не должны
INFO [console] "заваливаться" наружу (отсутствие ротации); наклон выполняется за счёт сгибания в тазобедренном суставе, а не округления спины; дыхание свободное, без задержек; ощущение растяжения должно быть комфортным, без острой боли., steps: [{exercise_id: 47, sequence_number: 1, step_text: Встаньте боком растягиваемой ноги к камере}, {exercise_id: 47, sequence_number: 2, step_text: Поставьте рабочую ногу на возвышенность, другая нога опорная}, {exercise_id: 47, sequence_number: 3, step_text: Держите спину прямой}, {exercise_id: 47, sequence_number: 4, step_text: Стопа поднятой ноги смотрит на себя}, {exercise_id: 47, sequence_number: 5, step_text: Потянитесь пальцами рук к стопе поднятой ноги. Ваша задача - не обязательно обхватить стопу, а максимально растянуться с прямой спиной}, {exercise_id: 47, sequence_number: 6, step_text: В точке максимального комфортного натяжения в задней поверхности бедра и под коленями зафиксируйте положение. Удерживайте его заданное время}]}, camera_orientation:
INFO [console] vertical, neural_network_type: mediapipe, base_main_command: Наклонитесь к правой ноге, left_main_command: null, calibration_parameters: [{id: 64, name: Калибровка угла в колене, sequence_number: 1, calibration_parameter_type: angle, fixation_type: max_value, fixation_order: null, deviation_critical: 10, deviation_uncritical: null, check_on_next_calibrations: true, has_division_by_side: true, is_monitored: false, components: [{id: 100, component_side: left, segment_type: null, parts: [{id: 259, sequence_number: 1, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 260, sequence_number: 2, body_point: {id: 26, mediapipe_index: 25, movenet_index: 13}, line_type: null, part_type: point}, {id: 261, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 121, command_side: left, position_number: 1, position_message: Встаньте левым боком к камере и положите лев
INFO [console] ую ногу на возвышенность, колено прямое, fixation_message: Фиксируем угол в колене, оставайтесь в нужном положении, error_message: Держите колено выпрямленным}]}, {id: 106, name: Калибровка рабочего угла, sequence_number: 2, calibration_parameter_type: angle, fixation_type: min_value, fixation_order: null, deviation_critical: 20, deviation_uncritical: 10, check_on_next_calibrations: false, has_division_by_side: true, is_monitored: true, components: [{id: 146, component_side: left, segment_type: null, parts: [{id: 391, sequence_number: 1, body_point: {id: 12, mediapipe_index: 11, movenet_index: 5}, line_type: null, part_type: point}, {id: 392, sequence_number: 2, body_point: {id: 24, mediapipe_index: 23, movenet_index: 11}, line_type: null, part_type: point}, {id: 393, sequence_number: 3, body_point: {id: 28, mediapipe_index: 27, movenet_index: 15}, line_type: null, part_type: point}]}], commands: [{id: 157, command_side: left, position_number: 1, position_message: Наклонитесь к левой н
INFO [console] оге до ощущения комфортного растяжения, fixation_message: Фиксируем угол наклона, оставайтесь в нужном положении, error_message: Опускайте корпус ниже}]}]}]}}
FATAL [zone] Unhandled asynchronous error
Bad state: No element
#0      ListBase.firstWhere (dart:collection/list.dart:132)
#1      ProgressEngine.getCurrentRulesCalibrations (package:testapp/features/training/domain/runtime/engine/progress_engine.dart:230)
#2      ProgressEngine.currentExerciseBodyPoint (package:testapp/features/training/domain/runtime/engine/progress_engine.dart:109)
#3      BodyPointPhase.startSession (package:testapp/features/training/domain/runtime/phase/body_point_phase.dart:52)
#4      PhaseBaseTraining.start (package:testapp/features/training/domain/runtime/phase/phase_base_training.dart:30)
#5      BodyPointPhase.start (package:testapp/features/training/domain/runtime/phase/body_point_phase.dart:30)
#6      RuntimeTrainingImpl._changePhase (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:62)
#7      RuntimeTrainingImpl.onBodyPoints (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:114)
#8      RuntimeTrainingImpl.onStartExercise (package:testapp/features/training/domain/runtime/runtime_training_impl.dart:92)
#9      new TrainingCoordinatorBloc.<anonymous closure> (package:testapp/features/training/presentation/bloc/conducting_training/%20training_coordinator/training_coordinator_bloc.dart:34)
#10     Bloc.on.<anonymous closure>.handleEvent (package:bloc/src/bloc.dart:226)
#11     Bloc.on.<anonymous closure> (package:bloc/src/bloc.dart:237)
#12     _MapStream._handleData (dart:async/stream_pipe.dart:247)
#13     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#14     _rootRunUnary (dart:async/zone_root.dart:48)
#15     _CustomZone.runUnary (dart:async/zone.dart:816)
#16     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#17     CastStreamSubscription._onData (dart:_internal/async_cast.dart:95)
#18     _rootRunUnary (dart:async/zone_root.dart:48)
#19     _CustomZone.runUnary (dart:async/zone.dart:816)
#20     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#21     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#22     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312)
#23     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:154)
#24     _WhereStream._handleData (dart:async/stream_pipe.dart:229)
#25     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:184)
#26     _rootRunUnary (dart:async/zone_root.dart:56)
#27     _CustomZone.runUnary (dart:async/zone.dart:816)
#28     _CustomZone.runUnaryGuarded (dart:async/zone.dart:710)
#29     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
#30     _DelayedData.perform (dart:async/stream_impl.dart:573)
#31     _PendingEvents.handleNext (dart:async/stream_impl.dart:678)
#32     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:649)
#33     _microtaskLoop (dart:async/schedule_microtask.dart:40)
#34     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49)
INFO [console] PoseEstimator: worker isolate up (gpu=true, fallback=none, model=pose_landmarks_detector_heavy.tflite (27055 KB), cores=cores=[6, 7]@2200MHz ok, on cpu7)
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.portraitUp rotDeg=270 imgSize=720 x 480 -> upright=480x720 imgFormat=35 planes=3 pixelStride=1 rowStride=768 screenSize=384x806
FATAL [platform] Unhandled platform error
CameraException(A camera has started streaming images., startImageStream was called while a camera was streaming images.)
#0      CameraController.startImageStream (package:camera/src/camera_controller.dart:511)
#1      _PoseCameraViewState._startImageStream (package:testapp/features/ocr_camera_page/pose_estimation/pose_camera_view.dart:212)
#2      _PoseCameraViewState.didChangeAppLifecycleState (package:testapp/features/ocr_camera_page/pose_estimation/pose_camera_view.dart:156)
#3      WidgetsBinding.handleAppLifecycleStateChanged (package:flutter/src/widgets/binding.dart:1334)
#4      ServicesBinding._handleLifecycleMessage (package:flutter/src/services/binding.dart:307)
#5      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:258)
#6      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:664)
#7      _invoke2 (dart:ui/hooks.dart:473)
#8      _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:45)
#9      _Channel.push (dart:ui/channel_buffers.dart:136)
#10     ChannelBuffers.push (dart:ui/channel_buffers.dart:344)
#11     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:825)
#12     _dispatchPlatformMessage (dart:ui/hooks.dart:369)
INFO [console] POSE_METRICS: received=37(33.9fps) processed=5(4.6fps) replaced=30(27.5fps) buildMs=2.02 estimatorMs=210.83 (pre=64.8 infer=55.1 det=87.8) totalMs=210.87 actualFps=4.6
INFO [console] POSE_METRICS: received=23(22.5fps) processed=7(6.8fps) replaced=17(16.6fps) buildMs=1.14 estimatorMs=145.82 (pre=12.3 infer=59.8 det=133.2) totalMs=145.88 actualFps=6.8
INFO [console] BODY_POINT_PHASE: timeout — no geometry data in 30s
INFO [console] 🎯 БОДИПОИНТ: Скрытый 30-секундный таймер-убийца успешно обезврежен!
FATAL [platform] Unhandled platform error
CameraException(No camera is streaming images, stopImageStream was called when no camera is streaming images.)
#0      CameraController.stopImageStream (package:camera/src/camera_controller.dart:540)
#1      _PoseCameraViewState._stopImageStream (package:testapp/features/ocr_camera_page/pose_estimation/pose_camera_view.dart:216)
#2      _PoseCameraViewState.didChangeAppLifecycleState (package:testapp/features/ocr_camera_page/pose_estimation/pose_camera_view.dart:154)
#3      WidgetsBinding.handleAppLifecycleStateChanged (package:flutter/src/widgets/binding.dart:1334)
#4      ServicesBinding._handleLifecycleMessage (package:flutter/src/services/binding.dart:307)
#5      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:258)
#6      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:664)
#7      _invoke2 (dart:ui/hooks.dart:473)
#8      _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:45)
#9      _Channel.push (dart:ui/channel_buffers.dart:136)
#10     ChannelBuffers.push (dart:ui/channel_buffers.dart:344)
#11     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:825)
#12     _dispatchPlatformMessage (dart:ui/hooks.dart:369)
$
250 строкUTF-8LIVE