Skip to content

직원 정보·근로계약·호봉과 급여 원천 ​

제품 개발 기록 · 급여 시트 · 직원 본인 정보 · 조직·접근

관리자 화면·공유 직원 패널·SDK·API·시트 원천을 연결한 사용 설명입니다. 저장·재조회·문자 수신·급여 재계산의 실행 범위는 아래 검증 기록에서 구분합니다.

목적·권한·진입 ​

관리자가 직원 식별정보, 소속, 재직 상태, 근무 배정, 근로계약 조건을 관리합니다. 이 자료는 급여 시트·근태·스케줄·권한·전자서명의 공통 원천입니다. 직원 본인이 수정하는 내 정보와 증명서 요청은 직원 프로필, 승인/반려는 결재에 따릅니다.

진입실제 용도
관리자 직원 관리 /admin/#employees검색·필터·목록·추가/수정·대량 처리·명단 다운로드
관리자 조직 화면의 워크스페이스 직원 목록같은 employees-content.html을 공유하는 추가 진입
HR 시트 직원 행의 직원 정보 수정공유 EditEmployeePanel을 여는 진입. 행 직원 연결 변경과 다름
관리자 설정 > 호봉표 /admin/#settings/grades연도/직종별 급여 기준과 직종 관리
시트의 계약급여내역, 퇴사 내역 전체, 퇴사 정산, 연말정산원천과 월별 계산을 함께 조회하는 워크북

조직 범위 직원 읽기/수정은 employee:read·employee:update와 self/team/all 범위 적용을 받습니다. 추가는 create, 삭제는 delete, 계정 초대·팀 역할 일괄 부여·휴직/복직은 manage 계열을 검사합니다. 호봉은 salary_grade의 별도 읽기/생성/수정/삭제 권한입니다. 폼 안의 계정·시스템 관리자 설정은 일반 급여 읽기 권한만으로 수행할 수 있다고 가정하지 않습니다.

지원 작업 목록 ​

작업입력/선택결과·절차
조회·검색·필터·정렬·선택검색어, 상태·팀·역할·입사일, 페이지 크기목록
단건 직원 추가필수 성·이름·사번 또는 자동 생성·입사일직원/계정/계약 및 선택 소속·자격대장, 추가
직원 기본·인사·계약 수정, 미리보기변경 필드, 일부 항목 즉시 저장수정
휴직·복직·퇴직상태별 사유·날짜·동의전용 인사 기록과 직원 상태, 재직 전환
팀·역할 추가/변경/제거직원별 소속 또는 선택 직원들팀 멤버십·역할, 소속
계정 초대·비밀번호 재설정이메일/전화, 비밀번호계정 연동/인증 변경, 계정
직원 삭제삭제 확인, 소유자 계정 제외직원 소프트 삭제, 삭제
XLSX 대량 추가/수정지정 템플릿, 최대 500명, 서버 사전 검증전원 트랜잭션 반영, 업로드
명단 다운로드다운로드 열·별도 범위XLSX, 명단
호봉·직종 관리연도·직종·호봉·금액·상태호봉 기준, 호봉표
계약 시트 편집·비활성화계약 필드, 직원 연결실제 계약 새 버전, 계약급여내역
퇴사 정산 세트 입력·계산·반영, 연말 원천 조회기간·원천 연결·수식·대상 급여대장현재 화면 절차, 전용 API의 노출 제한
교육보조금 원천·집계 확인교육 과정·지급일·영수증·승인 기록교육 원천과 UI 미연결 범위

목록과 검색 ​

  1. 직원 관리를 열고 로딩이 끝난 뒤 목록·전체 수와 현재 조직을 확인합니다. 검색 입력은 약 300ms 지연으로 반영되며 상태·팀·역할·입사일 시작/종료 필터를 조합할 수 있습니다. 필터의 적용/초기화를 구별합니다.
  2. 사번·이름·이메일·입사일·상태 등의 정렬 헤더를 누르고 페이지/표시 개수를 바꿉니다. 목록의 팀·역할 칩은 별도 수정 진입점입니다. 직원 행의 근태관리는 근태로 연결합니다.
  3. 체크박스로 대상을 선택합니다. 헤더 전체 선택은 현재 employees 배열의 페이지 행이며 조직 전체를 자동 선택하는 기능이 아닙니다. 대량 수정 팝업은 이 선택을 초기값으로만 복사합니다.
  4. 결과가 없으면 검색/상태/기간을 해제하고 다시 읽습니다. 데이터가 비어 보일 때 권한 거부나 로드 실패와 실제 0명을 구별합니다.

단건 직원 추가 ​

  1. 직원 추가를 눌러 패널을 엽니다. 기본정보·인사정보·자격증·면허 등록·근로계약은 자유롭게 이동할 수 있으며 입력은 저장 전 미리보기로 확인합니다.
  2. 필수 성·이름과 사번을 입력하거나 사번 자동 생성을 선택합니다. 예시: 테스트 직원 성 김, 이름 테스트, 사번 TEST001, 입사일 2026-09-01. 자동 생성 미리보기는 예약이 아니므로 저장 시 중복 검사를 다시 받습니다.
  3. 선택인 이메일·전화·생년월일·주민등록번호·주소를 필요에 따라 입력합니다. 이메일은 형식, 생년월일은 미래 날짜, 완성된 주민번호는 13자리 검증을 받습니다. 주소를 검색해 선택했다면 상세주소가 필요합니다. 주민번호 앞자리는 생년월일과 연결되고 뒤 7자리는 비밀번호 입력으로 받습니다. 부분 주민번호는 제출하지 않습니다.
  4. 인사정보에서 입사일 → 소속(팀·역할) → 근무 그룹 → 직무 순서의 필수값과 초기 재직 상태, 출근 기록 방식을 고릅니다. 소속 팀과 직무의 기본 근무를 확인합니다. 직무 기본 근무가 있으면 우선 채워지며, 없으면 팀의 대표 근무를 사용하고 등록 화면에서 다른 근무로 바꿀 수 있습니다. 대표 근무가 없는 팀은 근무 그룹을 직접 고릅니다. 근무형태는 선택이라 근무 그룹만 배정할 수도 있습니다. 소속이 둘 이상이면 주 소속 하나의 근무가 출퇴근 기준 시각과 연차 계산에 쓰입니다. 필수값이 비어 있으면 등록이 활성화되지 않습니다. 단건 폼 초기 상태는 **비활성(INACTIVE)**입니다. 출근 기록 방식 미선택은 조직 기본값입니다.
  5. 자격증/면허가 필요하면 유형을 추가합니다. 단건 추가 시에는 유형별 미제출 항목을 만드는 경로이며 사본·상세 제출과 검증 완료를 뜻하지 않습니다. 이후 직원 제출과 결재에서 실제 내용을 관리합니다.
  6. 근로계약에서 계약형태·임금형태를 고르고 금액/시간을 입력합니다. 기본은 정규직(permanent), 월급(monthly), 금액 0, 주 소정 40시간·최대 52시간입니다. 호봉은 선택 사항이며 배정 시 표의 기본급/호봉액이 우선합니다. 금액은 원, 주 시간은 시간 단위입니다.
  7. 미리보기 후 등록합니다. 성/이름·입사일·형식·중복 오류는 보완 후 재시도합니다. 성공하면 패널을 닫고 목록을 다시 읽습니다. 직원 생성 다음에 팀·역할과 자격 유형을 별도 요청하는데 이 후속 단계 일부 오류는 직원 생성 성공을 되돌리지 않습니다. 등록 후 소속·자격대장까지 다시 확인해야 합니다.

