Skip to content

연장 근무

프로세스

결재(탭)

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: 삭제
      • message: 이 유형을 사용한 연장근무 내역이 있어요. 삭제하면 해당 연장근무 내역의 유형은 **'삭제'**로 표시돼요.
      • 버튼
        • [취소], [X]: 팝업만 닫힘
        • [확인] : 유형 삭제 + 팝업 닫힘 + 해당 유형 사용한 연장근무내역의 유형을 '삭제'로 표시
    • 상태: 비활성 + 연결된 연장근무 내역 없음
      • title: 삭제
      • message: {이름} 연장근무 유형을 삭제할까요?
      • 버튼
        • [취소], [X]: 팝업만 닫힘
        • [확인] : 유형 삭제 · 팝업 닫힘 · 목록 갱신
이름설명관리
평일 연장평일에 연장 근무를 할 때 사용하는 유형[수정][삭제]

⚠️ 구현 현황 · 하드닝 후보 (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-84loadDatastatus 필터가 없지만, 이 계산기는 실 급여를 만들지 않고(Module Manager 계산기 상태 조회 전용) payroll.generateForPeriod 는 시트 커밋 결과(AllowanceRecord/DeductionRecord)를 재링크할 뿐이라, 대기·취소가 실지급에 새어들지는 않아요. 다만 향후 이 파이프라인을 급여 경로로 재배선하면 status 게이트가 반드시 필요해요.