From a55d3966901e45dc5b6d975320ab16dcad0ed844 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 20 Sep 2026 23:26:08 +0900 Subject: [PATCH] =?UTF-8?q?fix(master=5Fdata):=20=ED=91=9C=EC=97=90=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EC=A1=B0=ED=95=A9=C2=B7=EC=A7=80=EC=97=AD?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=A9=88=EC=B6=94=EB=8D=98=20=EC=8B=9C?= =?UTF-8?q?=ED=97=98=20=EA=B3=84=EC=82=B0=20=ED=92=80=EA=B8=B0=20=C2=B7=20?= =?UTF-8?q?=EC=A0=84=EA=B8=B0=EC=9A=A9=EC=A0=91=EB=B4=89=20=EC=A4=84=20?= =?UTF-8?q?=EC=9B=90=EB=AC=B8=EB=8C=80=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 시험입력 10개 — 오거비트 혼합층처럼 원문 표에 없는 조합을 피하고(연장 0) 자재지역을 값 있는 시·군으로 - GC000945 전기용접봉 「595㎾h」 → 원문 소모자재 표대로 22.5㎏(595㎾h 는 같은 표의 전력 줄 · 별도 계상) - GC000002 콘테이너형 가설건축물 단위 「개」 → 자재품목 줄 단위 「동」 - ref/_관리자값_미확보.md 새로 — 관리자가 채울 재료 45 종 · 막힌 로직 56 개 · 남은 다른 까닭 세 줄 - 일괄 시험 계산 통과 1,272 → 1,279 · 멈춤 82 → 75(맞는 줄 0개 5 → 0) · 단위 경고 37 → 14 - 레미콘 규격 14건은 원문이 강도·슬럼프를 안 밝혀 그대로 둠 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- resources/master_data/ref/_관리자값_미확보.md | 59 +++++++++++++++++++ .../로직_건설품셈_02장_가설공사.json | 6 +- .../로직_건설품셈_05장_기초공사.json | 4 ++ .../로직_건설품셈_13장_플랜트설비공사.json | 10 +++- .../로직_산림품셈_12장_철근콘크리트.json | 2 + .../로직_산림품셈_13장_구조물.json | 1 + resources/tester/test_masterdata_check.py | 9 ++- 7 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 resources/master_data/ref/_관리자값_미확보.md diff --git a/resources/master_data/ref/_관리자값_미확보.md b/resources/master_data/ref/_관리자값_미확보.md new file mode 100644 index 00000000..1eec6190 --- /dev/null +++ b/resources/master_data/ref/_관리자값_미확보.md @@ -0,0 +1,59 @@ +# 관리자가 채울 재료 값 (읽기 전용 · 자동 생성) + +일괄 시험 계산(`check_master 계산전부`)이 「값 없음 — 관리자가 채울 값」 으로 멈춘 자리 — 재료 45 종 · 로직 56 개. + +값을 어디서 가져올지(자재품목 줄 잇기 · 시중물가)는 관리자 몫 — 여기서는 이름만 모음. + +| 키 | 이름 | 막힌 로직 수 | 로직 키 | +|---|---|---|---| +| MP000253 | 코크스 | 3 | GC000931 · GC000935 · GC000936 | +| MP000290 | Nozzle | 3 | GC000933 · GC000934 · GC000938 | +| MP000293 | 세유 | 3 | GC000939 · GC000986 · GC000993 | +| MP000048 | JOINT FILLER | 2 | GF000197 · GF000208 | +| MP000094 | 쉬즈관 | 2 | GC000230 · GC000237 | +| MP000216 | 철구(Shot ball) | 2 | GC000375 · GC000822 | +| MP000299 | 탄소봉 | 2 | GC000941 · GC000942 | +| MP000359 | 중유 | 2 | GC000943 · GC000948 | +| MP000023 | VR관(소켓식) | 1 | GF000173 | +| MP000052 | 스페이셔(몰탈 블록) | 1 | GF000200 | +| MP000055 | 스티로폴 | 1 | GF000202 | +| MP000060 | 콘크리트 표면 강화재(하드너) | 1 | GF000209 | +| MP000065 | 틈메우기돌 | 1 | GF000223 | +| MP000066 | 철망태(사각형 돌망태) | 1 | GF000235 | +| MP000070 | 깃발 | 1 | GF000081 | +| MP000076 | 피복제 | 1 | GC000145 | +| MP000082 | 에폭시 | 1 | GC000337 | +| MP000095 | BASECHANNEL | 1 | GC000001 | +| MP000113 | 축중계(이동식) | 1 | GC000003 | +| MP000129 | 보호막 | 1 | GC000061 | +| MP000134 | 모래주머니 | 1 | GC000181 | +| MP000144 | 보조강재 | 1 | GC000559 | +| MP000150 | 질석 | 1 | GC000573 | +| MP000169 | 정배지 | 1 | GC000618 | +| MP000172 | 알루미늄핀 | 1 | GC000623 | +| MP000176 | 표준보강메시 | 1 | GC000628 | +| MP000177 | 고강도메시 | 1 | GC000629 | +| MP000201 | 실리콘 | 1 | GC000752 | +| MP000202 | IV전선 | 1 | GC000409 | +| MP000209 | 버너 | 1 | GC000360 | +| MP000211 | 테르밋용재 | 1 | GC000361 | +| MP000215 | 용접봉 | 1 | GC000374 | +| MP000218 | 철편(Grit) | 1 | GC000376 | +| MP000235 | 슈 | 1 | GC000433 | +| MP000239 | 베인 전용로드 | 1 | GC000435 | +| MP000241 | 표준사 | 1 | GC000436 | +| MP000242 | 단독콘 | 1 | GC000438 | +| MP000250 | Lagging Sheet | 1 | GC000901 | +| MP000269 | 세유 | 1 | GC000932 | +| MP000294 | 전기용접 | 1 | GC000940 | +| MP000310 | Tar Epoxy | 1 | GC000944 | +| MP000314 | drill | 1 | GC000947 | +| MP000319 | Tar Epoxy | 1 | GC000950 | +| MP000357 | 카트리지 | 1 | GC000646 | +| MP000363 | 아스팔트싱글 | 1 | GC000654 | + +## 값 말고 다른 까닭으로 남은 멈춤 (손대지 않음) + +- 레미콘 규격 미지정 14 — 원문(산림 12장 · 13장 · 건설 7-3-1)이 강도·슬럼프를 밝히지 않고 「무근 · 철근」 만 적음 · 규격은 설계 확정 거리. +- 단위 환산 필요 4 — 가새 「조」 · 스레트실테이프 「㎝」 두 줄 · 철재 거푸집 「본」. `ref/_단위_환산_원문.md` 에 값 없음(또는 범위값)이라 그대로 둠. +- 모래 「울진」 줄 없음 1(GF000183) — 자재품목에 그 지역 모래 줄이 없음. diff --git a/resources/master_data/로직_건설품셈_02장_가설공사.json b/resources/master_data/로직_건설품셈_02장_가설공사.json index 62758443..60fb8ce7 100644 --- a/resources/master_data/로직_건설품셈_02장_가설공사.json +++ b/resources/master_data/로직_건설품셈_02장_가설공사.json @@ -240,7 +240,7 @@ "종류": "재료", "요소": {"구분": "거푸집·가설재", "상세구분": "가설건축물"}, "이름": "콘테이너형 가설건축물 3.0x3.0m", - "단위": "개", + "단위": "동", "수량": "만약(규모 == '3.0x3.0m', 손율 / 100, 0)", "비목": "재료비" }, @@ -248,7 +248,7 @@ "종류": "재료", "요소": {"구분": "거푸집·가설재", "상세구분": "가설건축물"}, "이름": "콘테이너형 가설건축물 3.0x6.0m", - "단위": "개", + "단위": "동", "수량": "만약(규모 == '3.0x6.0m', 손율 / 100, 0)", "비목": "재료비" }, @@ -256,7 +256,7 @@ "종류": "재료", "요소": {"구분": "거푸집·가설재", "상세구분": "가설건축물"}, "이름": "콘테이너형 가설건축물 3.0x9.0m", - "단위": "개", + "단위": "동", "수량": "만약(규모 == '3.0x9.0m', 손율 / 100, 0)", "비목": "재료비" } diff --git a/resources/master_data/로직_건설품셈_05장_기초공사.json b/resources/master_data/로직_건설품셈_05장_기초공사.json index 21affcb9..b4d3b301 100644 --- a/resources/master_data/로직_건설품셈_05장_기초공사.json +++ b/resources/master_data/로직_건설품셈_05장_기초공사.json @@ -1557,6 +1557,7 @@ "출처": "건설품셈 공통 5-1-9", "소유": "공용", "비고": "지층별 굴착연장 입력(없는 층 0) · 한 비트로 전 층 · 해석: 개량형·해머비트는 해머비트 압축기(대수 입력) · 오거(케이싱)는 케이싱 쓸 때 · 굴착기 = 굴착기(무한궤도) · 해머비트 손료 · 펌프차 별도 · 부속장비·소모자재 = 인력편성 노무비 × 요율 · 해석: 소모자재 손료 비목 = 재료비 · 해석: 편성 인력 × 작업소요시간 ÷ 1일 8시간 = 인 · 편성 기계 × 작업소요시간 = 시간(건설품셈 공통 1-1) · 「원문에 없는 조합: 비트=오거비트 · 말뚝직경=500∼600 · 말뚝길이=10m미만 / 비트=오거비트 · 말뚝직경=500∼600 · 말뚝길이=10~20m / 비트=오거비트 · 말뚝직경=500∼600 · 말뚝길이=20m~30m / 비트=개량형비트 · 말뚝직경=500이상 · 말뚝길이=10m미만 / 비트=개량형비트 · 말뚝직경=500이상 · 말뚝길이=10~20m 외 10」", + "시험입력": {"혼합층연장": 0, "연암연장": 0, "경암연장": 0}, "입력": [ { "이름": "비트", @@ -3534,6 +3535,7 @@ "출처": "건설품셈 공통 5-3-1", "소유": "공용", "비고": "직경 400∼800 · t_3 원문 글(케이싱 미사용 5 · 사용 8분)을 식에 적음 · t_5 는 천공홀 직접 용접 때만 · 해석: 개량형·해머비트는 해머비트 압축기 · 굴착기 = 굴착기(무한궤도) · 말뚝 재료 · 서비스케이싱 · 해머비트 손료 별도 · 해석: 소모자재 손료 비목 = 재료비 · 해석: 편성 인력 × 작업소요시간 ÷ 1일 8시간 = 인 · 편성 기계 × 작업소요시간 = 시간(건설품셈 공통 1-1) · 「원문에 없는 조합: 비트=오거비트 · 말뚝길이=10m미만 · 직경=400 · 기초=도로/철도 교량기초 / 비트=오거비트 · 말뚝길이=10m미만 · 직경=400 · 기초=건축기초 / 비트=오거비트 · 말뚝길이=10m미만 · 직경=450 · 기초=도로/철도 교량기초 / 비트=오거비트 · 말뚝길이=10m미만 · 직경=450 · 기초=건축기초 / 비트=오거비트 · 말뚝길이=10m미만 · 직경=500 · 기초=도로/철도 교량기초 외 67」", + "시험입력": {"혼합층연장": 0, "연암연장": 0, "경암연장": 0}, "입력": [ { "이름": "직경", @@ -4078,6 +4080,7 @@ "출처": "건설품셈 공통 5-3-2", "소유": "공용", "비고": "항타가 필요하면 5-3-1 t_3 참고 · 해머비트 손료 별도 · 해석: 개량형·해머비트는 해머비트 압축기 · 해석: 편성 인력 × 작업소요시간 ÷ 1일 8시간 = 인 · 편성 기계 × 작업소요시간 = 시간(건설품셈 공통 1-1) · 해석: 소모자재 손료 비목 = 재료비", + "시험입력": {"혼합층연장": 0, "연암연장": 0, "경암연장": 0}, "입력": [ { "이름": "비트", @@ -4713,6 +4716,7 @@ "출처": "건설품셈 공통 5-3-5", "소유": "공용", "비고": "T 단위 시간(hr) · 공법 R.C.D 는 올케이싱 굴착 뒤 후속 굴착 · 케이싱·비트 손료 별도 · 극경암은 천공시간 증 · 해석: 크레인 = 크레인(타이어) · 해석: 소모자재 손료 비목 = 재료비 · 해석: 편성 인력 × 작업소요시간 ÷ 1일 8시간 = 인 · 편성 기계 × 작업소요시간 = 시간(건설품셈 공통 1-1)", + "시험입력": {"점질토연장": 0, "사질토연장": 0, "자갈연장": 0, "연암연장": 0, "경암연장": 0}, "입력": [ { "이름": "공법", diff --git a/resources/master_data/로직_건설품셈_13장_플랜트설비공사.json b/resources/master_data/로직_건설품셈_13장_플랜트설비공사.json index ffbf3ea8..52fe091e 100644 --- a/resources/master_data/로직_건설품셈_13장_플랜트설비공사.json +++ b/resources/master_data/로직_건설품셈_13장_플랜트설비공사.json @@ -8468,6 +8468,7 @@ "출처": "건설품셈 기계설비 13-6-3", "소유": "공용", "비고": "소모자재는 원문 참고표 Tainter 칸 · 공정별 품의 합(ton당) · 검사 · 교정은 기술관리, 도장을 뺀 품의 10%(원문 줄) — 각 직종에 더함 · 해석: 원문 「〃」 · 「수량」 칸 = 앞 직종(플랜트제관공) · 해석: 목공 = 건축목공 · 「건설기계운전조 · Crane운전조」 = 건설기계운전사 · 「윈치운전조」 = 일반기계운전사(조 = 1인) · 건설노임에 없는 직종(기계기사 · 측량사 · 마킹공 등)은 인력_자체(값은 관리자가 채움) · 막힘: 장비 중 기계 목록에 없는 것 — Lathe 365.76㎝×5.60㎾ · Planer 121.92㎝×243.84㎝ · Boring machine Horizontal Type 2.24㎾ · Gouging machine 중형 · Gas cutting machine Auto형 · Gas cutting machine Mannual · Gas heating touch 중형 · Over head crane 30ton · Over head crane 20ton · Hydro Press 300ton · Bending roller 701.04㎝ · Edge bending roller 701.04㎝ · Shearing machine · Drilling machine 2.24㎾ · Drilling machine Radial 3.73㎾ · Portable drill 0.73㎾ — 그 줄 빠짐", + "시험입력": {"자재지역": "포항"}, "입력": [ { "이름": "전력 계약종별", @@ -8780,6 +8781,7 @@ "출처": "건설품셈 기계설비 13-6-3", "소유": "공용", "비고": "소모자재는 원문 참고표 Roller 칸 · 공정별 품의 합(ton당) · 검사 · 교정은 기술관리, 도장을 뺀 품의 10%(원문 줄) — 각 직종에 더함 · 해석: 원문 「〃」 · 「수량」 칸 = 앞 직종(플랜트제관공) · 해석: 목공 = 건축목공 · 「건설기계운전조 · Crane운전조」 = 건설기계운전사 · 「윈치운전조」 = 일반기계운전사(조 = 1인) · 건설노임에 없는 직종(기계기사 · 측량사 · 마킹공 등)은 인력_자체(값은 관리자가 채움) · 막힘: 장비 중 기계 목록에 없는 것 — Lathe 365.76㎝×5.60㎾ · Planer 121.92㎝×243.84㎝ · Boring machine Horizontal Type 2.24㎾ · Gouging machine 중형 · Gas cutting machine Auto 중형 · Gas cutting machine Mannual · Gas heating touch 중형 · over head crane 30 ton · Hydro Press 100 ton · Bending roller 701.04㎝ · Shearing machine · Drilling machine 2.24㎾ · Drilling machine Radial 3.73㎾ · Portable drill 0.373㎾ — 그 줄 빠짐", + "시험입력": {"자재지역": "포항"}, "입력": [ { "이름": "전력 계약종별", @@ -9989,6 +9991,7 @@ "출처": "건설품셈 기계설비 13-6-6", "소유": "공용", "비고": "공정별 품의 합(ton당) · 검사 · 교정은 기술관리, 도장, 전원배선을 뺀 품의 10%(원문 줄) — 각 직종에 더함 · 해석: 원문 「〃」 · 「수량」 칸 = 앞 직종(플랜트제관공) · 해석: 목공 = 건축목공 · 「건설기계운전조 · Crane운전조」 = 건설기계운전사 · 「윈치운전조」 = 일반기계운전사(조 = 1인) · 건설노임에 없는 직종(기계기사 · 측량사 · 마킹공 등)은 인력_자체(값은 관리자가 채움) · 막힘: 장비 중 기계 목록에 없는 것 — Gas Cutting machine 중형 · Portable Drill 1.12㎾ · Portable Grinder 0.37㎾ · Guy Derrick 10 ton · Truck 5 ton · Angle Griner 0.37 ㎾ — 그 줄 빠짐", + "시험입력": {"자재지역": "포항"}, "입력": [ { "이름": "전력 계약종별", @@ -12129,10 +12132,11 @@ "종류": "재료", "요소": {"구분": "잡재료", "상세구분": "용접·가스"}, "이름": "전기용접봉", - "단위": "㎾h", - "수량": "595", + "단위": "㎏", + "수량": "22.5", "비목": "재료비", - "출처": "건설품셈 기계설비 13-6-13" + "출처": "건설품셈 기계설비 13-6-13", + "비고": "원문 소모자재 표 「용접 전기용접봉 22.5㎏」 · 같은 표의 「전력 595㎾h」 는 별도 계상(전력 계약종별 입력 자리 없음)" } ], "덧줄": [], diff --git a/resources/master_data/로직_산림품셈_12장_철근콘크리트.json b/resources/master_data/로직_산림품셈_12장_철근콘크리트.json index 54b68dc9..09a060a2 100644 --- a/resources/master_data/로직_산림품셈_12장_철근콘크리트.json +++ b/resources/master_data/로직_산림품셈_12장_철근콘크리트.json @@ -1887,6 +1887,7 @@ "출처": "산림품셈 12-11-2 1", "소유": "공용", "비고": "흄관 별산(원문 비고)이나 수량이 있어 줄로 얹음 · 기초콘크리트·거푸집 설계수량", + "시험입력": {"자재지역": "포항"}, "입력": [ { "이름": "관경", @@ -2118,6 +2119,7 @@ "출처": "산림품셈 12-11-3", "소유": "공용", "비고": "파형강관 별산(원문 비고)이나 수량이 있어 줄로 얹음 · 6m 직관 10% 감액(주②)은 모래 문장에 붙어 있어 대상 불명 — 미반영", + "시험입력": {"자재지역": "포항"}, "입력": [ { "이름": "관경", diff --git a/resources/master_data/로직_산림품셈_13장_구조물.json b/resources/master_data/로직_산림품셈_13장_구조물.json index 15cc131b..5cf7fb8f 100644 --- a/resources/master_data/로직_산림품셈_13장_구조물.json +++ b/resources/master_data/로직_산림품셈_13장_구조물.json @@ -592,6 +592,7 @@ "출처": "산림품셈 13-5-1", "소유": "공용", "비고": "해석: 채움 콘크리트 = 레디믹스트콘크리트 · 해석: 돌 이름을 채움·고임돌 표 종별로 맞춤(조약돌·호박돌 및 야면석 → 야면석 · 채움은 호박돌) · 줄눈 모르타르는 원문대로 메붙임에도 얹음 · 뒷길이 70 은 찾기 실패 — 원문 표에 70 없음 · 「원문에 없는 조합: 뒷길이=25 · 붙임=메붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=메붙임 · 돌=호박돌 및 야면석 / 뒷길이=25 · 붙임=찰붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=찰붙임 · 돌=조약돌 및 야면석 / 뒷길이=30 · 붙임=메붙임 · 돌=호박돌 및 야면석 외 17」", + "시험입력": {"뒷길이": 30, "붙임": "메붙임", "돌": "깬돌"}, "입력": [ { "이름": "뒷길이", diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index 16c362be..b56f4bea 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -913,7 +913,7 @@ def test_로직_일괄_시험계산(): """로직 전부를 시험 입력으로 돌림 — 멈춤은 데이터 결손(관리자 값·규격 미지정)만.""" files = cm.load() passed, stuck = cm.calc_all(files, mf.Master(files)) - assert passed >= 1272 + assert passed >= 1279 남은_까닭 = ( "관리자가 채울 값", "규격 선택 필요", @@ -984,3 +984,10 @@ def test_테스트_대상_로직_입력에_설명(whole): assert specs, key 빈칸 = [s["이름"] for s in specs if not str(s.get("설명") or "").strip()] assert 빈칸 == [], (key, 빈칸) + + +def test_표_조건_조합이_없어_멈추지_않음(): + """표에 없는 조합(오거비트 혼합층 등)으로는 시험 계산을 돌리지 않음 — 「맞는 줄 0개」 0건.""" + files = cm.load() + _, stuck = cm.calc_all(files, mf.Master(files)) + assert [x for x in stuck if "맞는 줄" in x] == []