feat(master_data): 재료 고르기 조건에 「이름」 칸 추가 — 커플링밴드·접속티 가름 (일감35)

고르기 조건(PICK_KEYS)에 이름 칸을 더함 — candidates()가 구분·상세구분·규격에 더해
이름 낱말도 봄(자재품목 원자료는 안 건드림). GF000176(파형강관 부설) 커플링밴드 호표를
옛 방식(품셈재료 손 연결)에서 고르기 조건으로 바꿔 같은 규격(관경)의 접속티와 안 섞이게 함.
재료_품셈재료.json MP000027·32·37 도 같은 조건으로 갱신. _틀.md 7장·시험 갱신.

검증: 이름 없이는 관경마다 커플링밴드·접속티 6줄이 섞임 → 이름을 더하면 1줄로 좁혀짐(전수
확인). 일괄 시험 계산 통과 1291·멈춤 63·금액 달라진 로직 0(앞뒤 동일) · check_master 틀·
본문·로직·조합 0 유지.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
This commit is contained in:
2026-09-22 13:10:09 +09:00
co-authored by Claude Sonnet 5
parent a7f550b808
commit fa850b182f
5 changed files with 54 additions and 14 deletions
@@ -16,7 +16,7 @@ LINKED = "MP" # 품셈재료 테이블ID
MARKET = "MT" # 자재품목 테이블ID
PRICED = "MO" # 유가전력 테이블ID — 값 한 칸
SLOTS = ("물가자료", "유통물가", "물가정보", "거래가격", "관급") # 자재품목 값 열
PICK_KEYS = ("구분", "상세구분", "규격", "대표") # 재료 고르기 조건 칸 (`_틀.md` 7장)
PICK_KEYS = ("구분", "상세구분", "이름", "규격", "대표") # 재료 고르기 조건 칸 (`_틀.md` 7장)
REGION = "자재지역" # 로직 입력 — 「지역」 은 유가 고르기가 씀
TARIFF = "전력 계약종별" # 로직 입력 — 품셈·계약예규에 계약종별 규정 없음
_UNITS = {"ea": "", "ton": "", "t": "", "l": "", "리터": "", "set": "", "세트": ""}
@@ -131,16 +131,18 @@ def by_class(master: mf.Master) -> dict[str, dict]:
def candidates(
master: mf.Master, cond: dict, env: dict | None = None, unit: str | None = None
) -> list[str]:
"""고르기 조건 안 자재품목 키 — 구분 · 상세구분 · 규격 낱말이 모두 든 줄 · 파일 차례대로.
"""고르기 조건 안 자재품목 키 — 구분 · 상세구분 · 이름 · 규격 낱말이 모두 든 줄 · 파일 차례대로.
`unit` 을 주면 그 단위(호표 줄 단위)와 같은 줄만 — 단위가 다르면 다른 물건.
입력 `자재지역` 이 있으면 이름에 그 지역이 든 줄만(그런 줄이 없으면 조건 안 전부)."""
want = [plain_spec(w) for w in str(cond.get("규격") or "").split()]
want_name = [plain(w) for w in str(cond.get("이름") or "").split()]
detail = cond.get("상세구분")
need = plain_unit(unit) if unit else ""
hits = [
key
for key, row in by_class(master).get(cond.get("구분"), {}).items()
if (not detail or row.get("상세구분") == detail)
and all(w in plain(row.get("이름")) for w in want_name)
and all(w in plain_spec(row.get("규격")) for w in want)
and (not need or plain_unit(row.get("단위")) == need)
]