f7a036ec34
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>
60 lines
2.1 KiB
Kotlin
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}"
|
|
}
|