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

rehabapp_2026-08-25_18-05-04

Подключение…
Rehab Logger console · история загружается порциями по 250 записей
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: Tue, 25 Aug 2026 15:05: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-25T15:05:25.336310Z","request_id":"58ebc0a7-56c0-4768-9489-6cfd5bf0c2aa","version":"v1"},"data":{"message":"User push token successfully saved or existed for current user"}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-25T15:05:25.336310Z, request_id: 58ebc0a7-56c0-4768-9489-6cfd5bf0c2aa, version: v1}, data: {message: User push token successfully saved or existed for current user}}
INFO [console] [DIO] *** Response ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/rehabilitation/calendar/period?start_date=2026-07-27&end_date=2026-09-06
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: Tue, 25 Aug 2026 15:05: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-25T15:05:25.345233Z","request_id":"df5378fa-3219-496a-a86f-8ad3d5f222cd","version":"v1"},"data":{"start_rehab":"2026-08-21 00:00:00","end_rehab":"2026-09-10 00:00:00","days":[{"date":"2026-08-21","status":["start"],"training":[{"mode":"correction_unit","status":"not_done","progress":null},{"mode":"diagnostics","status":"not_done","progress":null}]},{"date":"2026-08-24","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-08-25","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-08-26","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-08-27","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-08-28","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null},{"mode":"diagnostics","status":"not_done","progress":null}]},{"date":"2026-08-31","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-09-01","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-09-02","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-09-03","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null}]},{"date":"2026-09-04","status":["none"],"training":[{"mode":"correction_unit","status":"not_done","progress":null},{"mode":"diagnostics","status":"not_done","progress":null}]}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-08-25T15:05:25.345233Z, request_id: df5378fa-3219-496a-a86f-8ad3d5f222cd, version: v1}, data: {start_rehab: 2026-08-21 00:00:00, end_rehab: 2026-09-10 00:00:00, days: [{date: 2026-08-21, status: [start], training: [{mode: correction_unit, status: not_done, progress: null}, {mode: diagnostics, status: not_done, progress: null}]}, {date: 2026-08-24, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-08-25, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-08-26, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-08-27, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-08-28, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}, {mode: diagnostics, status: not_done, progress: null}]}, {date: 2026-08-31, statu
INFO [console] s: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-09-01, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-09-02, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-09-03, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}]}, {date: 2026-09-04, status: [none], training: [{mode: correction_unit, status: not_done, progress: null}, {mode: diagnostics, status: not_done, progress: null}]}]}}
INFO [console] shrinkOffset: 0.0, progress: 0.0
INFO [console] shrinkOffset: 0.0, progress: 0.0
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/rehabilitation/calendar/day?date=2026-08-25
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 675|3JSHYnI8YJay8PEtjGygeQ70XuxeEXwM4ZIvt4YAbc23aa5f
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/rehabilitation/calendar/day?date=2026-08-25
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: Tue, 25 Aug 2026 15:05: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-25T15:05:25.608049Z","request_id":"728badba-9c95-40d3-acdf-39a9a273c7c7","version":"v1"},"data":{"rehabilitation_day_id":2768,"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-25","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-25T15:05:25.608049Z, request_id: 728badba-9c95-40d3-acdf-39a9a273c7c7, version: v1}, data: {rehabilitation_day_id: 2768, 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-25, 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: 0.0, progress: 0.0
INFO [console] shrinkOffset: 0.0, progress: 0.0
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/rehabilitation/calendar/day?date=2026-08-25
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 675|3JSHYnI8YJay8PEtjGygeQ70XuxeEXwM4ZIvt4YAbc23aa5f
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/rehabilitation/calendar/day?date=2026-08-25
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: Tue, 25 Aug 2026 15:05:27 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-25T15:05:27.295515Z","request_id":"32b0e268-a856-45aa-b185-d9a99f0d2211","version":"v1"},"data":{"rehabilitation_day_id":2768,"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-25","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-25T15:05:27.295515Z, request_id: 32b0e268-a856-45aa-b185-d9a99f0d2211, version: v1}, data: {rehabilitation_day_id: 2768, 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-25, 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] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/exercises?unit_id=1000&rehabilitation_day_id=2768&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 675|3JSHYnI8YJay8PEtjGygeQ70XuxeEXwM4ZIvt4YAbc23aa5f
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=2768&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: Tue, 25 Aug 2026 15:05:28 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-25T15:05:28.573767Z","request_id":"e8743856-1fe6-4673-8b20-a6db79be3542","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-25T15:05:28.573767Z, request_id: e8743856-1fe6-4673-8b20-a6db79be3542, 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=2768&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 675|3JSHYnI8YJay8PEtjGygeQ70XuxeEXwM4ZIvt4YAbc23aa5f
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=2768&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: Tue, 25 Aug 2026 15:05:44 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-25T15:05:44.836323Z","request_id":"84026d46-4a51-461b-b094-979e82bd513b","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-25T15:05:44.836323Z, request_id: 84026d46-4a51-461b-b094-979e82bd513b, 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)
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_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=(232,377)] [11 frame=(316,356)] [12 frame=(174,387)] [23 frame=(375,901)] [24 frame=(186,921)] frameSize=480 x 720 screenSize=384x806
INFO [console] POSE_MAP: [0 norm=(0.523,0.524)] [11 norm=(0.279,0.495)] [12 norm=(0.692,0.537)] [23 norm=(0.106,1.000)] [24 norm=(0.658,1.000)]
INFO [console] POSE_METRICS: received=34(33.0fps) processed=17(16.5fps) replaced=15(14.6fps) buildMs=1.25 estimatorMs=65.38 (pre=23.5 infer=25.5 det=0.0) totalMs=65.60 actualFps=16.5
INFO [console] POSE_METRICS: received=25(24.4fps) processed=26(25.3fps) replaced=0(0.0fps) buildMs=0.98 estimatorMs=37.02 (pre=3.9 infer=20.1 det=0.0) totalMs=37.17 actualFps=25.3
INFO [console] POSE_METRICS: received=27(25.8fps) processed=21(20.1fps) replaced=5(4.8fps) buildMs=1.47 estimatorMs=49.09 (pre=40.7 infer=22.2 det=0.0) totalMs=49.24 actualFps=20.1
INFO [console] POSE_METRICS: received=31(29.6fps) processed=22(21.0fps) replaced=9(8.6fps) buildMs=1.94 estimatorMs=47.33 (pre=16.2 infer=38.4 det=0.0) totalMs=47.51 actualFps=21.0
INFO [console] POSE_METRICS: received=29(28.3fps) processed=22(21.5fps) replaced=7(6.8fps) buildMs=1.42 estimatorMs=45.79 (pre=33.8 infer=31.0 det=0.0) totalMs=46.00 actualFps=21.5
INFO [console] POSE_METRICS: received=31(30.5fps) processed=21(20.6fps) replaced=10(9.8fps) buildMs=1.57 estimatorMs=48.25 (pre=53.6 infer=29.6 det=0.0) totalMs=48.42 actualFps=20.6
INFO [console] POSE_METRICS: received=31(30.2fps) processed=17(16.6fps) replaced=14(13.6fps) buildMs=1.50 estimatorMs=60.23 (pre=29.7 infer=32.0 det=0.0) totalMs=60.43 actualFps=16.6
INFO [console] POSE_METRICS: received=30(29.6fps) processed=15(14.8fps) replaced=15(14.8fps) buildMs=1.23 estimatorMs=67.35 (pre=59.8 infer=18.8 det=0.0) totalMs=67.50 actualFps=14.8
INFO [console] POSE_METRICS: received=32(30.0fps) processed=13(12.2fps) replaced=19(17.8fps) buildMs=1.69 estimatorMs=81.93 (pre=43.7 infer=25.3 det=0.0) totalMs=82.10 actualFps=12.2
INFO [console] POSE_METRICS: received=31(30.2fps) processed=13(12.7fps) replaced=18(17.5fps) buildMs=1.62 estimatorMs=78.75 (pre=42.4 infer=22.6 det=0.0) totalMs=78.98 actualFps=12.7
INFO [console] POSE_METRICS: received=31(29.4fps) processed=14(13.3fps) replaced=17(16.1fps) buildMs=1.40 estimatorMs=75.21 (pre=58.5 infer=21.8 det=0.0) totalMs=75.41 actualFps=13.3
INFO [console] POSE_METRICS: received=32(30.1fps) processed=16(15.1fps) replaced=16(15.1fps) buildMs=1.13 estimatorMs=66.14 (pre=48.1 infer=26.2 det=0.0) totalMs=66.33 actualFps=15.1
INFO [console] POSE_METRICS: received=31(30.0fps) processed=13(12.6fps) replaced=18(17.4fps) buildMs=1.29 estimatorMs=79.32 (pre=60.7 infer=19.1 det=0.0) totalMs=79.58 actualFps=12.6
INFO [console] POSE_METRICS: received=33(30.3fps) processed=14(12.9fps) replaced=19(17.4fps) buildMs=1.32 estimatorMs=77.51 (pre=77.7 infer=22.4 det=0.0) totalMs=77.73 actualFps=12.9
INFO [console] POSE_METRICS: received=30(29.4fps) processed=14(13.7fps) replaced=16(15.7fps) buildMs=1.81 estimatorMs=72.74 (pre=21.4 infer=25.2 det=0.0) totalMs=72.91 actualFps=13.7
INFO [console] POSE_METRICS: received=31(30.3fps) processed=15(14.7fps) replaced=16(15.6fps) buildMs=1.11 estimatorMs=67.90 (pre=25.8 infer=22.8 det=0.0) totalMs=68.15 actualFps=14.7
INFO [console] POSE_METRICS: received=31(30.0fps) processed=14(13.5fps) replaced=17(16.4fps) buildMs=1.65 estimatorMs=73.54 (pre=81.3 infer=21.1 det=0.0) totalMs=73.83 actualFps=13.5
INFO [console] POSE_METRICS: received=30(29.7fps) processed=12(11.9fps) replaced=18(17.8fps) buildMs=1.93 estimatorMs=83.88 (pre=32.2 infer=30.6 det=0.0) totalMs=84.07 actualFps=11.9
INFO [console] POSE_METRICS: received=30(29.6fps) processed=12(11.8fps) replaced=18(17.7fps) buildMs=1.70 estimatorMs=84.35 (pre=43.5 infer=22.2 det=0.0) totalMs=84.52 actualFps=11.8
INFO [console] POSE_METRICS: received=32(29.7fps) processed=14(13.0fps) replaced=18(16.7fps) buildMs=1.35 estimatorMs=76.66 (pre=55.6 infer=20.1 det=0.0) totalMs=76.86 actualFps=13.0
INFO [console] POSE_METRICS: received=33(30.8fps) processed=14(13.1fps) replaced=19(17.7fps) buildMs=1.83 estimatorMs=76.37 (pre=65.3 infer=23.2 det=0.0) totalMs=76.54 actualFps=13.1
INFO [console] POSE_METRICS: received=31(29.4fps) processed=13(12.3fps) replaced=18(17.1fps) buildMs=1.59 estimatorMs=80.90 (pre=52.5 infer=22.8 det=0.0) totalMs=81.08 actualFps=12.3
INFO [console] POSE_METRICS: received=32(30.1fps) processed=14(13.2fps) replaced=18(16.9fps) buildMs=1.36 estimatorMs=75.78 (pre=72.6 infer=23.4 det=0.0) totalMs=75.96 actualFps=13.2
INFO [console] POSE_METRICS: received=32(30.0fps) processed=14(13.1fps) replaced=18(16.9fps) buildMs=1.28 estimatorMs=75.79 (pre=49.8 infer=25.9 det=0.0) totalMs=76.01 actualFps=13.1
INFO [console] POSE_METRICS: received=29(28.8fps) processed=14(13.9fps) replaced=15(14.9fps) buildMs=1.60 estimatorMs=71.63 (pre=40.8 infer=25.1 det=0.0) totalMs=71.80 actualFps=13.9
INFO [console] POSE_METRICS: received=30(29.9fps) processed=13(13.0fps) replaced=17(17.0fps) buildMs=1.67 estimatorMs=76.87 (pre=64.5 infer=24.1 det=0.0) totalMs=77.08 actualFps=13.0
INFO [console] BODY_POINT_PHASE: timeout — no geometry data in 30s
INFO [console] 🎯 БОДИПОИНТ: Скрытый 30-секундный таймер-убийца успешно обезврежен!
INFO [console] POSE_METRICS: received=33(29.9fps) processed=14(12.7fps) replaced=19(17.2fps) buildMs=1.17 estimatorMs=78.46 (pre=78.5 infer=26.3 det=0.0) totalMs=78.65 actualFps=12.7
INFO [console] POSE_METRICS: received=30(29.4fps) processed=13(12.8fps) replaced=17(16.7fps) buildMs=1.77 estimatorMs=78.25 (pre=70.3 infer=19.7 det=0.0) totalMs=78.42 actualFps=12.8
INFO [console] POSE_METRICS: received=31(30.6fps) processed=14(13.8fps) replaced=17(16.8fps) buildMs=1.37 estimatorMs=72.08 (pre=52.0 infer=19.6 det=0.0) totalMs=72.24 actualFps=13.8
INFO [console] POSE_METRICS: received=31(29.9fps) processed=14(13.5fps) replaced=17(16.4fps) buildMs=1.46 estimatorMs=73.75 (pre=53.4 infer=27.9 det=0.0) totalMs=73.94 actualFps=13.5
INFO [console] POSE_METRICS: received=31(29.2fps) processed=15(14.1fps) replaced=16(15.1fps) buildMs=1.63 estimatorMs=70.54 (pre=38.2 infer=28.5 det=0.0) totalMs=70.75 actualFps=14.1
INFO [console] POSE_METRICS: received=32(30.2fps) processed=16(15.1fps) replaced=16(15.1fps) buildMs=1.30 estimatorMs=65.87 (pre=48.6 infer=22.9 det=0.0) totalMs=66.10 actualFps=15.1
INFO [console] POSE_METRICS: received=31(30.3fps) processed=17(16.6fps) replaced=14(13.7fps) buildMs=1.01 estimatorMs=59.85 (pre=65.3 infer=23.1 det=0.0) totalMs=60.07 actualFps=16.6
INFO [console] POSE_METRICS: received=30(29.4fps) processed=14(13.7fps) replaced=16(15.7fps) buildMs=1.56 estimatorMs=72.63 (pre=35.0 infer=30.5 det=0.0) totalMs=72.84 actualFps=13.7
INFO [console] POSE_METRICS: received=31(30.5fps) processed=17(16.7fps) replaced=14(13.8fps) buildMs=1.26 estimatorMs=59.51 (pre=22.1 infer=28.1 det=0.0) totalMs=59.74 actualFps=16.7
INFO [console] POSE_METRICS: received=30(29.9fps) processed=16(15.9fps) replaced=14(13.9fps) buildMs=1.63 estimatorMs=62.56 (pre=30.7 infer=21.5 det=0.0) totalMs=62.77 actualFps=15.9
INFO [console] POSE_METRICS: received=31(29.5fps) processed=17(16.2fps) replaced=14(13.3fps) buildMs=1.38 estimatorMs=61.65 (pre=30.4 infer=24.3 det=0.0) totalMs=61.83 actualFps=16.2
INFO [console] POSE_METRICS: received=33(30.6fps) processed=14(13.0fps) replaced=19(17.6fps) buildMs=1.89 estimatorMs=76.92 (pre=62.5 infer=21.0 det=0.0) totalMs=77.07 actualFps=13.0
INFO [console] POSE_METRICS: received=31(29.3fps) processed=15(14.2fps) replaced=16(15.1fps) buildMs=1.18 estimatorMs=70.27 (pre=44.2 infer=19.1 det=0.0) totalMs=70.46 actualFps=14.2
INFO [console] POSE_METRICS: received=31(30.5fps) processed=15(14.7fps) replaced=16(15.7fps) buildMs=1.30 estimatorMs=67.61 (pre=39.6 infer=21.4 det=0.0) totalMs=67.78 actualFps=14.7
INFO [console] POSE_METRICS: received=30(29.5fps) processed=13(12.8fps) replaced=17(16.7fps) buildMs=1.30 estimatorMs=77.85 (pre=39.7 infer=23.7 det=0.0) totalMs=78.12 actualFps=12.8
INFO [console] POSE_METRICS: received=31(29.3fps) processed=15(14.2fps) replaced=16(15.1fps) buildMs=1.99 estimatorMs=70.30 (pre=37.6 infer=18.3 det=0.0) totalMs=70.44 actualFps=14.2
INFO [console] POSE_METRICS: received=31(30.5fps) processed=15(14.8fps) replaced=16(15.7fps) buildMs=1.27 estimatorMs=67.51 (pre=38.1 infer=23.2 det=0.0) totalMs=67.72 actualFps=14.8
INFO [console] POSE_METRICS: received=31(29.9fps) processed=20(19.3fps) replaced=11(10.6fps) buildMs=1.63 estimatorMs=51.21 (pre=17.2 infer=24.9 det=0.0) totalMs=51.39 actualFps=19.3
INFO [console] POSE_METRICS: received=30(29.4fps) processed=14(13.7fps) replaced=16(15.7fps) buildMs=1.85 estimatorMs=72.74 (pre=56.1 infer=23.0 det=58.9) totalMs=72.85 actualFps=13.7
INFO [console] POSE_METRICS: received=24(20.9fps) processed=5(4.3fps) replaced=19(16.5fps) buildMs=2.47 estimatorMs=229.89 (pre=4.5 infer=45.7 det=206.0) totalMs=229.93 actualFps=4.3
INFO [console] POSE_METRICS: received=32(30.8fps) processed=12(11.6fps) replaced=20(19.3fps) buildMs=1.33 estimatorMs=86.47 (pre=5.5 infer=21.7 det=83.7) totalMs=86.50 actualFps=11.6
INFO [console] POSE_METRICS: received=26(20.0fps) processed=10(7.7fps) replaced=16(12.3fps) buildMs=1.22 estimatorMs=130.11 (pre=174.0 infer=39.0 det=0.0) totalMs=130.28 actualFps=7.7
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