단건 폼과 엑셀 대량 추가는 기본값·후속 생성 범위가 같지 않습니다. 예를 들어 대량 추가는 활성 직원과 계정을 생성하지만 단건 폼의 계약·자격 유형과 두 번째 이후 소속을 입력받지 않습니다(팀은 한 행에 하나).

기존 직원 수정·저장·취소 ​

  1. 직원 행의 수정을 누르거나 HR 시트에서 직원 정보 수정 진입을 사용합니다. 목록 데이터 뒤 상세 정보를 읽어 현재 근로계약과 원천을 채웁니다. 상세 로딩 전에 보이는 기본값으로 저장하지 않도록 로딩 상태를 확인합니다.
  2. 기본정보에서 변경합니다. 사번 변경은 확인/중복 검사 뒤 부모 패널 저장으로 제출됩니다. 주소를 비우면 null로 해제하며 근무 그룹·형태·출근 기록 방식도 비우는 경우 해제값을 전송합니다.
  3. 주민번호는 읽기값을 그대로 재전송하지 않습니다. 유효한 13자리를 새로 입력한 때만 보내며 빈칸/부분 입력이면 기존 암호화 값을 보존합니다. 이름·이메일·전화 등 일반 문자열은 현재 diff 경로가 비어 있지 않은 변경값만 보내므로 빈칸 저장을 모든 필드의 삭제로 해석할 수 없습니다.
  4. 근로계약 값을 바꾸면 기본 직원 수정 뒤 upsertContract를 별도로 호출합니다. 이전 활성 계약은 supersededAt을 남기고 같은 chainId의 새 버전을 만듭니다. 식대·교통비·직책수당을 0으로 바꾸면 0도 전송하여 이전 수당을 이어받지 않도록 처리합니다. 변경이 없으면 새 계약 버전을 불필요하게 만들지 않습니다.
  5. 미리보기에서 현재값과 변경값을 비교한 뒤 저장합니다. 닫기·취소·Esc는 미저장 변경 확인을 거칠 수 있습니다. 단, 이미 즉시 저장한 소속 변경과 비밀번호 작업까지 패널 취소가 되돌리는 것은 아닙니다.
  6. 오류가 나면 기본정보/팀 역할/계약 중 어디까지 반영됐는지 다시 엽니다. 여러 API 호출 전체를 한 번에 롤백하는 구조가 아니므로 “저장 실패”가 모든 단계 미저장을 뜻하지 않습니다.

서버 계약 입력은 기본급/호봉/수당 0 이상, 주 소정·최대 시간 각 1~168을 검사합니다. 이 범위 검사는 개별 근무 형태의 법정 한도 적합성 판정과 다릅니다. 호봉을 지정하면 서버에서도 표의 기본급/호봉액을 강제하며 비활성 호봉은 배정을 거부합니다.

소속·역할과 일괄 적용 ​

  1. 직원 수정의 소속 (팀·역할)에서 팀을 선택한 뒤 역할을 선택합니다. 여러 소속을 둘 수 있고 역할 없이로 팀만 배정할 수 있습니다. 기존 팀/역할 칩을 누르면 해당 항목을 바꾸며 제거 버튼은 멤버십을 제거합니다.
  2. 수정 패널의 소속 조작은 저장 중 표시와 함께 별도로 서버에 반영하는 경로가 있습니다. 부모 패널 저장 전에도 적용될 수 있습니다. 팀·역할·멤버십은 조직 관리의 접근 범위와 연결됩니다. 역할은 직원이 아니라 소속마다 붙고, 비활성 역할은 배정할 수 없으며, 역할을 고르거나 비우려면 역할 관리 권한이 필요합니다.
  3. 같은 패널의 병동 배정에서 줄 단위로 병동·스케줄러·교대 형태·책임자를 고칩니다. 한 줄이 스케줄러 하나이고, 병동을 바꾸면 스케줄러는 그 병동의 기본으로 돌아갑니다. 겸임이면 줄을 더하며, 같은 병동의 다른 스케줄러도 겸임입니다. 간호 스케줄 등록·수정·삭제 권한이 모두 있어야 편집할 수 있고 없으면 읽기 전용입니다. 병동이 연결된 팀으로 소속을 옮기면 병동도 함께 옮길지 묻고, 그때 서버가 만든 배정과 저장 전에 넣어 둔 같은 스케줄러 줄은 한 줄로 합쳐집니다. 스케줄러를 고르지 않은 줄이나, 사용자가 직접 같은 스케줄러를 두 줄 넣은 경우에는 저장이 막히므로 줄을 정리해야 합니다.
  4. 목록에서 직원을 체크하고 상태·팀·역할 중 변경할 항목을 선택한 뒤 적용합니다. 확인창은 고른 변경을 한 번에 보여줍니다. 취소하면 확인에 걸린 일괄 조작을 실행하지 않습니다.
  5. 확인하면 상태, 팀, 역할 순으로 처리합니다. 역할은 활성 팀 멤버십에 적용하므로 팀 생성이 먼저입니다. 일부 직원/항목 실패는 건수로 보고되며 성공한 항목은 남을 수 있습니다. 결과를 읽고 실패 대상만 보완합니다.

