feat(hospital): Supine 확인 측정의 IMU 평균을 기준각으로 — Sitting 요구 범위를 35+m~55+m 로 민다

35°~55° 는 Supine 에서 프로브가 0° 라는 가정이다. 배가 나온 환자는 누워서도 20° 쯤
나오고, 그러면 Sitting 최적 구간은 55°~75° 다(2026-10-01 제안).

  · Supine 정렬의 확인 측정(N cm, 20 cycle)에서 IMU 평균 기울기 m 을 재
    AppState.supineTiltBaseline 에 두고, 요약 align_result.json 에 confirm_tilt_deg_mean 으로
    남긴다(어느 자세든). 앱을 다시 켜면 그날 Supine 정렬 요약에서 되살린다.
  · PostureTilt.rangeFor/status 가 기준각을 받아 Sitting 범위를 (35+m)..(55+m) 로 민다.
    기준각이 없으면 절대 각도 그대로.
  · 카드: Sitting 에서 "IMU 기울기 n° · Supine 대비 +k°", 띠는 밀린 범위, 문구
    "Sitting 측정 가능 각도 55°~75° (Supine 20° + 35~55)". 기준각이 없으면 "Supine 기준각
    없음" 을 적는다. 다른 자세에서는 "Supine 기준각 20° 저장됨 (Sitting 범위 55°~75°)".
  · run 매니페스트: tilt_deg_required 는 밀린 값, tilt_baseline_supine 추가.
  · 환자가 바뀌면 기준각도 비운다.

시험 PostureTiltTest 기준각 1건 추가 — 전체 191건 · failures 0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 09:43:54 +09:00
parent 6f118f3ee4
commit 346f647857
8 changed files with 122 additions and 14 deletions
@@ -88,8 +88,19 @@ class AppState(private val context: Context) {
/** 지금 자세의 부착 위치와 딸린 것을 비운다. */
fun clearAnchor() { anchors.remove(clinicalPosture) }
/**
* Supine 정렬 확인 측정의 IMU 평균 기울기(도) — Sitting 요구 범위의 기준각 m
* ([com.medithings.vesiscan.models.PostureTilt] 참조, 2026-10-01). null = 아직 없음.
* 환자가 바뀌면 비운다. 앱을 다시 켜면 그날 Supine 정렬 요약(`confirm_tilt_deg_mean`)에서
* 되살린다([com.medithings.vesiscan.services.HospitalRunStore.readConfirmTilt]).
*/
var supineTiltBaseline: Float? by mutableStateOf(null)
/** 전 자세를 비운다 — 환자가 바뀌거나 프로브가 바뀔 때(빔 각도가 달라 정렬이 무효). */
fun clearAllAnchors() { anchors.clear() }
fun clearAllAnchors() {
anchors.clear()
supineTiltBaseline = null
}
/**
* 병원 임상 자세. **정렬 화면과 병원 모드가 같은 값을 봐야 한다.**