Skip to content

HBNS240_병동 관리·설정

(Hereby) 팀 관리(team-manager) > 간호 스케줄러 > 병동 관리·설정

간호 스케줄러 (team-manager 내장, 포트 4004)
대상 사용자조건1 [간호 관리자] · 조건2 [수간호사]
프로토타입TBU
관련 정책[[POL_간호스케줄 Lifecycle]] · [[POL_간호인력·준수율]]
Statusdraft
Owner카나

개요

  • 헤더 ⚙ = "병동 관리 및 설정" 모달 진입 화면을 정의한다.
  • 모달은 5탭 구성 — ①병동 관리 ②인력 설정 ③교대 매핑 ④교육 정책 ⑤주기 설정.
  • 좌측 "병동 관리" 탭은 비활성(흐림) 표시 — 병동 관리 기능은 이 ⚙ 모달로 통합되었다.
  • ①병동 관리: NS 자체 병동 CRUD. Admin 병동([[HBAD230]] IMPORT)과 별개 개념(물리적 입원 단위). 병동 종류(일반/재활병동, [[POL_간호인력·준수율]] 배치 기준 키) 지정 포함.
  • ②인력 설정: 병원 전체 정책. 간호사/조무사/간병인 비율 + 배치 기준 3필드(간호조무사·병동지원인력·재활지원인력, 1인당 환자 수)간호등급·준수율 계산의 원천.
  • ③교대 매핑: 배정(D/E/N) → 실제 근무시간(Shift) 대응. [[HBAD260]] 근무 유형을 소비하고 HBHR 급여와 연동하는 고리.
  • ④교육 정책: "교육 근무 인정 (work_counted)" vs "교육 휴무 (off)" 2모드.
  • ⑤주기 설정: 근무표 주기 "매월 1일 ~ 말일 (월력 기준)", 병원 전체 정책.
  • ERD: wards(code / name / schedulingConfig jsonb / displayOrder)가 병동 마스터. Admin [[HBAD230]] 병동은 IMPORT로 반영되고 NS 자체 병동은 이 모달에서 CRUD한다. 근무 그룹·유형(shifts / shift_groups)은 [[HBAD260]] 근무 설정이 원천이다.

문서 히스토리

날짜작성자변경 내용
2026-07-06카나PM최초 작성
2026-07-10카나PM라이브 기능 검토 반영
2026-07-13카나PM버튼 행동 명세 보강
2026-07-21카나PMGC700 깊이 재작성
2026-07-21카나PM셀 스타일 확정판 적용 (콸 승인)
2026-07-21카나PMTC 크로스체크 확정분 반영 (🟡 — nurseScheduler.ward.create·wardSettings.update 확정 등)
2026-07-30Claudedev병동 종류(배치 기준 키) 컬럼·선택 추가, ②인력 설정에 배치 기준 3필드 추가 — [[POL_간호인력·준수율]] 반영
2026-08-18카나라이브 재검증 정정okbest dev 라이브 실측: ①병동 테이블에 "종류" 컬럼 미노출(라이브 6컬럼 = 코드/병동명/병상수/순서/상태/작업), 병동 종류 선택 UI 부재. ②인력 설정에 "배치 기준 (1인당 환자 수)" 3필드 미노출(라이브는 간호사비율 D/E/N + 조무사(간호사대비) + 간병인(환자대비)만). 2026-07-30 추가분이 이 dev 환경에 미배포 상태 — 스펙은 의도 유지하되 라이브 미반영 명시

Data I/O

Server → Client

변수DB 엔티티.컬럼값 없을 때비고
${jwt_session}(인증 세션 — 간호 관리자/수간호사)/nurse-scheduler/signin 리다이렉트미인증 시 모달 진입 불가
${wards}wards[] (code / name / displayOrder)빈 테이블(-E)"1 (WARD_...)" / "간호부 (IMPORT-간호부-...)"
${scheduling_config}wards.schedulingConfig (jsonb)기본값 적용 (구조 TBU)비율 규칙·교대 매핑·교육·주기 저장 구조 = TBU
${shift_groups}shift_groups / shifts빈 select 옵션[[HBAD260]] 원천
${staffing_ratio}wards.schedulingConfig 내 비율 (D/E/N·조무사·간병인) — 추정미설정 시 준수율 계산 불가 (TBU)간호등급·준수율 원천

Client → Server

