fix(clinical): 좌우 정렬을 부착 위치에서 하도록 안내
좌우 단계를 붙이면서 순서를 화면이 말해 주지 않았다.
1단계가 끝난 시점에 프로브는 **최적 위치**에 있고, 실제로 부착할 자리는 그보다 1cm
위다(오프셋 자리는 측정하지 않는다 — 설계상 지표가 나빠 재확인하면 반드시 미달이 뜬다).
그런데 좌우 카드가 그 사이에 "옮기세요" 없이 바로 나왔다.
좌우 균형은 그 높이의 단면에서 정해지는 값이라 높이를 바꾸면 u4·u5 가 달라진다. 옮기기
전에 맞추면 헛일이 되는데, 화면이 순서를 말하지 않으면 간호사마다 갈린다 — 맞춘 뒤
올리는 사람과 올린 뒤 맞추는 사람이 생기고, 둘의 데이터가 다른 조건이 된다.
카드 상단에 부착 위치를 명시하고, 시작 버튼 문구에도 cm 을 박았다("3cm 에서 좌우 정렬
시작"). 누르는 순간에도 어느 높이인지 눈에 들어와야 위 안내를 지나친 경우를 잡는다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -468,6 +468,7 @@ fun AnchorAlignView(appState: AppState) {
|
||||
// ── 2단계: 좌우 정렬 ───────────────────────────────────────
|
||||
// 상하가 정해진 자리에서 프로브를 좌우로만 움직여 CH4·CH5 를 맞춘다.
|
||||
LateralSection(
|
||||
anchorCm = last?.anchorCm,
|
||||
running = lrRunning,
|
||||
commit = lrCommit,
|
||||
accumulated = lrAccum,
|
||||
@@ -559,6 +560,8 @@ fun AnchorAlignView(appState: AppState) {
|
||||
*/
|
||||
@Composable
|
||||
private fun LateralSection(
|
||||
/** 부착 위치(best + 오프셋). 좌우는 **이 높이에서** 맞춰야 한다. */
|
||||
anchorCm: Int?,
|
||||
running: Boolean,
|
||||
commit: LateralGuide.Commit?,
|
||||
accumulated: Int,
|
||||
@@ -587,9 +590,29 @@ private fun LateralSection(
|
||||
if (confirmed) Text("확인됨", fontSize = 12.sp, color = MlSuccess,
|
||||
fontWeight = FontWeight.SemiBold)
|
||||
}
|
||||
Spacer(Modifier.height(4.dp))
|
||||
Spacer(Modifier.height(10.dp))
|
||||
|
||||
// 1단계가 끝난 시점에 프로브는 **최적 위치**에 있고, 부착할 자리는 그보다 1cm
|
||||
// 위다(오프셋 자리는 측정하지 않는다). 좌우 균형은 그 높이의 단면에서 정해지는
|
||||
// 값이라 높이를 바꾸면 u4·u5 가 달라진다 — 옮기기 **전에** 맞추면 헛일이 된다.
|
||||
// 화면이 이걸 말해 주지 않으면 간호사마다 순서가 갈린다.
|
||||
anchorCm?.let { anchor ->
|
||||
Box(
|
||||
Modifier.fillMaxWidth()
|
||||
.background(MlPrimary.copy(alpha = 0.10f), RoundedCornerShape(10.dp))
|
||||
.padding(10.dp)
|
||||
) {
|
||||
Text(
|
||||
"위치는 그대로 두고 프로브를 좌우로만 옮기며 맞춥니다. " +
|
||||
"먼저 프로브를 부착 위치 ${anchor}cm 로 옮기세요. " +
|
||||
"좌우는 그 높이에서 맞춥니다.",
|
||||
fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = MlPrimary,
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.height(10.dp))
|
||||
}
|
||||
|
||||
Text(
|
||||
"높이는 그대로 두고 프로브를 좌우로만 옮기며 맞춥니다. " +
|
||||
"|ch4−ch5| ≤ ${AlignmentConstants.LAT_TOL} 이면 완료입니다.",
|
||||
fontSize = 12.sp, color = MlSecondaryText,
|
||||
)
|
||||
@@ -644,7 +667,18 @@ private fun LateralSection(
|
||||
shape = RoundedCornerShape(12.dp),
|
||||
colors = ButtonDefaults.buttonColors(
|
||||
containerColor = if (running) MlCritical else MlPrimary),
|
||||
) { Text(if (running) "정지" else "좌우 정렬 시작", fontWeight = FontWeight.Bold) }
|
||||
) {
|
||||
// 버튼 문구에 cm 을 박아 둔다 — 누르는 순간에도 "어느 높이에서" 가
|
||||
// 눈에 들어와야 위 안내를 지나친 경우를 잡는다.
|
||||
Text(
|
||||
when {
|
||||
running -> "정지"
|
||||
anchorCm != null -> "${anchorCm}cm 에서 좌우 정렬 시작"
|
||||
else -> "좌우 정렬 시작"
|
||||
},
|
||||
fontWeight = FontWeight.Bold,
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Button(
|
||||
// 균형에 도달했을 때만 누를 수 있다. 아무 때나 확인 처리하면 이 표시가
|
||||
|
||||
Reference in New Issue
Block a user