From fd9b7749c0d34258e96a3ff70f0f9434b133b806 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 16:40:35 +0900 Subject: [PATCH] =?UTF-8?q?feat(master=5Fdata):=20=EC=82=B0=EB=A6=BC?= =?UTF-8?q?=ED=92=88=EC=85=88=2010=EC=9E=A5=C2=B711=EC=9E=A5=C2=B714?= =?UTF-8?q?=EC=9E=A5=20=EB=A1=9C=EC=A7=81=2024=EC=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로직_산림품셈_10장: 17줄(골재운반 · 중기운반 트레일러 · 모노레일 · 케이블 크레인 · 1톤 덤프 · 헬리콥터 · 불도저 운반) - 로직_산림품셈_11장: 5줄(콘테이너 · 규준틀 둘 · 쇄석 부설 작업량+돈) - 로직_산림품셈_14장: 2줄(입목뿌리 밑막이 · 근주이식) - 로직_건설품셈_공통8장: 고르기 넓힘(덤프 15ton · 트레일러 20ton · 불도저 · 집게 조합 0.8㎥) - 시험 둘 더함(16 통과) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- .../master_data/로직_건설품셈_공통8장.json | 4 +- resources/master_data/로직_산림품셈_10장.json | 656 ++++++++++++++++++ resources/master_data/로직_산림품셈_11장.json | 165 +++++ resources/master_data/로직_산림품셈_14장.json | 117 ++++ resources/tester/test_masterdata_check.py | 15 + 5 files changed, 955 insertions(+), 2 deletions(-) create mode 100644 resources/master_data/로직_산림품셈_10장.json create mode 100644 resources/master_data/로직_산림품셈_11장.json create mode 100644 resources/master_data/로직_산림품셈_14장.json diff --git a/resources/master_data/로직_건설품셈_공통8장.json b/resources/master_data/로직_건설품셈_공통8장.json index e79c58d1..9cbe57ca 100644 --- a/resources/master_data/로직_건설품셈_공통8장.json +++ b/resources/master_data/로직_건설품셈_공통8장.json @@ -69,7 +69,7 @@ "출처": "건설품셈 공통 8-1-5 · 8-1-6", "소유": "공용", "입력": [ - { "이름": "기계", "고르기": ["1730-0015", "7204-0055"] }, + { "이름": "기계", "고르기": ["1730-0015", "7204-0055", "0602-0150", "2702-0020", "0101-0007", "0101-0010", "0101-0012", "0101-0019", "0101-0032"] }, { "이름": "지역", "고르기": [ @@ -139,7 +139,7 @@ "출처": "건설품셈 공통 8-1-5 · 8-1-6 · 8-1-7 · 8-4-8 주⑤", "소유": "공용", "입력": [ - { "이름": "기계", "고르기": ["0201-0060"] }, + { "이름": "기계", "고르기": ["0201-0060", "0201-0080"] }, { "이름": "집게", "고르기": ["7206-0070"] }, { "이름": "지역", diff --git a/resources/master_data/로직_산림품셈_10장.json b/resources/master_data/로직_산림품셈_10장.json new file mode 100644 index 00000000..c52d61e8 --- /dev/null +++ b/resources/master_data/로직_산림품셈_10장.json @@ -0,0 +1,656 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "10-3 골재운반 작업량", + "이름": "골재운반 덤프트럭 시간당 작업량", + "결과단위": "㎥/시간", + "출처": "산림품셈 10-3-1 주", + "소유": "공용", + "입력": [{ "이름": "qt", "단위": "㎥" }, { "이름": "f", "단위": "" }, { "이름": "E", "단위": "" }, { "이름": "Cm", "단위": "분" }], + "중간": [], + "결과": { "식": "반올림(60 * qt * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "비고": "원문은 식만(Q=60×qt×f×E/㎝) — qt · f · E · ㎝ 값 없음 · 설계자 입력" + }, + { + "열쇠": "10-3-1 모래", + "이름": "골재운반 모래(덤프 15ton)", + "결과단위": "원/㎥", + "출처": "산림품셈 10-3-1", + "소유": "공용", + "입력": [ + { "이름": "qt", "단위": "㎥" }, + { "이름": "f", "단위": "" }, + { "이름": "E", "단위": "" }, + { "이름": "Cm", "단위": "분" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-3 골재운반 작업량, qt=qt, f=f, E=E, Cm=Cm)" }], + "호표": [ + { "종류": "로직", "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='0602-0150', 지역=지역)", "이름": "덤프트럭 15ton", "단위": "시간", "수량": "1 / 작업량" } + ], + "덧줄": [], + "끝수": null, + "비고": "구입 별도계상 · 덤프 손료 보정 없음" + }, + { + "열쇠": "10-3-2 잡석", + "이름": "골재운반 잡석(덤프 15ton)", + "결과단위": "원/㎥", + "출처": "산림품셈 10-3-2", + "소유": "공용", + "입력": [ + { "이름": "qt", "단위": "㎥" }, + { "이름": "f", "단위": "" }, + { "이름": "E", "단위": "" }, + { "이름": "Cm", "단위": "분" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-3 골재운반 작업량, qt=qt, f=f, E=E, Cm=Cm)" }], + "호표": [ + { "종류": "로직", "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='0602-0150', 지역=지역)", "이름": "덤프트럭 15ton", "단위": "시간", "수량": "1 / 작업량" } + ], + "덧줄": [], + "끝수": null, + "비고": "골재생산 별도계상 · 덤프 손료 보정 없음" + }, + { + "열쇠": "10-3-3 혼합골재", + "이름": "골재운반 혼합골재(덤프 15ton)", + "결과단위": "원/㎥", + "출처": "산림품셈 10-3-3", + "소유": "공용", + "입력": [ + { "이름": "qt", "단위": "㎥" }, + { "이름": "f", "단위": "" }, + { "이름": "E", "단위": "" }, + { "이름": "Cm", "단위": "분" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-3 골재운반 작업량, qt=qt, f=f, E=E, Cm=Cm)" }], + "호표": [ + { "종류": "로직", "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='0602-0150', 지역=지역)", "이름": "덤프트럭 15ton", "단위": "시간", "수량": "1 / 작업량" } + ], + "덧줄": [], + "끝수": null, + "비고": "하차비 1회 — 값 없음 · 덤프 손료 보정 없음" + }, + { + "열쇠": "10-4 중기운반 트레일러", + "이름": "중기운반 트레일러(20ton)", + "결과단위": "원/회", + "출처": "산림품셈 10-4", + "소유": "공용", + "입력": [ + { "이름": "t2", "단위": "분" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [ + { + "이름": "Cm", + "식": "찾기(소요량:산림품셈:10-4 중기운반, 구분='운반', 운반수단='트레일러운반(20TON)', 항목='t1').값 + t2 + 찾기(소요량:산림품셈:10-4 중기운반, 구분='운반', 운반수단='트레일러운반(20TON)', 항목='t3').값 + 찾기(소요량:산림품셈:10-4 중기운반, 구분='운반', 운반수단='트레일러운반(20TON)', 항목='t4').값", + "출처": "산림품셈 10-4 「㎝=t1+t2+t3+t4」" + }, + { "이름": "N", "식": "60 * 0.9 / Cm", "출처": "산림품셈 10-4 「N=60×0.9/㎝」" } + ], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='2702-0020', 지역=지역)", + "이름": "트럭 트랙터 및 평판트레일러 20ton", + "단위": "시간", + "수량": "1 / N" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: N = 시간당 운반 횟수 · 1회 = 기계 1/N 시간 · t2 는 「운반시간 참조」 — 설계자 입력(분) · To=㎝-(t1+t3) 쓰는 곳 원문에 없음 · 트럭운반(10.5ton)은 화물트럭 기계 요소 없어 빠짐 · 자주식은 제외(주)" + }, + { + "열쇠": "10-7-1 노선선정", + "이름": "모노레일 노선선정", + "결과단위": "원/100m", + "출처": "산림품셈 10-7-1", + "소유": "공용", + "입력": [{ "이름": "경사도", "고르기": ["30도 미만", "30도 이상"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-1 노선선정, 경사도=경사도).작업반장", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-1 노선선정, 경사도=경사도).특별인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "노선선정이 필요할 때만(주)" + }, + { + "열쇠": "10-7-2 가설", + "이름": "모노레일 가설", + "결과단위": "원/100m", + "출처": "산림품셈 10-7-2", + "소유": "공용", + "입력": [{ "이름": "경사도", "고르기": ["30도 미만", "30도 이상"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).작업반장", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "10-7-3 철거", + "이름": "모노레일 철거", + "결과단위": "원/100m", + "출처": "산림품셈 10-7-3", + "소유": "공용", + "입력": [{ "이름": "경사도", "고르기": ["30도 미만", "30도 이상"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).작업반장", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).특별인부", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "벌목(주①) · 지주 파이프 어려운 곳(주②) 별도" + }, + { + "열쇠": "10-7-4 가설·철거", + "이름": "모노레일 가설·철거(단가표)", + "결과단위": "원/1기", + "출처": "산림품셈 10-7-4", + "소유": "공용", + "입력": [ + { "이름": "연장", "단위": "m" }, + { "이름": "경사도", "고르기": ["30도 미만", "30도 이상"] }, + { "이름": "노선선정", "고르기": ["필요", "필요 없음"] } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).작업반장 + 찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).작업반장 + 만약(노선선정 == '필요', 찾기(소요량:산림품셈:10-7-1 노선선정, 경사도=경사도).작업반장, 0)) * 연장 / 100", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).특별인부 + 찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).특별인부 + 만약(노선선정 == '필요', 찾기(소요량:산림품셈:10-7-1 노선선정, 경사도=경사도).특별인부, 0)) * 연장 / 100", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:10-7-2 가설, 경사도=경사도).보통인부 + 찾기(소요량:산림품셈:10-7-3 철거, 경사도=경사도).보통인부) * 연장 / 100", + "비목": "노무비" + } + ], + "덧줄": [ + { + "이름": "기타비용", + "식": "노무비 * 찾기(소요량:산림품셈:10-7-4 가설·철거 단가표, 명칭='기타비용').수량 / 100", + "비목": "경비", + "출처": "산림품셈 10-7-4 3 가 주①(상한)" + } + ], + "끝수": null, + "비고": "해석: 단가표 인력 수량 칸이 비어 10-7-1~3 품(100m당) × 연장/100 으로 채움 · 본기계 · 차체 · 레일·지지대는 임대료·견적(주②) — 요소 없음" + }, + { + "열쇠": "10-7-4 운전", + "이름": "모노레일 운전(단가표)", + "결과단위": "원/일", + "출처": "산림품셈 10-7-4", + "소유": "공용", + "입력": [ + { "이름": "출력", "단위": "ps" }, + { "이름": "연료", "고르기": ["휘발유", "경유"] }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [], + "호표": [ + { + "종류": "재료", + "요소": "재료:오피넷유가:{연료}:{지역}", + "이름": "연료비", + "단위": "ℓ", + "수량": "출력 * 0.253 * 6", + "비목": "재료비", + "출처": "산림품셈 10-7-4 3 나 「ps × 0.253ℓ× 6h」" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-7-4 운전 단가표, 명칭='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "모노레일 출력(ps) · 연료 종류 원문에 없음 — 설계자 입력 · 해석: 적재·짐부리기 품(보통인부 2인/일)은 이 2인으로 봄 · 1일 운반량 Q=360×q/㎝ 는 q 표 칸 이름(「단궤도 재적」) 때문에 못 세움" + }, + { + "열쇠": "10-8-2 운반대 설치", + "이름": "케이블 크레인 운반대 설치", + "결과단위": "원/1기", + "출처": "산림품셈 10-8-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-8-2 운반대 설치, 구분='운반대').보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "소재 0.70㎥ · 각재·판재 0.20㎥ 재료 요소 없음(각재 칸 이름 「각재, 판재」도 못 가리킴) · 기타비용 원목+각재·판재비 20% 는 재료비가 없어 빠짐" + }, + { + "열쇠": "10-8-3 케이블 크레인 운전", + "이름": "케이블 크레인 운전", + "결과단위": "원/일", + "출처": "산림품셈 10-8-3", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-8-3 케이블 크레인 운전, 명칭='특별인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "보통인부 = 짐내리기 품(10-8-1) — 칸 이름(「보통인부 짐내리는 인부」) 때문에 못 가리킴 · 연료비 — 운전시간(주①)·윈치 출력(주②)은 있으나 연료 소비율 없음 · 운반기구 손료 별도" + }, + { + "열쇠": "10-9 1톤 덤프트럭 시간당 경비", + "이름": "4륜구동 1톤 덤프트럭 시간당 기계경비", + "결과단위": "원/시간", + "출처": "산림품셈 10-9", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [ + { + "이름": "손료", + "식": "버림(기계:건설품셈:0602-0025.가격 * 1000 * (기계:건설품셈:0602-0025.상각비계수 + 기계:건설품셈:0602-0025.정비비계수 + 기계:건설품셈:0602-0025.관리비계수) / 10000000, 0)", + "출처": "산림품셈 10-9 · 건설품셈 공통 8-1-5 12" + }, + { "이름": "비율", "식": "찾기(소요량:산림품셈:10-9 인용문, 구분='2.5톤 덤프 주 연료 대비').비율", "출처": "산림품셈 10-9" }, + { "이름": "직종", "식": "기계:건설품셈:0602-0025.조종원직종" } + ], + "호표": [ + { + "종류": "재료", + "요소": "재료:오피넷유가:경유:{지역}", + "이름": "주연료", + "단위": "ℓ", + "수량": "기계:건설품셈:0602-0025.주연료 * 비율 / 100", + "비목": "재료비", + "출처": "산림품셈 10-9" + }, + { + "종류": "인력", + "요소": "인력:건설노임:{직종}", + "이름": "조종원", + "단위": "인", + "수량": "기계:건설품셈:0602-0025.조종원 / 8", + "비목": "노무비", + "출처": "건설품셈 공통 8-1-3 6", + "비고": "환산 근거 미확인 — 우선 하루 ÷ 8" + } + ], + "덧줄": [ + { "이름": "잡재료비", "식": "재료비 * 기계:건설품셈:0602-0025.잡재료율 / 100", "비목": "재료비", "출처": "건설품셈 공통 8-4 주②" }, + { "이름": "기계손료", "식": "손료", "비목": "경비", "출처": "건설품셈 공통 8-1-6 2" } + ], + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "비고": "손료·운전경비는 2.5톤(0602-0025) · 주연료 2.5톤의 80% · 중기가격 조달청 등재가격은 요소 없음 · 작업량(건설품셈 덤프트럭 식)·10-9-1 운반량 쓰는 식 요소 없음 · 주② 제잡비 비율 원문에 없음" + }, + { + "열쇠": "10-10-1 콘크리트 및 골재운반(지상)", + "이름": "헬리콥터 콘크리트 및 골재운반 지상작업", + "결과단위": "원(원문 단위 없음)", + "출처": "산림품셈 10-10-1", + "소유": "공용", + "입력": [{ "이름": "자재", "고르기": ["콘크리트", "골재"] }, { "이름": "적상기계", "고르기": ["사용 안 함", "사용"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-10-1 콘크리트 및 골재운반(지상), 명칭='작업반장').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-10-1 콘크리트 및 골재운반(지상), 명칭='보통인부', 세부='합계').수량 - 만약(자재 == '콘크리트', 찾기(소요량:산림품셈:10-10-1 콘크리트 및 골재운반(지상), 명칭='보통인부', 세부='계량·짐표찰 붙이기').수량, 0) - 만약(적상기계 == '사용', 찾기(소요량:산림품셈:10-10-1 주, 구분='짐 싣는 곳 보통인부').감소, 0)", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "원문 표에 단위 없음 · 버켓 손료 4개 요소 없음 · 헬리콥터 비행경비 · 로더 경비 별도 · 지상작업 30% 할증은 설계 판단" + }, + { + "열쇠": "10-10-2 그 외 자재의 운반품셈", + "이름": "헬리콥터 그 외 자재 운반 지상작업", + "결과단위": "원(원문 단위 없음)", + "출처": "산림품셈 10-10-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-10-2 그 외 자재의 운반품셈, 명칭='작업반장').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:10-10-2 그 외 자재의 운반품셈, 명칭='보통인부', 세부='합계').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "원문 표에 단위 없음 · 와이어 손료 7매(1시간당 4%) 요소 없음 · 헬리콥터 비행경비 별도" + }, + { + "열쇠": "10-11 불도저 운반 작업량", + "이름": "불도저 운반 시간당 작업량", + "결과단위": "㎥/시간", + "출처": "산림품셈 10-11 주②", + "소유": "공용", + "입력": [{ "이름": "재료", "고르기": ["토사", "파쇄암", "발파암"] }], + "중간": [ + { + "이름": "q", + "식": "찾기(소요량:산림품셈:10-11 불도저 운반, 구분='q0').값 * 찾기(소요량:산림품셈:10-11 불도저 운반, 구분='e').값", + "출처": "산림품셈 10-11 주② 「q=3.2×e」" + }, + { "이름": "f", "식": "찾기(소요량:산림품셈:10-11 불도저 운반, 구분='f', 세부=재료).식" }, + { "이름": "E세부", "식": "만약(재료 == '토사', '토사', '암석')" }, + { "이름": "E", "식": "찾기(소요량:산림품셈:10-11 불도저 운반, 구분='E', 세부=E세부).값" }, + { + "이름": "Cm", + "식": "찾기(소요량:산림품셈:10-11 불도저 운반, 구분='L').값 / 찾기(소요량:산림품셈:10-11 불도저 운반, 구분='V1').값 + 찾기(소요량:산림품셈:10-11 불도저 운반, 구분='L').값 / 찾기(소요량:산림품셈:10-11 불도저 운반, 구분='V2').값 + 찾기(소요량:산림품셈:10-11 불도저 운반, 구분='t').값", + "출처": "산림품셈 10-11 주② 「㎝=L/V1+L/V2+0.25」" + } + ], + "결과": { "식": "반올림(60 * q * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "비고": "해석: 파쇄암·발파암의 E 는 「암석」 줄" + }, + { + "열쇠": "10-11 불도저 운반", + "이름": "불도저 운반", + "결과단위": "원/㎥", + "출처": "산림품셈 10-11", + "소유": "공용", + "입력": [ + { "이름": "재료", "고르기": ["토사", "파쇄암", "발파암"] }, + { "이름": "기계", "고르기": ["0101-0007", "0101-0010", "0101-0012", "0101-0019", "0101-0032"] }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-11 불도저 운반 작업량, 재료=재료)" }], + "호표": [{ "종류": "로직", "요소": "로직(건설품셈:8 기계 시간당 경비, 기계=기계, 지역=지역)", "이름": "불도저(무한궤도)", "단위": "시간", "수량": "1 / 작업량" }], + "덧줄": [], + "끝수": null, + "비고": "불도저 규격 원문에 없음 — 설계자 고름(주③ 건설품셈 8-2-1) · 불도저 손료 보정(건설품셈 공통 8-1-7) 미반영 — 일반 기계 경비 로직" + } + ] +} diff --git a/resources/master_data/로직_산림품셈_11장.json b/resources/master_data/로직_산림품셈_11장.json new file mode 100644 index 00000000..94cdb0b0 --- /dev/null +++ b/resources/master_data/로직_산림품셈_11장.json @@ -0,0 +1,165 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "11-1 콘테이너형 가설건축물", + "이름": "콘테이너형 가설건축물 설치 또는 해체", + "결과단위": "원/개", + "출처": "산림품셈 11-1", + "소유": "공용", + "입력": [ + { "이름": "길이", "고르기": ["3M", "6M", "9M", "12M"] }, + { "이름": "폭", "고르기": ["2.4M", "3.0M", "3.5M", "4.8M", "6.0M"] } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1006", + "이름": "비계공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-1 콘테이너형 가설건축물, 길이=길이, 폭=폭).비계공", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-1 콘테이너형 가설건축물, 길이=길이, 폭=폭).특별인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "설치 · 해체 각각(주①) · 트럭크레인 10ton 1개 2시간(주③)은 계수 표 없어 빠짐 · 기계경비·운반비 별도(주②)" + }, + { + "열쇠": "11-2 토공의 비탈 규준틀", + "이름": "토공의 비탈 규준틀", + "결과단위": "원/개소", + "출처": "산림품셈 11-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1023", + "이름": "건축목공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-2 토공의 비탈 규준틀, 종류='건축목공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-2 토공의 비탈 규준틀, 종류='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "목재 재료 요소 없음 — 손율(11-2 목재 손율) 쓸 곳 없음 · 재료량 설계수량" + }, + { + "열쇠": "11-3 수평규준틀", + "이름": "수평규준틀", + "결과단위": "원/개소", + "출처": "산림품셈 11-3", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1023", + "이름": "건축목공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-3 수평규준틀, 종류='건축목공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:11-3 수평규준틀, 종류='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "목재 재료 요소 없음 — 손율(11-3 목재 손율) 쓸 곳 없음 · 재료량 설계수량" + }, + { + "열쇠": "11-4 쇄석·혼합석 부설 작업량", + "이름": "쇄석·혼합석 부설 시간당 작업량", + "결과단위": "㎥/시간", + "출처": "산림품셈 11-4 주①", + "소유": "공용", + "입력": [], + "중간": [ + { "이름": "q", "식": "찾기(소요량:산림품셈:11-4 쇄석·혼합석 부설, 구분='q(버킷용량)').적용" }, + { "이름": "k", "식": "찾기(소요량:산림품셈:11-4 쇄석·혼합석 부설, 구분='k(버킷계수)').적용" }, + { "이름": "f", "식": "찾기(소요량:산림품셈:11-4 쇄석·혼합석 부설, 구분='f(체적환산계수)').적용" }, + { "이름": "E", "식": "찾기(소요량:산림품셈:11-4 쇄석·혼합석 부설, 구분='E(작업효율)').적용" }, + { "이름": "Cm", "식": "찾기(소요량:산림품셈:11-4 쇄석·혼합석 부설, 구분='㎝(sec, 1회 사이클 시간)').적용" } + ], + "결과": { "식": "반올림(3600 * q * k * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "비고": "해석: 원문 식 「3600×90×k×f×E/㎝」의 90 을 q(버킷용량)로 봄" + }, + { + "열쇠": "11-4 쇄석·혼합석 부설", + "이름": "쇄석·혼합석 부설(굴착기 0.7㎥)", + "결과단위": "원/㎥", + "출처": "산림품셈 11-4", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:11-4 쇄석·혼합석 부설 작업량)" }], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0070', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 0.7㎥", + "단위": "시간", + "수량": "1 / 작업량" + } + ], + "덧줄": [], + "끝수": null, + "비고": "그레이더 사용 시 건설품셈 8-2-7(주②) — 로직 없음" + } + ] +} diff --git a/resources/master_data/로직_산림품셈_14장.json b/resources/master_data/로직_산림품셈_14장.json new file mode 100644 index 00000000..ec9b8b18 --- /dev/null +++ b/resources/master_data/로직_산림품셈_14장.json @@ -0,0 +1,117 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "14-1 입목뿌리 밑막이", + "이름": "입목뿌리 밑막이", + "결과단위": "원/10본", + "출처": "산림품셈 14-1", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기+부착용 집게 시간당 경비, 기계='0201-0080', 집게='7206-0070', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 0.8㎥ + 부착용 집게(우드그랩)", + "단위": "시간", + "수량": "찾기(소요량:산림품셈:14-1 입목뿌리 밑막이, 장비='0.8㎥ 굴착기(우드그랩 부착)').수량" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:14-1 입목뿌리 밑막이, 장비='보통인부').수량 / 8", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 우드그랩 = 부착용 집게 0.6∼0.8(산림품셈 2-2-11 → 건설품셈 7206) · 해석: 보통인부 시간 ÷ 8(건설노임 일시간 8) = 인 · 장비이동거리 50m 이내" + }, + { + "열쇠": "14-2 근주이식", + "이름": "근주이식", + "결과단위": "원/10본", + "출처": "산림품셈 14-2", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0080', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 0.8㎥", + "단위": "시간", + "수량": "찾기(소요량:산림품셈:14-2 근주이식, 장비='0.8㎥ 굴착기').수량" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:14-2 근주이식, 장비='보통인부').수량 / 8", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 보통인부 시간 ÷ 8(건설노임 일시간 8) = 인 · 근원직경 10∼30㎝(주②) · 장비이동거리 50m 이내 · 건설품셈 공통 8-2-3 계수 필요(0.2㎥ · 0.4㎥ 굴착기를 쓸 때)" + } + ] +} diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index c9490d19..9c102860 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -16,7 +16,10 @@ SAMPLES = [ "계수_산림품셈_9장.json", "기계_건설품셈.json", "로직_건설품셈_공통8장.json", + "로직_산림품셈_10장.json", + "로직_산림품셈_11장.json", "로직_산림품셈_13장.json", + "로직_산림품셈_14장.json", "로직_산림품셈_9장.json", "소요량_산림품셈_13장.json", ] @@ -126,6 +129,18 @@ def test_굴착기_부착용_집게(whole): assert cents(got["계"]) == "86467.61" +def test_불도저_운반_작업량(whole): + """10-11 — q=3.2×0.96 · ㎝=20/55+20/70+0.25 · Q=60×q×(1/1.30)×0.55/㎝.""" + got = mf.run(whole, "산림품셈:10-11 불도저 운반 작업량", {"재료": "토사"}) + assert got["결과"] == Decimal("86.709") + + +def test_중기운반_트레일러_횟수(whole): + """10-4 — ㎝=20+30+20+0.42 · N=60×0.9/㎝ · 1회 = 1/N 시간.""" + got = mf.run(whole, "산림품셈:10-4 중기운반 트레일러", {"t2": 30, "지역": "전국평균"}) + assert got["줄"][0]["수량"].quantize(Decimal("0.0001")) == Decimal("1.3041") + + def test_범위_입력은_막음(whole): with pytest.raises(mf.FormulaError): mf.run(