From 5ac7257a702bce318d714a6fc61a73ecc5c711e9 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 20:27:42 +0900 Subject: [PATCH] =?UTF-8?q?fix(master=5Fdata):=208-1-7=20=EC=86=90?= =?UTF-8?q?=EB=A3=8C=20=EB=B3=B4=EC=A0=95=20=E2=80=94=20=EA=B2=BD=EB=B9=84?= =?UTF-8?q?=20=EB=B3=B4=EC=A0=95=20=EC=A4=84=EC=9D=84=20=EB=AA=A8=EB=93=A0?= =?UTF-8?q?=20=EA=B8=B0=EA=B3=84=EB=A1=9C=20=C2=B7=20=EC=86=90=EB=A3=8C?= =?UTF-8?q?=EB=A7=8C=20=EB=A1=9C=EC=A7=81=20=EB=B3=B4=EC=A0=95=20=EC=A4=84?= =?UTF-8?q?=20=C2=B7=20=EC=82=B0=EB=A6=BC=2010-11=20=EB=B6=88=EB=8F=84?= =?UTF-8?q?=EC=A0=80=20=EC=9A=B4=EB=B0=98=20=EC=95=94=EC=84=9D=20=EB=B3=B4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 「공통 8 기계 시간당 경비(손료 보정)」 고르기 = 일반 경비 줄 전부 + 로더(무한궤도) · 8-1-7 표 밖 기종과 주① 19톤 이상 불도저 · 18톤 이상 덤프는 가산 0 - 새 줄 「공통 8 기계 시간당 손료(손료 보정)」 — 굴착기(무한궤도)만 가산 - 산림 10-11 불도저 운반: 파쇄암 · 발파암 = 암석작업 보정(해석은 비고) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- .../master_data/로직_건설품셈_공통8장.json | 353 ++++++++++++++---- resources/master_data/로직_산림품셈_10장.json | 27 +- resources/tester/test_masterdata_check.py | 22 ++ 3 files changed, 304 insertions(+), 98 deletions(-) diff --git a/resources/master_data/로직_건설품셈_공통8장.json b/resources/master_data/로직_건설품셈_공통8장.json index f6d42c94..cf41e853 100644 --- a/resources/master_data/로직_건설품셈_공통8장.json +++ b/resources/master_data/로직_건설품셈_공통8장.json @@ -130,11 +130,11 @@ { "이름": "기계손료", "식": "손료", "비목": "경비", "출처": "건설품셈 공통 8-1-6 2" } ], "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", - "비고": "고르기는 쓰는 기계만 — 주연료·조종원이 있는 기계는 더 넣어 씀 · 암석·전석섞인토사 작업의 불도저(19톤 미만 · 타이어·습지)·로더(무한궤도)·덤프트럭(18톤 미만)은 「8 기계 시간당 경비(손료 보정)」(8-1-7 1)" + "비고": "고르기는 쓰는 기계만 — 주연료·조종원이 있는 기계는 더 넣어 씀 · 암석·전석섞인토사 작업의 불도저(19톤 미만 · 타이어·습지)·로더(무한궤도)·덤프트럭(18톤 미만)은 「공통 8 기계 시간당 경비(손료 보정)」(8-1-7 1)" }, { "열쇠": "공통 8 기계 시간당 경비(손료 보정)", - "이름": "기계 시간당 기계경비(불도저 · 로더(무한궤도) · 덤프트럭 손료 보정)", + "이름": "기계 시간당 기계경비(8-1-7 손료 보정)", "결과단위": "원/시간", "출처": "건설품셈 공통 8-1-5 · 8-1-6 · 8-1-7", "소유": "공용", @@ -142,13 +142,123 @@ { "이름": "기계", "고르기": [ + "1730-0015", + "7204-0055", + "0602-0150", + "2702-0020", "0101-0007", "0101-0010", "0101-0012", + "0101-0019", + "0101-0032", + "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", + "4504-0032", + "4504-0036", + "4504-0041", + "4504-0043", + "4504-0047", + "4504-0052", + "4205-0010", + "4205-0017", + "4205-0020", + "4205-0030", + "4205-0040", + "4205-0045", + "2105-0002", + "2105-0003", + "2105-0010", + "2105-0015", + "2105-0018", + "2502-0025", + "0602-0025", + "2502-0050", + "2101-0010", + "2101-0015", + "2101-0020", + "2101-0025", + "2101-0030", + "2101-0035", + "2101-0040", + "2101-0050", + "2101-0070", + "2101-0080", + "2101-0100", + "2101-0150", + "2101-0220", + "2101-0280", + "2101-0300", + "7204-0018", + "7204-0160", + "5205-0210", + "5405-0110", + "7505-0450", + "5205-0255", + "7505-0150", + "5205-0103", + "6701-0147", + "6701-0184", + "5205-0170", + "7505-0350", + "0302-0134", + "7505-0100", + "7505-0050", + "5205-0071", + "7505-0025", + "0502-0036", + "1306-0100", + "1506-0032", + "0121-0004", + "1305-0007", + "7204-0038", + "7204-0065", + "0302-0057", + "5701-0020", + "0302-0095", + "3201-0003", + "1106-0012", + "1406-0015", + "1206-0008", + "3601-0102", + "1306-0025", + "0211-0018", + "0602-0045", + "3901-0300", + "7505-0250", + "2502-0035", + "1306-0120", + "1106-0010", + "3201-0001", + "1406-0008", + "3601-0202", + "3601-0402", + "3611-0142", + "2502-0020", + "2502-0075", + "5205-0035", + "2702-0030", + "2702-0060", "0102-0015", "0102-0028", "0102-0033", - "0121-0004", "0121-0013", "0301-0057", "0301-0076", @@ -158,85 +268,35 @@ "0301-0153", "0301-0172", "0301-0287", - "0602-0025", - "0602-0045", "0602-0060", "0602-0080", - "0602-0105", - "0602-0150" + "0602-0105" ] }, { "이름": "지역", - "고르기": [ - "전국평균", - "전국", - "서울", - "경기", - "강원", - "충북", - "충남", - "전북", - "경북", - "경남", - "부산", - "제주", - "대구", - "인천", - "대전", - "울산", - "세종", - "전남광주" - ], + "고르기": ["전국평균", "전국", "서울", "경기", "강원", "충북", "충남", "전북", "경북", "경남", "부산", "제주", "대구", "인천", "대전", "울산", "세종", "전남광주"], "출처": "건설품셈 공통 8-1-7 5" }, - { - "이름": "보정작업", - "고르기": [ - "해당 없음", - "암석작업(연암・보통암・경암)", - "전석섞인토사" - ], - "출처": "건설품셈 공통 8-1-7 1" - } + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } ], "중간": [ { "이름": "보정기종", - "식": "만약(기계 == '0101-0007' 또는 기계 == '0101-0010' 또는 기계 == '0101-0012' 또는 기계 == '0102-0015' 또는 기계 == '0102-0028' 또는 기계 == '0102-0033' 또는 기계 == '0121-0004' 또는 기계 == '0121-0013', '불도저(19톤이상 제외)', 만약(기계 == '0602-0025' 또는 기계 == '0602-0045' 또는 기계 == '0602-0060' 또는 기계 == '0602-0080' 또는 기계 == '0602-0105' 또는 기계 == '0602-0150', '덤프트럭', '굴착기(무한궤도) 및 로더(무한궤도)'))", + "식": "만약(기계 == '0101-0007' 또는 기계 == '0101-0010' 또는 기계 == '0101-0012' 또는 기계 == '0102-0015' 또는 기계 == '0102-0028' 또는 기계 == '0102-0033' 또는 기계 == '0121-0004' 또는 기계 == '0121-0013', '불도저(19톤이상 제외)', 만약(기계 == '0602-0025' 또는 기계 == '0602-0045' 또는 기계 == '0602-0060' 또는 기계 == '0602-0080' 또는 기계 == '0602-0105' 또는 기계 == '0602-0150', '덤프트럭', 만약(기계 == '0301-0057' 또는 기계 == '0301-0076' 또는 기계 == '0301-0095' 또는 기계 == '0301-0115' 또는 기계 == '0301-0134' 또는 기계 == '0301-0153' 또는 기계 == '0301-0172' 또는 기계 == '0301-0287', '굴착기(무한궤도) 및 로더(무한궤도)', '없음')))", "출처": "건설품셈 공통 8-1-7 1 주①" }, - { - "이름": "가산비율", - "식": "만약(보정작업 == '해당 없음', 0, 찾기(계수:건설품셈:공통 8-1-7 손료보정, 기종=보정기종, 작업=보정작업).가산비율)", - "출처": "건설품셈 공통 8-1-7 1" - }, + { "이름": "가산비율", "식": "만약(보정작업 == '해당 없음' 또는 보정기종 == '없음', 0, 찾기(계수:건설품셈:공통 8-1-7 손료보정, 기종=보정기종, 작업=보정작업).가산비율)", "출처": "건설품셈 공통 8-1-7 1" }, { "이름": "손료", "식": "버림(기계:건설품셈:{기계}.가격 * 1000 * ((기계:건설품셈:{기계}.상각비계수 + 기계:건설품셈:{기계}.정비비계수) * (1 + 가산비율 / 100) + 기계:건설품셈:{기계}.관리비계수) / 10000000, 0)", "출처": "건설품셈 공통 8-1-5 12 · 8-1-6 4 · 8-1-7 1" }, - { - "이름": "연료", - "식": "기계:건설품셈:{기계}.주연료종류", - "출처": "건설품셈 공통 8-4 주①㉰" - }, - { - "이름": "직종", - "식": "기계:건설품셈:{기계}.조종원직종", - "출처": "건설품셈 공통 8-1-3 5" - } + { "이름": "연료", "식": "기계:건설품셈:{기계}.주연료종류", "출처": "건설품셈 공통 8-4 주①㉰" }, + { "이름": "직종", "식": "기계:건설품셈:{기계}.조종원직종", "출처": "건설품셈 공통 8-1-3 5" } ], "호표": [ - { - "종류": "재료", - "요소": "재료:오피넷유가:{연료}:{지역}", - "이름": "주연료", - "단위": "ℓ", - "수량": "기계:건설품셈:{기계}.주연료", - "비목": "재료비", - "출처": "건설품셈 공통 8-4-1" - }, + { "종류": "재료", "요소": "재료:오피넷유가:{연료}:{지역}", "이름": "주연료", "단위": "ℓ", "수량": "기계:건설품셈:{기계}.주연료", "비목": "재료비", "출처": "건설품셈 공통 8-4-1" }, { "종류": "인력", "요소": "인력:건설노임:{직종}", @@ -249,21 +309,11 @@ } ], "덧줄": [ - { - "이름": "잡재료비", - "식": "재료비 * 기계:건설품셈:{기계}.잡재료율 / 100", - "비목": "재료비", - "출처": "건설품셈 공통 8-4 주②" - }, - { - "이름": "기계손료", - "식": "손료", - "비목": "경비", - "출처": "건설품셈 공통 8-1-6 2" - } + { "이름": "잡재료비", "식": "재료비 * 기계:건설품셈:{기계}.잡재료율 / 100", "비목": "재료비", "출처": "건설품셈 공통 8-4 주②" }, + { "이름": "기계손료", "식": "손료", "비목": "경비", "출처": "건설품셈 공통 8-1-6 2" } ], "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", - "비고": "주① 대로 불도저(무한궤도) 19톤 이상 · 덤프트럭 18톤 이상은 고르기에서 뺌(보정 없음 — 「8 기계 시간당 경비」) · 타이어·습지 불도저는 톤수와 관계없이 보정 · 굴착기(무한궤도)는 「8 굴착기(무한궤도) 시간당 경비」" + "비고": "8-1-7 표의 기종만 가산 — 불도저(무한궤도) 19톤 미만 · 타이어·습지 불도저 · 로더(무한궤도) · 덤프트럭 18톤 미만 · 주① 대로 불도저 19톤 이상 · 덤프트럭 18톤 이상과 표 밖 기종은 가산 0 · 굴착기(무한궤도)는 「공통 8 굴착기(무한궤도) 시간당 경비」" }, { "열쇠": "공통 8 굴착기+부착용 집게 시간당 경비", @@ -538,7 +588,160 @@ } ], "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12)", - "비고": "원문 운전경비 표에 주연료·조종원이 없는 기종(절단기 · 펌프) — 동력비는 원문대로 별도" + "비고": "원문 운전경비 표에 주연료·조종원이 없는 기종(절단기 · 펌프) — 동력비는 원문대로 별도 · 암석·전석 작업은 「공통 8 기계 시간당 손료(손료 보정)」" + }, + { + "열쇠": "공통 8 기계 시간당 손료(손료 보정)", + "이름": "기계 시간당 손료(연료·조종원 없는 기종 · 8-1-7 손료 보정)", + "결과단위": "원/시간", + "출처": "건설품셈 공통 8-1-5 · 8-1-6 · 8-1-7", + "소유": "공용", + "입력": [ + { + "이름": "기계", + "고르기": [ + "7620-0003", + "7730-0150", + "6516-0060", + "6516-0120", + "6516-0250", + "6516-0300", + "6105-0190", + "6202-0060", + "0230-0002", + "6410-0080", + "6410-0100", + "6410-0120", + "6410-0150", + "6410-0200", + "6901-0010", + "6530-0090", + "6530-0120", + "6517-0100", + "6517-0150", + "6517-0200", + "6517-0250", + "6517-0300", + "6510-0100", + "6510-0150", + "6510-0200", + "6510-0250", + "6510-0300", + "6518-0100", + "6518-0150", + "6518-0200", + "6518-0250", + "6518-0300", + "5501-0080", + "7750-0016", + "7750-0025", + "7730-0050", + "5401-0017", + "5202-0127", + "5202-0240", + "5202-0300", + "7611-0200", + "7612-0200", + "5204-0200", + "5204-0300", + "5204-0400", + "5204-0500", + "5204-0600", + "5702-0095", + "3430-0400", + "7431-1300", + "7740-0080", + "7740-0150", + "2101-0010", + "2101-0015", + "2101-0020", + "2101-0025", + "2101-0030", + "2101-0035", + "2101-0040", + "2101-0050", + "2101-0070", + "2101-0080", + "2101-0100", + "2101-0150", + "2101-0220", + "2101-0280", + "2101-0300", + "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", + "2208-5008", + "2208-5010", + "2208-5012", + "2208-5016", + "2208-5020", + "2105-0002", + "2105-0003", + "2105-0005", + "2105-0010", + "2105-0015", + "2105-0018", + "0201-0012", + "0201-0020", + "0201-0040", + "0201-0060", + "0201-0070", + "0201-0080", + "0201-0100", + "0201-0120", + "0201-0200", + "6105-0390", + "6202-0125", + "7830-0081", + "7950-0149", + "7951-0066", + "7952-0246", + "7953-3400", + "7954-1119", + "7611-0300", + "7431-1100", + "7431-2300", + "7431-2500", + "7611-0400", + "7611-0500", + "7614-0300" + ] + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [ + { + "이름": "보정기종", + "식": "만약(기계 == '0201-0012' 또는 기계 == '0201-0020' 또는 기계 == '0201-0040' 또는 기계 == '0201-0060' 또는 기계 == '0201-0070' 또는 기계 == '0201-0080' 또는 기계 == '0201-0100' 또는 기계 == '0201-0120' 또는 기계 == '0201-0200', '굴착기(무한궤도) 및 로더(무한궤도)', '없음')", + "출처": "건설품셈 공통 8-1-7 1 주①" + }, + { "이름": "가산비율", "식": "만약(보정작업 == '해당 없음' 또는 보정기종 == '없음', 0, 찾기(계수:건설품셈:공통 8-1-7 손료보정, 기종=보정기종, 작업=보정작업).가산비율)", "출처": "건설품셈 공통 8-1-7 1" }, + { + "이름": "손료", + "식": "버림(기계:건설품셈:{기계}.가격 * 1000 * ((기계:건설품셈:{기계}.상각비계수 + 기계:건설품셈:{기계}.정비비계수) * (1 + 가산비율 / 100) + 기계:건설품셈:{기계}.관리비계수) / 10000000, 0)", + "출처": "건설품셈 공통 8-1-5 12 · 8-1-6 4 · 8-1-7 1" + } + ], + "호표": [], + "덧줄": [{ "이름": "기계손료", "식": "손료", "비목": "경비", "출처": "건설품셈 공통 8-1-6 2" }], + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12)", + "비고": "원문 운전경비 표에 주연료·조종원이 없는 기종(절단기 · 펌프) — 동력비는 원문대로 별도 · 8-1-7 표의 기종(굴착기(무한궤도))만 가산 · 표 밖 기종은 가산 0" }, { "열쇠": "공통 8 기계 시간당 경비(조종원직종 입력)", diff --git a/resources/master_data/로직_산림품셈_10장.json b/resources/master_data/로직_산림품셈_10장.json index d5afd002..aca816d7 100644 --- a/resources/master_data/로직_산림품셈_10장.json +++ b/resources/master_data/로직_산림품셈_10장.json @@ -647,34 +647,15 @@ { "이름": "기계", "고르기": ["0101-0007", "0101-0010", "0101-0012", "0101-0019", "0101-0032"] }, { "이름": "지역", - "고르기": [ - "전국평균", - "전국", - "서울", - "경기", - "강원", - "충북", - "충남", - "전북", - "경북", - "경남", - "부산", - "제주", - "대구", - "인천", - "대전", - "울산", - "세종", - "전남광주" - ], + "고르기": ["전국평균", "전국", "서울", "경기", "강원", "충북", "충남", "전북", "경북", "경남", "부산", "제주", "대구", "인천", "대전", "울산", "세종", "전남광주"], "출처": "건설품셈 공통 8-1-7 5" } ], - "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-11 불도저 운반 작업량, 재료=재료)" }], - "호표": [{ "종류": "로직", "요소": "로직(건설품셈:공통 8 기계 시간당 경비, 기계=기계, 지역=지역)", "이름": "불도저(무한궤도)", "단위": "시간", "수량": "1 / 작업량" }], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:10-11 불도저 운반 작업량, 재료=재료)" }, { "이름": "보정작업", "식": "만약(재료 == '토사', '해당 없음', '암석작업(연암・보통암・경암)')", "출처": "건설품셈 공통 8-1-7 1" }], + "호표": [{ "종류": "로직", "요소": "로직(건설품셈:공통 8 기계 시간당 경비(손료 보정), 기계=기계, 지역=지역, 보정작업=보정작업)", "이름": "불도저(무한궤도)", "단위": "시간", "수량": "1 / 작업량" }], "덧줄": [], "끝수": null, - "비고": "불도저 규격 원문에 없음 — 설계자 고름(주③ 건설품셈 8-2-1) · 불도저 손료 보정(건설품셈 공통 8-1-7) 미반영 — 일반 기계 경비 로직" + "비고": "불도저 규격 원문에 없음 — 설계자 고름(주③ 건설품셈 8-2-1) · 해석: 파쇄암·발파암 운반 = 8-1-7 암석작업 손료 보정 · 토사 = 보정 없음(전석섞인토사는 재료 구분에 없음)" } ] } diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index 5970ecb1..cb6866a2 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -119,6 +119,28 @@ def test_불도저_덤프_로더_손료_보정(whole): whole, "건설품셈:공통 8 기계 시간당 경비", {"기계": "0602-0150", "지역": "전국평균"} ) assert plain["중간"]["손료"] == 20659 + # 주① 불도저 19톤 이상은 가산 0 + big = {"기계": "0101-0019", "지역": "전국평균"} + assert ( + mf.run(whole, ref, {**big, "보정작업": rock})["중간"]["손료"] + == mf.run(whole, "건설품셈:공통 8 기계 시간당 경비", big)["중간"]["손료"] + ) + + +def test_손료만_로직_보정과_불도저_운반(whole): + rock = "암석작업(연암・보통암・경암)" + ref = "건설품셈:공통 8 기계 시간당 손료(손료 보정)" + assert mf.run(whole, ref, {"기계": "0201-0070", "보정작업": rock})["중간"]["손료"] == 28322 + assert mf.run(whole, ref, {"기계": "7620-0003", "보정작업": rock})["중간"]["손료"] == 1232 + # 산림 10-11 발파암 = 암석작업 보정 경비 × 1/작업량 + given = {"재료": "발파암", "기계": "0101-0010", "지역": "전국평균"} + got = mf.run(whole, "산림품셈:10-11 불도저 운반", given) + hour = mf.run( + whole, + "건설품셈:공통 8 기계 시간당 경비(손료 보정)", + {"기계": "0101-0010", "지역": "전국평균", "보정작업": rock}, + ) + assert got["줄"][0]["단가"] == hour["계"] def test_노체포설(whole):