HBEA400_결재 허브
(Hereby) 직원 앱 > 결재 허브
| 앱 | 직원 앱 (Hereby Works, 포트 4002) |
| 대상 사용자 | 조건3 [EMPLOYEE] (self scope 인증 세션) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_결재워크플로우]] · mobile/approval |
| Status | review |
| Owner | 카나 |
개요
결재 허브는 직원 앱 하단 탭바 "결재" 탭의 진입 화면으로, 직원 셀프서비스 신청을 4개 서브탭("휴가신청" / "근무" / "인센티브" / "서류관리")으로 통합한 신청 허브다. 4개 서브탭은 공통 골격(상단 서브탭 스위처 + 상태 필터 칩 + 신청 내역 리스트 + 우하단 FAB(+))을 공유하며, 세부 화면 사양은 각 하위 문서를 참조한다(중복 정의 금지). 모든 신청은 self scope 토큰으로 대기중 상태 생성되고, 승인/반려/취소는 팀장 결재([[HBTM01_TeamManager_팀결재워크스페이스]]) 큐가 처리한다. 4서브탭은 HBTM 승인 큐와 1:1 대응한다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-08-06 | 카나 | PM | 휴가 신청 항목 단일화 반영(59e955d) |
| 2026-08-11 | 카나 | PM | 인센티브 자가 등록·주말 당직 세션 요청 반영(PR #533) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | 직원 인증 세션 (self scope) | /employee-app/signin 리다이렉트 | 미인증 진입 차단 |
| $ | 클라이언트 상태 (tabKey) | 기본값 "휴가신청" | 4서브탭 스위처 |
| $ | 서브탭별 *Request[] (self) | 각 서브탭 Empty 문구 | 서브탭 문서 참조 |
| $ | status enum ↔ *Request.status 집계 | 카운트 0은 라벨만 (숫자 미표기) | census 예 "전체 3 / 대기중 2 / 취소 1" |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 서브탭 전환 | tabKey | 클라이언트 상태 (재조회) | self |
| 상태 필터 | statusKey | 리스트 필터 (전체/대기중/승인/반려/취소) | self |
| 신청 작성 (FAB) | 서브탭별 폼 오픈 | 각 화면 procedure (sdk.leave / overtime / fieldwork.request(), 추정) | self |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| 팀결재 [[HBTM01_TeamManager_팀결재워크스페이스]] | 신청(대기중) → 승인/반려/취소 상태 write-back | 비동기 | 4서브탭 = HBTM 승인 큐 1:1 |
| Admin 유형/근태 [[HBAD261_유형 설정 (연장근무·외근·휴가)]] | 연장/외근/휴가 유형 taxonomy source | 동기 | select 옵션 원천 |
화면 플로우 (Mermaid 의무)
결재 허브 공통 구조 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [직원 인증] 세션 시 노출. CASE01 [미인증] → /employee-app/signin 리다이렉트 | 인증 세션 (self scope) | |
| 01 | 초기 상태 | Output | 하단 탭바 "결재" 진입 시 기본 서브탭 CASE01 [휴가신청] 활성. 근무·인센티브·서류 서브탭은 클릭 시 로드 | $ | |
| 10 | 서브탭 스위처 | Tab | • 상단 4서브탭 "휴가신청" / "근무" / "인센티브" / "서류관리" 간 전환 기능 • 클릭 → 해당 서브탭 전환(내역·필터 재로드) | HBEA410 / HBEA420 / HBEA430 / HBEA440 | 4서브탭 = HBTM 승인 큐 1:1 |
| ㄴ11 | 휴가신청 탭 | Tab | • 연차현황 카드 + 휴가 신청 내역 서브탭 • 클릭 → [[HBEA410_휴가신청]] | LeaveRequest | |
| ㄴ12 | 근무 탭 | Tab | • 연장·휴일/외근 신청 + 보고서 요약 서브탭. 내역 필터 칩 4종 • 클릭 → [[HBEA420_근무 신청 (연장·휴일/외근)]] | OvertimeRequest / FieldWorkRequest | [[HBEA421_보고서 제출]] 연계 |
| ㄴ13 | 인센티브 탭 | Tab | • 월별 인센티브 조회 서브탭(당월 "2026년 7월 합계 0건") • 상단에 "주말 당직 치료 세션 신청" 진입 버튼(안내 "당일 항목별 건수와 당직 인원을 적어 상신해요") — 세션 신청 모달로 이동 • 클릭 → [[HBEA430_인센티브]] | IncentiveRecord · TreatmentSessionRequest | 주말 당직 세션 신청 진입점(77da351) |
| ㄴ15 | 주말 당직 치료 세션 요청 | Button | • 주말 당직 근무의 치료 세션을 항목별 건수·당직 인원으로 상신하는 신청 유형(전자결재, 인센티브 탭 상단) - 모달 제목 "주말 당직 세션 신청" · 입력: "근무일" / "치료 항목별 건수"(항목·단가·건수 행) / "당직 인원"(본인 포함, 선택 순서대로 잔여 원이 배분돼요) / "메모"(선택) - 안내 "병원분·인당 분배 금액은 승인 시 자동 계산돼요. 승인 전에는 정산에 반영되지 않아요." • 상신 시: 대기중 세션 요청 생성 → 팀장 승인/반려([[HBTM01_TeamManager_팀결재워크스페이스]]) · 승인 시 세션 생성·정산 반영 | TreatmentSessionRequest · [[HBEA430_인센티브]] | 신설 (코드 반영: 77da351) · 신청→승인 플로우(자동 판별 아님) |
| ㄴ14 | 서류관리 탭 | Tab | • 증명서 제출/요청 목록 서브탭 • 클릭 → [[HBEA440_서류관리]] | DocumentRequest | |
| 20 | 상태 필터 칩 | Filter | • 신청 내역을 상태로 거르는 가로 칩 5종+카운트 "전체 3" / "대기중 2" / "승인" / "반려" / "취소 1". 카운트 0은 라벨만(숫자 미표기) • 클릭 → 목록 필터 적용, 선택 칩 강조 | status enum ↔ *Request.status | 휴가신청 탭 census 예시. TBU: 상태 enum 원문 값(대기중=pending 등) |
| ㄴ22 | 근무 탭 내역 필터 칩 | Filter | • 근무 탭 전용 신청 종류 필터 "전체 / 연장·휴일 / 외근 / 보고서". 인센티브 탭은 상태 칩 "전체 / 대기중 / 승인 / 반려 / 취소" 사용 • 클릭 → 신청 종류 필터 | [[HBEA420_근무 신청 (연장·휴일/외근)]] | 근무·인센티브 탭 칩 상이 |
| 30 | 신청 내역 리스트 | List | 서브탭별 신청 행. 필터 칩 결과에 종속. 행 구조·인터랙션은 각 서브탭 문서 참조 | 각 화면 HBEA410-440 | TBU: ${requests} 부재 → 리스트 비우고 Empty / ${status_counts} 부재 → 칩 라벨만(카운트 hide) / 로드 실패 UI 미확인(무반응이면 버그 후보) |
| ㄴ30-E | Empty | Text | 휴가신청 "휴가 신청 내역이 없어요" / 근무 "근무 신청 내역이 없습니다" / 인센티브 "인센티브 내역이 없어요." (원문 카피) | 각 서브탭 | 문구 서브탭별 상이 |
| 40 | 신청 작성 FAB | Button (+) | • 결재 화면에서 등록 가능한 항목을 한 곳에 모은 신규 등록 바텀시트를 여는 우하단 플로팅 "+"(접근성 이름 "새 신청", 안내 "결재로 등록할 수 있는 항목이에요."). 조건3 [EMPLOYEE] self scope 신청만(승인 mutation 없음). 서브탭과 무관하게 동일 시트 • 클릭 → 등록 항목 분기 - 휴가: 단일 "휴가" 신청 폼 모달 → [[HBEA410_휴가신청]] - 근무: "연장·휴일 근무 신청" / "외근 신청" → [[HBEA420_근무 신청 (연장·휴일/외근)]] - 인센티브: "인센티브 등록"(안내 "오늘 실적을 항목·건수로 등록") → CASE01 [설정 토글 ON]: 노출 · CASE02 [OFF]: 미노출 - 서류: "서류 제출·요청" → [[HBEA440_서류관리]] | 각 화면 신청 폼 · organization_parameters(incentive.self_registration) | 인센티브 자기 등록 진입점은 조직 설정 토글 ON일 때만 노출(db3e9b3·3374b53, incentiveSelfRegEnabled 게이트) [[HBAD270_설정 (조직 설정·내 정보)]]. 휴가 진입은 단일 "휴가" 버튼으로 통합(59e955d), 휴가 유형 선택은 HBEA410 모달 내 select로 이동 |
| 50 | 신청 → 결재 → 보고 흐름 | - | STEP1 [신청] → STEP2 [결재] → STEP3 [보고] 3단계. 서사는 화면 플로우 mermaid 참조. 직원앱은 self scope 신청·조회만 | [[HBTM01_TeamManager_팀결재워크스페이스]] | [[POL_결재워크플로우]] |
상태 / 권한 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
| CASE01 [미인증 진입] | 결재 탭 직접 진입 | /employee-app/signin 리다이렉트 | 조건1 인증 필요 |
| CASE02 [직원 진입] | 인증 세션 | 기본 서브탭 "휴가신청" 표시 | |
| CASE03 [서브탭 전환] | 서브탭 스위처 클릭 | 해당 서브탭 내역·필터 재로드 | |
| CASE04 [신청 작성] | FAB(+) → 폼/액션시트 제출 | 신청 record 대기중 생성, HBTM 결재 큐 인입 | self scope 토큰 |
| 조건3 [EMPLOYEE] | 전 서브탭 | 조회·신청만, 승인/지급 mutation 불가 | HBTM 소관 |
Open Question
- 상태 필터 칩 카운트 산정 범위(전체 기간 vs 조회 월) 및 "전체" 정의(취소 포함 여부). TBU.
- 상태 enum 원문 값(대기중=pending 등 매핑) 및 취소 트리거(직원 self-cancel vs 팀장 취소 — 휴가는 관리자 결재, 외근은 직원 즉시 취소로 상이). TBU.
- 서브탭별 배지/알림 미읽음 카운트 노출 여부. TBU.
- 리스트 로드 실패 시 에러 UI(재시도/토스트). 라이브 미검증. TBU.