Files
sam-docs/system/erp-analysis/04-hr-management.md
권혁성 d4e5f62413 docs: [종합정비] Phase 1 시스템 현황 문서 14개 작성
- system/overview.md: 전체 아키텍처 개요
- system/api-structure.md: API 구조 (220 모델, 1027 엔드포인트, 18 라우트 도메인)
- system/react-structure.md: React 구조 (249 페이지, 612 컴포넌트)
- system/mng-structure.md: MNG 구조 (171 컨트롤러, 436 Blade 뷰)
- system/docker-setup.md: Docker 7 컨테이너 구성
- system/database/README.md + 9개 도메인 스키마 (270+ 테이블)
  - core, hr, sales, production, finance, boards, files, system, erp-analysis

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:03:13 +09:00

12 KiB

인사관리 (슬라이드 28-46)

1. 개요

인사관리 모듈은 부서, 사원, 근태, 휴가를 관리합니다.

2. 부서관리 (슬라이드 30-31)

2.1 전체 선택 체크박스

  • 클릭: 전체 선택 설정/해제 토글
  • 디폴트: 설정 해제 상태

2.2 개별 선택 체크박스

  • 클릭: 개별 선택 설정/해제 토글
  • 디폴트: 설정 해제 상태

2.3 추가 버튼

  • 클릭: 선택된 부서의 하위 부서 일괄 생성
  • 관리 권한이 없을 경우 숨김

2.4 삭제 버튼

  • 클릭: "선택한 부서 N개를 삭제하시겠습니까?" 확인 Alert 표시
  • 확인 선택 시 삭제된 부서 사원의 인원은 회사(기본) 인원으로 변경

2.5 확대 버튼

  • 클릭: (6) 확대 버튼으로 변경, 하위 부서 숨김 처리

2.6 축소 버튼

  • 클릭: (5) 축소 버튼으로 변경, 하위 부서 표시 처리

2.7 추가 버튼

  • 클릭: 부서 추가 팝업 표시

2.8 수정 버튼

  • 클릭: 부서 수정 팝업 표시

2.9 부서 추가/수정 팝업

  • 부서명 인풋박스: 기존 부서명 표시, 수정 가능

3. 사원관리 (슬라이드 32-40)

3.1 기간 설정 영역

  • 입사일 기준

3.2 기간 설정 버튼 영역

  • 종류: 당해년도, 전전월, 전월, 당월, 어제, 오늘
  • 클릭: 해당 기간이 (1) 영역에 설정되며 화면 전체에 적용 처리

3.3 CSV 일괄 등록 버튼

  • 클릭: CSV 일괄 등록 화면으로 이동

3.4 사원 등록 버튼

  • 클릭: 사원 상세 화면으로 이동

3.5 사용자 초대 버튼

  • 클릭: 사용자 초대 팝업 표시

3.6 필터 셀렉트 박스

  • 종류: 전체, 사용자 아이디 보유, 사용자 아이디 미보유, 재직, 휴직, 퇴직
  • 디폴트: 전체

3.7 정렬 셀렉트 박스

  • 종류: 직급순, 부서 오름차순, 부서 내림차순, 이름 오름차순, 이름 내림차순
  • 디폴트: 직급순

3.8 현황 카드

항목 설명
현직 전체 현직 사원 수
휴직 전체 휴직 사원 수
퇴직 (1) 해당 기간의 퇴직 사원 수
평균근속년수 전체 현직 사원 기준

4. 사원 상세 (슬라이드 33-36)

4.1 사원 정보 영역 (필수)

필드명 필수 설명
이름 Y
주민등록번호 Y
휴대폰 Y
이메일 Y
연봉 N
급여계좌 은행 N 은행 선택
계좌 N
예금주 N

4.2 사용자 정보 영역

필드명 필수 설명
아이디 N 이메일 또는 아이디
비밀번호 N 최소 8자 이상 영문+숫자+특수문자 조합
권한 N 권한관리의 목록 표시
상태 N 종류: 정상, 재직, 중지. 재직 상태인 경우 로그아웃 처리, 로그인 시 '재정중인 아이디입니다.' 팝업

4.3 사원 상세 영역 (선택)

필드명 필수 설명
프로필 사진 N 1250x250px, 10MB 이하 PNG, JPEG, GIF
사원코드 N
성별 N 남성/여성
주소 N 우편번호 찾기 + 상세주소

4.4 인사 정보 영역

