Skip to content

결재와 근무 보고서 ​

직원 앱의 결재는 신청을 내고 결과를 확인하는 곳이며, 내부 결재는 관리 팀의 신청과 보고서를 처리하는 곳입니다. 연장·외근은 신청 승인과 실제 근무 보고서 승인을 따로 진행합니다.

신청 유형별 결재 절차와 권한·상태 변화를 설명합니다. 실행한 조작과 남은 검증 항목은 아래 영상 기록에서 구분합니다.

역할·진입·작업 목록 ​

사용자와 진입지원 작업범위
직원 앱 하단 결재 → 신청·결재연차현황 확인, 결재 신청 목록(휴가·연장·휴일 근무·외근·허용된 인센티브 등록·서류 제출·요청), 주말 당직 치료 세션 신청본인 신청. 예전의 「+」 새 신청 버튼·시트는 없앴습니다
직원 앱 결재 → 내 신청·결재 현황검토 중·예정·반려·전체 칸, 종류별(휴가·근무·인센티브·서류) 묶음, 카드 → 신청 상세(진행 상황·결재선·반려 사유), 대기 취소, 보고서 작성·재작성자기 직원 ID를 서버에서 결정. 승인·반려 결과는 신청자에게도 알림
직원 앱 결재 → 내 신청·결재 현황 → 결재할 문서 / 결재한 문서 (승인 권한자만)내 차례인 휴가·연장·외근·인센티브를 건별로 승인·반려(반려 사유 필수), 결재한 문서 이력, 홈 「결재할 문서 n건」·하단 탭 숫자네 종류 중 하나라도 팀 이상 승인 권한. 내 신청은 들어오지 않음
내부 결재 대시보드대기 건수·팀별 출퇴근/외근/연장/휴가 확인, 결재함 이동팀장에게 연결된 관리 팀의 직원
내부 결재 연차/휴가단건/선택 승인·반려, 승인/반려 되돌림, 결재문서 미리보기teamLeaderProcedure의 관리 직원 범위
내부 결재 근무 관리 → 연장·휴일 근무 / 외근조회/결재 모드, 기간·상태·팀 필터, 상세, 단건·동일 단계 일괄 승인/반려신청 대기와 보고서 대기를 섞어 결재하지 않음
관리자 근태 현황에서 연장/외근 결재 화면내부 결재 임베드연장 전용/외근 전용 임베드는 불필요한 종류 탭을 숨김
내부 결재 문서 관리직원 서류/증명서 조회·미리보기·승인·반려원본 종류별 API를 분기

관련 역할과 권한은 조직과 접근 권한, 휴가 신청은 출퇴근과 휴가, 실적 신청·치료 세션은 인센티브, 문서·증명서 원본은 인사 기록을 참고합니다.

연장·휴일 근무 신청 ​

  1. 직원 앱 결재 → 신청·결재 → 연장·휴일 근무를 엽니다.
  2. 근무일, 시작 시간, 종료 시간을 입력합니다. 신청 버튼은 늘 눌리며, 근무일이나 시간이 비면 그 칸으로 스크롤해 칸 아래에 이유(「근무일을 골라 주세요.」 · 「시작 시간과 종료 시간을 넣어 주세요.」)를 보여 줍니다. 오른쪽 위 도움은 이 신청서의 문답 시트를 엽니다.
  3. 시작보다 이른 종료시각은 다음 날 퇴근으로 계산하고 익일 퇴근이 표시됩니다. 예: 22:00~01:00은 3시간입니다. 화면에는 읽기 전용 연장 시간이 표시됩니다.
  4. 유형에서 조직의 활성 연장근무 유형을 고릅니다. 목록 조회 실패 시 기본 유형이 남을 수 있습니다. 표시 유형 ID와 급여 계산용 분류는 다릅니다. 서버는 근무일·시간·공휴일 설정을 이용해 분류를 판단합니다.
  5. 선택 사유를 직접 입력하거나 업무 마감·긴급 대응·환자 응대·회의/교육·인수인계 프리셋을 누르고 신청합니다. 서버 자기 신청 범위는 0.5~12시간이며 화면에서 양수라고 모두 접수되는 것은 아닙니다.
  6. 성공 시 창과 입력을 초기화하고 목록을 갱신합니다. 대기(화면 표기 「검토 중」) 건이 생기며 신청이 승인되고 근무일이 지나야 보고서를 제출할 수 있습니다. X로 닫으면 서버에 신청하지 않습니다. 써 넣은 내용이 있으면 저장하고 나가기 / 지우고 나가기 / 계속 작성을 묻고, 저장한 내용은 이 기기에 14일 동안 남아 홈 「지금 할 일」의 이어서 작성으로 다시 엽니다. 바깥 영역 클릭으로는 닫히지 않습니다.

