운영 가이드

전체 프로세스 한눈에 보기

예약 → 렌트(인수) → 반납까지 전체 흐름을 확인하세요

예약 상태 흐름

Booking Status

confirmed
예약 확정
ready
차량 준비 완료
picked_up
인수 완료
completed
반납 완료
🚗 차량 상태
available
가용 가능
ready
배정 대기 (준비 완료)
rented
운행 중
available
가용 가능 (복귀)
📝
고객

예약 프로세스

BookingPage → BookingSuccessPage

1
📅날짜 & 장소 선택

인수/반납 날짜, 시간, 장소 설정

  • 인수 장소 선택
  • 반납 장소 선택
  • 날짜·시간 입력
2
🚘차량 선택

원하는 차종 선택

  • 차종 카테고리 필터
  • 차량 상세 확인
  • 차량 선택
3
📦패키지 선택

렌트 패키지 및 옵션 선택

  • 패키지 선택(기본/프리미엄)
  • 추가 옵션 선택
  • 가격 실시간 계산
4
🛡️보험 확인

기본 보험 및 추가 보험 확인

  • 기본 보험 포함
  • 도난보험 등 추가 보험
  • 면책금 확인
5
✍️고객 정보 입력

예약자 정보 및 요청사항

  • 이름·연락처 입력
  • 항공편 정보(선택)
  • 카카오/WhatsApp
6
💳결제 확인

쿠폰·포인트 적용 후 최종 확인

  • 쿠폰 코드 적용
  • 포인트 사용
  • 개인/법인 결제 선택
🔑
스태프

렌트(인수) 프로세스

StaffPickupFlow

1
🔍기존 손상 확인

인수 전 차량 손상 이력 검토

  • 미수리 손상 목록 표시
  • 손상 위치 시각화
  • 확인 체크박스
2
🚗차량 배정

배정대기 차량 선택 및 배정

  • 번호판/이름 검색
  • 배정대기 차량만 표시
  • 차량 정보 확인
3
💳결제 확인

결제 방법 선택 및 기록

  • 법인카드/현장카드/현금
  • 계좌이체/선불
  • 결제 메모 입력
4
✍️임차인 서명

차량 상태·정책 동의 서명 획득

  • 터치 서명 패드
  • 서명 Cloud 저장
  • 이메일 송부 선택
5
인수 완료

상태 업데이트 및 PDF 발송

  • status → picked_up
  • 차량 → rented
  • PDF 이메일 백그라운드
🏁
스태프

반납 프로세스

StaffReturnFlow

1
📋인수 시 손상 확인

인수 당시 기록된 손상 비교

  • 인수 시 손상 마커 표시
  • 신규 손상 여부 선택
  • 손상 메모 입력
2
📏반납 점검

KM, 연료, 청소 상태 기록

  • 반납 KM 입력
  • 연료 상태 선택(0~8/8)
  • 청소 상태 선택
3
💰추가 비용

연료·청소·손상·기타 추가비용 정산

  • 연료 부족분 청구
  • 청소 비용
  • 손상/기타 비용
4
반납 완료

예약 완료 처리 및 차량 상태 초기화

  • status → completed
  • 차량 → available
  • PDF 이메일 백그라운드
손상 관리

손상 기록 라이프사이클

