From b6652690932c305fc1423f916d0da09a3631ee7a Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 4 Nov 2026 12:03:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(778-1):=20=EC=97=91=EC=85=80=EB=A7=8C?= =?UTF-8?q?=20=EC=9E=A5=EB=B9=84=20=E2=80=94=20=EA=B4=84=ED=98=B8=20?= =?UTF-8?q?=EB=82=B1=EB=A7=90=EB=A1=9C=20=ED=95=98=EB=82=98=EB=A9=B4=20?= =?UTF-8?q?=EA=B7=B8=20=EA=B8=B0=EA=B3=84=EB=A5=BC=20=EA=B3=A0=EB=A5=B4?= =?UTF-8?q?=EA=B8=B0=EC=97=90=20=EB=91=94=20=EA=B8=B0=EA=B3=84=EA=B2=BD?= =?UTF-8?q?=EB=B9=84=20=EA=B8=B0=EC=B4=88=20=EB=B0=94=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SkPatch._add_machine: 기계가 하나로 가려지면 옵션 거꾸로 찾기 없이 _mach_logics 첫 기초 + 기계 입력 · 까닭 = GC000268 옵션 거꾸로 찾기가 규격 수로 기계 고르기를 좁혀 굴착기를 놓치고 GC000267(굴착기(무한궤도) 기계경비)로 떨어짐(타이어 줄 17) - 굴착기(타이어형) 줄 44 = 모두 GC000268 + 0211-0060 · 기계 못 찾음 4 줄 이음(트럭탑재형 크레인 5ton · 진동기 · 동력분무기 · 대형 브레이커 0.7) · 기계경비 잇기 176 → 180 / 183 - 여덟 파일 기초 80 · SK 37 · 고름 대기 89 그대로 · SK 셈 오류 0 Co-Authored-By: Claude Opus 5.5 --- M02_MasterTemplete/M02_Hopyo_SkPatch.py | 17 ++++++++++------- resources/tester/test_778_1_hopyo_machine.py | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/M02_MasterTemplete/M02_Hopyo_SkPatch.py b/M02_MasterTemplete/M02_Hopyo_SkPatch.py index 2d402d67e..56097a4c1 100644 --- a/M02_MasterTemplete/M02_Hopyo_SkPatch.py +++ b/M02_MasterTemplete/M02_Hopyo_SkPatch.py @@ -324,19 +324,22 @@ class _Plan: self.note("장비", "·".join(sorted(m["갈래"])), excel, mine, 규격=spec, 단위="시간") def _add_machine(self, m: dict[str, Any], line: dict[str, Any]) -> None: - """엑셀만 장비 → 기계경비 로직 줄(기계 = 그 갈래 · 규격 옵션 거꾸로 찾기 · - 괄호 낱말로 하나면 그 기계 · 로직 = 그 기계를 고르기에 둔 기초 먼저(778-1)).""" + """엑셀만 장비 → 기계경비 로직 줄 — 괄호 낱말로 하나면 그 기계 · 로직 = 그 기계를 고르기에 + 둔 기초 먼저(778-1) · 아니면 기계 = 그 갈래 · 규격 옵션 거꾸로 찾기.""" fp = finger.empty(line) fp["장비"] = [{**m, "시간": 1.0, "밑시간": 1.0, "율": []}] kinds = set(m["갈래"]) eq = elem.machine(str(m.get("글") or ""), kinds, set(m.get("규격") or [])) - for code in _mach_logics(self.whole, kinds, eq): + name = " ".join([*m["갈래"], *(f"{x:g}" for x in m.get("규격") or [])]) + one = {"이름": name, "단위": "시간", "수량": _num(m["시간"] * self.tb)} + if eq: + code = _mach_logics(self.whole, kinds, eq)[0] + self.add({"종류": "로직", "로직": code, "입력값": {MACH_IN: eq["원문번호"]}, **one}) + return + for code in _mach_logics(self.whole, kinds): got = option.find(code, fp, []) if got["수준"] <= 1: - name = " ".join([*m["갈래"], *(f"{x:g}" for x in m.get("규격") or [])]) - given = {**got["입력"], **({MACH_IN: eq["원문번호"]} if eq else {})} - self.add({"종류": "로직", "로직": code, "입력값": given, "이름": name, - "단위": "시간", "수량": _num(m["시간"] * self.tb)}) # fmt: skip + self.add({"종류": "로직", "로직": code, "입력값": got["입력"], **one}) return spec = " ".join(f"{x:g}" for x in m.get("규격") or []) name = "·".join(m["갈래"]) diff --git a/resources/tester/test_778_1_hopyo_machine.py b/resources/tester/test_778_1_hopyo_machine.py index 1932cf0e4..0aae961f2 100644 --- a/resources/tester/test_778_1_hopyo_machine.py +++ b/resources/tester/test_778_1_hopyo_machine.py @@ -43,4 +43,5 @@ def test_굴착기_타이어형_EQ000026_세_길_같음(): fake = Fake() skpatch._Plan._add_machine(fake, m, {"이름": "x", "단위": "㎥"}) assert fake.got["로직"] != combine.MACHINE["굴착기"] # 굴착기(무한궤도) 기계경비 아님 + assert fake.got["입력값"] == {skpatch.MACH_IN: "0211-0060"} assert _key(fake.got["입력값"]["기계"]) == "EQ000026" and fake.got["수량"] == 0.5 From 42230cf3d621f82e4af0ec090aab44314cf1ae67 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 4 Nov 2026 12:11:00 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix(778-2):=20=EA=B8=B0=EA=B3=84=20?= =?UTF-8?q?=EC=9E=87=EA=B8=B0=20=E2=80=94=20=EC=97=B0=EB=A3=8C=20=C2=B7=20?= =?UTF-8?q?=EC=A1=B0=EC=A2=85=EC=9B=90=20=EC=97=86=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A2=85=EC=9D=80=20=EA=B7=B8=20=EA=B8=B0=EA=B3=84=EA=B2=BD?= =?UTF-8?q?=EB=B9=84=20=EA=B8=B0=EC=B4=88(272=20=C2=B7=20273=20=C2=B7=2027?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SkPatch SOLO · _mach_logics: (주연료, 조종원) 없는 기종 = GC000273 손료만 · GC000272 조종원 없음 · GC000276 연료 없음(M01 로직이 부르는 것과 같음) · 까닭 = 부착용 집게를 GC000268 로 이으면 「없는 요소 MO:None」 셈 오류(ORCA 북부청사방 단산59 실측) - EQ 630 중 570 셈 됨(남은 60 = M01 기계 자료 빈칸 · 이 걸음 밖) · 여덟 파일 장비 더한줄 180 줄 모두 셈 됨 · 기초 80 · SK 37 · 고름 대기 89 그대로 - test_778_2: 부착용 집게 = GC000273 · 셈 됨 Co-Authored-By: Claude Opus 5.5 --- M02_MasterTemplete/M02_Hopyo_SkPatch.py | 7 ++++++- resources/tester/test_778_2_hopyo_machine_link.py | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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"}])