fix(B08): 씨앗뿜어붙이기 밑수 ㎡ 추가 + 시공량 모양을 밑수로 안 받게 막음

⚠ 아홉 중 여덟째 — FP-05-24 는 원문 L2769·L2794 절 머리 아래 「(㎡당)」인데
「단위:」 글자 없이 **괄호만** 있어 마스터가 못 읽던 자리(원문 열어 확인).

⚠ 그리고 매핑 밑수 칸은 **사람이 손으로 적는 자리**라, 품셈에 섞여 있는
「(㎥/1대, 1일)」 같은 **시공량**을 적을 수 있음 — 그것은 밑수의 **역수**라
받으면 그 공종이 조용히 뒤집힌 단위를 가짐. `is_quantity_unit()` 으로 좁게 막음
(나눗셈·쉼표가 있거나 「일당·조·인」이면 안 받음). 애매하면 안 받는 쪽 —
안 받으면 대조가 없을 뿐이고, 잘못 받으면 틀린 단위로 검사를 통과시킴.

시험 741 통과 (B05 코리도 1건 기존 깨짐, 무관).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-08 14:18:06 +09:00
co-authored by Claude Opus 5
parent c81c11e330
commit 385f5c303d
2 changed files with 24 additions and 2 deletions
@@ -148,6 +148,26 @@ def _latest_dataset_path(directory: Path | None = None) -> Path | None:
return files[-1] if files else None
#: ⚠ **공종 수량 단위가 아닌 것** — 품셈 절 머리에 섞여 있는 모양들이다(2026-09-08 B09 전수).
#: `(㎥/1대, 1일)` 는 **시공량**이라 「1대가 하루에 몇 ㎥」이고, 밑수(「1㎥ 에 얼마」)의
#: **역수**다. 그대로 밑수로 받으면 그 공종이 조용히 뒤집힌 단위를 갖는다.
#: `(일당)`·`(조)`·`(인)` 은 **품의 단위**이지 공종 단위가 아니다.
NON_QUANTITY_UNITS = frozenset({"일당", "", "", "", "", "인당"})
def is_quantity_unit(unit: str) -> bool:
"""그 글자가 **공종 수량의 밑수 단위**로 쓸 수 있는가.
⚠ **좁게 본다** — 애매하면 안 받는다. 안 받으면 대조가 없을 뿐이고, 잘못 받으면
**틀린 단위로 검사를 통과시킨다**(그쪽이 더 나쁘다).
"""
text = str(unit or "").strip()
if not text or text in NON_QUANTITY_UNITS:
return False
# 「㎥/1대, 1일」처럼 나눗셈·쉼표가 있으면 시공량이거나 밑수가 둘이다.
return "/" not in text and "," not in text
@dataclass
class WorkItemMapping:
"""수량 줄 → 공종 마스터 코드. 못 찾으면 `None` 을 돌려주고 부른 쪽이 목록에 남긴다."""
@@ -173,7 +193,7 @@ class WorkItemMapping:
found: dict[str, str] = {}
for row in (*self.earthwork, *self.haul, *self.structure):
code, unit = row.get("work_item_code"), row.get("basis_unit")
if code and unit:
if code and unit and is_quantity_unit(str(unit)):
found[str(code)] = str(unit)
return found
@@ -101,7 +101,9 @@
{
"group": "초류종자살포",
"work_item_code": "FP-05-24",
"master_name": "씨앗뿜어붙이기"
"master_name": "씨앗뿜어붙이기",
"basis_unit": "㎡",
"basis_source": "산림사업 표준품셈(고시 2025-82) 원문 L2769·L2794 — 5-24-1·5-24-2 절 머리 바로 아래 「(㎡당)」. ⚠ 「단위:」 글자 없이 **괄호만** 적힌 모양이라 마스터가 못 읽은 자리(2026-09-08 원문 대조)."
},
{
"group": "되메우기",