From 6e9569c47be2cd7dee05dcd30a50882ff250d708 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 21 Sep 2026 07:50:13 +0900 Subject: [PATCH] =?UTF-8?q?knowledge(=EC=9A=94=EC=9C=A8):=20=EA=B5=AD?= =?UTF-8?q?=EB=AF=BC=EC=97=B0=EA=B8=88=202033=EB=85=84=20=EC=9D=B4?= =?UTF-8?q?=ED=9B=84=20=EC=B6=94=EC=A0=95=20=EC=9A=94=EC=9C=A8=20=EA=B1=B7?= =?UTF-8?q?=EC=9D=8C=20=E2=80=94=20=EB=B2=95=20=EB=B6=80=EC=B9=99=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C=EB=B6=84=EB=A7=8C=20=EB=91=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 부칙 제4조① 은 2026~2032년만 명시 — 2033년 이후는 그 해 되면 정함(사용자 확정). 정본 rate_from_2033_percent 삭제 · 비고에 짧게 남김 · build_요율.py 는 법 밖 연도가 정본에 미리 채워지면 잡아내는 쪽으로 바꿈 · 시험 2개 추가. --- resources/master_data/scripts/build_요율.py | 6 +++--- resources/master_data/요율_조달청제비율.json | 2 +- resources/tester/test_build_요율.py | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/resources/master_data/scripts/build_요율.py b/resources/master_data/scripts/build_요율.py index 28943f2d..141d6661 100644 --- a/resources/master_data/scripts/build_요율.py +++ b/resources/master_data/scripts/build_요율.py @@ -145,9 +145,9 @@ def check_pension(data: dict, d: Diffs): max_year_in_law = max(int(y) for y in found) unseen = [y for y in annual if y > max_year_in_law] if unseen: - d.note( - f"국민연금보험료 {sorted(unseen)}년 값은 법 부칙(2026~{max_year_in_law}년만 명시)에 없음 — " - f"정본의 rate_from_{unseen[0]}_percent={annual[unseen[0]]} 는 뒤 연도 추정치, 개정 시 재확인 필요" + d.items.append( + f"국민연금보험료: 법 부칙(2026~{max_year_in_law}년만 명시)에 없는 연도 " + f"{sorted(unseen)}가 정본에 있음 — 2033년이 되면 그때 정할 것, 지금 미리 넣지 않음" ) diff --git a/resources/master_data/요율_조달청제비율.json b/resources/master_data/요율_조달청제비율.json index 79227bb9..6fa9f7a6 100644 --- a/resources/master_data/요율_조달청제비율.json +++ b/resources/master_data/요율_조달청제비율.json @@ -102,7 +102,7 @@ "출처": "조달청제비율" }, { "키": "RT000003", "원문번호": "rate_health", "이름": "건강보험료", "값": {"rate_percent": 3.595, "base": "direct_labor_cost"}, "출처": "조달청제비율" }, - { "키": "RT000004", "원문번호": "rate_pension", "이름": "국민연금보험료", "값": {"base": "direct_labor_cost", "annual_rates": [{"year": 2026, "rate_percent": 4.75}, {"year": 2027, "rate_percent": 5.0}, {"year": 2028, "rate_percent": 5.25}, {"year": 2029, "rate_percent": 5.5}, {"year": 2030, "rate_percent": 5.75}, {"year": 2031, "rate_percent": 6.0}, {"year": 2032, "rate_percent": 6.25}, {"year": 2033, "rate_percent": 6.5}], "rate_from_2033_percent": 6.5}, "출처": "조달청제비율" }, + { "키": "RT000004", "원문번호": "rate_pension", "이름": "국민연금보험료", "값": {"base": "direct_labor_cost", "annual_rates": [{"year": 2026, "rate_percent": 4.75}, {"year": 2027, "rate_percent": 5.0}, {"year": 2028, "rate_percent": 5.25}, {"year": 2029, "rate_percent": 5.5}, {"year": 2030, "rate_percent": 5.75}, {"year": 2031, "rate_percent": 6.0}, {"year": 2032, "rate_percent": 6.25}]}, "비고": "2033년 이후 요율은 법 부칙에 미확정 — 그 해 되면 정함", "출처": "조달청제비율" }, { "키": "RT000005", "원문번호": "rate_care", "이름": "노인장기요양보험료", "값": {"rate_percent": 13.14, "base": "health_insurance_amount"}, "출처": "조달청제비율" }, { "키": "RT000006", "원문번호": "rate_safety_pct", diff --git a/resources/tester/test_build_요율.py b/resources/tester/test_build_요율.py index e0b43572..1010d5e1 100644 --- a/resources/tester/test_build_요율.py +++ b/resources/tester/test_build_요율.py @@ -42,3 +42,21 @@ def test_고용보험료_등급_어긋내면_잡아냄() -> None: 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["값"]