부칙 제4조① 은 2026~2032년만 명시 — 2033년 이후는 그 해 되면 정함(사용자 확정). 정본 rate_from_2033_percent 삭제 · 비고에 짧게 남김 · build_요율.py 는 법 밖 연도가 정본에 미리 채워지면 잡아내는 쪽으로 바꿈 · 시험 2개 추가.
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""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["값"]
|