휴직·복직·퇴직 ​

  1. 직원 수정의 상태에서 휴직을 선택하면 사유와 시작일을 입력합니다. 복직 예정일·메모는 선택이고 기타는 상세 사유를 입력할 수 있습니다. 저장은 휴직 기록 생성과 직원 ON_LEAVE 갱신을 순서대로 수행합니다.
  2. 휴직 직원의 복직 또는 재직 선택은 returnFromLeave로 열린 휴직 기록을 종료한 뒤 직원 상태를 ACTIVE로 갱신합니다. 상태 문자열만 바꾸는 절차와 다릅니다.
  3. 퇴직을 선택하면 사유·퇴직일·확인 동의를 입력합니다. 저장하면 ResignationRecord를 만든 뒤 직원 상태를 TERMINATED로 바꿉니다. 취소/입력 미충족은 전용 저장 경로로 진행하지 않습니다. 직원이 직원 앱에서 사직서 · 휴직신청서 · 복직신청서를 제출하고 문서 결재가 승인되면 같은 결과가 자동으로 만들어집니다(시행일이 미래면 그날 잡이 상태를 바꿈) — 절차는 결재의 서류 제출을 따르며, 이 경우 직원 수정에서 다시 처리하지 않습니다(같은 날짜의 기록은 중복 생성되지 않음). 소속·역할 변경은 관리자가 직원 관리 행의 「인사발령 품의」로 올리고 문서 결재에서 승인하면 시행일에 반영됩니다.
  4. 각 전환은 전용 기록 요청과 직원 상태 요청이 분리되어 있습니다. 중간 실패 후에는 기존 휴직/퇴직 기록을 확인한 뒤 재시도하여 중복 원천 여부를 확인합니다. 이 전환을 고른 저장은 일반 필드 저장과 별도 분기이므로 다른 탭의 미저장 변경도 다시 확인합니다.
  5. 휴직·퇴직 시트의 자동 행과 직원 앱/근태의 재직 범위를 다시 조회합니다. 신청형 휴가·외근·연차 및 승인 대장은 근태·휴가, 연차 통지는 연차 촉진입니다.

계정 초대·인증 조작 ​

  1. 목록에서 이메일이 있고 계정 연결이 없는 직원의 계정 초대를 선택합니다. 서버는 활성 직원과 조직을 다시 확인한 후 초대 메일 서비스를 호출합니다. 이메일이 있다고 비활성 직원 초대까지 성공하는 것은 아닙니다. 실패 사유를 보완 후 재시도합니다. 실제 수신 확인은 별도입니다.
  2. 직원 수정 계정·보안에서 임시 비밀번호 SMS 방식을 고르면 전화번호가 있을 때 발급 버튼을 누를 수 있습니다. 확인 후 서버 결과에 따라 SMS 전송 완료 또는 직접 전달할 임시 비밀번호/안내가 나옵니다. 문서나 캡처에 실제 비밀번호를 남기지 않습니다.
  3. 직접 설정은 새 비밀번호와 확인값을 넣고 설정합니다. 화면은 병원 설정의 일반 비밀번호 최소 길이(기본 8자) 이상 또는 임시 비밀번호 형식인지와 일치를 확인하고, 서버도 같은 기준을 적용합니다. 성공하면 입력을 비우고 완료 안내를 표시합니다.
  4. SMS 로그인 허용 등 인증수단·시스템 관리자 체크는 해당 권한을 가진 관리자가 변경합니다. 저장 후 대상 계정 접근 동작은 인증에서 별도로 검증합니다.

직원 삭제 ​

  1. 직원 행의 삭제를 선택하고 확인창에서 대상을 확인합니다. 취소하면 진행하지 않습니다.
  2. 확인하면 직원 상태를 퇴직으로 바꾸고 deletedAt을 남깁니다. 데이터베이스의 직원 행을 하드 삭제하지 않습니다. 조직 소유자 계정은 서버가 삭제를 거부하고 고객센터 안내를 반환합니다.
  3. 목록과 직원 원천 시트를 다시 읽습니다. 직원 삭제는 퇴직 정산 기록 생성과 별도이며 이 화면에 삭제 직원 복원 조작은 확인되지 않습니다. 원천 관계/과거 급여의 보존 결과는 데이터 재조회로 확인해야 합니다.

엑셀 대량 추가·수정 ​

  1. 직원 목록 업로드에서 신규 직원 대량 추가 또는 기존 직원 대량 수정을 선택합니다. 일반 시트의 CSV/XLSX 가져오기와 다른 직원 API 경로입니다.
  2. 추가는 템플릿을 내려받고 성 *, 이름 *, 사번 *, 입사일 *, 생년월일, 이메일, 휴대폰 번호, 팀 *, 역할, 직무 *, 근무 그룹, 근무 유형 순서대로 작성합니다. 팀·역할·근무 그룹·근무 유형은 관리자 화면에 등록된 이름 그대로 적습니다. 근무 그룹과 근무 유형을 모두 비우면 직무의 기본 근무, 팀의 대표 근무 순서로 채웁니다. 둘 다 없으면 근무 그룹이 필수입니다. 명시한 근무 값은 해당 값을 우선 사용합니다. 근무 유형은 적은 근무 그룹 안의 이름이어야 하고 비활성 근무 그룹·유형은 쓸 수 없습니다. 헤더를 바꾸지 않으며 첫 워크시트의 최대 500명까지 처리합니다. 뒤쪽 직무·근무 그룹·근무 유형 열이 없는 예전 템플릿도 올라가지만 빠진 필수값은 행 오류로 보고됩니다. 필수 날짜는 YYYY-MM-DD의 실제 존재하는 날짜여야 합니다.
  3. 수정은 팝업의 검색·팀·상태 필터에서 대상을 고릅니다. 기존 목록 체크는 초기값이고 팝업에서 독립적으로 바꿀 수 있습니다. 선택 직원을 담은 템플릿을 내려받습니다. 헤더는 사번 *, 이메일, 휴대폰 번호, 성 *, 이름 *, 입사일 *, 생년월일, 팀, 역할, 직무입니다. 맨 끝 직무는 선택 열이라 이 열이 없는 예전 템플릿도 그대로 올라갑니다.
  4. 수정 파일의 사번·이메일·휴대폰은 식별용으로 변경하지 않습니다. 서버는 선택하지 않은 직원·없는 사번·중복 사번·기존과 다른 이메일/전화번호를 행별 오류로 보고합니다. 일반 수정 열 중 생년월일 빈칸은 기존값 삭제로 적용되므로 미입력 보존과 구별합니다.
  5. 파일을 올리면 먼저 dryRun 검증합니다. 헤더/빈 행/500명 초과, 필수(추가는 팀·직무·근무 그룹 포함)·날짜·이메일·전화 형식, 파일 내부 및 조직 내 중복 오류를 행번호로 확인합니다. 오류가 있으면 파일을 고치고 다시 올립니다.
  6. 검증 통과 후 등록/수정을 확정합니다. 서버는 다시 검증하고 전원을 하나의 트랜잭션으로 반영합니다. 성공하면 처리 인원을 보여주고 목록을 새로 읽습니다. 검증과 확정 사이 다른 관리자 변경 때문에 실패할 수 있으므로 사전 검증 통과만을 최종 저장으로 보지 않습니다.

