Files
Aislo/resources/tester/test_b09_cost_sheet_forms.py
T
eomsangdonandClaude Opus 5 00919e86e2 fix(b09): 안전관리비 B 절사 자리를 STmate 실증본 쪽으로 · SA 안전관리비 별도내역 확정
④ 1.2배의 대상을 「호별 산정이 끝난 금액」으로 바꿈 — evaluate 가
   버림(밑수 × 율 + 기초액) 을 먼저 맺고 배수를 곱함(종전엔 곱한 뒤 한 번만 버림).
   근거 둘이 같은 쪽 — 고시 제4조① 단서 문언 · 골든셋 실증(영월 2024 B 20,330,639 → 20,330,638).
   A(배수 1)는 어느 차례로 해도 같은 값.
   ⚠ 두 실증본이 갈림 — 거창 2025 원본(STmate 출력 아님)은 옛 규칙이라 B 가 1원 위.
     목표가 STmate 골든셋 재현이라 STmate 쪽으로 맞춤. 고정값 벌에 갈림을 적어 둠.

⑤ SA(실적수공) 안전관리비 「확인 대기」 → 별도내역. TA 와 같은 자리가 됨.
   PENDING_SAFETY 상수를 걷고 파일 머리 문구도 고침. 금액엔 안 닿음.

⑥ 고시 대조를 상시 벌로 세움 — test_b09_safety_notice.py 여덟 자리.
   별표1 표를 원문 md 에서 읽어 요율 데이터 16칸 전수 대조(값을 시험에 안 박음) ·
   제4조①1·2호 구간 경계 넷 · 단서 A·B·1.2배 · 제2조2호 대상액 구성 · 1.2배 차례 회귀.

잴 시험 먼저 빨강 확인한 뒤 고침. 전체 시험 1911 통과 · 28 건너뜀 · 1 xfail.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Prk9BCHG1EMAywk9k8wegA
2026-09-14 16:59:47 +09:00

63 lines
2.5 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,
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")