서비스 예약 공통 흐름
/hotel, /grooming, /pet-taxi는 서로 다른 화면처럼 보이지만, 실제 예약 생성과 수정은 공통 ServiceBookingModal 흐름을 공유합니다. 보호자 선택, 환자 선택, 예약 상세, 부가 서비스, 요약, 체크아웃이 같은 규칙으로 연결되기 때문에 운영 문서도 이 기준을 먼저 이해하는 편이 정확합니다.
이 공통 흐름을 쓰는 서비스
HOTELGROOMINGPET_TAXI
서비스마다 이름과 라벨은 다르지만, 기본 예약 상태와 모달 스텝은 동일합니다.
예약 상태를 읽는 기본 기준
BOOKED
예약이 생성되었지만 아직 실제 서비스가 시작되지 않은 상태입니다.
CHECKED_IN
서비스가 시작된 상태입니다. 의미는 서비스마다 다릅니다.
- Hotel: 실제 투숙 중
- Grooming: 작업 진행 중
- Pet Taxi: 이동 진행 중
CHECKED_OUT
서비스 종료 처리가 완료된 상태로 봅니다. 추가 서비스와 후속 청구 확인은 이 시점 전후에 함께 검토해야 합니다.
CANCELLED
예약이 취소된 상태입니다. 다시 진행하려면 새 예약을 만드는 쪽이 더 안전합니다.
⚠️ Warning:
CHECKED_OUT이나CANCELLED이후에는 단순 상태 되돌리기보다 후속 문서, 영수증, 예약 이력을 같이 확인해야 합니다. 서비스 종료 후 수정은 결제와 운영 기록을 함께 흔들 수 있습니다.
공통 모달 스텝
서비스 예약 모달은 보통 아래 순서로 이동합니다.
Step 1. select-customer
보호자를 선택합니다. 기존 보호자를 먼저 찾는 것이 원칙이며, 잘못된 보호자를 선택하면 이후 환자와 청구 문맥이 모두 어긋납니다.
Step 2. select-pet
선택한 보호자 아래 환자를 선택합니다. 서비스 예약은 환자 기준으로 생성되므로, 같은 보호자 아래 여러 마리가 있는 경우 환자 HN과 이름을 같이 확인해야 합니다.
Step 3. booking-details
서비스별 핵심 예약 정보를 입력합니다.
- 시작 일시
- 종료 일시 또는 체크아웃 일시
- 배정 리소스
- Hotel: 방/객실
- Grooming: 스테이션
- Pet Taxi: 차량/배차 리소스
- 담당 직원 또는 groomer
- 코멘트
- Pet Taxi의 경우 픽업/드롭오프 주소
Step 4. add-on-services
추가 서비스나 부가 항목을 장바구니처럼 붙입니다. 이 단계는 지점별 Branch Service 마스터를 그대로 사용하므로, 가격과 서비스명은 운영 허브에서 관리한 데이터에 따라 달라집니다.
Step 5. summary
예약 내용을 최종 확인합니다. 서비스별로 아래 항목이 요약에 다르게 강조됩니다.
- Hotel: 체크인, 체크아웃, 숙박 일수, 객실
- Grooming: 예약 시간, 스테이션, 담당자
- Pet Taxi: 예약 시간, 차량, 픽업/드롭오프
Step 6. view / edit
생성된 예약은 상세 보기로 열고, 같은 모달에서 수정으로 이어질 수 있습니다.
Step 7. checkout
서비스 종료 시 추가 청구 항목을 다시 확인하고 체크아웃을 확정합니다.
서비스별로 다른 입력 포인트
Hotel
- 기간형 예약이 핵심입니다.
- 체크인과 체크아웃 시간이 실제 투숙 시간으로 사용됩니다.
- 객실 중복과 일정 충돌을 먼저 확인해야 합니다.
Grooming
- 일자 단위보다 시간 예약 운영이 중요합니다.
- 스테이션과 담당 groomer 확인이 핵심입니다.
- 코드에는 결과 사진 업로드 스텝이 정의돼 있지만, 현재 체크아웃 흐름은 그 단계를 건너뛰고 바로 종료되도록 구성돼 있습니다.
Pet Taxi
- 픽업과 드롭오프 주소가 예약 상세의 핵심 입력값입니다.
- 차량/기사 리소스는 화면상 룸 리소스처럼 관리됩니다.
공통 운영 규칙
- 예약 전 보호자와 환자 매칭을 먼저 확정합니다.
- 부가 서비스는 예약 생성 직후가 아니라 실제 서비스 범위가 확정된 뒤 다시 검토하는 편이 안전합니다.
- 취소는 가능한 한 서비스 시작 전
BOOKED상태에서 처리합니다. - 서비스 상세를 수정할 때는 시간, 리소스, 담당자 세 축을 같이 보아야 충돌을 줄일 수 있습니다.
현재 구현상 참고할 점
- 새 예약 버튼은 공통 모달을 새 흐름으로 열도록 구성되어 있습니다.
- 상세 보기와 수정은 같은 모달 안에서 이어집니다.
- Grooming 전용 결과 사진 업로드 단계는 코드상 존재하지만, 현재 종료 플로우의 필수 단계는 아닙니다.