feat(M01): PLAN 7-4b 앞 절반 — 품셈재료 값 없는 재료 자재품목 새 줄 106 · 모래·자갈 전국지역 분리 · VR관 1본=2.5m

품셈재료 가운데 자재품목에 짝 없어 로직이 부르는 재료 106종(원 분류의 139줄 대응)을
자재품목에 새 줄로 만듦 — 이름·규격·단위·구분·상세구분·출처(품셈재료 키·요구절)만
채우고 값 다섯 칸(물가자료·유통물가·물가정보·거래가격·관급)은 모두 빔 · 비고에
「품셈재료에서 옮김 · 값 미확보」 · 키는 MT030600부터(_키대장.json 갱신).

이름이 옛 분류 규칙에 안 걸리는 93종(건설품셈 13장 플랜트설비 소모품 위주)은
build_자재품목_분류.py 에 정확한-이름 대응표를 새로 두어 채움(정규식 우선순위는
안 건드림 · 기존 30592줄 분류 결과 그대로 · 미분류 25줄 불변).

모래·자갈(중량 kg, 자재품목엔 ㎥ 지역줄만 있음)은 한 줄로 안 굳히고 전국 대표 자리 ·
지역별 자리 두 줄씩(4줄) 나눠 둠. 전력은 재료_유가전력.json 에 이미 있어 그대로 둠(안 옮김).

VR관(GF000173 막힘 원인)은 고려콘크리트산업 규격표로 1본=2.5m(D300~D1200 공통) 확인 —
그 22줄 비고에 환산 계수·출처 적음(D1500 은 표에 없어 그대로 둠).

품셈재료 자체는 이번엔 안 옮김(다음 일감) · 로직·조합 파일은 안 건드림.

