Abstraction dùng chung cho mọi vertical. Nguyên tắc: Reservable Resource + Reservation, không khoá vào "Hotel/Room". Vertical extend, không thay.
| Entity | Ý nghĩa | Vertical extend |
|---|---|---|
| Listing | Tài nguyên có thể đặt (lưu trú/villa/homestay/resort/camping...) | Tour, Experience, TreatmentPackage |
| Inventory / Unit | Đơn vị + tồn kho (loại phòng, slot) | Bàn (F&B), ghế tour, slot lịch điều trị |
| Reservation | Đơn đặt (booking) | FnbOrder, Appointment/CarePlan |
| Guest / Customer | Người đặt | PatientProfile |
| Review | Đánh giá | MedicalReview (Travel Intelligence chấm trust) |
| Payment | Thanh toán (polymorphic target) | Dùng chung mọi vertical |
"Booking Engine không nên biết Hotel. Booking Engine chỉ biết Reservable Resource." — nguyên tắc gốc, giữ bất biến.
Tenant · TenantSettings · User · Role · Membership · Payment · PayoutRequest · Notification · MediaAsset · CmsPage · Coupon · AuditLog.
Reservable (lõi)
├─ Listing (lưu trú) ← Booking module
├─ TourProduct ← Tour vertical
├─ ExperienceProduct ← Experience vertical
└─ TreatmentPackage ← Medical Tourism vertical
Reservation (lõi)
├─ StayReservation ← Booking
├─ TourReservation ← Tour
├─ FnbOrder ← F&B
└─ Appointment / CarePlan ← Medical Tourism
Customer (lõi)
└─ PatientProfile (PHI) ← Medical Tourism
src/lib/domain/models đã có Listing/Inventory/Reservation/Review/Guest + spine (Tenant/User/Payment...) ở mức frontend. Đây là nền để Phase 2 sinh Prisma schema và các vertical extend.