연장 근무
프로세스
결재(탭)
1️⃣ 필터링
- 상태
- 옵션 : 전체, 대기, 승인, 반려, 취소, 보고서 대기, 보고서 승인, 보고서 반려
- 기본 : 전체
- 기간
- 직원관리 화면의 입사일 기준으로 기간 필터링과 동일, 단 근무일 기준으로 필터링 2️⃣ 리스트뷰
| 사번 | 이름 | 근무일 | 연장 시간 | 유형 | 상태 | 관리 |
|---|---|---|---|---|---|---|
| ADMIN003 | 홍길동 | 2026.06.23. | 4.00시간 | 연장 | 승인 | [보기] 버튼 |
3️⃣ [보기] 버튼
- 연장근무 상세 팝업 제공
- ①대기 상태 일 때 '연장근무 상세' 팝업
- 연장근무신청서
- 직원 :
- 근무일 : 2026.06.23.
- 시작 시간 :
- 종료 시간 :
- 연장 시간 : {12.00} 시간
- 유형 :
- 사유 :
- 푸터 버튼
- [승인]
- 사유 입력: 불필요
- 동작
- 상태 변경되고 모든 팝업 닫힘
- 상태 : 대기 -> 승인
- 결재자, 결재 일시 기록
- 직원이 Works에서 연장근무 보고서 작성 가능
- [반려]
- 반려 사유 입력 팝업 제공
- title : 연장근무 반려
- 사유입력
- 필수 표시(
*) - 입력란
- placeholder : 반려사유를 입력해 주세요.
- 필수 표시(
- 버튼
- [취소] : 연장근무 반려 팝업만 닫힘
- [확인] 버튼
- 반려 사유를 입력해야 버튼 활성됨
- 버튼 클릭하면 반려로 변경되고 모든 팝업 닫힘
- 반려 사유 입력 팝업 제공
- [승인]
- 연장근무신청서
- ② 반려 상태 일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역과 반려 내역 제공
- 연장근무 신청 내역은 '연장근무신청서'에서 제공하는 정보와 동일
- 반려 내역에서 제공하는 정보
- 결재자 :
- 결재 일시 : 0000.00.00. 오전/오후 00:00:00
- 사유 :
- ③ 승인 상태일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역과 승인 내역 제공
- 연장근무 신청 내역은 '연장근무신청서'에서 제공하는 정보와 동일
- 승인 내역에서 제공하는 정보
- 결재자 :
- 결재 일시 : 0000.00.00. 오전/오후 00:00:00
- ④ 보고서 대기 상태 일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역과 승인 내역 제공(승인상태일때와 동일)
- 연장근무 보고서 대기 - 직원 : {성이름(사번)} - 근무일 : 2026.06.23. - 시작 시간 : {오전 11:59:00} - 종료 시간 : {오후 11:59:00} - 연장 시간 : {12.00} 시간 - 유형 : {평일} - 사유 :
- 푸터 버튼(연장근무 신청과 유사)
- [승인]
- 사유 입력: 불필요
- 동작
- 상태 변경되고 모든 팝업 닫힘
- 상태 : 보고서 대기 -> 보고서 승인
- 결재자, 결재 일시 기록
- 이때 근태 결과에 연장근무 내역 저장됨
- [반려]
- 반려 사유 입력 팝업 제공
- title : 연장근무보고서 반려
- 사유입력
- 필수 표시(
*) - 입력란
- placeholder : 반려사유를 입력해 주세요.
- 필수 표시(
- 버튼
- [취소] : 연장근무 반려 팝업만 닫힘
- [확인] 버튼
- 반려 사유를 입력해야 버튼 활성 상태가 됨
- 버튼 클릭하면 보고서 반려로 변경되고 모든 팝업 닫힘
- 반려 사유 입력 팝업 제공
- [승인]
- ⑤ 보고서 승인 상태일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역과 승인 내역 제공(승인상태일때와 동일)
- 연장근무 보고서 신청 내역와 보고서 승인 내역 제공
- 연장근무 보고서 신청 내역은 보고서 대기 상태 일때와 동일
- 연장근무 보고서 승인 내역에서 제공하는 정보
- 결재자 :
- 결재 일시 :
2026.05.08. 오후 10:34:32 - 사유 : {입력한 사유} /없으면 '-' 표시
- ⑥ 보고서 반려 상태 일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역과 보고서 반려 내역 제공(승인상태일때와 동일)
- 연장근무 보고서 신청 내역와 보고서 반려 내역 제공
- 연장근무 보고서 신청 내역은 보고서 대기 상태 일때와 동일
- 연장근무 보고서 반려 내역에서 제공하는 정보
- 결재자 :
- 결재 일시 : 0000.00.00. 오전/오후 00:00:00
- 사유 :
- ⑦ 취소 상태일 때 '연장근무 상세' 팝업
- 연장근무 신청 내역(승인상태일때와 동일) 제공
- 취소 내역 제공
- 직원 :
- 취소 일시 : 0000.00.00. 오전/오후 00:00:00
- ①대기 상태 일 때 '연장근무 상세' 팝업
4️⃣ 체크박스 (일괄 결재) - 노출 조건 - 결재(탭) 에서만 제공 (현황 탭에는 체크박스·일괄 결재 버튼 없음) - 선택 가능한 행 - 대기 — 연장근무 신청 일괄 결재 대상 - 보고서 대기 — 연장근무 보고서 일괄 결재 대상 - 그 외 상태(승인, 반려, 취소, 보고서 승인, 보고서 반려, 취소 요청 중 등) — 체크박스 미표시 - 헤더 체크박스 - 표 첫 열(헤더)에 제공 - 선택 시 현재 페이지에 보이는 선택 가능 행만 전체 선택 - 상태 필터가 대기이면 대기 행만 - 상태 필터가 보고서 대기이면 보고서 대기 행만 - 상태 필터가 전체이면, 현재 페이지에 대기와 보고서 대기가 함께 있을 때는 먼저 선택된 단계와 같은 상태의 행만 전체 선택 (혼합 선택 금지 규칙과 동일) - 해제 시 현재 선택 전체 해제 - 일괄 결재 액션 바 - 1건 이상 선택 시, 필터 영역 오른쪽에 표시 (공통정책: 필터 왼쪽 · 버튼 오른쪽) - 구성 (왼쪽부터) - {n}건 선택 - 선택 건 상태에 따른 버튼 - 대기 건만 선택된 경우 - [승인] - 사유 입력: 불필요 - 동작 - 선택한 모든 건을 대기 → 승인으로 변경 - 각 건마다 결재자·결재 일시 기록 - 직원이 Works에서 연장근무 보고서 작성 가능한 상태로 전환 - 처리 후 선택 해제 · 목록 새로고침 - [반려] - 연장근무 반려 팝업 제공 (① [보기] 반려와 동일) - title : 연장근무 반려 - 사유 입력: 필수 (* 표시) - placeholder : 반려사유를 입력해 주세요. - 안내: 선택한 {n}건에 동일한 반려 사유가 적용돼요. - [취소] : 반려 팝업만 닫힘 - [확인] : 사유 입력 시 활성 · 클릭 시 모든 선택 건 반려 처리 후 팝업 닫힘 · 선택 해제 · 목록 새로고침 - 보고서 대기 건만 선택된 경우 - [보고서 승인] - 사유 입력: 불필요 - 동작 - 선택한 모든 건을 보고서 대기 → 보고서 승인으로 변경 - 각 건마다 결재자·결재 일시 기록 - 근태·급여 반영 (보고서 승인 완료 시점) - 처리 후 선택 해제 · 목록 새로고침 - [보고서 반려] - 연장근무보고서 반려 팝업 제공 (④ [보기] 반려와 동일) - title : 연장근무보고서 반려 - 사유 입력: 필수 (* 표시) - placeholder : 반려사유를 입력해 주세요. - 안내: 선택한 {n}건에 동일한 반려 사유가 적용돼요. - [취소] : 반려 팝업만 닫힘 - [확인] : 사유 입력 시 활성 · 클릭 시 모든 선택 건 보고서 반려 처리 후 팝업 닫힘 · 선택 해제 · 목록 새로고침
유형 관리(탭)
1️⃣ 필터링
- 상태
- 옵션 : 전체, 활성, 비활성
- 기본 : 전체
2️⃣ [유형 추가] 버튼
- 리스트 뷰 위쪽에 오른쪽에 위치함
- 버튼을 누르면 '유형 추가' 팝업 제공
- 유형 추가 팝업
- title : 유형 추가
- 이름
- 입력란
- 필수입력 표시(
*) - placeholder : 평일 연장, 야간 연장 근무 등
- 설명
- 입력란
- placeholder : 유형에 대한 설명을 입력해 주세요.
- 상태
- 드롭다운
- 기본 : 활성
- 옵션 : 활성, 비활성
- 비활성인 경우 Works(mobile)에서 해당 유형 보이지 않음
- 버튼
- [취소], [X]: 저장 없이 팝업만 닫힘
- [저장]
- 활성: 이름 입력 후 버튼 활성
- 클릭: 저장 후 팝업 닫힘 · 목록 갱신 · 추가한 행은 목록 상단으로 이동 3️⃣ 리스트 뷰
- [수정] 버튼
- 클릭하면 유형 수정 팝업 제공
- title:
유형 수정 - 필드는 유형 추가 팝업과 동일
- [삭제] 버튼
- 활성 상태일 때
- title:
삭제 - message:
연장근무 유형을 삭제할 수 없어요. 먼저 비활성 상태로 변경한 뒤 삭제할 수 있어요. - 버튼: [확인] — 팝업만 닫힘
- title:
- 상태 비활성 + 연결된 연장근무 내역 있음
- title:
삭제 - message:
이 유형을 사용한 연장근무 내역이 있어요. 삭제하면 해당 연장근무 내역의 유형은 **'삭제'**로 표시돼요. - 버튼
- [취소], [X]: 팝업만 닫힘
- [확인] : 유형 삭제 + 팝업 닫힘 + 해당 유형 사용한 연장근무내역의 유형을 '삭제'로 표시
- title:
- 상태: 비활성 + 연결된 연장근무 내역 없음
- title:
삭제 - message:
{이름} 연장근무 유형을 삭제할까요? - 버튼
- [취소], [X]: 팝업만 닫힘
- [확인] : 유형 삭제 · 팝업 닫힘 · 목록 갱신
- title:
- 활성 상태일 때
| 이름 | 설명 | 관리 |
|---|---|---|
| 평일 연장 | 평일에 연장 근무를 할 때 사용하는 유형 | [수정][삭제] |
⚠️ 구현 현황 · 하드닝 후보 (2026-08-13)
정책 문서(위)와 실제 코드가 다른 지점이라 지식베이스 학습 시 주의가 필요해요. CODE가 진실이고 이 절은 그 격차를 기록해요.
급여 반영 시점 — 문서(보고서 승인) ↔ 구현(연장 승인) 불일치 [판단 필요]
- 문서 기술: 위 §결재 3️⃣④·§일괄결재 「보고서 승인」에서 "이때 근태 결과에 연장근무 내역 저장됨"(
overtime.md:116), "근태·급여 반영 (보고서 승인 완료 시점)"(overtime.md:193) — 즉 보고서 승인(report_approved) 이 되어야 급여에 반영된다고 명시. - 실제 구현: 실 급여 경로(시트 커밋)의 연장근무 집계는
packages/api/src/routers/sheet-rows/compute.ts:304에서status IN ('approved', 'report_pending', 'report_approved', 'report_rejected')로 걸러요.- 즉 연장 승인(
approved) 시점부터 급여에 반영되고,report_pending(보고서 대기)·report_rejected(보고서 반려) 도 포함돼요.pending(신청 대기)·rejected(연장 반려)·cancelled(취소) 만 제외돼요. - 특히 보고서 반려(
report_rejected) 도 급여에 포함 — 연장 자체는 승인되었으니 근무는 실재했다는 전제예요. 문서는 이 케이스를 다루지 않아요.
- 즉 연장 승인(
- 판단 필요: 문서를 실제 동작(연장 승인 기준 반영)에 맞춰 고칠지, 아니면 반영 시점을 문서대로 「보고서 승인」으로 당길지는 제품 결정 사항이에요.
- 참고(무해): 별도 계산기
packages/api/src/calculators/overtime-record.calculator.ts:77-84의loadData는status필터가 없지만, 이 계산기는 실 급여를 만들지 않고(Module Manager 계산기 상태 조회 전용)payroll.generateForPeriod는 시트 커밋 결과(AllowanceRecord/DeductionRecord)를 재링크할 뿐이라, 대기·취소가 실지급에 새어들지는 않아요. 다만 향후 이 파이프라인을 급여 경로로 재배선하면status게이트가 반드시 필요해요.