Files
sam-docs/changes/20260319_attendance_leave_sync_fix.md

2.2 KiB

근태현황 승인된 휴가 누락 attendance 레코드 자동 보정

날짜: 2026-03-19 작업자: Claude Code

변경 개요

휴가관리에서 3명의 휴가가 승인 상태인데, 근태현황에는 2명만 표시되는 버그 수정. 승인된 휴가에 대응하는 attendances 레코드가 누락된 경우, 근태 목록/통계/엑셀 조회 시 자동으로 누락 레코드를 생성하는 방어 로직 추가.

원인 분석

휴가 승인 흐름: 결재 최종 승인 → handleApprovalCompletedapproveByApprovalcreateAttendanceRecords

이 흐름은 단일 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/ — 인사관리 기능