Merge branch 'main_laptop_1' of C:/Program_coding/임도설계 및 견적자동화 프로그램 개발 into sub_laptop_1

This commit is contained in:
2026-11-12 19:45:21 +09:00
@@ -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