From 0f4e396cb091fd678c80ba5411ea5c88644c6180 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 18:04:17 +0900 Subject: [PATCH] =?UTF-8?q?feat(master=5Fdata):=20=EA=B1=B4=EC=84=A4?= =?UTF-8?q?=ED=92=88=EC=85=88=20=ED=86=A0=EB=AA=A9=202=EC=9E=A5(=ED=95=98?= =?UTF-8?q?=EC=B2=9C)=20=EB=A1=9C=EC=A7=81=207=EC=A4=84=20=C2=B7=20?= =?UTF-8?q?=EC=8B=9C=ED=97=98=201=EA=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- .../master_data/로직_건설품셈_토목2장.json | 394 ++++++++++++++++++ resources/tester/test_masterdata_check.py | 8 + 2 files changed, 402 insertions(+) create mode 100644 resources/master_data/로직_건설품셈_토목2장.json diff --git a/resources/master_data/로직_건설품셈_토목2장.json b/resources/master_data/로직_건설품셈_토목2장.json new file mode 100644 index 00000000..526f2278 --- /dev/null +++ b/resources/master_data/로직_건설품셈_토목2장.json @@ -0,0 +1,394 @@ +{ + "그룹": "로직", + "원문": "건설품셈", + "판": "2026", + "줄": [ + { + "열쇠": "2-1-1 사석부설", + "이름": "사석부설", + "결과단위": "원/㎥", + "출처": "건설품셈 토목 2-1-1", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:건설품셈:2-1-1 사석부설).보통인부", "비목": "노무비" }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0100', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 1.0㎥", + "단위": "시간", + "수량": "찾기(소요량:건설품셈:2-1-1 사석부설).굴삭기" + } + ], + "덧줄": [], + "끝수": null, + "비고": "필터매트는 건설품셈 공통 5-2-1 매트부설 · 사석 재료 원문 표에 없음" + }, + { + "열쇠": "2-1-2 사석고르기", + "이름": "사석고르기", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 2-1-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:건설품셈:2-1-2 사석고르기).보통인부", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null, + "비고": "잡석 채움 포함(주②) · 막힘: 굴삭기+부착용집게 빠짐 — 칸 이름 「굴삭기+부착용집게」 식에서 못 부름" + }, + { + "열쇠": "2-2-2 매트리스형 돌망태 설치", + "이름": "매트리스형 돌망태 설치", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 2-2-2", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1033", "이름": "석공", "단위": "인", "수량": "찾기(소요량:건설품셈:2-2-2 매트리스형 돌망태 설치).석공", "비목": "노무비" }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-2-2 매트리스형 돌망태 설치).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-2-2 매트리스형 돌망태 설치).보통인부", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0100', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 1.0㎥", + "단위": "시간", + "수량": "찾기(소요량:건설품셈:2-2-2 매트리스형 돌망태 설치).굴착기" + } + ], + "덧줄": [], + "끝수": null, + "비고": "폭 200㎝ · 높이 30㎝ 기준(주①) · 필터매트는 건설품셈 공통 5-2-1 매트부설 · 망태·망태석 재료 원문 표에 없음" + }, + { + "열쇠": "2-2-3 돌망태형옹벽 설치", + "이름": "돌망태형옹벽 설치", + "결과단위": "원/㎥", + "출처": "건설품셈 토목 2-2-3", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1033", "이름": "석공", "단위": "인", "수량": "찾기(소요량:건설품셈:2-2-3 돌망태형옹벽 설치).석공", "비목": "노무비" }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-2-3 돌망태형옹벽 설치).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-2-3 돌망태형옹벽 설치).보통인부", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0060', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 0.6㎥", + "단위": "시간", + "수량": "찾기(소요량:건설품셈:2-2-3 돌망태형옹벽 설치).굴착기" + } + ], + "덧줄": [], + "끝수": null, + "비고": "높이 5m 이하(주①) · 터파기·지반고르기 별도(주③) · 필터매트는 건설품셈 공통 5-2-1 매트부설 · 철망태·망태석 재료 원문 표에 없음" + }, + { + "열쇠": "2-3-1 식생매트 설치", + "이름": "식생매트 설치", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 2-3-1", + "소유": "공용", + "입력": [ + { "이름": "작업", "고르기": ["식생매트설치", "복토"] }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "만약(작업 == '식생매트설치', 찾기(소요량:건설품셈:2-3-1 식생매트 설치, 작업=작업).특별인부, 0)", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-3-1 식생매트 설치, 작업=작업).보통인부", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0060', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 0.6㎥", + "단위": "시간", + "수량": "만약(작업 == '복토', 찾기(소요량:건설품셈:2-3-1 식생매트 설치, 작업=작업).굴삭기, 0)" + } + ], + "덧줄": [], + "끝수": null, + "비고": "작업(식생매트설치 · 복토)마다 따로 계상 — 둘 다 하면 두 줄 · 종자살포·잔디·관수·시비 별도(주③) · 식생매트 재료 원문 표에 없음" + }, + { + "열쇠": "2-3-2 블록 붙이기(인력)", + "이름": "블록 붙이기(인력)", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 2-3-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-3-2 블록 붙이기(인력)).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-3-2 블록 붙이기(인력)).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "비탈면 고르기·흙 채움·잔디심기 별도(주③) · 호안블록 재료 원문 표에 없음" + }, + { + "열쇠": "2-3-3 블록 붙이기(기계)", + "이름": "블록 붙이기(기계)", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 2-3-3", + "소유": "공용", + "입력": [ + { "이름": "장비", "고르기": ["크레인", "굴착기"], "출처": "건설품셈 토목 2-3-3 주④" }, + { + "이름": "크레인", + "고르기": [ + "2105-0005", + "2104-0010", + "2104-0015", + "2104-0020", + "2104-0025", + "2104-0030", + "2104-0035", + "2104-0040", + "2104-0045", + "2104-0050", + "2104-0060", + "2104-0070", + "2104-0080", + "2104-0100", + "2104-0130", + "2104-0160", + "2104-0200", + "2104-0220", + "2104-0250", + "2104-0300", + "2105-0002", + "2105-0003", + "2105-0010", + "2105-0015", + "2105-0018" + ] + }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-3-3 블록 붙이기(기계)).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:2-3-3 블록 붙이기(기계)).보통인부", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계=크레인, 지역=지역)", + "이름": "크레인", + "단위": "시간", + "수량": "만약(장비 == '크레인', 찾기(소요량:건설품셈:2-3-3 블록 붙이기(기계)).크레인, 0)" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0020', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 0.2㎥", + "단위": "시간", + "수량": "만약(장비 == '굴착기', 찾기(소요량:건설품셈:2-3-3 블록 붙이기(기계) 계수 주④, 구분='크레인 대체 굴착기 사용시간').값, 0)", + "출처": "건설품셈 토목 2-3-3 주④" + } + ], + "덧줄": [], + "끝수": null, + "비고": "크레인 종류·규격 설계자 고름 — 원문 규격 10톤 · 현장여건 따라 크레인 대신 굴착기 0.2㎥ 0.063hr(주④) · 비탈면 고르기·흙 채움·잔디심기 별도(주③) · 호안블록 재료 원문 표에 없음" + } + ] +} diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index a2d4d158..d888e89a 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -20,6 +20,7 @@ SAMPLES = [ "로직_건설품셈_공통7장.json", "로직_건설품셈_공통8장.json", "로직_건설품셈_토목1장.json", + "로직_건설품셈_토목2장.json", "로직_산림품셈_03장.json", "로직_산림품셈_04장.json", "로직_산림품셈_05장.json", @@ -265,6 +266,13 @@ def test_토목_보도블록_감(whole): assert got["줄"][1]["수량"] == Decimal(1) / Decimal(171) +def test_토목_블록붙이기_굴착기_대체(whole): + """토목 2-3-3 주④ — 크레인 대신 굴착기 0.2㎥ 0.063hr · 크레인 0.""" + given = {"장비": "굴착기", "크레인": "2104-0010", "지역": "전국평균", "보정작업": "해당 없음"} + got = mf.run(whole, "건설품셈:2-3-3 블록 붙이기(기계)", given) + assert [line["수량"] for line in got["줄"][2:]] == [0, Decimal("0.063")] + + def test_범위_입력은_막음(whole): with pytest.raises(mf.FormulaError): mf.run(