typecheck 통과 · test_자재품목_분류.py·test_masterdata_check.py 80 통과(미분류 0 신규).

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 12:39:33 +09:00
co-authored by Claude Sonnet 5
parent 2ebc02dab5
commit 73109fe0e8
4 changed files with 365 additions and 56 deletions
@@ -495,6 +495,93 @@ RX = [(a, b, re.compile(c, re.I)) for a, b, c in R]
# 화초·수생식물 줄 — 규격이 분·포트·cm·분얼·개화구·엽·년생 꼴 (이름 글자로는 못 가림)
식물규격 = re.compile(r"^\d+(\.\d+)?cm$|포트|분얼|개화구|\d엽$|년생|\d+cm분$")
# PLAN 7-4b — 품셈재료에서 자재품목으로 옮긴 새 줄(값 미확보) 이름 → (구분, 상세구분)
# 위 정규식 규칙에 안 걸리는 건설품셈 13장 플랜트설비 소모품 위주 · 이름 그대로(공백만 뺌) 견줌 · 영문은 대소문자 안 가림
품셈이관_분류 = {
"지수활제": ("도료·방수·접착", "방수·실링"),
"jointfiller": ("도료·방수·접착", "방수·실링"),
"스티로폴": ("단열·보온", "단열재"),
"tarpaper": ("도료·방수·접착", "방수·실링"),
"채움재(아스팔트)": ("도료·방수·접착", "방수·실링"),
"콘크리트표면강화재(하드너)": ("도료·방수·접착", "도료"),
"틈메우기돌": ("석재", "조경석·자연석"),
"깃발": ("안전시설", "표지판·지주"),
"피복제": ("도료·방수·접착", "도료"),
"침식방지안정제": ("식생·종자", "비료·토양개량"),
"basechannel": ("건축마감", "천장·바닥·마감재"),
"topchannel": ("건축마감", "천장·바닥·마감재"),
"축중계(이동식)": ("기계·설비", "측정·시험기기"),
"보호막": ("도료·방수·접착", "도료"),
"보조강재": ("철근·강재", "형강"),
"flux": ("잡재료", "용접·가스"),
"질석": ("단열·보온", "단열재"),
"정배지": ("건축마감", "천장·바닥·마감재"),
"알루미늄핀": ("거푸집·가설재", "거푸집"),
"표준보강메시": ("철근·강재", "철망·와이어메쉬"),
"고강도메시": ("철근·강재", "철망·와이어메쉬"),
"실리콘": ("도료·방수·접착", "방수·실링"),
"아스팔트싱글": ("건축마감", "천장·바닥·마감재"),
"노즐": ("기계·설비", "기계류"),
"nozzle": ("기계·설비", "기계류"),
"테르밋용재": ("잡재료", "용접·가스"),
"몰드": ("잡재료", "용접·가스"),
"골무": ("잡재료", "용접·가스"),
"철구(shotball)": ("잡재료", "소모품"),
"철편(grit)": ("잡재료", "소모품"),
"동력brush": ("잡재료", "소모품"),
"wirebrush": ("잡재료", "소모품"),
"컴파운드": ("잡재료", "소모품"),
"": ("기계·설비", "측정·시험기기"),
"베인전용로드": ("기계·설비", "측정·시험기기"),
"로드": ("기계·설비", "측정·시험기기"),
"표준사": ("기계·설비", "측정·시험기기"),
"단독콘": ("기계·설비", "측정·시험기기"),
"코크스": ("잡재료", "소모품"),
"sandpaper": ("잡재료", "소모품"),
"여과기": ("잡재료", "소모품"),
"세유": ("잡재료", "소모품"),
"grease": ("잡재료", "소모품"),
"machineoil": ("잡재료", "소모품"),
"gasoline": ("잡재료", "소모품"),
"galvanizedwire": ("철근·강재", "철선"),
"grindingwheel": ("잡재료", "소모품"),
"보일유": ("잡재료", "소모품"),
"hacksawblade": ("잡재료", "소모품"),
"drill": ("기계·설비", "기계류"),
"grinderwheel": ("잡재료", "소모품"),
"file": ("잡재료", "소모품"),
"oilstone": ("잡재료", "소모품"),
"광목": ("잡재료", "소모품"),
"붕사": ("잡재료", "용접·가스"),
"compound": ("잡재료", "소모품"),
"3-bond": ("잡재료", "소모품"),
"전기용접": ("잡재료", "용접·가스"),
"탄소봉": ("잡재료", "용접·가스"),
"grinder": ("기계·설비", "기계류"),
"": ("잡재료", "소모품"),
"film": ("기계·설비", "측정·시험기기"),
"탈에폭시레신": ("도료·방수·접착", "접착·혼화"),
"그라인더돌": ("잡재료", "소모품"),
"tarepoxy": ("도료·방수·접착", "도료"),
"마린b/t(선박도로용)": ("도료·방수·접착", "도료"),
"zincprimer": ("도료·방수·접착", "도료"),
"m/coil": ("잡재료", "소모품"),
"washer": ("볼트·앵커·철물", "볼트·너트"),
"sealtape": ("잡재료", "소모품"),
"백묵": ("잡재료", "소모품"),
"석필": ("잡재료", "소모품"),
"흑welderglass": ("잡재료", "소모품"),
"백welderglass": ("잡재료", "소모품"),
"오스터날": ("기계·설비", "기계류"),
"": ("기계·설비", "기계류"),
"다이스": ("기계·설비", "기계류"),
"": ("잡재료", "소모품"),
"centerpunch": ("기계·설비", "기계류"),
"대강": ("잡재료", "소모품"),
"유지": ("잡재료", "소모품"),
"중유": ("잡재료", "소모품"),
}
def 분류(이름: str, 출처: str, 규격: str = ""):
n = re.sub(r"\s+", "", 이름 or "")
@@ -505,6 +592,8 @@ def 분류(이름: str, 출처: str, 규격: str = ""):
for a, b, rx in RX:
if rx.search(n):
return (a, b)
if n.casefold() in 품셈이관_분류:
return 품셈이관_분류[n.casefold()]
if 규격 and 식물규격.search(규격.replace(" ", "")):
return ("식생·종자", "초본·야생화")
return ("미분류", None)