feat(M01): PLAN 7-4b 뒤 절반 ② — 애매한 후보 셋(색소·에폭시·땜납) 값 없어도 이음 · 버너·퓨즈 둘은 못 고름

사용자 확정(값이 없어도 그냥 넘어감)에 따라 규격·지역이 애매해도 가장 맞는
자재품목 줄로 이음:

  · 색소(MP000078) → 착색제(M-Green, MT006740) — 후보 1줄뿐이라 그대로
  · 에폭시(MP000082) → 주입용 에폭시 습식(MT007705) — 후보 4줄(주입용 습식·건식·
    씰링용) 가운데 낙석방지망 앵커 주입에 흔한 습식형
  · 땜납(MP000285) → 봉땜납 Sn30%(MT001252) — 후보 둘(Sn10%·Sn30%) 가운데 원문
    50:50 에 더 가까운 쪽(정확히는 안 맞음 — 비고에 적음)

버너(MP000209)·퓨즈(MP000214)는 후보가 있어도 물건 자체가 다름 — 버너 후보(개장로용
가스버너, 6~9구용, 915만원)는 산업용 화덕이지 압접가열용 소형버너가 아니고, 퓨즈
후보 다섯(전선퓨즈·통형퓨즈·고리퓨즈)은 모두 전기용이지 테르밋 용접 점화용이 아님 —
못 골라 그대로 둠(비고 그대로).

build_로직_재료_고르기.py 다시 돌려 로직 3개 파일에 고르기 조건 3줄 반영.
test_자재품목_분류.py — 기대표에 셋 더함(품명과 자재품목 이름이 달라 뿌리-이름
우선 검사에서 스페이셔와 같은 이유로 뺌).

