Skip to content

HBAD200_직원 관리 ​

(Hereby) 관리자 패널 > App Shell > 인사 관리 > 직원 관리

메타앱: 관리자 패널 (App Shell)대상 사용자: 조건1 [직원 조회/관리 권한 보유 역할]프로토타입: TBU관련 정책: [[POL_권한(RBAC)]]Status: reviewOwner: 카나

개요 ​

직원 관리는 관리자 패널의 기본 랜딩 화면이자 직원 마스터(employees)의 SoT 목록이다. KPI 통계 바 + 필터/검색 + 직원 목록 그리드로 구성된다. 한 직원은 **멀티 소속·역할(n:m)**을 가진다. 소속은 team_members 계층 chip으로 표기된다 (예: "간호부 > 병동1"). "직원 추가"는 단일 모달로 Employee + 소속 + 계약 + 자격증 요건을 1회 생성한다 (HBAD201). (10/21 변경, #1257 dc27a43 — 10/22 실측) 목록 행 클릭으로 「직원 정보 수정」 모달(HBAD201)에 바로 진입한다 — 종전 "행 클릭 무반응 · 관리 컬럼으로만 진입"(7/20 실측)은 폐지. "관리" 컬럼 버튼(근태 관리/권한 미리보기/팀 이동/인사발령 품의/삭제)은 병행 유지. 휴직·퇴직은 별도 처리 모달(HBAD202)로 진행된다.

문서 히스토리 ​

  • 2026-07-06 최초 작성 - 카나/콸
  • 2026-07-10 라이브 기능 검토 반영 - 카나/콸
  • 2026-07-13 버튼 행동 명세 보강 - 카나/콸
  • 2026-07-17 코드 변경 반영(de57b65·0125f00) - 카나/콸
  • 2026-07-21 GC700 깊이 재작성 (라이브 재검증 7/20 — KPI/검색/empty/행클릭) - 카나/콸
  • 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
  • 2026-07-22 코드 변경 반영(c648ec1·4f063fa) - 카나/콸
  • 2026-07-23 코드 변경 반영(98a90dd·d0610db) - 카나/콸
  • 2026-09-01 팀 선택 트리 접기 동작 수정 반영(#598, 라이브 실증) - 카나/PM
  • 2026-09-10 목록 페이지 크기 선택기 반영(#636, 3c17afc, CS-LOC-260909-0010, 라이브 실사) - 카나/PM
  • 2026-09-14 팀 관리 병동 정보 개선 반영 - Claude/dev
  • 2026-09-16 급여 제외 플래그(비급여 계정 대장 제외) 반영(#722, b8a8c77) - 카나/콸
  • 2026-09-16 관리자 근태 관리 모달 「전체 근무기록」 탭 추가 반영(#729, ddaf967) - 카나/콸
  • 2026-09-17 직원 등록 결과 화면 병동 자동배정 힌트(9630721)·대량 추가 템플릿 팀·직무 필수+근무 그룹/유형 열(332b2df)·팀 수정 권한 가드+소속 저장 실패 통지(ad0f799) 반영 — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-09-18 대량 추가 직무 마스터 연동(미등록 직무 = 행 오류) + 자동 근무 채움 순서 「직무 기본 근무 → 팀 대표 근무」 확장 반영(7f63a4b, #791) — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-09-21 소속 피커 활성 전용화+검색 줄(비활성 팀/역할 숨김, 현재 배정 값은 유지, 팀 검색 시 평면 표시 — 65daef2, #809)·필터 줄 「근무 설정」 진입 버튼(07effb5, #806)·근무 배정 출처 셀(shiftAssignedVia, c4eb0f9, #804)·조직별 「역할」 낱말 치환(47b53a9, #807) 반영 — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-09-23 긴 근무형태 이름 말줄임 + 툴팁 첫 줄 전체 이름(b545090, #852, CS-OKBEST-260922-0003/0004)·직무 기본 근무와의 차이 표시 「≠ 직무 기본」·「기본」(33948ca, #851, MED-693)·대량 업로드 「근로형태」 열(workPatternName)(73c0cb4, #823) 반영 — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-09-23 직원 관리 필터·정렬 상태 기억(조직·사용자별 localStorage, loadEmployees 저장 · init 복원, 새로고침 후 유지 — 6457e48, #867, CS-OKBEST-260923-0001) 반영 — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-09-25 낮 스윕 라이브 실사 — 필터·정렬 기억 실증(저장 키 admin:employeeList:{조직}:{사용자} 실측, 새로고침 유지 확인, ㄴ20-P TBU 해소)·근무형태 말줄임 배지+툴팁 첫 줄 전체 이름·툴팁 「배정 출처: 이전 데이터」 실측(ㄴ46-1·46-2 해소)·「기본」/「≠ 직무 기본」 배지 DOM 구조 확인(ㄴ46-3, 실배지 케이스 미관찰)·「근무 설정」 진입 버튼 실측(ㄴ24) - 카나/PM
  • 2026-09-29 #833/#912(v0.14.0) 관련 반영 — 수간호사(책임자) 표기 통일(ㄴ48, 라벨 원문 재실사 TBU). #833은 공통 「직원 카드」(병동 배정 줄·스케줄러 보기·직원 정보 수정)를 5곳에 도입 — 팀 관리·병동 관리는 실측 확인, 직원 관리 목록 적용 여부 = TBU(기존 7/20 실측 "행 본문 클릭 무반응"과의 정합 재실사 필요) - 카나/PM
  • 2026-09-30 관리 메뉴 「인사발령 품의」 + 인사발령 품의 모달(ㄴ43-1) 신설 반영 — 전보·겸직 추가·소속 종료·역할 변경, 시행일 반영, 승인 = employee:manage·시스템 관리자만(647e1eca #900, MED-779) — 커밋 근거, 모달 원문 라이브 실사 이월(TBU) - 카나/PM
  • 2026-10-01 인사발령 품의 모달 라이브 원문 실측(ㄴ43-1 → 하위 ㄴㄴ43-1-1~6 분리: 발령 종류 4종·종류별 필드·안내문·버튼 비활성 초기값) + 관리 버튼 묶음 실측 순서·퇴직 직원 비활성 툴팁, 퇴직 취소는 HBAD201 경로(#959, MED-834) 교차 참조 — okbest.dev 조회·모달만(제출 0건) - 카나/PM
  • 2026-10-07 PR #1058(d6ad6c01·6fc17452, MED-912) 반영: 행 「팀 이동」 아이콘·선택 툴바 「팀 이동」 → 팀 이동 모달(ㄴ43-2 신설, 자동 승인 인사발령 문서) · PR #1059(3e90dfbd, MED-925·924·923) 반영: 근무 그룹 필터 2종(ㄴ25)·「부 그룹 제거」 툴바(ㄴ26) · PR #1051(14e617ba, MED-913) 반영: 권한 미리보기 bfcache 가드(ㄴ43-3) — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM
  • 2026-10-09 (10/8 머지분) PR #1122 반영: 이름 셀 공용 직원 카드(ㄴ40-2 신설) — 라이브 실사 10/9 카드 구성(이름·상태·사번·직무·소속 팀·병동 배정·「직원 정보 수정」) 실측 - 카나/PM
  • 2026-10-22 (10/21 머지분, PR #1257 dc27a43) 행 클릭 레코드 열람 전환 — 행 본문 클릭 → 「직원 정보 수정」 모달 직행(종전 무반응 폐지), 10/22 라이브 실측(행 cursor:pointer·모달 앵커 내비 기본정보/인사정보/자격증·면허/근로계약/고정 수당/계정·보안 확인 후 ESC 종료). 40·ㄴ43·권한/상태 CASE02 갱신. 9/29 TBU(직원 카드 vs 행 클릭 정합)도 본 변경으로 해소 - 카나/PM

Data I/O ​

Server → Client

변수

메타$
메타$
메타$
메타$
메타$

Client → Server

액션전달 값tRPC procedure권한 토큰
직원명부 다운로드현재 필터(상태/팀/역할/검색어/입사일/직무/병동) + 선택 출력 컬럼 + 팀별/전체 범위export (코드 반영: 98a90dd)직원 조회 (추정)
직원 추가-HBAD201 모달 오픈직원 관리 (추정)
필터/검색상태/팀/역할/직무/병동/입사일/검색어목록 재조회직원 조회 (추정)
대량 추가/수정 업로드템플릿 행(… 팀 · 역할 · 직무)대량 업로드 (추정)직원 관리 (추정)
소속 chip × / 역할 변경team_member rowsdk.teamMember.* (추정)직원 관리 (추정)

직원 관리 사양표 ​

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00노출 조건-• 관리자 패널 진입 시 기본 랜딩 ("직원 관리"). 조건1 [직원 조회 권한]인증 세션
01초기 상태-• "직원 목록" 표시, 필터 미적용 전체 목록, "총 295건 중 1-30건". 기본 정렬 = 입사일 기준(조직 탭 포함). 기본 페이지 크기 = 30(ㄴ45에서 변경 가능)
• 탭 상태 기억: 탭(직원/조직 등) 선택 상태를 localStorage에 저장 — 새로고침 시 마지막 탭 복원, URL 해시 = 현재 탭 (코드 반영: d0610db)
• 필터·정렬 상태 기억: 직전에 걸어 둔 필터·정렬을 복원한 뒤 첫 조회를 실행 — 상세는 ㄴ20-P
기본 정렬 입사일(코드 반영: c648ec1·4f063fa) · 탭 상태 복원(d0610db) · 페이지 크기 기본 30(#636) · 필터·정렬 복원(6457e48)
10KPI 통계 바Output• 조직 인원·조직 카운트 요약 표시 "전체 295 / 재직 271 / 비활성 9 / 휴직 3 / 퇴직 12 / 팀 33 / 역할 4" (7/20 재검증). 값 없음: 0
 - CASE01 [상태 enum]: 재직/비활성/휴직/퇴직 4종
• "전체 직원" = 재직 + 휴직 (팀 관리·병동 현황과 같은 기준). 비활성·퇴직은 전체에 넣지 않고 옆 칸에 따로 표시
$7/10 대비 팀 64→33, 비활성 7→9, 전체 293→295 · 전체 기준 변경(9/14) — 위 7/20 예시 수치는 변경 전(전 상태 합) 기준
15툴바 구성Layout• 두 줄 구성
 - 1줄: "직원 목록" 제목 + 검색 · "업로드" · "직원명부 다운로드" · "신규 직원 추가"
 - 2줄: 필터 상태 · 팀 · 역할 · 직무 · 병동 | 입사일 · 초기화
• 직원을 체크박스로 선택하면: 2줄에 필터 대신 일괄 변경 도구 표시
2줄 재배치(9/14)
20필터Dropdown• 상태/팀/역할/직무/병동/입사일로 목록을 거르는 필터: "상태 선택" / "팀 선택" / "역할 선택" / "직무 선택" / "병동 선택" / "입사일" / "선택 초기화"
• 선택 시: 목록 재조회 + 카운트 갱신
 - "팀 선택" = 계층 트리(체크박스 + 팀별 "접기" 토글). CASE01 [접기]: 해당 팀의 하위 팀이 목록에서 숨김 (라이브 실증 9/1: 병동1 접기 → 팀1 숨김. 구버전은 접어도 하위가 계속 보이던 버그 — #598 수정)
목록 재조회 · 팀 피커 공용 컴포넌트접기 동작(#598) 라이브 실증 · 직무/병동 추가(9/14)
ㄴ20-T「역할」 낱말 조직 용어 치환Label• 조직 설정 settings.terminology.role 값으로 화면의 「역할」 낱말만 바뀜(예: 「직책」)
 - 적용 위치: LNB · 직원 표 머리글 · 필터 라벨 · 역할 탭 · 대량 업로드 안내/템플릿 머리글
 - 대량 업로드 파서는 치환 낱말·「역할」 둘 다 허용
 - 역할 데이터·권한 코드는 불변. LNB 메뉴 라벨은 새로고침 후 반영(스냅샷)
 - 값 없음: 기본 낱말 「역할」
Organization.settings.terminology.role · [[HBAD270_설정 (조직 설정·내 정보)]]신설 (코드 반영: 47b53a9, #807) · TBU: 라이브 실사 이월
ㄴ22직무 필터Dropdown• 직원 직무(jobDuty)로 거르는 다중 선택 필터. 기본 "직무 선택"
• 옵션에 "미입력"(직무가 비어 있는 직원) 포함 — 팀 관리 명단의 직무 필터와 같은 기준
employees.jobDuty신규(9/14)
ㄴ23병동 필터Dropdown• 병동 배정(스케줄러 간호 프로필)으로 거르는 다중 선택 필터. 기본 "병동 선택"
• 옵션에 "미배정"(어느 병동에도 배정되지 않은 직원) 포함
• 병동 목록은 드롭다운을 처음 열 때 불러옴 — 스케줄러 권한이 없으면 "미배정"만
간호 프로필 · wards신규(9/14)
ㄴ21검색Search• 이름/사번/이메일로 직원을 찾는 검색창 (placeholder "직원 검색 (이름 / 사번 / 이메일)...", 7/20 재검증)
• 입력 시: 일치 목록 재조회
 - CASE01 [결과 있음]: 필터 목록 표시
 - CASE02 [결과 없음]: Empty
${affiliations} 부재문구 순서 변경(이름/사번/이메일) · TBU: 목록 0건 empty 표기
ㄴ24근무 설정 (진입 버튼)Button• 필터 줄 오른쪽에서 「근무 설정」(유형·기준 관리) 팝업을 바로 여는 진입 버튼
• 클릭 시: 근무 그룹·직무·연장근무·외근·연차·공휴일 탭을 가진 근태 설정 팝업 오픈(근태 현황과 같은 팝업)
• 목적: 직원 등록·수정이 쓰는 근무 그룹·직무 마스터를 직원 관리에서 이탈 없이 편집
[[HBAD260_근무 설정 (근무 그룹·유형)]]신설 (코드 반영: 07effb5, #806) · 라이브 실사 확인(2026-09-25 — 필터 줄 우측 「근무 설정」 버튼 실측, 클릭 시 유형·기준 관리 팝업 오픈)
ㄴ25근무 그룹 필터 2종Dropdown• (신설 10/7, #1059, MED-925·924·923) 직원 목록 필터에 「근무 그룹 2개 이상」·「기본값 ≠ 직무 기본」 추가 — 복수 근무 그룹·직무 기본과 다른 근무를 가진 직원을 걸러냄. 배지·필터가 같은 판정(shiftDiffersFromDefault)을 씀employees 근무 그룹 · ㄴ46-3신설 (3e90dfbd, #1059) · 필터 라벨 원문 TBU(실사 대기)
ㄴ26부 그룹 제거 (툴바)Button• (신설 10/7, #1059) 선택 툴바 「부 그룹 제거」 — 선택 직원들의 부 근무 그룹을 일괄 제거(employee.clearSecondaryShiftGroups). 일괄 지정은 주 소속 줄의 근무를 교체한다고 명시
• 수정 화면에서는 부 그룹 줄에 ×(주 소속은 안내로 거절) — [[HBAD201_직원 추가·수정 모달]]
employee.clearSecondaryShiftGroups신설 (3e90dfbd, #1059) · 버튼 위치·안내 원문 TBU(실사 대기)
ㄴ20-P필터·정렬 상태 기억 (새로고침 유지)State• 목록에 걸어 둔 필터·정렬을 브라우저(localStorage)에 기억해 새로고침·다른 탭에서 돌아와도 그대로 유지
 - STEP1 [저장]: 목록 조회(loadEmployees)마다 현재 필터·정렬을 저장 — 드롭다운·검색·「선택 초기화」·근무 설정에서 넘어오기 등 필터를 바꾸는 모든 경로가 여기로 모임
 - STEP2 [복원]: 화면 초기화(init) 시 첫 조회 전에 복원해 첫 목록부터 그 필터로 조회
• 유지 범위 = 검색어 · 상태 · 팀 · 역할 · 근무 그룹 · 근무 유형 · 입사일(시작/종료) · 직무 · 병동 + 정렬(기준·오름/내림)
 - CASE01 [페이지 번호]: 저장하지 않음(필터가 바뀌면 1페이지로 돌아가므로)
 - CASE02 [저장값 모양 불일치]: 예전 버전·수동 변경 값은 해당 항목만 기본값으로 두고 나머지는 복원
 - CASE03 [사생활 모드·용량 초과]: 기억만 포기하고 목록은 정상 동작
employee-filter-persist.ts(저장 키 = 조직 id + 사용자 id별) · ㄴ20 필터 · ㄴ21 검색 · ㄴ40-1 컬럼 정렬 · ㄴ45 페이지 크기 선택기(별도 키)신설 (코드 반영: 6457e48, #867, CS-OKBEST-260923-0001) · 조직·계정 전환 시 서로 섞이지 않음 · 탭(LNB) 이동은 원래부터 유지 · 라이브 실사 확인(2026-09-25): 저장 키 실측 admin:employeeList:{조직id}:{사용자id}(값 = filter{search·statuses·teamIds·roleIds·shiftGroupIds·shiftIds·hireDateFrom/To·jobDuties·wardIds}+sort{by·order}), 상태 필터 적용 → 새로고침 후 필터 유지 실증
30직원 액션Button• 툴바 1줄 액션 버튼 묶음: "업로드" / "직원명부 다운로드" / "신규 직원 추가""업로드" 포함(9/14 재정리)
ㄴ31직원명부 다운로드Button• 현재 목록 필터(상태 · 팀 · 역할 · 검색어 · 입사일 · 직무 · 병동) 조건의 직원 목록을 파일로 내보내는 버튼
• 클릭 시: 출력 컬럼 선택 모달(ㄴ31-M) 오픈 → 컬럼 선택 후 내보내기 실행, 성공: 파일 다운로드
권한 "직원 조회" · 코드 반영: 98a90dd · 직무/병동 필터 반영(9/14)
ㄴ31-M출력 컬럼 선택 모달Modal• 명부 출력 시 포함할 컬럼을 고르는 체크박스 모달 (신설)
• 컬럼 체크박스(순서): 사번 / 성명 / 팀 / 직무 / 병동 / 상태 / 입사일 / 이메일 / 전화번호 / 근무형태 — 기본 전체 선택
• 팀별/전체 내보내기 지원
• 모달 재오픈 시: 선택 상태 리셋
• 클릭 시: 내보내기 실행 → 선택 컬럼만 포함한 파일 다운로드
export신설 (코드 반영: 98a90dd) · 배경: 7/21 베스트 요구 반영 · 팀/직무/병동 항목 추가(9/14)
ㄴ32신규 직원 추가Button• Employee+소속+계약+자격증요건을 1회 생성하는 단일 모달 진입 버튼. 원문 "신규 직원 추가"
• 클릭 시: "직원 추가" 모달 오픈 (HBAD201)
[[HBAD201_직원 추가·수정 모달]]
ㄴ32-1등록 권한 가드Guard• 팀 수정 권한이 없는 역할이 직원 등록을 시도하면 직원 생성 전에 차단하고 안내(danger notice)
 - CASE01 [팀 수정 권한 없음]: 등록 전 차단 "소속을 저장하려면 팀 수정 권한이 필요해요. 권한이 있는 관리자에게 요청해 주세요."
[[HBAD201_직원 추가·수정 모달]] · RBAC신설 (코드 반영: ad0f799) · employee.team_permission_required · TBU: 라이브 실사 이월
ㄴ32-2등록 결과 안내Output• 직원 등록 완료(결과) 화면의 안내 블록
 - CASE01 [병동 자동배정]: 스케줄러 2개+ 병동에 자동 배정 시 info 안내 "「{병동명} · {스케줄러명}」 스케줄러에 배정했어요. 다른 스케줄러로 옮기려면 스케줄러 › 간호사에서 바꿔 주세요."(스케줄러 1개 병동은 안내 없음). admin 경로는 동일 문구 info 토스트(6초)
 - CASE02 [소속 저장 실패]: 직원은 생성되되 실패 팀을 danger 알림으로 표시 "소속을 저장하지 못했어요: {teams}. 직원 목록의 수정에서 소속과 근무를 다시 지정해 주세요."
간호 스케줄러(병동 배정) · team_members신설 (코드 반영: 9630721 병동 힌트 · ad0f799 실패 통지) · employee.membership_save_failed · TBU: 라이브 실사 이월
ㄴ33업로드 (대량 추가/수정)Button• 템플릿으로 여러 직원을 한 번에 등록(대량 추가, 최대 500명)하거나 선택한 직원 정보를 갱신(대량 수정)하는 진입 버튼
• 템플릿 컬럼은 … 팀 * · 역할 · 직무 * · 근무 그룹 · 근무 유형 순으로 끝남. 팀·직무는 필수(*), 근무 두 열·역할은 선택 (9/17: 팀·직무 필수화 + 근무 그룹/유형 열 신설, 332b2df)
 - CASE01 [대량 추가]: 팀·직무 빈 칸 = 행 오류. 직무는 직무 마스터에 등록된 이름 그대로 입력(미등록 직무 = 행 오류, 9/18). 근무 그룹·근무 유형 둘 다 비면 직무의 기본 근무 → 팀의 대표 근무 순서로 등록(9/18 — 구버전은 팀 대표만), 둘 다 없으면 근무 그룹 필수 — 행 오류 원문 "근무 그룹을 입력해 주세요. 직무 「{직무}」에 기본 근무가 없고 「{팀}」 팀에는 대표 근무가 없어요." 비활성 그룹·유형 = 행 오류. 뒤쪽 열 없는 예전 템플릿도 업로드 가능(빠진 값은 행 오류 안내)
 - CASE02 [대량 수정]: 직무 빈 칸 = 등록된 직무 삭제. 직무 열이 없는 예전 템플릿은 직무 유지
• 템플릿에 「근로형태」 열(workPatternName) 추가 — 설정 › 「근로형태」 탭(근로형태 마스터)에 등록된 이름을 입력([[HBAD260_근무 설정 (근무 그룹·유형)]] 탭 목록 ㄴ02-1, 전용 사양서 미작성). 필수 여부·검증 문구 = 갱신 대기 (9/22: 73c0cb4, #823)
• 대량 수정에서 직무·근로형태만 바꾼 직원은 「기본 근무 재적용」 규칙에 따라 근무가 직무 기본 근무로 맞춰짐 — 비었음·그룹만·비활성·기본에서 온 값만 맞추고 직접 고른 값은 유지([[HBAD260_근무 설정 (근무 그룹·유형)]] 40-5)
• 병동이 연결된 팀으로 배정되는 행: 그 병동의 병동 배정이 없으면 자동 생성(3교대, 수간호사 아님)
• 팝업 안내 원문(추가) "직무는 설정 › 근무 설정 › 직무에 등록된 이름 그대로 꼭 입력해요(등록되지 않은 직무는 오류)." · "근무 그룹·근무 유형은 근무 설정에 등록된 이름 그대로 입력해요. 둘 다 비우면 직무의 기본 근무 → 팀의 대표 근무 순서로 등록되고, 둘 다 없으면 근무 그룹을 꼭 입력해요. 근무 유형은 비워도 돼요." / (수정) "직무 칸을 비우면 등록된 직무가 삭제돼요(직무 열이 없는 예전 템플릿은 그대로 유지)."
employees.jobDutyId (FK job_duties) · team_members · employee-bulk.schema · [[HBAD260_근무 설정 (근무 그룹·유형)]] 직무 사양표직무 열 추가(9/14) · 팀·직무 필수 + 근무 그룹/유형 열(코드 반영: 332b2df) · 직무 마스터 연동 + 자동 근무 순서 직무 기본→팀 대표(코드 반영: 7f63a4b, #791) · 근로형태 열(73c0cb4, #823) · 대량 수정 기본 근무 재적용(33948ca, #851) · TBU: 라이브 실사 이월
40직원 목록Grid• 직원 마스터 목록 그리드. 컬럼: ☑ / 사번 / 이름 / 이메일 / 팀 · 역할 / 직무 / 병동 / 입사일 / 근무형태 / 상태 / 관리 (7/20 헤더 재확인 + 9/14 직무·병동 추가)
• 클릭 시: (10/21 변경, #1257 — 10/22 실측) 행 본문 클릭 → 「직원 정보 수정」 모달(HBAD201) 진입(행 전체 cursor:pointer). 종전 무반응(7/20)은 폐지
employees10+체크박스 · 행 클릭 진입(#1257, 10/22 실측)
ㄴ40-2이름 셀 — 공용 직원 카드Cell• (10/8, #1122, 8cf8e93b) 목록 표의 직원 이름이 클릭 가능(.ds-name-trigger) — 클릭 → 공용 직원 카드 팝오버: 이름 · 상태(재직 등) · "{사번} · {직무}" · 소속 팀(계층) · 병동 배정(없으면 "배정된 병동이 없어요.") + 앱별 등록 버튼(admin: 「직원 정보 수정」)
• @hereby/components 공용 부품(employee-card) — admin 외 팀장·HR·총무·경영 대시보드·드라이브 목록 표에도 동일 적용(앱이 registerEmployeeCardActions로 등록한 버튼만 노출). 서버 employee.card 조회는 직원 조회 범위 안에서만. 팝업 안의 표는 제외
employee.card · @hereby/components신설 (#1122) · 라이브 실사 2026-10-09(카드 구성 실측)
ㄴ46직무 셀Cell• 직원의 현재 직무(jobDuty) 표시. 헤더 클릭으로 정렬 가능employees.jobDuty신규(9/14)
ㄴ46-1근무 배정 출처Cell• 직원의 근무형태가 어디서 정해졌는지를 목록에 표시(shiftAssignedVia)
 - 값: 직접 선택 / 직무 기본 / 팀 대표 / 일괄 배정 / 엑셀 / 시트 / 직원 앱 자기 선택
 - 값 없음: 출처 미기록(마이그레이션 이전 데이터) 표기 = TBU
• 같은 출처가 직원 정보 수정·관리자 근태 현황·직원 앱 근태 홈에도 표시
employees.shiftAssignedVia · team_members.shiftAssignedVia (마이그레이션 1917)신설 (코드 반영: c4eb0f9, #804) · 라이브 실사 확인(2026-09-25): 근무형태 셀 툴팁 둘째 줄 "배정 출처: 이전 데이터" 실측 — 마이그레이션 이전 데이터 표기 = 「이전 데이터」(값 없음 TBU 해소)
ㄴ46-2근무형태 셀 (긴 이름 처리)Cell• 근무형태 배지의 긴 이름은 칸 안에서 말줄임(…) 으로 표시하고, 툴팁 첫 줄에 전체 이름을 둔다
 - CASE01 [이름이 칸보다 김]: 말줄임 표시 + 툴팁 첫 줄 전체 이름 (CS-OKBEST-260922-0004)
• (성능) 근무형태 배지에 마우스를 올린 채 스크롤하면 버벅이던 문제 해소 — 내부 구현 변경이라 화면 표기 자체는 동일 (CS-OKBEST-260922-0003)
디자인시스템 .ds-label--trunc · 40 직원 목록 근무형태 컬럼신설 (코드 반영: b545090, #852) · 라이브 실사 확인(2026-09-25): 배지 .ds-label--trunc + 셀 래퍼 툴팁 첫 줄 = 전체 이름(둘째 줄 배정 출처) 실측
ㄴ46-3직무 기본 근무와의 차이 표시Label• 직원의 근무형태가 그 직원 직무의 기본 근무와 같은지를 목록에서 알려 준다
 - CASE01 [기본과 다름]: 「≠ 직무 기본」 표시
 - CASE02 [기본에서 온 값]: 「기본」 표시
• 같은 표시가 직원 수정 패널에도 나온다
job_duties.defaultShiftId · ㄴ46-1 근무 배정 출처 · [[HBAD201_직원 추가·수정 모달]] · [[HBAD260_근무 설정 (근무 그룹·유형)]] 직무 사양표신설 (코드 반영: 33948ca, #851, MED-693) · 라이브 실사(2026-09-25): 셀 DOM에 회색 「기본」·노란 「≠ 직무 기본」 배지 구조 실측(조건부 렌더 — 직무 미배정 조직 데이터라 실배지 노출 케이스는 미관찰)
ㄴ47병동 셀Cell• 병동 배정(스케줄러 간호 프로필)의 병동 표시
 - "겸임" 라벨: 두 병동 이상 배정
 - "불일치" 라벨: 소속 팀에 연결된 병동과 배정된 병동이 다름 (title "소속 팀에 연결된 병동과 배정된 병동이 달라요")
간호 프로필 · teams.wardId신규(9/14)
ㄴ48수간호사(책임자) 라벨Label• 병동 배정에서 수간호사인 직원은 사번 옆에 라벨 표시 (팀 관리 명단과 같은 라벨)
• #833에서 수간호사(책임자) 표기 통일 — 통일 후 라벨 원문 = TBU(재실사)
간호 프로필신규(9/14) · 표기 통일(#833)
ㄴ45페이지 크기 선택기Dropdown• 페이지네이션 요약("총 N건 중 1-30건") 옆에서 페이지당 표시 인원을 고르는 선택기: 30 / 50 / 100 / 전체(최대 1,000) (신설)
• 선택 시: 목록 재조회 + 1페이지로 리셋
 - "전체" = 서버 paginationSchema limit 상한(1,000)과 동일 값. CASE01 [총 건수 > 1,000]: 요약에 title 툴팁으로 잘림 안내
• 목록별 localStorage 기억 — 새로고침 후에도 선택 유지
employees · paginationSchema(limit ≤ 1,000)신설 (코드 반영: 3c17afc, #636, CS-LOC-260909-0010) · 구버전 "30 고정" → "기본 30·선택 가능" · e2e testid employee-page-size
ㄴ40-1컬럼 정렬Sort• 사번 / 이름 / 이메일 / 직무 / 입사일 / 상태 컬럼 헤더 클릭으로 목록 정렬(9/14 코드 기준 — 직무 추가). 기본 정렬 = 입사일 기준
• 클릭 시: 토글 3단 순환 — CASE01 [1클릭] 오름차순 → CASE02 [2클릭] 내림차순 → CASE03 [3클릭] 정렬 해제
• UI 시각 인디케이터로 현재 정렬 컬럼·방향 표시
• 직원 추가 모달 오픈 시: 정렬 상태 리셋
employees신설 · 4개 컬럼(사번/성명/팀명/입사일) (코드 반영: c648ec1·4f063fa)
ㄴ41팀 · 역할 셀Cell• 멀티 소속 chip 셀: "간호부 > 병동1"(계층 표기) + 역할 chip + 소속 추가 아이콘. 값 없음: "역할 없음"
• 소속 chip "×" 클릭 시: 컨펌 "이 멤버를 팀에서 제거하시겠습니까?" → 실행
• 역할 chip 클릭 시: 컨펌 ""{이름}"의 역할을 "{역할}"(으)로 변경하시겠습니까?" → 실행
• 소속 추가 클릭 시: 소속(팀·역할) 배정 인라인 추가
team_members n:m계층 chip · 테이블 내 버튼은 아이콘 전용 "+", 라벨 "소속 추가"는 빈 테이블 상태에서만 노출(7/16 변경, 동작 불변)
ㄴ41-1소속 피커 (팀·역할)Picker• 소속 chip의 팀·역할 세그먼트와 「소속 추가」 메뉴가 쓰는 공용 선택기
 - 팀 트리 피커: 비활성 팀을 하위까지 숨김 / 역할 피커: 비활성 역할 제외
 - 예외: 지금 그 소속에 배정된 값은 비활성이어도 남겨 선택 표시를 유지(keepTeamId)
• 관리자 직원 관리와 공용 직원 수정 패널이 같은 규칙 사용
teams.isActive · roles.isActive · [[HBAD201_직원 추가·수정 모달]]신설 (코드 반영: 65daef2, #809) · TBU: 라이브 실사 이월
ㄴ41-2소속 피커 검색 줄Search• 메뉴 맨 위 고정 검색 줄(디자인시스템 신규 .ds-menu__search)에서 이름으로 목록을 거름
 - CASE01 [팀 검색 중]: 접기·계층을 무시하고 일치하는 팀을 평평한 목록으로 표시
 - CASE02 [검색어 없음]: 기존 트리(계층·접기) 표시
 - Empty(-E): 일치 항목 없을 때 문구 = TBU
디자인시스템 .ds-menu__search신설 (코드 반영: 65daef2, #809) · TBU: 라이브 실사 이월
ㄴ42상태Badge• 재직 상태 배지: CASE01 [재직] / CASE02 [비활성] / CASE03 [휴직] / CASE04 [퇴직]employees.status
ㄴ43관리Button• 직원 행 관리 아이콘 버튼 묶음 — (10/21부터 유일 경로 아님: 행 클릭=편집 진입, #1257). 10/1 실측 순서: "근태 관리" / "편집" / "권한 미리보기" / "인사발령 품의" / ("계정 초대" — 조건부) / "삭제"
• 「팀 이동」 아이콘 추가(10/7, #1058, MED-912) — 선택 툴바의 「팀 이동」 버튼과 같은 모달(ㄴ43-2)을 엶. 버튼 위치·순서 TBU(실사 대기)
• "편집" 클릭 시: "직원 정보 수정" 모달 (HBAD201) — 퇴직 취소(#959)는 이 모달 안에서 처리
• "인사발령 품의" 클릭 시: 인사발령 품의 모달 (ㄴ43-1)
 - CASE01 [퇴직 직원]: 버튼 비활성, 툴팁 "퇴직한 직원에게는 발령을 올릴 수 없어요"
• "삭제" 클릭 시: 컨펌 후 삭제 (파괴적 — 기존 기록)
HBAD201 / HBAD202인사발령 품의 추가(#900) · 10/1 실측: 행 메뉴에 "휴직·퇴직" 버튼 없음 → OQ
ㄴ43-1인사발령 품의 모달Modal• 관리자가 대상 직원 명의의 인사발령품의서를 문서 결재에 올리는 모달(직원 본인 제출 아님 — MED-779 1차). 헤더: "인사발령 품의" + 직원명 · 사번 · 현재 소속(없으면 "소속 없음")
• 제출 → document.createHrAction → 문서 결재에 「인사처리」 배지로 등재. 승인은 시스템 관리자 또는 employee:manage 보유자만 → 시행일에 소속·역할 반영, 병동·근무 배정 연동
• 발령 이력 원장은 없음 — 문서 metadata(hrAction)에만 기록
document.createHrAction · hr-action-processing.service · [[HBAD240_문서 결재]] · [[HBAD202_휴직·퇴직 처리 모달]]신설(647e1eca #900) · 10/1 라이브 원문 실측(live-1001-hbad200-appointment.png, 제출 0건)
ㄴㄴ43-1-1발령 종류Select• 선택지: "전보(팀 이동)"(기본) / "겸직 추가" / "소속 종료" / "역할 변경"
• 선택 시: 아래 입력 필드 구성이 종류별로 바뀜 (ㄴㄴ43-1-3)
ㄴㄴ43-1-2시행일Date• 발령이 적용될 날짜. 승인 후 이 날짜에 소속·역할이 바뀜
ㄴㄴ43-1-3종류별 필드Select• CASE01 [전보(팀 이동)]: "현재 팀"(선택) · "새 팀"(팀 트리 선택) · "역할"(기본 "유지 / 없음")
• CASE02 [겸직 추가]: "추가할 팀" · "역할"(기본 "유지 / 없음")
• CASE03 [소속 종료]: "대상 소속"
• CASE04 [역할 변경]: "대상 소속" · "역할 *"(필수)
teams · roles
ㄴㄴ43-1-4발령 사유 (선택)Input• 자유 입력, placeholder "예: 병동 인력 조정"
ㄴㄴ43-1-5안내문Text• "품의를 올리면 문서 결재 대기 건이 생겨요. 직원 관리 권한이 있는 관리자가 승인하면 시행일에 소속·역할이 바뀌고, 병동 배정·근무 배정도 새 소속을 따라가요. 여러 변경은 품의를 나눠 올려 주세요."
ㄴㄴ43-1-6취소 / 품의 올리기Button• "취소" 클릭 시: 모달 닫힘(저장 없음)
• "품의 올리기" 클릭 시: 품의 제출 → 문서 결재 대기 건 생성
 - CASE01 [필수값 미입력]: 버튼 비활성 (초기 상태 비활성 실측)
document.createHrActionTBU: 제출 성공 토스트 원문(발송 금지로 미실측)
ㄴ43-2팀 이동 모달Modal• (신설 10/7, #1058, MED-912) 직원 행 「팀 이동」 아이콘·선택 툴바 「팀 이동」 버튼이 같은 모달을 엶. 입력 = 대상 팀 → 이동/추가 소속 → 역할(기존 유지·없음·지정) → 발령일 → 사유를 한 번에 확인
• 확인 → team.moveMembers가 직원마다 자동 승인된 인사발령 문서를 만들어 발령일이 오늘(이전)이면 바로, 미래면 그날 반영(hr-action-due 잡) — 문서가 전보 이력이 됨
• 서버는 services/team-move.service 한 곳(옛 소속 종료 + 새 소속 합류 + 역할 keep/set/none + 주 소속 승계 + 병동 프로필 이동·정리 + 옛 팀 단톡방 나가기) — 인사발령품의서 승인의 전보·겸직 추가도 같은 함수
• 결과: 적용·예약·건너뜀·실패 건수로 알리고 직원 목록·팀 명단·트리 재조회
team.moveMembers · team-move.service · ㄴ43-1 인사발령 품의 · [[HBAD210_팀 관리]]신설 (d6ad6c01·6fc17452, #1058) · 모달 원문·필드 라벨 TBU(실사 대기) · employee.statusHistory에 appointments(전보 이력) 추가
ㄴ43-3권한 미리보기 bfcache 가드Rule• (10/7, #1051, MED-913) 미리보기 [시작] 직후 브라우저 뒤로가기를 눌러도 관리자 화면이 「시작 중…」 모달이 열린 옛 메모리 상태로 되살아나지 않음 — ①SDK pageshow(persisted)에서 메모리 토큰 ≠ 저장 토큰이면 문서 재로드(installImpersonationHistoryGuard, [종료] 뒤 미리보기 앱으로 뒤로가기도 동일) ②미리보기 시작 이동은 location.replace(토큰 바꾼 관리자 화면을 히스토리에 안 남김)권한 미리보기(ㄴ43) · SDK신설 (14e617ba, #1051)
ㄴ44근태 관리Button• 직원별 근태를 조회·관리하는 "근태 관리" 버튼
• 클릭 시: "근태 관리" 모달 오픈
attendances (추정)

소속 chip 계층 표기 ​

표기의미근거
"간호부 > 병동1"상위 팀 > 하위 팀 계층 경로teams.parentTeamId
"역할 없음"소속·역할 미배정 (값 없음 처리)team_members 부재 (7/20 원문)
chip × (제거)해당 소속 해제. 클릭 → 컨펌 "이 멤버를 팀에서 제거하시겠습니까?"team_members row
역할 chip (변경)역할 변경. 클릭 → 컨펌 ""{이름}"의 역할을 "{역할}"(으)로 변경하시겠습니까?"team_members.roleId
+ (소속 추가)추가 팀·역할 배정 (n:m). 테이블 내 버튼은 아이콘 전용 "+", 라벨은 빈 테이블 상태에서만 노출 (7/16 변경)team_members.roleId

권한 / 상태 요약 ​

시나리오트리거결과비고
CASE01 [목록 조회]화면 진입직원 목록 그리드 + KPI 바 표시권한 "직원 조회"
CASE02 [행 본문 클릭]목록 행 클릭「직원 정보 수정」 모달 진입 (#1257)10/22 실측 — 종전 무반응(7/20) 폐지
CASE03 [명부 다운로드]"직원명부 다운로드"필터 조건 export
CASE04 [직원 추가]"직원 추가"HBAD201 모달 오픈권한 "직원 관리"

Open Question ​

#질문근거상태
OQ1행 관리 버튼 묶음에 "휴직·퇴직" 버튼이 보이지 않음(10/1 실측: 근태 관리/편집/권한 미리보기/인사발령 품의/삭제). 휴직·퇴직 처리 모달(HBAD202) 진입 경로가 편집 모달 내부로 옮겨졌는지 확인 필요live-1001-hbad200-appointment.png열림