PRD: Báo cáo doanh thu theo khoảng thời gian
| Module | Báo cáo | PRD ID | PRD-SLS-002 |
| Trạng thái | Sẵn sàng dev | FEAT | SLS |
| Epic | — | Plane | BANA-1516 |
| Ngày | 2026-06-05 | Phiên bản | v0.1 |
| Gói | @nx/sale | URD | SLS |
| Surface | Client · Chủ/QLBO · Vận hành | ||
| Phụ trách | Phát Nguyễn | ||
TL;DR
Nhóm doanh thu theo Ngày, Tháng hoặc Năm trên bất kỳ khoảng thời gian nào, kèm biểu đồ xu hướng và bảng số liệu chi tiết - để chủ merchant đọc được bức tranh dài hạn, không chỉ một danh sách hằng ngày phẳng.
1. Bối cảnh & Vấn đề
Chủ merchant và quản lý cần đọc doanh thu theo các giai đoạn dài hơn - tháng, quý, năm - chứ không chỉ danh sách hằng ngày của PRD-SLS-001. Bức tranh dài hạn đó mới là cái dẫn dắt việc đánh giá hiệu suất và lập kế hoạch kinh doanh.
Hiện hệ thống chỉ nhóm doanh thu theo từng ngày. Với khoảng thời gian dài - 6 tháng, một năm, nhiều năm - số dòng phình ra khiến bảng khó theo dõi và biểu đồ dày đặc tới mức không còn nhận ra xu hướng.
Lời giải: cho người dùng nhóm theo Ngày, Tháng hoặc Năm, để cùng một dữ liệu đọc được gọn gàng ở cả góc chi tiết lẫn góc tổng quan.
2. Mục tiêu & Không phải mục tiêu
Mục tiêu
- Khoảng thời gian linh hoạt: chọn nhanh các khoảng thông dụng (Hôm nay, Hôm qua, Tuần này, Tháng này, Tháng trước, Quý này, Năm nay, Năm trước) hoặc khoảng ngày tùy chỉnh.
- Chọn kiểu nhóm: chuyển đổi giữa Ngày, Tháng và Năm.
- Biểu đồ trực quan: biểu đồ cột hoặc đường thể hiện xu hướng doanh thu thuần và số lượng đơn theo kiểu nhóm đã chọn.
- Bảng số liệu chi tiết: mỗi dòng một chu kỳ (nhóm theo Tháng → mỗi dòng một tháng) gồm doanh thu gộp, giảm giá/chiết khấu, thuế, doanh thu thuần, số lượng đơn, kèm dòng tổng cộng cố định cuối bảng.
- Phạm vi & độ chính xác: chỉ đơn đã hoàn tất, giới hạn trong merchant của chính người dùng, ranh giới ngày theo múi giờ địa phương của merchant.
Không phải mục tiêu
- Phân tích chi tiết chi phí và biên lợi nhuận (thuộc về phân tích nâng cao
ADV). - Xuất file báo cáo sang định dạng Excel/PDF (thuộc về phân tích nâng cao
ADV).
3. Chỉ số thành công
| Chỉ số | Mục tiêu / Tín hiệu |
|---|---|
| Độ chính xác dữ liệu | 100% số liệu doanh thu khi nhóm theo Tháng hay Năm khớp hoàn toàn với tổng cộng cộng dồn của báo cáo ngày trong cùng khoảng thời gian |
| Thời gian phản hồi | Báo cáo tải nhanh đối với khoảng thời gian lên tới 2 năm dữ liệu đơn hàng |
| Trải nghiệm UI | Biểu đồ tự điều chỉnh giãn cách và định dạng nhãn trục X tương ứng với kiểu nhóm được chọn để không bị chồng lấn chữ |
4. Đối tượng sử dụng & Kịch bản
| Đối tượng | Mục tiêu trong tính năng này |
|---|---|
| Chủ merchant (Owner) | Xem doanh thu năm hiện tại nhóm theo Tháng để phân tích mùa cao điểm/thấp điểm và so sánh hiệu suất giữa các tháng |
| Quản lý (Manager) | Xem doanh thu của quý hiện tại nhóm theo Ngày/Tháng để đối chiếu số liệu và làm báo cáo định kỳ |
Kịch bản cốt lõi: Người dùng truy cập Dashboard Báo cáo -> Chọn khoảng thời gian lọc (ví dụ: 12 tháng qua) -> Click nút chọn nhóm theo Tháng -> Hệ thống tổng hợp dữ liệu -> Giao diện tải biểu đồ biểu diễn doanh số của 12 tháng và bảng dữ liệu chi tiết hiển thị 12 dòng tương ứng kèm dòng tổng cộng ở cuối.
5. Câu chuyện người dùng
- Là chủ merchant, tôi muốn xem tổng hợp doanh thu theo từng tháng trong năm, để tôi nắm bắt được mùa cao điểm và thấp điểm của doanh nghiệp.
- Là quản lý, tôi muốn tùy chọn nhóm báo cáo theo ngày, tháng hoặc năm tùy theo khoảng thời gian tôi đang xem, để giao diện không bị tràn ngập dữ liệu chi tiết không cần thiết.
- Là nhà phát triển, tôi muốn hệ thống tính toán sẵn các tổng đã gộp trước khi trả về thay vì truyền từng đơn hàng riêng lẻ, để giảm tải băng thông mạng và tối ưu tốc độ tải trang.
6. Yêu cầu chức năng
| # | Yêu cầu | Tham chiếu URD |
|---|---|---|
| FR-1 | Bộ lọc khoảng thời gian trên UI hỗ trợ các khoảng chọn nhanh (Quick Presets) và khoảng tùy chỉnh (Custom Range) | URD-ACC-002 |
| FR-2 | Người dùng có thể tùy chọn kiểu gom nhóm dữ liệu (Ngày, Tháng, Năm) trên UI | URD-SLS-006 |
| FR-3 | Báo cáo nhận đầu vào gồm ngày bắt đầu, ngày kết thúc và lựa chọn kiểu gom nhóm (Ngày, Tháng hoặc Năm) | URD-SLS-006 |
| FR-4 | Báo cáo trả về tổng gộp toàn bộ khoảng thời gian lọc cùng phần chi tiết theo từng chu kỳ con tương ứng với kiểu gom nhóm đã chọn | URD-SLS-006 |
| FR-5 | Dữ liệu chỉ bao gồm đơn hàng hoàn tất thuộc về chính merchant của người dùng | URD-ACC-001, URD-ACC-003 |
| FR-6 | Giao diện cập nhật biểu đồ cột/đường và bảng thống kê chi tiết theo chu kỳ được chọn | URD-SLS-006 |
| FR-7 | Dữ liệu trống hiển thị tổng bằng 0 thay vì trả về lỗi | URD-ACC-004 |
Quy tắc nghiệp vụ
- BR-01: Doanh thu được ghi nhận theo thời điểm hoàn tất đơn hàng.
- BR-02: Chỉ tính các đơn hàng có trạng thái hoàn tất.
- BR-03: Các chu kỳ không có dữ liệu vẫn phải hiển thị với giá trị 0.
- BR-04: Dữ liệu được sắp xếp tăng dần theo thời gian.
7. Yêu cầu phi chức năng
| Phân vùng | Yêu cầu |
|---|---|
| Đa chủ thể & Bảo mật (Tenancy & Security) | Giới hạn mọi báo cáo nghiêm ngặt trong phạm vi merchant của chính người dùng; không bao giờ để rò rỉ dữ liệu của merchant khác |
| Hiệu năng (Performance) | Báo cáo vẫn phải phản hồi nhanh kể cả khi dữ liệu đơn hàng lịch sử rất lớn, tránh quét toàn bộ dữ liệu |
| Đa ngôn ngữ (i18n) | Nhãn hiển thị chu kỳ thời gian tự động dịch theo ngôn ngữ/locale hoạt động của người dùng (ví dụ: "Tháng 01/2026" vs "January 2026") |
| Múi giờ (Timezone) | Phân tách ranh giới ngày và chu kỳ thống nhất theo múi giờ địa phương của merchant để tổng hợp chính xác |
8. Trực quan giao diện & Luồng xử lý
9. Mô hình dữ liệu & Miền nghiệp vụ
| Thành phần | Vai trò |
|---|---|
| Đơn hàng bán | Bản ghi đơn hàng được dùng để gộp dữ liệu doanh thu (doanh thu gộp, giảm giá, thuế, doanh thu thuần, số lượng đơn hàng) dựa theo thời điểm hoàn tất của từng đơn |
10. Phụ thuộc & Giả định
Phụ thuộc
- Đơn hàng (CORE-07) - Đơn hàng hoàn tất là nguồn dữ liệu duy nhất cho báo cáo doanh thu.
- Identity & Authz (CORE-02) - Xác định merchant của chính người dùng từ ngữ cảnh yêu cầu.
Giả định
- Mặc định toàn bộ hệ thống sử dụng múi giờ địa phương của merchant để nhóm chu kỳ.
11. Rủi ro & Câu hỏi mở
| Rủi ro / Câu hỏi mở | Giải pháp / Trạng thái |
|---|---|
| Báo cáo tải chậm khi dữ liệu đơn hàng lịch sử rất lớn | Đảm bảo lớp dữ liệu được tối ưu để các khoảng lớn vẫn trả về nhanh, không quét toàn bộ |
| Trùng lặp/chồng chéo nhãn trên biểu đồ | Giao diện tự động tính toán thưa khoảng cách nhãn hiển thị trên trục X tùy theo độ dài tập kết quả |
12. Kế hoạch phát hành & Tiêu chuẩn nghiệm thu
| Khía cạnh | Kế hoạch |
|---|---|
| Giai đoạn (Phase) | SLS P2 increment - báo cáo doanh thu chu kỳ |
| Phạm vi triển khai (Rollout) | Tất cả merchant |
| Chuyển đổi dữ liệu (Migration) | Không yêu cầu chuyển đổi dữ liệu (chỉ tổng hợp đọc trên dữ liệu hiện có) |
| Tiêu chí nghiệm thu (Launch criteria) | Tất cả kiểu gom nhóm (Ngày/Tháng/Năm) trả về tổng đúng; biểu đồ và bảng cập nhật mượt mà |
13. Câu hỏi thường gặp
Báo cáo này có tính đơn hàng nháp hoặc đơn hủy không? Không, chỉ các đơn hàng có trạng thái hoàn tất mới được tính vào báo cáo doanh thu.
Nếu không có đơn hàng nào trong khoảng thời gian chọn thì sao? Hệ thống sẽ hiển thị các chỉ số tổng bằng 0 và vẽ biểu đồ trống, không báo lỗi.
Tài liệu tham khảo
- URD: Báo cáo - Báo cáo doanh số · Truy cập & Phạm vi
- Module: Báo cáo - URD
- Developer: Tài liệu kỹ thuật Sale