Files
Aislo/resources/tester/test_712_3_basis.py
T

80 lines
2.9 KiB
Python

"""712-3 지킴 — 표 기준 → 기준배 · 기준단위 읽을 때 파생 · 배 대조 · 정본 안 씀(`master_basis`)."""
from __future__ import annotations
import json
import sys
from decimal import Decimal
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / "resources/master_data/scripts"))
sys.path.insert(0, str(ROOT))
import check_master as cm # noqa: E402
import master_basis as mbs # noqa: E402
def _p(text):
got = mbs.parse(text)
return None if got is None else (got["배"], got["단위"])
def test_parse_forms():
assert _p("10㎡당") == (Decimal(10), "㎡")
assert _p("인/100본당") == (Decimal(100), "본")
assert _p("ton 당") == _p("톤당") == _p("1t") == (Decimal(1), "ton")
assert _p("1,000본당") == (Decimal(1000), "본")
assert _p("1필지당 1,500㎡") == (Decimal(1), "필지")
assert _p("일당 — 편성 1조 기준") == (Decimal(1), "일")
assert _p("세면기 개당") == (Decimal(1), "개")
assert _p("바닥면적㎡당") == (Decimal(1), "㎡")
for text in (
"인력품",
"정의",
"할증",
"참조",
"Joint당",
"단위: 인",
"구하는점 5점, 주어진점 3점",
):
assert _p(text) is None, text
def test_fill_ratio_and_no_write():
files = cm.load()
before = json.dumps(files, default=str, ensure_ascii=False)
called = [
mbs.basis(t)
for d in files.values()
for t in d.get("표") or []
if (t.get("용도") or {}).get("로직키")
]
unit = sum(1 for b in called if b["갈래"] == "단위")
from_body = sum(1 for b in called if str(b["기준근거"] or "").startswith("원문"))
assert unit / len(called) >= 0.78 # 로직이 부르는 표 2,023 중 1,601(79 %)
assert from_body >= 280 # 빈 기준 579 중 원문 머리로 채움 285
assert json.dumps(files, default=str, ensure_ascii=False) == before # 읽기만
def test_times_mismatch_list():
"""배 어긋남 = 시스템 관리자 원문 확인 거리 — 늘거나 줄면 PLAN 712-3 목록도 고침."""
found = {line.split(" · ")[0] for line in mbs.check_times(cm.load())}
known = {"GC000482", "GC000483", "GC000484", "GC000485", "GF000081"}
assert found == known | {"GC000522", "GC000524"}
def test_edition():
assert mbs.edition("2026-01-01") == mbs.edition("2026") == "2026"
assert mbs.edition(None) == ""
def test_router_basis_outside_table():
from M01_MasterData import M01_MasterData_Router as router
got = router.get_table("소요량_산림품셈_13장_구조물.json", "QF000443")
assert got["기준파생"]["기준배"] == 10 and got["기준파생"]["기준단위"] == "㎡"
assert "기준배" not in got["table"] and "기준파생" not in got["table"]
listed = router.get_tables(file="소요량_산림품셈_13장_구조물.json", q="QF000443")
assert listed["tables"][0]["기준파생"]["기준배"] == 10