Skip to content

HBNS000_간호 스케줄러 (앱 개요)

(Hereby) 팀 관리(team-manager) > 간호 스케줄러 > 앱 개요

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

개요

  • 간호 스케줄러는 월 단위 간호사 × 일자 그리드에 3교대(D/E/N)를 배정하는 근무표 워크스페이스다.
  • Hereby ERP에서 AI 자동생성이 제품 코어로 이미 동작하는 유일 앱이며, isAiGenerated enum의 네이티브 본거지다.
  • AI 자동생성이 핵심 — 버튼 1회로 전체 간호사 근무표를 3교대 규칙에 맞춰 자동 편성하고 준수율(인력 비율 충족도)을 최적화한다(라이브 실측 25%에서 100%). 연차·교육 등 기존 배정은 보존된다.
  • 핵심 경계(라벨 기준): 초안 → AI 생성 중 → AI 생성 → 수정 중 → 확정 → 공유됨. AI는 생성·제안·설명·검증까지만 관여하고, 확정·공유(publish)는 항상 사람이 실행한다(환자안전 직결, 자동 publish 금지 — [[POL_AI안전경계]]).
  • 라이브 상태 라벨(초안/AI 생성 중/AI 생성/수정 중/확정/공유됨)과 내부 enum(draft→generating→ai_generated→editing→confirmed→published, 6단계)은 분리 표기한다. generating 단계는 SDK generationStatus 폴링이 근거다 (TC 확정: 04:4.3).
  • 근무표 편집은 셀 클릭 선택 후 키보드 단축 입력(d/e/n 등)으로 즉시 배정하는 방식이며, 별도 팝업이 없다. 확정 시 셀 편집이 잠긴다.
  • 로그인은 타 앱과 통일된 비밀번호/휴대폰 인증 2탭 구조다.
  • 병동 관리 및 설정(⚙ 모달)은 5탭(병동 관리·인력 설정·교대 매핑·교육 정책·주기 설정)으로 구성되며, 인력 설정이 간호등급·준수율 계산의 원천, 교대 매핑이 NS→HR 급여 연동 고리다.

문서 히스토리

날짜작성자변경 내용
2026-07-06카나PM최초 작성
2026-07-10카나PM라이브 기능 검토 반영
2026-07-21카나PMGC700 깊이 재작성
2026-07-21카나PM셀 스타일 확정판 적용 (콸 승인)
2026-07-21카나PMTC 크로스체크 확정분 반영 (🟡 — nurseScheduler.* 네임스페이스, status 6단계 generating 추가, 근무형태 변경 백로그 Open Question)

Data I/O

Server → Client

변수DB 엔티티.컬럼값 없을 때비고
${jwt_session}인증 세션 (조건1 [간호 관리자] / 조건2 [수간호사])/nurse-scheduler/signin 리다이렉트
${period}년(2024-2028) / 월(1-12)기본 당월
${ward}wards[] — "간호부 (IMPORT-간호부-...)" / "1 (WARD_...)"기본 병동(최근/첫 병동) TBU표시 라벨 원문
${schedule}nurse_schedules + 상태 배지초안 없음 시 빈 그리드 TBU
${roster}nurse_schedule_entries[] — 셀별 D/E/N/OFF/연차/교육미배정 셀 빈칸
${compliance}준수율 (비율 충족도 계산)미산정 시 TBU실측 "25%에서 100%"

Client → Server

액션전달 값tRPC/SDK권한 토큰
AI 자동생성scheduleIdnurseScheduler.schedule.generate({scheduleId}), 진행상태 폴링 .generationStatus(scheduleId) (TC 확정: 04:4.3)TBU
엔트리 검증scheduleIdnurseScheduler.entry.validate({scheduleId}) (생성 후·확정 전) (TC 확정: 04:4.3)TBU
셀 배정 편집entryId, assignmentType, shiftIdnurseScheduler.entry.update() (TC 확정: 04:4.6)TBU
확정scheduleIdnurseScheduler.schedule.confirm({scheduleId}) (TC 확정: 04:4.4), destructiveTBU
공유(제출)scheduleIdnurseScheduler.schedule.publish({scheduleId}) (TC 확정: 04:4.4), destructiveTBU

