Yêu cầu chức năng (Functional)
Ký hiệu REQ-F-*·(Pn). "PHẢI/NÊN/CÓ THỂ" theo RFC-style.
FA. Xác thực & phiên
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-AUTH-01 | P0 | Hệ thống PHẢI cho phép Builder đăng nhập và tạo phiên (/login, /auth/callback, /logout). |
| REQ-F-AUTH-02 | P0 | UI PHẢI gọi dữ liệu qua /api cùng origin để cookie phiên member được gửi kèm an toàn. |
| REQ-F-AUTH-03 | P0 | /api/user/me PHẢI trả về hồ sơ gồm entitlement_group, trial_expires_at, trial_days_left. |
| REQ-F-AUTH-04 | P1 | Khách chưa đăng nhập truy cập route cần quyền PHẢI được đưa về đăng nhập hoặc trang công khai. |
FB. Membership & Trial
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-MEM-01 | P0 | Hệ thống PHẢI phân loại mỗi user vào đúng một nhóm: paid, trial, free, tính tại thời điểm request. |
| REQ-F-MEM-02 | P0 | Ở request xác thực đầu tiên khi chưa trả phí và trial_started_at IS NULL, hệ thống PHẢI đặt trial_started_at = now, trial_expires_at = now + 7 ngày (lazy-init trong /api/user/me). |
| REQ-F-MEM-03 | P0 | Trong thời gian trial, Builder PHẢI có full access ngang thành viên trả phí. |
| REQ-F-MEM-04 | P0 | Khi trial hết hạn, hệ thống PHẢI hạ user về free hạn chế, không khóa tài khoản, và mời nâng cấp. |
| REQ-F-MEM-05 | P1 | Hệ thống PHẢI KHÔNG cấp lại trial sau khi đã bắt đầu và hết hạn. |
| REQ-F-MEM-06 | P0 | Kích hoạt trả phí PHẢI được tự động duyệt bằng đối soát chuyển khoản ngân hàng + số điện thoại trong nội dung khớp users.mobile và đạt ngưỡng tiền, qua Cloudflare Workflow. |
| REQ-F-MEM-07 | P1 | OCR biên lai CÓ THỂ dùng làm bằng chứng phụ, nhưng PHẢI KHÔNG là nguồn sự thật cho việc kích hoạt. |
| REQ-F-MEM-08 | P1 | Trang /membership PHẢI hiển thị trạng thái quyền lợi và đường nâng cấp. |
FC. Học tập & lộ trình
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-LRN-01 | P0 | Hệ thống PHẢI liệt kê khóa học (/courses) và khóa của Builder (/my-courses). |
| REQ-F-LRN-02 | P0 | Trang khóa (/courses/:slug) PHẢI trình bày Clarity Question, Big Concepts, các Unit và Artifact cần tạo. |
| REQ-F-LRN-03 | P0 | Cấu trúc khóa PHẢI theo Course → Unit → Learning Experience → Activity; PHẢI KHÔNG dùng Module hay lồng sâu. |
| REQ-F-LRN-04 | P0 | Mỗi Concept PHẢI thuộc đúng một Course (course-owned); PHẢI KHÔNG chia sẻ concept giữa các khóa. |
| REQ-F-LRN-05 | P1 | Một Unit PHẢI được đánh dấu hoàn thành dựa trên Artifact thật, không dựa trên "đã xem hết nội dung". |
| REQ-F-LRN-06 | P1 | /my-journey PHẢI hiển thị vị trí hiện tại của Builder trong hành trình và gợi ý bước tiếp theo. |
| REQ-F-LRN-07 | P2 | /concepts/:id NÊN hiển thị định nghĩa + mô tả của concept trong ngữ cảnh khóa. |
| REQ-F-LRN-08 | P2 | Thư viện đọc sâu (/deep-books, /library, /library/studio, /handbook) NÊN truy cập được theo quyền. |
FD. Thực hành & xây dựng
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-PRA-01 | P0 | Hệ thống PHẢI cho Builder tham gia Challenges (/challenges, /challenges/:slug) và nộp deliverable. |
| REQ-F-PRA-02 | P1 | Hệ thống NÊN hỗ trợ Battles, Workshops, Programs, Classes như hoạt động có cấu trúc theo lịch. |
| REQ-F-PRA-03 | P1 | /portfolio PHẢI tổng hợp deliverables & Proof of Work của Builder. |
| REQ-F-PRA-04 | P2 | Các tính năng thương hiệu (/my-brands, /business-brands, /brand-model, /personal-brands) NÊN cho Builder tổ chức tài sản thương hiệu. |
FE. Cộng đồng & sự kiện
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-COM-01 | P1 | Hệ thống PHẢI hiển thị và cho đăng ký sự kiện (/events, /online-events/:slug, /calendars). |
| REQ-F-COM-02 | P2 | /feedback NÊN cho Builder gửi và nhận phản hồi. |
| REQ-F-COM-03 | P2 | /affiliate NÊN cung cấp chương trình giới thiệu với theo dõi quyền lợi. |
| REQ-F-COM-04 | P2 | /insiders CÓ THỂ giới hạn nội dung theo nhóm quyền. |
FF. Tiến bộ & thành tựu
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-F-PRG-01 | P1 | /score và /badges PHẢI phản ánh hoạt động/tiến bộ của Builder. |
| REQ-F-PRG-02 | P2 | /member-intelligence NÊN tổng hợp dữ liệu Builder và gợi ý bước tiếp theo. |
| REQ-F-PRG-03 | P2 | /profile, /portrait NÊN cho Builder quản lý danh tính trong cộng đồng. |
Ràng buộc phân quyền (áp cho mọi module)
- Route cần quyền PHẢI kiểm tra
entitlement_groupphía backend, không chỉ ẩn ở UI. free(trial hết hạn) PHẢI vẫn giữ quyền đọc/cơ bản và luôn có lối nâng cấp.