HBAD240_문서 결재
(Hereby) 관리자 패널 > 문서 결재 > 문서 결재
| 메타 | 앱: 관리자 패널 (포트 4001) — 본문 Team Manager 임베드 (포트 4004)대상 사용자: 조건1 [문서 관리/조회 권한 보유자]프로토타입: TBU관련 정책: [[POL_권한(RBAC)]]Status: reviewOwner: 카나 |
개요
문서 결재는 직원이 제출한 문서·증명서 요청을 관리자가 검토·승인/반려하는 결재 인박스 화면이다. 사이드바 "문서 결재" 그룹의 "문서 결재" 메뉴 진입점이다. 본문은 Team Manager 앱 임베드(/team-manager/document-management?embedded=1)로 로드된다. 화면은 "문서 결재" / "자격증·면허" 2탭으로 구성된다. 결재 대상은 직원 업로드 문서(documents)와 증명서 발급 요청(certificate_issuances)이며, 검토자·검토일시(reviewedBy/reviewedAt·approvedBy/approvedAt) 기록으로 처리 이력이 부착된다. 양식 마스터(제출 유형·자격증)는 [[HBAD241_문서 양식]]에서 정의하며, 여기서는 그 양식으로 제출된 건의 결재만 다룬다. 목록 컬럼은 사번 / 이름 / 구분 / 유형 / 신청일 / 상태 / 관리이며, 행 "보기" 버튼으로 상세를 연다.
문서 히스토리
- 2026-07-06 최초 작성 - 카나/콸
- 2026-07-10 라이브 기능 검토 반영 (TM 임베드·필터·2탭 확인) - 카나/콸
- 2026-07-21 GC700 깊이 재작성 - 카나/콸
- 2026-07-21 가독성 패스 (GUIDE §7) - 카나/PM
- 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
- 2026-07-28 코드 변경 반영(8299588) - 카나/PM
- 2026-09-30 PR #883·#900 반영: 인사처리 결재 — 사직서·휴직신청서·복직신청서·인사발령품의서·근무형태 변경 신청 승인 시 인사정보 자동 반영(시행일 도래 전이면 매시 잡이 시행일에 반영), 목록 「인사처리」/「인사 반영」 배지, 미리보기 인사 정보 블록(퇴직/휴직/복직/발령/근무 변경 정보)+승인 전후 안내, 승인 토스트, 일괄 승인 확인창, 인사발령품의서 승인 권한 제한 · 자격증/면허 미리보기 대장 등록 안내(MED-780) — 커밋·소스 원문 근거, 라이브 실사 이월(TBU) - 카나/PM
Data I/O
Server → Client
변수
| 메타 | ${approval_inbox} |
| 메타 | ${doc.status} |
| 메타 | ${doc.category} |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 승인 | documentId | 검토자·검토일시 기록 (documents.reviewedBy/reviewedAt · 증명서 certificate_issuances.approvedBy/approvedAt) | 라벨 "문서 관리" (토큰 document:write 추정) |
| 반려 | documentId · 사유 | certificate_issuances.rejectedReason 기록 (문서 반려 사유 컬럼 = TBU) | 라벨 "문서 관리" |
| 필터/검색 | 조직/구분/상태/검색어/기간 | 목록 재조회 (TM 임베드) | 라벨 "문서 조회" |
외부 통합
| 외부 시스템 | 데이터 | 방향 | 비고 |
|---|---|---|---|
| Team Manager (포트 4004) | /team-manager/document-management?embedded=1 본문 임베드 | Admin → TM iframe | 타 앱 embed |
메인 화면 사양표 (문서 결재)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 진입 조건 | - | • 조건1 [문서 관리/조회 권한] 보유 시 노출. 사이드바 "문서 결재" 그룹 > "문서 결재" 메뉴 진입. 미보유 시 hide | 권한 트리(문서) | [[POL_권한(RBAC)]] |
| 01 | 초기 상태 | Output | • "문서 결재" 탭 결재 인박스 표시 (필터 미적용) | ||
| 05 | 본문 임베드 | Embed | • 본문 영역을 TM 앱 iframe으로 채우는 임베드. 소스 /team-manager/document-management?embedded=1• 로드 시: TM 결재 인박스(사번/이름/구분/유형/신청일/상태/관리 그리드) 렌더 | Team Manager | 타 앱 embed |
| 08 | 화면 탭 | Tab | • "문서 결재" / "자격증·면허" 2탭 • 클릭 시: 해당 목록으로 전환 | 2탭 | |
| 10 | 결재 인박스 | Grid | • 결재 대기 문서·증명서 요청을 나열하는 그리드 | documents · certificate_issuances | |
| 10-E | 인박스 Empty | State | • 결재 대기 0건 시 빈 상태. 라이브 원문 프로브 미확인 | TBU: Empty 문구 | |
| ㄴ11 | 목록 컬럼 | Cell | • 컬럼 구성: 사번 / 이름 / 구분 / 유형 / 신청일 / 상태 / 관리 | documents.documentType·category | 7컬럼 |
| ㄴ11-1 | 인사처리 배지 | Badge | • 유형 칸 옆 배지 — 승인이 곧 인사정보 변경인 서류(사직서·휴직신청서·복직신청서·인사발령품의서·근무형태 변경 신청)에만 표시 - CASE01 [미반영]: 「인사처리」(툴팁 "승인 시 인사처리") - CASE02 [반영 완료]: 「인사 반영」(초록, 툴팁 "인사처리 반영됨") | Document.metadata.hrAction (kind·effectiveDate·appliedAt) · 카탈로그 HR_ACTION_CATALOG | 신설 (코드 반영: #900 647e1eca) · TBU: 라이브 실사 |
| ㄴ12 | 상태 배지 | Badge | • 결재 상태 배지 (documents_status_enum·certificate_issuances_status_enum): CASE01 [대기] / CASE02 [승인] / CASE03 [반려] / CASE04 [취소] | 상태 enum | TBU: enum 값 목록 |
| 15 | 필터 | Filter | • 인박스를 거르는 필터 세트: 조직 선택 / 구분(전체/신청/제출/자격증·면허) / 상태(전체/대기/승인/반려/취소) / 검색 "이름 / 사번 / 이메일" / 기간(이번 주/지난 1주/이번 달/지난 1개월/지난 3개월/전체) • 선택 시: 목록 재조회 | 목록 재조회 | 기간 6종 · 7/10 확인 |
| 18 | 보기 (행 클릭 미리보기) | Button/Row | • 행별 결재 상세 진입 버튼. 원문 "보기" • 클릭 시: 결재 상세 노출 • (10/21 머지, #1257 6e47d97e — 10/22 실측) 행 자체 클릭으로도 「미리보기」 다이얼로그 진입(문서 iframe 렌더) — 다이얼로그에 「전체 화면」·「인쇄하기」 버튼 실측(전체 화면 = 미리보기 확대 토글), 「닫기」/ESC 로 종료 | documents | 행 클릭 미리보기 신설(#1257) · 10/22 실측(스샷 live-1022-ad-doc-preview.png) |
| ㄴ18-1 | 인사 정보 블록 (미리보기) | Section | • 인사처리 결재 건의 미리보기에 제출 칸과 승인 안내를 표시. 제목·칸은 종류별 카탈로그 원문 - 사직서 「퇴직 정보」: 퇴직 예정일 · 사직 사유 - 휴직신청서 「휴직 정보」: 휴직 사유 · 휴직 시작일 · 복직 예정일 · 메모 - 복직신청서 「복직 정보」: 복직일 · 메모 - 인사발령품의서 「발령 정보」: 발령 종류별 행(전보(팀 이동) · 겸직 추가 · 소속 종료 · 역할 변경 — 「현재 팀 → 새 팀」·역할) · 시행일 · 발령 사유 - 근무형태 변경 신청 「근무 변경 정보」: 희망 근무형태(「그룹 · 근무」) · 시행일 · 사유 | Document.metadata.hrAction (옛 metadata.resignation 읽기 폴백) · [[HBAD202_휴직·퇴직 처리 모달]] | 신설 (코드 반영: #883 9a49f156 · #900 647e1eca) · TBU: 라이브 실사 |
| ㄴ18-2 | 인사처리 안내 (미리보기) | Notice | • 블록 하단 안내 — 승인 전(정보)·반영 뒤(성공) 문구가 바뀜. 사직서 예시(원문) - CASE01 [대기 · 시행일 ≤ 오늘]: "승인하면 이 직원은 즉시 퇴직 처리돼요 — 퇴직 기록이 만들어지고 재직 상태가 「퇴사」로 바뀌어요." - CASE02 [대기 · 시행일 미래]: "승인하면 퇴직 기록이 만들어지고, 퇴직 예정일({date})에 재직 상태가 「퇴사」로 자동으로 바뀌어요." - CASE03 [승인 · 시행일 전]: "퇴직 예정일({date})에 재직 상태가 「퇴사」로 자동으로 바뀌어요." - CASE04 [반영 완료]: "퇴직 인사처리가 끝났어요 ({at}). 직원 상태가 「퇴사」로 바뀌었어요." - 휴직·복직·발령·근무 변경도 같은 4단 구조(종류별 문구는 카탈로그 원문) | hrActionApprovalHint · HR_ACTION_CATALOG.hints | 신설 (코드 반영: #883 · #900) |
| ㄴ18-3 | 자격증/면허 대장 안내 (미리보기) | Notice | • 자격증/면허 제출 건 미리보기 안내 — 승인일이 대장 등록일을 확정 - CASE01 [승인 전]: "승인하면 자격증/면허 대장에 등록돼요(등록일 = 승인일). 반려하면 대장에 올라가지 않아요." - CASE02 [승인 뒤]: "자격증/면허 대장에 등록됐어요 (등록일 {승인일})." | documents.reviewedAt (목록 응답 추가) · [[HBAD296_자격증·면허 관리]] | 신설 (코드 반영: #900, MED-780) |
| 20 | 결재 처리 | Button | • 상세에서 승인/반려를 실행하는 결재 액션 • 클릭 시: 상세에서 승인/반려 실행 - CASE01 [승인]: 검토자·검토일시 기록 ( reviewedBy/reviewedAt·approvedBy/approvedAt)- CASE02 [반려]: 사유 입력 → rejectedReason 기록 | reviewedBy/reviewedAt · approvedBy/approvedAt · rejectedReason | 처리 이력 부착 · TBU: 결재선(다단계)·반려 UI·실패 동작 |
| ㄴ21 | 인사처리 결재 승인 | Rule | • 인사처리 결재 승인(미리보기 단건·목록 일괄·관리자 검토 3경로 공통) → 인사정보 자동 반영 - STEP1 원장 기록 생성(퇴직 기록·휴직 기록 / 복직은 휴직 기록 종료) - STEP2 시행일 ≤ 오늘: 즉시 반영 — 사직서 「퇴사」(세션 토큰 폐기·팀장 해제·팀 대화방 나가기) · 휴직 「휴직」(세션 유지) · 복직 「재직」 · 발령 소속·역할 변경(병동·근무 배정 추종) · 근무 변경 주 소속 근무 배정 - STEP3 시행일 > 오늘: 기록만 만들고 매시 잡이 시행일에 반영 - CASE01 [인사처리 실패]: 승인은 유지, 잡이 재처리 - CASE02 [같은 날짜 퇴직 기록 존재]: 재사용(중복 생성 없음) | hr-action-processing.service · hr-action-due.job(매시) · [[HBAD202_휴직·퇴직 처리 모달]] 수동 처리와 같은 결과 | 신설 (코드 반영: #883 · #900) |
| ㄴ22 | 승인 토스트 | Toast | • 단건 승인 성공 토스트 — 인사처리 결과에 맞춰 문구 변경(원문) - CASE01 [즉시 반영]: "승인했습니다. {종류} 인사처리가 반영됐어요." - CASE02 [시행일 대기]: "승인했습니다. {시행일}에 인사처리가 반영돼요." - CASE03 [일반 서류]: "승인했습니다" | 신설 (코드 반영: #883 · #900) | |
| ㄴ23 | 일괄 승인 확인창 | Dialog | • 목록 일괄 승인 선택에 인사처리 결재가 섞여 있으면 1회 확인 • 클릭 시: 컨펌 "인사처리 결재가 포함돼 있어요 ({종류} n건, …). 승인하면 원장 기록이 만들어지고 시행일에 재직 상태·소속·근무가 바뀌어요. 계속할까요?" → 「승인」 시 실행 | 신설 (코드 반영: #883 · #900) | |
| ㄴ24 | 인사발령품의서 승인 권한 | Rule | • 인사발령품의서는 시스템 관리자 또는 employee:manage 보유자만 승인 가능 — 그 외(직원 관리 권한 없는 팀장 등) 승인 시도는 거부 | assertCanApproveHrAction · 품의 상신 = 직원 관리 행 「인사발령 품의」([[HBAD200_직원 관리]]) | 신설 (코드 반영: #900, MED-779) · TBU: 거부 시 UI 문구 |
| 30 | 처리 이력 | Output | • 검토자·검토일시·반려사유 등 처리 내역 노출 (업무별 이력, 전역 감사로그 아님) | documents/certificate_issuances 검토 컬럼 | 도메인 이력 |
| 40 | 자격증·면허 탭 | Tab | • 자격증 발급/등록 결재 탭(admin 네이티브 — settings에서 이관, 당국 면허·자격 신고 대장). 원문 "자격증·면허". 필터 줄의 자주 쓰는 기간 프리셋을 공용 SubTab(sm·line·radius 4)으로 통일(기존 손으로 만든 radius 16 칩 → 근태 현황 4개 화면과 동일 규약) • 클릭 시: 자격증·면허 결재 목록 전환 | certification_type_configs · [[HBAD296_자격증·면허 관리]] | 프리셋 SubTab 통일 (코드 반영: 8299588) · TBU: 목록 컬럼·동선 상세 |
ERD 근거 (documents / certificate_issuances)
| 엔티티 | 핵심 컬럼 | 결재 관련 용도 |
|---|---|---|
documents | employeeId · filename/originalFilename · category(enum) · documentType · status(enum) · reviewedBy · reviewedAt · notes | 직원 업로드 문서. status=processing 기본값 → 검토(reviewedBy/reviewedAt) 처리 |
certificate_issuances | employeeId · templateId · purpose · status(enum, 기본 pending) · approvedBy · approvedAt · rejectedReason · certificateHtml | 증명서 발급 요청. status=pending → 승인(approvedBy/approvedAt)/반려(rejectedReason) |
document_templates | code · name · bodyTemplate · isActive | 제출 문서·증명서 양식 마스터 ([[HBAD241_문서 양식]]에서 관리) |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [인박스 조회] | 화면 진입 | TM 임베드 결재 인박스 | 권한 "문서 조회" |
CASE02 [필터] | 구분/상태/기간/검색 | 목록 재조회 | 기간 6종 |
CASE03 [상세 보기] | 행 "보기" | 결재 상세 | |
CASE04 [승인] | 상세 승인 | 검토자·검토일시 기록 | 권한 "문서 관리" |
CASE05 [반려] | 상세 반려 → 사유 | rejectedReason 기록 | 반려 UI = TBU |
CASE06 [인사처리 결재 승인] | 사직서·휴직·복직·발령·근무 변경 승인 | 원장 기록 + 시행일에 재직 상태·소속·근무 자동 반영 | #883 · #900 |
Open Question
| 구분 | 미확인 항목 |
|---|---|
| 결재선 | 결재선(다단계 승인) 존재 여부 — 단일 승인/반려인지 결재 라인인지 |
| 반려 | 반려 사유 입력 UI 및 재제출 동선 |
| 자격증·면허 탭 | "자격증·면허" 탭 목록 컬럼·동선 상세 |
| 인박스 Empty | 인박스 Empty 라이브 원문 |
| 결재 처리 | 결재 처리 실패 동작 |
| 상태 enum | documents_status_enum·certificate_issuances_status_enum 값 목록·문서 반려 사유 컬럼 |