Files
2nd/10_Wiki/Topic_Programming/DevOps_and_Security/Remote-Rehabilitation.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

6.1 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-remote-rehabilitation Remote Rehabilitation 10_Wiki/Topics verified self
telerehabilitation
telerehab
digital rehabilitation
none A 0.9 applied
rehabilitation
telehealth
devops
monitoring
healthtech
2026-05-10 pending
language framework
typescript nextjs-supabase-webrtc

Remote Rehabilitation

매 한 줄

"매 clinic 의 walls 의 dissolving — 매 patient 의 home 의 becoming 의 PT studio". Remote rehabilitation (telerehab) 의 PT/OT/cognitive therapy 의 delivering 의 video, sensors, gamified exercises 의 via. 2026 의 standard care 의 stroke recovery, post-op orthopedics, chronic pain — 매 reimbursement (CPT 98975-98981) 의 mainstream 의 making.

매 핵심

매 modalities

  • Synchronous: 매 live video PT session — 매 therapist 의 form correction 의 real-time.
  • Asynchronous: 매 patient 의 records exercise 의 video 의, 매 therapist 의 reviews 의 later.
  • RPM (Remote Patient Monitoring): 매 wearables 의 ROM, gait, HR 의 streaming 의 dashboard 의.
  • DTx (Digital Therapeutics): 매 prescription apps — 매 Akili EndeavorRx, 매 Pear reSET (deprecated).

매 tech stack 의 typical

  • Video: WebRTC (Daily, Twilio Video, Zoom SDK) — 매 HIPAA BAA 의 require.
  • Pose estimation: MediaPipe Pose, 매 Apple Vision Pro Body Tracking, 매 Google ML Kit.
  • Wearables: Apple Watch, Whoop, IMU patches (BioStamp).
  • Backend: FHIR R5 의 EHR integration 의, 매 HL7 Bulk Data API.

매 응용

  1. 매 stroke recovery — 매 mirror therapy 의 VR 의.
  2. 매 post-ACL 의 ROM tracking 의 IMU 의.
  3. 매 chronic low back pain 의 Hinge Health-style 의 daily exercises.

💻 패턴

Pose-based form scoring (MediaPipe + TS)

import { PoseLandmarker, FilesetResolver } from '@mediapipe/tasks-vision';

const vision = await FilesetResolver.forVisionTasks(
  'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10/wasm'
);
const pose = await PoseLandmarker.createFromOptions(vision, {
  baseOptions: { modelAssetPath: '/pose_landmarker_full.task' },
  runningMode: 'VIDEO',
  numPoses: 1,
});

function squatDepthScore(landmarks: any[]): number {
  const hip = landmarks[24], knee = landmarks[26], ankle = landmarks[28];
  const angle = Math.atan2(hip.y - knee.y, hip.x - knee.x) -
                Math.atan2(ankle.y - knee.y, ankle.x - knee.x);
  const deg = Math.abs((angle * 180) / Math.PI);
  return deg < 90 ? 1.0 : Math.max(0, 1 - (deg - 90) / 30);
}

WebRTC 의 HIPAA-compliant session 의

import Daily from '@daily-co/daily-js';

const call = Daily.createCallObject({
  audioSource: true,
  videoSource: true,
  dailyConfig: { useDevicePreferenceCookies: true },
});
await call.join({
  url: signedRoomUrl, // server-issued, BAA-covered
  token: patientJWT,
});
call.on('recording-started', (e) => logToFHIR(e.recordingId, encounterId));

IMU streaming 의 ROM tracking

const device = await navigator.bluetooth.requestDevice({
  filters: [{ services: ['battery_service', 'heart_rate'] }],
  optionalServices: ['0000fff0-0000-1000-8000-00805f9b34fb'],
});
const server = await device.gatt!.connect();
const svc = await server.getPrimaryService('0000fff0-0000-1000-8000-00805f9b34fb');
const ch = await svc.getCharacteristic('0000fff1-0000-1000-8000-00805f9b34fb');
await ch.startNotifications();
ch.addEventListener('characteristicvaluechanged', (e: any) => {
  const dv = e.target.value as DataView;
  const quat = [dv.getFloat32(0), dv.getFloat32(4), dv.getFloat32(8), dv.getFloat32(12)];
  pushROM(quaternionToEulerDeg(quat));
});

FHIR Observation 의 exercise log

const obs = {
  resourceType: 'Observation',
  status: 'final',
  category: [{ coding: [{ system: 'http://terminology.hl7.org/CodeSystem/observation-category', code: 'activity' }] }],
  code: { coding: [{ system: 'http://loinc.org', code: '82290-8', display: 'ROM knee flexion' }] },
  subject: { reference: `Patient/${patientId}` },
  effectiveDateTime: new Date().toISOString(),
  valueQuantity: { value: maxFlexionDeg, unit: 'deg', system: 'http://unitsofmeasure.org' },
};
await fetch(`${FHIR_BASE}/Observation`, { method: 'POST', headers, body: JSON.stringify(obs) });

Adherence nudging (server cron)

export default async (req: Request) => {
  const { data: due } = await sb
    .from('patients')
    .select('id, phone, plan_id')
    .lt('last_session_at', new Date(Date.now() - 86400_000).toISOString());
  await Promise.all(
    due!.map((p) => twilio.messages.create({
      to: p.phone,
      from: TWILIO_FROM,
      body: '오늘 의 5분 의 PT routine 의 done?',
    }))
  );
  return new Response('ok');
};

매 결정 기준

상황 Approach
post-acute stroke hybrid (sync video 2x/wk + async daily)
chronic pain (>3mo) async-first DTx (Hinge, Sword)
post-op week 1-2 sync-heavy + RPM continuous
medicare reimbursement 의 target RTM/RPM (CPT 98975-77 + 98980-81)

기본값: hybrid sync+async + IMU/wearable RPM, FHIR-backed.

🔗 Graph

🤖 LLM 활용

언제: exercise plan generation, session note summarization, patient-facing Q&A (with guardrails). 언제 X: clinical diagnosis, dosage decisions, medical advice 의 unsupervised 의.

안티패턴

  • Consumer Zoom 사용: BAA 없음 — HIPAA violation.
  • PHI 의 client-side log: console.log 의 patient name — 매 audit fail.
  • Pose model 의 cloud-only: latency >200ms — 매 form correction 의 useless.
  • Adherence ignore: 매 70%+ patients drop off by week 3 — nudging 없으면 ROI zero.

🧪 검증 / 중복

  • Verified (CMS RTM/RPM 2025 final rule, Hinge Health 의 BMJ 2024 RCT, MediaPipe Pose docs).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — telerehab tech stack + FHIR/WebRTC/pose patterns