외부 통합 (cross-app)

외부 시스템데이터동기/비동기비고
Admin 병동 관리 (HBAD230)Ward 마스터 원천 — 병동 탭 "1 (WARD_...)" 반영동기
Admin 근무 설정 (HBAD260)근무 그룹·유형(shifts/shift_groups) 원천동기
Time Management (HBTM)확정 시 연차 자동생성 → 팀결재 인박스 / 스케줄러 embed비동기연차 큐 연동 확인
HR (HBHR240 병동 환자수 · HBHR230 출퇴근)환자수·근태 원천 연계동기
Medical (HBMD)병동별 인력 현황 ("스케줄러와 병동 관리로 계산")동기

화면 플로우 (상태 머신 필수)

확정·공유는 정본 경계 — destructive. AI/검증은 확정 모달 직전까지만, publish는 항상 사람. AI 자동생성 실패 시 제약 솔버 폴백(constraint-fallback)으로 편성한다(코드 확인 사실).

앱 개요 사양표

번호항목/기능명타입사양 및 기능 설명연관/영향 범위비고
00화면 진입 조건-• 앱 진입 시 간호 관리자 인증을 요구하는 게이트
• 진입 시: 조건1 [간호 관리자]/조건2 [수간호사] 인증이면 노출
 - CASE01 [미인증]: /nurse-scheduler/signin 리다이렉트 (세션 만료 시 재인증, 인증 실패 시 로그인 화면 유지)
인증 세션TBU: 간호사(조건3) 접근 범위
01초기 상태-• 진입 직후 로드되는 근무표
• 진입 시: 최근 근무표(당월·최근 병동)로 로드, CASE01 [초안] 배지 표시
 - CASE01 [근무표 미생성 월]: 빈 그리드
 - CASE02 [병동 미선택]: 기본 병동 로드
TBU: 초안 없을 때 배지 표시 · 기본 병동 로직·로드 실패 처리
10정체성-• 월 단위 간호사×일자 3교대 근무표 + AI 자동생성 — Hereby에서 AI가 제품 코어로 도는 유일 영역[[HBNS201]]isAiGenerated 본거지
20Lifecycle-• 초안 → AI 생성 중 → AI 생성 → 수정 중 → 확정 → 공유됨 (라벨 vs 내부 enum draft→generating→ai_generated→editing→confirmed→published 6단계 분리)[[POL_간호스케줄 Lifecycle]]전이 검증됨(exec-diff) · generating 추가 (TC 확정: 04:4.3)
30뷰 탭-• "📋 근무표" / "👩‍⚕️ 간호사" / "📝 내 희망 일정" 3뷰
• 클릭 → [[HBNS200]] / [[HBNS210]] / [[HBNS220]] 각 전환
[[HBNS200]] / [[HBNS210]] / [[HBNS220]]
40화면 목록 (I.A.)-• HBNS100 Shell / HBNS200 그리드 / HBNS201 AI 생성 / HBNS202 확정 / HBNS203 유틸 / HBNS210 프로필 / HBNS220 희망 일정 / HBNS230 환자수 / HBNS240 병동 설정 / HBNS250 다중 병동앱 하위 화면
50cross-app 연결-• HBAD230(병동 원천) · HBAD260(근무 유형) · HBTM(연차 자동생성) · HBHR240(환자수) · HBHR230(출퇴근) · HBMD(인력 현황)Data I/O cross-app 참조
60AI 안전 경계-• AI는 생성/제안/설명/검증까지만 — 확정·공유는 항상 사람, 자동 publish 절대 금지[[POL_AI안전경계]]환자안전 직결
70AI 자동생성 폴백-• AI 자동생성 실패 시 제약 솔버 폴백(constraint-fallback)으로 편성[[HBNS201]]코드 확인 사실

AI 접점 요약