액션전달 값tRPC/SDK권한 토큰
병동 추가{ name, code, schedulingConfig:{ bedCount, staffingRatios } }nurseScheduler.ward.create() (TC 확정: 04:4.1)ward:write.org (TBU)
병동 수정{ code, name, bedCount, displayOrder, status }nurseScheduler.ward.create() upsert (수정 procedure TBU)ward:write.org (TBU)
병동 삭제wardIdnurseScheduler.ward.delete() (soft delete deletedAt, 추정 — TC 미검증)ward:delete.org (TBU)
인력 설정 저장{ wardId, settings:{ bedCount, staffingRatios:{ day, evening, night } } }nurseScheduler.wardSettings.update() (TC 확정: 04:4.2/4.6)ward:write.org (TBU)
교대 매핑 저장{ slotType → shiftId }[](procedure TBU)(TBU)
교육 정책 저장{ mode: work_counted | off }(procedure TBU)(TBU)
주기 설정 저장{ cycleType: monthly }(procedure TBU)(TBU)

외부 통합 (cross-app)

외부 시스템데이터동기/비동기비고
Admin 병동 관리 [[HBAD230]]Ward 마스터 (IMPORT- 접두)동기 IMPORT병동 생성 → 병동 탭·①병동 관리 목록 반영
Admin 근무 설정 [[HBAD260]]근무 그룹·유형 (shifts / shift_groups)동기③교대 매핑 select 옵션 원천
HBHR 급여교대 매핑(Shift) + 교육 정책(work_counted)비동기급여·출퇴근 시간 산정 소비처

화면 플로우 (상태 머신)

⚙ = "병동 관리 및 설정" 5탭 모달. NS 자체 병동은 이 모달에서 CRUD(Admin 병동과 별개), 인력 설정이 준수율 원천, 교대 매핑이 [[HBAD260]]→HBHR 급여 고리다.

병동 관리 및 설정 모달 (진입)

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00화면 진입 조건-조건1 [간호 관리자] · 조건2 [수간호사] 인증 시 헤더 ⚙ 노출
 - CASE01 [${jwt_session} 없음]: /nurse-scheduler/signin 리다이렉트
인증 세션TBU: 조건3 [간호사] 진입 여부
10⚙ 병동 관리 및 설정Button (Icon)• 클릭 → "병동 관리 및 설정" 5탭 모달 오픈[[HBNS100]] 헤더좌측 "병동 관리" 탭은 비활성(⚙로 통합)·TBU: 기본 활성 탭(추정 ①)·로드 실패 동작
ㄴ115탭 헤더Tab• ①병동 관리 ②인력 설정 ③교대 매핑 ④교육 정책 ⑤주기 설정 5탭 헤더
• 탭 전환 → 해당 탭 표시, 활성 탭 강조
TBU: 탭 전환 시 미저장 편집 유지 여부
20모달 닫기Button• 클릭 → 모달 종료, 그리드 복귀TBU: 미저장 변경 존재 시 경고 여부

① 병동 관리 탭

안내: "병동은 부서와 별개의 개념입니다. 물리적 입원 단위로 관리하세요."

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10안내 문구Text"병동은 부서와 별개의 개념입니다. 물리적 입원 단위로 관리하세요." 고정 표시원문 카피
20+ 병동 추가Button• NS 자체 병동을 신규 생성하는 버튼 (조건1 [간호 관리자] 실행)
• 클릭 → 신규 행 추가(코드/병동명/종류/병상수/순서/상태 입력)
 - 종류: 미지정(기본)/일반병동/재활병동 — 미지정 = 배치 기준 미적용([[POL_간호인력·준수율]])
wardsAdmin 병동(IMPORT)과 별개·TBU: 필수값 미입력 처리·수간호사 권한
30병동 테이블Table• NS 자체 병동 목록. ⚠ 2026-08-18 라이브 = 6컬럼: 코드 / 병동명 / 병상수 / 순서 / 상태 / 작업 ("종류" 컬럼 미노출)
 - CASE01 [활성]/CASE02 [비활성]: 상태 컬럼 표기
 - (스펙 의도: 종류 = 일반병동/재활병동/-(미지정) — 라이브 미반영)
