2.2 KiB
2.2 KiB
근태현황 승인된 휴가 누락 attendance 레코드 자동 보정
날짜: 2026-03-19 작업자: Claude Code
변경 개요
휴가관리에서 3명의 휴가가 승인 상태인데, 근태현황에는 2명만 표시되는 버그 수정.
승인된 휴가에 대응하는 attendances 레코드가 누락된 경우, 근태 목록/통계/엑셀 조회 시 자동으로 누락 레코드를 생성하는 방어 로직 추가.
원인 분석
휴가 승인 흐름: 결재 최종 승인 → handleApprovalCompleted → approveByApproval → createAttendanceRecords
이 흐름은 단일 DB 트랜잭션 내에서 실행되어 코드 상 정상이나, 특정 조건에서 attendance 레코드가 누락되는 케이스가 발생. 근본 원인 특정은 어렵지만, 데이터 정합성을 보장하기 위해 조회 시점에 보정하는 방어 로직을 추가.
수정된 파일
| 파일 | 변경 내용 |
|---|---|
app/Services/HR/AttendanceService.php |
syncApprovedLeaveAttendances() 메서드 추가, getAttendances()/getExportData()/getMonthlyStats()에서 호출 |
상세 변경 사항
syncApprovedLeaveAttendances() 메서드 추가
- 조회 기간 내 승인된 휴가(
leaves.status = 'approved') 중ATTENDANCE_STATUS_MAP에 매핑이 있는 유형만 대상 - 기간 내 기존
attendances레코드를user_id + base_date조합으로 빠르게 조회 - 누락된 날짜에 대해
Attendance::withTrashed()->updateOrCreate()로 생성 (soft-deleted 레코드도 복원) - 주말은 건너뜀
호출 위치
| 메서드 | 용도 |
|---|---|
getAttendances() |
근태 목록 조회 (HTMX 테이블) |
getExportData() |
엑셀 내보내기 |
getMonthlyStats() |
월간 통계 카드 (정시출근/지각/결근/휴가/기타) |
테스트 체크리스트
- 승인된 휴가 3건 중 누락된 1건이 근태현황에 표시되는지 확인
- 기존 attendance 레코드가 있는 경우 중복 생성되지 않는지 확인
- 월간 통계 카드의 휴가 건수가 정확한지 확인
- 운영서버 배포 후 실데이터 확인
관련 문서
rules/attendance-api.md— 근태 API 규칙features/hr/— 인사관리 기능