feat(B09): 공종 단가 기준 단위를 품셈 원문에서 채움 — 층따기 단위 불일치 드러남

- 일위대가 211개 중 73개가 단위를 못 달고 있었고, 단위가 없으면 내역서의 단위
  불일치 검사가 못 걸림. 층따기가 「㎡ 수량 × ㎥당 단가」로 4,102,708원을 내고
  있었음 (돌쌓기 「m × ㎡당」과 같은 병).
- 원문에 적힌 자리 둘에서만 읽음 — 절 머리 아래 「(단위: ㎥당)」 · 공식형 [주]의
  「Q= ㎥/시간」. 73개 중 12개를 채웠고 나머지는 미확보로 둠.
- ⚠ 「인 당」·「일 당」은 품의 단위이지 공종 단위가 아니라 받지 않음. 틀린 단위로
  검사를 통과시키면 없느니만 못함.
- 자원 줄이 단위를 주면 그 값이 이김 — 원문 조회는 빈 자리만 채움.
- 결과: 층따기 4,102,708원이 「단위가 안 맞습니다」로 바뀜. 본체 합계
  7,837,891 → 3,735,183원. ⚠ 줄어든 것이 맞음 — B08 이 ㎥ 로 보내야 풀림.

시험 6건 추가, 249건 통과.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-08 13:09:27 +09:00
co-authored by Claude Opus 5
parent 188bcfb78c
commit 189108e1f7
2 changed files with 145 additions and 0 deletions
@@ -55,6 +55,7 @@ from B09_Estimation.B09_Estimation_ResourceAxis import (
load_labor_catalog,
load_work_item_master,
)
from B09_Estimation.B09_Estimation_WorkItemUnit import unit_of as work_item_unit
from B09_Estimation.B09_Estimation_Rounding import OutputPlace, round_at
_RE_EMPHASIS = re.compile(r"\*\*(.+?)\*\*")
@@ -390,6 +391,11 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild:
break
unit = next((r.amount_unit for r in rows if r.amount_unit), "")
if not unit:
# ⚠ 단위가 없으면 **내역서의 단위 불일치 검사가 못 걸린다** — 층따기가
# 「㎡ 수량 × ㎥당 단가」로 4,102,708원을 내고 있었다. 품셈 원문에 적힌 것만
# 채우고(「(단위: ㎥당)」·「Q= ㎥/시간」), 없으면 비워 둔다.
unit = work_item_unit(work_item_code) or ""
base_name = names.get(work_item_code) or work_item_code
build.book.add_title(
PriceTitle(