feat(master_data): 건설품셈 토목 4장(궤도) 로직 22줄 · 8장 기계 고르기 넓힘 · 자체 재료 10개

- 4-2 자갈궤도(단선·복선 시공량 · 50㎏ 레일 5% 증 · 신호수) · 4-3 콘크리트궤도(단선 5% 감 · 방진상자)
- 4-4 분기기(종류별 할증률) · 신축이음매(일단·양단) · 4-5 가스압접·테르밋(소모재료 · 열차감시원 · 기타재료 비율) · 장대레일
- 4-6 자갈채집 · 레일 절단·천공 · 침목천공 · 파워렌치 · 타이템퍼(손료 + 주연료·잡재료 5%) · 교상발판·가드레일 등
- 8장 고르기: 지게차 5.0ton · 궤도 소형장비 손료 5종 · 재료_자체 바퀴숫돌·버너·노즐·테르밋 재료
- 막힘: 측량중급기술자(건설노임 요소 없음) · 모터카·자갈화차(기계 요소 없음) — 비고

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:52:53 +09:00
co-authored by Claude Opus 5
parent 3826002a00
commit 87c4fd8446
4 changed files with 1362 additions and 3 deletions
@@ -22,6 +22,7 @@ SAMPLES = [
"로직_건설품셈_토목1장.json",
"로직_건설품셈_토목2장.json",
"로직_건설품셈_토목3장.json",
"로직_건설품셈_토목4장.json",
"로직_건설품셈_토목6장.json",
"로직_산림품셈_03장.json",
"로직_산림품셈_04장.json",
@@ -306,6 +307,13 @@ def test_토목_터널굴착_장대할증(whole):
assert got["줄"][0]["수량"] == Decimal("1.2")
def test_토목_궤광조립_직결형_단선감(whole):
"""토목 4-3-1 — 직결형 시공량은 분리형 250m(병합 칸) · 단선 5% 감 = 궤도공 16 ÷ 237.5."""
given = {"단선감": 5, "구분": "침목매립식(직결형)", "지역": "전국평균", "보정작업": "해당 없음"}
got = mf.run(whole, "건설품셈:4-3-1 궤광조립(콘크리트)", given)
assert got["줄"][0]["수량"] == Decimal(16) / Decimal("237.5")
def test_범위_입력은_막음(whole):
with pytest.raises(mf.FormulaError):
mf.run(