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

rehabapp_2026-09-22_12-41-29

Подключение…
Rehab Logger console · история загружается порциями по 250 записей
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 769|gkZC637vqE4kWnA8p9C3n765NKcBnXVs6pynlXauecff7ad5
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=1095&rehabilitation_day_id=3140&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, 22 Sep 2026 09:43:15 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-09-22T09:43:15.366920Z","request_id":"183e2595-ac51-4e31-97f7-7a40bf3f9559","version":"v1"},"data":{"unit_id":1095,"workout_duration_start":10,"workout_duration_end":20,"body_side":"right","exercises":[{"id":101,"sequence_number":1,"is_monitored":false,"name":"Тест скрининг","image":"https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png","by_body_side":"by_side","execution_order_type":"symmetric","approaches_count":1,"execution_count":null,"execution_time":10,"instruction":{"exercise_name":"Тест скрининг","video":"https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov","inventory":"Сантиметровая лента","warning":"Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. ","general_description":"В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице ","steps":[{"exercise_id":101,"sequence_number":1,"step_text":"Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабочая нога - та, которую вы будете сгибать)."},{"exercise_id":101,"sequence_number":2,"step_text":"Руки разместите в удобном положении, которое обеспечивает устойчивость. "},{"exercise_id":101,"sequence_number":3,"step_text":"Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. "},{"exercise_id":101,"sequence_number":4,"step_text":"Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно."},{"exercise_id":101,"sequence_number":5,"step_text":"Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание."}],"measurement":{"id":2,"instruction":"В данном упражнении вам необходимо будет произвести замер расстояния от пятки до ягодицы по каждой ноге. Сначала вы выполните подход на здоровую ногу. Вы можете измерить расстояние непосредственно во время удержания максимально согнутого положения (когда пятка на полу) или сразу после подхода, не меняя позы. Измерьте сантиметровой лентой расстояние от пятки до ягодичной складки и запишите полученное значение в сантиметрах. Затем выполните подход на повреждённую ногу и точно так же измерьте и запишите расстояние для неё. Если вы не можете измерить самостоятельно, попросите помощника.","hint":"Введите расстояние от пятки до ягодицы для той ноги, на которой вы только что выполнили подход. Значение укажите в сантиметрах.","images":[]}},"camera_orientation":"horizontal","neural_network_type":"mediapipe","base_main_command":"Сгибайте правое колено","left_main_command":null,"calibration_parameters":[],"calibration_videos":[]}]}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-09-22T09:43:15.366920Z, request_id: 183e2595-ac51-4e31-97f7-7a40bf3f9559, version: v1}, data: {unit_id: 1095, workout_duration_start: 10, workout_duration_end: 20, body_side: right, exercises: [{id: 101, sequence_number: 1, is_monitored: false, name: Тест скрининг, image: https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png, by_body_side: by_side, execution_order_type: symmetric, approaches_count: 1, execution_count: null, execution_time: 10, instruction: {exercise_name: Тест скрининг, video: https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov, inventory: Сантиметровая лента, warning: Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. , general_description: В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице , step
INFO [console] s: [{exercise_id: 101, sequence_number: 1, step_text: Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабочая нога - та, которую вы будете сгибать).}, {exercise_id: 101, sequence_number: 2, step_text: Руки разместите в удобном положении, которое обеспечивает устойчивость. }, {exercise_id: 101, sequence_number: 3, step_text: Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. }, {exercise_id: 101, sequence_number: 4, step_text: Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно.}, {exercise_id: 101, sequence_number: 5, step_text: Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание.}], measurement: {id: 2, instruction: В данном упражнении вам необходимо будет произвести замер рассто
INFO [console] яния от пятки до ягодицы по каждой ноге. Сначала вы выполните подход на здоровую ногу. Вы можете измерить расстояние непосредственно во время удержания максимально согнутого положения (когда пятка на полу) или сразу после подхода, не меняя позы. Измерьте сантиметровой лентой расстояние от пятки до ягодичной складки и запишите полученное значение в сантиметрах. Затем выполните подход на повреждённую ногу и точно так же измерьте и запишите расстояние для неё. Если вы не можете измерить самостоятельно, попросите помощника., hint: Введите расстояние от пятки до ягодицы для той ноги, на которой вы только что выполнили подход. Значение укажите в сантиметрах., images: []}}, camera_orientation: horizontal, neural_network_type: mediapipe, base_main_command: Сгибайте правое колено, left_main_command: null, calibration_parameters: [], calibration_videos: []}]}}
INFO [console] Инициализация аудио-сервиса успешно завершена. Кэшировано файлов: 0
INFO [console] KNEE_DIAG: recording to /storage/emulated/0/Android/data/team.most.rehabilitation.app/files/knee_diag/knee_diag.log
INFO [console] PoseEstimator: worker isolate up (accelerator=cpu, precision=fp16, fallback=none, model=pose_landmarks_detector.tflite (2752 KB), crop=native, cores=unpinned (unavailable, original=0xff))
INFO [console] ANGLE_RESEARCH: recording to /storage/emulated/0/Android/data/team.most.rehabilitation.app/files/angle_research/angles_E2_right_C00_R1_2026-09-22T12-43-22.csv
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] POSE_DIAG: sensorOrient=270 deviceOrient=DeviceOrientation.landscapeLeft rotDeg=0 imgSize=720 x 480 -> upright=720x480 imgFormat=35 planes=3 pixelStride=1 rowStride=720 screenSize=782x384
INFO [console] PASSPORT_WHY: hint=fullBodyNotVisible frontal=n/a(min 0.4) lean=n/adeg(max 20.0) speed=n/a(max 0.06) armsDown=n/a armsAside=n/a(n/a of min 1.15)
INFO [console] PASSPORT_STATE: phase=waitingReady hint=fullBodyNotVisible
INFO [console] ANKLE_ANGLE t=12:43:26.551 ts=3.355 Lkat2d=180.0 Lfoot2d=180.0 LfootH=0.0 Lkat3d=- LfootLen=0.164 visL=0.01 Rkat2d=180.0 Rfoot2d=0.0 RfootH=0.0 Rkat3d=- RfootLen=0.019 visR=0.01
INFO [console] ANKLE_ANGLE t=12:43:26.806 ts=4.047 Lkat2d=95.4 Lfoot2d=83.5 LfootH=64.6 Lkat3d=- LfootLen=0.072 visL=0.04 Rkat2d=24.9 Rfoot2d=3.0 RfootH=87.0 Rkat3d=- RfootLen=0.045 visR=0.04
INFO [console] POSE_LM: [0 frame=(213,215)] [11 frame=(308,204)] [12 frame=(185,225)] [23 frame=(303,279)] [24 frame=(233,289)] frameSize=720 x 480 screenSize=782x384
INFO [console] POSE_MAP: [0 norm=(0.704,0.428)] [11 norm=(0.572,0.399)] [12 norm=(0.743,0.458)] [23 norm=(0.579,0.610)] [24 norm=(0.677,0.639)]
INFO [console] PASSPORT_WHY: hint=fullBodyNotVisible frontal=n/a(min 0.4) lean=n/adeg(max 20.0) speed=n/a(max 0.06) armsDown=n/a armsAside=n/a(n/a of min 1.15)
INFO [console] ANKLE_ANGLE t=12:43:27.044 ts=4.405 Lkat2d=145.1 Lfoot2d=141.3 LfootH=63.3 Lkat3d=- LfootLen=0.117 visL=0.04 Rkat2d=162.1 Rfoot2d=153.7 RfootH=79.1 Rkat3d=- RfootLen=0.103 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:27.304 ts=4.716 Lkat2d=64.8 Lfoot2d=25.4 LfootH=-43.3 Lkat3d=- LfootLen=0.049 visL=0.05 Rkat2d=20.4 Rfoot2d=19.2 RfootH=-60.5 Rkat3d=- RfootLen=0.073 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:27.572 ts=4.911 Lkat2d=48.2 Lfoot2d=35.0 LfootH=-59.8 Lkat3d=- LfootLen=0.087 visL=0.05 Rkat2d=26.0 Rfoot2d=27.7 RfootH=-74.9 Rkat3d=- RfootLen=0.088 visR=0.04
INFO [console] POSE_METRICS: received=15(14.9fps) processed=4(4.0fps) replaced=9(8.9fps) buildMs=2.45 estimatorMs=355.72 (pre=8.5 infer=204.6 det=92.5) roiAgeMs=311.3/max=692.8 stale=0.0fps detRuns=1.0fps resets=0.0fps totalMs=25.99 lagMs=477.5 predLatMs=80.0 actualFps=4.0
INFO [console] ANKLE_ANGLE t=12:43:27.811 ts=5.289 Lkat2d=135.8 Lfoot2d=95.5 LfootH=74.1 Lkat3d=- LfootLen=0.070 visL=0.06 Rkat2d=20.6 Rfoot2d=15.3 RfootH=85.6 Rkat3d=- RfootLen=0.092 visR=0.04
INFO [console] PASSPORT_WHY: hint=fullBodyNotVisible frontal=n/a(min 0.4) lean=n/adeg(max 20.0) speed=n/a(max 0.06) armsDown=n/a armsAside=n/a(n/a of min 1.15)
INFO [console] ANKLE_ANGLE t=12:43:28.157 ts=5.615 Lkat2d=98.6 Lfoot2d=94.2 LfootH=-82.0 Lkat3d=- LfootLen=0.126 visL=0.06 Rkat2d=142.8 Rfoot2d=140.7 RfootH=-85.8 Rkat3d=- RfootLen=0.119 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:28.471 ts=5.867 Lkat2d=53.1 Lfoot2d=48.5 LfootH=89.2 Lkat3d=- LfootLen=0.152 visL=0.06 Rkat2d=124.0 Rfoot2d=118.7 RfootH=-79.4 Rkat3d=- RfootLen=0.120 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:28.728 ts=6.168 Lkat2d=8.4 Lfoot2d=9.2 LfootH=-84.9 Lkat3d=- LfootLen=0.145 visL=0.06 Rkat2d=60.9 Rfoot2d=59.0 RfootH=-88.3 Rkat3d=- RfootLen=0.142 visR=0.04
INFO [console] POSE_METRICS: received=16(13.9fps) processed=4(3.5fps) replaced=12(10.4fps) buildMs=2.94 estimatorMs=258.07 (pre=7.0 infer=216.7 det=0.0) roiAgeMs=314.3/max=378.5 stale=0.0fps detRuns=0.0fps resets=0.0fps totalMs=5.43 lagMs=282.5 predLatMs=80.0 actualFps=3.5
INFO [console] ANKLE_ANGLE t=12:43:28.984 ts=6.360 Lkat2d=150.4 Lfoot2d=152.2 LfootH=-16.0 Lkat3d=- LfootLen=0.050 visL=0.05 Rkat2d=151.8 Rfoot2d=139.2 RfootH=-62.6 Rkat3d=- RfootLen=0.055 visR=0.04
INFO [console] PASSPORT_WHY: hint=fullBodyNotVisible frontal=n/a(min 0.4) lean=n/adeg(max 20.0) speed=n/a(max 0.06) armsDown=n/a armsAside=n/a(n/a of min 1.15)
INFO [console] ANKLE_ANGLE t=12:43:29.279 ts=6.642 Lkat2d=164.2 Lfoot2d=163.3 LfootH=56.9 Lkat3d=- LfootLen=0.064 visL=0.06 Rkat2d=165.9 Rfoot2d=176.9 RfootH=61.4 Rkat3d=- RfootLen=0.034 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:29.504 ts=6.915 Lkat2d=174.3 Lfoot2d=179.0 LfootH=38.9 Lkat3d=- LfootLen=0.082 visL=0.05 Rkat2d=176.4 Rfoot2d=175.1 RfootH=64.4 Rkat3d=- RfootLen=0.080 visR=0.04
INFO [console] ANKLE_ANGLE t=12:43:29.903 ts=7.167 Lkat2d=156.9 Lfoot2d=161.3 LfootH=44.8 Lkat3d=- LfootLen=0.081 visL=0.05 Rkat2d=146.6 Rfoot2d=140.5 RfootH=70.8 Rkat3d=- RfootLen=0.033 visR=0.04
INFO [console] POSE_METRICS: received=9(7.7fps) processed=4(3.4fps) replaced=5(4.3fps) buildMs=3.58 estimatorMs=269.93 (pre=6.5 infer=209.4 det=0.0) roiAgeMs=249.7/max=282.0 stale=0.0fps detRuns=0.0fps resets=0.0fps totalMs=23.37 lagMs=353.6 predLatMs=82.5 actualFps=3.4
INFO [console] ANKLE_ANGLE t=12:43:30.140 ts=7.319 Lkat2d=163.2 Lfoot2d=155.5 LfootH=-67.1 Lkat3d=- LfootLen=0.080 visL=0.05 Rkat2d=88.6 Rfoot2d=84.3 RfootH=0.0 Rkat3d=- RfootLen=0.046 visR=0.04
INFO [console] VideoOutput.Resize
INFO [console] {rect: {top: 0, left: 0, width: 1920, height: 1080}, wid: 14758, handle: -5476376615523691440, id: 1}
INFO [console] VideoOutput.Resize
INFO [console] {rect: {top: 0, left: 0, width: 1920, height: 1080}, wid: 0, handle: -5476376615523691440, id: 1}
INFO [console] [ENGINE] >>> СТАРТ УПРАЖНЕНИЯ: screeningTest = false
INFO [console] [ENGINE] Кадр пропущен. Причины: IntroNotFinished=true, Paused=false, ControllerClosed=false, FinishedAlreadyTriggered=false
INFO [console] [ENGINE] Стрим контроллер: onListen запущен
INFO [console] [ENGINE] Аудио: Левая сторона
INFO [console] [ENGINE] Кадр пропущен. Причины: IntroNotFinished=true, Paused=false, ControllerClosed=false, FinishedAlreadyTriggered=false
INFO [console] [ENGINE] Вводное аудио завершено (isAudioIntroFinished = true)
INFO [console] [ENGINE] Тик каунтдауна: осталось 3 сек
ERROR [widgets library] Incorrect use of ParentDataWidget. The ParentDataWidget Expanded(flex: 2) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type StackParentData. Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets. The offending Expanded is currently placed inside a Stack widget. The ownership chain for the RenderObject that received the incompatible parent data was: SizedBox.shrink ← Expanded ← Spacer ← Stack ← MediaQuery ← Padding ← SafeArea ← LayoutBuilder ← OrientationBuilder ← PerformingOverlay ← ⋯
Incorrect use of ParentDataWidget.
The ParentDataWidget Expanded(flex: 2) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type StackParentData.
Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a Stack widget.
The ownership chain for the RenderObject that received the incompatible parent data was:
  SizedBox.shrink ← Expanded ← Spacer ← Stack ← MediaQuery ← Padding ← SafeArea ← LayoutBuilder ← OrientationBuilder ← PerformingOverlay ← ⋯
