docs: [hr] 연봉이력 삭제 기능 문서화
- rules/employee-api.md: 연봉 API 엔드포인트 및 데이터 구조 추가 - system/database/hr.md: salary_info JSON 구조 추가 - dev/changes/20260311_salary_history_delete.md: 변경 이력 생성 - INDEX.md: 변경 이력 등록
This commit is contained in:
1
INDEX.md
1
INDEX.md
@@ -182,6 +182,7 @@ DB 도메인별:
|
||||
|------|------|
|
||||
| [20260311_daily_fund_sync_and_account_codes_fix.md](dev/changes/20260311_daily_fund_sync_and_account_codes_fix.md) | 자금일보 바로빌 자동동기화 + 계정과목 데이터 정리 |
|
||||
| [20260311_esign_journal_barobill_fixes.md](dev/changes/20260311_esign_journal_barobill_fixes.md) | 전자서명 체크박스, 전표 적요 동기화, 거래처 드롭다운, 바로빌 중복 키 수정 |
|
||||
| [20260311_salary_history_delete.md](dev/changes/20260311_salary_history_delete.md) | 연봉이력 삭제 기능 추가 (사원관리 연봉정보) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
60
dev/changes/20260311_salary_history_delete.md
Normal file
60
dev/changes/20260311_salary_history_delete.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 연봉이력 삭제 기능 추가
|
||||
|
||||
**날짜:** 2026-03-11
|
||||
**작업자:** Claude Code
|
||||
|
||||
## 변경 개요
|
||||
|
||||
사원관리 연봉 정보에서 잘못 입력된 연봉 이력을 삭제할 수 있는 기능을 추가했다.
|
||||
기존에는 연봉 이력이 자동 누적만 되고 삭제가 불가능하여, 잘못 입력한 경우 수정할 수 없었다.
|
||||
|
||||
## 수정된 파일
|
||||
|
||||
| 파일 | 변경 내용 |
|
||||
|------|----------|
|
||||
| `mng/resources/views/hr/employees/partials/salary-info.blade.php` | 이력 테이블에 삭제 버튼 추가, `deleteHistory()` Alpine.js 메서드 추가 |
|
||||
|
||||
## 상세 변경 사항
|
||||
|
||||
### 1. 이력 테이블 삭제 컬럼 추가
|
||||
|
||||
- 연봉 변경 이력 테이블에 "삭제" 컬럼 추가
|
||||
- 각 이력 행에 휴지통 아이콘 버튼 배치
|
||||
- 클릭 시 `confirm()` 확인 다이얼로그 표시 후 API 호출
|
||||
|
||||
### 2. Alpine.js `deleteHistory()` 메서드 추가
|
||||
|
||||
```javascript
|
||||
async deleteHistory(originalIndex) {
|
||||
// DELETE /api/admin/hr/employees/{id}/salary/history/{historyIndex}
|
||||
}
|
||||
```
|
||||
|
||||
- 프론트엔드에서 역순(reverse) 표시 인덱스를 원본 배열 인덱스로 변환하여 API 전달
|
||||
- 변환 공식: `salaryData.history.length - 1 - idx`
|
||||
- 삭제 성공 시 `salaryData` 즉시 갱신 (페이지 새로고침 불필요)
|
||||
|
||||
### 3. 기존 API 활용
|
||||
|
||||
- `EmployeeSalaryController@deleteHistory` 메서드는 이미 구현되어 있었음
|
||||
- `DELETE /api/admin/hr/employees/{id}/salary/history/{historyIndex}` 라우트도 이미 등록됨
|
||||
- 프론트엔드 UI만 누락되어 있었으므로 뷰 파일만 수정
|
||||
|
||||
## 접근 권한
|
||||
|
||||
연봉 정보 접근은 다음 사용자만 허용 (hardcoded):
|
||||
|
||||
- 이의찬, 전진선, 김보곤
|
||||
|
||||
## 테스트 체크리스트
|
||||
|
||||
- [x] 연봉 이력 삭제 버튼 표시 확인
|
||||
- [x] 삭제 확인 다이얼로그 동작
|
||||
- [x] API 호출 후 이력 목록 즉시 갱신
|
||||
- [x] 권한 없는 사용자 접근 차단 (기존 로직)
|
||||
- [x] 개발/운영 서버 배포 완료
|
||||
|
||||
## 관련 문서
|
||||
|
||||
- [Employee API 규칙](../../rules/employee-api.md) — 연봉 정보 관리 섹션 추가
|
||||
- [HR 데이터베이스](../../system/database/hr.md) — salary_info JSON 구조 추가
|
||||
@@ -173,9 +173,63 @@ $profile->address; // json_extra['address']
|
||||
$profile->emergency_contact; // json_extra['emergency_contact']
|
||||
```
|
||||
|
||||
## 연봉 정보 관리 (MNG 내부 API)
|
||||
|
||||
> **접근 제한**: 특정 사용자만 접근 가능 (hardcoded: 이의찬, 전진선, 김보곤)
|
||||
|
||||
### 엔드포인트
|
||||
|
||||
| Method | Path | 설명 |
|
||||
|--------|------|------|
|
||||
| GET | `/api/admin/hr/employees/{id}/salary` | 연봉 정보 조회 |
|
||||
| PUT | `/api/admin/hr/employees/{id}/salary` | 연봉 정보 저장/수정 |
|
||||
| DELETE | `/api/admin/hr/employees/{id}/salary/history/{historyIndex}` | 연봉 이력 삭제 |
|
||||
|
||||
### 데이터 저장 구조
|
||||
|
||||
연봉 정보는 `tenant_user_profiles.json_extra.salary_info`에 JSON으로 저장한다.
|
||||
|
||||
```json
|
||||
{
|
||||
"salary_info": {
|
||||
"annual_salary": 50000000,
|
||||
"effective_date": "2026-01-01",
|
||||
"notes": "연봉 인상",
|
||||
"history": [
|
||||
{
|
||||
"annual_salary": 45000000,
|
||||
"effective_date": "2025-01-01",
|
||||
"notes": "입사 시 연봉",
|
||||
"recorded_at": "2025-01-15 09:00:00",
|
||||
"recorded_by": "김보곤"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 비즈니스 규칙
|
||||
|
||||
- R1: 연봉 정보 저장 시 이전 값이 `history` 배열에 자동 추가된다
|
||||
- R2: 이력 삭제는 배열 인덱스 기반이다 (프론트에서 reverse 표시 → 원본 인덱스 변환 필요)
|
||||
- R3: 일반 API 응답(`toArray()`)에서 `salary_info`는 자동 제거된다 (민감 데이터 보호)
|
||||
- R4: 연봉 정보는 MNG 사원관리 페이지의 조회/수정 화면에서만 표시된다
|
||||
|
||||
### 관련 파일
|
||||
|
||||
| 파일 | 역할 |
|
||||
|------|------|
|
||||
| `mng/app/Http/Controllers/Api/Admin/HR/EmployeeSalaryController.php` | API 컨트롤러 |
|
||||
| `mng/app/Models/HR/Employee.php` | `getSalaryInfo()`, `setSalaryInfo()` 메서드 |
|
||||
| `mng/resources/views/hr/employees/partials/salary-info.blade.php` | 연봉 정보 UI (Alpine.js) |
|
||||
| `mng/routes/api.php` | 라우트 정의 (라인 1185-1188) |
|
||||
|
||||
---
|
||||
|
||||
## 주의사항
|
||||
|
||||
1. **주민등록번호**: 반드시 암호화하여 저장
|
||||
2. **멀티테넌트**: tenant_id 자동 스코핑
|
||||
3. **Audit**: created_by/updated_by 자동 기록
|
||||
4. **삭제**: Hard Delete 금지, employee_status 변경으로 처리
|
||||
5. **연봉 정보**: 특수 권한 사용자만 접근 가능, 일반 API 응답에서 자동 제외
|
||||
|
||||
@@ -60,9 +60,35 @@ InterviewTemplate
|
||||
|
||||
---
|
||||
|
||||
## 연봉 정보 (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)
|
||||
- 급여 관련 최근 추가: long_term_care 컬럼 (2026-02-27)
|
||||
- 연봉 정보는 json_extra 내부에 저장 (별도 테이블 없음, 2026-03-11)
|
||||
Reference in New Issue
Block a user