- 12번 §4~6 서식(35번 정정 반영) 차례·표기 · 줄마다 「공통 요율 / 요율표 미확보(RateB·RATE_RA·An_A) / 확인 대기」 - 확인 대기: 실적형 이윤 밑수(35번 §5-1) · 실적수공 안전관리비 존재(§5-2) — 값을 지어내지 않음 - 0 원으로 안 채움 — 금액 칸 「-」 + 까닭 · 머리에 「금액 미산출」 - 원가계산서 아래 형식 탭 넷을 눌러 바꿈(GET ?form=) · 기준 입력판은 그대로 - 시험: 금액·0원 없음 · 수공 경비 여덟 막힘 · 확인 대기 · 실적일반 보증·환경 밑수 · 모르는 형식 멈춤 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn
58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
"""원가계산서 나머지 세 형식 — 서식 차례만 · 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,
|
|
PENDING_SAFETY,
|
|
RATE_B,
|
|
RATE_RA,
|
|
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:
|
|
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 sugong["안전관리비"] == PENDING_SAFETY
|
|
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")
|