팀·역할 열의 이름은 급여 시트의 직원 마스터와 같은 규칙으로 풉니다. 등록된 이름과 공백을 뺀 나머지가 정확히 일치해야 하고, 비활성인 팀·역할은 「없어요」가 아니라 비활성이라고 구분해 안내합니다. 같은 이름이 여럿이면 한쪽을 임의로 고르지 않고 「부서>팀」처럼 상위 팀을 함께 적으라는 행 오류로 돌려줍니다 — 조용히 고르면 엉뚱한 팀과 병동으로 옮겨지기 때문입니다. 팀은 주 소속이라 새 팀이면 다른 활성 소속을 오늘로 끝내고 옮기며, 이미 활성 소속인 팀이면 아무것도 건드리지 않습니다. 퇴사자는 새 팀에 넣지 않습니다. 역할 관리 권한이 없으면 역할 열에 기본 역할만 적을 수 있습니다.

대량 추가는 활성 직원·계정·최초 비밀번호 변경 상태와 팀 하나(주 소속)·근무를 만들지만 단건 폼의 계약·자격 유형 입력은 복제하지 않습니다. 급여 작업 전 필요한 계약과 추가 소속을 보완합니다.

명단 다운로드 ​

  1. 직원 명단 다운로드에서 포함할 열을 고릅니다. 기본 선택은 사번·성명·팀·직무·병동·상태·입사일·이메일·전화·근무형태입니다. 최소 한 열을 선택해야 다운로드합니다.
  2. 다운로드하면 서버 employee.exportRoster가 XLSX를 반환합니다. 직원 관리 진입은 목록에 걸린 필터를 그대로 보냅니다 — 상태·팀·역할·검색어·입사일·직무·병동입니다. 체크한 행만 고르는 기능은 아니므로 선택 행 수와 출력 인원은 다릅니다.
  3. 조직/팀 화면의 팀 명단 진입은 그 팀과 하위 조직 포함 여부, 상태·직무 필터, 검색어를 전송합니다. 어느 경로든 화면에 보이는 명단과 같은 범위가 원칙이지만, 실패하면 오류를 읽고 다시 다운로드할 수 있습니다.

호봉표·직종 관리 ​

  1. 설정 > 호봉표에서 연도와 직종 탭을 고르거나 전체를 조회합니다. 새로고침·페이지 이동으로 목록을 확인합니다. 직종 관리에서 이름을 추가/편집/제거한 뒤 저장합니다. 취소는 미저장 변경 확인을 거칩니다.
  2. 직종 삭제는 서버에서 해당 직종의 호봉도 소프트 삭제합니다. 직종 관리 저장은 삭제·추가·수정을 순서대로 보내므로 중간 실패 후 목록을 다시 조회합니다.
  3. 추가에서 직종, 적용년도, 호봉, 기본급, 호봉액, 상태, 비고를 입력합니다. 기본은 선택 직종/첫 직종, 1호봉, 현재/선택 연도, 금액 0, 활성입니다. 서버는 호봉 정수 0~50, 연도 2020~2100, 금액 0 이상을 검사합니다.
  4. 합계는 기본급+호봉액, 연봉은 합계×12로 연동됩니다. 연봉을 입력하면 기본급을 역산하고 호봉액은 유지합니다. 현재 관리자 폼의 시급 표시는 합계÷209를 반올림하며 이 화면은 월 시간 209를 저장합니다. 모든 조직 근로계약 시간과 자동으로 동일해지는 설정은 아닙니다.
  5. 저장하면 목록을 재조회합니다. 중복 호봉 오류는 직종/연도/호봉을 확인합니다. 수정에서 실제 요청은 금액·계산값·비고·상태를 보내며 직종·호봉 번호·적용년도는 포함하지 않습니다. 생성 폼에서 비활성을 골라도 생성 요청에는 status가 포함되지 않는 경로가 있으므로 저장 후 상태를 확인합니다.
  6. 행 수정/삭제 아이콘에서 값을 바꾸거나 삭제 확인 후 소프트 삭제합니다. 직원 계약에 배정된 호봉의 기본급/호봉액은 표 정본을 따릅니다. 비활성 호봉의 신규 배정은 거부됩니다. 기준 표 변경 후 기존 계약/수당의 어떤 값이 재계산되는지는 재조회·반영 단계와 함께 확인합니다.

계약급여내역 시트 ​

  1. 급여 시트에서 새 시트 만들기 > 추천 템플릿 > 계약급여내역을 적용하거나 기존 시트를 엽니다. 해당 월과 계약 기간이 겹치는 활성 근로계약이 원천입니다. 조직의 호봉표는 월별 사본이 아니라 공유 기준입니다.
  2. 사번/성명과 계약형태·임금형태·호봉·기본급·시급·호봉수당·근속수당·주 소정/최대 시간·계약기간을 확인합니다. 수정 가능한 계약 필드는 실제 계약의 새 버전으로 저장됩니다. 단순 워크시트 임시값이 아닙니다.
  3. 호봉이 있으면 기본급·호봉수당 직접 수정이 막힙니다. 자유 입력 계약으로 바꾸려면 호봉을 미선택으로 해제하고 숫자를 입력합니다. 숫자는 쉼표 제거 후 0 이상 유한값이어야 하며 서버의 필드별 검증도 받습니다.
  4. 기존 자동 행은 원본 계약 변경 확인을, 수동 행에서 계약 입력을 시작하면 “직원의 실제 근로계약에 기록”된다는 확인을 받습니다. 직원이 없으면 먼저 연결하라는 안내가 납니다. 성공하면 v1 생성 또는 새 버전 안내가 표시됩니다.
  5. 새로고침하면 새 활성 버전과 계산 기초를 읽습니다. 해당 월 수당 레코드는 필요 시 계산·급여 반영을 다시 수행합니다. 계약 수정과 급여 확정은 서로 다른 저장입니다.
  6. 단일 계약 행 삭제는 비활성화 확인 후 실행되어 다음 원천 조회에서 제외되며 이전 버전을 남깁니다. 여러 행 삭제 경로는 현행 코드가 확인창 전에 비활성화 요청 Promise를 생성합니다. 따라서 이 경로에서 확인 취소가 쓰기를 막는다고 보장할 수 없으며 현재 환경 재현이 필요한 결함 후보입니다. 이 문서 작업에서는 실행하거나 수정하지 않았습니다.

퇴사 정산·연말정산의 현재 화면 ​

자료현재 노출된 경로저장 경계
퇴사 내역직원 수정의 퇴직 처리, 새 시트 만들기 > 추천 템플릿 > 퇴사 내역 전체직원 퇴직 처리가 ResignationRecord를 생성. 시트 자동 행은 퇴사월 기준
퇴사 정산새 시트 만들기 > 추천 템플릿 > 퇴사 정산일할/수당·퇴직금/연차·4대보험·요약 네 시트의 직접 입력 셀과 수식
연말정산새 시트 만들기 > 추천 템플릿 > 연말정산해당 연도의 기존 정산 원천을 조회. 금액 작성·전용 승인 화면은 현재 미연결
교육보조금현재 전용 화면·시스템 추천 템플릿 없음API와 교육 계산 모듈은 존재. 임의로 만든 시트의 값은 교육보조금 원본 생성이 아님

