# 인사관리 (슬라이드 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 # 휴가 현황 요약 ```