HBAD230_병동 관리
(Hereby) 관리자 패널 > 인사 관리 > 병동 관리
| 메타 | 앱: 관리자 패널 (포트 4001)대상 사용자: 조건1 [최고 관리자] / 조건2 [병동 페이지 관리자] (권한 ward:manage "병동 페이지 관리" / ward:read "병동 페이지 조회" — 마이그 1927)프로토타입: TBU관련 정책: [[POL_권한(RBAC)]] · [[POL_병동 관리]]Status: reviewOwner: 카나 |
개요
병동 관리는 병동 마스터(wards)와 병동 인력 배정을 관리하는 전용 화면이다. 2026-09-28 #833(v0.14.0)로 전면 재구축 — 단일 목록에서 좌측 병동 트리 + 우측 전체 병동 뷰/병동 상세(탭 3종) 구조로 전환됐고, 직원의 병동 배정(다중·겸임/이동/예약)이 이 화면의 「직원 배정」 팝업으로 일원화됐다. 병동은 **간호 스케줄러(HBNS)의 원천(SoT)**이며, 팀과의 연결(병동 하나 ↔ 팀 하나)은 유지되나 팀 관리(HBAD210)의 조직도에서 병동 노드는 제거됐다(현장 피드백 9/21 — "병동은 병동 탭에서"). 전용 권한 리소스 ward(read/manage)가 신설됐다(구 "부서 관리" 추정 폐기).
문서 히스토리
- 2026-07-06 최초 작성 - 카나/콸
- 2026-07-13 버튼 행동 명세 보강 - 카나/콸
- 2026-07-21 GC700 깊이 재작성 (7/16 병동 추가 모달 필드 반영) - 카나/콸
- 2026-07-30 병동 종류(일반/재활, 배치 기준 키) 컬럼·필드 추가 — [[POL_간호인력·준수율]] 반영 - Claude/dev
- 2026-07-21 가독성 패스 (GUIDE §7) - 카나/PM
- 2026-07-21 셀 스타일 확정판 적용 (콸 승인) - 카나/PM
- 2026-07-31 코드 변경 반영(2c08e21·a6a6ff5) - 카나/PM
- 2026-09-14 팀 관리 병동 정보 개선 반영 - Claude/dev
- 2026-09-14 병동 추가·수정 모달 「연결 팀」(선택) 추가, 병동 삭제 시 팀 연결 해제를 코드에 반영 - Claude/dev
- 2026-09-14 목록 9열(코드·병상 수·순서 추가) + 표 안 수정, 추가 모달 코드·병상 수·순서, 코드 중복 안내, 병동 설정 팝업 「병동 관리」 탭 제거 - Claude/dev
- 2026-09-26 개발측 직접 보강(9/14 목록 9열·표 안 수정·연결 팀 ㄴ10b) 미러·컨플 부본에 역수용 — 정본(docs/spec) 우선 - 카나/PM
- 2026-09-29 화면 전면 재구축 반영(#833/#912, v0.14.0 운영) — 좌측 병동 트리 + 전체 병동 뷰 + 병동 상세 탭 3종(인력/병동 정보/스케줄러)·직원 배정 팝업(다중·겸임/이동/예약·미리보기)·행 ⋯ 메뉴·ward.read/ward.manage 권한(마이그 1927) — 라이브 실사(okbest.dev, 조회만) 기준 재작성. 구 단일 목록 사양은 폐기 - 카나/PM
- 2026-09-30 이월 실사 소진 — 열 구성 원문 반영: 병동 현황표 9열·「병동 목록 · 설정」 10열·인력 탭 11열·스케줄러 탭 7열 + 직원 배정 팝업 초기 화면 원문(제목·설명·검색·필터·후보 표 5열·카운트) — 라이브 실사(okbest.dev, 조회·모달만) - 카나/PM
- 2026-10-01 이월 실사 잔여 소진 — 인력 탭 병동 요약 카드 4종(ㄴ40-1 신설)·배정 팝업 배정 상태 4옵션·행 ⋯ 메뉴 4종 원문·병동 정보 탭 안내+DL 9항목 원문, OQ 3행 해소·권한 locale OQ 해소 표기(#945) — okbest.dev 조회만(live-1001-ward-*.png, 저장·배정 0건) - 카나/PM
Data I/O
Server → Client
변수
| 메타 | ${ward_tree} (병동 트리 + 병동별 인원) |
| 메타 | ${ward_summary} (전체 병동 현황표·합계) |
| 메타 | ${ward_detail} (상세 헤더·탭 데이터: 인력/정보/스케줄러) |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 병동 추가/수정 | 병동 폼 값(코드·병동명·연결 팀·설명·종류·병상 수·순서·상태) | nurseScheduler.ward.create / ward.update | ward:manage (라벨 "병동 페이지 관리", 마이그 1927) |
| 병동 삭제 | wardId | sdk.ward.delete() (추정) | ward:manage |
| 직원 배정 | employeeId[] · wardId · 교대 형태 · 겸임/이동/예약(적용 시점) | TBU (직원 배정 팝업) | ward:manage |
| 배정 해제/이동 | 행 단위 (5초 되돌리기 지원) | TBU | ward:manage |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 방향 | 비고 |
|---|---|---|---|
| 간호 스케줄러 (HBNS) | 병동 원천 소비 — 병동별 근무표·환자수·인력 배치 기준. 배정 시 스케줄러 등록·교대 형태 지정 | Admin(원천) → HBNS(소비) | 상세 스케줄러 탭·「병동 목록 · 설정」 스케줄러 열 신설 |
| 팀 관리 (HBAD210) | 팀 ↔ 병동 연결(teams.wardId, 병동 하나 ↔ 팀 하나) | 양방향 표시 | HBAD210 조직도의 병동 노드는 제거 — 「병동 현황」 접힘 섹션만 존치 |
| 직원 관리 (HBAD200/201) | 신규 직원 추가 시 병동 프리필 | 병동 관리 → 등록 위저드 | #833 신설 |
메인 화면 사양표 (병동 관리 — #833 재구축)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • 조건1 [ward:manage 병동 페이지 관리] / 조건2 [ward:read 병동 페이지 조회] 보유 시 사이드바 인사 관리 > "병동 관리" 노출(#wards/all). 미보유 시 hide | [[HBAD100_App Shell·사이드바]] · [[HBAD220_역할·권한 관리]] | 전용 권한 신설(마이그 1927) — 구 "부서 관리" 추정 폐기 |
| 01 | 초기 상태 | Output | • 좌측 병동 트리(「전체 병동」 선택) + 우측 전체 병동 뷰 | ||
| 10 | 병동 트리 (좌측) | Tree | • 병동 네비 — 「전체 병동 N」 + 병동 노드(병동별 인원 표기) + 검색 + 「병동 추가」 • 노드 클릭 시: 우측 패널 전환 - CASE01 [전체 병동]: 전체 병동 뷰 - CASE02 [병동 노드]: 병동 상세 | wards | 신규(#833) · 실측 2026-09-29 |
| ㄴ11 | 트리 검색 | Search | • placeholder 원문 "병동명 / 코드" • 입력 → 트리 필터링 | wards.name · wards.code | 실측 |
| ㄴ12 | 병동 추가 | Button | • 새 병동 생성 진입 버튼. 원문 "병동 추가" • 클릭 → 병동 폼(하단 병동 추가·수정 사양표) 노출 | wards | |
| 10-E | 트리 Empty | State | • 병동 0건 시 표기 = TBU | TBU: Empty 원문 | |
| 20 | 전체 병동 뷰 | View | • 「전체 병동」 선택 시 우측 구성: 요약줄 + 병동 현황표(9열·합계 행·안내문) + 「병동 목록 · 설정」 표(10열 — 스케줄러 열 신설) • 현황표 9열 원문: "병동" / "전체" / "재직" / "휴직" / "퇴직" / "미입력" / "야간전담" / "수간호사(책임자)" / "병상 수" • 목록 표 10열 원문: "코드" / "병동명" / "연결 팀" / "스케줄러" / "설명" / "종류" / "병상 수" / "순서" / "상태" / "관리" | wards · ${ward_summary} | 신규(#833) · 열 원문 실측 2026-09-29 |
| 30 | 병동 상세 헤더 | Header | • 병동명 + 코드 + 인원 + 연결 팀 링크 • 연결 팀 클릭 → [[HBAD210_팀 관리]] 해당 팀 화면 전환 | teams.wardId | 실측 |
| 31 | 상세 탭 | Tab | • 탭 3종: 「인력 N」 / 「병동 정보」 / 「스케줄러 N」 (N = 인원수) • 클릭 → 해당 탭 전환 | 실측 | |
| 40 | 인력 탭 | View | • 「병동 요약」(부제 "병동 배정 기준 · 전체(재직+휴직)") 카드 4개 + 「배정 인원」 표(11열) + 필터("상태 선택"·"직무 선택") + 검색 + 「신규 직원 추가」 + 「직원 배정」 • 배정 인원 표 11열 원문: ☐(선택) / "사번" / "이름" / "이메일" / "팀 · 역할" / "직무" / "교대 형태" / "다른 병동" / "입사일" / "상태" / "관리" | ${ward_detail} | 11열 원문 실측 2026-09-29 · 카드 4종 실측 2026-10-01 |
| ㄴ40-1 | 병동 요약 카드 | Card | • CASE01 "인원": "{N}명" + "재직 {n} · 휴직 {n} · 퇴직 {n}" • CASE02 "직군 구성 · 직무 기준": 직무별 인원(직무 없음 = "미입력") • CASE03 "교대 형태 · 스케줄러 기준": 교대 형태별 인원(예: "3교대 2") • CASE04 "병동 정보": "병상 수" / "병동 종류" / "오늘 환자 수" / "스케줄러"(예: "기본 (1)") — 값 없음 "미입력". 「병동 정보 ›」 클릭 → 병동 정보 탭(50) 전환 | ${ward_detail} · wards | 실측 2026-10-01(live-1001-ward-staff.png) |
| ㄴ41 | 신규 직원 추가 | Button | • 클릭 → 직원 등록 위저드([[HBAD201_직원 추가·수정 모달]]) 오픈 — 현재 병동이 프리필된 상태 | [[HBAD201_직원 추가·수정 모달]] | 신규(#833) |
| ㄴ42 | 직원 배정 | Button | • 클릭 → "직원 배정" 팝업(하단 사양표) 노출 | 신규(#833) | |
| ㄴ43 | 행 ⋯ 메뉴 | MenuItem | • 배정 인원 행 「관리」(⋯) 클릭 → 메뉴 4종: "직원 정보 수정" / "팀 관리" / "다른 병동으로 이동" / "이 병동에서 해제" - "직원 정보 수정": 클릭 → [[HBAD201_직원 추가·수정 모달]] - "팀 관리": 클릭 → [[HBAD210_팀 관리]] 전환 - "다른 병동으로 이동": 클릭 → 타 병동 이동 - "이 병동에서 해제": 클릭 → 즉시 해제 + 5초 되돌리기(undo) 노출 | 배정 데이터 | 4종 원문 실측 2026-10-01(live-1001-ward-rowmenu.png, 실행 0건) |
| 40-E | 인력 탭 Empty | State | • 배정 0명 시 표기 = TBU | TBU | |
| 50 | 병동 정보 탭 | View | • 안내 "병동 종류는 인력 배치 기준 표(일반/재활)를 고르는 기준이에요" + 「수정」 버튼 + DL 9항목: "병동 코드" / "병동명" / "연결 팀" / "수간호사(책임자)" / "설명" / "병동 종류" / "병상 수" / "순서" / "상태" - 값 없음: 수간호사·병동 종류 "미지정", 병상 수 "미입력", 설명 "-" • 수정 클릭 → 병동 폼(기존값 프리필) | wards | 9항목 원문 실측 2026-10-01(live-1001-ward-info.png) |
| 60 | 스케줄러 탭 | View | • 표 7열 — 병동에 연결된 스케줄러 목록. 열 원문: "이름" / "코드" / "근무 장소" / "포함 직군" / "순서" / "활성" / "관리" | [[HBNS210]] | 7열 원문 실측 2026-09-29 |
| 70 | 직원 카드 | Popover | • 인원 표에서 이름 클릭 → 직원 카드(병동 배정 줄·「스케줄러 보기」·「직원 정보 수정」) — #833 공통 카드 5곳 중 하나 | [[HBAD201_직원 추가·수정 모달]] | 실측(HBAD210과 동일 카드) |
직원 배정 팝업 사양표 (#833 신설)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • 인력 탭 「직원 배정」 클릭 시 노출 • 제목 원문 "**{병동명}**에 직원 배정" + 설명 "이미 등록된 직원을 골라 이 병동에 배정해요. 퇴사한 직원은 빼고 보여요(휴직 포함)." | 원문 실측 2026-09-29 | |
| 10 | 검색·필터 | Search | • 검색(placeholder "이름 · 사번") + 배정 상태 드롭다운(옵션 4종: "배정 상태: 전체"(기본) / "미배정" / "다른 병동 배정" / "이미 이 병동") + 「직무 선택」 드롭다운 • 필터 아래 카운트 문구 "{N}명 고를 수 있어요" | employees | 옵션 4종 원문 실측 2026-10-01 |
| 20 | 후보 표 | Grid | • 5열 표 — 다중 선택(체크) 가능. 열 원문: ☐(선택) / "이름"(이름 + 사번 병기) / "직무" / "소속 팀" / "현재 배정" • 현재 배정 셀: 기배정 시 "{배정처} · {교대 형태}"(예 "간호부 · 3교대") / 미배정 시 "미배정"(회색) · 직무 미입력 시 "미입력"(회색) | 열 원문 실측 2026-09-29 | |
| 30 | 스케줄러·교대 형태 | Input | • 배정과 함께 스케줄러 등록·「교대 형태」 지정 | [[HBNS210]] | 실측 |
| 40 | 연결 팀 체크 | Checkbox | • 병동의 연결 팀에도 함께 배정하는 옵션 | teams.wardId | 실측 |
| 50 | 겸임 체크 | Checkbox | • 타 병동 기배정 직원의 겸임 여부. 겸임 해제(이동) 시: - 「지금 옮기기」: 즉시 이동 - 「예약」: 기본값 = 다음 근무 주기 시작일. 예약 시 연결 팀 옵션 잠금(안내 문구 노출 — 원문 TBU) | 배정 데이터 | 실측 |
| 60 | 미리보기 문장 | Output | • 하단에 배정 결과를 요약한 미리보기 문장 노출(무엇이 언제 어떻게 배정되는지) | 원문 = TBU | |
| 70 | N명 배정 | Button | • 확정 버튼 — 초기(선택 0명) 라벨 "배정"·비활성, 선택 시 "{N}명 배정" 활성 • 클릭 → 배정 실행. 좌측에 「취소」 | 배정 데이터 | 실측 |
| 80 | 이탈 확인 | Dialog | • 변경 있음 + 닫기 시 컨펌 원문 "변경된 내용을 저장하지 않고 나가시겠어요?" | 원문 실측 |
병동 추가·수정 폼 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | • 트리 「병동 추가」(신규) 또는 병동 정보 탭 「수정」 클릭 시 노출 | #833 재구축 후 진입 경로 변경 — 필드 셋은 9/14 사양 유지 전제(재검증 TBU) | |
| 05 | 병동 코드 | Input | • 선택 항목. 라벨 "병동 코드", placeholder "비우면 자동으로 만들어요" • 비우면 WARD_{숫자} 자동. 조직 안 중복 시 팝업 "「{코드}」 코드는 「{병동명}」 병동이 이미 쓰고 있어요." | wards.code | 신규(9/14) |
| 10 | 병동명 * | Input | • 필수 항목. 미입력이면 확정 버튼 비활성 | wards.name | 필수 |
| 20 | 설명 | Input | • 선택 항목 | wards.description (추정) | |
| 22 | 연결 팀 | Dropdown | • 이 병동에 연결할 팀 선택(선택 입력). 안내 "이 팀에 넣는 직원에게 병동이 자동 배정돼요". 옵션: "연결 안 함"(기본) / 팀 목록 - CASE01 [다른 병동에 연결된 팀]: 비활성 "{팀명} — {병동명} 병동에 연결됨" - CASE02 [저장 시 충돌]: 팝업 "「{팀명}」 팀은 이미 「{병동명}」 병동에 연결돼 있어요." - CASE03 [부서(최상위+하위 팀 있음)]: 비활성 "{팀명} (부서 — 연결할 수 없음)", 서버 차단 문구 "「{팀명}」 부서에는 병동을 연결할 수 없어요. 부서 아래 팀을 골라 주세요." | teams.wardId · [[HBAD210_팀 관리]] | 신규(9/14) |
| 25 | 병동 종류 | Dropdown | • 인력 배치 기준 표(일반/재활) 선택 키. 옵션 "미지정"(기본)/"일반병동"/"재활병동". notice "인력 배치 기준(일반/재활병동)을 고르는 기준입니다. 해당 없는 병동(중환자실 등)은 미지정으로 두세요 — 배치 기준을 적용하지 않습니다." | wards.schedulingConfig.wardCareType · [[POL_간호인력·준수율]] | 신규(2c08e21) |
| 27 | 병상 수 · 순서 | Input(Number) | • 선택 두 칸. 0 이상의 정수, 순서 비우면 0. 위반 시 "병상 수와 순서는 0 이상의 정수로 입력해 주세요." | wards.schedulingConfig.bedCount · wards.displayOrder | 신규(9/14) |
| 30 | 상태 | Dropdown | • 활성/비활성, 기본 "활성" | wards.isActive | |
| 50 | 생성/저장 | Button | • 확정 버튼 "생성"(추가)/"저장"(수정). 활성화: 병동명 입력(수정은 변경 존재) • 클릭 → 즉시 실행 | wards | TBU: 저장 실패 |
병동 ↔ 간호 스케줄러 관계
| 항목 | Admin(원천) | HBNS(소비) |
|---|---|---|
| 병동 마스터 | 병동명/코드/설명/상태 정의 (SoT) | 근무표·환자수 관리 대상 병동 참조 |
| 병동 종류 | 케어 타입(일반/재활) 정의 — 배치 기준 표 선택 키 (SoT) | 인력 배치 기준·간호등급 산정 분기 |
| 인력 배정 | 직원 배정 팝업에서 스케줄러 등록·교대 형태 지정 | 근무표 인력 풀 |
| 환자수 일괄 입력 | (스케줄러 병동 설정/환자수 팝업에서 입력) | "일괄 입력" 팝업 (HBNS 소관) |
비고: 간호관리료/입원료 차등제 등급표(A·1~6등급, 요양병원 별도 표)는 정본 상수로 내장돼
resolveNursingGrade가 산정하며, 등급 배지가 등급표를 소비한다 — 본 화면에는 등급 표시 위치 없음.
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [전체 병동] | 화면 진입 / 「전체 병동」 선택 | 요약줄 + 병동 현황표 + 병동 목록 · 설정 | ward:read |
CASE02 [병동 상세] | 병동 노드 선택 | 헤더 + 탭 3종(인력/병동 정보/스케줄러) | |
CASE03 [병동 추가] | 트리 「병동 추가」 → 병동명* → "생성" | wards 생성 | ward:manage |
CASE04 [직원 배정] | 인력 탭 「직원 배정」 → 선택 → "{N}명 배정" | 배정 반영 (예약 시 다음 근무 주기 시작일) | ward:manage |
CASE05 [배정 해제] | 행 ⋯ → 배정 해제 | 즉시 해제 + 5초 되돌리기 | |
CASE06 [연결 팀 이동] | 상세 헤더 연결 팀 링크 | 팀 관리 화면 전환 |
Open Question
| 구분 | 미확인 항목 |
|---|---|
| 인력 탭 | Empty 문구(배정 0명 병동 없어 미실측) |
| 배정 팝업 | 미리보기 문장·예약 잠금 안내 원문 |
| 병동 폼 | #833 이후 필드 셋 재검증(9/14 사양 유지 전제) / 저장 실패 동작 |
| 권한 | |
| 삭제 | #833 이후 병동 삭제 진입 경로·컨펌 원문 재확인 |