현재 관리자에서 시트를 열거나 HR 앱 기본 주소의 /sheets로 들어갑니다. 시트 읽기는 급여 읽기, 시트 생성·셀/구조 편집·계산·반영은 급여 관리 권한과 공개 범위·잠금 조건을 따릅니다. 원천 전용 education·resignation·year_end_settlement 권한과 시트 권한은 다른 검사입니다.

퇴사 정산 세트 작성·재조회 ​

  1. 먼저 직원 수정에서 퇴직일·사유를 저장하고 목록을 다시 엽니다. 현재 근로계약의 기본급과 입사일을 확인합니다. 시트에서 빈 퇴사일을 임의 입력해 직원 퇴직 처리를 대신하지 않습니다.
  2. 시트 귀속월을 퇴사월로 맞추고 새 시트 만들기 → 추천 템플릿 → 퇴사 정산을 적용합니다. 구성 시트가 함께 생기고 요약 퇴사 정산으로 이동합니다. 이미 있는 세트는 사이드바에서 열며 새로 적용해 중복 세트를 만들지 않습니다. 적용 전 취소는 생성하지 않고, 적용 오류 뒤에는 사이드바에서 생성된 구성원을 확인합니다.
  3. 퇴사 정산 — 일할/수당을 열어 직원·퇴사일·기본급을 대조하고 정산기준일, 추가 수당/차감, 비고를 입력합니다. 숫자 셀을 더블클릭해 Enter로 적용하고 Esc로 입력을 취소합니다. 정산기준일의 설명상 기본 예는 25일이지만 템플릿은 빈 직접 입력 열을 생성하므로 실제 값을 넣어야 합니다. 기준일은 조직 기준에 따라 1~31일로 확인하고 0/빈 값인 채 계산하지 않습니다. 일반 숫자 셀에는 전용 정산 API의 1~31 범위 검증이 자동 적용되지 않습니다.
  4. 퇴사 정산 — 퇴직금/연차에서 평균임금, **미사용 연차(일)**를 입력합니다. 현재 시트의 평균임금은 수식 평균임금 × 30 × 근속일수 ÷ 365에 들어가는 일 단위 금액이며 3개월 총액을 그대로 넣는 칸이 아닙니다. 입사일·퇴사일 차이로 근속일수를 구하고 365일 미만이면 이 템플릿 퇴직금은 0입니다. 연차수당은 미사용 연차 × 기본급 ÷ 30을 반올림합니다. 이는 제품 기본 수식의 설명이며 각 직원의 최종 지급 적합성 검토를 대신하지 않습니다.
  5. 퇴사 정산 — 4대보험의 정산기준일도 별도로 입력합니다. 일할/수당의 같은 이름 셀과 자동 공유되지 않습니다. 일할 기본급·국민연금·건강보험·장기요양·고용보험 합계를 확인합니다. 현재 수식은 statutory 상수를 읽으며 장기요양은 건강보험료에 비율을 곱합니다. 템플릿 설명에 남은 “2024년 고정 요율”과 달리 실제 계산은 기간별 조직 상수를 사용합니다.
  6. 요약 퇴사 정산으로 돌아와 일할환수액·퇴직금·연차수당·4대보험을 대조합니다. 현재 총정산액은 퇴직금 + 연차수당 - 일할환수액 - 4대보험입니다. 추가 수당/차감은 현재 기본 요약 수식에서 참조하지 않으므로 그 칸에 입력한 것만으로 총정산액이 바뀌지 않습니다. 추가 금액을 반영하려면 해당 열을 별도 급여 반영 대상으로 연결하거나 검토한 수식·참조 구조에 포함해야 합니다.
  7. 직접 입력은 SheetCell에 저장합니다. 뒤로 이동/시트 닫기는 이미 저장한 셀을 취소하지 않습니다. 저장 오류가 보이면 같은 월·행을 다시 열어 값을 확인한 뒤 재시도합니다. 세트 간 slug 참조는 같은 기간·같은 직원 연결을 사용하므로 구성 시트가 없거나 직원 연결이 다르면 0/누락 결과를 확인해야 합니다.
  8. 반영할 열의 수당/공제 구분과 대상 급여대장 slug·열을 설정하고 급여대장에 반영의 확인·검증을 진행합니다. 결과 건수와 급여대장 재조회를 확인합니다. 반영·확정 절차가 정본이며, 이 경로는 아래 전용 resignation.calculateSettlement를 호출하지 않습니다. 시트 반영이 ResignationRecord의 처리중/완료 상태까지 바꾼다고 가정하지 않습니다.

자동 생성된 퇴사 원천 행은 일반 시트 행 삭제에서 건너뛰고 원본 관리를 안내합니다. 직원의 실제 퇴직 상태, 원천 퇴사 기록, 정산 시트, 수당·공제, 지급은 각각 확인해야 합니다.

연말정산 원천 조회와 셀 편집 제한 ​

  1. 귀속 연도를 확인하고 새 시트 만들기 → 추천 템플릿 → 연말정산을 적용하거나 기존 시트를 엽니다. 자동 행은 settlementYear가 같은 기존 원천이며 적용 월을 바꿔도 같은 연도 자료를 조회합니다. 과거 독립 adapter의 “선택 연도-1” 로직을 현재 추천 시트의 연도 규칙으로 적용하지 않습니다.
  2. 직원·정산연도 / 상태 / 신청일 / 총급여액 / 결정세액 / 기납부세액 / 환급액 / 계산일시 / 승인일시 / 메모를 읽습니다. 금액은 원천값이며 null은 아직 값이 없는 상태입니다. 해당 금액 열을 현재 화면이 자동 세법 계산으로 채워 주는 것으로 해석하지 않습니다.
  3. 원천이 추가/변경되었다면 데이터 → 새로고침(자동 채움) 후 행·연도·값을 확인합니다. 빈 목록은 원천 없음·잘못된 연도·권한/조회 실패를 구분해야 합니다.
  4. 현재 ref 셀은 편집기가 열릴 수 있지만 연말정산 원천을 저장하는 전용 writer가 없습니다. 원천 행을 공통 allowance 종류로 내려주는 구조 때문에 저장이 수당 원본 확인창·수당 수정 API 또는 미지원 필드 오류로 흐를 수 있습니다. 원본 안내가 나오면 취소하고, 실패 뒤 다시 조회합니다. 금액 입력/상태 변경이 지원되는 연말정산 CRUD라고 안내하지 않습니다. 자동 원천 ref에 일반 셀 값을 덮어쓰는 요청도 서버가 거부합니다.
  5. 시트에 새 수동 행·값 열을 만드는 기능은 일반 워크북 작업입니다. 그렇게 입력한 금액은 YearEndSettlement 신규 기록·금액 변경·전용 승인이나 외부 신고를 생성하지 않습니다. 수당/공제에 사용할 별도 시트 값을 작성했다면 일반 급여 반영의 근거·열 연결·검증을 따릅니다.

