Files
VesiscanClinicalAndroid/app/src/main/java/com/example/medilightv2android/models/ClinicalSession.kt
T
dw.jang f7a036ec34 CLINICAL: Step에 부가 설명 추가 (치골 위로 N cm)
ClinicalStep enum에 description 필드 추가하고 ClinicalHomeView에서
선택된 Step의 설명을 segmented control 아래에 표시.

설명:
- ALIGN_0CM: 기기 아래 끝이 치골 바로 위
- ALIGN_1CM ~ 4CM: 치골 위로 N cm
- BV: Cradle 부착 후 본측정

UI 표시 위치: Step 라디오 그룹 바로 아래 한 줄, MlPrimary 색상 + 화살표(→).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 17:38:41 +09:00

60 lines
2.1 KiB
Kotlin

package com.example.medilightv2android.models
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
/**
* 임상 R&D 측정 — "한 측정 단위" 모델.
*
* 한 ClinicalSession = 한 라벨 = 한 폴더 = 한 측정 사이클.
* 사용자가 BLE 연결 후 매번 자세/위치를 입력하고 측정 진행 → Back 시 폴더 finalize.
*
* 디바이스 식별자는 BLE 연결된 기기 이름(예: VBT26050202)을 자동으로 사용.
*
* 데이터 구조 (한 측정당):
* Downloads/VesiScan_Sessions/{folderName}/
* ├─ meta.json
* ├─ adc.csv
* ├─ placements.jsonl (alignment) or events.jsonl (BV)
* └─ ble.log
*/
enum class ClinicalPosture(val label: String) {
SUPINE("Supine"), SITTING("Sitting"), STANDING("Standing")
}
/**
* 측정 단계.
* - ALIGN_0CM ~ ALIGN_4CM: 정렬모드 알고리즘 개발용 (기기 아래 끝 기준 치골 위 0~4cm)
* - BV: cradle 부착 후 본측정 (방광 추정 알고리즘 개발용)
*/
enum class ClinicalStep(val label: String, val description: String, val isAlignment: Boolean) {
ALIGN_0CM("0 cm", "기기 아래 끝이 치골 바로 위", true),
ALIGN_1CM("1 cm", "치골 위로 1 cm", true),
ALIGN_2CM("2 cm", "치골 위로 2 cm", true),
ALIGN_3CM("3 cm", "치골 위로 3 cm", true),
ALIGN_4CM("4 cm", "치골 위로 4 cm", true),
BV("BV", "Cradle 부착 후 본측정", false)
}
data class ClinicalSession(
val deviceName: String, // BLE 기기 이름 (예: "VBT26050202")
val posture: ClinicalPosture,
val step: ClinicalStep,
val examiner: String = "",
val notes: String = "",
val startedAt: Long = System.currentTimeMillis(),
var endedAt: Long? = null
) {
private val folderFmt = SimpleDateFormat("yyyy-MM-dd_HHmmss", Locale.US)
/** "VBT26050202_SUPINE_ALIGN_0CM_2026-05-28_14-30-15" */
val folderName: String
get() = "${deviceName}_${posture.name}_${step.name}_${folderFmt.format(Date(startedAt))}"
/** clinical_label 컬럼/필드 값 (라벨링 자동) */
val label: String
get() = "${deviceName}_${posture.name}_${step.name}"
}