🟣 ① 렌트 준비 점검 전
위치: VehiclePrepareFlow
방법: 차량 상세 → 손상 탭에서 별도 관리 (참고용)
저장: fleetLogs (type: damage)
💡 준비 점검 자체에는 손상 입력 없음. 손상 탭에서 직접 기록
🟢 ② 인수 전 (StaffPickupFlow)
위치: StaffPickupFlow Step 1
방법: 기존 미수리 손상 이력 조회 후 체크박스로 확인
저장: fleetLogs에서 읽기만 (신규 저장 없음)
💡 getVehicleLogs() 호출 → type=damage & resolved=false 필터
🔴 ③ 운행 중 / 수동 보고
위치: VehicleDamageTab (차량 상세)
방법: "+ 신규 손상 / 사고 수동 보고" 버튼 → 도면 마킹 → 항목별 설명 입력
저장: fleetLogs (type: damage, blueprintData, resolved: false)
💡 hasDamage: true 플래그 vehicle에 추가. 예약건 매핑 가능
🔵 ④ 반납 시 (StaffReturnFlow)
위치: StaffReturnFlow Step 1
방법: 인수 시 손상 마커 비교 → 신규 손상 여부 Yes/No 선택
저장: extraCharges.otherDesc 필드에 메모 (returnData 내)
💡 반납 플로우에서 별도 손상 로그 생성 없음. 추가 비용 단계에서 금액 청구
⑤ 별도 손상 해결 처리
위치: VehicleDamageTab → 미해결 손상 카드
방법: "이 손상 해결 처리" 버튼 → 수리 내용·실제 수리비·보험접수 입력
저장: fleetLogs 업데이트: resolved=true, repairNotes, actualRepairCost
💡 마지막 미수리 손상 해결 시 hasDamage: false 자동 해제
📍 손상 타입 코드 (VehicleBlueprint 마커)
S
스크래치
표면 긁힘, 선 스크래치
D
찌그러짐
패널 함몰, 충격 변형
C
깨짐/갈라짐
유리 균열, 플라스틱 파손
P
도장벗겨짐
도색 벗겨짐, 기스
🚩 vehicle.hasDamage 플래그 동작
true 로 설정되는 시점

수동 손상 보고서 제출 시
(VehicleDamageTab → handleReportSubmit)

false 로 해제되는 시점

미해결 손상 건수가 0이 될 때
(마지막 손상 해결 처리 완료 시 자동 해제)

⚠️ 차량 status (available/rented/ready)와 독립적. hasDamage=true여도 차량은 운행 가능 상태 유지
📄 fleetLogs 문서 스키마 (type: "damage")
필드값 예시설명
type"damage"로그 종류 구분자
title"신규 사고/손상 수동 보고"표시 제목
dateYYYY-MM-DD기록 날짜
descriptionString자동 생성된 요약 (마커 타입+위치+설명)
blueprintData[{x,y,type,description,view}]도면 마킹 좌표 배열 (%)
resolvedfalse → true수리 완료 여부
bookingIdString | null관련 예약 ID (선택)
customerNameString | null관련 고객명 (선택)
estimatedRepairCostNumber예상 수리비 (€)
actualRepairCostNumber실제 수리비 (해결 시)
repairNotesString수리 내용 메모 (해결 시)
insuranceClaimBoolean보험 접수 여부 (해결 시)
damagePhotoUrls[]손상 사진 URL 배열 (현재 미사용)
예외 처리

가드 & 엣지 케이스

🔒
인수 중복 방지

handoverStatus === 'completed' 이면 인수 화면 재진입 차단. 단, assignedVehicleId가 null이면 재진입 허용 (차량 재배정 가능)

🔒
반납 중복 방지

returnHandoverStatus === 'completed' 이면 반납 화면 재진입 차단. 이미 완료된 예약임을 명확히 표시

🔄
차량 배정 해제

차량 배정 해제 시 status → confirmed, assignedVehicleId/handoverStatus 모두 null 초기화. 인수 플로우 재시작 가능

직접 종료 (Direct Close)

차량 미배정 예약도 스태프가 강제 완료 가능. 미수 예약이 대시보드에 영구 잔류하지 않도록 처리

🚗
차량 배정 조건

status === 'ready' 차량만 배정 가능. available 차량은 먼저 "렌트 준비 점검"을 완료해야 배정 가능

📧
이메일 백그라운드

PDF 생성 및 이메일 발송은 UI 블로킹 없이 백그라운드에서 처리. Firebase Cloud Function(europe-west1) 호출

데이터 흐름

Firestore 필드 변화

단계booking.statusbooking.handoverStatusbooking.returnHandoverStatusvehicle.status
예약 완료confirmednullnullavailable
차량 배정confirmednullnullready
인수 완료picked_upcompletednullrented
반납 완료completedcompletedcompletedavailable