저장 실패는 오류 안내로 보이고 입력 내용을 유지합니다. 신청을 반복하기 전 목록 새로고침으로 접수 여부를 확인합니다. 대기 중인 신청의 취소와 승인된 휴가의 취소 신청은 다릅니다. 승인된 휴가는 직원 상세에서 취소 사유를 제출하며, 시작 전에는 전체 기간, 시작한 뒤에는 오늘부터 남은 기간이 대상입니다. 끝난 휴가는 취소할 수 없습니다. 처리 전에는 취소 신청을 철회할 수 있고, 반려되면 사유를 확인합니다. 취소 승인 뒤 연차 환원과 근무표를 확인합니다.

개인·팀·병원 기본 결재선, 신청 전 최종 확인과 현재 차례별 처리는 결재선 설정을 함께 따릅니다.

외근 신청 ​

  1. 결재 → 신청·결재 → 외근을 엽니다.
  2. 외근일과 장소를 필수로 입력합니다. 장소 공백만으로는 신청할 수 없습니다. 예: 다음 근무일, 협력기관 교육장.
  3. 시작 시간 / 종료 시간, 조직의 유형, 선택 사유를 입력합니다. 외근시간은 시간대에서 계산합니다. 자기 신청 스키마의 시간 범위는 0~24시간이며 기본 0입니다. 현재 화면 검사는 날짜·장소만 하므로(빠지면 칸 아래 이유 표시) 시간 미입력도 신청될 수 있습니다.
  4. 거래처 방문·외부 미팅·교육/세미나·관공서 업무·물품 구매 프리셋 또는 직접 사유를 입력하고 신청합니다.
  5. 성공하면 창을 닫고 대기 내역을 다시 읽습니다. 내 신청·결재 현황에서 대기 건 카드를 눌러 신청 상세의 신청 취소를 누르면 별도 확인창 없이 취소 API를 실행합니다. 이미 승인·반려된 건에는 이 버튼이 없습니다. 취소 후 새 신청으로 다시 등록합니다.

실제 근무 보고서와 재작성 ​

  1. 승인된 연장·외근은 근무일이 지나면 상태 라벨이 보고서 필요로 바뀌고 홈 지금 할 일에 보고서 작성 줄이 생깁니다. 결재 → 내 신청·결재 현황에서는 카드를 눌러 신청 상세에서 신청 사유·보고 내용·반려 사유를 봅니다.
  2. 홈의 작성(보고서 반려 건은 다시 작성) 또는 신청 상세의 보고서 작성 / 보고서 다시 작성을 누릅니다.
  3. 신청 내용이 채워진 폼에서 실제 시작 시간 / 종료 시간을 수정합니다. 근무일은 수정하지 않습니다. 시간 변경 시 실제 시간이 다시 계산됩니다. 외근 보고서는 장소를 확인하고 유형을 바꿀 수 있습니다. 연장 보고서는 신청 유형을 유지하고 실제시간·요약만 제출합니다.
  4. 필수 보고 내용을 입력하고 제출합니다. 빈 문자열·공백만 있으면 진행하지 않습니다. 외근 실제시간은 0~24, 연장은 음수 불가로 서버가 검증합니다.
  5. 성공 시 보고서를 닫고 목록을 재조회합니다. 상태 라벨은 보고서 검토 중이 되고, 보고서가 승인되면 반영 완료, 반려되면 보고서 반려로 표시합니다(apps/employee-app/src/components/approval/request-status.ts).
  6. 보고서가 반려되면 사유를 읽고 같은 건의 보고서 다시 작성을 엽니다. 보고서 제출 내용을 고쳐 다시 제출하면 보고서 대기로 돌아갑니다. 신청 자체의 반려는 새 신청을 열어 다시 상신하는 흐름입니다.

직원 목록 로더는 휴가·연장·외근·서류를 각각 최대 50건 읽고 일부 조회 실패를 빈 목록으로 변환합니다. 끌어내려 새로고침·탭 재진입은 결과 확인 수단이며 오래된 모든 기록의 무제한 목록이나 검색으로 해석하지 않습니다.

