diff --git a/M02_MasterTemplete/M02_Hopyo_SkPatch.py b/M02_MasterTemplete/M02_Hopyo_SkPatch.py index 56097a4c1..8ad3803fb 100644 --- a/M02_MasterTemplete/M02_Hopyo_SkPatch.py +++ b/M02_MasterTemplete/M02_Hopyo_SkPatch.py @@ -56,6 +56,8 @@ LINK = { MACH_IN = "기계" # 기계경비 기초 기계 입력 칸 +# (주연료, 조종원) 없는 기종 → 그 기계경비 기초(M01 로직이 부르는 것과 같음 · 778-2) +SOLO = {(False, False): "GC000273", (True, False): "GC000272", (False, True): "GC000276"} class LinkError(ValueError): @@ -64,11 +66,14 @@ class LinkError(ValueError): def _mach_logics(whole: Any, kinds: set, eq: dict | None = None) -> list[str]: """기계경비 기초 차례 — 갈래 첫 기초(굴착기 = 무한궤도) › 그 밖 · `eq` 가 있으면 - 그 기계(또는 같은 이름 기계)를 고르기에 둔 기초가 앞(778-1).""" + 연료 · 조종원 없는 기종 = 그 기초 하나 · 아니면 그 기계(또는 같은 이름 기계)를 고르기에 둔 기초가 앞.""" first = next((c for k, c in combine.MACHINE.items() if k in kinds), combine.MACHINE_ANY) order = [first, *sorted(combine.MACHINE_SET - {first})] if not eq: return order + has = eq.get("값") if isinstance(eq.get("값"), dict) else {} + if solo := SOLO.get((bool(has.get("주연료")), bool(has.get("조종원")))): + return [solo] eqs = whole.numbers.get("EQ", {}) def takes(code: str) -> bool: diff --git a/resources/tester/test_778_2_hopyo_machine_link.py b/resources/tester/test_778_2_hopyo_machine_link.py index 4fa102c4a..adb9c170f 100644 --- a/resources/tester/test_778_2_hopyo_machine_link.py +++ b/resources/tester/test_778_2_hopyo_machine_link.py @@ -49,6 +49,11 @@ def test_기계_잇기_뒤_SK_셈_됨(): # 무한궤도 = 굴착기(무한궤도) 기계경비 · 갈래 다른 키 · 없는 키 = 틀림 work.link([{"id": "기계:굴착기#1", "기계": "EQ000019"}]) assert work.doc["더한줄"][-1]["로직"] == combine.MACHINE["굴착기"] + # 연료 · 조종원 없는 부속(부착용 집게 0.6∼0.8) = 손료만 기초(GC000273) · 셈 됨 + solo = _plan(whole) + solo.link([{"id": "기계:굴착기", "기계": "EQ000437"}]) + assert solo.doc["더한줄"][-1]["로직"] == skpatch.SOLO[(False, False)] + assert calc.run(solo.doc, whole)["기준"] is not None work.lost = _plan(whole).lost with pytest.raises(skpatch.LinkError): work.link([{"id": "기계:굴착기", "기계": "MT000010"}])