HBHR000_HR 급여 관리 (앱 개요)
(Hereby) HR 급여 관리 > 앱 개요
| 프로토타입 | TBU |
| Status | review |
| Owner | 카나 (PM) |
개요
HR 급여 관리는 월 단위 스프레드시트 워크스페이스다. 모든 HR 데이터가 "시트(Sheet) 오브젝트" 단위로 폴더 분류·관리되며, 컬럼이 엔티티 필드/계산기(Calculator)에 바인딩되고 전체 확정(commit) 시점에 급여 정본 레코드/원장으로 변환된다. 핵심 경계: Sheet(작업공간) → Commit → Ledger(정본) — AI는 Sheet/preview/preflight까지만 관여하고, commit·Ledger 변경은 항상 사람이 실행한다 ([[POL_급여정본경계]]).
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 가독성 패스 + 액션 표기 (GUIDE §7·§8) |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-21 | 카나 | PM | TC 크로스체크 확정분 반영 (🟡) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | 인증 세션 (HR_ADMIN / SUPER_ADMIN) | 없으면 /hr-system/signin 리다이렉트 | 진입 게이트 |
| $ | 조회 월 (YYYY-MM) | 기본 당월 | 상단 Month/Year 스피너 |
| $ | PayrollSheet.folder (추정) | "(미분류)" fallback | 폴더별 시트 그룹 |
| $ | PayrollSheet[] (추정) | "이 기간에 시트가 없습니다" | 해당 월 시트 목록 (sheet_views[]) |
| $ | PayrollRecord[] (추정) | 빈 그리드 | "293/293건" 형태 카운트 |
Client → Server
| 액션 | 전달 값 | tRPC / SDK | 권한 토큰 |
|---|---|---|---|
| 시트 생성 | name, folder, isPublic, template | sdk.payrollSheet.create() (추정) | payroll:write (추정) |
| 셀 편집 | rowId, columnId, value | sdk.payrollSheet.updateCell() (추정) | payroll:write (추정) |
| 직원(행) 추가 | employeeId[] | sdk.payrollSheet.addRows() (추정) | payroll:write (추정) |
| 전체 확정(commit) | sheetId | sdk.payroll.commit() (추정) | payroll:confirm (추정) |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| Module Manager (HBMM) | 컬럼 ƒ수식 ↔ calculator output key 참조 | 동기 | 9 calculator |
| Time Management (HBTM) | 연장/야간/휴일 근무 → overtime_record source (추정) | TBU | 근태 source |
| 알림/발송 (HBNS) | 임금명세서 전자서명 발송 연계 | 비동기 | 동선 TBU |
| Medical (HBMD) | 치료일 인센티브 · fixed_incentive taxonomy source | TBU | |
| 이카운트(eCount) | 코드/부서코드/사원명/금액 export | 비동기 |
앱 전체 플로우 (Sheet → Commit → Ledger)
확정(commit)은 정본 생성 경계 — destructive. AI/검증은 모달 직전까지만, 실행은 사람.
앱 개요 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | • 조건1 [HR_ADMIN] / 조건2 [SUPER_ADMIN] 인증 시에만 화면을 노출하는 진입 게이트 • 진입 시: 인증 세션 확인 후 워크스페이스 진입 - CASE01 [미인증]: /hr-system/signin 리다이렉트 | 인증 세션 | 진입 게이트 |
| 01 | 초기 상태 | - | • 진입 직후 최근 작업 시트로 자동 이동시키는 기능 • 진입 시: /sheets/{id}로 자동 리다이렉트 - CASE01 [최근 시트 없음]: 동선 미확정 | [[HBHR100_시트 워크스페이스 (공통 Shell)]] | TBU: 최근 시트 없을 때 진입 동선 |
| 10 | 글로벌 헤더 | - | • 좌측 "hereby HR 급여 관리" 로고, 우측 계정·알림·로그아웃을 담는 전 화면 고정 헤더 | — | 전 화면 고정 |
| ㄴ11 | 계정 | Button | • 로그인 계정 ID를 표시하는 헤더 버튼 • 클릭 → TBU | — | TBU: 표시 값·클릭 동작 |
| ㄴ12 | 알림 | Button | • "알림"을 표시하는 헤더 버튼 • 클릭 → TBU | HBNS 연계 (추정) | TBU: 상세 동작 |
| ㄴ13 | 로그아웃 | Button | • 현재 세션을 종료하는 헤더 버튼 • 클릭 시: 세션 종료 후 /hr-system/signin (추정) | 00 진입 조건 | |
| 20 | 기간 네비게이터 | - | • "이전 달" / Month·Year 스피너 / "다음 달" / "이번 달" 빠른 이동으로 조회 월을 바꾸는 기능 • 이동 시: period 변경 → 시트 리스트 재로드 - CASE01 [period 값 없음]: 당월 기본 | period 변경 시 시트 리스트 재로드 | 월 단위 |
| 30 | 좌측 사이드바 | - | • "폴더" / "휴지통(🗑)" 탭, "▸▾" 접기, 시트 항목 "{이름} '26.7" + 건수를 담는 사이드바. 폴더 상단에 "폴더 관리" 액션 노출(7/21 신규) | [[HBHR108_폴더·휴지통 사이드바]] | 상세 위임 |
| ㄴ31 | 폴더 트리 | List | • 폴더 10종((미분류) / eCount 연동 / 급여대장 / 문서·서명 / 병동 / 시트 에러 발생 케이스 / 연장근무 / 인센티브 / 출퇴근 / 치료실 인센티브 / 휴직·퇴사)을 나열하는 트리 • 클릭 시: 해당 시트 로드 - CASE01 [폴더 없음]: "(미분류)" fallback - Empty: [[HBHR100_시트 워크스페이스 (공통 Shell)]] 참조 | 해당 시트 로드 | "그룹"→"폴더" 용어 확정 |
| 40 | 스프레드시트 워크스페이스 | - | • 파일/편집/보기/삽입/데이터 툴바 + 데이터 그리드로 구성된 Excel-like 워크스페이스. Shell 골격은 [[HBHR100_시트 워크스페이스 (공통 Shell)]], 시트 유형별 사양은 개별 화면 참조 | [[HBHR100_시트 워크스페이스 (공통 Shell)]] / HBHR200~270 | Excel-like |
| 50 | 화면 목록 (I.A.) | - | • HBHR100 시트 워크스페이스(공통 Shell) 하위에 HBHR101~109 및 HBHR200~270 시트 유형 화면을 배치하는 정보구조 | 앱 하위 화면 | 트리 [[HBHR100_시트 워크스페이스 (공통 Shell)]] |
| 60 | cross-app 연결 | - | • HBMM(calculator) · HBTM(근태 source) · HBNS(명세서 발송) · HBMD(치료 인센티브) · eCount(export) 연동 지점 | Data I/O 외부 통합 참조 |
AI 접점 요약
앱 전반의 AI 진입 표면은 시트 컬럼 수식(ƒ) = 자연어 진입점이며, backbone은 Module Manager Calculator Registry의 outputKeys + parameterSchema + sourceTables + targetTables다. 핵심 룰: AI는 Sheet / preview / preflight까지만 관여, commit·PayrollLedger 변경은 항상 사람이 실행.
| AI Skill | 트리거 위치 | 동작 | 안전 경계 | 우선도 |
|---|---|---|---|---|
| formulaFromNL | 컬럼 ƒ 수식 (HBHR200) | 자연어 → 컬럼 수식/계산기 바인딩 제안 (자동 삽입 X) | Sheet 단계, commit 무관 | ★★★★★ |
| recalcExplain | 재계산 diff 뷰 (HBHR203) | 변경 전/후 차액에 "왜 변동됐는지" 자연어 설명 부착 | 읽기 전용 | ★★★★★ |
| commit preflight | 전체 확정 직전 (HBHR201) | 음수/±3σ 이상치/4대보험 config "미사용" 검증 후 경고 | 확정 차단·경고만, 실행은 사람 | ★★★★☆ |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
| CASE01 [미인증 진입] | /hr-system 직접 | /hr-system/signin 리다이렉트 | |
| CASE02 [HR_ADMIN 진입] | 인증 세션 | 최근 시트 /sheets/ | |
| CASE03 [전체 확정] | "전체 확정" 클릭 → 확인 | 정본 레코드/원장 생성 | payroll:confirm (추정) |
알려진 버그 후보 (노션 등록)
| ID | 위치 | 증상 | 상태 |
|---|---|---|---|
| BL-001 | [[HBHR106_데이터 메뉴]] | "승인 행 모두 지급 처리" 클릭 시 카운트·상태 불변, 에러 피드백 부재 — 무음 실패 | 노션 등록됨 |
| BL-002 | [[HBHR109_행 정보 패널·검색]] | 급여명세서 실수령액 0원 행에서 "직원에게 발송" 클릭 시 무반응(성공/실패 피드백 부재) | 노션 등록됨 |
Open Question
- 급여 항목 컬럼 전체 목록 (기본급/수당/공제/실수령) = TBU
- 임금명세서 발급 동선 (HBNS 연계) = TBU
- 권한 토큰 실제 키 (payroll:* 추정) = TBU
- PayrollRecord status enum = draft→approved→confirmed→paid 확정 (published 미사용; 생성 직후 기본
draft, 최종paid) — (TC 확정: payroll.test.ts: filter by status) - BL-001 / BL-002 무음 실패 근본 원인 (owning docs 106/109) = TBU
- 최근 작업 시트가 없을 때의 진입 동선 (01) = TBU
- 계정 버튼(11) 표시 값 = TBU
- 알림 버튼(12) 상세 동작 = TBU