HBNS201_AI 자동생성
(Hereby) 팀 관리(team-manager) > 간호 스케줄러 > 근무표 그리드 > AI 자동생성
| 앱 | 간호 스케줄러 (team-manager 내장 탭, 포트 4004) |
| 대상 사용자 | 조건1 [간호 관리자] · 조건2 [수간호사] |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_AI안전경계]] · [[POL_간호스케줄 Lifecycle]] · [[POL_간호인력·준수율]] |
| Status | draft |
| Owner | 카나 |
개요
- AI 자동생성은 "AI 자동생성"(보라) 버튼 1회로 전체 간호사 근무표를 3교대 규칙에 맞춰 자동 편성하는 근무표 편성 엔진이다.
- Hereby ERP에서 AI가 제품 코어로 이미 라이브 동작하는 유일 구현이며,
nurse_schedule_entries.isAiGenerated의 네이티브 본거지다. - 클릭 시 별도 설정 모달 없이 즉시 생성이 시작되고(소요 수 초), 진행 배지 "AI 생성 중"과 "취소" 버튼이 노출된다.
- 라이브 실측상 취소가 abort 완료 전 미적용되어 편성이 working version에 적용됐다 — P1 안전갭이다.
- AI 생성 실패 시 제약 솔버 폴백(constraint-fallback) 으로 편성을 마무리한다(코드 확인 사실).
- 상태 배지 전이가 확정됐다:
CASE01 [초안]→ (AI 생성 완료)CASE02 [AI 생성]→ (수동 셀 편집)CASE03 [수정 중]. - 결과는 3교대 "D D E E N N OFF" 반복 패턴으로 편성되며 연차·교육 등 기존 배정은 보존되고, 준수율(인력 비율 충족도)을 25%에서 100%로 최적화한다. 데이전담은 "D D D D D OFF OFF" 주5일 패턴이다.
- 이 엔진만 라이브 구현 완료 — 그 위 설명층/편집 코파일럿/확정 QA/자연어 질의/부분 재생성/생성 전 confirm 가드는 전부 greenfield(신규 설계 후보)로, Donue 차별화 표면 대비 이 화면이 기존 강점(생성 엔진) 을 부각한다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-21 | 카나 | PM | TC 크로스체크 확정분 반영 (🟡 — nurseScheduler.schedule.generate/generationStatus 확정 등) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
${schedule} | nurse_schedules (scheduleId + status) | 신규 근무표 CASE01 [초안] | AI 생성 대상 |
${roster} | nurse_schedule_entries[] (연차·교육 등 보존 대상 식별) | 빈 그리드(전 셀 미배정) | 연차/교육 보존 |
${compliance} | 준수율 (비율 충족도) | 생성 전 "준수율 25%"(빨강) | 생성 후 100% 목표 |
${gen_state} | 생성 진행 상태 | 미실행 시 상태 없음 | "AI 생성 중" / 완료 "AI 생성" / 수동 편집 "수정 중" |
Client → Server
| 액션 | 전달 값 | tRPC/SDK | 권한 토큰 |
|---|---|---|---|
| AI 자동생성 | scheduleId | nurseScheduler.schedule.generate({scheduleId}) (TC 확정: 04:4.3) — 즉시 실행, destructive(기존 working version 덮어씀) | schedule:write (추정) |
| 진행상태 폴링 | scheduleId | nurseScheduler.schedule.generationStatus(scheduleId) (TC 확정: 04:4.3) — generating 단계 근거 | schedule:write (추정) |
| 취소 | scheduleId | abort (추정) — 실측상 완료 전 미적용, 실제 abort 보장 TBU | schedule:write (추정) |
외부 통합 (cross-app) / ERD 근거
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
nurse_schedule_entries.isAiGenerated | 셀별 AI 편성 여부 | 동기 (본거지) | AI 라이브 구현 유일 앵커 |
nurse_schedule_entries.isManualOverride / assignmentType / shiftId | 셀 배정 원천 | 동기 | 수동 편집 시 override 기록 |
| 제약 솔버(constraint-fallback) | AI 실패 시 대체 편성 | 동기 (폴백) | 코드 확인 사실 |
화면 플로우 (상태 머신 필수)
생성 엔진은 라이브 강점. 취소=실제 abort 보장과 생성 전 confirm 게이트는 P1 안전 가드(greenfield) — publish는 항상 사람([[HBNS202]]). AI 실패 시 제약 솔버 폴백이 편성을 완료.
AI 자동생성 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 트리거 | Button | • 전체 간호사 근무표를 1회 클릭으로 자동 편성하는 엔진 트리거("AI 자동생성", 보라) • 클릭 → 즉시 생성 시작(별도 설정 모달·컨펌 없이) - CASE01 [초안]·CASE02 [AI 생성]·CASE03 [수정 중] 어느 상태에서도 재실행 가능(기존 working version 덮어씀) | [[HBNS200]] 근무표 그리드 | 라이브 구현 · 조건1/2 실행, TBU: 간호사 실행 권한 |
| 10 | 진행 배지 | Badge | 상태 배지 "AI 생성 중" + "취소" 버튼 노출, 생성 소요 수 초 | 실패 시 폴백 완료(30 참조) | |
| ㄴ11 | 취소 (안전갭) | Button | • 진행 중 생성을 중단 시도하는 기능. P1 안전갭 • "취소" 클릭 → abort(생성 중단) 시도 - 실측상 abort 완료 전 미적용 — 편성이 working version에 적용됨 | [[POL_AI안전경계]] | TBU: 실제 abort 보장 |
| ㄴ12 | 생성 전 confirm 가드 (제안) | Modal | • P1 제안: 생성 전 confirm 모달(영향 병동·기존 편성 덮어쓰기 경고) + 취소=실제 abort + 입력검증 게이트 결합 • 클릭 → TBU (greenfield 미구현) | [[POL_AI안전경계]] | greenfield — 미구현, 설계 후보 |
| 20 | 생성 결과 (3교대) | Output | 전체 간호사에 D/E/N/OFF 자동 편성. 3교대 패턴 = "D D E E N N OFF" 반복(간호사별 로테이션 오프셋으로 D/E/N 분산) | [[HBNS200]] 배정 셀 | isAiGenerated 본거지 |
| ㄴ20-E | 간호사 0명 | Output | 편성 대상 없음(결과 empty) | TBU: empty 표기 | |
| ㄴ21 | 데이전담 패턴 | Output | 데이전담 간호사 = "D D D D D OFF OFF" 패턴(주5일, 야간 제외) | nurse_profiles.workType | |
| ㄴ22 | 기존 배정 보존 | - | 연차·교육은 그대로 유지하고 그 외만 편성. 보존 대상 셀 없으면 전 셀 신규 편성 | ||
| 30 | 제약 솔버 폴백 | - | AI 생성 실패 시 제약 솔버(constraint-fallback)로 편성 완료 — 코드 확인 사실 | 비고 표기(코드 확인) · TBU: 사용자 실패 노출 여부 | |
| 40 | 준수율 최적화 | Output | 생성 후 준수율 25% → 100%(인력 비율 충족 최대화). AI 목적함수. 준수율 색: 낮음 빨강 → 충족 초록 | [[POL_간호인력·준수율]] | 2026-08 빈 근무표에서 25%→100% 검증 |
| 50 | 완료 배지 | Badge | CASE01 [초안] → (생성 완료) CASE02 [AI 생성] → (수동 셀 편집) CASE03 [수정 중] 전이 확정. 자동 확정/게시 아님 | [[POL_간호스케줄 Lifecycle]] | 확정 시 전이는 [[HBNS202]] |
| 60 | 정본 경계 | - | AI는 생성·편성까지만. 이후 사람 검수·수정 → 확인(확정)·게시는 항상 사람. 자동 publish 금지(전 역할 공통) | [[HBNS202]] / [[POL_AI안전경계]] | 자동 publish 금지 |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
CASE02 [AI 생성] | "AI 자동생성"(보라) | 즉시 생성(수 초) → "AI 생성 중" → "AI 생성" working 상태(준수율↑) | 수동 편집 시 CASE03 [수정 중] |
| 생성 취소 | "취소" | 버튼 노출되나 실제 abort/직전 상태 복귀 보장 안 됨(완료 전 미적용) | P1 안전갭, undo/rollback TBU |
| AI 실패 | 생성 중 엔진 오류 | 제약 솔버 폴백(constraint-fallback)으로 편성 완료 | 코드 확인 사실 |
Open Question
- 취소=실제 abort 보장 + 생성 전 confirm 가드(P1) 구현 여부 = TBU
- AI 자동생성 undo/rollback(취소 완료 전 미적용) = TBU
- 제약 솔버 폴백 발동 시 사용자 실패/폴백 노출 여부 = TBU
- 내 희망 일정(nurse_preferences) ↔ AI 제약 반영 흐름 = TBU
조건3 [간호사]AI 자동생성 실행 권한 = TBU