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단계: 좌우 정렬 ───────────────────────────────────────
|
// ── 2단계: 좌우 정렬 ───────────────────────────────────────
|
||||||
// 상하가 정해진 자리에서 프로브를 좌우로만 움직여 CH4·CH5 를 맞춘다.
|
// 상하가 정해진 자리에서 프로브를 좌우로만 움직여 CH4·CH5 를 맞춘다.
|
||||||
LateralSection(
|
LateralSection(
|
||||||
|
anchorCm = last?.anchorCm,
|
||||||
running = lrRunning,
|
running = lrRunning,
|
||||||
commit = lrCommit,
|
commit = lrCommit,
|
||||||
accumulated = lrAccum,
|
accumulated = lrAccum,
|
||||||
@@ -559,6 +560,8 @@ fun AnchorAlignView(appState: AppState) {
|
|||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun LateralSection(
|
private fun LateralSection(
|
||||||
|
/** 부착 위치(best + 오프셋). 좌우는 **이 높이에서** 맞춰야 한다. */
|
||||||
|
anchorCm: Int?,
|
||||||
running: Boolean,
|
running: Boolean,
|
||||||
commit: LateralGuide.Commit?,
|
commit: LateralGuide.Commit?,
|
||||||
accumulated: Int,
|
accumulated: Int,
|
||||||
@@ -587,9 +590,29 @@ private fun LateralSection(
|
|||||||
if (confirmed) Text("확인됨", fontSize = 12.sp, color = MlSuccess,
|
if (confirmed) Text("확인됨", fontSize = 12.sp, color = MlSuccess,
|
||||||
fontWeight = FontWeight.SemiBold)
|
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(
|
Text(
|
||||||
"위치는 그대로 두고 프로브를 좌우로만 옮기며 맞춥니다. " +
|
"높이는 그대로 두고 프로브를 좌우로만 옮기며 맞춥니다. " +
|
||||||
"|ch4−ch5| ≤ ${AlignmentConstants.LAT_TOL} 이면 완료입니다.",
|
"|ch4−ch5| ≤ ${AlignmentConstants.LAT_TOL} 이면 완료입니다.",
|
||||||
fontSize = 12.sp, color = MlSecondaryText,
|
fontSize = 12.sp, color = MlSecondaryText,
|
||||||
)
|
)
|
||||||
@@ -644,7 +667,18 @@ private fun LateralSection(
|
|||||||
shape = RoundedCornerShape(12.dp),
|
shape = RoundedCornerShape(12.dp),
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
containerColor = if (running) MlCritical else MlPrimary),
|
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))
|
Spacer(Modifier.width(8.dp))
|
||||||
Button(
|
Button(
|
||||||
// 균형에 도달했을 때만 누를 수 있다. 아무 때나 확인 처리하면 이 표시가
|
// 균형에 도달했을 때만 누를 수 있다. 아무 때나 확인 처리하면 이 표시가
|
||||||
|
|||||||
Reference in New Issue
Block a user