주휴수당 계산기 코어 로직: 주 15시간 판정·주휴시간(8시간 상한)·월 환산
주휴수당은 계산식 자체는 단순하지만, 실제로는 대상 조건 + 시간 상한 + 월 환산 기준이 섞여서 자주 헷갈립니다. 이번 계산기는 사용자가 입력한 근무 패턴을 기준으로, 아래 순서대로 결과를 내도록 설계했습니다.
- 도구 바로가기: 주휴수당 계산기
핵심 로직 요약
- 대상 여부 1차 판정: 주 소정근로시간 15시간 이상인지 확인
- 대상 여부 2차 판정: 개근 체크와 결합해 최종 대상/비대상 결정
- 주휴시간 계산:
주 근로시간 ÷ 주 소정근무일수 - 법정 상한 적용: 주휴시간 최대 8시간으로 제한
- 급여 산출: 주 금액 + 월 환산(4.345주) 동시 제공
1) 대상 여부는 “주 15시간 + 개근”으로 분기
먼저 주 15시간 이상을 확인하고, 그다음 개근 여부를 합쳐 최종 대상을 만듭니다.
const eligibleByHour = weekHours >= 15;
const eligible = eligibleByHour && isPerfect;
이렇게 분리해두면 안내 메시지도 정확하게 줄 수 있습니다.
- 15시간 미만: 시간 요건 미충족
- 15시간 이상이지만 개근 아님: 개근 요건 미충족
2) 주휴시간은 “주근로시간 ÷ 주근무일수”
계산기의 기본식은 아래와 같습니다.
const rawPaidHours = weekHours / weekDays;
예: 주 20시간, 주 5일 근무면 4시간이 주휴시간이 됩니다.
3) 주휴시간 상한 8시간 적용
입력 조합에 따라 주근로시간 ÷ 주근무일수 값이 커질 수 있기 때문에 상한을 강제합니다.
const paidHours = Math.min(8, rawPaidHours);
이 상한을 둬야 특정 극단 입력에서 금액이 과도하게 커지는 문제를 막을 수 있습니다.
4) 금액 계산: 주 단위 + 월 환산
최종 대상일 때만 급여를 계산하고, 비대상이면 0으로 처리합니다.
const weeklyPay = eligible ? (paidHours * wage) : 0;
const monthlyPay = weeklyPay * 4.345;
- 주휴수당(주): 주 단위 예상 금액
- 주휴수당(월 환산): 평균 주수
4.345를 곱한 추정치
월 환산은 정산 편의를 위한 참고치라서, 실제 지급액은 월별 근무일수/결근/회사 정책에 따라 달라질 수 있습니다.
5) 입력값 방어(clamp)로 계산 안정성 확보
붙여넣기·스크립트 입력 등으로 UI 범위를 벗어나는 값을 넣어도 결과가 무너지지 않게 방어했습니다.
const wage = clamp(wageRaw, 0, 1000000);
const weekHours = clamp(weekHoursRaw, 0, 80);
const weekDays = clamp(Math.floor(weekDaysRaw), 1, 7);
- 시급: 0~1,000,000
- 주 근로시간: 0~80
- 주 근무일수: 1~7 (정수)
또한 필수값이 비어 있으면 계산 대신 안내 문구를 먼저 보여줘, 잘못된 중간 상태가 결과로 노출되지 않도록 했습니다.
내부 링크
요약
이번 코어 로직의 핵심은 아래 3가지입니다.
- 대상 판정 로직(주 15시간 + 개근)을 명확히 분리
- 주휴시간 계산식에 8시간 상한을 적용해 과대계산 방지
- 주/월 결과를 동시에 제공하고 입력값 clamp로 안정성 확보
실사용 관점에서는 “내가 대상인지”와 “주/월 얼마인지”를 같은 화면에서 바로 확인할 수 있게 한 점이 가장 중요한 설계 포인트입니다.