feat(master_data): 건설품셈 토목 3장(터널) 로직 5줄 · 자체 재료 1개 · 계수 칸 이름·범위규칙 정리

- 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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
2026-09-19 18:49:54 +09:00
co-authored by Claude Opus 5
parent 16ebc46e7c
commit 3826002a00
4 changed files with 414 additions and 15 deletions
@@ -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
]
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -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 터널 방수 재료량" }
]
}
+15
View File
@@ -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(