Skip to content

퇴직정산 — 계산 규칙·데이터 계약 (BE 참고)

독자: BE 개발자/AI. 퇴직금·퇴직소득세 계산 규칙(as-built = FE useRetirement.js)과 정산서 문서 계약. 작성: 2026-07-10. 정본 spec: docs/superpowers/specs/2026-07-10-retirement-settlement-design.md.

1. 계산 규칙 (근로자퇴직급여보장법 §8 · 소득세법 §48 — KcLep 기준)

단계규칙as-built 소스
재직일수퇴직일 − 입사일 (일수). 365일 미만 = 비대상(퇴직금 0)hireDate(인사 마스터)
평균임금(1일)퇴직 전 3개월 임금총액 ÷ 그 기간 실일수(달력)임금총액 = 월 gross×3 (⚠ 상여·연차가산 미반영 — BE는 실 지급이력 합산으로 교체)
통상임금 하한1일 통상임금(시급×8) > 평균임금이면 통상임금 적용 (근기법 §2②)hourlyWage() — 월급제는 통상이 큰 경우 많음(209h < 달력 30.4일×8h)
퇴직금1일 임금 × 30 × (재직일수 ÷ 365)원단위 반올림
근속연수올림 (1년 1일 → 2년)세법상 근속연수
근속연수공제≤5년 100만×n / ≤10년 500만+200만(n−5) / ≤20년 1,500만+250만(n−10) / >20년 4,000만+300만(n−20)2023~ 개정
환산급여(퇴직금 − 근속연수공제) × 12 ÷ n
환산급여공제≤800만 전액 / ≤7,000만 800만+60% / ≤1억 4,520만+55% / ≤3억 6,170만+45% / >3억 1억5,170만+35%
산출세액기본세율(6~45% 누진, payrollMock.basicTax 공용) 적용 후 × n ÷ 12. 지방소득세 10%

엣지케이스: 비대상(1년 미만)은 전 단계 0 · 환산급여 800만 이하 → 과세표준 0(세액 0) · 퇴직금 < 근속연수공제 → 환산급여 0 하한.

2. 정산서 문서 계약 — 스냅샷 불변식

  • hr_documents.doc_type = 'retirement-settlement' + settlement jsonb(계산 명세 통째 스냅샷).
  • 불변식: 발급 후 재계산 금지. 임금·규칙이 바뀌어도 기발급 정산서는 발급 시점 수치를 유지한다(렌더러는 doc.settlement만 읽음 — retirementSettlementTemplate.js). 정정은 신규 발급으로.
  • 발급 가드: settlement.eligible === false면 서버도 거부(1년 미만).
  • FE seam: documentCenterRepo.createRetirementSettlement({employeeId, retireDate}) — 계산은 seam이 수행해 스냅샷 주입(mock은 저장만). 라이브 = hr-retirement-settle Edge Function(급여이력 조회→계산→insert).

3. 프로덕션 전 교체 목록 (정직 표기)

  1. 임금총액 = 실 지급이력 3개월 합산(상여 연 환산 3/12 가산·연차수당 가산·무급기간 제외 — 근기법 시행령 §2).
  2. 퇴직소득세 원단위 = 홈택스/공식 프로그램 대사.
  3. DC형·IRP 의무이전(55세 미만) 분기 — 현재 DB형 일시금만.