HBAD210_팀 관리
(Hereby) 관리자 패널 > 인사 관리 > 팀 관리
| 메타 | 앱: 관리자 패널 (포트 4001)대상 사용자: 조건1 [최고 관리자] / 조건2 [인사 관리자] (권한 "팀 관리" / "팀 조회")프로토타입: TBU관련 정책: [[POL_권한(RBAC)]] · [[POL_테넌트·조직]] · [[POL_팀 관리]]Status: reviewOwner: 카나 |
개요
팀 관리는 조직 팀 계층 트리(teams + parentTeamId)와 전체 구성원(team_members)을 관리한다. 좌측 팀 트리(조직 루트 노드 + 팀 계층, 각 노드 인원수) + 우측 구성원·팀 상세로 구성된다. 팀은 상위 팀·팀장(leader)·설명·상태(활성/비활성)를 가지며, 직원은 멀티 소속으로 여러 팀에 배정될 수 있다 (n:m). 좌측 트리 루트는 조직 루트 노드(조직명 + 전체 인원)이며, 그 아래에 팀 계층이 인원수와 함께 표시된다. 루트 선택 시 우측은 "전체 구성원", 팀 선택 시 해당 팀 상세를 표시한다.
문서 히스토리
- 2026-07-06 최초 작성 - 카나/콸
- 2026-07-10 라이브 기능 검토 반영 (7/10 diff) - 카나/콸
- 2026-07-13 버튼 행동 명세 보강 - 카나/콸
- 2026-07-21 GC700 깊이 재작성 - 카나/콸
- 2026-07-21 가독성 패스 (GUIDE §7) - 카나/PM
- 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
- 2026-07-22 코드 변경 반영(d522367·e0caa04) - 카나/콸
Data I/O
Server → Client
변수
| 메타 | ${team_tree} |
| 메타 | ${members} |
| 메타 | ${team_detail} |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 팀 추가/수정 | 상위 팀 / 팀명 / 설명 / 상태 / 팀장 | sdk.team.upsert() (추정) | team:write (라벨 "팀 관리", 토큰 추정) |
| 팀 삭제 | teamId | sdk.team.delete() (추정) | team:write (추정) |
| 멤버 배정 | employeeId · teamId · roleId | team_members 생성 (추정) | team:write (추정) |
| 명단 다운로드 | 필터 조건 | export (추정) | team:read (추정) |
외부 통합
| 외부 시스템 | 데이터 | 방향 | 비고 |
|---|---|---|---|
| 전 앱 (HR·직원 앱·스케줄러) | teams / team_members 소속 소비 | Admin(원천) → 소비 | 팀은 조직 SoT |
메인 화면 사양표 (팀 관리)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • 조건1 [팀 관리/조회 권한] 보유 시 사이드바 인사 관리 > "팀 관리" 노출. 권한 없으면 사이드바 항목 hide | [[HBAD100_App Shell·사이드바]] | 권한 미보유 시 진입 불가 |
| 01 | 초기 상태 | Output | • 좌측 팀 트리(조직 루트 선택 상태) + 우측 "전체 구성원" 표시 | ||
| 10 | 팀 트리 | Tree | • 조직 루트 노드 + 그 아래 팀 계층·각 노드 인원수를 표시하는 좌측 네비 • 클릭 시: 노드 선택으로 우측 패널 전환 - CASE01 [루트 선택]: 우측 "전체 구성원" - CASE02 [팀 선택]: 우측 팀 상세 | teams (parentTeamId) | |
| ㄴ11 | 조직 루트 노드 | Node | • 트리 최상단 조직명 + 전체 인원 (라이브 예: "분당베스트병원 update 295") • 클릭 시: 우측 "전체 구성원" 표시 | teams 루트 | 7/10 확인 |
| ㄴ12 | 팀 노드 | Node | • 팀명 + 인원수 표시 노드 • 클릭 시: 우측 팀 상세 전환. 값 없음: 하위 팀 0건이면 루트만 표시 | teams | |
| 10-E | 트리 Empty | State | • 하위 팀 0건 시 루트 노드만 노출 (하위 목록 없음) | TBU: 트리 Empty 문구 | |
| 20 | 팀 추가 (트리 버튼) | Button | • 트리 상단에서 새 팀을 생성하는 진입 버튼. 원문 "팀 추가" • 클릭 시: "팀 추가" 모달 노출 (선택 노드가 상위 팀 default) - CASE01 [루트 선택 중]: 최상위 하위 팀 추가 - CASE02 [팀 선택 중]: 해당 팀 하위 추가 | teams.parentTeamId | |
| 30 | 전체 구성원 (루트 선택) | Grid | • 루트 선택 시 우측에 조직 전체 구성원을 보여주는 그리드. 헤더 "전체 구성원" + "직원 추가" / "명단 다운로드" / "팀 추가". 컬럼: 사번 / 이름 / 이메일 / 팀 · 역할 / 상태 / 관리 • "명단 다운로드" 클릭 시: 즉시 실행(컨펌 없음), 성공: 파일 다운로드(화면 무변화) | team_members | 6컬럼 · 직원 추가 버튼 추가(코드 반영: d522367·e0caa04) |
| ㄴ30-1 | 직원 추가 (조직 레벨) | Button | • 조직(팀) 탭에서 직원을 신규 등록하는 진입 버튼 (기존엔 직원 관리 메뉴에서만 가능) • 클릭 시: 직원 등록 위저드(HBAD201) 오픈 | [[HBAD201_직원 추가·수정 모달]] | 신설 · 7/21 베스트 실무진 요구("팀 관리 안에서 직원 추가") 당일 반영 (코드 반영: d522367·e0caa04) |
| ㄴ30-2 | 직원 수정 (조직 레벨) | Button | • 조직 탭 구성원 행에서 직원 정보를 수정하는 기능 (기존엔 직원 관리에서만) • 클릭 시: 직원 수정 모달(HBAD201) 오픈 | [[HBAD201_직원 추가·수정 모달]] | 신설 (코드 반영: d522367·e0caa04) |
| ㄴ31 | 팀 · 역할 셀 | Cell | • 멤버의 소속 팀·역할을 계층 chip으로 표기. 멀티 소속 시 다중 chip | team_members n:m | |
| ㄴ32 | 상태 셀 | Badge | • 멤버 재직 상태 배지: CASE01 [재직] / CASE02 [비활성] / CASE03 [휴직] / CASE04 [퇴직] | employees.status | TBU: 상태 값 목록 |
| 30-E | 전체 구성원 Empty | State | • 구성원 0건 시 Empty 표기 | TBU: Empty 원문 문구 | |
| 40 | 팀 상세 (팀 선택) | Detail | • 팀 노드 선택 시 우측에 표시되는 팀 상세. 헤더 "총 n명 • 팀장 {이름}" + "직원 추가" / "멤버 명단 다운로드" / "팀 멤버 추가" + 멤버 테이블(동일 6컬럼) + 팀 편집 / 팀 삭제 아이콘 • "멤버 명단 다운로드" 클릭 시: 즉시 실행, 성공: 파일 다운로드(화면 무변화) • "팀 멤버 추가" 클릭 시: 멤버 배정( team_members 생성) | teams · team_members | 직원 추가 버튼 추가(코드 반영: d522367·e0caa04) |
| ㄴ40-1 | 직원 추가 (팀 레벨) | Button | • 팀 상세(팀 레벨 컨텍스트)에서 직원을 신규 등록하는 진입 버튼. "팀 멤버 추가"(기존 소속 배정)와 별개로 신규 직원 등록 • 클릭 시: 직원 등록 위저드(HBAD201) 오픈 | [[HBAD201_직원 추가·수정 모달]] | 신설 · 조직/팀 양쪽 컨텍스트 노출 (코드 반영: d522367·e0caa04) |
| ㄴ41 | 멤버 Empty state | State | • 멤버 0건 시 원문 "멤버가 없어요. + 팀 멤버 추가 로 시작해요." | team_members 부재 | 7/10 확인 |
| ㄴ42 | 팀 편집 아이콘 | Button | • 팀 상세 헤더의 title 아이콘 • 클릭 시: 팀 편집 폼 노출(상위 팀/팀명/설명/상태/팀장, 기존값 프리필) | teams | |
| ㄴ43 | 팀 삭제 아이콘 | Button | • 팀 상세 헤더의 title 아이콘 • 클릭 시: 컨펌 "팀을 삭제하시겠어요?" - CASE01 [하위/멤버 없음]: 삭제 실행 - CASE02 [하위 팀·멤버 존재]: 정책상 삭제 불가([[POL_팀 관리]]) — 라이브 실차단 문구 프로브 미확인 | teams | 삭제 컨펌 7/10 확인 |
| 50 | 병동 관계 | - | • 팀 ↔ 병동(wards) 관계(간호부 하위 병동) 연결 여부 | [[HBAD230_병동 관리]] | TBU |
팀 추가·편집 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • "팀 추가"(트리/그리드) 또는 팀 편집 아이콘 클릭 시 노출 | 추가/편집 공용 | |
| 10 | 상위 팀 | Dropdown | • 팀 계층 부모를 지정하는 항목. 원문 "상위 팀" • 선택 시: 부모 팀 확정. CASE01 [트리에서 팀 선택 중]: 해당 팀 default | teams.parentTeamId | |
| 20 | 팀명 * | Input | • 팀 이름을 지정하는 필수 항목. 원문 "팀명 *" • 입력 시: 값 없음이면 저장 불가. 중복 시 처리(정책상 안내 문구)는 프로브 미확인 | teams.name | 필수 · 에러 TBU |
| 30 | 설명 | Input | • 팀 설명을 기록하는 선택 항목. 원문 "설명" • 입력 시: 설명 기록 | teams.description (추정) | |
| 40 | 상태 | Dropdown | • 팀 활성/비활성 상태를 지정하는 항목, 기본 "활성" • 선택 시: 상태 확정. 값 없음: 기본 활성 | teams.isActive (추정) | 값 없음: 기본 활성 |
| 50 | 팀장 | Picker | • 팀 리더를 지정하는 항목(이름/사번 검색). 원문 "팀장" • 선택 시: 리더 확정. 미지정 허용 여부 = TBU | teams.leaderId | |
| 60 | 멤버 추가 안내 | Guide | • 원문 "팀에 직원을 추가하려면 생성된 팀 페이지의 팀 멤버 추가 버튼을 이용하거나, 직원 관리 메뉴에서 추가하세요." | team_members | 7/10 확인 |
| 70 | 저장 | Button | • 입력값으로 팀을 생성/수정하는 확정 버튼 • 클릭 시: 즉시 실행 - CASE01 [성공]: 토스트 "팀을 추가했습니다" + 모달 닫힘 + 트리 갱신 - CASE02 [실패]: 실패 처리(토스트/무반응) 프로브 미확인 | teams | 성공 토스트 7/10 확인 · 실패 TBU |
| 80 | 취소 | Button | • 변경 없이 모달을 닫는 버튼. 원문 "취소" • 클릭 시: 모달 닫힘(미저장). 미저장 이탈 가드 유무 프로브 미확인 | TBU |
팀 계층 · 소속 관계
| 엔티티 | 역할 | 관계 |
|---|---|---|
teams | 팀 마스터 (팀명/상위 팀/설명/상태/팀장) | self-ref (parentTeamId), leader → employees |
team_members | 직원-팀 소속 (역할 포함) | n:m (employeeId × teamId × roleId) |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [팀 트리 조회] | 화면 진입 | 조직 루트 노드 + 계층·인원수 트리 | 권한 "팀 조회" |
CASE02 [전체 구성원] | 루트 노드 선택 | 우측 전체 구성원 Grid | |
CASE03 [팀 상세] | 팀 노드 선택 | 우측 팀 상세 (멤버 테이블) | |
CASE04 [팀 추가] | 상위 팀·팀명*·팀장 입력 → 저장 | teams 생성, 토스트 "팀을 추가했습니다" | 권한 "팀 관리" |
CASE05 [팀 삭제] | 팀 삭제 아이콘 | 컨펌 "팀을 삭제하시겠어요?" → 삭제 | 하위/멤버 존재 시 차단(정책) |
CASE06 [멤버 추가] | "팀 멤버 추가" | team_members 생성 (n:m) |
Open Question
- 팀 ↔ 병동(
wards) 관계 (간호부 하위 병동) = TBU - 팀 삭제 시 하위 팀·소속 구성원 실차단 UI/문구 (정책은 삭제 불가 규정) = TBU
- 팀 추가 저장 실패·팀명 중복 에러 동작 (라이브 프로브 없음) = TBU
- 트리 Empty·전체 구성원 Empty 원문 문구 = TBU
- 멤버 명단·전체 명단 다운로드 포맷(엑셀/CSV)·컬럼 셋 = TBU
- 내부 권한 토큰 실제 key (라벨 "팀 관리"/"팀 조회"만 확인) = TBU