팀장 조회·승인·반려 ​

  1. 내부 결재에서 관리 팀을 고르고 대시보드의 대기 카드를 누르거나 연차/휴가, 근무 관리로 들어갑니다. 팀원이 없으면 대기 건수는 0입니다. 전체 조직 직원 수와 혼동하지 않습니다.
  2. 근무 관리에서 연장·휴일 근무 / 외근을 고르고 기간·상태·팀 조건을 조절합니다. 조회 모드는 보기 중심이며 결재 모드에서 대기 행을 선택합니다. 페이지를 이동하면 해당 페이지 데이터를 다시 읽습니다.
  3. 보기 또는 결재문서로 신청일, 근무일·시간, 사유, 결재 단계와 보고 내용을 확인합니다. 외근 보기는 별도 이력 API로 결재자·시각·사유를 조회합니다. 이력 조회 실패는 빈 이력으로 남을 수 있습니다.
  4. 신청 대기는 승인, 보고서 대기는 보고서 승인을 사용합니다. 일괄 처리는 체크박스/행 클릭으로 같은 단계만 고릅니다. 첫 선택이 신청 대기라면 보고서 대기를 추가 선택할 수 없습니다. 머리글 전체 선택도 이 규칙을 따릅니다.
  5. 일괄 승인 확인창에서 선택 건수와 작업을 확인한 뒤 승인합니다. 단건 승인과 일괄 승인의 확인 방식은 다를 수 있습니다. 반려는 반려 창에서 필수 사유를 입력한 뒤 확정합니다. 취소/닫기는 결재하지 않습니다.
  6. 성공하면 관련 목록과 대시보드를 다시 읽고, 신청자에게 알림을 생성하는 후속 처리가 실행됩니다. 알림의 읽음 상태는 결재 상태를 바꾸지 않습니다.

결재선의 규칙(종류 · 결정 순서 · 누가 정하나 · 대신 처리 · 결재자 바꾸기 · 알림)은 정책 문서 POL_결재선이 정본입니다. 아래는 화면 동작 설명입니다.

결재선(2026-10, MED-900). 휴가·연장·외근·인센티브는 신청자가 신청서의 결재자(받는 사람) 줄에서 결재자 1~5명을 순서대로 고를 수 있고, 고르지 않으면 기본 결재선(팀장 → 인사 관리자)이 붙습니다. 「내 결재선으로 저장」을 켜면 다음 신청부터 같은 결재자가 들어갑니다. 서버는 단계(approval_steps)를 열어 현 단계 결재자만 처리할 수 있게 하고, 같은 건을 두 번 처리하거나 내 신청을 내가 처리하는 것은 거절합니다. 조직 전체 범위 권한은 지정 결재자 대신 처리할 수 있고, 대신 처리한 뒤 다음 단계가 본인이면 함께 승인됩니다. 팀장 앱·관리자 목록은 「결재」 열(내 차례 · ○○○ 님 확인 중 · 결재자 지정 없음 · 완료 · 반려됨)과 「내 차례만」 스위치(기본 켬)로 내 차례를 가르고, 상세의 결재선 칸은 세 화면이 같은 부품을 씁니다. 직원 앱은 「내 신청·결재 현황」 안의 결재할 문서 · 결재한 문서 칸에서 건별로 승인·반려(반려는 사유 필수)하며, 홈 「결재할 문서 n건」 줄과 하단 「결재」 탭 숫자(할 일 + 결재할 문서)로 들어갑니다. 결재자·신청자 알림은 그 문서의 상세를 바로 엽니다.

모든 결재 문서로 확장 · 종류별 「결재선 사용」(2026-10-08). 결재선은 특정 신청에만 붙는 것이 아니라 모든 결재 문서 종류가 쓸 수 있습니다(ApprovalRequestType + packages/core/src/constants/approval-types.ts 카탈로그 + approval-flow.service.ts 의 어댑터 한 줄). 종류마다 **「결재선 사용」**이 있고(관리자 인사 관리 › 결재선 › 병원 기본 결재선 표의 스위치, settings.approvalLine.lineEnabled[종류]), 초기값은 카탈로그가 정한 그 종류의 지금 동작입니다. 끈 종류는 단계 없이 승인 권한이 있는 사람이 바로 처리하고(「예전 방식」 — 처리하는 순간 1단계 줄이 이력으로 남음), 직접 고르기·내 결재선·병원/팀 결재선 저장은 서버가 거절하며 병원·팀 결재선 표와 직원 앱 「나의 결재선」에서 그 종류가 빠집니다. 첫 확장은 주말 당직 치료 세션 신청(treatment_session, 승인 권한은 인센티브와 같음 — 신청서의 「결재자」 줄, 팀장 앱 세션 신청 카드의 「결재」 칩과 내 차례 판정, 직원 앱 결재함, 마이그레이션 1961 백필)이고, 두 번째는 출퇴근 정정 요청(attendance_correction, 승인 권한은 근태 승인 · 초기값 끔 = 2026-10-02 「승인은 관리자만」 그대로)입니다. 병원이 켜면 정정 요청에도 단계가 열려(직원 앱 정정 폼에는 아직 결재자 고르기가 없어 팀 · 병원 기본 → 자동 결재선이 붙음) 관리자 출퇴근 정정 목록의 승인 · 반려가 내 차례 판정을 거치고 「결재」 칩이 보이며, 결재자는 직원 앱 결재함에서도 처리합니다. 앞으로 추가되는 결재 기능도 같은 틀을 따릅니다.

