"""원가계산서 나머지 세 형식 — 서식 차례만 · 0 원 안 채움 · 막힌 까닭 · 확인 대기 (2026-09-14 판정). 근거: STmate 분석 12번 §4~6 · 35번 §1·§2·§5. """ from __future__ import annotations import sys from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT)) from B09_Estimation.B09_Estimation_CostSheet_Forms import ( # noqa: E402 PENDING_PROFIT, RATE_B, RATE_RA, SEPARATE, form_rows, ) @pytest.mark.parametrize("form", ["sugong", "actual_general", "actual_sugong"]) def test_금액은_하나도_안_내고_0원도_없다(form) -> None: rows = form_rows(form) assert rows and all(row["amount_krw"] is None for row in rows) assert all(row["note"] for row in rows) def test_수공은_세부_경비_여덟이_율표_미확보() -> None: rows = form_rows("sugong") blocked = [row["label"] for row in rows if row["note"] == RATE_B] for name in ("수도광열비", "복리후생비", "지급수수료", "폐기물처리비"): assert name in blocked assert "기타경비" not in [row["label"] for row in rows] def test_실적형은_이윤만_확인_대기_안전관리비는_둘_다_별도내역() -> None: """SA 안전관리비 「확인 대기」를 **별도내역**으로 내림 — 코덱스가 STmate 원문에서 확인(2026-09-14). TA 는 처음부터 별도내역이었음. 요율이 아니라 따로 산출한 금액이라 **금액엔 안 닿음**. """ general = {row["label"]: row["note"] for row in form_rows("actual_general")} sugong = {row["label"]: row["note"] for row in form_rows("actual_sugong")} assert general["이 윤"] == PENDING_PROFIT and sugong["이 윤"] == PENDING_PROFIT assert general["안전관리비"] == SEPARATE and sugong["안전관리비"] == SEPARATE assert general["간접노무비"] == RATE_RA and general["기타경비"] == RATE_RA def test_실적일반_보증_밑수는_직접공사비_환경은_재료직노산출경비() -> None: """35번 §1 — 12번의 「TA 환경보전비 = 직접공사비」는 06번 정정에 따라 재+직노+산출경비.""" rows = {row["label"]: row["formula"] for row in form_rows("actual_general")} assert rows["하도대금 수수료"].startswith("직접공사비") assert rows["환 경 보 전 비"].startswith("(재료비+직노+산출경비)") def test_모르는_형식은_멈춘다() -> None: with pytest.raises(ValueError): form_rows("general") @pytest.mark.parametrize("form", ["sugong", "actual_general", "actual_sugong"]) def test_사유는_요율표_미확보가_아니라_실제_결론(form) -> None: """2026-09-14 요율표 셋 결론(PLAN 7장) — 「자료를 못 구함」 이 아니라 실적형은 **임도 미적용** (예정가격작성기준 §37② 100억 미만) · 수공 세부 경비는 **법정 요율 없음**(§34① 업체 실측).""" notes = [row["note"] for row in form_rows(form)] assert not any("요율표 미확보" in note for note in notes), notes assert "임도 미적용" in RATE_RA and "§37②" in RATE_RA assert "법정 요율 없음" in RATE_B and "값을 넣어 주십시오" in RATE_B and "§34①" in RATE_B