"""말없이 버려지던 기계·연료 줄 — 2026-09-15 브레인 ㉠(인력만으로 싸게 서던 공종 막기). 자원 축 줄 읽기가 세 자리에서 기계·연료 줄을 「못 붙은 줄」 목록에도 안 올리고 버렸음 → 그 공종 단가가 인력만으로 **막히지도 사유도 없이** 싸게 섬(사용자는 값이 맞는 줄 앎). ① 규격이 이름 앞 「0.8㎥ 굴착기 | h | 0.25」(14-2 · 14-1) — 숫자로 시작해 머리글로 걸러짐 ② 값·이름 둘 다 못 읽음 「디젤엔진(15HP) | 11.19kW」(12-26) · 「연료비 | 소요량 적용 | ps × 0.253ℓ × 6h」(10-7-4) ③ 수량 빈 연료 줄 「연료비 | 경유 | L | 」(10-8-3) — 숫자 없는 줄은 머리 줄로 봄 ⇒ 기계·연료로 보이는 줄은 「못 맞춤 + 일부만」 — 틀린 금액보다 안 선 금액(사유 또렷이). """ from __future__ import annotations from B09_Estimation.B09_Estimation_UnitPrice import cached_build def test_기계_연료_줄이_안_붙은_다섯_공종은_일부만으로_막히고_사유() -> None: build = cached_build() # 14-1·14-2 는 뒤이어 시간 줄 판정표가 읽어 풀림(`test_b09_hour_rows` · 2026-09-15 ㉡-3) for code in ("FP-12-26", "FP-10-08-03", "FP-10-07-04"): assert code in build.partial_ratio, code assert "기계·연료 줄" in (build.component_gaps.get(code) or ""), ( code, build.component_gaps.get(code), ) left = " ".join(build.unattached.get("FP-12-26", [])) assert "디젤엔진" in left and "양수기" in left, left assert "FP-14-02" not in build.partial_ratio and "FP-14-01" not in build.partial_ratio def test_머리_줄과_인력만인_정상_공종은_안_막힘() -> None: build = cached_build() for code in ("FP-09-15-02", "FP-12-12", "FP-04-02-02", "FP-09-03-02"): assert code not in build.partial_ratio, code def test_파쇄_모듈이_쓰는_파쇄기_줄은_막힘으로_안_남음() -> None: build = cached_build() assert "FP-08-11" not in build.partial_ratio assert "기계·연료 줄" not in (build.component_gaps.get("FP-08-11") or "") assert not any( "파쇄기 " in label or label == "이동식 임목 파쇄기" for label in build.unattached.get("FP-08-11", []) )