HBAD262_연차 부여 기준
(Hereby) 관리자 패널 > 근태 현황 > 연차 탭 > 유형·기준 관리 모달 > 연차 부여 기준
| 메타 | 앱: 관리자 패널 (HBAD)대상 사용자: 조건1 [근태 관리] (설정 수정)프로토타입: TBU관련 정책: [[POL_연차관리]]Status: draft (모달 내부 라이브 미확인)Owner: 카나 |
개요
연차 부여 기준은 근속연수 구간별 연차 부여 일수·발생유형을 정의하는 설정으로, 원천은 leave_entitlement_rules다.근태 현황 > 연차 탭 > "연차 부여 기준" 버튼 → "유형·기준 관리" 모달의 연차 부여 기준 섹션으로 진입한다.각 규칙은 근속연수 구간에 매칭되어 [[HBAD251_연차 현황·결재]]의 "산정기준"과 부여 일수 원천이 된다. ⚠️ 연차 부여 일수·근속 구간 등 수치 규칙은 정책 [[POL_연차관리]]에 정의되며, 본 사양서는 UI 필드만 기술한다 (정의 복사 금지). 모달은 라이브 프로브 미오픈(s3-attend TAB_NOT_FOUND) → census/ERD 기반, TBU 다수.
잔여 계산·부여 모델 (코드 반영)
- 불변 원장 전환: 연차 잔여 계산이 불변 원장(LeaveLedgerEntry, append-only) 기반으로 전환됨. 부여/사용/이월/소멸/조정이 분 단위로 적재되며, UPDATE/DELETE는 DB 트리거로 차단, 정정은 상쇄 엔트리로 처리 (코드 반영: 318f7e1).
- 부여 계산
computeEntitlement: 입사일·근속연수 기반. 매칭 규칙이 없으면 근로기준법 기본값 적용 — 1년 미만 월 1일(최대 11) / 1년 15일 / 3년+ 2년당 +1(최대 25) (코드 반영: 42e22ee). - 병원별 정책 8플래그 (leavePolicySchema, 기본 permissive) 존재 (코드 반영: 318f7e1) — 세부 플래그 목록 TBU.
- 정책 화면 재구성: 연차(휴가) 정책 화면이 그룹형 선택지로 재구성됨 (코드 반영: ba2775a) — 세부 UI TBU.
문서 히스토리
- 2026-07-06 최초 작성 - 카나/콸
- 2026-07-10 라이브 기능 검토 반영 (진입 경로 확인, 모달 내부 미오픈) - 카나/콸
- 2026-07-13 버튼 행동 명세 보강 - 카나/콸
- 2026-07-21 GC700 깊이 재작성 - 카나/콸
- 2026-07-21 가독성 패스 (GUIDE §7) - 카나/PM
- 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
- 2026-07-23 코드 변경 반영(42e22ee·318f7e1·ba2775a) - 카나/콸
Data I/O
Server → Client
변수
| 메타 | $ |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 규칙 추가/수정 | yearsOfServiceMin/Max·entitledDays·accrualType·maxDays·name·description | sdk.leaveRule.upsert() (추정) | 근태 관리 |
| 삭제 | ruleId | sdk.leaveRule.delete() (추정) | 근태 관리 |
| 부여 실행 (추정) | 규칙 기반 leave_grants 생성 (batch/스케줄) | (batch) | 시스템 |
외부 통합
| 대상 | 데이터 | 방향 | 비고 |
|---|---|---|---|
| 연차현황 ([[HBAD251_연차 현황·결재]]) | 매칭 규칙 → "산정기준" 컬럼 · 부여 일수 | 소비 | leave_grants |
연차 부여 기준 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • 조건1 [근태 관리 권한] 인증 후 연차 탭 "연차 부여 기준" 버튼 진입- CASE01 [미인증]: /admin/signin 리다이렉트 | 인증 세션 · RBAC | |
| 01 | 초기 상태 | - | • 모달 좌측 네비 "연차 부여 기준" 선택 상태 | 라이브 미오픈 | |
| 10 | 부여 기준 그리드 | Grid | • 근속연수 구간별 규칙을 그리드로 표시 (sortOrder 정렬) - CASE01 [규칙 0건]: Empty state (원문 TBU) | leave_entitlement_rules | census · TBU: Empty 원문 |
| ㄴ10 | + 규칙 추가 | Button | • 새 부여 규칙을 생성하는 진입 • 클릭 시: 규칙 폼(20) 열림 (근속연수 시작/끝/부여일수/발생유형/최대일수) | leave_entitlement_rules | |
| ㄴ11 | 근속연수 시작 | Number | • 구간 하한(년) 입력 — 이상 • 입력 시: NOT NULL 필수 | leave_entitlement_rules.yearsOfServiceMin (NOT NULL) | 이상 |
| ㄴ12 | 근속연수 끝 | Number | • 구간 상한(년) 입력 — 미만 • 입력 시: 빈칸 = 무제한 | leave_entitlement_rules.yearsOfServiceMax (nullable) | 미만 · 빈칸=무제한 |
| ㄴ13 | 부여일수 | Number | • 해당 구간 부여 연차 일수(일) 입력 — 수치 규칙 [[POL_연차관리]] 참조 | leave_entitlement_rules.entitledDays (numeric(4,1)) | |
| ㄴ14 | 발생유형 | Dropdown | • 발생 방식 선택 (연간 일괄 / 월별 발생 등, default annual) • 선택 시: CASE01 [월별 발생] → 최대일수(ㄴ15) 상한 적용 | leave_entitlement_rules.accrualType (accrualtype_enum) | TBU: enum 전체 값 |
| ㄴ15 | 최대일수 | Number | • 월별 발생 시 연간 최대 부여 일수 상한 입력 (nullable) • 입력 시: 값 없음 → 상한 없음 | leave_entitlement_rules.maxDays (numeric(4,1)) | 월별 발생 상한 |
| ㄴ16 | 이름 / 설명 | Input | • 규칙 이름 / 설명 입력 (선택) | leave_entitlement_rules.name / description | |
| ㄴ17 | 상태 / 관리 | Badge/Action | • 활성/비활성 배지 + 편집/삭제 액션 • 클릭 시: "편집" → 규칙 폼(20) · "삭제" → 컨펌 후 삭제 | leave_entitlement_rules.isActive | TBU: 삭제 컨펌 문구 |
| 20 | 규칙 폼 | Modal | • 부여 규칙을 생성/수정하는 폼 모달 • 클릭 시: "+ 규칙 추가"/"편집"으로 열림 - CASE01 [저장]: 규칙 생성/갱신 - CASE02 [근속연수 시작 미입력]: 저장 불가 (NOT NULL, 추정) | sdk.leaveRule.upsert() (추정) | TBU: 구간 중첩/공백 검증 UX |
부여 실적 연동
| 항목 | ERD 근거 | 비고 |
|---|---|---|
| 부여 실적 | leave_grants (periodKey·grantedDays·policy) | 규칙 → 실제 부여 레코드 |
| 불변 원장 | LeaveLedgerEntry (append-only, 분 단위, UPDATE/DELETE 트리거 차단) | 잔여 계산 원천 (코드 반영: 318f7e1) |
| 부여 계산 | computeEntitlement (입사일·근속연수, 규칙 없으면 근로기준법 기본값) | 코드 반영: 42e22ee |
| 산정기준 표시 | 매칭 규칙 → [[HBAD251_연차 현황·결재]] "산정기준" 컬럼 (라이브 값 "입사일") | 연차현황 소비 |
| 구간 매칭 | [Min(이상), Max(미만)) 반열린 구간 | Max 빈칸=무제한 |
권한 · 상태 분기 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [조회] | 부여 기준 진입 | 규칙 그리드 | 근태 관리 |
CASE02 [규칙 추가] | "+ 규칙 추가" | 규칙 폼 → 생성 | |
CASE03 [무제한 구간] | 끝(미만) 빈칸 | 상한 없는 구간 | 반열린 구간 |
CASE04 [월별 발생] | 발생유형 = 월별 | 최대일수 상한 적용 | |
CASE05 [권한 없음] | 근태 관리 권한 미보유 | 추가/편집 비활성 (추정) | TBU |
Open Question
| 구분 | 미확인 항목 |
|---|---|
| 모달 전체 | ⚠️ 유형·기준 관리 모달 라이브 미오픈 (s3-attend TAB_NOT_FOUND) → census/ERD 기반, 실화면 대조 필요 |
| 발생유형 | leave_entitlement_rules_accrualtype_enum 전체 값 (annual 외) |
| 최대일수 | 월별 발생 시 최대일수 상한 적용 계산식 → [[POL_연차관리]] 참조 (사양서 정의 금지) |
| 부여 실행 | 부여 실행 트리거 (입사기념일 / 회계연도 batch) |
| 규칙 폼 | 구간 경계 중첩·공백 검증 UX |
| 상태·관리 | 삭제 컨펌 원문 문구 |
| Empty | 규칙 0건 시 Empty state 원문 문구 |