#0      RenderObjectElement._updateParentData.<anonymous closure> (package:flutter/src/widgets/framework.dart:6882:11)
#1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:6899:6)
#2      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6945:7)
#3      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6801:5)
#4      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:7114:11)
#5      Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#6      Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#8      Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#9      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5799:5)
#10     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5793:5)
#11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#12     Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#14     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5799:5)
#16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5793:5)
#17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#18     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:7264:36)
#19     Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#20     Element.updateChildren (package:flutter/src/widgets/framework.dart:4255:32)
#21     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7295:17)
#22     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#24     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#25     ProxyElement.update (package:flutter/src/widgets/framework.dart:6149:5)
#26     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#27     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7122:14)
#28     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#29     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#30     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#31     StatelessElement.update (package:flutter/src/widgets/framework.dart:5895:5)
#32     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#33     _LayoutBuilderElement._rebuildWithConstraints.updateChildCallback (package:flutter/src/widgets/layout_builder.dart:247:18)
#34     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3101:19)
#35     _LayoutBuilderElement._rebuildWithConstraints (package:flutter/src/widgets/layout_builder.dart:270:12)
#36     RenderAbstractLayoutBuilderMixin.layoutCallback (package:flutter/src/widgets/layout_builder.dart:333:38)
#37     RenderObjectWithLayoutCallbackMixin.runLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:4302:33)
#38     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:3026:17)
#39     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1223:15)
#40     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:3025:14)
#41     RenderObjectWithLayoutCallbackMixin.runLayoutCallback (package:flutter/src/rendering/object.dart:4302:5)
#42     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:447:5)
#43     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2755:7)
#44     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1174:18)
#45     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1187:15)
#46     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:643:23)
#47     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1573:13)
#48     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:509:5)
#49     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1430:15)
#50     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1345:9)
#51     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1198:5)
#52     _rootRun (dart:async/zone_root.dart:35:13)
#53     _CustomZone.run (dart:async/zone.dart:726:19)
#54     _CustomZone.runGuarded (dart:async/zone.dart:625:7)
#55     _invoke (dart:ui/hooks.dart:425:10)
#56     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:447:5)
#57     _drawFrame (dart:ui/hooks.dart:395:31)
ERROR [widgets library] Incorrect use of ParentDataWidget. The ParentDataWidget Expanded(flex: 3) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type StackParentData. Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets. The offending Expanded is currently placed inside a Stack widget. The ownership chain for the RenderObject that received the incompatible parent data was: SizedBox.shrink ← Expanded ← Spacer ← Stack ← MediaQuery ← Padding ← SafeArea ← LayoutBuilder ← OrientationBuilder ← PerformingOverlay ← ⋯
Incorrect use of ParentDataWidget.
The ParentDataWidget Expanded(flex: 3) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type StackParentData.
Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a Stack widget.
The ownership chain for the RenderObject that received the incompatible parent data was:
  SizedBox.shrink ← Expanded ← Spacer ← Stack ← MediaQuery ← Padding ← SafeArea ← LayoutBuilder ← OrientationBuilder ← PerformingOverlay ← ⋯
