SimpleHR project
연차촉진 스펙
개념편집: Cairni · 방금 · AI 생성v7
개요
연차촉진이란 사용자의 미사용 연차를 사전에 촉구하는 법적 절차입니다. 휴가 관리 스펙과 연동되며, 근태 관리 스펙 내 연차 운영 정책의 일부로 동작합니다. 2025년 6월 19일 수정사항을 통해 아래 기능들이 추가·수정되었습니다. fix-task-0619.md
구현된 기능
1. 연차촉진 대상자 탭
- 연차촉진 대상자만 별도로 조회할 수 있는 탭 UI가 신규 구현되었습니다.
- 관리자는 해당 탭에서 촉진 대상 직원 목록을 확인할 수 있습니다. fix-task-0619-md
2. 연차촉진 2·3차 재시도 차단
- 연차촉진 프로세스는 통상 1차 통보 → 2차 통보 → 3차 통보 순서로 진행됩니다.
- 이미 발송된 2차·3차 촉진 단계를 중복 재시도하는 것을 차단하는 로직이 적용되었습니다.
- 이를 통해 동일 단계 중복 발송으로 인한 데이터 오염을 방지합니다. fix-task-0619-md
3. 발송일시·응답일 시간 미표시 버그 수정
- 기존에는 연차촉진 발송일시와 응답일에 시간이 표시되지 않는 버그가 있었습니다.
- 사용자 vacation 페이지 및 관리자 vacation 페이지 총 7곳에 시간 표시 처리가 적용되었습니다. fix-task-0619-md
연차촉진 플로우
발송일시·응답일 표시 적용 범위
| 적용 위치 | 페이지 유형 |
|---|---|
| 연차촉진 발송일시 표시 (7곳) | 사용자 vacation 페이지, 관리자 vacation 페이지 |
구체적인 7개 위치의 컴포넌트명은 소스에 명시되지 않았습니다. fix-task-0619-md
관련 이슈 및 주의사항
- 연차 자동계산 로직과의 연동: 연차촉진 대상자 산정은 입사일 기준 자동계산 연차(연차 자동계산 로직 스펙)를 기반으로 합니다. 입사일이 미입력된 직원은 연차가 0일로 처리됩니다. fix-task-0619-md
- 휴가 잔액 변동 이력: 촉진 이후 연차 사용 내역은 휴가 잔액 변동 이력 스펙에서 확인할 수 있습니다.
- 이월 기능과의 관계: 연말 미사용 연차의 이월 정책은 연차 이월(Carryover) 기능 스펙을 참고하십시오. 이월 관련 관리자 UI는 현재 미구현 상태로 별도 확인이 필요합니다. fix-task-0619-md
- 결재 연동: 휴가 신청과 연차촉진 흐름은 결재 관리 스펙의 결재선 정책과 연동됩니다.
미완료 항목
07월 13일 추가 미구현 이슈 fix-task-0713 (26년 07월 13일 수정사항) · 07월 14일에도 동일 이슈 미해결 확인 fix-task-0714 (26년 07월 14일 수정사항) · 07월 15일에도 동일 이슈 미해결 확인 fix-task-0715 수정사항 · 07월 21일에도 동일 이슈 미해결(보류) 확인 26년 07월 21일 수정사항 · 07월 22일에도 동일 이슈 미해결(보류) 확인 26.07.22 수정사항 (fix-task-0722) · 07월 29일 RN 앱 감사 결과: 휴가 촉진 응답이 RN에 전무함 확인 RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
threshold_days 변경 시 기존 대상자 미정리
sync_promotion_targets()에서 threshold 미달 대상자 삭제 조건이first_status == "PENDING" AND second_status == "PENDING"인 경우만 해당.- 1차 알림 발송 완료(
first_status = "NOTIFIED")된 대상자는 threshold를 올려도 목록에서 제거되지 않음. - 예시: threshold=3일 때 등록+1차 발송 → threshold=100으로 변경 → 잔여 19일인 직원이 여전히 대상자 목록에 표시됨.
- 수정 대상:
backend/app/services/policy_service.py—sync_promotion_targets()정리 조건에서 threshold 미달 시 알림 발송 여부와 무관하게 제거하거나, 최소한 목록 조회 시 현재 threshold 기준으로 필터링. fix-task-0713 (26년 07월 13일 수정사항) fix-task-0714 (26년 07월 14일 수정사항) fix-task-0715 수정사항
설정값 미적용 (알림 채널 / 자동 실행 / 촉진 시기 / 응답 기한)
AnnualPromotionSetting의first_notify_months_before,second_notify_months_before,first_notify_deadline_days,auto_schedule,use_email / use_push / use_kakao값이 DB에 저장만 되고 실제 로직에 반영되지 않음.- 현재 알림 발송은 인앱 알림(
create_notification)만 생성하며, 채널 분기 / 자동 스케줄러 / 시기 판단 / 기한 초과 처리 없음. fix-task-0713 (26년 07월 13일 수정사항) fix-task-0714 (26년 07월 14일 수정사항) fix-task-0715 수정사항 - 07월 21일 기준 보류 결정: 계획 =
report/plan-deferred-3.md(C)— 채널(이메일+인앱) + 데일리 스케줄러(기본 off) 로 구현 예정. ※ 핵심 미결정 사항: 연차 만료일 기준(회계연도말 vs 입사일) 확정 필요. 26년 07월 21일 수정사항 - 07월 22일 기준 보류 유지: 동일 내용 보류 지속. 26.07.22 수정사항 (fix-task-0722)
RN 앱 — 촉진 응답 기능 전무 (법정 대응 차단)
2026-07-29 RN 앱 ↔ 웹모바일뷰 기능 격차 감사(RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729))에서 RN vacation 모듈에 연차촉진 응답 관련 코드가 완전히 없음이 확인됐습니다. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
- 촉진 통보 배너(미응답 N건): 웹모바일
MobileVacation.tsx:208-259에서leaveApi.myPromotionNotices()(L165)로 구현. RNvacation/api.ts에 promotion 엔드포인트 없음. - 1차 응답(사용 계획 제출+서명): 웹
PromoResponseSheet round=1(L795-808, 날짜입력 L859-870). RN 미구현. - 2차 응답(회사 지정 사용일 확인서명): 웹
round=2(L809-818, L871-880, 배너 '확인 서명' L251). RN 미구현. - 촉진 응답 내역 섹션: 웹
MobileVacation.tsx:396-434. RN은 신청 이력만 있고 촉진 응답 이력 없음.
권장 조치: vacation/api.ts에 promotion 래퍼 2개 추가 + 배너 + 응답 시트(1차/2차) + 내역 구현 (웹모바일 MobileVacation 이식). 근기법 61조 법정 대응에 직접 영향. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
연차촉진 잔여 과제AI · 출처 클릭
미완료6
관리자 휴가 잔액 조정 드로어에 change_type 선택 UI 추가 (ADJUST/CARRYOVER/EXPIRE)
fix-task-0619.md
연말 미사용 연차 자동 이월 정책 설정 UI 필요 여부 확인 (회사별 이월 한도, 소멸 기한 등)
fix-task-0619.md
이월된 연차의 만료일(expires_at) 관리 — 이월 시 만료일 자동 설정 로직 확인
fix-task-0619.md
사용자 카드 '이월 N일' 표시 시 carryover_days=0일 때 undefined 방지 확인
fix-task-0619.md
sync_promotion_targets() — threshold 미달 시 first_status=NOTIFIED 대상자도 제거하도록 정리 조건 확장 (policy_service.py)
fix-task-0713 (26년 07월 13일 수정사항)
AnnualPromotionSetting 설정값 실제 적용: first/second_notify_months_before, first_notify_deadline_days, auto_schedule, use_email/use_push/use_kakao 채널 분기 및 자동 스케줄러 구현
fix-task-0715 수정사항