교육보조금 원천과 현재 UI 경계 ​

기준 HR 라우터가 허용하는 업무 경로는 payroll / sheets / earnings / deductions이고 실제 대시보드는 워크북만 포함합니다. 과거 교육·연말·퇴사 adapter가 main.ts에 등록되어 있어도 현재 HTML에서 연결되지 않습니다. 관리자에서도 과거 /year-end-settlement·/resignation-settlement 임베드를 제거한 근거가 있습니다. 따라서 교육비 메뉴에서 추가·승인·취소라는 현행 클릭 절차는 없습니다. 이전 URL을 직접 입력해도 지원 경로가 아니며 잘못된 접근 안내로 이동합니다.

남아 있는 API 기능입력·기본값저장 결과·제한
educationSubsidy.list/get/history직원·상태·지급일 범위/페이지, ID, 이력은 chainId조직의 현재 원천 또는 버전 이력 조회. UI 목록 진입과 별개
create직원 UUID·과정명(1자 이상)·지급일 필수, 영수증 확인 기본 false, 메모 선택pending v1 생성. 영수증 파일 업로드 항목이나 지급금액 필드는 없음
update현재 ID와 바꿀 과정·일자·영수증 확인·메모·상태내용 변경은 이전 버전에 supersededAt을 남기고 새 ID를 반환. 상태만 변경하면 같은 행 갱신
approve원천 ID 배열 1개 이상승인 상태·승인자·시각 기록. 수당 금액 레코드를 여기서 생성하지 않음
delete현재 원천 IDdeletedAt·supersededAt 갱신. 별도 취소 엔드포인트는 없고 취소 상태는 update 경로에 해당

이는 유지보수용 API 계약 설명이며 API 직접 호출을 새 사용자 메뉴로 제안하는 절차가 아닙니다. 읽기/생성/수정/삭제는 education 자원 권한을 사용합니다. 알림 실패는 원천 저장을 롤백하지 않습니다. 수정 시 새 ID·버전을 재조회해야 하며 이미 대체된 ID로 다시 수정하면 찾기 오류가 날 수 있습니다. 현재 승인 API는 일부 대상 누락·조직/직원 범위 검사와 업데이트 조건을 추가 대조해야 하므로 ID 배열 전체가 안전하게 승인되었다는 운영 보장을 이 문서에서 하지 않습니다.

급여 시트의 education_subsidy 계산 모듈은 교육 원본 작성 화면이 아닙니다. 현행 시트 계산은 해당 지급연월의 승인 건수를 공급하고 그 결과를 조직 계산식에 사용합니다. 원천에 금액을 저장하거나 스케줄러 교육 이수를 자동으로 보조금 신청으로 바꾸지 않습니다. 별도 서버 계산기 경로는 월 필터 없이 승인 건수를 읽는 차이가 있으므로 양 계산 경로의 결과 일치를 실행 검증해야 합니다. 근무표 교육 정책과 보조금 신청/급여 반영은 별도 원천입니다.

전용 연말·퇴직 정산 API: 현재 화면 미연결 ​

앱 전체와 공용 직원 컴포넌트의 SDK 쓰기 호출을 대조한 결과, 이 범위에서 현재 노출된 호출은 **직원 퇴직 처리의 resignation.create**입니다. yearEndSettlement.create/update/delete/approve/applyToPayroll, resignation.simulateSettlement/calculateSettlement/cancelSettlement를 호출하는 현행 화면은 확인되지 않았습니다. 아래는 남아 있는 서버 저장 기능과 유지보수 경계입니다.

API입력·처리저장·재시도 경계
연말 원천 생성/수정직원, 정산연도 2020~2100, 선택 적용월 1~12·메모·상태생성은 v1, 내용 변경은 새 버전. 현재 입력 스키마에는 총급여/결정/기납부/환급액 작성 필드가 없으며 시트의 네 금액을 이 CRUD로 채울 수 없음
연말 승인현재 ID승인자·시각·상태 저장. 현행 코드는 enum 대신 대문자 APPROVED 문자열을 쓰므로 정상 승인 실행을 보장하지 않음
연말 applyToPayroll정산 ID, 반영 연월, 금액·사유·선택 메모 배열양수는 추가징수, 음수는 환급 공제를 pending으로 생성하고 원천을 계산됨으로 변경. 원천 ID를 출처로 남김
퇴직 simulateSettlement퇴사 ID, 미사용 연차 0 이상(기본 0), 기준일 1~31(기본 25), 선택 추가 항목근로계약이 있어야 미리보기 계산. 원장 생성 없음. 반환값은 공제 양수·환급 음수로 전용 반영 API의 유형별 양수 입력과 다름
퇴직 calculateSettlement퇴사 ID, 반영 연월, 수당/공제 유형·0 이상 금액·사유·선택 메모 배열0원은 건너뛰고 pending 수당/공제 생성, 퇴사 상태는 처리중으로 변경. 계산 미리보기를 내부에서 다시 실행하지 않고 받은 항목을 저장
퇴직 cancelSettlement퇴사 ID처리중만 허용. 관련 공제에 확정 급여가 있으면 거절. 아래 범위 문제 때문에 해당 정산의 안전한 되돌림으로 설명할 수 없음

두 반영 API는 트랜잭션 성공 후 생성 ID를 반환하지만 반복 호출을 기존 건 갱신으로 합치는 키나 중복 차단이 없습니다. 응답 유실 뒤 무조건 재호출하면 공제가 중복될 수 있으므로 기존 sourceType/sourceId·직원·반영월의 결과를 먼저 확인해야 합니다. 전용 반영 완료가 급여 확정·직원 공개·외부 신고·지급까지 완료한 것은 아닙니다.

퇴직 취소의 확인된 코드 제한: 현재 취소는 선택 퇴사 sourceId나 반영기간으로 좁히지 않고 해당 직원의 isAutoGenerated=false 공제를 하드 삭제하며, 같은 정산에서 생성한 수당은 삭제하지 않습니다. 따라서 다른 수동 공제까지 영향을 받을 수 있고 완전한 역분개도 아닙니다. 현행 UI가 이 API를 호출하지 않는 사실과 별개로, 연결을 복구하거나 운영 도구에서 사용하기 전에 범위와 보존 동작을 수정·검증해야 합니다. 이 문서 작업에서는 해당 API를 실행하거나 제품 코드를 바꾸지 않았습니다.

