feat(master_data): 건설품셈 기계설비 1장 로직 19개 — 배관공사

- 강관·동관·스테인리스·주철관·경질관·연질관 접합 및 배관(일당 표는 시공량으로 나눠 m·개소당)
- 고소작업대 시공(품 감산·시공량 가산) · 시공위치 요율 · TIG 가산은 입력 고르기 · 겹침은 공통 1-4-2 합산
- 공구손료 및 경장비 덧줄(인력품 %) · Brazing·TIG 소모재료 줄 · 재료_자체 3줄(플럭스·TIG 용접봉·아르곤가스)
- 기계설비 1~6장 계수 표 열쇠를 「절 이름 계수」로 — 건축 계수 표와 열쇠 겹침(먼저 읽힌 건축 표가 잡히던 것)
- check_master 로직 검사에 열쇠 겹침 · 시험 2개

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
This commit is contained in:
2026-09-19 19:13:43 +09:00
co-authored by Claude Opus 5
parent cbb60ecb6e
commit 0d7f6a8950
10 changed files with 1420 additions and 43 deletions
@@ -276,6 +276,19 @@ def check_logics(files: dict[str, dict], whole: mf.Master) -> list[str]:
out += [f"{name} · {x}" for x in found]
graph[f"{data.get('원문')}:{row.get('열쇠')}"] = calls
out += [f"돌고 도는 참조 · {''.join(loop)}" for loop in mf.find_loops(graph)]
return out + duplicate_keys(files)
def duplicate_keys(files: dict[str, dict]) -> list[str]:
"""같은 그룹·원문에 같은 열쇠 — 먼저 읽힌 파일 것만 찾기에 걸림"""
first, out = {}, []
for name, data in files.items():
rows = data.get("") if data.get("그룹") in mf.TABLE_GROUPS else data.get("")
for row in rows or []:
ref = f"{data.get('그룹')}:{data.get('원문')}:{row.get('열쇠')}"
if ref in first and first[ref] != name:
out.append(f"{name} · 열쇠 겹침 「{ref}」 — {first[ref]} 에도 있음")
first.setdefault(ref, name)
return out