병원 결재선 · 결재자 바꾸기(2026-10, MED-900 5단계). 관리자 인사 관리 › 결재선에서 병원이 세 가지를 정합니다 — 직원이 결재자를 직접 고를 수 있는지(settings.approvalLine.allowCustom, 끄면 approverIds·내 결재선 저장을 서버가 거절하고 저장돼 있던 내 결재선은 쓰지 않되 지우지는 않음), 고를 수 있는 역할(allowedRoleIds — 직원 후보와 내 결재선 재검증에만, 템플릿·자동 기본·대신 처리에는 적용 안 함), 종류별 병원 기본 결재선 템플릿(approval_lines 의 employeeId IS NULL 줄, 후보는 그 종류 조직 전체 범위 승인자만). 신청 순간의 결재선은 직원이 고른 결재자 → 내 기본 결재선(허용 시, 전원 유효할 때) → 팀 기본 결재선(주 소속 팀 → 상위 팀) → 병원 기본 결재선 → 자동 기본(팀장 → 인사 관리자) 순서입니다. 결재가 멈춘 문서는 조직 전체 범위 승인자 · 시스템 관리자가 상세의 결재선에서 아직 처리되지 않은 단계(확인 중 · 대기) 의 결재자를 같은 후보 안의 다른 사람으로 바꿉니다(approvalFlow.replaceApprover — approval_steps.replacedFromId/replacedById/replacedAt 이력, 확인 중 단계면 새 결재자에게만 알림, 예전 결재자 결재함에서 제외). 결재선이 있는 신청의 상태는 승인·반려·취소로만 바뀝니다 — 연장·인센티브 수정 API 가 status 를 받으면 단계가 없는 예전 방식 행에만 허용합니다. 관리자 근태 현황 › 연차/휴가 결재 표는 줄을 누르면 상세가 헤더 아래 팝오버로 열리고(이름은 직원 카드), 대기 건은 관리 열에서 바로 승인·반려하며, 「결재」 열은 결재자 이름 없이 「확인 중 · 1/2」만 보입니다.

나의 결재선 · 팀 기본 결재선 · 최종 확인(2026-10, 결재선 후속). 직원은 **결재 → 신청·결재 → 「나의 결재선」**에서 종류별로 이름 붙인 결재선을 여러 개 두고(approval_lines.name, 편집 시트에서 조직도 후보 선택기로 1~5명 · 칩 ▲▼ 순서 조정), 그중 하나를 기본(isDefault)으로 켜면 그 종류 신청서에 자동으로 들어갑니다(첫 결재선은 저절로 기본, 예전의 「내 결재선으로 저장」 토글은 기본 줄을 덮어씁니다). 팀장(teams.leaderId) · 시스템 관리자는 팀장 앱 「결재선 설정」 탭(Admin 인사 관리 › 결재선 › 「팀 기본 결재선」은 같은 화면을 iframe 으로)에서 팀의 직원 수정 허용(teams.approvalAllowCustom — 상위 설정 따름 · 허용 · 막음, 병원이 꺼 두면 팀에서 켤 수 없음)과 종류별 팀 기본 결재선(approval_lines.teamId, 후보는 그 팀 신청을 결재할 수 있는 사람)을 둡니다. 실제 수정 허용은 병원 AND 팀(더 엄격한 쪽)이고 팀 설정은 주 소속 팀에서 상위 팀으로 올라가며 처음 만나는 값을 씁니다(approval-line-policy.ts). 신청서 4개의 「신청」은 검사가 통과하면 「보내기 전에 확인해요」 시트를 띄워 요약 · 결재선(출처 배지: 직접 고름 · 내 결재선 ‘이름’ · 팀 기본 · 병원 기본 · 자동) · 「바꾸기」(허용일 때만, 내 결재선 칩으로 바로 고르기)와 안내(고정 — 막은 쪽 · 역할 제한 · 신청서를 연 사이 기본 결재선 변동 · 결재자 없음)를 보이고, 「이대로 보내기」를 눌러야 서버로 갑니다. 기본 결재선이 바뀌어도 이미 상신된 문서는 바뀌지 않고(단계는 상신 시점 스냅샷, 고칠 때는 결재자 바꾸기) 작성 중인 신청서는 확인 시트에서 다시 계산합니다. 결재선 · 정책 · 결재자 교체의 변경은 approval_change_logs(누가 · 무엇을 · 전/후)에 남고, 직원은 내 결재선 이력, 팀장은 팀 이력, 시스템 관리자는 병원 전체 이력을 읽습니다(approvalLine.*ChangeLogs). 팀 공유 · 비밀 문서는 정책 결정(D1~D6) 뒤에 붙습니다.

