diff --git a/dev/changes/20260311_salary_history_delete.md b/dev/changes/20260311_salary_history_delete.md index 8a1bc52..1c6cad2 100644 --- a/dev/changes/20260311_salary_history_delete.md +++ b/dev/changes/20260311_salary_history_delete.md @@ -54,7 +54,33 @@ async deleteHistory(originalIndex) { - [x] 권한 없는 사용자 접근 차단 (기존 로직) - [x] 개발/운영 서버 배포 완료 +--- + +## 추가: 전자계약 근로계약서 최신 연봉정보 반영 + +### 변경 개요 + +근로계약서 사원불러오기에서 연봉 이력이 많을 때 최신 연봉정보를 정확히 반환하도록 개선했다. +매년 연봉 갱신 시 연봉계약 기간이 자동으로 최신 적용일 기준으로 계산된다. + +### 수정된 파일 + +| 파일 | 변경 내용 | +|------|----------| +| `mng/app/Http/Controllers/ESign/EsignApiController.php` | `salary_effective_date` 추가 반환, 이력 fallback 로직 | +| `mng/resources/views/esign/create.blade.php` | 연봉계약/근로계약 날짜 분리 계산 | + +### 상세 + +1. **백엔드**: `annual_salary`가 null이면 history에서 `effective_date` 기준 최신 탐색 +2. **프론트엔드**: 연봉계약 시작/종료일 = 연봉 적용일 기준, 근로계약 = 입사일 기준 +3. 일반 `계약.*` 패턴은 연봉 적용일 우선, 없으면 입사일 fallback + +--- + ## 관련 문서 - [Employee API 규칙](../../rules/employee-api.md) — 연봉 정보 관리 섹션 추가 - [HR 데이터베이스](../../system/database/hr.md) — salary_info JSON 구조 추가 +- [E-Sign 기능 문서](../../features/esign/README.md) — 근로계약서 사원 연동 섹션 추가 +- [E-Sign Changelog](../../projects/e-sign/changelog.md) — v1.1.1 추가 diff --git a/features/esign/README.md b/features/esign/README.md index 40d54dd..ab2f8c7 100644 --- a/features/esign/README.md +++ b/features/esign/README.md @@ -91,11 +91,63 @@ draft → pending → partially_signed → completed --- +## 5. 근로계약서 사원 연동 + +### 사원불러오기 API + +근로계약서 작성 시 사원 정보를 검색하여 계약 변수를 자동 채운다. + +| HTTP | URI | 설명 | +|------|-----|------| +| GET | `/esign/contracts/search-employees?q=검색어` | 사원 검색 (MNG 내부 API) | + +**반환 데이터:** + +| 필드 | 설명 | 매핑 대상 | +|------|------|----------| +| `name` | 사원명 | 근로자 이름/성명 | +| `phone`, `email` | 연락처 | 서명자 정보 자동 채움 | +| `department`, `position` | 부서/직위 | 부서, 직책 필드 | +| `address` | 주소 | 직원 주소 | +| `hire_date` | 입사일 | 근로계약 시작일 | +| `birth_year/month/day` | 생년월일 (주민번호 파싱) | 출생 년/월/일 | +| `annual_salary` | 최신 연봉 | 연봉 금액, 월급 자동 계산 | +| `salary_effective_date` | 연봉 적용일 | 연봉계약 시작/종료일 기준 | + +### 최신 연봉 탐색 로직 (2026-03-11) + +연봉 이력이 많을 때 최신 연봉을 정확히 반환하기 위한 fallback 로직: + +1. `salary_info.annual_salary` 확인 (현재 연봉) +2. null이면 `salary_info.history`에서 `effective_date` 기준 최신 이력 탐색 +3. `salary_effective_date`도 함께 반환 + +### 계약 기간 자동 계산 + +| 계약 유형 | 시작일 기준 | 종료일 | +|----------|-----------|--------| +| 연봉계약 | `salary_effective_date` (최신 연봉 적용일) | 시작일 + 1년 | +| 근로계약 | `hire_date` (입사일) | 입사일 + 1년 | +| 일반 계약 | 연봉 적용일 우선, 없으면 입사일 | 시작일 + 1년 | + +> 매년 연봉을 갱신하면 연봉계약 기간이 자동으로 최신 적용일 기준으로 계산된다. + +### 관련 파일 + +| 파일 | 역할 | +|------|------| +| `mng/app/Http/Controllers/ESign/EsignApiController.php` | `searchEmployees()` — 사원 검색 + 최신 연봉 반환 | +| `mng/resources/views/esign/create.blade.php` | `handleEmployeeSelect()` — 변수 자동 매핑 | +| `mng/app/Models/HR/Employee.php` | `getSalaryInfo()` — 연봉 데이터 조회 | + +--- + ## 관련 문서 - [DB 스키마 — 문서/전자서명](../../system/database/documents.md) +- [Employee API 규칙 — 연봉 정보](../../rules/employee-api.md#연봉-정보-관리-mng-내부-api) - Swagger: `/api-docs` → ESign 섹션 --- -**최종 업데이트**: 2026-02-27 +**최종 업데이트**: 2026-03-11 diff --git a/projects/e-sign/changelog.md b/projects/e-sign/changelog.md index f0337dc..acacfdc 100644 --- a/projects/e-sign/changelog.md +++ b/projects/e-sign/changelog.md @@ -19,12 +19,31 @@ | 버전 | 날짜 | 유형 | 요약 | |------|------|------|------| +| 1.1.1 | 2026-03-11 | 기능 개선 | 근로계약서 최신 연봉정보 반영 | | 1.0.0 | 2026-02-12 | 초기 릴리스 | 전자계약 서명 솔루션 전체 구현 | --- ## 2. 릴리스 상세 +### [1.1.1] - 2026-03-11 (근로계약서 연봉정보 개선) + +근로계약서 사원불러오기에서 최신 연봉정보를 정확히 반영하도록 개선했다. 매년 연봉 갱신 시 연봉계약 기간이 자동으로 최신 적용일 기준으로 계산된다. + +#### Added (추가) + +- `searchEmployees()` 응답에 `salary_effective_date` 필드 추가 +- 연봉 이력 fallback 로직: 현재 연봉이 null이면 이력에서 `effective_date` 기준 최신 탐색 +- 연봉계약 시작/종료일을 연봉 적용일 기준으로 계산 (기존: 입사일 기준) +- 근로계약/연봉계약 기간 분리: 근로계약은 입사일, 연봉계약은 연봉 적용일 + +#### Changed (변경) + +- `EsignApiController::searchEmployees()` — 최신 연봉 탐색 로직 추가 +- `create.blade.php::handleEmployeeSelect()` — 연봉계약/근로계약 날짜 매핑 분리 + +--- + ### [1.0.0] - 2026-02-12 (초기 릴리스) E-Sign 전자계약 서명 솔루션의 첫 번째 릴리스입니다. 모두싸인과 유사한 간편 전자계약 서명 기능을 SAM 시스템에 구축했습니다. diff --git a/rules/employee-api.md b/rules/employee-api.md index 1453734..9b1f314 100644 --- a/rules/employee-api.md +++ b/rules/employee-api.md @@ -215,13 +215,26 @@ $profile->emergency_contact; // json_extra['emergency_contact'] - R3: 일반 API 응답(`toArray()`)에서 `salary_info`는 자동 제거된다 (민감 데이터 보호) - R4: 연봉 정보는 MNG 사원관리 페이지의 조회/수정 화면에서만 표시된다 +### 전자계약(E-Sign) 연동 + +근로계약서 사원불러오기에서 연봉 정보를 활용한다: + +- `EsignApiController::searchEmployees()` → `getSalaryInfo()`로 최신 연봉 조회 +- `annual_salary` + `salary_effective_date` 반환 +- 현재 연봉이 null이면 이력에서 `effective_date` 기준 최신 탐색 (fallback) +- 연봉 적용일 기준으로 연봉계약 시작/종료일 자동 계산 + +> 상세: [E-Sign 기능 문서 — 근로계약서 사원 연동](../features/esign/README.md#5-근로계약서-사원-연동) + ### 관련 파일 | 파일 | 역할 | |------|------| -| `mng/app/Http/Controllers/Api/Admin/HR/EmployeeSalaryController.php` | API 컨트롤러 | +| `mng/app/Http/Controllers/Api/Admin/HR/EmployeeSalaryController.php` | 연봉 CRUD API 컨트롤러 | +| `mng/app/Http/Controllers/ESign/EsignApiController.php` | `searchEmployees()` — 전자계약 사원 검색 | | `mng/app/Models/HR/Employee.php` | `getSalaryInfo()`, `setSalaryInfo()` 메서드 | | `mng/resources/views/hr/employees/partials/salary-info.blade.php` | 연봉 정보 UI (Alpine.js) | +| `mng/resources/views/esign/create.blade.php` | 근로계약서 변수 자동 매핑 | | `mng/routes/api.php` | 라우트 정의 (라인 1185-1188) | ---