dw.jang 839f8d70ac fix(align): 새 정렬 세션이 첫 파일을 쓰기 전에 같은 폴더의 앞 세션을 prev_HHmm/ 으로 옮긴다
정렬 폴더(`align_{자세}/`)는 환자·날짜·자세로만 갈리고 시작 시각이 키에 없다. 같은 날 같은
자세를 다시 정렬하면 새 세션은 잰 위치의 파일만 덮어쓰고 나머지는 앞 세션 것이 그대로
남았다 — 2026-10-15 팬텀 세션에서 0cm 만 쟀는데 앞 세션의 1~4cm 80 record 가 같이
올라갔고, 앞 세션의 0cm 원본은 덮여 사라졌다. 84296b0 은 업로드만 걸렀다(요약 attempts).

- HospitalRunStore.archivePreviousAlignRun: 정렬 폴더에 다른 세션의 파일이 있으면
  세션 파일(탐색·확인·좌우·좌우 흐름·재부착과 IMU)·align_result.json·업로드 마커를
  `prev_HHmm/`(앞 세션 started_at)으로 옮긴다. 요약 started_at 이 이 세션과 같으면
  손대지 않는다. 요약이 없거나 시각이 없으면 가장 오래된 파일의 수정 시각. 이름이
  겹치면 `_2`. standing 확인 파일은 그날·자세의 것이라 남기고 `standing_confirm`
  판정만 남긴 요약을 다시 써서 뒤의 정렬 요약이 이어받게 한다.
- AnchorAlignView: 첫 파일을 쓰기 직전 세션당 한 번 부른다. [처음부터 다시 정렬] 이
  되돌린다.
- HospitalLabdbUploader.pendingAligns: 각 정렬 폴더 뒤에 `prev_*` 를 붙인다 — 마커가
  같이 옮겨지므로 못 올라간 세션만 남는다.
- AlignLabdbPayload.sessionBase: 보관 폴더에서 올려도 환자·날짜·자세는 정렬 폴더 기준.
- 테스트: HospitalRunStoreAlignArchiveTest(신규 7) 외 pending·sessionBase 케이스.

업로드 필터(84296b0)는 옛 앱이 만든 폴더를 위한 이중 안전장치로 그대로 둔다.

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