휴가 단건 승인은 연차/휴가에서 상태를 처리 대기로 고른 뒤 신청자·유형·적용 기간·사유를 확인하고 해당 행의 승인완료를 누릅니다. 추가 확인 창 없이 바로 처리되므로 누르기 전에 대상을 확인합니다. 상태를 승인완료로 바꿔 같은 신청이 이동했는지 확인합니다. 로컬 예제 영상은 이 흐름을 실행했습니다.

휴가의 팀장 취소는 직원이 대기 신청을 취소하는 것과 다릅니다. 승인/반려 상태에서 누르면 승인/반려를 취소하고 대기 상태로 되돌립니다. 계속하시겠습니까? 확인 후 대기로 돌립니다. 승인 휴가의 사용 원장에는 역분개를 연결합니다. 대기로 돌아온 건은 다시 승인/반려합니다.

연장 취소 요청 표시가 있는 기존 건은 취소 승인 / 취소 거절로 처리할 수 있습니다. 취소 거절은 기존 승인 상태를 유지합니다. 외근의 관리자 승인 후 취소는 사유가 필요하고, 보고서 승인으로 만들어진 근태 반영분은 원본 ID로 찾아 soft delete합니다. 직원의 대기 취소와 이력을 구분합니다.

서류 제출·증명서 결재 ​

  1. 직원 앱 결재 → 신청·결재 → 서류 제출·요청에서 서류 종류를 선택합니다. 요청 모드와 제출 모드를 구분하고 필요한 파일·메모를 입력합니다.
  2. 파일 선택은 이미지·PDF·문서/스프레드시트 등 허용 목록을 제공하며 프런트에서 10MB 초과를 막습니다. 선택을 취소하면 새 파일이 붙지 않습니다. 실제 업로드는 제출 시 저장소에 올린 후 Document를 생성하는 순서입니다.
  3. 자격증사본은 조직이 설정한 활성 자격증/면허 유형의 동적 필드를 표시합니다. 필수 필드를 채우며 유형 변경 시 같은 키의 값은 유지하고 새 필드 기본값을 적용합니다. 파일형 추가 필드는 선택 시 업로드합니다.
  4. 자격증 파일 제출은 원본 Document에 연결한 EmployeeCertification도 생성합니다. 등록일은 결재 승인일에 확정됩니다. 파일 업로드/서류 생성/자격증 생성은 여러 호출이므로 중간 실패 뒤 재시도 전에 내 신청·결재 현황의 서류 묶음에서 생성 여부를 확인합니다.
  5. 직원은 내 신청·결재 현황의 서류 묶음에서 상태를 조회하고 노출된 대기 취소 버튼을 사용할 수 있습니다. 일반 목록은 본인 직원 ID로 필터합니다. 발급 요청의 별도 화면과 서류별 요구 조건은 인사 기록을 따릅니다.
  6. 팀장은 문서 관리에서 제출 서류와 증명서 요청을 검색·필터하고 미리 봅니다. 승인은 원본이 certificate인지 document인지에 따라 해당 API를 실행합니다. 반려는 사유를 입력해 처리하며 일괄 처리 후 결과를 새로 조회합니다.
  7. 인사처리 결재는 승인이 곧 인사정보 변경인 서류입니다. 종류·입력 칸·안내 문구의 정본은 @hereby/core의 HR_ACTION_CATALOG이고, 값은 Document.metadata.hrAction에 종류별 필드로 저장됩니다(옛 사직서 메타 resignation은 읽기 폴백). 직원 앱 제출 모드에서 고를 수 있는 종류는 사직서(퇴직 예정일 필수 · 첨부 필수), 휴직신청서(사유·시작일 필수, 복직 예정일·메모, 첨부 선택), 복직신청서(휴직 중일 때만 보이며 복직일 필수), 근무형태 변경 신청(본인이 고를 수 있는 근무 중 희망 근무·시행일 필수)입니다. 인사발령품의서는 직원이 아니라 관리자가 직원 관리 행의 「인사발령 품의」로 대상 직원 명의로 올립니다(전보 · 겸직 추가 · 소속 종료 · 역할 변경 중 하나, 시행일). 문서 결재 미리보기에 「퇴직/휴직/복직/발령/근무 변경 정보」 칸과 안내가 뜨고, 목록에는 「인사처리」 배지가 붙습니다.
  8. 인사처리 결재의 승인 규칙은 종류가 같습니다. 승인하면 원장 기록이 만들어지고(퇴직 ResignationRecord, 휴직 LeaveOfAbsenceRecord 생성 또는 종료), 시행일이 승인일 이전이거나 같으면 즉시 반영됩니다 — 사직서는 TERMINATED + 세션 폐기·팀장 지정 해제·팀 대화방 나가기, 휴직은 ON_LEAVE(세션 유지), 복직은 ACTIVE, 발령은 소속·역할(병동·근무 배정이 새 소속을 따라감), 근무 변경은 주 소속 근무 배정(shiftAssignedVia = self). 시행일이 미래면 매시 도는 시행일 잡이 조직 달력으로 그날 반영합니다. 인사처리가 실패해도 승인은 유지되고 잡이 미처리 문서를 다시 집습니다. 일괄 승인에 인사처리 결재가 섞여 있으면 종류별 건수로 확인창이 뜹니다. 인사발령은 시스템 관리자 또는 직원 관리 권한(employee:manage) 보유자만 승인할 수 있습니다. 관리자의 일반 문서 검토(document.review) 승인도 같은 처리를 합니다. 승인 뒤 미리보기 안내는 「인사처리가 끝났어요 (시각)」 또는 「시행일에 자동으로 바뀌어요」로 바뀝니다.
  9. 자격증사본은 승인이 대장 등록일(registeredAt = 승인일)을 확정합니다. 미리보기에 승인 전 「승인하면 대장에 등록돼요」, 승인 뒤 「대장에 등록됐어요 (등록일)」 안내가 있습니다. 반려하면 대장에 올라가지 않습니다.

