From 3826002a00cf8e2bc114dce69ca9816e9f7a5c97 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 18:49:54 +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=203=EC=9E=A5(=ED=84=B0?= =?UTF-8?q?=EB=84=90)=20=EB=A1=9C=EC=A7=81=205=EC=A4=84=20=C2=B7=20?= =?UTF-8?q?=EC=9E=90=EC=B2=B4=20=EC=9E=AC=EB=A3=8C=201=EA=B0=9C=20=C2=B7?= =?UTF-8?q?=20=EA=B3=84=EC=88=98=20=EC=B9=B8=20=EC=9D=B4=EB=A6=84=C2=B7?= =?UTF-8?q?=EB=B2=94=EC=9C=84=EA=B7=9C=EC=B9=99=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 3-2-5 터널굴착 1발파당 인력: 공법군 6 · 싸이클 시간(분) 입력 × 인원 ÷ 60 ÷ 8 · 장대터널 α1 · 병렬터널 59% · 잡재료·경장비 3% - 3-3-1 철재거푸집 · 3-4-1 터널 방수(방수시트 재료_자체) · 3-4-2 작업대차 · 3-4-3 암반청소 - 계수 토목 3장: 칸 이름 빈칸 정리(갱구에서뚫기점까지의거리 · 바닥및인버트) · α1 범위규칙을 엔진이 읽는 「초과·이하」로 - 막힘: 3-2-1~3-2-4 싸이클·능력·천공속도·장비조합 기준표(설계자 계산) · 3-1-2 여굴(수량 기준) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- .../master_data/계수_건설품셈_토목3장.json | 28 +- .../master_data/로직_건설품셈_토목3장.json | 383 ++++++++++++++++++ resources/master_data/재료_자체.json | 3 +- resources/tester/test_masterdata_check.py | 15 + 4 files changed, 414 insertions(+), 15 deletions(-) create mode 100644 resources/master_data/로직_건설품셈_토목3장.json diff --git a/resources/master_data/계수_건설품셈_토목3장.json b/resources/master_data/계수_건설품셈_토목3장.json index fffdc28d..298f640d 100644 --- a/resources/master_data/계수_건설품셈_토목3장.json +++ b/resources/master_data/계수_건설품셈_토목3장.json @@ -70,78 +70,78 @@ "기준": "갱구에서 뚫기점까지의 거리(m)", "출처": "건설품셈 토목 3-1-1 주④", "조건": { - "갱구에서 뚫기점까지의 거리": "범위" + "갱구에서뚫기점까지의거리": "범위" }, "값칸": { "할증률": "%" }, - "범위규칙": "까지 = 이하 · 마지막 「5,000m 이상」 만 이상", + "범위규칙": "초과·이하", "줄": [ { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 500, 1000 ], "할증률": 10 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 1000, 1500 ], "할증률": 20 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 1500, 2000 ], "할증률": 30 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 2000, 2500 ], "할증률": 40 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 2500, 3000 ], "할증률": 50 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 3000, 3500 ], "할증률": 60 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 3500, 4000 ], "할증률": 70 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 4000, 4500 ], "할증률": 80 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 4500, 5000 ], "할증률": 90 }, { - "갱구에서 뚫기점까지의 거리": [ + "갱구에서뚫기점까지의거리": [ 5000, null ], @@ -184,7 +184,7 @@ "값칸": { "아치": "㎝", "측벽": "㎝", - "바닥 및 인버트": "㎝" + "바닥및인버트": "㎝" }, "줄": [ { @@ -197,7 +197,7 @@ 12, 18 ], - "바닥 및 인버트": [ + "바닥및인버트": [ 10, 15 ] diff --git a/resources/master_data/로직_건설품셈_토목3장.json b/resources/master_data/로직_건설품셈_토목3장.json new file mode 100644 index 00000000..26780aa3 --- /dev/null +++ b/resources/master_data/로직_건설품셈_토목3장.json @@ -0,0 +1,383 @@ +{ + "그룹": "로직", + "원문": "건설품셈", + "판": "2026", + "줄": [ + { + "열쇠": "3-2-5 작업인원", + "이름": "터널굴착 1발파당 인력", + "결과단위": "원/발파", + "출처": "건설품셈 토목 3-2-5", + "소유": "공용", + "입력": [ + { "이름": "공법군", "고르기": ["발파굴착A군", "발파굴착B군", "발파굴착C군", "기계굴착A군", "기계굴착B군", "기계굴착C군"], "출처": "건설품셈 토목 3-2-5" }, + { "이름": "싸이클", "단위": "분", "출처": "건설품셈 토목 3-2-1 싸이클 시간" }, + { "이름": "착암공인원", "단위": "인", "범위": [2, 4], "출처": "건설품셈 토목 3-2-5" }, + { "이름": "보통인부인원", "단위": "인", "출처": "건설품셈 토목 3-2-5" }, + { "이름": "갱구거리", "단위": "m", "출처": "건설품셈 토목 3-1-1 주④" }, + { "이름": "병렬터널", "고르기": ["아님", "두막장 동시굴착"], "출처": "건설품셈 토목 3-2-5 비고" } + ], + "중간": [ + { + "이름": "장대할증", + "식": "만약(갱구거리 <= 500, 0, 찾기(계수:건설품셈:3-1-1 장대터널 할증률, 갱구에서뚫기점까지의거리=갱구거리).할증률)", + "출처": "건설품셈 토목 3-1-1 주④" + }, + { + "이름": "배율", + "식": "싸이클 / 60 / 8 * (1 + 장대할증 / 100) * 만약(병렬터널 == '아님', 1, 찾기(계수:건설품셈:3-2-5 병렬터널, 항목='일개 작업조가 두막장을 동시에 굴착').비율 / 100)", + "출처": "건설품셈 토목 3-2-5 비고" + } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착C군, 0))))))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1015", + "이름": "착암공", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군' 또는 공법군 == '기계굴착A군', 착암공인원, 0)) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "점보드릴 운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='점보드릴 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='점보드릴 운전원').발파굴착C군, 0))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "고소대차 운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').발파굴착C군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').기계굴착C군, 0))))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "로더 운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착C군, 0))))))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "굴착기 운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').발파굴착C군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').기계굴착C군, 0))))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "숏크리트머신 운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착C군, 0))))))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "기계운전원", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='기계운전원').발파굴착A군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='기계운전원').기계굴착A군, 0))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군' 또는 공법군 == '발파굴착B군' 또는 공법군 == '발파굴착C군' 또는 공법군 == '기계굴착A군' 또는 공법군 == '기계굴착B군' 또는 공법군 == '기계굴착C군', 보통인부인원, 0)) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='특별인부').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='특별인부').발파굴착C군, 0))) * 배율", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1016", + "이름": "화약취급공", + "단위": "인", + "수량": "(만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착C군, 0)))) * 배율", + "비목": "노무비" + } + ], + "덧줄": [ + { + "이름": "공구손료 및 경장비", + "식": "(((만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='작업반장').기계굴착C군, 0))))))) * 배율) * 인력:건설노임:1001 + ((만약(공법군 == '발파굴착A군' 또는 공법군 == '기계굴착A군', 착암공인원, 0)) * 배율) * 인력:건설노임:1015 + ((만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='점보드릴 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='점보드릴 운전원').발파굴착C군, 0))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').발파굴착C군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='고소대차 운전원').기계굴착C군, 0))))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='로더 운전원').기계굴착C군, 0))))))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').발파굴착C군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='굴착기 운전원').기계굴착C군, 0))))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').발파굴착C군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착A군, 만약(공법군 == '기계굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착B군, 만약(공법군 == '기계굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='숏크리트머신 운전원').기계굴착C군, 0))))))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='기계운전원').발파굴착A군, 만약(공법군 == '기계굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='기계운전원').기계굴착A군, 0))) * 배율) * 인력:건설노임:1048 + ((만약(공법군 == '발파굴착A군' 또는 공법군 == '발파굴착B군' 또는 공법군 == '발파굴착C군' 또는 공법군 == '기계굴착A군' 또는 공법군 == '기계굴착B군' 또는 공법군 == '기계굴착C군', 보통인부인원, 0)) * 배율) * 인력:건설노임:1002 + ((만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='특별인부').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='특별인부').발파굴착C군, 0))) * 배율) * 인력:건설노임:1003 + ((만약(공법군 == '발파굴착A군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착A군, 만약(공법군 == '발파굴착B군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착B군, 만약(공법군 == '발파굴착C군', 찾기(소요량:건설품셈:3-2-5 작업인원, 작업종별='화약취급공').발파굴착C군, 0)))) * 배율) * 인력:건설노임:1016) * 찾기(계수:건설품셈:3-1-1 잡재료비·경장비, 항목='록볼트 표시기 · 전설걸이 · 마대 등 잡재료비 및 경장비 기계경비').비율 / 100", + "비목": "경비", + "출처": "건설품셈 토목 3-2-5 주⑤" + } + ], + "끝수": null, + "비고": "해석: 인력품 = 인력 호표 줄 금액 합(기계 조종원 제외) · 해석: 1발파당 인원 × 싸이클 시간(분) ÷ 60 ÷ 8시간 = 1발파당 인 · 싸이클 시간은 3-2-1 표로 설계자가 셈 · 착암공(A군 2∼4) · 보통인부(군마다 범위) 원문 범위 — 설계자 입력 · 터널노임 = 기본노임 × (1+β)(3-1-1) — 해석: β 는 장대터널 할증률 α1(갱구에서 뚫기점까지 500m 초과) · 병렬터널 한 작업조 두 막장 동시굴착 59%(비고) · 해석: 점보드릴·고소대차·로더·굴착기·숏크리트머신 운전원·기계운전원 = 건설노임 건설기계운전사 · 장비(점보드릴·로더·덤프트럭·숏크리트머신 등)와 버력처리·조명·환기·배수 등 갱내외 설비는 별도(3-1-1 주⑥) · 소형터널 작업조(비고 ㉮㉯㉰) 설계자 조정" + }, + { + "열쇠": "3-3-1 철재거푸집", + "이름": "터널 철재거푸집 설치·해체·이동", + "결과단위": "원/회", + "출처": "건설품셈 토목 3-3-1", + "소유": "공용", + "입력": [ + { + "이름": "펌프차", + "고르기": ["4504-0032", "4504-0036", "4504-0041", "4504-0043", "4504-0047", "4504-0052"], + "출처": "건설품셈 토목 3-3-1 주③" + }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "소요일수", "식": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='소요일수(설치/콘크리트타설/해체/이동)').수량" }], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1007", + "이름": "형틀목공", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='형틀목공').수량 * 소요일수", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1013", + "이름": "콘크리트공", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='콘크리트공').수량 * 소요일수", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='특별인부').수량 * 소요일수", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='보통인부').수량 * 소요일수", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계=펌프차, 지역=지역)", + "이름": "콘크리트 펌프차", + "단위": "시간", + "수량": "찾기(소요량:건설품셈:3-3-1 철재거푸집, 구분='콘크리트 펌프(차)').수량 * 8 * 소요일수" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 편성 인원·장비 × 소요일수 · 펌프차 1대 × 1일 8시간 · 펌프차 규격 설계자 고름(주③) · 1span 2차로급·복선급 기준(주①) · 샌딩 제외(주②) · 레일·침목·박리재 제외(주④)" + }, + { + "열쇠": "3-4-1 터널 방수", + "이름": "터널 방수", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 3-4-1", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1026", + "이름": "방수공", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-4-1 터널 방수, 구분='방수공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-4-1 터널 방수, 구분='보통인부').수량", + "비목": "노무비" + }, + { + "종류": "재료", + "요소": "재료:자체:일체식 방수시트", + "이름": "일체식 방수시트", + "단위": "㎡", + "수량": "찾기(소요량:건설품셈:3-4-1 방수 재료량, 구분='일체식 방수시트').수량", + "비목": "재료비", + "출처": "건설품셈 토목 3-4-1 주④" + } + ], + "덧줄": [ + { + "이름": "공구손료 및 경장비", + "식": "((찾기(소요량:건설품셈:3-4-1 터널 방수, 구분='방수공').수량) * 인력:건설노임:1026 + (찾기(소요량:건설품셈:3-4-1 터널 방수, 구분='보통인부').수량) * 인력:건설노임:1002) * 찾기(계수:건설품셈:3-4-1 경장비, 항목='공구손료 및 경장비').비율 / 100", + "비목": "경비", + "출처": "건설품셈 토목 3-4-1 주③" + } + ], + "끝수": null, + "비고": "해석: 인력품 = 인력 호표 줄 금액 합(기계 조종원 제외) · 부직포 부착 일체식 방수시트(주①) · 재료량 할증 포함(주④) · 타정못 등 소모자재 별도 · 공시에 없는 재료 = 재료_자체" + }, + { + "열쇠": "3-4-2 작업대차", + "이름": "방수 작업대차 조립 및 해체", + "결과단위": "원/회", + "출처": "건설품셈 토목 3-4-2", + "소유": "공용", + "입력": [{ "이름": "작업", "고르기": ["조립 및 해체", "조립", "해체"], "출처": "건설품셈 토목 3-4-2" }], + "중간": [ + { + "이름": "소요일수", + "식": "만약(작업 == '조립', 찾기(소요량:건설품셈:3-4-2 작업대차, 구분='소요일수', 세부='조립').수량, 만약(작업 == '해체', 찾기(소요량:건설품셈:3-4-2 작업대차, 구분='소요일수', 세부='해체').수량, 찾기(소요량:건설품셈:3-4-2 작업대차, 구분='소요일수', 세부='조립').수량 + 찾기(소요량:건설품셈:3-4-2 작업대차, 구분='소요일수', 세부='해체').수량))" + } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1006", + "이름": "비계공", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-4-2 작업대차, 구분='비계공', 세부='').수량 * 소요일수", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:건설품셈:3-4-2 작업대차, 구분='보통인부', 세부='').수량 * 소요일수", + "비목": "노무비" + } + ], + "덧줄": [ + { + "이름": "공구손료 및 경장비", + "식": "((찾기(소요량:건설품셈:3-4-2 작업대차, 구분='비계공', 세부='').수량 * 소요일수) * 인력:건설노임:1006 + (찾기(소요량:건설품셈:3-4-2 작업대차, 구분='보통인부', 세부='').수량 * 소요일수) * 인력:건설노임:1002) * 찾기(계수:건설품셈:3-4-2 경장비, 항목='공구손료 및 경장비').비율 / 100", + "비목": "경비", + "출처": "건설품셈 토목 3-4-2 주③" + } + ], + "끝수": null, + "비고": "해석: 인력품 = 인력 호표 줄 금액 합(기계 조종원 제외) · 해석: 편성 인원 × 소요일수(조립 4일 · 해체 2일) · L=10m 2차로급·복선급 대차(주①) · 재료량 설계수량(주④) · 재료 손율 공통 2-2-5(주⑤)" + }, + { + "열쇠": "3-4-3 암반청소", + "이름": "터널바닥 암반청소", + "결과단위": "원/㎡", + "출처": "건설품셈 토목 3-4-3", + "소유": "공용", + "입력": [ + { "이름": "구간", "고르기": ["공동구", "바닥_인버트"], "출처": "건설품셈 토목 3-4-3" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "만약(구간 == '공동구', 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='특별인부', 규격='').공동구, 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='특별인부', 규격='').바닥_인버트)", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "만약(구간 == '공동구', 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='보통인부', 규격='').공동구, 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='보통인부', 규격='').바닥_인버트)", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0020', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 0.2㎥(공동구)", + "단위": "시간", + "수량": "만약(구간 == '공동구', 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='굴착기', 규격='0.2㎥').공동구, 0)" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0060', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기 0.6㎥(바닥·인버트)", + "단위": "시간", + "수량": "만약(구간 == '공동구', 0, 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='굴착기', 규격='0.6㎥').바닥_인버트)" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='7204-0055', 지역=지역)", + "이름": "물탱크(살수차) 5,500ℓ", + "단위": "시간", + "수량": "만약(구간 == '공동구', 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='물탱크(살수차)', 규격='5500ℓ').공동구, 찾기(소요량:건설품셈:3-4-3 암반청소, 구분='물탱크(살수차)', 규격='5500ℓ').바닥_인버트)" + } + ], + "덧줄": [], + "끝수": null, + "비고": "콘크리트 타설 구간(바닥·공동구·인버트)에 적용" + } + ] +} diff --git a/resources/master_data/재료_자체.json b/resources/master_data/재료_자체.json index 3cccd403..6529806d 100644 --- a/resources/master_data/재료_자체.json +++ b/resources/master_data/재료_자체.json @@ -87,6 +87,7 @@ { "열쇠": "결속선", "이름": "결속선", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)" }, { "열쇠": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료) · 포켓식만" }, { "열쇠": "IV전선 2.0㎜", "이름": "IV전선", "규격": "2.0㎜", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 토목 6-7-5 강관압입추진공 조명시설" }, - { "열쇠": "백열등 100W", "이름": "백열등", "규격": "100W", "단위": "EA", "값": null, "출처": "자체", "비고": "건설품셈 토목 6-7-5 강관압입추진공 조명시설" } + { "열쇠": "백열등 100W", "이름": "백열등", "규격": "100W", "단위": "EA", "값": null, "출처": "자체", "비고": "건설품셈 토목 6-7-5 강관압입추진공 조명시설" }, + { "열쇠": "일체식 방수시트", "이름": "일체식 방수시트", "규격": "부직포 부착 터널 방수시트", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 토목 3-4-1 터널 방수 재료량" } ] } diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index a486399f..463fea5a 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -21,6 +21,7 @@ SAMPLES = [ "로직_건설품셈_공통8장.json", "로직_건설품셈_토목1장.json", "로직_건설품셈_토목2장.json", + "로직_건설품셈_토목3장.json", "로직_건설품셈_토목6장.json", "로직_산림품셈_03장.json", "로직_산림품셈_04장.json", @@ -291,6 +292,20 @@ def test_토목_관부설_시공조건_요율(whole): assert round(got["줄"][0]["수량"], 4) == round(Decimal(3) / (Decimal(13) * Decimal("1.33")), 4) +def test_토목_터널굴착_장대할증(whole): + """토목 3-2-5 — A군 싸이클 480분 · 갱구 1,200m(α1 20%) = 1인 × 480/60/8 × 1.2.""" + given = { + "공법군": "발파굴착A군", + "싸이클": 480, + "착암공인원": 3, + "보통인부인원": 3, + "갱구거리": 1200, + "병렬터널": "아님", + } + got = mf.run(whole, "건설품셈:3-2-5 작업인원", given) + assert got["줄"][0]["수량"] == Decimal("1.2") + + def test_범위_입력은_막음(whole): with pytest.raises(mf.FormulaError): mf.run(