dw.jang 84296b07b4 fix(labdb): 정렬 업로드에 같은 폴더의 앞 세션 파일이 섞이지 않게 한다 — 요약 attempts 기준
정렬 폴더가 환자·날짜·자세로만 갈려서 같은 날 같은 환자를 다시 정렬하면 앞 세션의
align_{n}cm.csv 가 그대로 남고, 페이로드는 폴더의 파일을 전부 담았다. 2026-10-15 팬텀
세션에서 0cm 만 쟀는데 1~4cm 80 record 가 같은 testId 로 올라갔다 — 요약(positions·
swept_to_cm)은 0cm 하나인데 records 는 5위치였다.

- AlignLabdbPayload.isFromThisRun: 요약의 attempts(위치 → 이 세션에서 잰 횟수)로 가른다.
  탐색·확인은 cm ∈ attempts 이고 _rK 의 K ≤ attempts[cm]. 좌우·재부착은 잰 자리 또는
  anchor_cm/proceed_anchor_cm. standing 확인은 폴더 기준으로 번호를 매겨 덮어쓰지 않으므로
  거르지 않는다. attempts 가 없는 요약(옛 앱)은 종전대로 전부 담는다.
- params.stale_files_skipped: 걸러낸 파일 수. 0 이 정상.
- 문서: 그 전 앱으로 올린 601 세션은 positions_measured 와 params.positions 길이가 다르면
  혼입 의심 — align_cm ∉ positions[].align_cm 인 record 를 빼고 본다.

폰 폴더 자체가 세션을 섞는 것(새 0cm 이 옛 0cm 을 덮어씀)은 이 커밋이 다루지 않는다.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-15 15:37:56 +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%