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️⃣④·§일괄결재 「보고서 승인」에서 "이때 근태 결과에 외근 내역 저장됨"(working-outside.md:145), "근태·급여 반영 (보고서 승인 완료 시점)"(working-outside.md:222).
  • 실제 구현: 외근 보고서 승인 시 packages/api/src/routers/offsite-work.router.ts:662-671Attendance 행을 하나 저장하지만, 채우는 시간 컬럼은 totalHours 이에요 (totalHours: Number(record.report?.actualHours ?? 0)).
  • 급여 미반영 이유: 연장·야간·휴일 급여 계산기는 regularHours·overtimeHours·nightHours·holidayRegularHours·holidayNightHours·weekendHours 를 읽는데(packages/api/src/calculators/overtime-record.calculator.ts:172-201), 외근이 쓰는 totalHours 는 이 급여 버킷 중 어느 것도 아니에요. totalHours 는 근태내역 시트 표시용으로만 읽혀요(sheet-rows/resolver.ts:504). 게다가 외근 라우터는 AllowanceRecord/DeductionRecord 를 전혀 쓰지 않아요.
  • 정리: 외근 승인 시 근태(Attendance) 행은 생성되지만 급여에는 0원 반영돼요. 문서의 "급여 반영"은 사용자·AI를 오도할 수 있어요.

외근 알림은 전부 결재자에게만 발송 (신청자 본인 미수신)

  • 외근의 모든 알림(신청·보고서 제출·승인·반려·취소·보고서 승인·보고서 반려)은 notifyApprovers결재 권한자에게만 발송돼요(offsite-work.router.ts:325,415,466,515,584,684,741). 초과근무처럼 신청자 본인에게 승인/반려 결과를 알리는 경로는 없어요. (알림 문서 alarm.md 의 외근 표도 이와 어긋나 있어요 — 해당 문서 참고.)