Một database multi-tenant, shared schema, tenant_id + RLS. Spine giữ entity dùng chung; vertical extend, không nhân bản.
tenant_id trên mọi bảng tenant-scoped + Postgres RLS (lớp phòng thủ #2). Không schema-per-tenant / db-per-tenant (over-engineering).┌ SHARED (spine) ────────────────────────────────────────────────┐
│ Tenant, User, Role, Membership, Payment, PayoutRequest, │
│ Notification, MediaAsset, AuditLog, CmsPage, Coupon │
└────────────────────────────────────────────────────────────────┘
┌ CORE DOMAIN (Booking module #1) ───────────────────────────────┐
│ Listing, RoomType/Unit, RatePlan, Availability, PriceCalendar, │
│ Reservation, Guest, Review │
└────────────────────────────────────────────────────────────────┘
┌ VERTICAL EXTENSIONS ───────────────────────────────────────────┐
│ Affiliate, ReferralCode, Commission │
│ Restaurant, Table, MenuItem, FnbOrder, Bill │
│ Tour, Experience (extend Reservable + Reservation) │
│ HealthProvider, TreatmentPackage, PatientProfile, CarePlan │
│ (extend Place/Reservable/Customer/Reservation) │
└────────────────────────────────────────────────────────────────┘
┌ INTELLIGENCE (Travel Intelligence store, tách) ────────────────┐
│ Place, Review, ReviewAspect, KnowledgeFact, Feature, Score, │
│ EvaluationReport (provenance + temporal + feedback) │
└────────────────────────────────────────────────────────────────┘
tenant_id (FK Tenant) + RLS policy tenant_id = current_setting('app.tenant').TenantSettings.Frontend hiện dùng mock + domain models (lib/domain/models) đã phản ánh các entity lõi. Schema DB thật = Phase 2 (Prisma theo models này). Travel Intelligence đã có Prisma schema riêng (Phase 4 nối).