dw.jang 30aaf310e3 fix(align): 진행 기록을 바로잡는다 — 부착 위치는 마지막 잰 자리, 수집 중 후보 없음은 탐색 미완료, 확인 뒤 best 가 옮기면 확정 해제
2026-10-08 P7(Supine) 두 세션과 2026-10-12 보고(Supine·Sitting 모두 CH3 미검출 상태에서
"이대로 진행")를 대조하다 찾은 세 가지다. 셋 다 [이대로 임상 측정 진행]이 남기는 기록
(proceed_anchor_cm · anchor_basis)과 그 뒤 임상 600 의 anchor_cm 에 바로 들어간다.

① 부착 위치가 프로브가 있던 자리가 아니었다. 수집 중에는 한 자리를 재면 화면 위치(cm)가
이미 다음 빈 자리로 넘어가고, 다 잰 뒤에는 best 자리로 "가서 재라"로 바뀐다 — 그 화면 위치를
그대로 기록했다. P7 1404: 0cm 를 재고 바로 진행했는데 요약·재부착 확인 파일·600 의 anchor_cm
이 모두 1cm 로 남았다. 간호사는 0cm 에서 쟀다고 했고 그 말이 맞았다. 이제 확정 전에는 마지막
측정 레코드의 cm 를, 확정 뒤에는 best 자리를 기록한다(recordedAnchorCm).

② 수집 중 후보가 없으면 "재부착 권고 무시"로 적었다. 재부착 권고는 0~4cm 를 다 잰 뒤의
판정인데 지시 카드는 sweeping 을 보고 버튼 쪽만 안 봤다. P7 1404 는 0cm 하나 재고 진행한
세션인데 reattach_override 로 남았다 — 실제는 "수동 지정 (탐색 미완료)"다. sweeping 을
컴포저블 최상위로 올려 카드·버튼·[처음부터 다시 정렬] 이 같은 값을 보게 했다(proceedBasis).

③ 확인 측정 뒤 best 가 다른 자리로 옮겨가도 confirmDone 이 풀리지 않았다
(`if (!isConfirm) confirmDone = false`). P7 1358 은 확인 측정마다 CH3 가 안 잡혀 best 가
1 → 2 → 4 → 3 으로 옮겨갔다 — 중간에 한 번 확정이 떴으면 3cm 를 한 번도 안 쟀는데 초록
"3cm 그대로 — 좌우 맞추기"가 보이고 근거는 알고리즘 확정으로 남는다. 후보가 사라진 경우
(target null)도 같이 푼다(afterMeasure).

분석 시: 이 커밋 전 빌드로 받은 세션은 anchor_cm 을 "그 직전에 잰 자리"로, 수집 중 진행한
reattach_override 는 manual 로 읽어야 한다. P7 1404 와 2026-10-12 세 자세 세션이 해당한다.

RecordedAnchorCmTest 5 · ProceedBasisTest 4 · AfterMeasureTest 5 가 잠근다.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 14:16:02 +09:00

VesiscanClinicalAndroid

VesiScan 병원 임상 측정 앱 (Android · Kotlin · Compose). 정해진 프로토콜로 환자 데이터를 받아 폰에 저장하고 labdb 로 올리는 사내·병원 임상 전용 앱이다. 일반 사용자 앱이 아니다.

  • applicationId com.medithings.vesiscan.demo · 플레이버 demo(임상) / dev
  • 빌드 · 설치: ./gradlew :app:assembleDemoDebug → adb install -r app/build/outputs/apk/demo/debug/app-demo-debug.apk
  • 단위시험: ./gradlew :app:testDemoDebugUnitTest
  • local.properties 는 커밋하지 않는다(local.properties.template 참조)

어디서 왔나

구저장소 medithings-rnd/VesiscanBasicAndroid 의 demo-final 브랜치를 히스토리째 (2026-03-09 초기 커밋부터) 떼어 2026-10-01 에 이 저장소의 main 으로 옮겼다. 그 브랜치는 구저장소에 보관만 하고 더 쓰지 않는다. 일반 사용자 앱은 vesiscan_pre_product/vesiscan_android_user.

화면 흐름 (병원 임상)

연결 → labdb 등록 확인 → 환자명 · 자세 → 그 자세의 정렬(치골 위 0~4cm 탐색 → N cm 확인 → N cm 에서 바로 좌우) → 마킹·떼기·크래들 → 재부착 확인 → 채움 정도마다 측정 → 다음 자세는 정렬부터 다시. 자세한 것은 docs/CLINICAL_ALGORITHM.md §3.6, labdb 적재 모양은 docs/LABDB_DATATYPES.md (600 측정 · 601 정렬).

데이터

폰 Downloads/VesiScan_Hospital/{날짜}_{환자}/ 에 조합별 CSV + IMU, align_{자세}/ 에 그 자세의 정렬 원시·요약(2026-10-01 이전은 align/). labdb 업로드 마커(*.labdb.json, align_*/.labdb_align.json)로 재시도 대상을 가린다.

S
Description
No description provided
Readme 21 MiB
Languages
Kotlin 97%
Python 3%