문서 미리보기는 결재 서식에 신청 데이터를 채운 HTML을 보여 주는 경로와 첨부 파일 미리보기 경로가 있습니다. 서식의 인쇄하기는 결재/발급 상태를 대신 변경하지 않습니다. 인사 기록과 메신저의 파일 전달 절차를 혼동하지 않습니다.

저장 결과와 실패 경계 ​

  • 연장은 OvertimeRecord의 신청 상태와 report.actualHours·요약·심사 정보를 보존합니다. 보고서 승인 뒤 계산기가 인정한 기록을 급여 시트와 계산에 사용합니다. 승인 응답 자체가 급여명세서 발송 완료는 아닙니다. 명세서 배포는 별도입니다.
  • 외근 보고서 승인은 상태를 트랜잭션으로 확정한 뒤 Attendance를 별도 생성합니다. 근태 쓰기 실패를 흡수해 보고서 승인은 남을 수 있습니다. 시간대가 없는 보고서는 근태행 생성 조건을 충족하지 않을 수 있습니다. 근태 현황과 원본 ID를 확인해야 합니다.
  • 외근 보고서 일괄 반려와 문서 관리의 일부 일괄 작업은 단건 API를 순차 호출합니다. 중간 실패하면 앞선 성공 건은 이미 처리되었을 수 있습니다. 다시 전체를 누르기 전 목록을 재조회하고 남은 대기 건을 선택합니다.
  • 신청·승인 상태와 알림 전송은 분리되어 있습니다. 대부분 알림 호출은 실패가 본문 저장을 롤백하지 않습니다. 수신 실패는 알림과 권한·채널 설정에서 확인합니다.

근거·문서 정합성·남은 확인 ​

  • 직원 결재 화면, 행동/폼 검증, SDK로 보내는 신청·보고서.
  • 팀 관리자 액션, TeamManagerService, 팀 결재 API, 연장 API, 외근 API.
  • 기존 가이드에서 연장 보고서를 외근 보고서 버튼으로 통칭한 부분을 종류별 실제 버튼으로 정리합니다. 직원 휴가 취소 불가 설명은 현재 대기 취소로 정정합니다. 닫기/스크롤 변화의 기존 설명과 이미지는 화면 배치의 이력이며 신청/저장 성공 증거가 아닙니다.
  • 기존 tm-02.png를 열어 팀 결재 휴가 목록·관리 열을 확인했으나 배포 커밋·실제 데이터 안전성이 독립 확인되지 않아 이 페이지에 새 증거로 복제하지 않았습니다. 필요한 새 자료는 직원 신청/보고/재작성, 팀 단건·일괄/서식 인쇄, 취소·부분 실패, 근태·원장·급여 시트 결과를 연결한 번호 프레임입니다. 실제 권한 거절·52시간 경고 표시 조건과 계산 결과도 실행 검증 대상입니다.

