feat(B09): 표본이 얇은 노임에 신뢰도 표시 + 층따기 사전 밑수 정정

PLAN 9-6 · 8-32 두 잔손질.

① 미공표 직종 신뢰도 플래그 (9-6)
   지식DB 가 「단가 채택 시 플래그 유지 필요」(노임단가_적용 §2-3) ·
   「해당 단가 사용 시 경고 표시」(원가_입력변수_사전)로 두었는데 노임 층에 없었음.
   - load_labor_reliability() — 원문 기호 `*`(조사현장 5개 미만)·`**`(미조사) 그대로.
     정상 공표 직종은 아예 안 담음(빈 값과 「정상」을 구별할 일이 없게).
   - PriceTitle.reliability — 노임 제목 전부 + 조종원 줄에도 같이 붙임.
   - build_summary 의 labor_reliability → 화면 힌트 줄로 경고.
   ⚠ 금액을 막지 않음 — 값은 그대로 서고 「조사현장이 적다」는 사실만 나름.
   ⚠ 내역에 실제로 실린 것만 경고 — 카탈로그 40직종을 다 띄우면 쓰지도 않는 직종이
     화면을 채움. 실측 둘: 1037 벌목부 · 1050 일반기계운전사(지식DB 예시 그대로).

② 층따기 사전 밑수 (8-32)
   원가_출력변수_사전 B2-9 가 「㎡·m」였음. 품셈 9-18 은 ㎥ 당이고, 우리도 확정 2차 ①
   로 면적이 정본이되 길이를 곱해 ㎥ 로 내보내고 있음. 두 축을 한 칸에 적어 ㎡ 로
   내도 되는 것처럼 읽히던 자리 — 밑수를 ㎥ 로 고치고 까닭을 비고에 적음.
   코드는 이미 ㎥ 로 내보내 수치 변화 없음.

시험 여섯 신설 · 전체 1182 통과 · 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-09 19:47:43 +09:00
co-authored by Claude Opus 5
parent 5bf4ff8d1f
commit c59f36eccd
3 changed files with 114 additions and 0 deletions
+13
View File
@@ -82,6 +82,8 @@ interface UnitPriceListDto {
unit_prices: number;
machine_hourly: number;
notes: string[];
// 표본이 얇은 노임 — 금액은 서 있고 「조사현장이 적다」는 사실만 알린다.
labor_reliability: Array<{ code: string; name: string; flag: string; why: string }>;
};
rows: UnitPriceRow[];
}
@@ -175,6 +177,8 @@ function injectStyles(): void {
}
.b09-panel__actions { display: flex; gap: var(--space-xs, 4px); margin-top: var(--space-sm, 8px); }
.b09-hint { font-size: var(--font-size-xs, 12px); color: var(--color-text-secondary); }
/* 표본이 얇은 노임 — 막는 것이 아니라 눈에 띄기만 하면 된다. */
.b09-hint--warn { color: var(--color-warning-text, #8a5a00); }
/* ⚠ min-width: 0 이 빠지면 **표가 넓은 만큼 이 칸이 통째로 밀려 나간다**(2026-09-08 실측:
창 620 에서 1,190px 넘침). flex 자식의 기본 최소폭이 auto 라 안쪽 표의 최소폭
@@ -849,6 +853,15 @@ export async function renderB09Estimation(root: HTMLElement): Promise<void> {
line.textContent = note;
body.append(line);
}
// ⚠ 표본이 얇은 노임(`*` 조사현장 5개 미만 · `**` 미조사)이 내역에 실렸으면 알린다.
// 금액을 막지 않는다 — 값은 그대로 서고 **무엇이 얇은지**만 말한다
// (지식DB `노임단가_적용 §2-3` 「단가 채택 시 플래그 유지 필요」).
for (const item of unitPriceList.summary.labor_reliability ?? []) {
const line = document.createElement("div");
line.className = "b09-hint b09-hint--warn";
line.textContent = `⚠ ${item.name}(${item.code}) ${item.flag} — ${item.why}`;
body.append(line);
}
body.append(
buildUnitPriceList(unitPriceList, selectedUnitPrice, (code) => {
void openUnitPrice(code);
@@ -125,6 +125,13 @@ def build_summary(build: UnitPriceBuild) -> dict:
"skipped_work_items": len(build.skipped),
"incomplete_machines": len(build.incomplete_machines),
"kinds": kinds,
# ⚠ 표본이 얇은 노임이 내역에 실렸으면 **화면이 말해야 한다** — 금액은 그대로 서고
# 「이 단가는 조사현장이 적다」만 알린다(지식DB `노임단가_적용 §2-3`
# 「단가 채택 시 플래그 유지 필요」, 2026-09-09에 이음).
"labor_reliability": [
{"code": code, "name": name, "flag": flag, "why": why}
for code, (name, flag, why) in sorted(build.labor_reliability.items())
],
# ⚠ 지금 상태를 화면에 그대로 알린다 (PLAN 9-6 미결).
"notes": _status_notes(),
}