SimpleHR project
출장 관리 스펙 (신청·승인·근태 자동생성)
conceptedited by Cairni · 방금 · AIv1
개요
출장 관리 기능(business_trip_enabled)은 근무 정책 스펙의 하위 기능으로, 직원이 출장 일정을 신청하고 관리자가 승인·반려하면 승인된 기간 내 각 근무일에 자동으로 근태 레코드가 생성되는 end-to-end 흐름을 제공한다. fix-task-0629-26년-06월-29일-수정사항에서 수동 테스트까지 완료된 상태로 기록되어 있다. fix-task-0629 (26년 06월 29일 수정사항)
핵심 데이터 모델
BusinessTripRequest
출장 신청 정보를 저장하는 신규 모델. fix-task-0629-26년-06월-29일-수정사항에서 추가되었다. fix-task-0629 (26년 06월 29일 수정사항)
| 필드 | 설명 |
|---|---|
| 신청 기간 (시작일·종료일) | 출장 대상 날짜 범위 |
| 상태 | PENDING / APPROVED / REJECTED |
| 연동 모델 | AttendanceRecord (승인 시 자동 생성·갱신) |
AttendanceRecord — work_state 값
| 값 | 의미 |
|---|---|
ATT_BUSINESS_TRIP | 출장 승인 후 자동 생성되는 근태 상태 |
NORMAL (기본값) | 일반 근무 |
주의:work_state=BUSINESS_TRIP이면서attendance_status=ATT_PRESENT인 불일치 데이터가 대시보드 출장 직원 수 집계 오류를 유발했다. 대시보드 집계에work_state → attendance_status보정 로직이 적용되어 있다. fix-task-0629 (26년 06월 29일 수정사항)
신청·승인 흐름
API 명세
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
| POST | /attendance/business-trip (추정) | 출장 신청 |
| PUT | /attendance/business-trip/{id}/approve (추정) | 승인 처리 |
| PUT | /attendance/business-trip/{id}/reject (추정) | 반려 처리 |
엔드포인트의 정확한 경로는 소스에 명시되어 있지 않다. 위 표는 구현 목적(신청/승인/반려 API)을 기준으로 정리한 것이다. fix-task-0629 (26년 06월 29일 수정사항)
관리자 UI — work_state 편집
- 관리자가 근태 레코드의
work_state를 직접 편집할 때 자동 채움 기능이 동작한다. - 출장/외근 상태 목록 표시가 수정되었다. fix-task-0629 (26년 06월 29일 수정사항)
근태 신청 캘린더 날짜 오프셋 수정
- 근태 신청 캘린더에서 날짜가 1일 밀리는 버그가 수정되었다.
- 원인: UTC 기준으로 날짜를 처리하던 것을 로컬 타임존 기준으로 변환하도록 수정. fix-task-0629 (26년 06월 29일 수정사항)
테스트 커버리지
| 테스트 파일 | 검증 내용 |
|---|---|
test_business_trip.py | 출장 신청·승인·반려 기본 흐름 |
test_business_trip_existing_update.py | 기존 근태 레코드 갱신 동작 |
test_attendance_doc_approval.py | 전자결재 연동 후 근태 레코드 자동 생성 |
수동 테스트까지 완료된 것으로 확인되었다. fix-task-0629 (26년 06월 29일 수정사항)
대시보드 집계 보정 로직
대시보드의 "오늘 출장 직원 수" 집계 시 work_state와 attendance_status 간 불일치 데이터로 인해 미래 출장 직원이 현재 집계에 반영되는 오류가 발생했다. work_state → attendance_status 보정 로직을 적용하여 수정되었다. fix-task-0629 (26년 06월 29일 수정사항)
근태 관리 스펙의 전반적인 상태 관리 규칙과 함께 참고할 것.