간호 스케줄러의 AI 진입 표면은 "AI 자동생성" 버튼 = 근무표 편성 엔진이며, 이것만 라이브 구현 완료 상태다. 그 위 설명층/편집 코파일럿/확정 QA/자연어 질의/부분 재생성 6종은 전부 신규 설계 후보(greenfield) = Donue 차별화 표면이다. 핵심 룰: AI는 생성·설명·제안·QA까지, publish는 사람 확정.

AI Skill트리거 위치동작구현우선도
schedule.generate"AI 자동생성" ([[HBNS201]])전체 근무표 3교대 자동 편성, 준수율 최적화 (nurseScheduler.schedule.generate, TC 확정: 04:4.3)라이브 구현★★★★★
scheduleExplain생성 결과 셀/행 (greenfield)"왜 이 배정? 어떤 제약 만족? 대안이 왜 막힘" 설명 카드greenfield (RFP 결정타)★★★★★
swapSuggest셀 수정 (editing, greenfield)영향범위·위반규칙·대체추천 + 교대교환 제안greenfield★★★★☆
complianceGapAlert확정 직전 ([[HBNS202]], greenfield)연속야간 위험자/저배치일/교육 단독/연차충돌/준수율 미달 체크리스트greenfield★★★★★
naturalQuery전체 스케줄 (greenfield)"이번달 가장 위험한 날?" "희망반영률 80%↓만"greenfield★★★★☆
constraintFromNL부분 재생성 (greenfield)"야간 편중만 완화해서 다시" "김간호사 주말 빼줘" → 제약 반영 재편성greenfield★★★★☆

연차 자동생성 (확정 연동)

항목사양
트리거확정 시점(확인→컨펌→확정 완료)
생성 기준근무표 내 연차 셀 기준 역방향 생성 — 연차 셀 수 = 생성 건수
사유 텍스트"근무표 확정 자동 생성" (원문 카피)
상태승인
연동처HBTM 팀결재(TM 결재함 / 연차 큐)
검증2026-08 확정분: 연차 셀 0 → 생성 0건. 2026-04 확정분: 큐 유입으로 메커니즘 확인

권한·상태 분기 요약

시나리오트리거결과비고
CASE01 [미인증 진입]/nurse-scheduler 직접/nurse-scheduler/signin 리다이렉트
CASE02 [AI 생성]AI 자동생성생성 중(취소 노출) → AI 생성 상태(준수율↑)취소는 abort 완료 전 미적용
CASE03 [수정 중]셀 클릭 + d/e/n 입력즉시 배정, 배지 "수정 중"팝업 없음
CASE04 [확정]확인(초록) → 컨펌 확인확정, 배지 "확정" + 셀 편집 잠금, 연차 자동생성 → HBTMdestructive
CASE05 [공유됨]"제출" 클릭공유됨, 확인/제출 버튼 소멸(AI 자동생성만 잔존)destructive

Open Question

  • 비율 규칙(1:5/1:7/1:10) 설정 화면 위치 = TBU
  • 확정/공유 상태 전이의 정확한 내부 enum 매핑 = TBU
  • 초안 ↔ AI 생성 배지 표시 조건(수정 후 라벨 유지 여부) = TBU
  • AI 자동생성 undo/rollback 여부(취소 완료 전 미적용은 확인) = TBU
  • 내 희망 일정 ↔ AI 제약 반영 흐름 = TBU
  • team-manager 포트/프로토타입 = TBU
  • AI 자동생성 권한 토큰 정확 명세 = TBU (SDK 메서드는 nurseScheduler.schedule.generate/.generationStatus로 확정, TC 04:4.3)
  • 근무형태 변경 요청·승인 화면 사양서 부재 = 신규 화면 백로그: 라이브에 nurseScheduler.workTypeChange.request({requestedWorkType, reason, effectiveDate}).approve({id}) 흐름이 실재하나(TC 확정: 04:4.5) 대응 화면 사양서가 없다. NurseWorkType enum = three_shift / night_dedicated / day_dedicated (two_shift 없음, TC 확정: 04:4.5).