필드명 필수 설명
입사일 N
고용 형태 N 종류: 정규직, 계약직, 파견직, 용역직, 시간제 근로자
직급 N 직급관리 화면에서 설정
상태 N 종류: 재직, 병가휴직, 육아휴직, 개인사정휴직, 무급휴직, 퇴사, 해고, 권고사직, 계약만료, 정년퇴직
부서 N 부서관리 화면에서 설정
직책 N 직책관리 화면에서 설정
출근 위치 N 본사, 현장 목록
퇴근 위치 N 본사, 현장 목록
퇴사일 N
퇴사 사유 N

4.5 항목 설정 버튼

  • 클릭: 항목 설정 팝업 표시

4.6 항목 설정 팝업 (슬라이드 34)

  • 전체 설정 ON/OFF 버튼
  • 개별 설정 ON/OFF 버튼
  • 디폴트: 설정 OFF 상태

5. CSV 일괄 등록 (슬라이드 39-40)

5.1 양식 다운로드 버튼

  • 클릭: 등록된 양식 CSV 다운로드

5.2 파일 선택 버튼

  • 클릭: 파일 탐색기 팝업, CSV 1개만 등록

5.3 파일 변환 버튼

  • 클릭: CSV 데이터를 (3-1) 정보 등록 영역에 변환값 표시
  • 범위: 사원 상세 화면의 전체 항목

5.4 등록 버튼

  • 파일변환 완료 & (2) 체크 설정 항목 있을 경우에만 버튼 활성화
  • 클릭: "(등록)의 정보를 정말 등록하시겠습니까?" 확인 Alert 표시
  • 확인 클릭 시 (2) 체크 된 정보만 등록, "정보 등록이 완료되었습니다." 알림 Alert 표시

6. 사용자 초대 (슬라이드 37-38)

6.1 사용자 초대 프로세스

  • 초대 이메일로 발송 → 약관 동의 (아이디를 이메일로 사용) → 비밀번호 설정 → 로그인

6.2 초대할 이메일 주소 인풋박스

  • ','로 구분하여 여러 주소 입력 가능

6.3 권한 셀렉트 박스, 검색

  • 종류: 권한관리의 목록 표시

6.4 초대 메시지 인풋박스

6.5 초대 버튼

  • 클릭: 사용자 초대 이메일 발송
  • 이메일 주소 기준 사원 정보가 있을 경우에는 대량하여 사용자 등록 처리
  • 없을 경우에는 사용자에만 등록하고 나머지 사원 정보는 직접 입력 필요
  • 사용자 아이디 중복 불가

7. 근태관리 (슬라이드 41-42)

7.1 근태관리 현황 카드

항목 설명
정시 출근 전체 정시 출근 수
지각 전체 지각 수
결근 전체 결근 수
휴가 전체 휴가 수

7.2 기간 설정 버튼 영역

  • 종류: 당해년도, 전전월, 전월, 당월, 어제, 오늘
  • 클릭: 해당 기간이 설정되며 화면 전체에 적용 처리
  • 근태관리 자동 설정 시: 모든 사원이 정시 출퇴근한 것으로 기록, 예외사항만 경우 작성

7.3 근태 등록 버튼

  • 클릭: 근태 정보 팝업 표시

7.4 사유 등록 버튼

  • 클릭: 사유 정보 팝업 표시

7.5 필터 셀렉트 박스

  • 종류: 전체, 정시 출근, 지각, 결근, 휴가, 출장, 외근, 연장근무
  • 디폴트: 전체

7.6 정렬 셀렉트 박스

  • 종류: 직급순, 부서 오름차순, 부서 내림차순, 이름 오름차순, 이름 내림차순
  • 디폴트: 직급순

7.7 근태 정보 팝업

필드명 설명
대상 사원 셀렉트 박스, 검색&다중 선택
기준일 달력 팝업 표시, 일자 다중 선택 가능, 디폴트: 당일
출근 시간 시/분 선택
퇴근 시간 시/분 선택
야간 연장 시간 주당 연장 근로 시간에서 주말 연장 시간을 차감한 이내에만 설정 가능
주말 연장 시간 주당 연장 근로 시간에서 야간 연장 시간을 차감한 이내에만 설정 가능

7.8 사유 정보 팝업

필드명 설명
대상 사원 셀렉트 박스
기준일 달력 팝업
내용 내용 입력

8. 휴가관리 (슬라이드 43-46)

8.1 휴가관리 탭

  • 휴가 사용 현황
  • 휴가 부여 현황
  • 휴가 신청 현황

8.2 휴가관리 현황 카드

항목 설명
휴가 승인 대기
연차 전체 연차 사원 수
결조사
연간 연차 사용률

8.3 필터 셀렉트 박스

  • 종류: 전체, 모든 사원 목록
  • 항목: 부서명, 직급명, 사원명 표시
  • 디폴트: 전체