wards(code/name/displayOrder/schedulingConfig.wardCareType)병상수 = 미입력일 채우기 원천([[HBNS230]])·2026-08-18: 종류 컬럼 라이브 부재
ㄴ30-E병동 없음 (Empty)-• NS 자체 병동 0건 → 테이블 빈 행Empty·TBU: 표시 문구
ㄴ31수정Button• 클릭 → 해당 병동 행 편집 모드wardsTBU: 저장 실패 동작·IMPORT 병동 편집 가능 여부
ㄴ32삭제Button• 클릭 → 병동 행 제거(destructive)wards nurse_schedulesTBU: 컨펌 유무·참조 무결성(연결 스케줄)·삭제 실패·soft delete(deletedAt)

② 인력 설정 탭

안내: "병원 전체 정책 — 모든 병동에 동일하게 적용됩니다." (간호등급·준수율 계산 원천)

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10안내 문구Text"병원 전체 정책 — 모든 병동에 동일하게 적용됩니다." 고정 표시원문 카피
20간호사 1인당 환자 비율Input주간 D / 저녁 E / 야간 N 3개 값을 입력하는 비율 필드 (간호등급·준수율 계산 원천). 안내 "예: 주간 5 = 환자 5명당 간호사 1명 필요"
• 입력 → 준수율 계산 기준값 반영
준수율 계산 기준값원문 카피·TBU: 미설정 시 산출 불가 처리·0/음수/비숫자 검증
30조무사 비율Input• 간호사 대비 비율을 입력하는 필드. 안내 "예: 0.5"
• 입력 → 비율 반영
원문 카피·TBU: 미설정 처리
40간병인 비율Input• 환자 대비 비율을 입력하는 필드. 안내 "예: 0.3"
• 입력 → 비율 반영
원문 카피·TBU: 미설정 처리
45배치 기준 (1인당 환자 수)Input2026-08-18 라이브 미노출 — 이 dev 환경 ②인력 설정에는 간호사비율(D/E/N)·조무사(간호사대비)·간병인(환자대비)만 존재. (스펙 의도: 간호조무사/병동지원인력/재활지원인력 3필드 — 라이브 미반영)
• 0/빈 값 = 미설정(null-unset). 50 「인력 설정 저장」에 포함 저장
[[POL_간호인력·준수율]]2026-07-30 추가분이 라이브 미배포
50인력 설정 저장Button• 간호사/조무사/간병인 비율을 저장하는 버튼 (조건1 [간호 관리자] 실행)
• 클릭 → 비율 저장(즉시 실행), 성공 시 준수율·간호등급 재계산 반영([[HBNS100]] 지표 바)
[[POL_간호인력·준수율]] · [[HBNS100]]병원 전체 정책·TBU: 저장 실패(토스트/롤백)·수간호사 권한

③ 교대 매핑 탭

안내: "각 근무형태의 배정(D/E/N)에 대응하는 실제 근무시간(Shift)을 설정합니다. 급여 계산 및 출퇴근 시간 산정에 사용됩니다."

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10안내 문구Text"각 근무형태의 배정(D/E/N)에 대응하는 실제 근무시간(Shift)을 설정합니다. 급여 계산 및 출퇴근 시간 산정에 사용됩니다." 고정 표시HBHR 급여원문 카피
20근무형태별 슬롯 매핑Select• 슬롯(주간 / 주말 주간 / 초번(E) 등)에 Admin 근무 유형으로 실제 Shift를 대응시키는 매핑
• select → 슬롯별 Shift 대응 지정
 - CASE01 [${shift_groups} 비어있음]: 옵션 없음 → [[HBAD260]] 선등록 필요 (아래 20-E)
[[HBAD260]] / HBHR 급여Admin 근무 유형 소비(일반근무/3교대 D·E·N/스포츠/스케줄 등)·TBU: 미매핑 슬롯 처리·저장 실패
ㄴ20-E근무 유형 없음 (Empty)-• [[HBAD260]] 근무 유형 미등록 → select 옵션 0건[[HBAD260]]Empty·TBU: 안내 문구
30교대 매핑 저장Button• 슬롯→Shift 매핑을 저장하는 버튼 (조건1 [간호 관리자] 실행)
• 클릭 → 매핑 저장
HBHR 급여NS→HR 급여 연동 고리·TBU: 즉시 실행 여부·저장 실패·수간호사 권한

