f0f8f8b9d8a4650d86369b17d80f601a1adeb4dd
알고리즘 팀 확정(ej.won, 2026-10-13): 기본은 기존 규칙 그대로 두고, 0~4cm 전부 CH3 가 안 잡히는 경우에만 중앙 채널(nch)이 가장 많이 잡힌 위치들 중 cap_frac 최소를 고른다. 동률이면 낮은 cm. nch 가 전부 0 이면 고를 근거가 없어 지금처럼 재부착이다. 배경: 2026-10-12 P8 은 세 자세 7세션, 위치 측정 23회 전부 CH3 0/11 이라 세 번 다 "최적 위치 없음"으로 끝났고 간호사가 손으로 골라 "이대로 진행"했다. 폴백을 적용하면 supine 0cm(nch 3), sitting 1cm(nch 1) 이 나오고 standing(전부 nch 0)은 여전히 재부착이다. - AnchorSelection.selectBest: 후보(CH3) 없음 → fallbackNoCh3. 새 가지 AnchorSelectRule.NO_CH3_MAX_NCH (wire `no_ch3_max_nch`) 로 요약 `select_rule` 에서 가른다. Python 레퍼런스에 아직 없는 가지라 그 세션은 `selection_verified_against_reference=false`. - 정렬 완료 문구에 "CH3 가 잡힌 위치가 없어 … 폴백" 한 줄. 재부착 문구는 "벽이 잡힌 위치가 하나도 없습니다"로 — 이제 그 경우에만 온다. - 테스트: AnchorSelectionNoCh3FallbackTest 7건(P8 10-12 수치 재현 포함). 대조 테스트는 Python 정답이 재부착인 19케이스를 임시로 폴백 규칙으로 검사한다 — Python 에 폴백이 들어가 정답지를 다시 뽑으면 그 분기를 지운다. CenterRuleTest 의 "후보 없음" 케이스를 새 규칙에 맞췄다. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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)로
재시도 대상을 가린다.
Description
Languages
Kotlin
97%
Python
3%