From 2ab3a658072aae6906df66c06e7634e81a28e8b5 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 14 Sep 2026 05:47:36 +0900 Subject: [PATCH] =?UTF-8?q?@=20feat(b09):=20=EC=8B=A4=ED=96=89=EC=98=88?= =?UTF-8?q?=EC=82=B0=20=EC=B0=A8=EC=95=A1=20=EB=B3=B4=EC=A0=95=20=EB=9C=BB?= =?UTF-8?q?=EC=9D=84=20=ED=99=94=EB=A9=B4=EC=97=90=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=EB=B3=B4=EC=A0=95=EC=9D=80=20=E3=80=8C=EC=95=88=20?= =?UTF-8?q?=EB=AA=B0=EA=B3=A0=20=EB=82=A8=EA=B9=80(=EB=9C=BB=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=EB=8C=80=EA=B8=B0)=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn @ --- B09_Estimation/B09_Estimation_Execution.py | 8 ++++++++ B09_Estimation/B09_Estimation_Router_Execution.py | 6 +++++- B09_Estimation/B09_Estimation_UI_Tab_Execution.ts | 13 +++++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/B09_Estimation/B09_Estimation_Execution.py b/B09_Estimation/B09_Estimation_Execution.py index 2598a5d2..be573cd3 100644 --- a/B09_Estimation/B09_Estimation_Execution.py +++ b/B09_Estimation/B09_Estimation_Execution.py @@ -49,6 +49,14 @@ CORRECTIONS: tuple[tuple[str, str], ...] = ( ("material", "재료비"), ("expense", "경비"), ) +#: 고를 때 무엇이 다른지 — 화면에 그대로 적음(2026-09-14 브레인 지시). +#: ⚠ 「기본보정」은 표본이 오면 고칠 자리 — 지금 뜻은 지어낸 것이 아니라 「안 몰고 남김」. +CORRECTION_HINTS = { + "basic": "차액을 어느 비목에도 안 몰고 남김(뜻 확인 대기)", + "labor": "차액을 노무비에 더함", + "material": "차액을 재료비에 더함", + "expense": "차액을 경비에 더함", +} #: 뜻이 확인 안 된 보정 — 조용히 한쪽에 몰지 않고 차액을 그대로 보임. CORRECTION_NOT_KNOWN = { "basic": "「기본보정」의 뜻이 분석 자료에서 확인 안 됨(27번 §4) — 차액을 안 몰고 그대로 보임", diff --git a/B09_Estimation/B09_Estimation_Router_Execution.py b/B09_Estimation/B09_Estimation_Router_Execution.py index 00df4504..3f4341f1 100644 --- a/B09_Estimation/B09_Estimation_Router_Execution.py +++ b/B09_Estimation/B09_Estimation_Router_Execution.py @@ -15,6 +15,7 @@ from fastapi import APIRouter from fastapi.responses import JSONResponse from B09_Estimation.B09_Estimation_Execution import ( + CORRECTION_HINTS, CORRECTIONS, CUT_UNITS, SETTINGS_KEY, @@ -57,7 +58,10 @@ async def get_execution(project_id: UUID) -> JSONResponse: "settings": stored, "fields": { "cut_units": list(CUT_UNITS), - "corrections": [{"key": k, "label": label} for k, label in CORRECTIONS], + "corrections": [ + {"key": k, "label": label, "hint": CORRECTION_HINTS[k]} + for k, label in CORRECTIONS + ], }, "bill_missing_count": len((bill.get("summary") or {}).get("missing") or []), "limit_note": ( diff --git a/B09_Estimation/B09_Estimation_UI_Tab_Execution.ts b/B09_Estimation/B09_Estimation_UI_Tab_Execution.ts index 57da862f..c6526e51 100644 --- a/B09_Estimation/B09_Estimation_UI_Tab_Execution.ts +++ b/B09_Estimation/B09_Estimation_UI_Tab_Execution.ts @@ -68,7 +68,7 @@ interface ExecutionDto { machines: MachineRow[]; totals: { design: Money; execution: Money }; settings: Settings; - fields: { cut_units: string[]; corrections: { key: string; label: string }[] }; + fields: { cut_units: string[]; corrections: { key: string; label: string; hint: string }[] }; bill_missing_count: number; limit_note: string; } @@ -194,7 +194,7 @@ function input(value: string, onInput: (value: string) => void): HTMLInputElemen } function select( - options: { key: string; label: string }[], + options: { key: string; label: string; hint?: string }[], value: string, onChange: (value: string) => void, ): HTMLSelectElement { @@ -202,6 +202,7 @@ function select( for (const option of options) { const item = el("option", "", option.label); item.value = option.key; + if (option.hint) item.title = option.hint; node.append(item); } node.value = value; @@ -213,6 +214,14 @@ function select( function drawMachines(data: ExecutionDto, draft: Settings): HTMLElement { const box = el("div"); box.append(el("strong", "", `시간/단위당 중기실행단가 — 중기 ${data.machines.length}종`)); + // 차액 보정을 고를 때 무엇이 다른지 — 「기본보정」은 뜻 확인 대기(안 몰고 남김). + box.append( + el( + "div", + "b09ex__meta", + data.fields.corrections.map((option) => `${option.label}: ${option.hint}`).join(" · "), + ), + ); const table = el("table", "b09ex__table"); const head = el("tr"); for (const label of [