diff --git a/resources/master_data/scripts/build_기계목록_빠진기계_814_1.py b/resources/master_data/scripts/build_기계목록_빠진기계_814_1.py index f822bba99..df21a4cd5 100644 --- a/resources/master_data/scripts/build_기계목록_빠진기계_814_1.py +++ b/resources/master_data/scripts/build_기계목록_빠진기계_814_1.py @@ -53,8 +53,27 @@ def _has(row: dict, field: str) -> bool: return False +NUMS = ("가격", *FIX, "손료계수", "주연료", "조종원", "잡재료율") + + +def _bad(row: dict, field: str) -> bool: + v = (row.get("값") or {}).get(field) + if v in (None, ""): + return False + try: + float(str(v).replace(",", "")) + except ValueError: + return True + return False + + def family_of(row: dict) -> tuple[str | None, list[str]]: """기계표 한 줄 → (식 키 | None, 빈 값 이름들) — 연료 · 조종원 유무로 식 가족을 고름.""" + bad = [ + f for f in NUMS if _bad(row, f) + ] # 수 아닌 글(「73.7+」 · 「13∼18」) = 풀지 않음(822-2 DROP_ONLY) + if bad: + return None, bad fuel, crew, job = _has(row, "주연료"), _has(row, "조종원"), _has(row, "조종원직종") if fuel and crew: key = "GC000268" if job else "GC000275" @@ -75,12 +94,17 @@ def _rows() -> list[dict]: ] +def _is_family(row: dict) -> bool: + """옛 식 묶음 + 「기계경비식」 부품 표지 전부(822-2 새 식 여섯 포함 — 옮긴 기계를 손료만 식에 되넣지 않음).""" + return row.get("키") in FAMILY or (row.get("부품") or {}).get("갈래") == "기계경비식" + + def _logic_lists(text: str) -> dict[str, list[str]]: data = json.loads(text) out = {} for row in data["줄"]: for i in row.get("입력") or []: - if row.get("키") in FAMILY and i.get("이름") == "기계": + if _is_family(row) and i.get("이름") == "기계": out[row["키"]] = [str(c) for c in i.get("고르기") or []] return out