HBHR270_전자서명 발송·eCount 연동 시트 (2섹션)
(Hereby) HR 급여 관리 > 시트 워크스페이스 > 전자서명 발송·eCount 연동 시트
| 앱 | HR 급여 관리 (hr-system, 포트 4000) |
| 대상 사용자 | 조건1 [HR_ADMIN] / 조건2 [SUPER_ADMIN] |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_급여정본경계]] |
| Status | review |
| Owner | 카나 |
| 부모 | [[HBHR100_시트 워크스페이스 (공통 Shell)]] |
개요
- 이 문서는 문서·서명 및 eCount 연동의 두 시트 유형을 한 문서에 2개 섹션으로 정의한다.
- 전자서명 발송 시트(🔒잠금)는 명세서 문서의 발송·서명·수신 상태를 기록하는 교부 입증층으로, 근로기준법 §48(임금대장·명세서 교부) 입증 근거이며 e_sign_records를 근거로 한다.
- eCount 코드 시트는 수당/공제 항목을 이카운트 회계 코드에 매핑하는 export 마스터로, allowance_item_codes / deduction_item_codes를 근거로 한다.
- 전자서명 발송은 급여 확정 후 명세서 생성에서 시작하는 정본 후행 교부층이며, 시트=작업공간 vs 정본=commit 경계를 따른다 ([[POL_급여정본경계]]).
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 가독성 패스 + 액션 표기 (GUIDE §7·§8) |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-21 | 카나 | PM | TC 크로스체크 확정분 반영 (🟡) |
| 2026-09-05 | 카나 | PM | 발송 리스트 새로고침 시 Sign 상태 동기화·최신순 정렬 반영(#614 머지 9/4) — 세부 UI 실사 대기 |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
${sign.rows} | e_sign_records[] | 0건 시 빈 그리드 | 시트 🔒잠금(sheet_views.lockedAt/lockedBy) |
${sign.status} | 서명 상태 (발송/서명완료/미서명 등) | 미발송 시 공란 | enum = TBU |
${allowCode.rows} | allowance_item_codes[] (code(4)·name·displayOrder·isActive) | 0건 시 빈 그리드 | 수당 코드 |
${dedCode.rows} | deduction_item_codes[] (code(4)·name·displayOrder·isActive) | 0건 시 빈 그리드 | 공제 코드 |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 이카운트 export | year, month | payroll.exportEcount(year, month) (TC 라이브 확인) → { filename(~"ecount"), data, employeeCount≥N, excludedRecords:{allowance, deduction} } | payroll:confirm (추정) |
payroll.exportEcount(year,month)는 성공 시filename·data·employeeCount(대상 직원 수)를 반환한다. 급여대장 집계 컬럼에 앵커되지 않은(self-target) record는 export에서 제외되고excludedRecords.{allowance, deduction}카운트로 보고된다 — 커밋 target 페어가 실 급여대장 슬러그가 아니면 export 대상에서 빠진다. (TC 확정: 03:3.5 exports to eCount / 10:10.6 excludedRecords)
연동 방향
| 흐름 | 계산·경로 | 산출 | 비고 |
|---|---|---|---|
| 전자서명 | 급여 확정([[HBHR201_전체 확정 (commit)]]) → 명세서 생성(payroll_records.sentBy/sentAt) → 전자서명 발송 → 서명 상태 기록 | 교부 입증(§48) | 🔒잠금 |
| eCount | 확정 급여 항목(allowance_records/deduction_records) → 항목 코드 매핑 → 이카운트 export | 코드/부서코드/사원명/금액 | export 실 데이터 [[HBHR203_재계산 diff 뷰]] |
| 코드 활성 | isActive=false(미사용) 코드 | export 대상 제외(추정) | boolean |
화면 플로우 (Mermaid)
전자서명 발송 시트는 🔒잠금 교부 입증층으로 편집 불가. eCount export 실 데이터는 [[HBHR203_재계산 diff 뷰]] 공통 컬럼군에서 정의.
섹션 A. 전자서명 발송 시트 (🔒잠금, e_sign_records)
컬럼 순서·명칭은 기본 템플릿 기준(# / 사번 / 성명 / 팀 / 문서 / 발송일시 / 서명일시 / 상태 / 수신 이메일 / 수신 휴대전화, 행 이동 탭: 기본/인사). 내부 fieldKey: employeeNumber / employeeName / team / templateName / sentAt / signedAt / status / recipientEmail / recipientPhone.
| # | 컬럼 | 타입 | 설명 (용도·형식) | 연관 (ERD/calculator/타 앱) | 비고 |
|---|---|---|---|---|---|
| 1 | # | Index | • 행 순번 (read-only) | sheet_rows.sortOrder | read-only |
| 2 | 사번 | Text (system) | • 직원 사번 (read-only 시스템 컬럼) | employees.employeeNumber / fieldKey=employeeNumber | 시스템 컬럼 |
| 3 | 성명 | Text (system) | • 직원 성명 (read-only 시스템 컬럼) | employees.name / fieldKey=employeeName | 시스템 컬럼 |
| 4 | 팀 | Text (system) | • 소속 팀 (read-only 시스템 컬럼) | teams / fieldKey=team | 시스템 컬럼 |
| 5 | 문서 | Text/Link | • 발송 문서명(예: 급여명세서 YYYY-MM) · 시트 🔒잠금 • 클릭 시: TBU (발송 문서 열람 링크, 목적지 미확인) | e_sign_records.documentName(추정) / fieldKey=templateName · payroll_records | — |
| 6 | 발송일시 | Output/DateTime | • 문서 발송 일시. §48 교부 시점 입증 (read-only 잠금) | e_sign_records.sentAt(추정) / fieldKey=sentAt · payroll_records.sentAt | read-only(잠금) |
| 7 | 서명일시 | Output/DateTime | • 수신자 서명 완료 일시. 미서명 시 공란 (read-only 잠금) | e_sign_records.signedAt(추정) / fieldKey=signedAt | read-only(잠금) |
| 8 | 상태 | Badge | • 발송/서명완료/미서명/실패 등 | e_sign_records.status(추정) / fieldKey=status | TBU: enum 값 |
| 9 | 수신 이메일 | Text | • 수신자 이메일 주소 | e_sign_records.recipientEmail(추정) / fieldKey=recipientEmail | — |
| 10 | 수신 휴대전화 | Text | • 수신자 휴대전화 번호 | e_sign_records.recipientPhone(추정) / fieldKey=recipientPhone | — |
시트는 🔒잠금 — 발송·서명 이력은 교부 입증층으로 편집 불가(read-only). 행 이동 탭: 기본/인사.
섹션 B. eCount 수당/공제 코드 시트 (allowance/deduction_item_codes)
컬럼 순서·명칭은 기본 템플릿 기준(# / 코드 / 항목명 / 표시 순서 / 사용). 내부 fieldKey 4종: code / name / displayOrder / isActive.
| # | 컬럼 | 타입 | 설명 (용도·형식) | 연관 (ERD/calculator/타 앱) | 비고 |
|---|---|---|---|---|---|
| 1 | # | Index | • 행 순번 (read-only) | sheet_rows.sortOrder | read-only |
| 2 | 코드 | Text | • 이카운트 매핑 코드(4자리), 수당/공제 구분 • 입력 시: code 저장(4자리) | allowance_item_codes.code(4) / deduction_item_codes.code(4) / fieldKey=code | varchar(4) |
| 3 | 항목명 | Text | • 수당/공제 항목 명칭 • 입력 시: name 저장 | allowance_item_codes.name / deduction_item_codes.name / fieldKey=name | — |
| 4 | 표시 순서 | Number | • 정렬 순서 • 입력 시: displayOrder 세팅 | allowance_item_codes.displayOrder / deduction_item_codes.displayOrder / fieldKey=displayOrder | 정렬 순서 |
| 5 | 사용 | Badge/Checkbox | • 코드 활성 여부(boolean) • 입력 시: isActive 토글. 미사용(false) 시 export 대상 제외(추정) | allowance_item_codes.isActive / deduction_item_codes.isActive / fieldKey=isActive | boolean |
공통 우측 컬럼군(재계산 diff + eCount 매핑: 코드/부서코드/사원명/금액)은 [[HBHR203_재계산 diff 뷰]] 참조 — export 실 데이터는 [[HBHR203_재계산 diff 뷰]]에서 정의.
연동·플로우
- 전자서명 흐름: 급여 확정([[HBHR201_전체 확정 (commit)]]) → 명세서 생성 → 전자서명 발송(e_sign_records) → 서명/수신 상태 기록 → §48 교부 입증층으로 보존(🔒잠금).
- eCount 흐름: 확정 allowance_records/deduction_records → 항목 코드(allowance/deduction_item_codes) 매핑 → 이카운트 export(
payroll.exportEcount(year,month), 반환 filename·data·employeeCount, [[HBHR203_재계산 diff 뷰]] 공통 컬럼군). 급여대장 aggregate 컬럼 미앵커(self-target) record는excludedRecords.{allowance,deduction}카운트로 제외 보고. (TC 확정: 03:3.5 / 10:10.6) - 코드 마스터는 isActive=false(미사용) 시 export 대상 제외(추정).
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
CASE01 [전자서명 시트] | 발송·서명 이력 셀 편집 시도 | 차단 (🔒잠금, read-only 교부 입증층) | 편집 불가 |
CASE02 [미사용 코드] | isActive=false 코드 | 이카운트 export 대상 제외 (추정) | boolean |
CASE03 [명세서 발송] | 급여 확정 후 명세서 생성·발송 | e_sign_records에 sentAt 기록 (§48 교부 시점) | payroll_records.sentAt |
Open Question
- e_sign_records 엔티티/컬럼명 확정 — 02·03 ERD 미노출, 문서·서명 도메인 ERD 필요. TBU.
- 전자서명 상태 enum 전체 값(발송/서명완료/미서명/만료/실패 등). TBU.
- 행 이동 탭 "기본/인사"의 의미(문서 분류 vs 대상 구분). TBU.
- eCount export procedure =
payroll.exportEcount(year,month)확정 (반환 filename·data·employeeCount·excludedRecords). 트리거 UI(수동/자동)·부서코드 원천 = TBU. (TC 확정: 03:3.5 / 10:10.6) - 수당/공제 코드가 단일 시트 2탭인지 별도 시트인지(census는 "eCount 수당/공제 코드" 단일 언급). TBU.