관계·소스와 과거 문서 ​

고정 소스책임
직원 목록, 관리자 동작목록/선택·일괄·템플릿·다운로드·호봉 CRUD
직원 추가, 직원 수정, 수정 UI입력·검증·일반 저장/전용 인사 전환·부분 성공
EmployeeService, 직원 API, 입력 스키마조직/권한·CRUD·계약 버전·대량 트랜잭션·본인 확인
호봉 API, 호봉 스키마직종/호봉·금액/연도·상태
계약 셀 편집, 행 조작, 원천 구성계약 버전/비활성화·자동 행 기간·원천 읽기
템플릿, 교육 원천, 연말 원천조회·정산 시트와 저장 데이터의 의미
현재 HR 라우터, 실제 대시보드 포함 화면, 등록만 남은 교육 adapter전용 UI 제거·현행 워크북 진입과 잔존 코드 구분
셀 편집 진입, 원천별 저장 분기, 연말 원천 해석직접 입력 저장·연말 ref 셀의 미지원 writer 제한
교육 API, 입력 스키마, 시트 계산, 서버 계산기교육 관측 원천·버전·승인과 계산 경로별 기간 차이
연말 API, 연말 스키마, 퇴직 API, 서버 등록UI 미연결 원천 CRUD·정산 반영·반복 호출·취소 범위

HBHR210 계약급여내역의 모든 식별열 읽기 전용, 급여 전체 확정 시에만 정본화한다는 설명은 현재 행의 직원 재연결 및 계약 즉시 버전 저장·원천 반영과 다릅니다. 급여 계보와 스키마 설계는 관측·계산·금액 레코드를 구별하는 배경이지만 연말 원천의 실제 금액 필드 등 후속 구현과 함께 읽습니다. 계약 시트 성능은 과거 측정이고, 법정공제는 직원 판정 원천이 공제에 영향을 주는 근거입니다.

남은 증거: 현재 버전의 직원 추가/수정/소속/계약/휴직/퇴직/대량 업로드/호봉 화면 번호 캡처가 없습니다. 중복·빈 값·0원 저장 후 재열기, 단건 등록의 소속/자격 부분 실패, 상태 전환 중 다른 필드 보존, 여러 계약 행 삭제 확인 취소, 대량 수정의 빈 생년월일 삭제, 명단 필터 범위, 호봉 수정/신규 비활성 선택의 실제 저장, 직원 삭제 후 과거 급여 관계를 실행 확인해야 합니다. 추가 코드 추적으로 교육 전용 CRUD·연말/퇴직 전용 정산 API의 현재 UI 미연결 상태를 확인했고, 현행 퇴사 정산 세트 입력과 연말 조회 절차를 위에 보완했습니다. 남은 실행 검증은 정산 세트 입력/재조회·두 기준일·추가 수당 미참조·기간별 상수·급여 반영, 연말 ref 저장 거절/잘못된 수당 분기, 교육 계산기별 기간 차이입니다. 전용 API의 반복 호출·연말 승인 상태·퇴직 취소 범위는 안전한 테스트 데이터로 별도 검증해야 하며 운영 데이터에서 실행하지 않았습니다. 외부 신고·제출·지급 성공과 최신 번호 캡처/영상은 여전히 미확보입니다.

직무 목록과 기본 근무 배정 ​

관리자 직무 설정은 설정의 독립 탭이며 직원 등록·수정·대량 추가에 쓰이는 직무 이름의 원본입니다. 목록에서 이름·설명·직군·기본 근무 그룹/형태·활성 상태를 저장하고, 매핑표에서 직무별 근무 그룹과 형태를 고르면 즉시 저장합니다. 허용 근무형태 선택은 현재 입력 창에 없으며 기존 데이터와 API만 유지됩니다. 직무를 고르면 기본 근무를 먼저 사용하고, 없으면 팀 대표 근무를 사용하며 명시적으로 입력한 근무는 그 값을 사용합니다. 기본값 변경은 기존 직원의 근무 배정을 일괄 수정하지 않습니다.

직무 이름 변경은 직원의 이름 사본도 갱신합니다. 비활성 직무는 신규 선택에서 빠지고 기존 배정은 유지됩니다. 활성 상태이거나 배정 직원이 있으면 삭제할 수 없습니다. 인원 수를 누르면 직원 관리의 해당 직무 필터로 이동합니다. 전체 입력·취소·결과 확인 절차는 위 가이드에 있습니다.

job-duty.router.ts, employee.router.ts, job-duty-form.html, settings-job-duties.html 및 PR #791·#793·#802를 대조했습니다. 관계는 jobDutyId에 연결하며 동명이거나 비활성인 직무의 엑셀 적용 오류를 성공으로 기록하지 않습니다. 실제 등록·대량 추가·이름 변경의 연속 촬영은 대기 중입니다.

근로형태와 포괄임금 파생값 ​

근로형태는 포괄임금 산정의 월 시간 기준입니다. 설정의 근로형태 탭(근태 설정 창의 「근로형태」도 같은 화면)에서 이름·설명·속한 직무·기본 근무와 월 소정근로시간·월 고정연장시간·월 고정야간시간·월 고정휴일시간을 저장합니다. 임금산정시간은 저장하지 않고 조직 배율로 계산해 보여 줍니다(기본 연장 1.5 · 야간 0.5 · 휴일 1.5, 조직 설정 workPattern 으로 변경). 일 고정시간과 월 근무일수를 넣고 「월 시간으로」를 누르면 월 값이 채워지며, 월 값을 직접 넣어도 됩니다. 병원의 「직무별 근로형태」 표(9직무군 33근로형태)가 그대로 이 목록이 되고, 3교대처럼 근무형태가 여럿인 경우에도 근로형태는 하나입니다.

직원에게 근로형태를 지정하면(직원 등록·직원 정보 수정·대량 추가/수정의 「근로형태」 열·직원 마스터 시트의 「근로형태」 열) 현재 근로계약의 월 근로시간·연장시간·야간시간·포괄시간·근무일 형태·근무시간·휴게시간이 근로형태 값으로 채워지고, 월급여가 있으면 통상시급이 (월급여 + 호봉수당 + 근속수당) ÷ 임금산정시간 을 10원 단위로 올린 값으로 채워집니다. 쓰기는 근로계약의 새 버전이라 이력이 남습니다. 직원 등록에서 직무를 고르면 그 직무의 기본 근로형태가 먼저 선택되고, 근로형태에 기본 근무가 있으면 근무 배정도 그것을 따릅니다(근로형태 기본 근무 → 직무 기본 근무 → 팀 대표 근무 → 직접 선택).

