HBAD290_전자 서명
(Hereby) 관리자 패널 > 기타 > 전자 서명
| 메타 | 앱: 관리자 패널 (HBAD)대상 사용자: 조건1 [문서 관리] 권한 보유 역할프로토타입: TBU관련 정책: [[POL_급여정본경계]] · [[POL_권한(RBAC)]]Status: confirmed (전송 flow 실행 검증 · 7/12)Owner: 카나 |
개요
전자 서명은 관리자가 문서 템플릿을 직원에게 전송하고, 발송·서명·수신 상태를 추적하는 화면이다. 사이드바 "기타" 그룹의 "전자 서명" 진입점이다."전자서명 목록"은 발송 건별 상태 추적 그리드(9컬럼)이며 e_sign_records를 근거로 한다.2026-09-11(#663·CS-LOC-260911-0004·0005) 툴바 재편 — 툴바에서 인라인 직원/템플릿 피커를 걷어내고 목록 검색창(플레이스홀더 "직원명 · 사번 · 이메일로 목록 검색", 서버 list.search) + 상태 필터 + [계약서 템플릿](등록 템플릿 전체 목록 모달·새로고침) · [계약서 추가하기](Hereby Sign 템플릿 관리 화면 새 창; integrationStatus.templateManageUrl — env HEREBY_SIGN_TEMPLATE_MANAGE_URL 우선, 없으면 자격증명 Open API 오리진, 둘 다 없으면 버튼 숨김) · [서명 요청 보내기] 버튼만 남긴다.신규 발송은 [서명 요청 보내기] 일반 모달(.ds-modal 580)에서 생성한다 — 1. 서명할 직원 → 2. 계약서 템플릿 단계 라벨, 수신 이메일 확인 줄(선택 직원 이메일 자동 채움), 이메일 없음·템플릿 없음 경고, "보내기를 누르면 Hereby Sign 작성 화면이 새 창으로 열려요" 안내를 포함(모달 열림 중 30초 폴링 skip, 닫기는 공용 closeGuard). 실행 시 목록 최상단에 신규 행이 추가되고 수신자 이메일은 선택 직원의 이메일로 자동 채워지고, 초기 상태는 "작성중인 계약", 전송일시가 기록된다(7/12 실행 검증). 발송·서명 이력은 급여명세서 등 문서 교부의 입증층으로, HR 급여 관리 앱의 발송 시트([[HBHR270_전자서명 발송·eCount 연동 시트 (2섹션)]] 섹션 A, 🔒잠금)와 동일한 e_sign_records 원천을 공유한다.
문서 히스토리
- 2026-07-06 최초 작성 - 카나/콸
- 2026-07-10 라이브 기능 검토 반영 (연결 상태·상태 필터 enum) - 카나/콸
- 2026-07-12 실행 검증 반영 (전송 flow·자동 채움·초기 상태, 콸 승인) - 카나/콸
- 2026-07-13 버튼 행동 명세 보강 - 카나/콸
- 2026-07-21 GC700 깊이 재작성 - 카나/콸
- 2026-07-21 가독성 패스 (GUIDE §7) - 카나/PM
- 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
- 2026-08-06 Hereby Sign 연동 프로비저닝 게이트 반영(c9bde29) - 카나/PM
- 2026-09-05 리스트 새로고침 시 Sign 상태 동기화 + 최신순 정렬 반영(#614 머지 9/4, a5f3341) — 목록 갱신 시 서명 상태가 Sign 서버와 sync, 기본 정렬 최신 생성순. 세부 UI 표기는 실사 대기 - 카나/PM
- 2026-09-11 툴바 재편·서명 요청 모달 신설 반영(#663 머지, 9b36a55·c0a1a31) — 목록 검색창+[계약서 템플릿]/[계약서 추가하기]/[서명 요청 보내기]로 정리, 인라인 피커→가이드 모달(1.직원→2.템플릿), 열 제목 "링크"→"계약서"·"관리"→"상태 확인". 라이브 실증(okbest.dev, 조회·모달만). 근거 = 커밋 + 라이브 이중 - 카나/PM
- 2026-10-22 (10/21 머지분, PR #1257 92adb9d) 필터 줄 DS 필터바 전환 라이브 실측 — 상태 콤보(전체 상태/작성 중/예약/실패/대기 중/체결/비활성) + 검색 입력 「이름 · 사번 · 이메일 검색」 이 DS 필터바 규약으로 정렬, 연결 상태 배지(「전자서명 연결 정상」·「상태 수신 대기」) 병행 표시(13·ㄴ13-1 갱신). 스샷 live-1022-ad-esign-filterbar.png - 카나/PM
Data I/O
Server → Client
변수
| 메타 | $ |
| 메타 | $ |
| 메타 | $ |
| 메타 | $ |
| 메타 | $ |
| 메타 | $ |
| 메타 | $ |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 전송 | herebyTemplateId · 수신자(employeeId) | e_sign_records 생성 (sentById · sentAt 기록) | 문서 관리 (라벨 기반, 매핑 TBU) |
| 서명 링크 열기 | herebyRedirectUrl | (외부 이동) | 문서 관리 (추정) |
| 상태 필터 | status enum | 목록 재조회 | 문서 관리(조회) |
외부 통합
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| Hereby 전자서명 | herebyTemplateId / herebyContractId · herebyRedirectUrl | 비동기(연동 상태 수신) | 외부 서명 플로우. 연결 상태 = "전자서명 연결 정상" / "상태 수신 대기" |
| HR 급여 시트 (HBHR270) | 동일 e_sign_records 원천 공유 | 동기 참조 | 섹션 A 🔒잠금 교부 입증층 |
전자 서명 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 진입 조건 | - | • 조건1 [문서 관리] 보유 시 사이드바 "기타" 그룹에 노출 | 권한 트리(문서) | |
| 01 | 초기 상태 | Output | • 진입 시 전자서명 목록(9컬럼) + 연결 상태 인디케이터 표시. 전송 버튼은 disabled 상태 (연동 게이트 통과 시) | e_sign_records[] | |
| 02 | 연동 프로비저닝 게이트 | Output | • 연동 상태(esignIntegrationStatus.status)가 'linked'가 아니면 템플릿·기록 영역을 숨기고 상단에 ds-notice 배너 표시. 'linked'일 때만 기존 템플릿·기록 화면 노출• 배너 제목/톤 (CASE 구조): - CASE01 [ provisioning]: "전자서명 연동을 설정하는 중입니다"- CASE02 [ error·revoked]: "전자서명 연동에 문제가 있습니다" (danger 톤)- CASE03 [그 외]: "전자서명 연동이 필요합니다" (info 톤) • 배너 본문: - CASE01 [ errorMessage 있음]: errorMessage 내용- CASE02 [ errorMessage 없음 · non-provisioning]: "관리자 계정으로 Hereby Sign 연동을 설정하면 전자서명을 사용할 수 있습니다."• "연동 설정" 버튼 (라벨/상태 CASE 구조): - CASE01 [ error·revoked]: "다시 시도"- CASE02 [실행 중]: "설정 중..." - CASE03 [ provisioning]: 비활성• 클릭 시: 조직 프로비저닝 자동 실행( provisionESignIntegration) → 조직 자동 생성 | esignIntegrationStatus.status (enum: provisioning / linked / error / revoked) · esignIntegrationStatus.errorMessage · provisionESignIntegration | c9bde29 · 백엔드 hereby-sign-provisioning.service |
| 10 | 연결 상태 | Badge | • 외부 전자서명 연동 상태를 표시하는 인디케이터 - CASE01 [연동 정상]: "전자서명 연결 정상" - CASE02 [상태 미수신]: "상태 수신 대기" | Hereby 전자서명 연동 | |
| 11 | 직원 검색 | Search | • 연동 상태 'linked'일 때만 노출 (§02 게이트 통과 시)• 발송 대상 직원을 검색·선택하는 드롭다운. placeholder "직원 검색 (이름 / 사번 / 이메일)...", 후보 항목 표기 "이름 (사번)" • 선택 시: 발송 대상 직원 확정 (전송 선행 조건) | employees | TBU: 검색 0건 |
| 12 | 템플릿 검색 | Search | • 연동 상태 'linked'일 때만 노출 (§02 게이트 통과 시)• 발송할 문서 템플릿을 검색·선택하는 드롭다운. placeholder "템플릿 검색..." (예: "표준근로계약서 (기간의 정함이 없는 경우)") • 선택 시: 발송 템플릿 확정 (전송 선행 조건) | herebyTemplateId | TBU: 후보 0건 |
| 13 | 상태 필터 (DS 필터바) | Filter | • 발송 상태별로 목록을 거르는 드롭다운. "전체 상태" + 작성 중 / 예약 / 실패 / 대기 중 / 체결 / 비활성 • 선택 시: 해당 상태 목록 재조회 - CASE01 [필터 결과 0건]: 빈 상태 • (10/21 머지, #1257 92adb9d — 10/22 실측) 필터 줄이 DS 필터바 규약으로 전환 — 상태 콤보 + 검색 입력(「이름 · 사번 · 이메일 검색」)이 공용 필터바 스타일로 정렬, 목록 제목 「전자서명 목록」·연결 상태 배지 병행 | e_sign_records.status | DS 필터바 전환(#1257) · 10/22 실측 |
| 14 | 전송 | Button | • 선택한 직원·템플릿으로 신규 발송 건을 생성하는 기능. 직원·템플릿 선택 전에는 disabled • 클릭 시: 즉시 실행 → 목록 최상단에 신규 행 추가 (수신자 이메일 = 직원 이메일 자동 채움 · 초기 상태 "작성중인 계약" · 전송일시 기록, 7/12 실행 검증) - CASE01 [직원·템플릿 미선택]: disabled - CASE02 [둘 다 선택]: 활성 | e_sign_records insert · Hereby 연동 | 발송 트리거 · TBU: 전송 실패 피드백(단건 정상 flow만 검증) |
| 20 | 전자서명 목록 | Grid | • 연동 상태 'linked'일 때만 노출 (§02 게이트 통과 시, 기록 영역)• 발송 건별 상태를 추적하는 그리드 (9컬럼, 하단 "목록 컬럼" 참조). 페이지네이션 포함 - CASE01 [발송 0건]: 빈 상태 (원문 문구 TBU) | e_sign_records[] | 교부 입증층 · Empty 원문 TBU |
| 30 | 페이지네이션 | Pagination | • 목록 페이지를 이동하는 컨트롤 (« ‹ 1 › ») • 클릭 시: 해당 페이지 목록 표시 | - | |
| 90 | 권한별 차이 | - | • 조건1 [문서 관리] 미보유 시 "기타 > 전자 서명" 메뉴 미노출 | RBAC |
전자서명 목록 컬럼 (9컬럼, 라이브 census 원문)
| # | 컬럼 | 타입 | 설명 | 연관 (ERD) |
|---|---|---|---|---|
| 1 | 사번 | Text | 수신 직원 사번 | employees.employeeNumber (employeeId) |
| 2 | 직원 | Text | 수신자 성명 (발송 시점 스냅샷) | e_sign_records.recipientNameSnapshot |
| 3 | 템플릿 | Text | 발송 문서 템플릿명 (스냅샷) | e_sign_records.templateNameSnapshot · herebyTemplateId |
| 4 | 수신자 이메일 | Text | 수신자 이메일 주소 (스냅샷). 전송 시 직원 이메일 자동 채움 | e_sign_records.recipientEmailSnapshot |
| 5 | 상태 | Badge | 상태 배지 (하단 "상태 enum" 표 참조). 값 없음: 미서명 등은 배지 표기만 | e_sign_records.status · errorMessage |
| 6 | 전송일시 | DateTime | 발송 일시 (교부 시점 입증). 전송 시 기록 | e_sign_records.sentAt |
| 7 | 서명일시 | DateTime | 수신자 서명 완료 일시. 미서명 시 공란("-") | e_sign_records.signedAt |
| 8 | 계약서 | Link | Hereby 서명 페이지 링크("Hereby Sign에서 계약서 열기"). 없으면 hide(추정). 열 제목 "링크"→"계약서"(#663, 9/11) | e_sign_records.herebyRedirectUrl |
| 9 | 상태 확인 | Button | 행 상태 갱신("Hereby Sign의 최신 서명 상태 가져오기"). 열 제목 "관리"→"상태 확인"(#663, 9/11) | — |
상태 enum (exec-diff §5 원문)
| 구분 | 값 | 근거 |
|---|---|---|
| 상태 필터 enum (6종) | 작성 중 / 예약 / 실패 / 대기 중 / 체결 / 비활성 | 라이브 필터 드롭다운 원문 |
| 배지 표기 추가 관찰 (3종) | 작성중인 계약 / 예약 전송 / 내 입력 대기 | 전송 직후 신규 행 초기 상태 = "작성중인 계약" (7/12 실행 검증) |
| 데이터 상태값 | 계약 파기 | 필터 enum에 없음 — 데이터상 존재 (라이브 관찰) |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [선택 전] | 진입 | 전송 disabled | 실발송 방지 |
CASE02 [직원·템플릿 선택] | 둘 다 선택 | 전송 활성 | 전송 선행 조건 |
CASE03 [전송 실행] | 전송 클릭 | 신규 행(이메일 자동 채움 · 상태 "작성중인 계약" · 전송일시) | 7/12 실행 검증 |
CASE04 [수신자 서명] | Hereby 서명 완료 | signedAt 기록 · 상태 "체결"(추정) | 외부 flow |
CASE05 [권한 미보유] | 메뉴 접근 | 미노출 | RBAC gate |
Open Question
| 구분 | 미확인 항목 |
|---|---|
| 상태 enum | "계약 파기" · "작성중인 계약" / "예약 전송" / "내 입력 대기" 배지의 status enum 매핑(상태 필터 6종과의 관계) |
| 전송 flow | "전송" 실행 후 수신자 다건 발송·계약 연동(herebyContractId) 여부 (단건 전송 flow는 검증됨) |
| 목록 관리 | "관리" 컬럼 동작(재전송/취소/상세 보기) |
| 에러·Empty | 전송 실패 피드백 · 직원/템플릿 검색 결과 0건 · 목록 Empty 원문 처리 (라이브 미검증) |
| 앱 경계 | HBAD290 전자 서명(관리자 발송)과 HBHR270 발송 시트(급여 명세서 교부)의 발송 주체·문서 유형 경계 |
변경 이력
| 일자 | 티켓 | 변경 |
|---|---|---|
| 2026-09-11 | CS-LOC-260911-0005 | 툴바의 직원 검색·템플릿 검색·전송(§12·§13·§14)을 「서명 요청 보내기」 일반 모달로 이동. 툴바에는 목록 검색창(직원명·사번·이메일)과 [서명 요청 보내기]만 남김. 모달은 1. 서명할 직원 → 2. 계약서 템플릿 단계 라벨, 수신 이메일 확인, 이메일 없음·템플릿 없음 경고, 다음 단계(새 창) 안내를 포함. 표 「링크」·「관리」 열 제목은 「계약서」·「상태 확인」으로. |
| 2026-09-11 | CS-LOC-260911-0004 | 툴바에 [계약서 템플릿](등록 템플릿 전체 목록 모달 · 새로고침)과 [계약서 추가하기](Hereby Sign 템플릿 관리 화면 새 창, integrationStatus.templateManageUrl — env HEREBY_SIGN_TEMPLATE_MANAGE_URL 우선, 없으면 자격증명 Open API 오리진) 추가. |