Subscription — Tổng quan
Subscription phụ trách đăng ký dài hạn + thanh toán định kỳ: ghi danh vào một "gói", hệ thống tạo lịch thanh toán theo kỳ, sinh hóa đơn, quản lý booking suất học, Enrichment, add-on và 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 / 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; admin schedule / approve / skip.
- Trong quá trình đó: thêm add-on, áp discount theo từng kỳ; có thể skip một kỳ.
- Mỗi bước vòng đời booking (submitted/confirmed/cancelled) gửi thông báo cho khách & staff; admin theo dõi tiến độ sinh hóa đơn ở Subscription Billing Manager.
- Nếu gói có Enrichment, chọn ngày ở Step 2; phí Enrichment thuộc Booking, không cộng vào Subscription Billing định 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. |
| Enrichment | Lựa chọn dịch vụ theo ngày trong tuần; phí được tạo thành Booking line theo occurrence. |
| Term | Kỳ học; subscription được link tới term. |
| Flyer | Manifest ảnh/PDF page của gói, hiển thị read-only ở bước booking. |
| Invoice split rule | Cách nhóm invoice subscription theo Account, Attendee hoặc Subscription. |
| Extend / Rollover | Mở rộng kỳ trong cùng term / chuyển enrollment sang term kế tiếp. |
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…
Implementation hiện tại
- Subscription Setup có Flyer,
Billing Generation(Manual/Auto) vàSplit Invoice Based On. - Gói đã publish khóa price, billing settings, linked term, billing schedule và add-on ở cả UI/API; muốn sửa phải unpublish trước. Discount và nội dung marketing vẫn editable.
- Subscription Manager hỗ trợ
SBKexact search, badge pending theo term,Extend,DuplicatevàRollover; thao tác admin đi quaapi/SubscriptionManagervà scope theo Business Unit. - Enrichment chỉ được link khi Product active/approved, có
TermProducthợp lệ, rate và accounting item; phí phát sinh ởTermBookingLine, không đi quaEnrollmentExtrahay Subscription Billing.
Ví dụ thực tế: Admin muốn đổi price của gói đã publish. → API reject cả request; unpublish trước, sửa field bị lock rồi publish lại.