typecheck 통과 · 관련 시험 108 통과.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
This commit is contained in:
2026-09-22 13:43:06 +09:00
co-authored by Claude Sonnet 5
parent 0b9df5a3d8
commit 597bb35458
5 changed files with 15 additions and 9 deletions
@@ -4296,7 +4296,7 @@
},
{
"종류": "재료",
"요소": "MP000082",
"요소": {"구분": "도료·방수·접착", "상세구분": "도료", "규격": "M-Poxy I(습식)", "대표": "MT007705"},
"이름": "에폭시",
"단위": "kg",
"수량": "만약(방지망 == '포켓식', 찾기(QC000569, 구분='에폭시').수량, 0)",
@@ -217,7 +217,7 @@
},
{
"종류": "재료",
"요소": "MP000078",
"요소": {"구분": "도료·방수·접착", "상세구분": "접착·혼화", "규격": "색소(M-Green)", "대표": "MT006740"},
"이름": "색소(착색제)",
"단위": "㎏",
"수량": "찾기(QC000274, 구분='색소').수량 / 100",
@@ -8423,7 +8423,7 @@
},
{
"종류": "재료",
"요소": "MP000285",
"요소": {"구분": "잡재료", "상세구분": "고철·기타금속", "규격": "Sn 30%", "대표": "MT001252"},
"이름": "땜납",
"단위": "㎏",
"수량": "0.055",
@@ -86,11 +86,11 @@
{ "키": "MP000075", "원문번호": "복합비료", "이름": "비료", "규격": "복합비료", "단위": "㎏", "요구절": ["건설품셈 공통 4-1-3 재료량"], "연결": "MT006489", "고르기": null, "비고": "연결: 복합비료 규격 없는 kg 줄" },
{ "키": "MP000076", "원문번호": "피복제", "이름": "피복제", "규격": "화이버/펄프류", "단위": "㎏", "요구절": ["건설품셈 공통 4-1-3 재료량"], "연결": "MT030610", "고르기": null, "비고": "PLAN 7-4b: 자재품목 새 줄(MT030610)로 이음 · 값 미확보" },
{ "키": "MP000077", "원문번호": "침식방지안정제", "이름": "침식방지안정제", "규격": "합성접착제", "단위": "㎏", "요구절": ["건설품셈 공통 4-1-3 재료량"], "연결": "MT030611", "고르기": null, "비고": "PLAN 7-4b: 자재품목 새 줄(MT030611)로 이음 · 값 미확보" },
{ "키": "MP000078", "원문번호": "착색제", "이름": "색소", "규격": "착색제", "단위": "㎏", "요구절": ["건설품셈 공통 4-1-3 재료량"], "연결": null, "고르기": null, "비고": "자재품목 후보 1줄 — 지역·규격 선택 필요 (MT006740) · 고르기 없음(자재품목 묶음에 짝이 없음 — 관리자가 화면에서 이음)" },
{ "키": "MP000078", "원문번호": "착색제", "이름": "색소", "규격": "착색제", "단위": "㎏", "요구절": ["건설품셈 공통 4-1-3 재료량"], "연결": "MT006740", "고르기": null, "비고": "PLAN 7-4b: 후보 1줄(착색제, M-Green)뿐이라 그대로 이음" },
{ "키": "MP000079", "원문번호": "차선도색 프라이머", "이름": "프라이머", "규격": "융착식 도료 차선도색용", "단위": "kg", "요구절": ["건설품셈 토목 1-8-9 융착식 도료 수동식 재료", "건설품셈 유지관리 2-1-15 4 자재수량"], "연결": null, "고르기": {"구분": "도료·방수·접착", "상세구분": "도료"}, "비고": "자재품목 후보 19줄 — 지역·규격 선택 필요 (MT003562, MT003588, MT003600 외)" },
{ "키": "MP000080", "원문번호": "낙석방지망 철망", "이름": "철망", "규격": "낙석방지망용", "단위": "㎡", "요구절": ["건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)"], "연결": null, "고르기": null, "비고": "자재품목 후보 6줄 — 지역·규격 선택 필요 (MT006697, MT007164, MT007165 외) · 고르기 없음(자재품목 묶음에 짝이 없음 — 관리자가 화면에서 이음)" },
{ "키": "MP000081", "원문번호": "결속선", "이름": "결속선", "규격": "", "단위": "m", "요구절": ["건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)"], "연결": null, "고르기": {"구분": "철근·강재", "상세구분": "철선", "대표": "MT000194"}, "비고": "자재품목 후보 1줄 — 지역·규격 선택 필요 (MT007332)" },
{ "키": "MP000082", "원문번호": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "요구절": ["건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)"], "연결": null, "고르기": null, "비고": "포켓식만 · 자재품목 후보 4줄 — 지역·규격 선택 필요 (MT007705, MT007706, MT007931 외) · 고르기 없음(자재품목 묶음에 짝이 없음 — 관리자가 화면에서 이음)" },
{ "키": "MP000082", "원문번호": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "요구절": ["건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)"], "연결": "MT007705", "고르기": null, "비고": "PLAN 7-4b: 후보 4줄(주입용 습식·건식·씰링용) 가운데 낙석방지망 앵커 주입에 흔한 주입용 습식으로 이음(사용자 확정 — 값 없어도 넘어감)" },
{ "키": "MP000083", "원문번호": "에폭시 신구콘크리트 접착제", "이름": "Epoxy 신구-콘크리트 접착제", "규격": "", "단위": "kg", "요구절": ["건설품셈 공통 6-1-5"], "연결": null, "고르기": {"구분": "도료·방수·접착", "상세구분": "접착·혼화"}, "비고": "자재품목에 같은 품명 없음" },
{ "키": "MP000084", "원문번호": "에폭시 콘크리트고무 접착제", "이름": "Epoxy-콘크리트 고무 접착제", "규격": "", "단위": "kg", "요구절": ["건설품셈 공통 6-1-5"], "연결": null, "고르기": {"구분": "도료·방수·접착", "상세구분": "접착·혼화"}, "비고": "자재품목에 같은 품명 없음" },
{ "키": "MP000085", "원문번호": "폼타이 9.5㎜", "이름": "폼타이(Form Tie)", "규격": "9.5㎜", "단위": "본", "요구절": ["건설품셈 공통 6-3-1 주④"], "연결": null, "고르기": null, "비고": "폼타이 값은 「조」 — 본 환산 안 함 · 고르기 없음(자재품목 그 묶음에 같은 단위·이름 줄이 없음)" },
@@ -293,7 +293,7 @@
{ "키": "MP000282", "원문번호": "비닐시트 3m×3m", "이름": "비닐시트", "규격": "3m×3m", "단위": "Sh", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": null, "고르기": null, "비고": "고르기 없음(자재품목 그 묶음에 같은 단위·이름 줄이 없음)" },
{ "키": "MP000283", "원문번호": "방청페인트 DR-80", "이름": "방청페인트", "규격": "DR-80", "단위": "", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": null, "고르기": {"구분": "도료·방수·접착", "상세구분": "도료", "대표": "MT003378"}, "비고": "자재품목 후보 1줄 — 지역·규격 선택 필요 (MT003378)" },
{ "키": "MP000284", "원문번호": "페인트 노루표", "이름": "페인트", "규격": "노루표", "단위": "", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": null, "고르기": null, "비고": "자재품목 후보 47줄 — 지역·규격 선택 필요 (MT003366, MT003367, MT003368 외) · 고르기 없음(자재품목 묶음에 짝이 없음 — 관리자가 화면에서 이음)" },
{ "키": "MP000285", "원문번호": "땜납 50 : 50", "이름": "땜납", "규격": "50 : 50", "단위": "㎏", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": null, "고르기": null, "비고": "자재품목 후보 2줄 — 지역·규격 선택 필요 (MT001251, MT001252) · 고르기 없음(자재품목 묶음에 짝이 없음 — 관리자가 화면에서 이음)" },
{ "키": "MP000285", "원문번호": "땜납 50 : 50", "이름": "땜납", "규격": "50 : 50", "단위": "㎏", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": "MT001252", "고르기": null, "비고": "PLAN 7-4b: 봉땜납 후보 둘(Sn10%·Sn30%) — 원문 50:50 과 정확히는 안 맞아 더 가까운 Sn30% 로 이음(사용자 확정 — 값 없어도 넘어감)" },
{ "키": "MP000286", "원문번호": "붕사", "이름": "붕사", "규격": "", "단위": "㎏", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": "MT030661", "고르기": null, "비고": "PLAN 7-4b: 자재품목 새 줄(MT030661)로 이음 · 값 미확보" },
{ "키": "MP000287", "원문번호": "Compound 절연용", "이름": "Compound", "규격": "절연용", "단위": "㎏", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": "MT030662", "고르기": null, "비고": "PLAN 7-4b: 자재품목 새 줄(MT030662)로 이음 · 값 미확보" },
{ "키": "MP000288", "원문번호": "3-Bond 밀착제 No.2", "이름": "3-Bond", "규격": "밀착제 No.2", "단위": "㎏", "요구절": ["건설품셈 기계설비 13-6-2"], "연결": "MT030663", "고르기": null, "비고": "PLAN 7-4b: 자재품목 새 줄(MT030663)로 이음 · 값 미확보" },
+9 -3
View File
@@ -66,7 +66,11 @@ PM = json.loads((MD / "재료_품셈재료.json").read_text(encoding="utf-8"))["
"용접봉": "잡재료",
"": "잡재료",
"고철": "잡재료",
# PLAN 7-4b 뒤 절반 — 자재품목에 짝 없던 재료 106종을 새 줄로 만들어 이음(값 미확보)
# PLAN 7-4b 뒤 절반 ② — 후보는 있으나 애매해 어제 뺀 것 가운데 셋(값 없어도 넘어감)
"색소": "도료·방수·접착",
"에폭시": "도료·방수·접착",
"땜납": "잡재료",
# PLAN 7-4b 뒤 절반 ① — 자재품목에 짝 없던 재료 106종을 새 줄로 만들어 이음(값 미확보)
"3-Bond": "잡재료",
"BASECHANNEL": "건축마감",
"Center Punch": "기계·설비",
@@ -202,8 +206,10 @@ def test_품셈재료_연결_줄이_제_묶음():
def test_품셈재료_이름과_같은_품명_줄이_한_묶음():
# 「스페이셔(몰탈 블록)」 은 뿌리(「스페이셔」)가 같은 다른 물건(철근 스페이셔, 교량·구조부속)과
# 이름만 겹침 — PLAN 7-4b 뒤 절반이 자재품목 새 줄(시멘트·골재)에 「대표」로 콕 집어 이어
# 실제로는 안 섞임(test_품셈재료_연결_줄이_제_묶음 이 그 연결을 확인) · 이 뿌리-우선 검사만 뺌
제외_뿌리충돌 = {"스페이셔(몰탈 블록)"}
# 실제로는 안 섞임(test_품셈재료_연결_줄이_제_묶음 이 그 연결을 확인) · 이 뿌리-우선 검사만 뺌.
# 색소·에폭시·땜납은 PLAN 7-4b ② — 품셈 이름과 자재품목 이름이 달라(착색제·주입용 에폭시·
# 봉땜납) 대표로 콕 집어 이음 · 뿌리 이름으로는 자재품목에 아예 없어 이 검사 대상 밖.
제외_뿌리충돌 = {"스페이셔(몰탈 블록)", "색소", "에폭시", "땜납"}
idx = collections.defaultdict(list)
for x in ROWS:
idx[_root(x["이름"])].append(x)