8.4 정렬 셀렉트 박스

  • 종류: 직급순, 부서 오름차순, 부서 내림차순, 이름 오름차순, 이름 내림차순
  • 디폴트: 직급순

8.5 휴가 부여 팝업

필드명 설명
유형 종류: 연차, 보상, 경조, 보건, 병가, 반차, 반수 선택
사유
일수 개월/일/시간 선택

8.6 휴가 신청 팝업

필드명 설명
잔여 잔여 일수 표시
유형 종류: 연차, 보상, 경조, 보건, 병가, 반차
기간 날짜 선택, (5) 반차 선택 시에는 시간으로 변경

8.7 휴가 신청 현황 필터

  • 종류: 승인, 거절
  • 1/3 완료: 결재선 승인 진행도에 따라 표시

데이터 모델

Department (부서)

- id: bigint
- tenant_id: bigint (FK)
- parent_id: bigint (FK, nullable)
- name: string
- order: int
- is_active: boolean
- created_at: timestamp

Employee (사원)

- id: bigint
- tenant_id: bigint (FK)
- user_id: bigint (FK, nullable)
- department_id: bigint (FK, nullable)
- employee_code: string
- name: string
- resident_number: string (encrypted)
- phone: string
- email: string
- salary: decimal
- bank_code: string
- account_number: string
- account_holder: string
- profile_image: string
- gender: enum('male', 'female')
- address: string
- hire_date: date
- employment_type: enum('regular', 'contract', 'dispatch', 'service', 'part_time')
- position_id: bigint (FK)
- job_title_id: bigint (FK)
- status: enum('active', 'leave', 'sick_leave', 'parental_leave', 'personal_leave', 'unpaid_leave', 'resigned', 'dismissed', 'recommended_resignation', 'contract_expired', 'retired')
- check_in_location_id: bigint (FK, nullable)
- check_out_location_id: bigint (FK, nullable)
- resignation_date: date
- resignation_reason: text
- created_at: timestamp

AttendanceRecord (근태 기록)

- id: bigint
- tenant_id: bigint (FK)
- employee_id: bigint (FK)
- date: date
- check_in_time: time
- check_out_time: time
- status: enum('on_time', 'late', 'absent', 'leave', 'business_trip', 'outside_work', 'overtime')
- night_overtime_hours: decimal
- weekend_overtime_hours: decimal
- reason: text
- created_at: timestamp

Leave (휴가)

- id: bigint
- tenant_id: bigint (FK)
- employee_id: bigint (FK)
- type: enum('annual', 'reward', 'congratulation', 'health', 'sick', 'half_day', 'half_day_am', 'half_day_pm')
- start_date: date
- end_date: date
- days: decimal
- reason: text
- status: enum('pending', 'approved', 'rejected')
- created_at: timestamp

LeaveBalance (휴가 잔여)

- id: bigint
- tenant_id: bigint (FK)
- employee_id: bigint (FK)
- year: int
- type: enum('annual', 'reward', ...)
- granted: decimal
- used: decimal
- remaining: decimal

API 도출

부서관리 API

GET    /api/departments                  # 부서 목록 (트리 구조)
POST   /api/departments                  # 부서 추가
PUT    /api/departments/{id}             # 부서 수정
DELETE /api/departments/{id}             # 부서 삭제
DELETE /api/departments/bulk             # 부서 일괄 삭제

사원관리 API

GET    /api/employees                    # 사원 목록
POST   /api/employees                    # 사원 등록
GET    /api/employees/{id}               # 사원 상세
PUT    /api/employees/{id}               # 사원 수정
DELETE /api/employees/{id}               # 사원 삭제
POST   /api/employees/import             # CSV 일괄 등록
GET    /api/employees/template           # CSV 템플릿 다운로드
POST   /api/employees/invite             # 사용자 초대

근태관리 API

GET    /api/attendance                   # 근태 목록
POST   /api/attendance                   # 근태 등록
PUT    /api/attendance/{id}              # 근태 수정
GET    /api/attendance/summary           # 근태 현황 요약
POST   /api/attendance/reason            # 사유 등록

휴가관리 API

GET    /api/leaves                       # 휴가 목록
POST   /api/leaves                       # 휴가 신청
PUT    /api/leaves/{id}                  # 휴가 수정
DELETE /api/leaves/{id}                  # 휴가 취소
POST   /api/leaves/{id}/approve          # 휴가 승인
POST   /api/leaves/{id}/reject           # 휴가 거절
GET    /api/leaves/balance/{employee_id} # 휴가 잔여 조회
POST   /api/leaves/grant                 # 휴가 부여
GET    /api/leaves/summary               # 휴가 현황 요약