HBHR220_연장근무 내역 시트
(Hereby) HR 급여 관리 > 시트 워크스페이스 > 연장근무 내역 시트
| 앱 | HR 급여 관리 (hr-system, 포트 4000) |
| 대상 사용자 | 조건1 [HR_ADMIN] / 조건2 [SUPER_ADMIN] |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_급여정본경계]] |
| Status | review |
| Owner | 카나 |
| 부모 | [[HBHR100_시트 워크스페이스 (공통 Shell)]] |
개요
- 연장근무 내역 시트는 직원별 연장·야간·휴일 초과근무 신청/승인 내역을 한 행으로 표현하는 **급여 입력 원천 시트(작업공간)**다.
- 좌→우 12컬럼 구조이며, overtime_records(FK 4종: employeeId·organizationId·shiftId·typeId)를 근거로 한다.
- 승인상태 컬럼은 팀결재(HBTM01) 결재 결과를 소비한다 — 이 시트에서 승인하지 않고 overtime_records.status를 표시만 한다.
- 값은 초과근무 calculator(16 output keys)의 입력 원천이며, 주 52시간 상한 판정과 연결된다.
- 시트=작업공간, 정본=commit 경계다. 승인 연장시간 × 통상시급 × 배수 = 연장수당은 확정(commit) 시에만 allowance_records로 정본화된다 ([[POL_급여정본경계]] 참조). 커밋 산출 record는 item-code FK가 아니라
targetSheetSlug+targetColumnKey페어로 급여대장 집계 컬럼에 앵커된다 (2026-06-19 모델, migration 1816 — TC 확정: 10:10.1~10.3).
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 가독성 패스 + 액션 표기 (GUIDE §7·§8) |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-21 | 카나 | PM | TC 크로스체크 확정분 반영 (🟡) |
| 2026-07-21 | 카나 | PM | 🔴 정정: record 타깃 페어 모델(item-code FK 폐기) (TC 정본, 콸 승인) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
${sheet.rows} | overtime_records[] (기간 필터) | 0건 시 빈 그리드 | 초과근무 행 |
${row.status} | overtime_records.status (overtime_records_status_enum) | 공란 | HBTM 승인 결과 소비 |
${row.category} | overtime_records.category (default weekday) | default weekday | 구분 |
${row.multiplier} | overtime_types.multiplier (typeId FK, default 1.5) | default 1.5 | 수당 배수 |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 셀 편집 | rowId, columnKey, value | sdk.payrollSheet.updateCell() (추정) | payroll:write (추정) |
| 컬럼 수식/바인딩 변경 | columnKey, formula/calculatorKey | sdk.payrollSheet.updateColumn() ([[HBHR107_컬럼 헤더 컨트롤]]) | payroll:write (추정) |
| 재계산 preview | sheetId | compute preview (읽기 전용, [[HBHR203_재계산 diff 뷰]]) | — |
승인상태 소비 (HBTM01 근무 관리) · 연장 파이프라인·승인 게이트
연장·휴일 근무 큐에서 팀장 승인/반려 결과 = overtime_records.status. 상태 값: 대기 / 승인 / 반려 / 취소 / 보고서 대기 / 보고서 승인 / 보고서 반려.
연장 파이프라인(라이브 확정): 유저 overtime.request(PENDING) → 팀장 teamManager.approveOvertime → 유저 overtime.submitReport(id, actualHours, note) → 팀장 teamManager.approveOvertimeReport(ids). 보고서 승인 시 overtimeHours를 actualHours로 재기록한다.
급여 집계 게이트 (2026-06-11): approved / report_ (승인·보고서 승인) 상태 행만 급여 집계 대상. PENDING(대기)은 집계에서 제외*. (TC 확정: 10:10.1~10.3 overtime→computed→commit)
Calculator 연동
컬럼(ƒ) ↔ 초과근무 calculator(16 output keys): 연장/야간/휴일 시간 × 통상시급([[HBHR210_계약급여내역 시트]]) × 배수(overtime_types.multiplier)로 수당 산출 (16키 세부 = TBU).
화면 플로우 (Mermaid)
이 시트는 INPUT 원천 시트다. 승인상태는 HBTM01에서 결정되어 표시만 되며, 정본 record 생성은 급여대장 전체 확정([[HBHR201_전체 확정 (commit)]])에서만 발생한다.
컬럼 사양표 (12컬럼, 좌→우 — 기본 템플릿 기준)
컬럼 순서·명칭은 기본 템플릿 기준이며, 시트별 실데이터는 사용자 컬럼 편집으로 변형될 수 있다. 내부 fieldKey 11종: workDate / employeeNumber / employeeName / department / category / startTime / endTime / overtimeHours / mealBreakHours / status / notes.
| # | 컬럼 | 타입 | 설명 (용도·형식) | 연관 (ERD/calculator/타 앱) | 비고 |
|---|---|---|---|---|---|
| 1 | # | Index | • 행 순번을 표시하는 시스템 컬럼 (read-only) | sheet_rows.sortOrder | read-only |
| 2 | 근무일 | DatePicker | • 초과근무 발생일(YYYY-MM-DD)을 지정하는 DatePicker 컬럼 • 입력 시: overtime_records.workDate 갱신 (작업공간) | overtime_records.workDate / fieldKey=workDate | — |
| 3 | 사번 | Text (system) | • 직원 사번을 표시하는 시스템 컬럼 (read-only) | employees.employeeNumber / fieldKey=employeeNumber | 시스템 컬럼 |
| 4 | 성명 | Text (system) | • 직원 성명을 표시하는 시스템 컬럼 (read-only) | employees.name / fieldKey=employeeName | 시스템 컬럼 |
| 5 | 부서 | Text (system) | • 소속 부서/팀을 표시하는 시스템 컬럼 (read-only) | teams / fieldKey=department | 시스템 컬럼 |
| 6 | 구분 | Badge | • 초과근무 유형(평일/야간/토요일 등)을 표시하는 Badge 컬럼 | overtime_records.category (overtime_records_category_enum, default weekday) / fieldKey=category | TBU: category enum 전체값 |
| 7 | 시작 | Time | • 초과근무 시작 시각(HH:MM)을 지정하는 Time 컬럼 • 입력 시: overtime_records.startTime 갱신 | overtime_records.startTime / fieldKey=startTime | nullable |
| 8 | 종료 | Time | • 초과근무 종료 시각(HH:MM)을 지정하는 Time 컬럼 • 입력 시: overtime_records.endTime 갱신 | overtime_records.endTime / fieldKey=endTime | nullable |
| 9 | 연장시간 | Output/Number | • 인정 연장근무 시간(h)을 표시하는 Output 컬럼. numeric(7,2), 식사휴게 차감 후 | overtime_records.overtimeHours / fieldKey=overtimeHours · 초과근무 calculator 입력 | 식사휴게 차감 후 |
| 10 | 식사휴게 | Number | • 식사·휴게 차감 시간(h)을 입력하는 컬럼. numeric(7,2), 연장시간 산정 제외 • 입력 시: overtime_records.mealBreakHours 갱신, 연장시간 재산정 | overtime_records.mealBreakHours (default 0) / fieldKey=mealBreakHours | 연장시간 산정 제외 |
| 11 | 승인상태 | Badge | • HBTM 결재 결과를 소비해 표시하는 Badge 컬럼. 대기/승인/반려/취소/보고서 대기/보고서 승인/보고서 반려 | overtime_records.status / fieldKey=status ← HBTM01 근무 관리 | 이 시트에서 승인 불가(표시 전용) |
| 12 | 메모 | Text | • 비고/사유를 입력하는 메모 컬럼 • 입력 시: overtime_records.notes 갱신 - 셀 메모(💬) 클릭 시: payroll_cell_memos 별도 저장 | overtime_records.notes / fieldKey=notes · payroll_cell_memos(columnKey) | — |
공통 우측 컬럼군(재계산 diff + eCount)은 [[HBHR203_재계산 diff 뷰]] 참조.
연동·플로우
- 승인 소비 흐름: Employee App 신청 → HBTM01 근무 관리 승인(overtime_records.status) → 본 시트 승인상태 표시 → 승인 행만 급여 반영.
- 52시간 이슈: 주표준시간([[HBHR210_계약급여내역 시트]]) + 연장시간 합산이 주 52시간 상한 근접/초과 시 경고. HBTM 52시간 preflight는 docs 명문 / 라이브 UI 미노출(HBTM01 §50, TBU). HR 시트 측 경고 UI 위치 = TBU.
- 버전 관리: overtime_records는 chainId/version/supersededAt 보유 — 정정 시 새 version(추정). 시트는 최신 version 표시(TBU).
- 확정 경계: 승인 연장시간 × 통상시급 × 배수 = 연장수당, 전체 확정([[HBHR201_전체 확정 (commit)]]) 시 allowance_records로 정본화.
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
CASE01 [시스템 컬럼 편집 시도] | 사번/성명/부서 셀 편집 | 차단 (read-only 바인딩, 입력 무시) | employee 마스터가 SoT |
CASE02 [ƒ 컬럼/원천 셀 편집] | 연장시간/식사휴게 등 셀·수식 변경 | 작업공간 업데이트 (payroll:write 추정) | commit 무관 |
CASE03 [승인상태 소비 행] | overtime_records.status = 대기/승인/반려 등 | 표시 전용 (이 시트에서 승인 불가) | HBTM01이 결재 SoT |
Open Question
- 초과근무 calculator 16 output key 세부 및 컬럼 매핑. TBU.
- overtime_records_category_enum / status_enum 전체 값. TBU.
급여 산입 대상 상태 정책(승인만 vs 보고서 승인 포함)→ approved / report_ 만 집계, PENDING 제외* 확정(2026-06-11 게이트). 보고서 승인이 overtimeHours←actualHours 재기록. (TC 확정: 10:10.1~10.3)- 52시간 경고의 HR 시트 노출 위치([[HBHR203_재계산 diff 뷰]] preflight vs 인라인). TBU.
- 정규/야간/휴일 분해가 이 시트인지 근태 내역([[HBHR231_근태 내역 시트 (근무시간 유형 집계)]])인지 경계. TBU.