"""build_요율.py 시험 — 2026-09-20 브레인 일감(랩탑 메인). 못박는 것 - 지금 원문(XLSX·국민연금법 XML)과 정본 요율_조달청제비율.json 이 같음(회귀 기준). - 정본 값을 하나 비틀면 --check 가 실제로 다름을 잡아냄(대조 로직이 항상 통과만 하는 게 아님). """ from __future__ import annotations import copy import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT / "resources/master_data/scripts")) import build_요율 as bu # noqa: E402 def test_지금_원문과_정본이_같음() -> None: d = bu.run_check() errors = [x for x in d.items if not x.startswith("[참고]")] assert not errors, f"원문과 정본이 다름 — {errors}" def test_값을_비틀면_다름을_잡아냄() -> None: ws = bu.load_ws() data = copy.deepcopy(bu.load_json()) row = bu.row_by_key(data, "RT000001") row["값"]["rate_percent"] = row["값"]["rate_percent"] + 1 # 산재보험료를 일부러 어긋냄 d = bu.Diffs() bu.check_scalars(ws, data, d) assert any("산재보험료" in x for x in d.items) def test_고용보험료_등급_어긋내면_잡아냄() -> None: ws = bu.load_ws() data = copy.deepcopy(bu.load_json()) row = bu.row_by_key(data, "RT000002") grade1 = next(b for b in row["값"]["brackets"] if b.get("grade") == 1) grade1["rate_percent"] = 0.0 d = bu.Diffs() bu.check_goyong(ws, data, d) assert any("1등급" in x for x in d.items) def test_국민연금_법에_없는_연도를_미리_채우면_잡아냄() -> None: """2033년 이후는 법 부칙에 근거 없음(사용자 확정) — 정본이 미리 채우면 걸림.""" data = copy.deepcopy(bu.load_json()) row = bu.row_by_key(data, "RT000004") row["값"]["annual_rates"].append({"year": 2033, "rate_percent": 6.5}) d = bu.Diffs() bu.check_pension(data, d) assert any("2033" in x for x in d.items) def test_국민연금_지금_정본은_2032년까지만() -> None: data = bu.load_json() row = bu.row_by_key(data, "RT000004") years = sorted(r["year"] for r in row["값"]["annual_rates"]) assert years == list(range(2026, 2033)), years assert "rate_from_2033_percent" not in row["값"]