Skip to content

HBEA400_결재 허브 ​

(Hereby) 직원 앱 > 결재 허브

앱직원 앱 (Hereby Works, 포트 4002)
대상 사용자조건3 [EMPLOYEE] (self scope 인증 세션)
프로토타입TBU
관련 정책[[POL_결재워크플로우]] · mobile/approval
Statusreview
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카나PMGC700 깊이 재작성
2026-07-21카나PM셀 스타일 확정판 적용 (콸 승인)
2026-08-06카나PM휴가 신청 항목 단일화 반영(59e955d)
2026-08-11카나PM인센티브 자가 등록·주말 당직 세션 요청 반영(PR #533)
2026-10-07카나PMPR #1035 반영: 결재 허브 「신청·결재」/「내 신청·결재 현황」 2탭 재편(05 신설) + 근무 묶음 「정정」 카드·상세·취소. 구 4서브탭 행은 존치(재편 실사 대기) — 커밋 근거, 라이브 실사 이월(TBU)
2026-10-08카나PM낮 스윕 라이브 실사(웹 /employee-app) — 2탭 라벨·「신청·결재」 탭 구성(연차현황 카드 + 결재 신청 6항목 원문)·「내 신청·결재 현황」 상태 칩 4종("검토 중/예정/반려/전체")·묶음 섹션 패턴 실측(05 TBU 해소, 20 칩 구성 교체 기록). 「정정」 카드는 정정 요청 데이터 없어 미노출 — TBU 유지
2026-10-09카나PMPR #1122(결재선, MED-900) 반영 + 라이브 실사(웹): 「신청·결재」 탭 재배치 — 주말 당직 치료 세션이 「결재 신청」 묶음 마지막 줄로 통합·「결재선」 묶음 신설(06, 나의 결재선 진입, ba8bff72). 결재함·알림 딥링크가 결재선 종류(치료 세션·출퇴근 정정) 인지(8e27fa13·1dcffae9)
2026-10-10카나PM(10/9 머지분) PR #1127(MED-959) 반영: 승인 휴가 「취소 신청 중」 배지·「결재할 문서」 내 「휴가 취소 신청 {n}건」 별도 섹션·승인/거절 처리(07 신설) · PR #1130(MED-964) 반영: 결재선 단계 결재자 확인 여부 「알림 보냄 · 아직 확인 전」·미확인 재알림(08 신설) — 커밋 근거, 직원 앱 실사 TBU(승인 휴가·결재 단계 데이터 없음)
2026-10-14카나PM(10/13 머지분, #1215 — 프로덕션 배포) 결재함 행 승인/반려·목록형 재편·승인 확인창 결정 힌트(09 신설, 22a9454·a04636b) · 결재한 문서 기간 필터·헤더 정리(09-1 신설, 6f8d869) — 10/14 라이브 실사: 「휴가 취소 신청 1건」 그룹(제목+주황 건수)+목록형 행+[거절]·[취소 승인] 행 버튼, 기간 필터 줄(1주일 기본/이번 달/지정 기간)+빈 문구 「이 기간에 결재한 문서가 없어요.」 실측. 일반 결재 [반려]·[승인] 행 버튼은 대기 문서 0건 TBU - 카나/PM

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 [휴가신청] 활성. 근무·인센티브·서류 서브탭은 클릭 시 로드$
05결재 탭 2분할 (10/7 개편)Tab• (10/7, #1035) 결재 허브 상단이 두 탭으로 재편: 「신청·결재」 / 「내 신청·결재 현황」 — 구 하위 탭 4종(휴가·근무·인센티브·서류) 체계를 대체(직원 앱 AI 안내문도 이 두 탭 기준으로 경로 갱신, 49fd31c7 employee-app-v3)
• 「내 신청·결재 현황」 근무 묶음에 「정정」 카드(출퇴근 정정·기록 추가 요청) · 상세 · 요청 취소(afd9bb68, [[HBEA200_근무 탭 (홈)]] 27)
• 신청서 공통: 칸 아래 오류·도움·초안(d01193ac 요약 — 상세 [[HBEA410_휴가신청]]), 반려 상세 직행은 홈 「지금 할 일」에서(a65248b9)
• 아래 10~ 행(4서브탭 체계)은 구 구조 기준 — 새 2탭 배치 실사 후 재편 예정
전 서브탭 문서신설 (#1035) · 라이브 실사 확인(2026-10-08 낮, 웹): 탭 원문 "신청·결재" / "내 신청·결재 현황" 일치 · 「신청·결재」 탭 = 연차현황 카드("{n}일 남음 (올해 {m}일 중 {k}일 사용)") + 「결재 신청」 목록 "휴가 — 연차·병가·경조 등 휴가 신청" · "연장·휴일 근무 — 평일 연장, 야간, 토요일·공휴일 근무" · "외근 — 거래처 방문, 관공서 업무 등 사외 근무" · "인센티브 등록 — 오늘 실적을 항목·건수로 등록" · "서류 제출·요청 — 증명서 요청, 제출 서류 업로드" + "주말 당직 치료 세션 신청 — 당일 항목별 건수와 당직 인원을 적어 상신해요" · 「내 신청·결재 현황」 탭 = 상태 칩 4종 "검토 중/예정/반려/전체"(+건수) + 묶음 섹션 "검토 중인 휴가 {n}건" 카드 목록(항목·날짜·상태 배지) · 「정정」 카드는 해당 데이터 없어 미노출(TBU 유지) · (10/8, #1122) 「신청·결재」 탭 재배치 라이브 재실사(10/9): 「결재 신청」 묶음 6줄 — "휴가 — 연차·병가·경조 등 휴가 신청" / "연장·휴일 근무" / "외근" / "인센티브 등록" / "서류 제출·요청" / "주말 당직 치료 세션 — 당직 날 치료 항목별 건수 · 인원 신청"(묶음 마지막 줄로 통합, 부제 교체, ba8bff72) + 그 아래 「결재선」 묶음(06)
06결재선 묶음 (나의 결재선 진입)Section• (10/8, #1122) 「신청·결재」 탭에서 결재 신청 묶음 아래 회색 띠로 구분한 별도 묶음 「결재선」 — 줄 1개 "나의 결재선 — 자주 쓰는 결재자 순서를 저장하고 기본으로 두기"(라이브 원문, 10/9 실사)
• 클릭 → 「나의 결재선」 2depth 페이지(공통 헤더): 상단 고정 「새 결재선」 버튼 + 저장된 결재선 목록. Empty "저장한 결재선이 없어요 / 자주 쓰는 결재자 순서를 이름 붙여 두면 신청서에 바로 들어가요."(원문)
• 「새 결재선 / 결재선 수정」은 다른 신청서와 같은 풀레이어 팝업(2f3f6019): 이름 · 종류 드롭다운(결재선 사용이 켜진 종류만 — 라이브: 휴가/연장근무/외근/인센티브/치료 세션, 꺼진 출퇴근 정정 제외 실증) · "결재자 지정 · 고른 순서대로 차례로 확인해요(1~5명)" · 「기본으로 쓰기」("{종류} 신청서에 이 결재선이 자동으로 들어가요.") · 취소/저장
• CASE01 [병원 공통 설정 「직원이 결재자를 직접 고를 수 있어요」 OFF]: 서버가 나의 결재선 저장 거절, 묶음 숨김(8e27fa13)
ApprovalLine(개인) · [[HBAD245]](채번 제안: admin 결재선 설정)신설 (#1122, ba8bff72·cf5521c5·2f3f6019) · 라이브 실사 2026-10-09. 상세 화면은 HBEA450 채번 제안(신규 작성 대기)
07휴가 취소 신청 표시·결재 (MED-959)Feature• (10/9 머지, #1127) 「내 신청·결재 현황」 휴가 카드: 승인된 휴가에 취소 신청이 걸려 있으면 상태 라벨 아래 노란 배지 「취소 신청 중」(approval-leave-cancel-requested)
• 「결재할 문서」 탭: 결재선 단계 목록과 별도 섹션 「휴가 취소 신청 {n}건」 — 취소 신청은 결재선(MED-900) 밖이라 휴가 승인 권한이 있는 결재자 누구나 처리. 건별 카드에서 취소 범위·사유 확인 후 승인/거절
 - 승인 시: 휴가 취소(시작 전 전체 / 시작 후 오늘부터 남은 날만 — 종료일 전날로 단축), 차감 연차 복원, 근무표 원복, 신청자 알림
 - 거절 시: 휴가는 승인 상태 유지, 거절 사유가 신청자 상세에 표시
• 신청·철회 UI는 [[HBEA410_휴가신청]] 취소 신청 행 참조
leave_requests.cancelRequestedAt · 마이그레이션 1966 · [[HBTM210_연차·휴가 승인 큐]] · [[HBAD251_연차 현황·결재]]신설 (#1127) · 커밋+가이드 fragment 근거 — 이 계정에 승인된 휴가 없어 실사 TBU
08결재자 확인 여부 표시 (MED-964)Rule• (10/9 머지, #1130) 결재선 단계 공용 패널(ApprovalSteps)에 결재자가 문서를 열었는지 표시 — 신청자 화면에는 재알림 발송 뒤 **「알림 보냄 · 아직 확인 전」**이 보임(admin 결재선 설정 「확인 안 된 결재 다시 알림」 {n}시간, 0=안 보냄 — 10/10 admin 쪽 라이브 실증, [[HBAD245]] 채번 제안 영역)
• 차례가 된 결재자가 설정 시간 안에 문서를 열지 않으면 한 번 더 알림
ApprovalSteps(공용) · approvalPolicy.reminderHours · 마이그레이션 1967신설 (#1130) · 직원 앱 쪽 표시는 커밋 근거 TBU(기존 신청에 결재 단계 없음)
09결재할 문서 — 행 승인/반려·목록형 (10/13)Feature• (10/13 머지, #1215 22a9454 — 프로덕션 배포) 「결재할 문서」 서브탭의 휴가 취소 신청·결재할 문서를 카드 대신 줄 묶음으로 재편 — 그룹 제목 b3 + 주황 건수 · 묶음 사이 회색 띠 · 줄 사이에만 구분선 (10/14 실측: 「휴가 취소 신청 1건」 + 행 「휴가 취소 — {이름} ({사번}) / {유형} · {날짜} · 전체 취소 / 사유: {사유}」)
• 문서 줄 아래 행 버튼 노출 — 일반 결재 = [반려] · [승인](반려 왼쪽·승인 오른쪽 끝), 휴가 취소 신청 = [거절] · [취소 승인](10/14 실측). 줄 클릭 = 상세 진입(버튼은 @click.stop), 상세에 「>」 표시 추가
 - 승인 버튼: 확인창 「{이름} 님의 휴가를 승인할까요?」(조사 core josa) 1회 — 상세를 보지 않고 누르는 자리 보호. (a04636b) 확인창에 결정 힌트 1줄(approvalDecisionHint): 「승인하면 {다음 결재자} 님에게 넘어가요」 / 「최종 승인돼요」 / 대신 처리면 「{이름} 님 대신 처리돼요 · …」
 - 반려 버튼: 사유 입력이 확인 역할
• 처리 규칙은 decideInboxItem 단일(상세의 decideInbox도 같은 함수)
decideInboxItem · 07신설 (#1215) · 10/14 행 버튼·목록형 실측([거절]·[취소 승인]), 일반 결재 [반려]·[승인]은 대기 문서 0건 TBU
09-1결재한 문서 — 기간 필터 (10/13)Filter• (10/13 머지, 6f8d869) 「결재한 문서」 서브탭 목록 위 기간 줄: 1주일(기본) · 이번 달 · 지정 기간(날짜 범위 입력, 10/14 실측 「2026.10.07 ~ 2026.10.14」) — 결재한 날(조직 시간대) 기준 서버 필터(approvalFlow.decided from/to, 끝 날짜 포함 — 화면만 거르면 최근 100건 밖 기간이 조용히 빠지는 문제 방지)
• 기간을 빠르게 바꿔도 늦게 온 앞선 응답이 새 목록을 덮지 않음(요청 번호 가드)
• Empty: 「이 기간에 결재한 문서가 없어요.」(10/14 실측)
approvalFlow.decided(from/to)신설 (6f8d869) · 10/14 라이브 실측
10서브탭 스위처Tab• 상단 4서브탭 "휴가신청" / "근무" / "인센티브" / "서류관리" 간 전환 기능
• 클릭 → 해당 서브탭 전환(내역·필터 재로드)
HBEA410 / HBEA420 / HBEA430 / HBEA4404서브탭 = 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 예시 — ⚠ 2탭 재편(05) 후 라이브(10/8 낮)는 칩 4종 "검토 중/예정/반려/전체"로 교체 확인(구 "전체/대기중/승인/반려/취소" 5종 아님). TBU: 상태 enum 원문 값 매핑
ㄴ22근무 탭 내역 필터 칩Filter• 근무 탭 전용 신청 종류 필터 "전체 / 연장·휴일 / 외근 / 보고서". 인센티브 탭은 상태 칩 "전체 / 대기중 / 승인 / 반려 / 취소" 사용
• 클릭 → 신청 종류 필터
[[HBEA420_근무 신청 (연장·휴일/외근)]]근무·인센티브 탭 칩 상이
30신청 내역 리스트List서브탭별 신청 행. 필터 칩 결과에 종속. 행 구조·인터랙션은 각 서브탭 문서 참조각 화면 HBEA410-440TBU: ${requests} 부재 → 리스트 비우고 Empty / ${status_counts} 부재 → 칩 라벨만(카운트 hide) / 로드 실패 UI 미확인(무반응이면 버그 후보)
ㄴ30-EEmptyText휴가신청 "휴가 신청 내역이 없어요" / 근무 "근무 신청 내역이 없습니다" / 인센티브 "인센티브 내역이 없어요." (원문 카피)각 서브탭문구 서브탭별 상이
40신청 작성 FABButton (+)• 결재 화면에서 등록 가능한 항목을 한 곳에 모은 신규 등록 바텀시트를 여는 우하단 플로팅 "+"(접근성 이름 "새 신청", 안내 "결재로 등록할 수 있는 항목이에요."). 조건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.