PRD: Báo cáo ca (X/Z)
| Module | Báo cáo | PRD ID | PRD-SHF-001 |
| Trạng thái | Sẵn sàng dev | FEAT | SHF · BANA-1440 |
| Epic | — | Plane | BANA-1556 |
| Ngày | 2026-04-22 | Phiên bản | v0.1 |
| Gói | @nx/sale | URD | SHF |
| Surface | Sale · POSClient · Chủ/QL | ||
| Phụ trách | Phát Nguyễn | ||
TL;DR
Đối soát ngăn kéo tiền mặt ngay tại quầy: báo cáo X cho snapshot giữa ca lặp lại được, báo cáo Z cho con số đóng ca cuối cùng đã khóa. Mỗi báo cáo gộp phần đối soát tiền mặt (quỹ đầu ca, doanh thu tiền mặt, thu/chi tiền mặt, dự kiến so với thực tế, chênh lệch) với tổng hợp doanh số - để mỗi ca đóng trên một con số kiểm chứng được, không phải phỏng đoán.
1. Context & Problem
Thu ngân POS làm việc theo ca: ca được mở, một hoặc nhiều thu ngân cùng vận hành, rồi đóng lại. Hiện một ca theo dõi biến động tiền mặt nhưng không tạo ra báo cáo nào - nên không thể xem tổng của ca hay đối soát ngăn kéo ngay tại quầy. Thu ngân không thấy tiền mặt dự kiến so với thực tế, không kéo được bản tóm tắt giữa ca, không có snapshot đã khóa để bàn giao khi đóng ca. Bàn giao ca phải đếm tay, còn chủ merchant không có bản ghi kiểm toán được về số tiền mỗi ca thu vào - điểm nghẽn cho vận hành minh bạch tiền mặt ở quy mô HKD/SME mà BANA hướng tới.
Phần tăng trưởng này giao hai báo cáo thu ngân cần cho một ca - báo cáo X tạm thời và báo cáo Z đóng ca - hậu thuẫn bởi một snapshot đóng ca đã khóa, dựng trên vòng đời ca và cơ chế theo dõi biến động tiền mặt sẵn có.
2. Goals & Non-Goals
Goals
- Một báo cáo X (tạm thời): snapshot trong ca trực tiếp lấy từ ca đang mở, lặp lại được bao nhiêu lần tùy ý.
- Một báo cáo Z (đóng ca): báo cáo đóng ca cuối cùng, đọc một lần duy nhất cho mỗi ca và được hậu thuẫn bởi một snapshot đóng ca đã khóa.
- Đối soát tiền mặt: quỹ đầu ca, doanh thu tiền mặt, thu/chi tiền mặt, tiền mặt dự kiến so với thực tế đã đếm, và chênh lệch, kèm một lần kiểm lại tiền mặt đã đếm được chốt khi đóng ca.
- Một bản tổng hợp doanh số trên báo cáo: tổng, chiết khấu, thuế, thực thu, và số lượng đơn.
- Phân tách theo merchant + sale channel và liệt kê ca có phân trang.
Non-Goals
- Báo cáo doanh số ngày / sản phẩm / danh mục - thuộc về feature
SLS(URD-SLS). - Lãi lỗ, định giá kho, phân tích khách hàng, xuất file, và báo cáo theo lịch -
ADV, Planned (URD-ADV). - Phân rã theo phương thức thanh toán và theo danh mục trên báo cáo ca (mức Should URD-SHF-005..006).
- Bước xác thực PIN khi truy cập báo cáo.
3. Success Metrics
| Metric | Mục tiêu / tín hiệu |
|---|---|
| Mức phủ đối soát | 100% ca đã đóng tạo ra đúng một báo cáo Z |
| Độ chính xác tiền mặt | Chênh lệch = tiền mặt đã đếm − (quỹ đầu ca + doanh thu tiền mặt − chi tiền mặt); hiển thị ở mỗi lần đóng ca |
| Tính dùng được giữa ca | Báo cáo X lặp lại được giữa ca và không làm thay đổi ca |
| Tính đúng của phân tách | Không trả về con số xuyên merchant trên bất kỳ báo cáo nào |
4. Personas & Use Cases
| Persona | Mục tiêu trong feature này |
|---|---|
| Thu ngân | Kéo báo cáo X giữa ca; đóng ca để tạo báo cáo Z với phần đối soát tiền mặt đã đếm |
| Quản lý | Xem lại báo cáo Z của bất kỳ ca nào thuộc merchant của mình |
| Chủ merchant | Xem đối soát ca trên các merchant của mình |
Kịch bản chính: mở một ca → các thu ngân khác có thể tham gia khi ca đang chạy → kéo báo cáo X giữa ca (lặp lại được) → khi đóng ca, đếm tiền mặt thực tế → hệ thống tính dự kiến so với thực tế và khóa một snapshot báo cáo Z, một báo cáo cho mỗi ca.
5. User Stories
- Là một thu ngân, tôi muốn kéo báo cáo X từ ca đang mở của mình, để kiểm tra tổng tiền mặt và doanh số tạm thời mà không phải đóng ca.
- Là một thu ngân, tôi muốn báo cáo X lặp lại được, để kiểm tra lại tổng số khi ca diễn ra.
- Là một thu ngân, tôi muốn đóng ca với số đếm tiền mặt kiểm lại, để báo cáo Z hiển thị dự kiến so với thực tế và chênh lệch.
- Là một quản lý, tôi muốn đúng một báo cáo Z đã khóa cho mỗi ca, để con số đóng ca không bị trôi.
- Là một chủ merchant, tôi muốn báo cáo ca được phân tách theo merchant của mình, để không lẫn con số của merchant khác.
6. Functional Requirements
| # | Yêu cầu | URD ref |
|---|---|---|
| FR-1 | Báo cáo X (tạm thời): yêu cầu một snapshot trực tiếp của ca đang mở; lặp lại được, không làm thay đổi ca | URD-SHF-001 |
| FR-2 | Báo cáo Z (đóng ca): báo cáo đóng ca tổng hợp, đọc một lần duy nhất cho mỗi ca, được hậu thuẫn bởi một snapshot đóng ca đã khóa | URD-SHF-002 |
| FR-3 | Đối soát tiền mặt: quỹ đầu ca, doanh thu tiền mặt, thu/chi tiền mặt, tiền mặt dự kiến so với thực tế đã đếm, chênh lệch, cộng một lần kiểm lại tiền mặt đã đếm được chốt khi đóng ca | URD-SHF-003 |
| FR-4 | Bản tổng hợp doanh số trên báo cáo: tổng, chiết khấu, thuế, thực thu, số lượng đơn | URD-SHF-004 |
| FR-5 | Báo cáo phân tách theo merchant và sale channel; liệt kê ca có phân trang và bộ lọc | URD-SHF-001..002 |
| FR-6 | Chỉ người dùng được phân quyền (quyền đọc trên báo cáo ca) mới mở được hai báo cáo | URD-SHF-001..002 |
Toàn văn yêu cầu và tiêu chí nghiệm thu nằm trong URD Báo cáo. PRD này tham chiếu tới chúng thay vì lặp lại. Phân rã theo phương thức thanh toán và theo danh mục (URD-SHF-005..006, Should) nằm ngoài phần tăng trưởng này -
SHFvẫn ở trạng thái In-progress.
7. Non-Functional Requirements
| Mảng | Yêu cầu |
|---|---|
| Toàn vẹn dữ liệu | Báo cáo Z là một snapshot kết thúc, một cho mỗi ca; một khi đã khóa khi đóng ca thì không đổi |
| Chỉ đọc | Báo cáo tổng hợp trên các biến động tiền mặt và đơn đã hoàn tất; báo cáo X không bao giờ làm thay đổi ca |
| Tenancy & authz | Mọi thao tác giới hạn trong merchant của chính người dùng và sale channel; hai báo cáo chỉ mở được bởi người dùng có quyền đọc trên báo cáo ca |
| Độ chính xác | Tiền mặt và số tiền được theo dõi với độ chính xác 4 chữ số thập phân |
| Hiệu năng / quy mô | Liệt kê ca có phân trang; tổng hợp báo cáo chạy trên các biến động của một ca duy nhất |
| i18n | Nhãn/trạng thái hướng người dùng song ngữ (Anh / Việt) |
8. UX & Flows
Màn hình chính: màn hình ca, hành động báo cáo X, kiểm lại tiền mặt khi đóng ca, và màn hình báo cáo Z.
9. Data & Domain
| Khái niệm | Vai trò |
|---|---|
| Ca | Một phiên làm việc do thu ngân mở và đóng, có thể được một hoặc nhiều thu ngân tham gia khi ca đang chạy - vòng đời (mở/đóng), theo dõi biến động tiền mặt, kiểm lại tiền mặt đã đếm khi đóng ca |
| Snapshot đóng ca đã khóa | Con số đóng ca (Z) cuối cùng được chốt khi đóng ca - đối soát tiền mặt + tổng hợp doanh số, một cho mỗi ca |
| Các biến động tiền mặt | Thu/chi tiền mặt và doanh thu tiền mặt được báo cáo tổng hợp lại để cấp dữ liệu cho phần đối soát |
Chỉ mang tính khái niệm - chi tiết đầy đủ và bất biến nằm trong domain model của ca.
10. Dependencies & Assumptions
Phụ thuộc vào
- Vòng đời ca & theo dõi biến động tiền mặt - báo cáo X/Z tổng hợp một ca đang mở hoặc vừa đóng.
- Đơn đã hoàn tất (Đơn hàng) - bản tổng hợp doanh số tổng hợp các đơn đã hoàn tất trong ca.
- Biến động tiền mặt / thanh toán - thu/chi tiền mặt và doanh thu tiền mặt cấp dữ liệu cho phần đối soát.
- Nơi lưu dữ liệu ca - chứa ca và snapshot đóng ca đã khóa của nó.
Giả định
- Thu ngân mở một ca với quỹ đầu ca trước khi giao dịch.
- Mỗi ca đóng đúng một lần, tạo ra đúng một báo cáo Z.
11. Risks & Open Questions
| Rủi ro / câu hỏi | Giảm thiểu / trạng thái |
|---|---|
| Đối soát tiền mặt lệch với sổ cái finance | Báo cáo tổng hợp các biến động tiền mặt trực tiếp và sở hữu góc nhìn đối soát của ca, nên báo cáo đóng ca - chứ không phải sổ cái - là nguồn sự thật cho ca |
| Báo cáo Z trùng cho một ca | Báo cáo Z được đọc một lần duy nhất cho mỗi ca dựa trên một snapshot đã khóa; mang tính kết thúc theo thiết kế |
| Một số merchant kỳ vọng phân rã theo phương thức thanh toán / danh mục | Nằm ngoài phần tăng trưởng này (URD-SHF-005..006); SHF vẫn In-progress cho tới khi giao |
| Bước xác thực PIN khi truy cập báo cáo | Nằm ngoài phạm vi ở đây; theo dõi riêng |
12. Release Plan & Launch Criteria
| Khía cạnh | Kế hoạch |
|---|---|
| Phase | P2 - xem danh mục feature trong URD |
| Rollout | Tất cả merchant; không có feature flag |
| Migration | Năng lực mới, không có chuyển đổi dữ liệu ảnh hưởng tới merchant; báo cáo đóng ca sở hữu góc nhìn đối soát của ca |
| Tiêu chí ra mắt | Báo cáo X lặp lại được trên ca đang mở; đúng một báo cáo Z cho mỗi ca đã đóng; đối soát tiền mặt và tổng hợp doanh số được kiểm chứng so với tiền mặt đã đếm |
| Giám sát | Số báo cáo Z trên mỗi ca đã đóng (kỳ vọng 1:1), phân bố chênh lệch đối soát, tỉ lệ lỗi yêu cầu báo cáo |
13. FAQ
Báo cáo X và báo cáo Z khác nhau thế nào? Báo cáo X là snapshot giữa ca tạm thời, lặp lại được, kéo khi ca còn mở; báo cáo Z là báo cáo đóng ca cuối cùng, tạo một lần cho mỗi ca và đã khóa.
Kéo báo cáo X có thay đổi gì không? Không - nó chỉ đọc và lặp lại được; không làm thay đổi ca hay bất kỳ bản ghi tiền mặt nào.
Một ca có thể có nhiều hơn một báo cáo Z không? Không - đúng một báo cáo Z được tạo cho mỗi ca khi đóng ca, được hậu thuẫn bởi một snapshot đã khóa.
Báo cáo giữ nhất quán với sổ cái bằng cách nào? Báo cáo tổng hợp các biến động tiền mặt trực tiếp và sở hữu góc nhìn đối soát của ca, nên báo cáo đóng ca là nguồn sự thật cho vị thế tiền mặt của ca.
Báo cáo ca có gồm phân rã theo phương thức thanh toán hay danh mục không? Không trong phần tăng trưởng này - đó là mức Should (URD-SHF-005..006) và vẫn còn để mở.
References
- URD: Báo cáo → Shift Reports - yêu cầu (mảng SHF)
- Liên quan: Sales Reports · Access & Scoping · Advanced Analytics
- Module: Báo cáo - URD
- Developer: Domain model của ca - vòng đời ca và snapshot đóng ca