Customer Booking Flow (ขั้นตอนการจองและจัดการการจองของลูกค้า)
หน้านี้อธิบายขั้นตอนการทำงาน (Workflow) และกฎทางธุรกิจ (Business Rules) ของระบบจองรถยนต์ฝั่งลูกค้า (Customer Portal) โดยมุ่งเน้นเพื่อให้ QA, Developer, BA และลูกค้าเข้าใจกระบวนการทำงานจริงอย่างละเอียดและชัดเจน
1. ขั้นตอนการสร้างการจองใหม่ (New Booking Flow)
กระบวนการจองรถของลูกค้าตั้งแต่การค้นหาข้อมูลรถ การระบุผู้ขับขี่ การยอมรับข้อตกลงนโยบายความปลอดภัย ไปจนถึงการชำระเงินผ่านระบบผู้ให้บริการ (Omise Gateway)
📸 ไดอะแกรมขั้นตอนการสร้างการจองใหม่
📝 คำอธิบายขั้นตอนการจองแบบละเอียด
- Car Search & Filter: ลูกค้าระบุวัน เวลา และสถานที่รับ-คืนรถ ระบบจะเรียก API ไปยัง
ccr-catalog-serviceซึ่งทำการติดต่อตรวจสอบสถานะห้องว่างและราคาจากระบบCarPro API - Snapshot Creation: เมื่อกดยืนยันการจอง ระบบ
ccr-booking-serviceจะสร้าง Snapshot เก็บข้อมูลรถ สาขา และราคาพิเศษของ Add-on ณ วินาทีนั้นลงในตารางBookingInfoCarsและBookingInfoAddonsเสมอ เพื่อแก้ปัญหาราคาหรือข้อมูลหลักถูกแก้ไขหลังจากทำการจองเสร็จสิ้น - Payment Expiration: รายการจองที่สร้างขึ้นมาจะอยู่ในสถานะ
PendingPaymentโดยมีเวลาจำกัดในการชำระเงิน (เช่น 15-30 นาที) หากผู้ใช้ชำระไม่ทันเวลา ระบบจะยกเลิกการ Hold รถยนต์ และเปลี่ยนสถานะการจองเป็นExpired
2. ขั้นตอนการยกเลิกการจอง (Cancellation Flow)
กรณีที่ลูกค้าต้องการยกเลิกการจองผ่านเมนู My Booking ของตนเอง ระบบจะทำการคิดค่าธรรมเนียมตามนโยบาย (Cancellation Policy) และเตรียมทำเรื่องคืนเงิน (Refund)
📸 ไดอะแกรมขั้นตอนการยกเลิกการจอง
📝 กฎเกณฑ์การยกเลิก (Cancellation Rules)
- การคำนวณเงินคืน:
- ยกเลิกก่อนเวลารับรถมากกว่า X วัน/ชั่วโมง (ตามเงื่อนไข Booking Policy): คืนเงินเต็มจำนวน 100%
- ยกเลิกก่อนเวลารับรถกระชั้นชิด: คิดค่าธรรมเนียมยกเลิกตามอัตราที่กำหนด (เช่น หักค่าเช่า 1 วัน)
- ยกเลิกช้ากว่ากำหนดหรือไม่ไปรับรถ (No Show): ไม่คืนเงินทุกกรณี
- การคืนเงิน (Refund Creation): หากมีเงินคืนหลังจากหักค่าธรรมเนียม ระบบจะสร้างข้อมูลลงในตาราง
Refundsในสถานะเริ่มต้นเป็นPendingSaleCheckและส่งตั๋วไปให้ทีมงานหลังบ้านจัดการต่อ
3. ขั้นตอนการแก้ไขการจอง (Booking Modification Flow)
เมื่อลูกค้าต้องการปรับปรุงรายการจอง เช่น การขอ เปลี่ยนประเภทรถ (Change Car) หรือ เปลี่ยนสถานที่/วันเวลาเดินทาง (Change Location/Dates) ผ่านเมนู My Booking
📸 ไดอะแกรมขั้นตอนการแก้ไขการจอง
4. ตาราง Checklist สำหรับ QA ในการทดสอบ (QA Test Scenarios)
รายการสถานการณ์ที่ครอบคลุมสำหรับให้ QA นำไปทดสอบพฤติกรรมของระบบ:
| หมวดหมู่การทดสอบ | สถานการณ์จำลอง (Scenario) | ผลลัพธ์ที่ถูกต้องของระบบ (Expected Behavior) |
|---|---|---|
| New Booking | ค้นหารถในเวลาเดียวกันสองเครื่องพร้อมกันแล้วเหลือรถคันสุดท้าย | ระบบที่กดยืนยันชำระเงินก่อนต้องได้การจองสำเร็จ อีกเครื่องต้องแจ้งเตือน "Car not available" |
| New Booking | ไม่ชำระเงินภายในเวลาที่กำหนด (เช่น ปล่อยหน้า QR ไว้จนหมดเวลา) | สถานะการจองเปลี่ยนเป็น Expired, ระบบส่งยกเลิก Hold รถไปที่ CarPro และลบ Session |
| Cancellation | ยกเลิกการจองก่อนเวลากำหนด 72 ชั่วโมง (Free Cancellation) | ยอดคืนเงินต้องเต็ม 100%, แสดงหน้าจอแจ้งสิทธิ์และสถานะการคืนเงินเป็น PendingSaleCheck |
| Cancellation | ยกเลิกการจองแบบกระชั้นชิดในเวลาไม่ถึง 24 ชั่วโมง | คำนวณค่าธรรมเนียมหักเงิน 1 วันทำงานตามนโยบาย ยอดคืนเงินต้องแสดงยอดคงเหลือที่หักแล้ว |
| Modification | อัปเกรดรุ่นรถจาก Eco Car เป็น SUV (ราคาเพิ่มขึ้น) | ลูกค้าต้องชำระเงินเพิ่มเฉพาะส่วนต่าง (Price Difference), รถเดิมถูกยกเลิก, รถใหม่เปลี่ยนสถานะยืนยันตัวตนสำเร็จ |
| Modification | ลดสเปกรถหรือลดวันเช่ารถลง (ราคาถูกลง) | การจองยืนยันทันที, ระบบสร้างรายการคืนเงิน (Refund) ส่วนต่าง, ขอข้อมูลอัปโหลดหน้าสมุดบัญชีของผู้ใช้ |
| User Info Valid | บันทึกการจองโดยกรอกเลขใบขับขี่ที่หมดอายุแล้ว | ระบบฝั่ง Frontend และ Backend ต้องบล็อกคำขอและแจ้งข้อผิดพลาด "Driver license expired" |
5. การแจ้งเตือนและ Edge Cases สำคัญ
- Car-Not-Available: กรณีที่กดเลือกจองรถแล้ว แต่ในจังหวะนั้นมีการตรวจสอบเรียลไทม์กับ CarPro แล้วไม่พบรถว่าง ระบบจะต้องไม่อนุญาตให้ลูกค้าไปหน้าชำระเงิน และมี Modal แสดงข้อความเตือนให้เลือกใหม่อีกครั้ง
- Payment Timeout (Omise Callback): หากลูกค้าเปิดหน้าต่างชำระเงินค้างไว้และไม่ทำการจ่าย จนกระทั่งหมดเวลาโฮลด์รถ หลังบ้านจะทำการเปลี่ยนสถานะใน DB เป็น
Cancelledอัตโนมัติ ป้องกันกรณีที่ Webhook ชำระเงินเพิ่งได้รับหลังจากระบบปล่อยรถคันนั้นไปให้ผู้อื่นแล้ว