- rules/employee-api.md: 연봉 API 엔드포인트 및 데이터 구조 추가 - system/database/hr.md: salary_info JSON 구조 추가 - dev/changes/20260311_salary_history_delete.md: 변경 이력 생성 - INDEX.md: 변경 이력 등록
94 lines
2.6 KiB
Markdown
94 lines
2.6 KiB
Markdown
# 인사 / HR 도메인
|
|
|
|
> **모델 수**: HR 관련 (Tenants 하위) + Interview 5
|
|
> **핵심**: 급여, 근태, 휴가, 대출, 면접
|
|
> **API 엔드포인트**: 141개 (hr.php)
|
|
|
|
---
|
|
|
|
## 주요 테이블
|
|
|
|
### 급여 / 근무
|
|
|
|
| 테이블 | 모델 | 역할 |
|
|
|--------|------|------|
|
|
| payrolls | Payroll | 급여 마스터 |
|
|
| salaries | Salary | 급여 항목 |
|
|
| attendances | Attendance | 근태 기록 |
|
|
| attendance_requests | AttendanceRequest | 근태 요청 |
|
|
| leaves | Leave | 휴가 사용 기록 |
|
|
| leave_policies | LeavePolicy | 휴가 정책 |
|
|
| labors | Labor | 노무비 |
|
|
|
|
### 대출
|
|
|
|
| 테이블 | 모델 | 역할 |
|
|
|--------|------|------|
|
|
| loans | Loan | 직원 대출 |
|
|
|
|
### 면접 (Interview)
|
|
|
|
| 테이블 | 모델 | 역할 |
|
|
|--------|------|------|
|
|
| interview_templates | InterviewTemplate | 면접 양식 |
|
|
| interview_sessions | InterviewSession | 면접 세션 |
|
|
| interview_questions | InterviewQuestion | 면접 질문 |
|
|
| interview_categories | InterviewCategory | 면접 카테고리 |
|
|
| interview_responses | InterviewResponse | 면접 답변 |
|
|
|
|
---
|
|
|
|
## 관계 구조
|
|
|
|
```
|
|
TenantUserProfile (직원)
|
|
├─ hasMany Payroll
|
|
├─ hasMany Attendance
|
|
├─ hasMany Leave
|
|
├─ hasMany Loan
|
|
└─ hasMany AttendanceRequest
|
|
|
|
LeavePolicy
|
|
└─ belongsTo Tenant (테넌트별 휴가 정책)
|
|
|
|
InterviewTemplate
|
|
├─ hasMany InterviewCategory
|
|
│ └─ hasMany InterviewQuestion
|
|
└─ hasMany InterviewSession
|
|
└─ hasMany InterviewResponse
|
|
```
|
|
|
|
---
|
|
|
|
## 연봉 정보 (salary_info)
|
|
|
|
> 연봉 정보는 별도 테이블이 아닌 `tenant_user_profiles.json_extra.salary_info`에 JSON으로 저장한다.
|
|
|
|
```
|
|
TenantUserProfile.json_extra
|
|
└─ salary_info
|
|
├─ annual_salary (현재 연봉)
|
|
├─ effective_date (적용일)
|
|
├─ notes (비고)
|
|
└─ history[] (변경 이력 배열)
|
|
├─ annual_salary
|
|
├─ effective_date
|
|
├─ notes
|
|
├─ recorded_at
|
|
└─ recorded_by
|
|
```
|
|
|
|
- MNG `Employee` 모델의 `getSalaryInfo()` / `setSalaryInfo()` 메서드로 접근
|
|
- 연봉 저장 시 이전 값이 `history`에 자동 추가
|
|
- 이력 개별 삭제 가능 (배열 인덱스 기반)
|
|
- 접근 권한: 특정 사용자만 허용 (EmployeeSalaryController)
|
|
|
|
---
|
|
|
|
## 특이사항
|
|
|
|
- HR 모델은 대부분 `Tenants/` 디렉토리 하위
|
|
- 직원 정보는 `TenantUserProfile` (테넌트별 프로필)
|
|
- 면접 모델은 별도 `Interview/` 도메인으로 분리
|
|
- 급여 관련 최근 추가: long_term_care 컬럼 (2026-02-27)
|
|
- 연봉 정보는 json_extra 내부에 저장 (별도 테이블 없음, 2026-03-11) |