HBNS220_내 희망 일정 (내 근무시간)
(Hereby) 팀 관리(team-manager) > 간호 스케줄러 > 내 희망 일정 (내 근무시간)
| 앱 | 간호 스케줄러 (team-manager 내장, 포트 TBU) |
| 대상 사용자 | 조건1 [간호 관리자] (내 근무시간·조회 모드) · 조건3 [간호사] (희망 입력, TBU) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_간호스케줄 Lifecycle]] |
| Status | draft |
| Owner | 카나 |
개요
- "📝 내 희망 일정" 뷰. admin 계정 라이브에서는 **"내 근무시간"**으로 표기되며 조회 모드로 동작한다.
- 뷰 전환은 "조회 모드" 라벨 아래 "달력" / "목록" 전환 + "오늘" 이동을 제공한다.
- 원문 인용: "선택한 달의 배정 근무와 실제 출퇴근 기록을 비교합니다." — 배정 근무 vs 실제 출퇴근을 대조하며, "배정 0일" / "출근 0일" 요약을 노출한다.
- 실제 출퇴근 원천은 [[HBHR230]](HR 출퇴근 내역)이다.
- 간호사 계정의 희망휴가/불가일/제한근무 입력은 2단계(
nurseScheduler.preference.create→.submit)로 라이브 확정됐다 (TC 확정: 04:4.2 — 기존 "라이브 미확보 TBU" 해소). ERD nurse_preferences(vacationDates / restrictedDates / unavailableDates / preferredDates / status)가 그 원천이며, admin은nurseScheduler.preference.list로 조회한다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 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 크로스체크 확정분 반영 (🟡 — 희망입력 preference.create+submit 2단계 라이브 확정, 미확보 TBU 해소 등) |
| 2026-07-24 | 카나 | PM | 코드 변경 반영(c235e2f·71f134e·535a404) |
| 2026-07-25 | 카나 | PM | 코드 변경 반영(c49479a·6beda4f·7c9cc5e·109ef41) — 희망 입력 팝오버 탭 제거·희망/제약/휴가 3그룹 단일 화면, 삭제 버튼 접근성·셀 컨텍스트 메뉴 재구성·스타일 |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
${assigned} | nurse_schedule_entries[] (선택 월 배정 근무) | 배정 0건 → 요약 "배정 0일", 조회 셀 Empty(-E) | admin "내 근무시간" 조회 대상 |
${attendance} | 실제 출퇴근 기록 ([[HBHR230]] 원천) | 기록 0건 → 요약 "출근 0일", 조회 셀 Empty(-E) | 배정 vs 실제 대조 |
${preferences} | nurse_preferences (vacationDates / restrictedDates / unavailableDates / preferredDates / status) | 미입력 시 빈 목록 | 간호사 희망 입력 원천 — 2단계 create+submit 라이브 확정 (TC 04:4.2). vacationDates 확장: string 레거시 |
Client → Server
| 액션 | 전달 값 | tRPC/SDK | 권한 토큰 |
|---|---|---|---|
| 뷰 전환 | "달력" / "목록" / "오늘" (admin=조회 모드) | 클라이언트 표시 전환(추정) | 조건1 |
| 희망 입력(간호사 계정) | year, month, wardId, vacationDates, unavailableDates(date+reason), preferredDates, notes | nurseScheduler.preference.create(...) → nurseScheduler.preference.submit(preferenceId) 2단계 (TC 확정: 04:4.2) | 조건3 (TBU) |
| 희망 목록 조회(admin) | wardId, year, month | nurseScheduler.preference.list({wardId, year, month}) (TC 확정: 04:4.2) | 조건1 |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| HR 출퇴근 내역 ([[HBHR230]]) | 실제 출퇴근 기록 | 동기(조회 로드) | "출근 0일" 비교 원천 |
화면 플로우 (상태 머신 필수)
admin="내 근무시간" 조회 모드(배정 vs 출퇴근 비교). 간호사 계정 희망 입력 동선은 docs상 존재하나 라이브 미확보 = TBU.
내 희망 일정 / 내 근무시간 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [간호 관리자] 인증 시 "📝 내 희망 일정" 뷰 노출 | 인증 세션 | TBU: 조건3 [간호사] 희망 입력 모드 |
| 01 | 계정별 표기 | - | • admin = "내 근무시간" 표기·조회 모드 • 조건3 [간호사] = 희망 입력 모드 | TBU: 간호사 라이브 미확보 | |
| 10 | 조회 모드 전환 | Tab | • "달력"/"목록" 조회 표시를 전환하고 "오늘"로 이동하는 뷰 컨트롤 • 탭 전환 → 해당 뷰로 표시 전환 - CASE01 ["달력"/"목록"]: 조회 표시 전환 - CASE02 ["오늘"]: 오늘 날짜로 이동 | 라벨 원문 카피·TBU: 전환 무반응 시 버그 후보 | |
| 20 | 비교 안내 | Output | • "선택한 달의 배정 근무와 실제 출퇴근 기록을 비교합니다." 고정 노출 | 원문 카피 | |
| 30 | 배정/출근 요약 | Output | • 배정 근무 vs 실제 출퇴근을 대조해 "배정 0일" / "출근 0일" 요약 표기 (값 없음 시 0일) | [[HBHR230]] | |
| ㄴ31 | 배정 근무 | Output | • 선택 월 배정 셀 요약 "배정 0일" - CASE01 [배정 0건]: 조회 셀 Empty (아래 31-E) | nurse_schedule_entries | |
| ㄴ31-E | 배정 없음(Empty) | -E | • 선택 월 배정 0건일 때 조회 셀 Empty, "배정 0일" 표기 | Empty·TBU: 빈 상태 문구 | |
| ㄴ32 | 실제 출퇴근 | Output | • 실제 출퇴근 기록 요약 "출근 0일" - CASE01 [기록 0건]: 조회 셀 Empty (아래 32-E) | [[HBHR230]] | 출퇴근 원천 |
| ㄴ32-E | 출퇴근 없음(Empty) | -E | • 선택 월 출퇴근 0건일 때 조회 셀 Empty, "출근 0일" 표기 | Empty·TBU: 빈 상태 문구 | |
| 40 | 희망 입력(간호사) | Input | • 희망휴가/불가일/제한근무를 입력하는 간호사 전용 기능. 2단계 라이브 확정 • 입력 → nurseScheduler.preference.create(...) (draft 생성) → .submit(preferenceId) (제출) (TC 확정: 04:4.2) | nurse_preferences | 조건3 [간호사] 전용 · TBU: UI 동선·검증·에러 |
| ㄴ40a | 희망 입력 팝오버 (단일 화면) | Popover | • 희망근무 입력 팝오버를 탭 제거 → 희망·제약·휴가 3그룹 단일 화면으로 재구성. 「희망 근무 유형(D/E/N)」·「근무 불가(전체+D/E/N)」·「휴가 예정」을 한 번에 노출, 메모(사유)는 하단 공통 • 조작 시: 버튼 on/off 토글, 한 셀에는 하나만 지정 - CASE01 [토글]: 버튼 on/off로 지정/해제 - CASE02 [상호 배타]: 같은 날 'D 원함'+'D 불가' 동시 지정 불가 • 배경: 탭 분리 시 다른 탭 선택값이 안 보여 확인하려면 탭을 왕복해야 했음 | nurse_preferences (preferredDates / unavailableDates / vacationDates / notes) | 코드 반영: c49479a · 탭 제거·단일 화면 |
| ㄴ41 | 희망 필드 | Input | • vacationDates / unavailableDates(date+reason) / preferredDates / notes + status(draft→submitted) | nurse_preferences | create→submit 2단계 (TC 04:4.2) |
| ㄴ42 | 희망근무 휴가 유형 선택 | Select | • 희망근무 '휴가'에서 스케줄러 연동 휴가 유형(코드·색·이름)을 선택해 날짜별로 저장·표시하는 기능. pref popover에 휴가 유형 칩, 코너 배지에 휴가 코드 노출 • 선택 시: 날짜별 휴가 유형 저장·표시 - vacationDates 모델 확장: string 레거시 | {date, leaveTypeId} 혼용 jsonb | nurse_preferences.vacationDates (jsonb) · 스케줄러 휴가 유형 |
| ㄴ43 | 원하는/불가 시프트 근무유형 노출 | Select | • '원하는 시프트'·'특정 시프트 불가'를 스케줄러 연동 근무유형(코드·라벨색·이름)으로 노출. 코너 배지에 근무유형 코드 노출 • 선택 시: 근무유형 기준 희망/불가 지정 | nurse_preferences.preferredDates / restrictedDates · 스케줄러 근무유형 | 신규 (코드 반영: 71f134e) |
| ㄴ44 | preference 탭 개선 | - | • preference 탭 기능 개선 + 데이트피커 기본값 개선 (코드 반영: 535a404) | nurse_preferences | 세부 TBU |
| ㄴ45 | 삭제 버튼 접근성(스크롤) | Button | • 픽커 팝오버에서 스크롤 시에도 삭제 버튼 접근성 유지 • 스크롤 시: 삭제 버튼 도달 가능 유지 | 희망 입력 팝오버 | 코드 반영: 6beda4f |
| ㄴ46 | 셀 컨텍스트 메뉴 재구성 | Context Menu | • 셀 컨텍스트 메뉴를 배정 목록 증가에 맞게 재구성 • 클릭 시: 재구성된 컨텍스트 메뉴 노출 (세부 TBU) | nurse_schedule_entries | 코드 반영: 7c9cc5e · 세부 TBU |
| ㄴ47 | "불가" 톤 통일·모달 클리핑 해제 | - | • "불가" 톤 표기 통일 + 긴 모달 클리핑 해제 (스타일) | 희망 입력 팝오버 | 코드 반영: 109ef41 · 스타일 |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 권한 | 비고 |
|---|---|---|---|---|
CASE01 [admin 조회] | "📝 내 희망 일정" 진입 | "내 근무시간" 조회 모드 — 배정 vs 출퇴근 비교 | 조건1 | "배정 0일" / "출근 0일" |
CASE02 [뷰 전환] | "달력" / "목록" / "오늘" | 해당 뷰로 표시 전환 | 조건1 | |
CASE03 [간호사 희망 입력] | 간호사 계정 | 희망휴가/불가일/제한근무 입력 → preference.create → .submit 2단계 | 조건3 | 라이브 확정 (TC 04:4.2) |
Open Question
- 간호사 계정 희망 입력 UI/화면 동선 = TBU (procedure는
preference.create→.submit2단계로 확정, TC 04:4.2) - nurse_preferences.status 전이 = create(draft) → submit(submitted) 확정 (TC 04:4.2); 이후 반려·재제출 전이 = TBU
- 희망 입력 ↔ AI 자동생성([[HBNS201]]) 제약 반영 흐름 = TBU
- 배정 vs 출퇴근 불일치 시 처리(경고/알림) = TBU
- 조회 셀(달력/목록) Empty 빈 상태 문구 = TBU