객실 현황 · 입실 체크인 — feature/stay/console
콘솔 번들 console_stay 의 화면 C-06 객실 현황(/room)과 C-07 입실 체크인(/check_in).
WP-STAY(cocode#1276) 가 만든다. 키오스크 쪽 입실 서류는 admission_form ·
consent_record.
구조
| 층 | 파일 | 하는 일 |
|---|---|---|
| 라우트 화면 | page/room_board_page.dart · page/check_in_page.dart |
공용 데모 세계 · 세션 · 표시 투영기를 서비스 로케이터에서 받고(StayConnection — 없으면 S-05), 세계 · 세션 신호(useStayRevision)마다 다시 읽는다. 지점 범위 · 상태 미리보기 · 역할별 동작을 정한다 |
| 세계 읽기 | data/stay_world_reader.dart |
세계 → 화면 값(RoomBoardData · CheckInCase). 이름(B)은 StayNames(DisplayProjector) |
| 세계 쓰기 | data/stay_world_writes.dart |
한 동작 = 한 트랜잭션. 지점 범위 · 역할(ia.md §5) · 객실 상태 머신(§7) · 체크인 단계 규칙을 트랜잭션 안에서 다시 판정(fail-closed) |
| 화면 | presentation/board · presentation/check_in |
값과 콜백만 받는다(위젯북 · 골든 · 위젯 시험이 손 값으로 돈다) |
| 도메인 | domain/ |
타임라인 · 배정 판정 · 집계 · 공실 예정 · 체크인 규칙(순수 로직) |
| 세계 계약 | package/postpartum_world/lib/src/kiosk/admission_paperwork.dart |
입실 코드 발급 · K-03 초안 · K-04 서명 · 서류 현황 — 세 번들이 함께 쓴다(BRIEF-contract §10, 주인 WP-STAY) |
화면
| 화면 | 넓이 구간 | 받는 값 · 동작 |
|---|---|---|
| C-06 객실 현황 | ≥960 이면 왼쪽 열에 집계 · 공실 예정 · 범례, 좁으면 위로 쌓는다. 타임라인 날짜 수는 가용 폭(7~28일, R-3) | 원장 · 상담실장: 배정 · 소독 완료. 그 밖의 역할은 보기만 |
| C-07 입실 체크인 | 대상이 여럿이면 탭, 좁으면 진행 칩을 칩 줄로 | 오늘 입실(예약완료 · 입실중) 대상. 단계마다 그 역할만 기록 |
- 지점 범위(FR-02): 지점 역할은 자기 지점, 대표는 셸 지점 스위처 값. 대표가 「전체」면 화면 머리에서 지점을 고른다 (보드는 지점 하나의 객실 × 날짜다 — 처음엔 투어 지점 물결점).
- 상태 미리보기(
?fixture=): 불러오는 중(스켈레톤) · 빈 상태(S-01) · 오류(S-03 — 「다시 시도」는 미리보기를 끈다). - 쓰기가 규칙으로 거절되면(다른 탭이 먼저 바꾼 경우 등) 알림만 띄운다(
guardStayWrite) — 세계는 바뀌지 않는다.
세계 읽기 · 쓰기
| 동작 | 쓰는 것(한 트랜잭션) |
|---|---|
| 배정 | reservations.roomId · 객실 「배정됨」(오늘 · 내일 입실이면) · 옮겨 간 앞 객실 되돌리기 |
| 소독 완료 | rooms.status(오늘 · 내일 입실이 잡혀 있으면 배정됨, 아니면 사용 가능) · lastDisinfectedAt |
| 입실 코드 발급 | kioskPasses(입실 목적 · 입실 태블릿 · 10분 · pass_admission_<n>) — 아직 안 쓴 앞 코드는 만료. 살아 있는 코드가 있으면 화면이 버튼을 숨긴다 |
| ① 오리엔테이션 · 서류 | K-04 제출(AdmissionPaperwork.sign)이 함께 기록한다(by = 코드를 발급한 직원). 수동 「① 완료」도 서명 뒤에만 |
| ② 수유 계획 | stays.feedingPlan · steps.feedingPlan{pumpRentals, pumpExplained} |
| ③ 신생아 인수 | newborns.tests · assessment(세계 키) · note(C) · steps.newbornIntake — 8부위를 다 살펴야 |
| ④ 산모 초기 체크 | motherVitals `mv_<체류 꼬리> |
| ⑤ 완료 | steps.done · stays.admittedAt · 예약 inHouse(+ history) · 객실 occupied · 신생아 stayId |
FR ↔ 구현 ↔ 시험
| FR | 상태 | 구현 | 시험 |
|---|---|---|---|
| FR-30 객실 보드 · 배정 · 소독 | 실동작 | RoomTimeline · RoomAssignment · StayWorldWrites.assignRoom · markCleaned |
room_timeline_test · room_assignment_test · stay_world_writes_test(겹침 거절 · 간호사 거절 · 배정) · stay_world_pages_test(308 소독 완료 → 세계 · 화면) · BDD room_board.feature |
| FR-31 입실 예정자 카드 | 실동작(인쇄는 모의) | StayWorldReader 의 AdmissionNotice · AdmissionNoticeDialog |
stay_world_reader_test(서보미 703 · 튼튼이 3240g) · room_board_view_test |
| FR-32 카드 보기 · 집계 | 실동작 | RoomBoardSummary · VacancyForecast |
stay_world_reader_test — 세계 집계 식(PostpartumFacts)과 같은 숫자 34 · 1/3 · 1/2 · 2 |
| FR-40 입실 체크인 | 실동작 | StayWorldWrites 다섯 단계 · CheckInRules |
stay_world_writes_test(①~⑤ → 입실중 · 703 사용중 · 재실 35) · check_in_view_test · BDD check_in.feature |
| FR-41 서류 연동 | 실동작 | AdmissionPaperwork.stateOf → ① 서류 카드 |
stay_world_pages_test — 두 세션 · 같은 세계: 키오스크 K-03 완료 → K-04 서명 → 콘솔 ① 이 새로고침 없이 「서명 완료」 |
| FR-42 신생아 인수 | 실동작 | ③ → newborns |
stay_world_pages_test(신생아실 8부위 → 행) |
| FR-43 수유 · 산모 초기 체크 | 실동작 | ② · ④ → stays · motherVitals |
stay_world_writes_test |
| FR-120 입실 코드 발급 | 실동작 | AdmissionPaperwork.issuePass(KioskCodeIssuer) |
admission_paperwork_test · stay_world_pages_test(만료 뒤 다시 발급) |
위젯 시험은 역할별 칸 노출, 아랍어(RTL), testScaleInvariant(scaling 1.25 × textScaler 4조합)를 함께 돈다.
골든: test/golden/room_board_golden_test.dart · check_in_golden_test.dart(ko · en · ar × 라이트 · 다크 pairwise —
기준 PNG 는 CI 가 만든다).
시드
- 객실 · 예약 · 체류 · 신생아 · 입실 코드 6427 은 A1 척추 시드다(docs/demo-world.md §4).
seed_stay.dart(WP-STAY): 물결점 재실 체류마다 입실 때 서명한 서류 행 — 입실신청서 · 개인정보 필수 · 감염 · 안전 교육 (+ 수신 동의 고객은 마케팅 선택). 서명 순간 = ① 기록 순간. 서명 이미지 · 산모 입력(C)은 싣지 않는다(크기 · 한국어 금지). 다른 지점은 두지 않는다(투어 지점만 — 크기).
모의 경계
- 「인쇄」(FR-31 카드)는 미리보기까지다.
- ① 서명 이미지는 K-04 가 남긴 PNG data URI 를 그대로 보인다(전자서명 인증 아님).
Figma 와 다르게 둔 점
- 집계 「입실/공실 31/9 · 오늘 2·3」 — 세계 식으로 34/6 · 1·3(demo-world §8).
- 입실 시각(「오늘 14:00 입실」)은 세계에 필드가 없어 날짜만 보인다.
- C-07 의 ①·② 완료(14:20 · 14:35) · ③ 진행 화면은 투어가 만드는 뒤 상태다 — 09:00 의 서보미는 단계가 비어 있다.
- 소독 막대는 모든 퇴실 다음 날에 그린다(Figma 는 일부 행만) — 시드 약속을 그대로 보이려는 것.
- 신생아 인수의 「입실 기준 충족」 칩 대신 「다시 확인 필요」만(판정 문구 금지). 「경피 황달 8.2」 같은 수치 칸 없음(세계 필드 없음).
- 신체 사정 8부위(지시서) — PRD 의 14항목 · 그림 위 위치는 하지 않았다.
- 대표 「전체」 범위의 지점 고르기는 화면 머리의 칩이다(Figma 에 없는 자리).