Skip to content

HBHR100_시트 워크스페이스 (공통 Shell)

⚠ 8월 UX 재편 대규모 반영 — 전면 재작성 별도 예정

(Hereby) HR 급여 관리 > 시트 워크스페이스 (공통 Shell)

프로토타입TBU
Statusreview
Owner카나 (PM)

개요

월 단위 스프레드시트 워크스페이스의 **공통 레이아웃(Shell)**을 정의한다. 글로벌 헤더 · 워크스페이스 헤더(월 네비게이션 · 이번 달 · 이전 월 가져오기 · 단축키 · 폴더 관리 · 새 시트 만들기) · 좌측 사이드바 · 시트 헤더 · 스프레드시트 툴바 · 서식 도구 모음 · 데이터 그리드 · 하단 합계행이 모든 시트 유형에 공통으로 얹힌다. 진입 시 인증 검사를 수행하며, 미인증 시 /hr-system/signin으로 리다이렉트한다. 시트는 「설정 중 → 사용 중 → 작업 완료」의 수명주기를 가지며, 각 단계에 따라 상태 배지(시트 헤더 h3 위치)·구조 편집 잠금·반영/직원 추가 노출이 달라진다. 본 문서는 Shell 골격과 진입 동선을 정의하고, 각 구역 상세는 하위 문서에 위임한다.

문서 히스토리

