fix(master_data): 8-1-7 손료 보정 — 불도저 · 로더(무한궤도) · 덤프트럭 경비 로직 한 줄

- 「8 기계 시간당 경비(손료 보정)」 — 보정작업 입력 · 가산비율(원문 8-1-7 표)
- 불도저(무한궤도) 19톤 미만 · 타이어·습지 불도저 · 로더(무한궤도) · 덤프트럭 18톤 미만(주①)
- 「8 기계 시간당 경비」 는 부르는 곳 529 곳이 그대로 — 비고에 보정 줄 안내

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
2026-09-19 20:04:21 +09:00
co-authored by Claude Opus 5
parent f07214d79a
commit a6fe666259
2 changed files with 150 additions and 1 deletions
@@ -130,7 +130,140 @@
{ "이름": "기계손료", "식": "손료", "비목": "경비", "출처": "건설품셈 공통 8-1-6 2" }
],
"끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음",
"비고": "고르기는 쓰는 기계만 — 주연료·조종원이 있는 기계는 더 넣어 씀"
"비고": "고르기는 쓰는 기계만 — 주연료·조종원이 있는 기계는 더 넣어 씀 · 암석·전석섞인토사 작업의 불도저(19톤 미만 · 타이어·습지)·로더(무한궤도)·덤프트럭(18톤 미만)은 「8 기계 시간당 경비(손료 보정)」(8-1-7 1)"
},
{
"열쇠": "8 기계 시간당 경비(손료 보정)",
"이름": "기계 시간당 기계경비(불도저 · 로더(무한궤도) · 덤프트럭 손료 보정)",
"결과단위": "원/시간",
"출처": "건설품셈 공통 8-1-5 · 8-1-6 · 8-1-7",
"소유": "공용",
"입력": [
{
"이름": "기계",
"고르기": [
"0101-0007",
"0101-0010",
"0101-0012",
"0102-0015",
"0102-0028",
"0102-0033",
"0121-0004",
"0121-0013",
"0301-0057",
"0301-0076",
"0301-0095",
"0301-0115",
"0301-0134",
"0301-0153",
"0301-0172",
"0301-0287",
"0602-0025",
"0602-0045",
"0602-0060",
"0602-0080",
"0602-0105",
"0602-0150"
]
},
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
},
{
"이름": "보정작업",
"고르기": [
"해당 없음",
"암석작업(연암・보통암・경암)",
"전석섞인토사"
],
"출처": "건설품셈 공통 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', '덤프트럭', '굴착기(무한궤도) 및 로더(무한궤도)'))",
"출처": "건설품셈 공통 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-1"
},
{
"종류": "인력",
"요소": "인력:건설노임:{직종}",
"이름": "조종원",
"단위": "인",
"수량": "기계:건설품셈:{기계}.조종원 / 8",
"비목": "노무비",
"출처": "건설품셈 공통 8-1-3 6",
"비고": "환산 근거 미확인 — 우선 하루 ÷ 8"
}
],
"덧줄": [
{
"이름": "잡재료비",
"식": "재료비 * 기계:건설품셈:{기계}.잡재료율 / 100",
"비목": "재료비",
"출처": "건설품셈 공통 8-4 주②"
},
{
"이름": "기계손료",
"식": "손료",
"비목": "경비",
"출처": "건설품셈 공통 8-1-6 2"
}
],
"끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음",
"비고": "주① 대로 불도저(무한궤도) 19톤 이상 · 덤프트럭 18톤 이상은 고르기에서 뺌(보정 없음 — 「8 기계 시간당 경비」) · 타이어·습지 불도저는 톤수와 관계없이 보정 · 굴착기(무한궤도)는 「8 굴착기(무한궤도) 시간당 경비」"
},
{
"열쇠": "8 굴착기+부착용 집게 시간당 경비",
+16
View File
@@ -93,6 +93,22 @@ def test_굴착기_암석_보정(whole):
assert cents(got["계"]) == "89864.24"
def test_불도저_덤프_로더_손료_보정(whole):
# 손료 = 가격 × 1000 × ((상각 + 정비) × (1 + 가산) + 관리) ÷ 10^7 · 원 미만 버림(8-1-7 1)
ref = "건설품셈:8 기계 시간당 경비(손료 보정)"
rock, boulder = "암석작업(연암・보통암・경암)", "전석섞인토사"
for machine, work, cost in (
("0602-0150", rock, 24285), # 덤프트럭 25%
("0602-0150", "해당 없음", 20659),
("0101-0010", boulder, 32794), # 불도저 10%
("0301-0095", rock, 20985), # 로더(무한궤도) 20%
):
given = {"기계": machine, "지역": "전국평균", "보정작업": work}
assert mf.run(whole, ref, given)["중간"]["손료"] == cost
plain = mf.run(whole, "건설품셈:8 기계 시간당 경비", {"기계": "0602-0150", "지역": "전국평균"})
assert plain["중간"]["손료"] == 20659
def test_노체포설(whole):
assert mf.run(whole, "산림품셈:9-16-1 노체포설 작업량", {})["결과"] == Decimal("24.255")
got = mf.run(whole, "산림품셈:9-16-1 노체포설", {"지역": "전국평균", "보정작업": "해당 없음"})