④ 교육 정책 탭

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10교육 근무 인정 (work_counted)Radio/Toggle• 교육 근무를 급여에 포함하는 모드 선택
• 선택 → 급여 포함(예: 주간 교육 → D교육 → 주간 정규 Shift 급여 산정)
HBHR 급여원문 카피 "교육 근무 인정 (work_counted)"
20교육 휴무 (off)Radio/Toggle• 교육 근무시간을 0 처리하는 모드 선택
• 선택 → 근무시간 0, 교육수당 별도
HBHR 급여원문 카피 "교육 휴무 (off)"
30교육 정책 저장Button• 선택 모드(work_counted/off)를 저장하는 버튼 (조건1 [간호 관리자] 실행)
• 클릭 → 정책 저장(즉시 실행)
HBHR 급여2모드 택1·TBU: 모드 미선택 저장·저장 실패·수간호사 권한

⑤ 주기 설정 탭

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10근무표 주기Select/Text• 근무표 주기를 고르는 컨트롤 "매월 1일 ~ 말일 (월력 기준)"
• select → 주기 선택
[[POL_간호스케줄 Lifecycle]]병원 전체 정책·원문 카피·TBU: 다른 주기 옵션 존재 여부
20적용 안내Text"변경 시 새로 생성되는 근무표에만 적용되며, 기존 근무표는 영향받지 않습니다." 고정 표시원문 카피
30주기 설정 저장Button• 근무표 주기를 저장하는 버튼 (조건1 [간호 관리자] 실행)
• 클릭 → 주기 저장. 변경 시 신규 생성 근무표에만 적용, 기존 근무표 불변
[[POL_간호스케줄 Lifecycle]]TBU: 즉시 실행 여부·저장 실패·수간호사 권한

원천 참조

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
10병동 마스터 원천-Admin [[HBAD230]] 병동은 IMPORT로 반영, NS 자체 병동은 ①병동 관리 탭에서 CRUD[[HBAD230]]IMPORT- vs WARD_ 접두
20근무 유형 원천-근무 그룹·유형(shifts / shift_groups)은 Admin 근무 설정이 원천 — ③교대 매핑에서 소비[[HBAD260]]

권한·상태 분기 요약

시나리오트리거결과권한비고
CASE01 [설정 진입]헤더 ⚙"병동 관리 및 설정" 5탭 모달 진입조건1 [간호 관리자] / 조건2 [수간호사]좌측 병동 관리 탭은 비활성
CASE02 [NS 자체 병동 생성]① "+ 병동 추가"NS 자체 병동 생성 (코드/병동명/병상수/순서/상태)조건1 [간호 관리자]Admin 병동과 별개
CASE03 [인력 설정 저장]② "인력 설정 저장"간호사/조무사/간병인 비율 저장 → 준수율·간호등급 계산 기준값조건1 [간호 관리자]병원 전체 정책
CASE04 [교대 매핑]③ 근무형태 슬롯 select배정 D/E/N → 실제 Shift 대응 저장조건1 [간호 관리자][[HBAD260]] 소비 / HBHR 급여
CASE05 [교육 정책]④ "교육 정책 저장"work_counted / off 2모드 저장조건1 [간호 관리자]HBHR 급여
CASE06 [주기 설정]⑤ "주기 설정 저장"매월 1일~말일 주기 저장(신규 근무표부터 적용)조건1 [간호 관리자]기존 근무표 불변

Open Question

  • 인력 설정 비율(간호사 D/E/N · 조무사 · 간병인)의 준수율·간호등급 산출식 = TBU
  • wards.schedulingConfig jsonb 스키마 상세(교대 매핑·교육 정책·주기 저장 구조) = TBU
  • NS 자체 병동(⚙ 모달 CRUD)과 Admin IMPORT 병동의 병합·중복 규칙 = TBU
  • 스케줄러 설정과 Admin([[HBAD230]]/[[HBAD260]]) 설정 간 편집 권한 경계 = TBU
  • 저장 procedure: 병동 생성 nurseScheduler.ward.create·인력 설정 nurseScheduler.wardSettings.update 확정 (TC 04:4.1/4.2/4.6); 교대 매핑·교육·주기 저장 procedure 및 각 즉시 실행 여부·에러 처리(토스트/롤백) = TBU
  • 병동 삭제 시 참조 무결성(연결된 스케줄) 처리 및 soft delete 여부 = TBU
  • 모달 활성 기본 탭·탭 전환 시 미저장 편집 유지·경고 여부 = TBU
  • 조건2 [수간호사]의 설정 저장 권한 범위 = TBU