feat(B09 단가 덮개): 노임 · 기계 단가 덮개 labor_cover · machine_cover — 셈 짝 · 저장 다듬기 · 거울 시험 (PLAN 707-3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-31 15:39:16 +09:00
co-authored by Claude Opus 5.5
parent 4f4348c80e
commit 39e0ee6d85
4 changed files with 96 additions and 9 deletions
+24 -1
View File
@@ -165,6 +165,29 @@ def test_144_4_중기사용료_엑셀_검산():
assert why == {"연료(중유) 단가 없음", "기계 기준가 없음", "손료 기준가 · 계수 없음"}
#: 707-3 노임 · 기계 단가 덮개 — 건설기계운전사 일당 · 불도우저 시간 단가(셋 다) · 빠진 칸 = 버림
COVER = {
"labor_cover": {"LB000048": 283297, "LB000002": 172068, "없는 키": 1},
"machine_cover": {"X09999": {"labor": 1, "material": 2, "expense": 3},
"X00003": {"labor": 1, "material": None, "expense": 3}},
} # fmt: skip
def test_707_3_노임_기계_덮개():
s = compute_base(INPUTS, COVER)
labor = {r["key"]: r for r in s["labor"]}
assert (labor["LB000048"]["price"], labor["LB000048"]["book"]) == (283297, 267360)
assert labor["LB000002"]["covered"] and "covered" not in labor["LB000049"]
assert "LB000002" not in {g["key"] for g in s["gaps"] if g["tab"] == "labor"} # 덮개 = 빈칸 아님
hours = {d["key"]: d["hour"] for d in s["basis"]["drivers"]}
assert hours["1048"] == 59020 # 거창 기계경비 운전사 59,020.2 → 59,020
got = {r["key"]: (r["sum"], r["labor"], r["material"], r["expense"]) for r in s["machine"]}
assert got["X09999"] == (6, 1, 2, 3) and got["X00003"][1] == 59020 # 반쪽 덮개 = 버림
block = next(b for b in s["machine_blocks"] if b["key"] == "X09999")
assert block["covered"] and block["book"]["sum"] is None
assert "X09999" not in {g["key"] for g in s["gaps"] if g["tab"] == "machine_blocks"}
def test_거울_TS_가_같은_값():
for user in ({}, USER):
for user in ({}, USER, COVER):
assert _run_ts(INPUTS, user) == compute_base(INPUTS, user)