Subscription — Tổng quan
Subscription là phần lo việc đăng ký dài hạn và thanh toán định kỳ: khách hàng ghi danh vào một "gói" (subscription), hệ thống tạo lịch thanh toán theo kỳ, sinh hóa đơn, và quản lý booking suất học, add-on, giảm giá theo từng kỳ.
Hình dung nhanh
Nghĩ về một trung tâm dạy học bán "gói học theo học kỳ":
- Admin tạo một Subscription (gói): tên, giá, lịch học, điều kiện booking.
- Khách hàng / admin ghi danh một học viên → tạo một Enrollment.
- Hệ thống dựng BillingSchedule (lịch thanh toán: các kỳ, mỗi kỳ một số tiền).
- Theo lịch, mỗi kỳ sinh một Invoice (hóa đơn); admin có thể schedule / approve / skip.
- Trong quá trình đó: thêm add-on, áp discount theo từng kỳ; có thể skip một kỳ.
Hai loại Subscription
| Loại | Subscription.TypeId | Ý nghĩa |
|---|---|---|
| BookingAndBilling (mặc định) | null/0 | Vừa đặt suất học vừa thu tiền; cần cấu hình SubscriptionProduct (Program). |
| BillingOnly | 1 | Chỉ thu tiền định kỳ; bỏ qua validation booking product, ẩn Program section. |
Các "vật thể" chính
| Tên | Một câu |
|---|---|
| Subscription | Gói/template: giá, lịch, điều kiện booking. |
| Enrollment | Một ghi danh (runtime), có vòng trạng thái Submitted→Approved→Confirmed. |
| BillingSchedule | Lịch thanh toán theo kỳ; nguồn canonical cho lựa chọn period khi booking. |
| Invoice | Hóa đơn từng kỳ, có vòng trạng thái tài chính. |
| Add-on / Discount | Dịch vụ thêm / giảm giá áp theo từng kỳ đã book. |
| Term | Kỳ học; subscription được link tới term. |
Bạn nên đọc theo thứ tự
- Góc nhìn end-user — admin và khách hàng thao tác gì.
- Khái niệm cốt lõi — Subscription vs Enrollment, billing, booking.
- Kiến trúc & dữ liệu — các bảng và quan hệ.
- Luồng xử lý trong code — API, service, validation.
- Dữ liệu & bảng đọc/ghi — Term là gì, bảng đọc/ghi trong từng luồng.
- Case thường gặp — skip, add-on, double-booking…