- 00-overview.md: 전체 개요 - 01-common.md: 공통 요소 - 02-auth.md: 인증/인가 - 03-gps-attendance.md: GPS 출퇴근 - 04-hr-management.md: 인사관리 - 05-approval.md: 전자결재 - 06-accounting.md: 회계/급여 - 07-master-data.md: 기준정보 - 08-reports.md: 리포트 - 99-gap-analysis.md: Gap 분석
381 lines
12 KiB
Markdown
381 lines
12 KiB
Markdown
# 인사관리 (슬라이드 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 # 휴가 현황 요약
|
|
``` |