Merge remote-tracking branch 'origin/sub_laptop_1' into sub_laptop_4

This commit is contained in:
2026-09-19 18:07:32 +09:00
5 changed files with 4070 additions and 5 deletions
@@ -69,7 +69,7 @@
"출처": "건설품셈 공통 8-1-5 · 8-1-6",
"소유": "공용",
"입력": [
{ "이름": "기계", "고르기": ["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", "5205-0071", "5205-0103", "5205-0210", "5405-0110", "7505-0025", "0502-0036", "1306-0100", "7204-0160", "1506-0032", "0121-0004", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "1305-0007"] },
{ "이름": "기계", "고르기": ["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", "5205-0071", "5205-0103", "5205-0210", "5405-0110", "7505-0025", "0502-0036", "1306-0100", "7204-0160", "1506-0032", "0121-0004", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "1305-0007", "1306-0120", "1106-0010", "1106-0012", "1206-0008", "3201-0003", "5205-0170"] },
{
"이름": "지역",
"고르기": [
@@ -316,7 +316,9 @@
"1305-0007",
"2106-0002",
"2106-0003",
"2106-0005"
"2106-0005",
"3302-0038",
"4430-0400"
]
},
{
File diff suppressed because it is too large Load Diff
@@ -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(주④) · 비탈면 고르기·흙 채움·잔디심기 별도(주③) · 호안블록 재료 원문 표에 없음"
}
]
}
+5 -1
View File
@@ -81,6 +81,10 @@
{ "열쇠": "복합비료", "이름": "비료", "규격": "복합비료", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 공통 4-1-3 재료량" },
{ "열쇠": "피복제", "이름": "피복제", "규격": "화이버/펄프류", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 공통 4-1-3 재료량" },
{ "열쇠": "침식방지안정제", "이름": "침식방지안정제", "규격": "합성접착제", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 공통 4-1-3 재료량" },
{ "열쇠": "착색제", "이름": "색소", "규격": "착색제", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 공통 4-1-3 재료량" }
{ "열쇠": "착색제", "이름": "색소", "규격": "착색제", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 공통 4-1-3 재료량" },
{ "열쇠": "차선도색 프라이머", "이름": "프라이머", "규격": "융착식 도료 차선도색용", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-8-9 융착식 도료 수동식 재료" },
{ "열쇠": "낙석방지망 철망", "이름": "철망", "규격": "낙석방지망용", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)" },
{ "열쇠": "결속선", "이름": "결속선", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)" },
{ "열쇠": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료) · 포켓식만" }
]
}
+44 -2
View File
@@ -19,6 +19,8 @@ SAMPLES = [
"로직_건설품셈_공통4장.json",
"로직_건설품셈_공통7장.json",
"로직_건설품셈_공통8장.json",
"로직_건설품셈_토목1장.json",
"로직_건설품셈_토목2장.json",
"로직_산림품셈_03장.json",
"로직_산림품셈_04장.json",
"로직_산림품셈_05장.json",
@@ -205,13 +207,23 @@ def test_방제_벌목조재_감_할증(whole):
def test_건설_석재판_습식_공구손료(whole):
"""공통 7-4-1 — 바닥부 테라조판 석공 3 · 줄눈공 1 · 보통인부 2 ÷ 15㎡ · 공구손료 인력품 2%."""
got = mf.run(whole, "건설품셈:7-4-1 습식공법", {"시공부위": "바닥부", "자재": "테라조판"})
assert [line["수량"] for line in got[""][:3]] == [Decimal(3) / 15, Decimal(1) / 15, Decimal(2) / 15]
assert [line["수량"] for line in got[""][:3]] == [
Decimal(3) / 15,
Decimal(1) / 15,
Decimal(2) / 15,
]
assert got["경비"] == got["노무비"] * Decimal("0.02")
def test_건설_정원석_난이도_가산(whole):
"""공통 4-4-1 — 쌓기 20ton 미만 조경공 1.212 × 1.1 · 굴착기 0.7㎥ 0.657hr 그대로."""
given = {"작업": "쌓기", "중량": "20ton 미만", "난이도가산": 10, "지역": "전국평균", "보정작업": "해당 없음"}
given = {
"작업": "쌓기",
"중량": "20ton 미만",
"난이도가산": 10,
"지역": "전국평균",
"보정작업": "해당 없음",
}
got = mf.run(whole, "건설품셈:4-4-1 정원석 쌓기 및 놓기", given)
assert [line["수량"] for line in got[""][:2]] == [Decimal("1.3332"), Decimal("0.657")]
@@ -231,6 +243,36 @@ def test_건설_흙깎기_암_치즐(whole):
assert got[""][-1]["금액"] == brk["금액"] / 100
def test_토목_동상방지층_인력_살수(whole):
"""토목 1-2-1 — 165㎥/일 · 인력 살수면 살수차 0 · 보통인부 100㎡당 1인 = 두께 20㎝ 에서 1/20 인/㎥."""
given = {"살수": "인력 살수", "두께": 20, "지역": "전국평균", "보정작업": "해당 없음"}
got = mf.run(whole, "건설품셈:1-2-1 인력식 소규모장비 포설", given)
qty = {line["이름"]: line["수량"] for line in got[""]}
assert qty["굴착기 0.6㎥"] == Decimal(8) / 165
assert qty["살수차 5,500"] == 0
assert got[""][-1]["수량"] == Decimal(1) / 20
def test_토목_보도블록_감(whole):
"""토목 1-7-1 — B-Type 190㎡/일 × 0.9(유도블록) · 정밀절단 아니면 특별인부 2 - 1."""
given = {
"형식": "B-Type",
"유도블록": "유도・점자블록",
"정밀절단": "아님",
"지역": "전국평균",
"보정작업": "해당 없음",
}
got = mf.run(whole, "건설품셈:1-7-1 보도용 블록 설치(소형)", given)
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(