"""규격이 열로 선 표(관부설 12-11) — 규격 칸·비고를 읽어 줄은 서고 못 넣는 줄은 까닭으로 드러남. 2026-09-14 축 C 1장 ② (브레인 차례 · 판정 불필요). 원문 = 산림사업 표준품셈 12-11-1·2·3. ① 원문 비고 「별산」·「별도계산」·「설계수량」(〃 · 병합 칸 포함)은 **안 넣는 줄**로 까닭을 남김 ② 규격 칸(「1:2」)과 관경 열(「∅800mm」)이 조인 키 — 접합몰탈·고무링이 자재 줄로 섬 ③ 기종이 여럿인 크레인은 **고르지 않고** 「규격 미정 · 원문 규격 10ton」 ④ 옆 칸 규격 「40.64㎝」 = 카탈로그 절단기 40.64 """ from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT)) from B09_Estimation.B09_Estimation_ResourceAxis import ( # noqa: E402 build_resource_axis, load_combined_catalog, load_work_item_master, ) AXIS = build_resource_axis(load_work_item_master(), load_combined_catalog()) def _unmatched(code: str) -> dict[str, str]: return {u.cell: u.reason for u in AXIS.unmatched if u.work_item_code == code} def _rows(code: str) -> list: return [r for r in AXIS.rows if r.work_item_code == code] def test_원문_비고대로_안_넣는_줄은_까닭을_남긴다() -> None: vr = _unmatched("FP-12-11-01") assert "별도계산" in vr["VR관"] and "설계수량" in vr["기초콘크리트"] assert "설계수량" in vr["거 푸 집"] # 「〃」 hume = _unmatched("FP-12-11-02") assert "별산" in hume["흄 관"] and "설계수량" in hume["거 푸 집"] # 병합 칸 corrugated = _unmatched("FP-12-11-03") assert "필요시적용" in corrugated["커플링밴드"] and "설계수량" in corrugated["모래부설"] def test_규격_칸과_관경_열이_조인_키() -> None: rings = { r.variant: r.resource_spec for r in _rows("FP-12-11-01") if r.resource_name == "고무링" } assert rings == {"∅800mm": "∅800mm", "∅1000mm": "∅1000mm", "∅1200mm": "∅1200mm"} mortar = [r for r in _rows("FP-12-11-02") if r.resource_name == "접합몰탈"] assert {r.resource_spec for r in mortar} == {"1:2"} and len(mortar) == 3 def test_크레인은_고르지_않고_원문_규격을_보인다() -> None: reason = _unmatched("FP-12-11-03")["크레인"] assert "규격 미정" in reason and "원문 규격 5ton" in reason assert not any(r.resource_name.startswith("크레인") for r in _rows("FP-12-11-03")) def test_절단기_40_64cm_는_카탈로그_40_64() -> None: cutters = [r for r in _rows("FP-12-11-02") if r.resource_name == "절단기"] assert [(r.resource_code, str(r.amount)) for r in cutters] == [("7620-0003", "0.93")]