팀 관리자 사용 영상 ​

45초 · 소리 없음 · 화면 안의 번호와 강조 위치를 따라 보세요. 전체화면으로 확대할 수 있어요.

처음에는 재생 버튼을, 다시 볼 때는 아래 동작 번호를 누르세요.

  1. 연차·휴가 열기

    내부 결재 앱에서 「연차/휴가」를 누릅니다. 해당 신청에 대한 승인 권한이 필요합니다. 자세히 따라 하기

  2. 처리 대기 조회

    상태를 「처리 대기」로 선택해 승인할 신청을 찾습니다. 자세히 따라 하기

  3. 신청 확인·승인

    신청자·유형·적용 기간·사유를 확인하고 해당 행의 「승인완료」를 누릅니다. 이 버튼은 추가 확인 창 없이 즉시 승인합니다. 자세히 따라 하기

  4. 승인 상태 확인

    상태를 「승인완료」로 바꾸고 같은 신청이 승인 상태로 표시되는지 확인합니다. 이후 직원 앱의 신청 내역과 연차 사용 기록에 연결됩니다. 자세히 따라 하기

교육용 예제 조직에서 촬영했어요. 이름·금액·날짜는 교육용 예시이며, 사용 중인 조직의 자료를 확인하세요.

팀 관리자 소개와 사용자 교육에서 실제 누르는 위치와 결과를 따라갈 수 있도록 번호 자막·강조 표시를 붙여 촬영했습니다. 별도 DB의 로컬 예제 조직·관리자 테스트 계정을 사용했습니다. 화면 크기는 1440×900입니다. 휴가 한 건의 승인과 상태 필터 결과를 확인했습니다. 직원 앱 재진입·알림 수신·다른 결재 유형·일괄 승인·반려는 별도 검증 대상입니다.

앱 소개 · 영상 목록과 교육 범위 · 촬영·검증 기록

직원 서류 요청 영상 ​

서류 확인·제출 가이드에 결재 → 서류관리 → 새 신청 → 서류 제출·요청 → 서류 요청 탭을 촬영했습니다. 재직증명서를 선택하고 용도를 적어 파일 없이 요청한 뒤, 목록에서 요청 구분과 대기 중 상태를 확인했습니다. 제출 모드의 필수 파일 첨부·저장소 업로드·관리자 발급/승인·직원 다운로드는 이 영상의 완료 범위에 포함하지 않습니다.

직원 서류 요청과 관리자 승인 영상 ​

직원 앱의 서류 요청에서 만든 EMP001 김관리 재직증명서 건을 관리자 문서 결재에서 찾아 승인했습니다. 문서 결재 → 대기 필터 → 재직증명서 보기 → 직원·유형·첨부 상태 확인 → 승인 → 승인 필터로 재조회한 결과를 번호별 영상으로 담았습니다.

현재 두 화면의 구분 표시에 차이가 있습니다. 직원 앱은 「서류 요청」 모드로 만들었지만 관리자 통합 목록은 해당 Document를 「제출」로 표시합니다. 관리자 통합 API가 CertificateIssuance와 Document의 원천별 구분을 사용하는 현재 동작이며 문구를 임의로 바꾸거나 일치한다고 기록하지 않았습니다. 유형·사번·작성 시점과 실제 저장 객체를 함께 대조해야 합니다.

이번 예제는 파일을 첨부하지 않아 미리보기 파일이 없습니다. documentManagement.approve는 문서의 승인 상태·검토자·시각을 갱신하며, 이 동작이 재직증명서 파일을 새로 발급하거나 외부로 발송한 결과는 아닙니다. 반려 사유 입력, 실제 발급 파일, 파일 첨부 제출은 남은 촬영 범위입니다. 원인은 apps/employee-app/src/components/approval.ts, 관리자 안의 팀 관리자 문서 결재 화면, packages/api/src/routers/team-manager.router.ts를 연결해 확인했습니다.

공통 문서 양식의 본문 편집 영상 ​

관리자 문서 양식에 4단계 영상을 추가했습니다. Codex가 설정 → 문서 양식 → 재직증명서 편집으로 진입해 TinyMCE 본문 끝에 교육용 안내 문장을 추가했습니다. 저장 후 같은 양식을 다시 열어 문장을 확인하고 원래 예제 본문으로 복원·저장했습니다. 저장 버튼은 편집기 변경 감지 후 활성화되므로 활성 상태를 확인하고 누릅니다.

이 화면의 저장은 syncFromEditor → saveDocTemplate로 공통 서식 본문을 갱신합니다. 개인의 서류 승인이나 증명서 발급·직원에게 발송하는 작업이 아닙니다. 치환 항목 삽입·새 유형 추가·출력 미리보기·발급 결과는 별도 절차로 남깁니다. 사용자 가이드의 같은 절과 JSON에 실행 범위를 함께 기록했습니다.

