다크모드
퇴직정산 — 계산 규칙·데이터 계약 (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-settleEdge Function(급여이력 조회→계산→insert).
3. 프로덕션 전 교체 목록 (정직 표기)
- 임금총액 = 실 지급이력 3개월 합산(상여 연 환산 3/12 가산·연차수당 가산·무급기간 제외 — 근기법 시행령 §2).
- 퇴직소득세 원단위 = 홈택스/공식 프로그램 대사.
- DC형·IRP 의무이전(55세 미만) 분기 — 현재 DB형 일시금만.