#0      RenderObjectElement._updateParentData.<anonymous closure> (package:flutter/src/widgets/framework.dart:6882:11)
#1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:6899:6)
#2      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6945:7)
#3      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6801:5)
#4      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:7114:11)
#5      Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#6      Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#8      Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#9      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5799:5)
#10     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5793:5)
#11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#12     Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#14     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5799:5)
#16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5793:5)
#17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4587:20)
#18     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:7264:36)
#19     Element.updateChild (package:flutter/src/widgets/framework.dart:4059:18)
#20     Element.updateChildren (package:flutter/src/widgets/framework.dart:4255:32)
#21     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7295:17)
#22     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#24     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#25     ProxyElement.update (package:flutter/src/widgets/framework.dart:6149:5)
#26     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#27     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7122:14)
#28     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#29     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5841:16)
#30     Element.rebuild (package:flutter/src/widgets/framework.dart:5529:7)
#31     StatelessElement.update (package:flutter/src/widgets/framework.dart:5895:5)
#32     Element.updateChild (package:flutter/src/widgets/framework.dart:4037:15)
#33     _LayoutBuilderElement._rebuildWithConstraints.updateChildCallback (package:flutter/src/widgets/layout_builder.dart:247:18)
#34     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3101:19)
#35     _LayoutBuilderElement._rebuildWithConstraints (package:flutter/src/widgets/layout_builder.dart:270:12)
#36     RenderAbstractLayoutBuilderMixin.layoutCallback (package:flutter/src/widgets/layout_builder.dart:333:38)
#37     RenderObjectWithLayoutCallbackMixin.runLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:4302:33)
#38     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:3026:17)
#39     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1223:15)
#40     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:3025:14)
#41     RenderObjectWithLayoutCallbackMixin.runLayoutCallback (package:flutter/src/rendering/object.dart:4302:5)
#42     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:447:5)
#43     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2755:7)
#44     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1174:18)
#45     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1187:15)
#46     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:643:23)
#47     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1573:13)
#48     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:509:5)
#49     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1430:15)
#50     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1345:9)
#51     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1198:5)
#52     _rootRun (dart:async/zone_root.dart:35:13)
#53     _CustomZone.run (dart:async/zone.dart:726:19)
#54     _CustomZone.runGuarded (dart:async/zone.dart:625:7)
#55     _invoke (dart:ui/hooks.dart:425:10)
#56     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:447:5)
#57     _drawFrame (dart:ui/hooks.dart:395:31)
INFO [console] [ENGINE] Тик каунтдауна: осталось 3 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 3 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 3 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 3 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 2 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 1 сек
INFO [console] [ENGINE] Тик каунтдауна: осталось 0 сек
INFO [console] [ENGINE] Кадр обработан. Значение таймера: null -> 7. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 7 -> 7. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 7 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 6. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 6 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 5. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 5 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 4. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 4 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 3. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 3 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 2. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 2 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 1. Флаг execution.isFinished = false
INFO [console] [ENGINE] Кадр обработан. Значение таймера: 1 -> 0. Флаг execution.isFinished = true
INFO [console] [ENGINE] !!! ЗАФИКСИРОВАН ФИНИШ (frame.finished == true) !!!
INFO [console] [ENGINE] Вызов внешнего колбэка onCompleted()
INFO [console] [ENGINE] Финальное закрытие ресурсов
INFO [console] [ENGINE] Вызов closeEverything()
INFO [console] [ENGINE] Сброс таймеров (resetTimers)
INFO [console] [ENGINE] Контроллер успешно закрыт
INFO [console] [ENGINE] Стрим контроллер: onCancel
INFO [console] [ENGINE] Вызов closeEverything()
INFO [console] [ENGINE] Сброс таймеров (resetTimers)
INFO [console] ANGLE_RESEARCH: recording closed, files in /storage/emulated/0/Android/data/team.most.rehabilitation.app/files/angle_research
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/result
INFO [console] [DIO] method: POST
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] content-type: application/json
INFO [console] [DIO] Authorization: Bearer 769|gkZC637vqE4kWnA8p9C3n765NKcBnXVs6pynlXauecff7ad5
INFO [console] [DIO] data:
INFO [console] [DIO] {rehabilitation_day_id: 3140, unit_id: 1095, results: [{exercise_id: 101, sequence_number: 1, completion_status: completed, score_interpretation: not_evaluated}]}
INFO [console] [DIO]
INFO [console] [DIO] *** Response ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/result
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, 22 Sep 2026 09:44:02 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-09-22T09:44:02.800829Z","request_id":"5dd28922-7fbf-4680-95f0-65ac505754f6","version":"v1"},"data":{"results":[{"id":101,"sequence_number":1,"completion_status":"completed","score_percent":null,"score_interpretation":"not_evaluated","exercise_image":"https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png","instruction":{"exercise_name":"Тест скрининг","video":"https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov","inventory":"Сантиметровая лента","warning":"Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. ","general_description":"В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице ","steps":[{"exercise_id":101,"sequence_number":1,"step_text":"Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабочая нога - та, которую вы будете сгибать)."},{"exercise_id":101,"sequence_number":2,"step_text":"Руки разместите в удобном положении, которое обеспечивает устойчивость. "},{"exercise_id":101,"sequence_number":3,"step_text":"Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. "},{"exercise_id":101,"sequence_number":4,"step_text":"Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно."},{"exercise_id":101,"sequence_number":5,"step_text":"Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание."}],"measurement":null}}],"workout_id":140,"workout_duration_start":10,"workout_duration_end":20,"training_score":{"score_percent":null,"score_interpretation":"not_evaluated"}}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-09-22T09:44:02.800829Z, request_id: 5dd28922-7fbf-4680-95f0-65ac505754f6, version: v1}, data: {results: [{id: 101, sequence_number: 1, completion_status: completed, score_percent: null, score_interpretation: not_evaluated, exercise_image: https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png, instruction: {exercise_name: Тест скрининг, video: https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov, inventory: Сантиметровая лента, warning: Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. , general_description: В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице , steps: [{exercise_id: 101, sequence_number: 1, step_text: Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабоча
INFO [console] я нога - та, которую вы будете сгибать).}, {exercise_id: 101, sequence_number: 2, step_text: Руки разместите в удобном положении, которое обеспечивает устойчивость. }, {exercise_id: 101, sequence_number: 3, step_text: Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. }, {exercise_id: 101, sequence_number: 4, step_text: Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно.}, {exercise_id: 101, sequence_number: 5, step_text: Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание.}], measurement: null}}], workout_id: 140, workout_duration_start: 10, workout_duration_end: 20, training_score: {score_percent: null, score_interpretation: not_evaluated}}}
INFO [console] [DIO] *** Request ***
INFO [console] [DIO] uri: https://rehabilitation.most.team/api/v1/patient/workout/result?unit_id=1095&rehabilitation_day_id=3140&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 769|gkZC637vqE4kWnA8p9C3n765NKcBnXVs6pynlXauecff7ad5
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/result?unit_id=1095&rehabilitation_day_id=3140&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, 22 Sep 2026 09:44:03 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-09-22T09:44:03.731744Z","request_id":"987a1aac-bbb8-4aa1-b688-ce9ff668f6f0","version":"v1"},"data":{"results":[{"id":101,"sequence_number":1,"completion_status":"completed","score_percent":null,"score_interpretation":"not_evaluated","exercise_image":"https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png","instruction":{"exercise_name":"Тест скрининг","video":"https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov","inventory":"Сантиметровая лента","warning":"Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. ","general_description":"В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице ","steps":[{"exercise_id":101,"sequence_number":1,"step_text":"Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабочая нога - та, которую вы будете сгибать)."},{"exercise_id":101,"sequence_number":2,"step_text":"Руки разместите в удобном положении, которое обеспечивает устойчивость. "},{"exercise_id":101,"sequence_number":3,"step_text":"Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. "},{"exercise_id":101,"sequence_number":4,"step_text":"Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно."},{"exercise_id":101,"sequence_number":5,"step_text":"Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание."}],"measurement":null}}],"workout_id":140,"workout_duration_start":10,"workout_duration_end":20,"training_score":{"score_percent":null,"score_interpretation":"not_evaluated"}}}
INFO [console] [DIO]
INFO [console] ✅ RAW RESPONSE: {success: true, meta: {timestamp: 2026-09-22T09:44:03.731744Z, request_id: 987a1aac-bbb8-4aa1-b688-ce9ff668f6f0, version: v1}, data: {results: [{id: 101, sequence_number: 1, completion_status: completed, score_percent: null, score_interpretation: not_evaluated, exercise_image: https://rehabilitation.most.team/storage/exercise/photos/01M31YCJW3RQPCZCECRBEYH726.png, instruction: {exercise_name: Тест скрининг, video: https://rehabilitation.most.team/storage/exercise/videos/01M31YCJW5APG6WCD26WF9N82P.mov, inventory: Сантиметровая лента, warning: Вы можете чувствовать легкий дискомфорт или терпимую боль в колене, если боль стала умеренной, то прекратите выполнение упражнение или уменьшите угол сгибания. , general_description: В исходном положении лежа на спине максимально согните рабочую ногу, подводя пятку к ягодице , steps: [{exercise_id: 101, sequence_number: 1, step_text: Лягте на твердую и ровную поверхность. Вы должны быть повернутым боком рабочей ноги к камере (рабоча
INFO [console] я нога - та, которую вы будете сгибать).}, {exercise_id: 101, sequence_number: 2, step_text: Руки разместите в удобном положении, которое обеспечивает устойчивость. }, {exercise_id: 101, sequence_number: 3, step_text: Если рабочая нога является оперированной/поврежденной, то вы можете согнуть здоровую ногу для большей устойчивости в пояснице. }, {exercise_id: 101, sequence_number: 4, step_text: Сгибайте колено рабочей ноги до тех пор, пока не почувствуете лёгкое натяжение или терпимый дискомфорт в передней или внутренней части колена. Острой боли быть не должно.}, {exercise_id: 101, sequence_number: 5, step_text: Удерживайте максимальное согнутое положение в колене, пятка на полу и близится к ягодице. При этом не задерживайте дыхание.}], measurement: null}}], workout_id: 140, workout_duration_start: 10, workout_duration_end: 20, training_score: {score_percent: null, score_interpretation: not_evaluated}}}
INFO [console] Request query: {start_date: 2026-08-31, end_date: 2026-10-04}
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/period?start_date=2026-08-31&end_date=2026-10-04
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: {}
$
250 строкUTF-8LIVE