시트나 계약 수정에서 파생 필드를 직접 고치면 그 필드는 수동으로 남아 재계산이 건너뜁니다. 직접 고친 값이 기준값과 같아지면 자동으로 돌아오고, 직원 정보 수정의 「저장할 때 근로형태 기준값으로 되돌리기」로 한 번에 자동으로 되돌릴 수 있습니다. 근로형태의 시간을 고치면 저장 직후 그 근로형태 직원의 파생값 재계산 미리보기가 열리고, 목록의 재계산 버튼으로도 엽니다. 미리보기는 달라지는 직원과 필드만 보여 주며 「적용」을 눌러야 씁니다. 월급여를 기본급·포괄연장·포괄야간으로 나누는 산식은 병원 급여 지급에 쓰이지 않아 이번 범위에 없고, 기본급·포괄연장·포괄야간은 수동 입력 그대로입니다.

work-pattern.router.ts, work-pattern.service.ts, employee-master.ts, settings-work-patterns.html, work-pattern-form.html 을 대조했습니다. 기존 자료를 자동으로 일괄 변환하지 않습니다. 기존 근무 그룹은 「근무 그룹에서 가져오기」의 미리보기 후 근로형태 생성·직원 연결을 할 수 있으며, 계약 값 적용은 별도 재계산으로 확인합니다.

최종 근무일과 재입사 ​

실제 퇴사 날짜와 근로계약 종료 날짜를 구분합니다. 급여대장 가이드와 급여 시트에 현재 조회 기준과 수정 경로를 정리했습니다. 최초 입사일을 유지하는 재입사도 있어 유효 재직 시작은 입사일과 최신 유효 근로계약 시작일을 함께 봅니다. 직원 관리나 직원 마스터에서 퇴직자를 재직으로 전환하면 해당 퇴사 기록을 종료하며, 최종 근무일 셀을 비우는 것으로 퇴사를 취소하지 않습니다.

PR #758·#771·#789의 employee.router.ts, sheet-rows/employee-master.ts, sheet-rows/materializer.ts, utils/resignation-tenure.ts를 대조했습니다. 실제 여러 월 급여대장과 재입사 화면 재촬영·운영 결과 대조는 대기 중입니다.

직원 마스터 시트의 등록과 일괄 반영 ​

급여 가이드의 직원 행 추가에서 직원 마스터에 붙여넣기, 미등록 행 확인, 적용·취소·부분 실패 재시도를 설명합니다. 열별 규칙과 양식은 시트 양식 다운로드를 사용합니다.

sheetView.commitMasterOverrides는 직원별 입력을 검증하고 sheet-rows/employee-master.ts에서 직원·소속·계약·자격증에 반영합니다. 미등록 직원은 사번·성명·최초입사일이 필요하고 초대 메일은 자동 발송하지 않습니다. 팀 변경은 주 소속과 이전 소속 종료에 영향을 주며, 근무 그룹·유형의 빈 값은 배정을 해제하지 않습니다. 입력 실패는 셀에 남고 결과 안내 후 재시도합니다. 사번 중복, 날짜 형식, 계약 유형, 동명 근무 유형과 직원 정보 재조회는 재촬영 시 함께 검증합니다. 근거는 PR #651·#657·#658·#659·#672·#675입니다.

계약 급여 수정 후 수당 확인 ​

기본급만 바꾸면 기존 식대·교통비·직책수당을 유지합니다. 해당 수당을 명시적으로 0원으로 바꿔 저장하면 그 수당은 제거됩니다. 저장 후 편집 화면을 다시 열어 금액을 확인합니다. PR #652의 상세 응답·계약 저장 보정이며, 과거 누락 금액을 자동 복구하는 기능은 아닙니다. 이번 주간 작업에서 고객 데이터의 복구나 재저장 검증을 실행하지 않았습니다.

근무 그룹 가져오기와 재계산 경계 ​

사용 순서는 관리자 가이드의 근무 기준 관리를 따릅니다. 근무 그룹 가져오기는 활성 그룹별 근로형태 생성과 아직 근로형태가 없는 직원의 연결을 처리하며, 월 소정 209시간으로 시작합니다. work-pattern.service.ts의 import 경로는 계약 파생값을 즉시 갱신하지 않습니다. 근로형태 편집·재계산 미리보기·적용이 후속 작업입니다. 기존 연결은 보존하며 다시 미리보기해 중복 생성 여부를 확인합니다.

근무일·근무시간·휴게 문구와 소정시간 자동값은 연결된 근무 유형에서 유도합니다. 직접 입력한 소정시간은 자동값 복원 조작 전까지 유지됩니다. 직원 계약의 수동 필드는 재계산에서 건너뛰며, 저장한 근로형태와 실제 직원 계약 적용을 구분해야 합니다. apps/admin/src/views/modals/work-pattern-{form,import,recompute}.html, settings-work-patterns.html과 PR #823·#856·#857·#869를 대조했습니다.

직무 설정의 「기본 근무 재적용」은 근무 미지정·유형 미지정·비활성·직무 기본 변경 대상을 미리 보여 줍니다. 직접 선택한 근무는 보존하며, 적용 후 직원 목록에서 다시 확인합니다. 목록·매핑표·기본 근로형태·직원 수 링크와 실제 저장 경계는 PR #801·#851 및 settings-job-duties.html, job-duty-reapply.html에 있습니다. 기존 직무 영상은 독립 탭과 변경된 표가 반영된 촬영으로 교체 검토가 필요합니다.

예약 계약과 퇴직 취소 ​

직원 등록의 「수습 종료 후」에는 종료일과 이후 급여 조건을 입력할 수 있습니다. 저장 전 현재 계약과 수습 종료 다음 날부터의 조건을 함께 확인하고, 저장 후 직원과 예약 내역을 각각 봅니다. 기존 직원은 계약급여내역·직원 마스터·급여대장 행의 「계약 시행일 변경…」에서 시행일별 계약을 등록합니다.

잘못 처리한 퇴직은 직원의 퇴직 취소에서 대상을 확인하고 확인창을 완료합니다. 직원 상태와 퇴직 관련 기록을 다시 읽어 확인합니다. 새 계약을 만드는 재입사와 구분하며, 이미 지급·확정한 급여나 외부 정산이 모두 되돌아간다고 보지 않습니다. PR #959의 취소 경로와 #960·#962·#965를 대조했습니다.

신규 직원 등록 전에는 자동으로 들어갈 수동 직원 시트를 미리 볼 수 있고, 등록 후 추가 결과를 확인합니다. 조직의 자동 추가 설정과 시트 대상 조건을 함께 따릅니다. 팀 범위 조회·명단 내보내기는 실제 소속 역할 범위 안에서 동작합니다. PR #880·#903·#908·#936을 대조했습니다.