날짜작성자변경 내용
2026-07-06카나PM최초 작성
2026-07-10카나PM라이브 기능 검토 반영
2026-07-13카나PM버튼 행동 명세 보강
2026-07-21카나PMGC700 깊이 재작성
2026-07-21카나PM가독성 패스 + 액션 표기 (GUIDE §7·§8)
2026-07-21카나PM셀 스타일 확정판 적용 (콸 승인)
2026-07-24카나PM코드 변경 반영(7635459)
2026-07-28카나PM코드 변경 반영(aed8800)
2026-07-29카나PM역방향 동기화 — 개발팀 직접 수정 반영(3637e20, 백틱 이스케이프)
2026-08-11카나PM시트 수명주기·수식 범위 바·조건부 서식·IFERROR·드로어 재편 반영(#528·#533·#540 머지)
2026-08-12카나PM수식 순환 방지·채우기 핸들 통일 반영(471f3db·8d38bed)
2026-08-13카나PM불리언 리터럴·표시 형식, 엑셀식 =/<> 연산자 반영(90bc68f·b862772)
2026-08-17카나PM라이브 실사 검증 반영(dev v0.1.0+)
2026-08-21카나PMcolumnLayout 중복 컬럼 키 서버 검증 반영(91782a7) — 조용한 헤더 붕괴 재발 방지

Data I/O

Server → Client

변수DB 엔티티.컬럼값 없을 때비고
$조회 월 (YYYY-MM)당월 기본상단 Month·Year 스피너와 연동
$PayrollSheet.folder (추정)"(미분류)" fallback좌측 폴더 트리 ([[HBHR108_폴더·휴지통 사이드바]] 참조)
$PayrollSheet[] (추정)Empty 상태 (70-E)폴더별 카운트 표시
$PayrollRecord[] (추정)빈 그리드"293/293건" 형태 카운트
$PayrollSheet.updatedAt (추정)hide헤더 "· 4시간 전" 형태

Client → Server

액션전달 값tRPC / SDK권한 토큰
인증 세션 검증sdk.auth.session() (추정)HR_ADMIN / SUPER_ADMIN
기간 변경(시트 리스트 재로드)periodsdk.payrollSheet.list() (추정)payroll:read (추정)
시트 검색query (사번/성명/사유/항목)클라이언트 필터 (추정)
새 시트 생성name, folder, isPublic, templatesdk.payrollSheet.create() (추정)payroll:write (추정)
셀 편집rowId, columnId, valuesdk.payrollSheet.updateCell() (추정)payroll:write (추정)
폴더 관리 모달 열기클라이언트 (추정)payroll:write (추정)
시트 작업 완료 토글sheetId, isLockedsdk.payrollSheet.toggleComplete() (추정)payroll:write (추정)
시트 설정 완료(수명주기 확정)sheetIdsdk.sheetView.finishSetup() (추정)canManageSetup (추정)
시트 재설정sheetIdsdk.sheetView.reopenSetup() (추정)canManageSetup (추정)

화면 플로우

공통 Shell 사양표

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00화면 진입 조건-• 조건1 [HR_ADMIN] / 조건2 [SUPER_ADMIN] 인증 시에만 워크스페이스를 노출하는 인증 게이트
• 진입 시: 인증 세션 확인
 - CASE01 [미인증]: /hr-system/signin 리다이렉트
 - CASE02 [인증 세션]: 워크스페이스 진입 허용
인증 세션인증 게이트
01초기 상태-• 진입 직후 최근 작업 시트로 자동 이동시키는 기능
• 진입 시: /hr-system/sheets/{sheetId}로 자동 리다이렉트
 - CASE01 [최근 시트 없음]: 동선 미확정
기간 네비게이터(20)TBU: 최근 시트 없을 때 진입 동선
02다이얼로그 (DS 교체)-• 워크스페이스의 네이티브 alert/confirm/prompt를 전부 DS 다이얼로그로 교체. confirm→askConfirm(Promise<boolean>), alert→showAlert, 오류는 showError(제목 "오류" + danger 톤)로 감싸고, 컴포넌트 밖 모듈은 dialog-bridge로 같은 모달에 닿는다. 단순 안내·검증 메시지(셀/행 선택 요청, 시간 형식 오류 등)는 모달 대신 토스트로 내려 흐름을 끊지 않는다
 - CASE01 [원본 기록 변경 확인]: 배치 전체가 in-flight Promise를 공유해 한 번만 물음
워크스페이스 전역 다이얼로그신규 (코드 반영: be83131) · 네이티브 팝업 폐지
10글로벌 헤더-• 좌측 로고 "hereby HR 급여 관리", 우측 계정 / 알림 / 로그아웃을 담는 전 화면 고정 헤더전 화면 고정
ㄴ11계정Button• 로그인 계정을 표시하는 헤더 버튼
• 클릭 → TBU
TBU: 표시 값·클릭 동작
ㄴ12알림Button• "알림"을 표시하는 헤더 버튼
• 클릭 → TBU
TBU: 상세 동작·에러 처리
ㄴ13로그아웃Button• 현재 세션을 종료하는 헤더 버튼
• 클릭 시: 세션 종료 후 /hr-system/signin (추정)
00 진입 조건
20워크스페이스 헤더-• 월 네비게이션 + "이번 달" + "이전 월 가져오기" + "단축키" + "폴더 관리"(7/21 신규) + "새 시트 만들기" 액션을 담는 상단 헤더 바period 변경 시 시트 리스트 재로드월 단위
ㄴ21월 네비게이션-• "이전 달" / "2026년 7월"(현재 월 표기) / "다음 달" 이동 + "이번 달" 빠른 이동으로 조회 월을 바꾸는 기능
• 이동 시: period 변경 → 시트 리스트 재로드
 - CASE01 [period 없음]: 당월 기본
period 변경 시 시트 리스트 재로드
ㄴ22이전 월 가져오기Button• 이전 월의 공유 시트를 현재 월로 복제하는 "이전 월에서 가져오기" 모달을 여는 기능
• 클릭 시: 모달 오픈 → 이전 월의 현재 월에 없는 공유 시트 복제(기본 시트는 자동 생성으로 제외)
 - 모달 원문: "이전 월의 공유 시트 중 현재 월에 없는 시트를 복제합니다. 기본 시트는 자동으로 생성되므로 제외됩니다."
[[HBHR108_폴더·휴지통 사이드바]] 이전 월에서 가져오기 모달신규 · TBU: 에러·실패 동작
ㄴ23단축키Button• 4카테고리(탐색/선택/편집/메뉴·찾기) 단축키 도움말 모달을 여는 기능. 우측 유틸 ? 토글과 동일 모달, 과거 보기 메뉴의 "단축키"가 헤더 버튼으로 이동
• 클릭 시: 단축키 도움말 모달 노출. 전체 카탈로그는 [[HBHR103_편집 메뉴·단축키]] 소유 — 아래 [단축키 카탈로그 포인터] 참조
[[HBHR103_편집 메뉴·단축키]] 참조보기 메뉴에서 이동
ㄴ24폴더 관리Button• 각 폴더를 "{n}개 시트"로 나열하고 하단 "+ 새 폴더"를 제공하는 "폴더 관리" 모달을 여는 기능. 상세 사양은 [[HBHR108_폴더·휴지통 사이드바]]에 위임
• 클릭 시: 폴더 관리 모달 오픈
 - 모달 원문 폴더 목록: "eCount 연동 2개 시트" / "급여대장 3개 시트" / "문서·서명 1개 시트" / "병동 6개 시트" / "시트 에러 발생 케이스 1개 시트" / "연장근무 1개 시트" / "인센티브 2개 시트" / "출퇴근 3개 시트" / "치료실 인센티브 1개 시트" / "휴직·퇴사 2개 시트" + "+ 새 폴더"
[[HBHR108_폴더·휴지통 사이드바]] 폴더 관리 모달7/21 신규 · "그룹"→"폴더" 용어 확정 · TBU: 에러·실패 동작
ㄴ25새 시트 만들기Button• 새 시트 생성 모달을 여는 기능. 새 시트 기본 생성 = 1000행 × 26열(A~Z, col_1~col_26)
• 클릭 시: "새 시트 만들기" 모달 오픈
[[HBHR101_새 시트 만들기 모달]] 참조기본 1000행×26열
40좌측 사이드바-• "폴더" / "휴지통(🗑)" 탭, "▸▾" 접기, 폴더별 시트 그룹 + 건수를 담는 사이드바. 폴더 10종은 아래 [폴더 트리] 참조
 - Empty: [[HBHR108_폴더·휴지통 사이드바]] 참조
[[HBHR108_폴더·휴지통 사이드바]] 참조상세 위임
ㄴ41폴더 트리List• 폴더 10종((미분류) / eCount 연동 / 급여대장 / 문서·서명 / 병동 / 시트 에러 발생 케이스 / 연장근무 / 인센티브 / 출퇴근 / 치료실 인센티브 / 휴직·퇴사)을 나열하는 트리. 각 시트 항목 = "{이름} '26.7" + 건수
• 클릭 시: 해당 시트 로드
 - CASE01 [폴더 없음]: "(미분류)" fallback
[[HBHR108_폴더·휴지통 사이드바]] 참조"그룹"→"폴더" 용어 확정 (7/21)
50시트 헤더-• 시트명·기간 + 건수 "293/293건" + 수정시각 "· 4시간 전" + 검색 + 뷰 토글(전치/행렬) + 메모 이력 + 셀 상세 패널 표시 + 시트 닫기 + 실행취소/재실행 상시 버튼을 담는 시트 헤더[[HBHR109_행 정보 패널·검색]] 참조 (검색 상세)
ㄴ51시트명·기간 인라인 편집-• 시트명·기간을 인라인으로 수정하는 기능
• 더블클릭 시: 인라인 편집 진입(시트명 이름 변경 / 기간 "'26.7" 기간 변경)
[[HBHR102_파일 메뉴]] 이름 바꾸기와 관계 TBU더블클릭 인라인
ㄴ52시트 검색Search• 사번/성명/사유/항목으로 행을 거르는 검색. placeholder "사번 / 성명 / 사유 / 항목 검색 ( / )", "/" 단축키로 포커스
• 입력 시: 일치 행 필터
 - Empty: 검색 결과 없음 상태
[[HBHR109_행 정보 패널·검색]] 참조TBU: 검색 결과 없음 문구
ㄴ53전치 뷰 토글Button• 행/열을 바꾼 전치 레이아웃으로 전환하는 토글(hover 시 노출). title 원문 "전치 보기 — 행과 열이 바뀐 레이아웃"
• 클릭 시: 전치 레이아웃으로 전환
그리드 렌더(표시 전용)hover 노출 · 신규
ㄴ54행렬 뷰 토글Button• 다차원 피벗 행렬 레이아웃으로 전환하는 토글(hover 시 노출). title 원문 "행렬 보기 — 다차원 피벗 레이아웃"
• 클릭 시: 행렬 레이아웃으로 전환
그리드 렌더(표시 전용)hover 노출 · 신규
ㄴ55메모 이력Button• 셀 메모 이력을 조회하는 "메모 이력" 버튼. 셀 메모는 모달에서 우측 상세 레일의 "메모" 탭으로 이동(아래 56 참조)
• 클릭 → TBU
sheet_cells 메모 · 56 셀 상세 레일신규 · TBU: 세부 동작·Empty·에러 동작
ㄴ56셀 상세 패널 표시Button• 선택 셀/행의 우측 상세 레일 노출을 토글하는 "셀 상세 패널 표시" 버튼. 레일은 "셀 상세" / "메모" 2탭으로 구성되며, 같은 앵커 셀을 설명하는 두 화면을 토글로 나눠 쓴다. 레일은 그리드를 덮는 오버레이로 열려 가운데 영역 폭을 가져가지 않는다
• 클릭 시: 상세 레일 노출 토글
 - CASE01 ["메모" 탭]: 앵커 셀의 메모 스레드 전체 표시(작성·수정·답글·해결·삭제 인라인 처리), 상단 "시트 전체 메모 보기" 진입. 메모 탭에서만 레일 폭 384px로 확대
 - CASE02 [셀 이동]: 입력 중이면 핀으로 고정(내용 유지), 잃을 입력 없으면 선택 셀을 따라감
[[HBHR109_행 정보 패널·검색]] 셀 상세 패널 · sheet_cells 메모"메모" 탭 신규 (코드 반영: d91858b) · 모달 → 레일 탭 이동
ㄴ57시트 닫기Button• 현재 시트를 닫고 시작 화면으로 이동하는 "시트 닫기 — 시작 화면으로 돌아갑니다" 버튼
• 클릭 시: 현재 시트 닫고 시작 화면으로 이동
워크스페이스 시작 화면
ㄴ58실행취소/재실행Button• 편집 스택을 실행취소(⌘Z) / 재실행(⌘⇧Z)하는 상시 버튼(편집 메뉴에서 이동)
• 클릭 시: 편집 스택 실행취소 / 재실행
 - CASE01 [히스토리 없음]: disabled
[[HBHR103_편집 메뉴·단축키]] 편집 스택편집 메뉴에서 이동
ㄴ59댓글Button• "💬" 댓글 버튼
• 클릭 → TBU
TBU: 상세 동작
ㄴ5A시트 작업 완료 토글Button• 시트 단위로 "작업 완료" 상태를 토글해 시트를 편집 가능/view-only(잠금)로 전환하는 기능. 파일 메뉴 항목 원문 = "'{시트명}' 작업 완료로 변경"(사용 중 → 작업 완료 전환). 되돌리기 경로는 "파일 → 사용 중으로 변경"(작업 완료 시트 되돌리기 툴팁 문구). 작업 완료(workDoneAt)와 시트 보호(lockedAt/시트 및 범위 보호)는 분리된 별개 상태로, 완료 = workDoneAt + lockedAt(완료는 잠금 포함), 보호 = lockedAt만이다. 보호를 해제하면 완료 표시도 함께 풀린다(응답 workDoneCleared로 안내)
• 클릭 시: 시트 작업 완료 토글. title 원문 "완료하면 시트가 잠겨 수정과 반영이 막힙니다." / (완료 상태에서) "사용 중으로 바꾸면 잠금이 풀려 수정할 수 있어요."
 - CASE01 [작업 완료로 전환]: 파일 메뉴 "'{시트명}' 작업 완료로 변경" → 시트 view-only(잠금) 전환, 이후 셀 편집 차단
 - CASE02 [다시 토글]: "파일 → 사용 중으로 변경" → 편집 가능 상태로 복귀
sdk.sheetView.setWorkDone() · 파일 메뉴([[HBHR102_파일 메뉴]]) · 41 폴더 트리(상태 배지) · 64 수명주기 배지신규 (코드 반영: 7635459) · 완료/보호 분리(dbca988) · 배경: 7/21 베스트 요구(시트 작성중/완료 상태 표시) · 8/17 라이브 실사: 파일 메뉴 "작업 완료로 변경"·되돌리기 "사용 중으로 변경" 확정("작업 중" 잔존 표기 제거)
ㄴ5B시트 상태 표시 (완료·보호·편집 중)Badge• 시트 상태를 사이드바 배지 3종으로 구분 표시하는 기능. 완료 = green 점("완료로 잠김"), 보호만 걸린 시트 = 자물쇠 아이콘("보호 중"), 값이 바뀌었으나 아직 급여에 반영되지 않은 시트 = primary 점("편집 중"). 비공개는 눈 아이콘(ic-eye-off)으로 별도 표시
• 표시 전용. "편집 중" 판정은 목록 엔드포인트가 기간 단위로 집계
 - CASE01 [급여대장]: 자기 열이 아니라 반영을 기다리는 소스 시트가 남아 있을 때 "편집 중" 점 표시
sheet_views.workDoneAt/lockedAt · 41 폴더 트리신규 (코드 반영: 8fbb4c2) · 상태 3종 구분
ㄴ5C시트 편집 가드 (진입 시점)-• 잠긴/보호/작업 완료 시트의 편집을 저장 시점이 아니라 편집 진입 시점에 차단하는 가드. 더블클릭·Enter·바로 타이핑 등 모든 진입로가 단일 관문(_beginEdit)에서 막히며, Delete 값 지우기·헤더 색·열 메뉴 편집 계열도 같은 가드를 탄다. 원인(행 보호 / 작업 완료 / 시트 보호)에 따라 푸는 방법을 구분해 안내
 - CASE01 [시트 보호]: "보호 중인 시트입니다.\n수정을 하려면 데이터 > 시트 및 범위 보호에서 보호를 해제해 주세요."
 - CASE02 [행 보호]: "보호 중인 행 입니다.\n수정을 하려면 데이터 > 시트 및 범위 보호에서 보호를 해제해 주세요."
sheet-guard.ts · 5A 작업 완료 · [[HBHR106_데이터 메뉴]] 시트 및 범위 보호신규 (코드 반영: 8fbb4c2) · 편집 진입 시점 가드
60스프레드시트 툴바-• "파일 ▾" / "편집 ▾" / "보기 ▾" / "삽입 ▾" / "데이터 ▾" 메뉴(좌) + "반영" CTA / "설정 완료" CTA(우)를 담는 툴바. 레이아웃은 좌(메뉴)/우(CTA) 50:50 두 덩어리로 분할되어 넘칠 때 각 영역 내에서만 줄바꿈되고, 한쪽이 두 줄이 돼도 반대쪽은 제자리를 유지한다. (시트 수명주기 상태 배지(64)는 툴바가 아니라 시트 헤더(50) h3에 렌더된다 — 8/17 라이브 실사.) 각 메뉴 상세는 개별 문서에 위임
• 각 메뉴 클릭 시: 해당 드롭다운 오픈 → [[HBHR102_파일 메뉴]] / [[HBHR103_편집 메뉴·단축키]] / [[HBHR104_보기 메뉴]] / [[HBHR105_삽입 메뉴]] / [[HBHR106_데이터 메뉴]]
[[HBHR102_파일 메뉴]] / [[HBHR103_편집 메뉴·단축키]] / [[HBHR104_보기 메뉴]] / [[HBHR105_삽입 메뉴]] / [[HBHR106_데이터 메뉴]] 참조 · 수명주기 배지 64~64F · 50 시트 헤더좌/우 50:50 분할 (코드 반영: aed8800) · 설정 완료 CTA 추가 (PR #540) · 배지는 시트 헤더 위치(8/17 실사) · 각 메뉴 상세 위임
ㄴ61반영 (급여대장 반영)Button• 시트에 입력한 값을 급여(수당·공제 레코드)로 기록하는 CTA. title 원문 "시트에 입력한 값을 급여(수당·공제 레코드)로 기록합니다. 반영해야 급여대장과 급여 계산에 반영돼요." 반영 개념이 있는 시트면 버튼을 항상 노출하고, 못 누르는 시트는 disabled + 툴팁으로 사유를 밝힌다(사유 판정·툴팁 문구는 단일 게터 commit-gate.ts에서 결정)
• 클릭 시: 시트 값 → 수당·공제 레코드 기록
 - CASE01 [작업 완료]: disabled — "작업 완료된 시트는 반영할 수 없어요. 시트 상태를 '사용 중'으로 바꾼 뒤 반영해 주세요."
 - CASE02 [시트 보호]: disabled — "보호 중인 시트는 반영할 수 없어요. 데이터 > 시트 및 범위 보호에서 보호를 해제해 주세요."
 - CASE03 [대상 미지정]: disabled — "반영할 대상이 지정되지 않았어요. 열 헤더를 우클릭해 열 설정 → 대상 급여대장 항목을 지정하면 반영할 수 있어요."
 - CASE04 [변경 없음]: disabled — "마지막 반영 이후 변경된 내용이 없어 반영할 항목이 없어요."
commit-gate.ts · 62 열 헤더 메뉴 · 64C 설정 중 노출 제어 · [[HBHR201_전체 확정 (commit)]]신규 (코드 반영: aed8800) · "커밋→반영" 용어 통일 · 항상 노출 + disabled 사유 4종 · 8/17 라이브 실사: CASE01 워딩 "사용 중" 확정(PR #540 통일) · 설정 중엔 숨김(64C)
ㄴ62반영 상태 배지·칩Badge• 시트-급여대장 반영 상태를 배지·칩으로 표시. 배지 문구는 기존 「변경됨/최신」에서 **「반영 필요/반영됨」**으로 변경. 미반영 칩은 "급여대장 미반영", 반영 후엔 "마지막 급여 반영 {일시}"로 목적어를 붙여 표기. 배지는 .ds-label 규격으로 렌더
 - CASE01 [반영됨]: "시트 값이 급여대장에 반영된 값과 같습니다."
 - CASE02 [반영 필요]: "시트 값이 급여대장에 반영된 값과 다릅니다. 다시 반영하면 급여대장이 시트와 같아집니다." · 반영 후 실행 취소 시에도 「반영 필요」로 되돌림
sheet_views.lastCommittedAt · 58 실행취소/재실행신규 (코드 반영: aed8800·160de5a) · 「변경됨/최신」→「반영 필요/반영됨」
63서식 도구 모음-• 글자크기 9|18pt / "B" "I" "S" "U" / 색(글자·배경 분리) / 정렬 / "123"(fill) / 테두리 / "자간 (Letter spacing)" / "서식 지우기 (선택한 셀의 모든 서식 제거)" / "⊘"를 담는 서식 도구 모음. "123" 숫자형식 메뉴에 표시 형식 항목으로 「불리언」(63A) 포함보기 메뉴 "🎨 서식 도구 모음 표시" ([[HBHR104_보기 메뉴]] 참조) · 63A 불리언 표시 형식자간·서식 지우기 신규 · "123" 메뉴에 불리언 추가 (90bc68f)
ㄴ63A불리언 표시 형식-• 열 표시 형식에 신설한 「불리언」 형식. 수식 엔진의 1/0 결과(비교·AND/OR/NOT·TRUE/FALSE 리터럴)를 True/False 텍스트로 표시한다(False는 회색, True는 파란 강조). 사람이 넣은 true/false 문자열도 매핑(0/"0"/"false" → False, 그 외 비어 있지 않으면 True). 편집은 텍스트 입력 그대로. 선택 위치는 두 곳: 열 설정 드로어(71 열 설정) + 서식 툴바 "123" 숫자형식 메뉴. "123" 숫자형식 메뉴 항목 원문 = 자동 / 텍스트 / 숫자 / 날짜 / 시간 / 기간 (HH:MM - HH:MM) / 불리언 (True/False) / 안내 "숫자 형식은 선택한 셀이 속한 열 전체에 적용됩니다. 글자·색·테두리 등 나머지 서식은 선택한 셀에만 적용됩니다."
• 표시 형식 「불리언」 선택 시: 1/0 값을 True/False 텍스트로 렌더
63 서식 도구 모음("123") · 71 열 헤더 메뉴(열 설정) · 75A 불리언 리터럴신규 (코드 반영: 90bc68f) · 열 설정 드로어 + "123" 메뉴 진입 · 1/0 → True/False 표시 · 8/17 라이브 실사: "123" 메뉴 항목·안내 원문 확정
64시트 수명주기 상태 배지Badge• 시트의 수명주기 단계를 상태 배지 3종으로 표시하는 기능. 배지 텍스트 "설정 중" / "사용 중" / "작업 완료"이며, 각 배지 좌측에 SVG 아이콘(기어 / 진행 중 원형 / 체크)이 붙는다(이모지 문자 ⚙/◔/✓ 아님). 배지 위치는 툴바가 아니라 시트 헤더 h3(시트명 왼쪽 앞). data-testid=sheet-lifecycle-badge, ds-label--md·square·line 규격(설정 중=light-gray·semibold / 사용 중=primary / 완료=green). "설정 중" 단계에서는 배지와 함께 설정 중 안내 띠(오렌지 배너)를 노출
• 표시 전용(단계에 따라 하위 컨트롤 노출·잠금 분기)
 - CASE01 [설정 중]: "설정 중" 배지(좌측 SVG 기어) + 안내 띠 · 반영 버튼·직원 추가 숨김(64C)
 - CASE02 [사용 중]: "사용 중" 배지(좌측 SVG 진행 중 원형) · 구조 잠금(64D)
 - CASE03 [작업 완료]: "작업 완료" 배지(좌측 SVG 체크)
 - 배지 호버 툴팁 3종: 설정 중 = "설정 중\n구조(컬럼·열 수식·반영 연결)를 자유롭게 바꿀 수 있어요.\n✓ 설정 완료를 누르면 실무자가 사용할 수 있습니다." / 사용 중 = "사용 중\n값 입력·행 추가 등 일상 작업만 가능해요.\n구조를 바꾸려면 파일 → 시트 재설정." / 작업 완료 = "작업 완료\n시트가 잠겨 수정과 반영이 막힙니다.\n파일 → 사용 중으로 변경으로 되돌릴 수 있어요."
 - 설정 중 안내 띠 원문: "시트를 설정 중 입니다. 구조를 자유롭게 바꿀 수 있어요. 완료하면 실무자가 사용할 수 있습니다.입력된 데이터 {N}행이 있어요 — 열 수식을 바꾸면 전체가 재계산됩니다."
5A 시트 작업 완료 · 64A 설정 완료 CTA · 64C·64D · 50 시트 헤더신규 (PR #540, 21cd1b8 — UP-008 R1·R2·R4·R8) · 워딩 "작업 중"→"사용 중" 통일 · 8/17 라이브 실사: SVG 아이콘·시트 헤더 위치·툴팁·안내 띠 확정
ㄴ64A설정 완료 CTAButton• 툴바 우측 끝에서 시트를 "설정 중"에서 "사용 중"으로 확정하는 [설정 완료] CTA. 설정 중 시트 툴바 우측에는 "설정 중엔 급여반영이 불가합니다." 안내 + [설정 완료] CTA만 노출된다. 클릭 시 확정 다이얼로그를 띄운다
• 클릭 시: 확정 다이얼로그 오픈(구조 요약 4행 + 잠금 안내). 확정 처리 중에는 화면에 화이트 딤 + 스피너
 - 확정 다이얼로그 원문: 제목 "설정을 완료하고 시트를 사용합니다." / 구조 요약 4행 = 컬럼 {n}개 · 수식 열 {m}개 / 급여 반영 연결 없음(또는 연결명) / 자동 행 생성 자동 — 규칙 설정됨 / 행 기준 자유 / 안내문 "사용 중에는 컬럼 구조·열 수식·반영 연결이 잠깁니다. 다시 바꾸려면 파일 → 시트 재설정." / 버튼 [취소] [설정 완료]
 - CASE01 [확정]: 시트 "사용 중" 전환, 구조 잠금(64D) 적용
 - CASE02 [권한 없음]: 노출 안 됨(canManageSetup, 비공개 시트는 생성자만)
64 상태 배지 · 64D 구조 잠금 · sdk.sheetView.finishSetup() (추정)신규 (PR #540, 21cd1b8) · 설정 중 → 사용 중 확정 · 8/17 라이브 실사: 확정 다이얼로그 원문 확정
ㄴ64B시트 재설정-• 확정된 시트를 다시 "설정 중"으로 되돌리는 「시트 재설정」. 파일 메뉴에서 진입 — 파일 메뉴 항목 "시트 재설정 하기" + 설명 "시트의 초기 설정을 변경합니다. 이력이 남습니다." 열 헤더 메뉴 하단에도 "구조 변경은 파일 → 시트 재설정에서" 안내가 붙는다
• 클릭 시: 시트 "설정 중"으로 복귀 → 구조 편집 잠금 해제, 설정 중 안내 띠 재노출
 - CASE01 [권한 없음]: 진입 불가(canManageSetup, 비공개 시트는 생성자만)
64 상태 배지 · 64C·64D · [[HBHR102_파일 메뉴]] · sdk.sheetView.reopenSetup() (추정)신규 (PR #540, 21cd1b8) · 8/17 라이브 실사: 진입 위치 = 파일 메뉴 "시트 재설정 하기"(사이드바 컨텍스트 아님)
ㄴ64C설정 중 노출 제어-• "설정 중" 단계에서 반영 버튼(61)과 직원 추가 진입을 숨기는 노출 게이트. 설정이 완료되기 전에는 급여 반영·행 추가 동선을 감춰 구조 확정을 유도한다
• 설정 중 진입 시: 반영 버튼·직원 추가 숨김
61 반영 버튼 · 64 상태 배지신규 (PR #540, 21cd1b8 — UP-008 R2) · 설정 중 숨김
ㄴ64D사용 중 구조 잠금-• "사용 중" 시트에서 구조 편집(열 추가·수식·열 설정)을 게이트로 차단하는 잠금. 값 편집은 허용하되 시트 구조 변경 계열 동선만 막는다
• 사용 중 진입 시: 구조 편집 동선 게이트 차단
 - CASE01 [재설정]: 시트 재설정(64B)으로 "설정 중" 복귀 시 잠금 해제
71 열 헤더 메뉴(열 설정) · 64B 시트 재설정 · [[HBHR105_삽입 메뉴]] · [[HBHR107_컬럼 헤더 컨트롤]]신규 (코드 반영: 64c3b12) · 구조 편집 게이트
ㄴ64E히스토리 드로어Drawer• 시트의 완료·재설정 이력을 최신순으로 보여주는 「히스토리」 드로어. 드로어 헤더 = "히스토리" + 시트명. 우측 레일 상호 배제 합류(셀 상세·메모 레일과 같은 우측 레일 슬롯을 공유)
• 클릭 시: 우측 레일에 히스토리 드로어 노출(완료/재설정 이력 최신순)
 - 항목 포맷 = [상태 배지] + [날짜 시각] + [작성자]. 예: 설정 완료 · "2026. 08. 11. 13:31" · "안세희"
 - CASE01 [다른 레일 열림]: 우측 레일 상호 배제 — 기존 레일 대체
56 셀 상세 레일 · 64 상태 배지신규 (PR #540, 21cd1b8 — UP-008 R8) · 우측 레일 합류 · 8/17 라이브 실사: 헤더·항목 포맷 확정
ㄴ64F수명주기 승계·소스 제외-• 기간 복사(이전 월에서 가져오기) 시 소스 시트의 수명주기를 대상 시트가 승계하는 규칙. 또한 "설정 중" 소스 시트는 급여대장 "소스 전체 반영"에서 제외하고 제외 사유를 표시한다
• 기간 복사 시: 소스 수명주기 승계
 - CASE01 [소스가 설정 중]: "소스 전체 반영" 대상에서 제외 + 제외 사유 표시
22 이전 월 가져오기 · 64 상태 배지 · [[HBHR201_전체 확정 (commit)]]신규 (코드 반영: 388f810 승계 · 7633ebc 소스 제외 사유)
70데이터 그리드Grid• 컬럼 헤더 + 행으로 구성된 데이터 그리드. 시스템 컬럼(#/사번/성명/팀/직급 등) + 유형별 항목 컬럼, 휴직/퇴사 행 회색 처리(추정). 그리드 셀 내 상태 배지(대기·승인·지급·취소)는 .ds-label 규격(xs·square·line)으로 렌더되며 색은 DS 의미 매핑(승인=green / 대기=yellow / 지급=blue / 취소=light-gray)을 따른다컬럼 헤더 [[HBHR107_컬럼 헤더 컨트롤]] 참조 / 시트 유형 HBHR200~270상태 배지 DS 라벨화 (코드 반영: 160de5a) · 컬럼 헤더 구조 위임
ㄴ71열 헤더 메뉴Menu• 열 헤더 우클릭·컨트롤로 여는 메뉴. "열 설정"을 메뉴 최상단으로 이동하고 설명 줄 "열 종류와 형식, 급여 반영 대상을 설정합니다"를 붙였다(반영 대상 지정 = 반영 버튼 활성 전제). 열 우클릭 시 해당 열이 선택되도록 변경해 메뉴 대상과 화면 선택을 일치시킴. 메뉴에 조건부 서식 진입을 추가(74 규칙 모달)
• "열 설정" 클릭 시: 열 종류 에디터 열림(열 종류·형식·대상 급여대장 항목 지정)
• "조건부 서식" 클릭 시: 규칙 모달 오픈(74)
 - CASE-E [중복 컬럼 키 저장 시도]: 서버가 columnLayout 저장(생성/수정/템플릿 저장 5개 경로 공통)을 거부 — 오류 문구 "컬럼 키가 중복되었어요: {키 목록} — 같은 키의 열은 시트에 하나만 있을 수 있어요." (중복 키 유입 시 Alpine x-for 키 충돌로 헤더가 조용히 사라지는 렌더 붕괴 재발 방지)
61 반영 버튼(대상 지정) · 74 조건부 서식 규칙 모달 · [[HBHR107_컬럼 헤더 컨트롤]] 상세신규 (코드 반영: aed8800) · "열 설정" 최상단 이동 + 설명 줄 · 우클릭 열 선택 · 조건부 서식 진입 추가(7be8937) · 헤더/행 컨텍스트 메뉴는 실측 렌더 크기 기준으로 뷰포트 안에 열림(넘침 방지, d2f9157) · 중복 키 서버 검증(91782a7 — 문구는 코드 확정값, 재현에 저장 실행이 필요해 라이브 실사 생략)
72수식 적용 범위 하단 바-• 셀 수식 편집 중 화면 하단에 상시 노출되는 적용 범위 바(formula-scope-bar). 기존 범위 선택 팝업을 제거하고, 엑셀 관습에 맞춰 Enter = 이 셀만 · Shift+Enter = 열 전체 두 경로를 키로 제공(기존 안내 배지 제거). 같은 두 경로를 바의 [이 셀만] · [열 전체] 버튼으로도 제공
• 셀 수식 편집 진입 시: 하단 바 노출 → Enter/Shift+Enter 또는 바 버튼으로 적용 범위 선택
 - 사용 중 시트 바 원문: 좌측 안내 "Enter → 이 셀만 적용 (사용 중에는 열 전체 적용 불가)" / 버튼 이 셀만 적용 · [Shift+Enter 전체 열에 적용 🔒](사용 중 시트에서 잠금/비활성)
 - CASE01 [사용 중 시트]: Shift+Enter(열 전체)도 [이 셀만]으로 처리하고, 적용 전 수정 사유 입력을 요구 → 입력 값을 셀 메모로 저장(마커·호버·이력 재사용)
 - CASE02 [메모 저장 실패]: 수식 적용은 유지 + 실패 토스트 안내
56 셀 상세 레일(메모) · 64D 사용 중 구조 잠금 · sheet_cells 메모신규 (코드 반영: 5f00544 — 2026-08-10 확정 · UP-008 F4) · 범위 선택 팝업 제거 · Enter/Shift+Enter 관습 · 8/17 라이브 실사: 바 안내·버튼 원문 확정
73하단 합계행Cell• 컬럼별 "∑" 합계 + "{n}명" 카운트를 표시하는 전 시트 공통 합계행
 - CASE01 [값 0]: 0 표기
집계(∑) [[HBHR107_컬럼 헤더 컨트롤]] 참조전 시트 공통
74조건부 서식 규칙 모달Modal• 열 헤더 우클릭 "🎨 조건부 서식"(71)으로 여는 규칙 모달. 셀 값 조건 + 색 프리셋 + 대상 셀 미리보기로 규칙을 구성하며, 값 조건 외에 수식 평가 조건도 지원한다. 모달 원문: 제목 "조건부 서식 — {열명}" / 설명 "조건에 맞는 셀이 스스로 색을 바꿔요. 규칙은 시트에 저장되고, 칩에서 켜고 끌 수 있어요." / 조건 옵션 = 다음보다 큼 / 다음보다 작음 / 같음 / 같지 않음 / 비어 있음 / 수식이 참일 때 / 값 입력 "값 또는 [열키]" + 힌트 "고정값(100000) 또는 다른 컬럼 참조([지급총액])를 넣을 수 있어요." / 색 프리셋 4종(무색·노랑·초록·파랑 등) + "굵게" 체크 / 미리보기 "값 — 현재 {n}개 셀 해당" / 버튼 [취소] [규칙 저장]
• 규칙 설정 시: 조건(값/수식) + 색 선택 → 대상 셀 미리보기로 확인
 - CASE01 [값 조건]: 다음보다 큼/작음/같음/같지 않음/비어 있음 등 셀 값 비교
 - CASE02 [수식 조건]: "수식이 참일 때" — 수식 평가 결과로 서식 적용
71 열 헤더 메뉴 · [[HBHR107_컬럼 헤더 컨트롤]]신규 (코드 반영: 7be8937 — UP-007) · 값/수식 조건 + 색 프리셋 + 미리보기 · 8/17 라이브 실사: 모달 원문·조건 옵션·색 프리셋 확정
75수식 함수 신설·IFERROR 감싸기-• 수식 함수 3종 신설: IFERROR / SUMIF / COUNTIF(fx 가이드·자동완성 등록). 헤더 수식 편집기·수식바에 「IFERROR로 감싸기」 버튼을 제공해 현재 수식을 IFERROR로 한 번에 감싼다. 수식바 우측 끝 버튼 원문 "🛡 IFERROR", 툴팁 "현재 수식을 IFERROR(수식, 0)로 감싸요 — 참조 미해결·0 나눗셈 같은 오류를 담당자가 정한 값으로 통제해요"
• "IFERROR로 감싸기" 클릭 시: 현재 수식을 IFERROR(…)로 래핑
 - CASE01 [이미 IFERROR로 감싸짐]: 버튼 비활성(disabled)
71 열 헤더 메뉴(헤더 수식 편집기) · 60 수식바 · fx 가이드·자동완성신규 (코드 반영: 2a18a41 — UP-006) · 함수 3종 등록 · IFERROR 감싸기 버튼 · 8/17 라이브 실사: 버튼·툴팁 원문 확정
ㄴ75A불리언 리터럴 (TRUE/FALSE)-• 수식에서 불리언 리터럴 TRUE / FALSE를 지원(맨 표기·함수형 TRUE()/FALSE() 둘 다). 내부 표현은 1/0으로, 기존 비교·논리(AND/OR/NOT) 연산자 결과와 동일한 표현이다. 수식 도구(fx) 카탈로그에 TRUE/FALSE 항목 등재. fx 팝오버 함수 카탈로그 원문: TODAY() DAY MONTH YEAR EOMONTH IF(c,t,e) ROUND ROUNDUP ROUNDDOWN FLOOR CEILING ABS MIN MAX SUM AVERAGE COUNT AND OR NOT TRUE FALSE IFERROR SUMIF COUNTIF SUMIFS COUNTIFS / 안내 "함수를 누르면 설명이 아래에 펼쳐져요. 읽어 보고 「함수 입력」으로 넣으세요." / 하단 "상수 (단가)" + [관리]
• 수식 입력 시: TRUE→1 / FALSE→0으로 평가. 열 표시 형식 「불리언」(63A)과 결합 시 True/False 텍스트로 표시
63A 불리언 표시 형식 · 75 수식 함수 · fx 카탈로그신규 (코드 반영: 90bc68f) · 맨 표기·함수형 · fx 카탈로그 등재 · 8/17 라이브 실사: fx 팝오버 함수 카탈로그·상수(단가) 관리 원문 확정
ㄴ75B엑셀식 비교 연산자 (=/<>)-• 수식 본식에서 엑셀 관습의 단일 등호 =([A]=[B])와 부등호 <>를 허용. 토크나이저가 내부 ==/!=로 정규화하며, 기존 ==/!= 표기도 그대로 동작한다. SUMIF/COUNTIF 조건 문자열 파서가 이미 두 표기를 받고 있어 같은 시트 안 문법이 통일됨
 - CASE01 [=/<> 입력]: 내부 ==/!=로 정규화해 평가
75 수식 함수(SUMIF/COUNTIF) · 79 수식 순환 감지 · 수식 엔진신규 (코드 반영: b862772 — QA-55) · =/<> 허용·내부 ==/!= 정규화 · SUMIF/COUNTIF와 문법 통일
76드로어 재편 (요약)-• 우측 드로어 중심으로 편집 UI를 재편(PR #528). 요약: ① 열 설정 모달 → 우측 드로어(진입점 6곳) ② 급여 반영 설정 분리 드로어 ③ 행 인스펙터 우측 레일 이관 ④ 상시 수식 바 + fx 팝오버·인수 가이드 ⑤ 선택 영역 합계 배지 "선택 N개 · 합계 · 평균" ⑥ 카테고리 점프바 숨김 처리(a946995) ⑦ 툴팁 소스 목록 가림 수정(d944d1e). 각 구역 상세는 하위 문서에 위임
• 상세 동선은 [[HBHR107_컬럼 헤더 컨트롤]] / [[HBHR109_행 정보 패널·검색]]에 위임
56 셀 상세 레일 · 60 수식바 · [[HBHR106_데이터 메뉴]] · [[HBHR107_컬럼 헤더 컨트롤]] · [[HBHR109_행 정보 패널·검색]]요약 반영 (PR #528, 8/8 머지) · 상세 위임 · 전면 재작성 별도 예정 · 열 설정 드로어 미저장 변경 확인창에서 [취소] 후 같은 확인이 재차 뜨던 문제 수정(188553a)
77급여대장 생성 진입점Button• 대상 급여대장 시트가 없을 때, 반영 동선에서 급여대장을 새로 생성하는 진입점을 제공하는 기능
• 클릭 시: 급여대장 시트 생성 → 반영 대상으로 연결
61 반영 버튼 · [[HBHR200_급여대장]] (추정)신규 (코드 반영: 87437af) · 급여대장 부재 시 생성 유도
78크로스시트 참조 순환 방지-• 시트 간 수식 참조(크로스시트 참조) 시 순환 참조를 방지하는 옵션72 수식 적용 범위 바 · 수식 엔진신규 (코드 반영: 995a0c6) · 순환 참조 방지 옵션
79수식 순환 감지·저장 차단-• 수식을 저장하기 직전, 크로스시트·동일 시트(자기 자신 포함) 참조를 따라가 편집 중인 열/셀로 되돌아오는 순환 경로가 생기는지 검사해 순환이면 저장을 차단하고 경고를 표시하는 가드. 셀 편집(셀 = 입력·수식바)과 헤더 수식 편집기 양쪽에 적용되며, 순환 검사에 걸리면 입력 초안을 그대로 남긴다. 이미 저장돼 있던 옛 순환은 검사하지 않는다(편집 열/셀을 지나는 경로만 판정)
• 저장 시: 순환 검사 → 순환 시 저장 중단 + 경고 팝업
 - CASE01 [순환 감지]: 저장 차단 · 경고 팝업 danger 톤 "서로 참조하는 수식이 있어 저장할 수 없어요." + "닫기" 버튼, 입력 초안 유지
72 수식 적용 범위 바 · 71 열 헤더 메뉴(헤더 수식 편집기) · 60 수식바 · 78 크로스시트 순환 방지 · 수식 엔진신규 (코드 반영: 471f3db·954fac5 — PR #545 QA-56) · 셀 편집·헤더 수식 편집기 양쪽 적용 · 저장 시점 차단 · 경고 문구(CASE01)는 저장 실행 필요로 8/17 실사 미검증(TBU)
7A채우기 핸들-• 셀을 이어서 채우는 채우기 핸들. 마우스 드래그(엑셀식 핸들 드래그)와 단축키 ⌘D(아래로 채우기)/⌘R(오른쪽으로 채우기)이 같은 채우기 로직을 공유해, 값 채우기 규칙(연속 값 감지 등)과 되돌리기 이력이 두 경로에서 동일하게 동작한다
• 드래그 또는 ⌘D/⌘R 시: 채우기 로직 적용(값 규칙·되돌리기 이력 공통)
58 실행취소/재실행 · [[HBHR103_편집 메뉴·단축키]] 채우기 단축키 · 71 열 헤더 메뉴신규 (코드 반영: 8d38bed — PR #548) · 드래그·단축키 채우기 로직 통일
70-EEmpty 상태-• 해당 기간 시트 없을 시 빈 상태를 노출해 새 시트 만들기를 유도하는 상태[[HBHR101_새 시트 만들기 모달]] 참조TBU: Empty 노출 문구 원문

단축키 카탈로그 포인터

"단축키" 버튼(ㄴ23)이 여는 도움말 모달은 4카테고리로 구성되며, 전체 카탈로그는 [[HBHR103_편집 메뉴·단축키]]가 소유한다. 워크스페이스는 진입점만 제공 — 아래는 카테고리 요약 포인터이며 상세 항목은 103 참조.

카테고리대표 키 (요약)상세
탐색 (Navigation)↑↓←→ 셀 이동 / j·k 사이드바 시트 전환 / "/" 검색 / i 행 정보[[HBHR103_편집 메뉴·단축키]]
선택 (Selection)Shift+클릭 범위 선택 / 우클릭(# 열) 행 메뉴[[HBHR103_편집 메뉴·단축키]]
편집 (Editing)Enter/Tab/Esc / Ctrl+C·V TSV / Ctrl+D·R 채우기 / Ctrl+Z·Shift+Z[[HBHR103_편집 메뉴·단축키]]
메뉴·찾기Alt+F/E/I/D/V 메뉴 열기 / Ctrl+F·H 찾기·바꾸기 / ? 도움말 토글[[HBHR103_편집 메뉴·단축키]]

참조 요약 (하위 문서 트리)

구역상세 사양서
새 시트 만들기 모달[[HBHR101_새 시트 만들기 모달]]
파일 메뉴[[HBHR102_파일 메뉴]]
편집 메뉴·단축키 (전체 카탈로그)[[HBHR103_편집 메뉴·단축키]]
보기 메뉴[[HBHR104_보기 메뉴]]
삽입 메뉴[[HBHR105_삽입 메뉴]]
데이터 메뉴[[HBHR106_데이터 메뉴]]
컬럼 헤더 컨트롤[[HBHR107_컬럼 헤더 컨트롤]]
좌측 사이드바(폴더/휴지통) · 폴더 관리 모달[[HBHR108_폴더·휴지통 사이드바]]
시트 헤더 검색 · 행 정보 · 셀 상세 패널[[HBHR109_행 정보 패널·검색]]
시트 유형 화면HBHR200 ~ HBHR270

권한·상태 분기 요약

시나리오트리거결과비고
CASE01 [미인증 진입]/hr-system 직접/hr-system/signin 리다이렉트
CASE02 [HR_ADMIN 진입]인증 세션최근 시트 /sheets/조건1 [HR_ADMIN]
CASE03 [SUPER_ADMIN 진입]인증 세션최근 시트 /sheets/조건2 [SUPER_ADMIN]
CASE04 [폴더 없음]folder 값 부재"(미분류)" fallback
CASE05 [시트 없음]sheet_list 0건Empty 상태(70-E)문구 TBU

Open Question

  • 최근 작업 시트가 없을 때의 진입 동선 (TBU)
  • 계정 버튼(11) 표시 값 (TBU)
  • 알림(12) / 댓글(59) / 메모 이력(55) 버튼의 상세 동작 (TBU)
  • Empty 상태(70-E) 노출 문구 (TBU)
  • 시트 검색(52) 결과 없음 Empty 문구 (TBU)
  • 폴더 관리 모달 "+ 새 폴더" 상세 동작·에러 처리 — [[HBHR108_폴더·휴지통 사이드바]] 소유 (TBU)
  • 이전 월 가져오기(22) 에러·실패 동작 (TBU)
  • 폴더 관리 버튼(24) 에러·실패 동작 (TBU)
  • tRPC procedure · 권한 토큰 실제 키 — 현재 전부 추정 네이밍