자격증 미제출 기록 등록 영상 ​

관리자 가이드의 4단계 영상은 격리 예제 조직에서 새로 촬영했습니다. 관리자에서 문서 결재 → 자격증/면허 → 추가를 열고 홍영상(DOC002)·요양보호사를 선택했습니다. 제출 스위치를 끈 상태에서 비고 「영상 실습: 원본 제출 대기」를 입력하고 추가한 뒤, 직원 검색과 편집 재진입으로 미제출 상태·비고 보존을 확인했습니다.

이 조작은 자격증 원본을 제출하거나 진위를 검증하는 과정이 아닙니다. 제출로 전환하면 유형별 필수 상세 항목과 첨부 요구가 적용됩니다. 원본 파일 업로드·제출 전환·신고일과 다음 기한 설정은 아직 촬영하지 않았습니다. 직원 원본과 employee_certifications의 연결, 유형별 입력 정의를 바꿀 때 이 영상의 선택 항목과 검증 안내도 갱신합니다.

사용자용 절차 연결 ​

팀 관리자의 휴가 승인은 고객이 개발 기록을 열지 않고 읽는 사용법입니다. Codex가 사용자용 앱 소개에 휴가 승인, 시간외·출장 결재, 서류 확인 절차를 보완했습니다. 단건 휴가 승인 시 추가 확인 없이 처리되는 동작, 같은 단계의 일괄 처리와 일부 실패, 승인 상태와 실제 발급·발송 결과의 차이를 유지했습니다. 영상의 자세히 따라 하기는 사용자 승인 절차로 연결합니다. 이 문서 연결 정리는 제품 동작을 다시 실행하거나 녹화 범위를 확장한 검증이 아닙니다.

증명서 신청 정보와 승인 후 출력 ​

직원은 서류 제출·요청에서 조직의 증명서 양식을 골라 용도와 필수 항목을 입력합니다. 주소는 이번 증명서의 표시값이며 직원 주소를 수정하지 않습니다. 대기 중에는 취소 후 재신청하고 승인·발급 후에는 「인쇄·저장」을 사용합니다. 일반 서류 제출·요청의 처리와 증명서 발급을 구분합니다.

PR #656의 certificate-issuance.service.ts는 승인 시 증명서 번호와 출력 내용을 생성합니다. 양식의 신청 항목은 certificate-request-fields.ts, 직원 입력·제출은 approval/actions.ts, 결재 미리보기는 팀 관리자 doc-preview.html에서 연결합니다. 용도 누락·주소 생략·반려·취소·승인 전후 출력의 실제 화면 촬영은 남아 있습니다.

기존 증명서 요청의 미리보기 ​

팀 관리자에서 이전에 생성된 요청 또는 승인 당시 문서 본문이 저장되지 않은 증명서도 요청 상세의 미리보기 경로로 확인합니다. PR #843은 이러한 자료의 미리보기 복원을 보완했으며 승인·반려·인쇄 권한을 새로 부여하지 않습니다. 사용자 조작 순서는 기존 절차를 유지합니다. 옛 요청과 새 요청의 내용 일치, 관리자 승인 후 인쇄 결과는 별도 가상 예제로 검증해야 합니다.

승인된 문서와 인사 처리 ​

사직서·휴직·복직·인사발령·근무형태 변경 문서는 승인 결과와 연결되는 인사 처리를 함께 확인해야 합니다. 문서 유형과 대상 직원·시행일·계약 및 소속 조건을 먼저 검토한 뒤 승인합니다. 승인 버튼을 누른 후 문서 상태뿐 아니라 직원의 상태·계약·팀·근무형태 화면에서 반영 결과와 실패 사유를 다시 확인하세요.

미래 시행일인 업무와 즉시 반영하는 업무는 구분합니다. 같은 문서를 반복 승인해 중복 처리하지 않으며, 자격증 관련 문서는 알림과 실제 자격 정보 갱신을 동일한 완료로 보지 않습니다. 문서 반려·취소가 이미 적용된 모든 인사 결과를 되돌린다고 가정하지 않습니다. 잘못된 퇴직은 직원의 퇴직 취소 절차를 사용합니다.

PR #883·#900의 공통 인사 처리 경로를 확인했습니다. 문서 양식별 필수 입력, 미래 시행일 작업기 실행, 중복·실패·권한 회수와 실제 알림은 후속 예제 실행 대상입니다. 이 문단은 모든 문서 양식의 실행 성공을 인증하지 않습니다.