HBEA440_서류관리
(Hereby) 직원 앱 > 결재 허브([[HBEA400_결재 허브]]) > 서류관리
| 앱 | 직원 앱 Hereby Works (포트 4002) |
| 대상 사용자 | 조건1 [직원 인증] (self scope) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_결재워크플로우]] · [[POL_서류제출요청]] (참조만) |
| Status | review |
| Owner | 카나 |
개요
- 서류관리는 결재 허브([[HBEA400_결재 허브]]) "서류관리" 서브탭으로, 증명서 제출/요청을 목록으로 관리하는 self scope 표면이다.
- 목록 행은 {제출|요청} 구분 / 문서명 / 유형 / 일자 / 상태로 구성되며, 상태 배지는 "대기 중" / "승인" / "반려" / "취소" 4종이다.
- 라이브(2026-07-10 관리자 계정)는 리스트 전용 표면이다 — 직원 측 신규 제출 진입점(FAB) UI 미관찰, 행 상세 진입 없음, "대기 중" 상태 건에만 행 내 "취소" 버튼이 노출된다. 단 직원 self write 경로는 API 레벨에 실재한다 — 직원 본인이
employee.requestCertificate(reason)으로 증명서 발급을 직접 신청할 수 있다(🔴 정정: 구 "요청은 관리자 발신 전용" 폐기 — TC 확정: 01:1.14 / 02:2.12). 승인은 팀장teamManager.approveCertificates(ids[])(PENDING 큐) 또는 adminemployee.approveCertificate(id)→certificateNumber발급. - 단, FIG 정책([[POL_서류제출요청]], document.md)에는 [+]버튼 → "서류 제출/요청" 바텀 팝업(제출/요청 탭)이 정의되어 있다. 정책상 예정 표면과 라이브 미노출의 차이는 비고·OQ에 정직 표기한다(정책은 참조만, 사양은 라이브 관찰 우선). 공통 서브탭 골격은 [[HBEA400_결재 허브]]을 참조한다(중복 정의 금지).
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 (리스트 전용·FAB 없음 확정) |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 ("대기 중" 건 행내 취소) |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-21 | 카나 | PM | 🔴 정정: 직원 self write 실재(employee.requestCertificate)·승인 주체 확정 (TC 정본, 콸 승인) |
| 2026-08-18 | 카나 | 라이브 재검증 정정 | ①서류 목록 Empty 원문 확정 = "제출된 서류가 없어요"(0건 계정 실관찰, TBU 소진). ②[+] "서류 제출·요청" 진입점 라이브 반영 확인 — 결재 허브 FAB "새 신청" 액션시트에 "서류 제출·요청"(설명 "증명서 요청, 제출 서류 업로드") 항목 실존(정책→라이브 반영) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | DocumentRequest[] / CertificateIssuance[] (self) | Empty (문구 TBU — 라이브 캡처 다건 상태) | 본인 서류 목록 (제출/요청 혼합) |
| ㄴ방향 | DocumentRequest.direction (제출/요청) | hide | 행 라벨 "제출" / "요청" |
| ㄴ문서명 | DocumentRequest.fileName | hide | 업로드 파일명 원문 |
| ㄴ유형 | DocumentRequest.typeId → 유형명 | hide | "건강검진결과" 등 |
| ㄴ일자 | DocumentRequest.issuedAt (추정) | hide | 제출/요청/발급 일자 |
| ㄴ상태 | DocumentRequest.status | hide | 대기 중/승인/반려/취소 |
| $ | 증명서 유형 taxonomy (Admin/HR 커스텀) | hide | 제출/요청 팝업 유형 선택지 (정책상 예정) |
| $ | DocumentRequest.rejectReason | hide | "반려" 건 반려사유(제출자도 확인, 정책) |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 제출 취소 ("대기 중" 건 한정) | documentId | sdk.document.cancel() (추정) | document:cancel.self |
| 상태 필터 선택 | statusKey (추정) | 클라이언트 필터 (재조회 여부 TBU) | document:read.self |
| 증명서 발급 신청 (self) | reason | employee.requestCertificate(reason) — 직원 직접 신청 실재 (생성 status=PENDING → 팀장/admin 승인 → certificateNumber 발급) | (TC 확정: 01:1.14 / 02:2.12) |
| 신규 제출/요청 ([+] 팝업) | typeId·file·memo | sdk.document.submit() / request() (추정) | document:write.self |
| ㄴ 라이브 현황 | — | 직원 측 [+] 진입점 UI 미관찰 (동선 TBU — API self write는 위 행처럼 실재) | (정책상 예정, §비고) |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| Admin 문서 양식 ([[HBAD241_문서 양식]]) | 증명서 양식·유형 원천 (추정) | 비동기 | 유형 taxonomy source |
| 팀결재/HR ([[HBTM01_TeamManager_팀결재워크스페이스]]) | 요청/제출 승인/반려 | 비동기 (write-back) | 중간관리자 이상 결재 |
| 관리자 발신 요청 | 증명서 발급 요청 → 직원 리스트 "대기 중" 유입 | 비동기 | 요청 방향 유입원 |
화면 플로우 (Mermaid 의무)
라이브(관리자 계정)는 리스트 전용 — [+] 신규 제출 진입점 미노출. "서류 제출/요청" 바텀 팝업은 FIG 정책([[POL_서류제출요청]])상 예정 표면(회색 노드)이며 라이브 미관찰
서류관리 서브탭 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [직원 인증] · 결재 허브 "서류관리" 서브탭 선택 시 노출. 조건2 [관리자 계정]도 동일 리스트 표면 | 인증 세션 (self) | 2026-07-10 라이브(관리자 djcola814) 확정 |
| ㄴ00-1 | 미인증 분기 | - | CASE01 [미인증] /employee-app/signin 리다이렉트 | 인증 세션 | |
| 01 | 초기 상태 | Output | 서브탭 진입 시 본인 서류 목록(${documents}) 렌더. 제출/요청 혼합, 시간 역순(추정) | $ | census 다건 |
| 10 | 서류 목록 | List | 본인 서류 행 목록. 상태 필터 칩 공통([[HBEA400_결재 허브]]). self scope 고정(타인 조회 불가) | DocumentRequest[] / CertificateIssuance[] | TBU: 로드 실패 시 무반응 여부(버그 후보) |
| 10-E | ㄴ Empty | Text | 목록 0건 시 Empty 문구 = "제출된 서류가 없어요" | ${documents} 부재 | ✅ 2026-08-18 원문 확정(0건 계정 실관찰) |
| 20 | 신규 제출/요청 진입점 | - | • 결재 허브 FAB "새 신청" 액션시트에 "서류 제출·요청"(설명 "증명서 요청, 제출 서류 업로드") 항목 실존 — 2026-08-18 라이브 확인 • 직원 self write API employee.requestCertificate(reason) 실재 (status=PENDING 생성) | employee.requestCertificate | ✅ 2026-08-18 진입점 라이브 반영 확인 (구 "docFab=false, 미관찰" 갱신) |
| ㄴ21 | 정책 예정 표면 | - | FIG 정책([[POL_서류제출요청]])상 [+]버튼 → "서류 제출/요청" 바텀 팝업(제출/요청 탭). 2026-08-18 라이브 반영 — FAB 액션시트 "서류 제출·요청"으로 진입점 노출됨 | [[POL_서류제출요청]] | ✅ 정책→라이브 정합 |
서류 목록 행 사양표 (별도 명세)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 10 | 목록 행 | Row | • 1행 = {제출|요청 구분} / {문서명} / {유형} / {일자} / {상태} • 클릭 → 무반응 (행 상세 진입 없음, 라이브 확정) | DocumentRequest (direction·fileName·typeId·issuedAt·status) | census 행 구조 |
| ㄴ11 | 제출/요청 구분 | Badge | "제출"(직원 서류 업로드) / "요청"(증명서 발급 요청) 라벨 | DocumentRequest.direction | census 원문. 정책: 2026.05.26↑ 요청 라벨 없는 케이스([[POL_서류제출요청]]) |
| ㄴ12 | 문서명 | Text | 업로드/발급 파일명 원문. 예 "[NewYork]SERVICE CONTRACT-example 복사본.docx" | DocumentRequest.fileName | census 원문. 값없음: 요청 건 미첨부 시 hide(추정) |
| ㄴ13 | 유형 | Text | 유형 원문 나열: "건강검진결과" / "재직증명서" / "경력증명서" / "자격증사본" / "급여확인서" / "개인정보 처리방침" | [[HBAD241_문서 양식]] taxonomy (추정) | census 원문. TBU: taxonomy 종속 vs 앱 고정 |
| ㄴ14 | 일자 | Date | 제출/요청/발급 일자. 예 "4월 16일". census 행 "{유형} | {일자} {상태}" | DocumentRequest.issuedAt (추정) | census 원문 |
| ㄴ15 | 상태 | Badge | • 상태 배지 원문 4종: "대기 중" / "승인" / "반려" / "취소" - CASE01 [대기 중]: 결재 전(ㄴ16 취소 노출) - CASE02 [승인]: 중간관리자↑ - CASE03 [반려]: 반려사유 제출자 확인(정책) - CASE04 [취소]: 제출·요청자 취소 | DocumentRequest.status | census 원문 4종 · [[POL_서류제출요청]] |
| ㄴ16 | 취소 버튼 | Button | • "대기 중" 행에만 노출(타 상태 행 없음). 본인 self만 취소 • 클릭 → 즉시 실행, 성공: 상태 대기 중 → 취소, 행내 버튼 소멸 | DocumentRequest.status (대기 중 → 취소) | ea5.json "대기 중" 행 "취소" 인접 확정. TBU: 컨펌 다이얼로그·취소 실패 무반응 여부 |
서류 제출/요청 바텀 팝업 사양표 (정책상 예정 — 라이브 미노출)
라이브 미관찰: 이 표는 FIG 정책([[POL_서류제출요청]], document.md) 정의 기준이며, 2026-07-10 라이브(관리자 계정)에는 [+] 진입점 자체가 없어 팝업 미노출. 도입 시 사양 = 정책 참조. 확정값(업로드 포맷·10MB)은 정책 출처 표기.
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | [+]버튼 클릭 → 바텀 팝업 노출 (정책상 예정). 라이브 미노출 ([+] 없음, docFab=false) | 20 신규 진입점 | 정책 예정 / 라이브 미관찰 |
| 10 | 팝업 타이틀 | Text | "서류 제출/요청" 원문. 제출/요청 2탭 구분 | — | [[POL_서류제출요청]] 원문 |
| 20 | 제출/요청 탭 | Tab | • 제출·요청 2탭 전환 • 클릭 → 탭 전환 - CASE01 [제출]: 파일 필수 - CASE02 [요청]: 파일 선택 | 40 파일 | 정책 탭 구조 |
| 30 | 유형 선택 | Select | • 서류 유형 선택 (설정 또는 HR 커스텀, 개발 필요). 제출·요청 공통 • 입력 → 유형 선택 반영 | ${document_types} ([[HBAD241_문서 양식]]) | 정책 |
| 40 | 파일 | Input Box (File) | • 파일 업로드. 제출 시 필수 / 요청 시 선택 • 입력 → 파일 첨부 | DocumentRequest.file | 포맷 PDF·HWP·DOCX·DOC·XLS·XLSX·PNG·JPG·JPEG / 최대 10MB. 출처 [[POL_서류제출요청]] document.md |
| 50 | 메모 | Input Box | • 메모 입력. 선택 사항, 제출·요청 공통 • 입력 → 메모 저장 | DocumentRequest.memo | 정책 (선택) |
| 60 | 제출/요청 실행 | Button | • 제출/요청 확정 실행 • 클릭 → 즉시 실행, 성공: DocumentRequest 생성(상태 대기 중) → 결재 큐 인입. 라이브 미검증 (진입점 없음) | sdk.document.submit()/request() (추정) | 정책 예정 |
연동 · 플로우
- 증명서 발급 흐름(TC 확정: 01:1.14 / 02:2.12): 직원
employee.requestCertificate(reason)직접 신청(PENDING) → 팀장teamManager.listCertificates({status:PENDING})큐 조회 →approveCertificates(ids[])일괄 승인, 또는 adminemployee.approveCertificate(id)단건 승인 →certificateNumber발급. 관리자 발신 요청 유입 경로도 병존(라이브 관찰). 직원 리스트 UI에서는 조회 + "대기 중" 건 행내 취소. - 상태 전이: 제출/요청(대기 중) → 승인(중간관리자↑) / 반려(사유 제출자 확인) / 취소(제출·요청자 self). "대기 중" 건만 self 취소 가능([[POL_서류제출요청]]).
- 급여명세서 교부(HBHR 전자서명)가 서류관리로 유입되는지 vs 급여명세서 모달([[HBEA530_급여명세서]])로만 유입되는지 = 경계 미확정(OQ).
- 정책 divergence: FIG 정책([[POL_서류제출요청]])상 [+] → "서류 제출/요청" 바텀 팝업(제출/요청 탭·유형·파일·메모)이 정의되나, 라이브(관리자 계정)에는 미노출. 정책 예정 vs 라이브 관찰 차이는 도입 시 재검증.
권한 · 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
| CASE01 [미인증 진입] | 서류관리 서브탭 직접 | /employee-app/signin 리다이렉트 | |
| CASE02 [직원/관리자 진입] | 인증 세션 (self) | 본인 서류 리스트(제출/요청 혼합) | 리스트 전용 표면 |
| CASE03 [대기 중 건 취소] | "대기 중" 행 "취소" 클릭 | 상태 대기 중 → 취소, 행내 버튼 소멸 | self 취소만 |
| CASE04 [반려 건 확인] | "반려" 행 | 반려사유 제출/요청자 확인 가능 | 정책 |
| CASE05 [신규 제출 시도] | [+] 진입점 탐색 | UI 진입점 미관찰 — 단 API employee.requestCertificate(self)는 실재 | 동선 TBU (TC 확정: 01:1.14) |
Open Question
- 증명서 유형 목록이 Admin 문서 양식([[HBAD241_문서 양식]]) taxonomy 종속인지, 앱 고정 리스트인지. TBU.
- 서류 상태 enum(제출/요청 · 대기 중/승인/반려/취소) 매핑. TBU.
승인 주체→ 확정: 팀장teamManager.approveCertificates(ids[])+ adminemployee.approveCertificate(id)병존, 승인 시 certificateNumber 발급 (TC 확정: 01:1.14 / 02:2.12). - 증명서 신청(
employee.requestCertificate)의 UI 진입 동선(숨김/타 표면/미구현 여부) = TBU. - 서류 목록 Empty 문구: 라이브 캡처가 다건이라 미관찰. 0건 계정 확보 후 원문 확정 필요. TBU.
- "대기 중" 건 취소 시 컨펌 다이얼로그 유무(외근 HBEA420은 컨펌 없이 즉시 취소 — 서류는 미검증). TBU.
- 정책 divergence: FIG 정책([[POL_서류제출요청]])상 [+] → "서류 제출/요청" 바텀 팝업(제출/요청 탭·유형·파일·메모)이 정의되나 라이브 미노출. 정책상 예정 표면 도입 시점·범위 = 미확정. 업로드 포맷(PDF/HWP/DOCX/DOC/XLS/XLSX/PNG/JPG/JPEG)·10MB는 정책 확정값(출처 표기).
- 급여명세서 교부(HBHR 전자서명) → 서류관리 유입 vs 급여명세서 모달([[HBEA530_급여명세서]]) 유입 경계. TBU.
- 리스트 표시 범위(당해/당월 등 기준) 미정 — 정책 "결정 필요 사항" 미해소([[POL_서류제출요청]]). TBU.