NFR — Yêu cầu phi chức năng — US-002, US-003 (SCR-04 Giỏ hàng)
|
|
| Version |
1.0 |
| Date |
2026-09-08 |
| Author |
BA (qua skill ba-3-specification) |
| Status |
🟡 Draft |
| Approved by |
Tech Lead: — |
| Source |
SRS_US002-003_v1.0.md · e-commerce/docs/sections/02-phan-tich-yeu-cau.md (NFR-01…08) · e-commerce/docs/sections/04-api-design.md §4.1.1, §4.2 (ownership, rate limit, Guest session) · RBAC_CartCheckout_v1.0.md §5 |
| Scope |
US-002, US-003 — màn hình SCR-04 Giỏ hàng |
Quy tắc
Mỗi NFR bắt buộc ba thứ: con số đo được · điều kiện đo · cách verify. Con số chưa
có nguồn ⇒ ghi 🔴 + OQ-nnn, không tự đặt.
1. Hiệu năng — NFR-PERF-nn
| ID |
Yêu cầu |
Ngưỡng |
Điều kiện đo |
Cách verify |
Ai chốt |
| NFR-PERF-01 |
Thời gian tải giỏ hàng (GET /v1/cart) |
🔴 chưa chốt riêng cho US-002/003 — SAD NFR-01 chỉ có ngưỡng cho danh mục/tìm kiếm (<2s) và checkout (<3s); BA đề xuất áp cùng ngưỡng danh mục (≤2s p95) vì cùng là thao tác đọc — xem OQ-033 |
🔴 chưa xác nhận số CartItem tối đa/giỏ để đo (đề xuất ≤50 dòng, chưa có số liệu vận hành — greenfield) |
k6 kịch bản tải GET /v1/cart |
Tech Lech (chờ xác nhận) |
| NFR-PERF-02 |
Thời gian phản hồi sửa số lượng / xoá (PATCH/DELETE /v1/cart/items) |
🔴 chưa chốt — BA đề xuất ≤1s p95 (thao tác ghi 1 dòng, đơn giản hơn checkout) — xem OQ-033 |
1 người dùng, 1 request |
k6 kịch bản PATCH/DELETE đơn lẻ |
Tech Lead (chờ xác nhận) |
🔴 Không tự đặt số khi PO/Tech Lead chưa xác nhận — hai dòng trên chỉ là đề xuất của BA
dựa trên phép loại suy từ NFR-01 của SAD, không phải giá trị đã chốt. Xem OQ-033.
2. Dung lượng & tăng trưởng — NFR-CAP-nn
| Đại lượng |
Hiện tại |
Sau 1 năm |
Sau 3 năm |
Nguồn số liệu |
Số CartItem trung bình/tối đa mỗi giỏ hàng |
N/A — greenfield, chưa vận hành |
🔴 chưa có số liệu |
🔴 chưa có số liệu |
Chưa có — cần đo sau go-live (không phải việc của GĐ3) |
| Số giỏ hàng đồng thời (giờ cao điểm) |
N/A |
🔴 chưa có |
🔴 chưa có |
Tham chiếu BRIEF_CartCheckout_v1.0.md §2 quy mô "large" — chưa có con số cụ thể cho riêng module Giỏ hàng |
N/A theo LIFECYCLE = greenfield — không có dữ liệu vận hành cũ để ước lượng tăng trưởng
(nhất quán với IMPACT_CartCheckout_v1.0.md §1.6). Ghi nhận, không bỏ trống im lặng.
| Giờ cao điểm |
Khi nào |
Vì sao |
| 🔴 chưa xác nhận |
(đề xuất tham khảo: giờ tối, cuối tuần, mùa sale — theo mô hình marketplace bán lẻ thông thường, chưa có số liệu thật) |
Chưa vận hành để có dữ liệu thật |
3. Bảo mật & quyền riêng tư — NFR-SEC-nn
| ID |
Yêu cầu |
Chi tiết |
Căn cứ |
Cách verify |
| NFR-SEC-01 |
Mọi PATCH/DELETE cart item kiểm tra quyền sở hữu (chống IDOR) |
Đối chiếu customerId/sellerId trong JWT (Customer) hoặc session_id (Guest — cơ chế cụ thể chờ OQ-032) với chủ sở hữu CartItem; không khớp → 403 ERR_FORBIDDEN_OWNERSHIP |
e-commerce/docs/sections/04-api-design.md §4.1.1 |
Test gọi thẳng API với token/session không phải chủ sở hữu — AC-US003-12, 13 |
| NFR-SEC-02 |
Định danh Guest (X-Guest-Session-Id) không lộ qua kênh không an toàn |
Cookie HttpOnly; Secure; SameSite=Lax (theo SAD §4.1.1) — SRS này chỉ tham chiếu, không định nghĩa lại thiết kế kỹ thuật |
e-commerce/docs/sections/04-api-design.md §4.1.1 |
Kiểm tra thuộc tính cookie trên môi trường staging |
| NFR-SEC-03 |
Giới hạn tần suất gọi (rate limit) cho PATCH/DELETE /v1/cart/items của Guest |
Theo IP nguồn, ngưỡng cụ thể do SAD định nghĩa ở tầng kỹ thuật (không phải quyết định của SRS này) |
e-commerce/docs/sections/04-api-design.md §4.2 |
Tham chiếu, không kiểm thử ở phạm vi BA |
Rà bốn câu:
| Câu hỏi |
Trả lời |
| Có thông tin cá nhân không? Loại nào? |
Không — CartItem chỉ chứa product_variant_id, seller_id, quantity; không có PII của khách trong phạm vi US-002/US-003 |
| Lưu bao lâu? Xoá thế nào khi hết hạn? |
Theo vòng đời Cart — BR_CartCheckout_v1.0.md §3 (Guest 7 ngày, Customer 30 ngày theo 05-thiet-ke-du-lieu.md §5.3, chưa được Tech Lead xác nhận áp dụng đúng số này cho module, xem BACKLOG US-001) |
| Ai được xuất ra ngoài hệ thống? |
Không áp dụng — không có chức năng xuất dữ liệu giỏ hàng trong US-002/US-003 |
| Có quy định pháp luật nào áp dụng không? |
Không trực tiếp — dữ liệu giỏ hàng chưa phải giao dịch tài chính (khác Order/Payment, thuộc NFR-05) |
4. Lưu vết — NFR-AUD-nn
| Nhóm |
N/A vì |
Lưu vết (audit log) cho sửa/xoá CartItem |
Đây là thao tác tự phục vụ trên dữ liệu tạm thời trước khi đặt hàng, không phải giao dịch tài chính — theo RBAC_CartCheckout_v1.0.md §5, yêu cầu ghi vết chỉ bắt buộc từ bước tạo Order/Payment trở đi (US-004 trở lên). Sửa/xoá CartItem không cần audit log riêng ở US-002/US-003 |
5. Khả dụng & xử lý sự cố — NFR-AVL-nn
| ID |
Yêu cầu |
Ngưỡng |
Ghi chú |
| NFR-AVL-01 |
Hành vi khi Cart & Order Service lỗi/chậm khi tải giỏ hàng |
Banner lỗi + nút "Thử lại" (không tự động retry lặp lại) |
Đã có AC — AC-US002-03 |
| NFR-AVL-02 |
Hành vi khi Cart & Order Service lỗi/chậm khi sửa/xoá |
Banner lỗi tại dòng, giữ nguyên dữ liệu trước đó, mở lại nút |
Đã có AC — AC-US003-09, 10 |
Hệ thống ngoài lỗi thì nghiệp vụ này làm gì?
| Hệ thống ngoài |
Nếu lỗi/chậm |
Người dùng thấy gì |
Dữ liệu xử lý sao |
| Catalog & Inventory (nội bộ — cung cấp tên/ảnh/biến thể sản phẩm hiển thị ở C03–C06) |
Chậm/không phản hồi khi tải giỏ hàng |
🔴 chưa xác nhận: chặn hoàn toàn tải giỏ hàng, hay hiển thị giỏ hàng với các trường thiếu (VD ảnh trống, tên "—")? |
Chưa xác định — cần Tech Lead xác nhận SLA nội bộ giữa Cart & Order Service và Catalog Service (tương tự khoảng trống đã ghi ở IMPACT_CartCheckout_v1.0.md §1.5). Ghi nhận là khoảng trống, không tạo OQ mới trùng lặp — thuộc phạm vi IMPACT đã có |
6. Đa ngữ & định dạng — NFR-I18N-nn
| Khía cạnh |
Yêu cầu |
Ghi chú |
| Ngôn ngữ hỗ trợ |
VI (mặc định), EN đầy đủ ở SRS §4.2; ZH/KO/JA để trống — OQ-023 (đã mở ở UICONV) |
Tham chiếu UICONV §9 |
| Múi giờ hiển thị |
N/A — SCR-04 không hiển thị trường thời gian nào |
— |
| Định dạng ngày |
N/A — không áp dụng cho SCR-04 |
— |
| Dấu phân cách số |
Theo UICONV §8 (#,##0 ₫) |
— |
| Đơn vị tiền |
VND, không đổi tiền tệ giao dịch; giá quy đổi tham khảo (CurrencyToggle) — chưa xác nhận có hiển thị ở SCR-04 hay không, mức độ thấp, không chặn G3, ghi nhận cho Dev FE tham khảo UICONV §0 |
— |
| Sắp xếp chuỗi có dấu |
N/A — không có sắp xếp theo tên trên SCR-04 (chỉ nhóm theo seller, thứ tự nhóm — xem SRS §2.A.3.2) |
— |
| Độ dài text sau khi dịch |
Tên sản phẩm/seller dài hơn ở ZH/KO/JA so với VI — layout co giãn theo UICONV §0, không fix-width |
Tham chiếu UICONV §0 |
7. Khả năng truy cập & thiết bị — NFR-ACC-nn
| Khía cạnh |
Yêu cầu |
| Trình duyệt hỗ trợ |
Tham chiếu UICONV — chưa có bảng ma trận trình duyệt riêng, N/A ở mức SRS này |
| Kích thước màn hình nhỏ nhất |
Tham chiếu UICONV §1 — breakpoint mobile < 768px (giá trị cụ thể OQ-018, đã mở) |
| Dùng trên điện thoại không |
Có — web responsive (theo SAD §7.0) |
| Thao tác bằng bàn phím |
🔴 chưa xác nhận thứ tự focus cho F01/C07 — mức độ thấp ở RIGOR = standard (chỉ bắt buộc đủ ở strict), không chặn G3, ghi nhận cho Dev FE |
| Tương phản màu |
N/A ở mức BA — thuộc thiết kế visual (OQ-022, design system chưa chọn) |
8. Nhóm không áp dụng
| Nhóm |
N/A vì |
Lưu vết (NFR-AUD) |
Xem §4 — thao tác tự phục vụ trên dữ liệu tạm thời, không phải giao dịch tài chính |
9. Open Questions
| ID |
Câu hỏi |
Hỏi ai |
Từ ngày |
Chặn gì |
| OQ-033 |
Ngưỡng thời gian phản hồi (p95) cho GET /v1/cart và cho PATCH/DELETE /v1/cart/items là bao nhiêu giây? |
PO, Tech Lead |
2026-09-08 |
NFR-PERF-01, NFR-PERF-02 |
10. Xác nhận
| Vai trò |
Người |
Nội dung xác nhận |
Ngày |
| Tech Lead |
(chưa có) |
☐ Ngưỡng khả thi với kiến trúc hiện tại (chờ chốt số ở OQ-033) |
— |
| QA |
(chưa có) |
☐ Mọi NFR đều có cách verify chạy được |
— |
| PO |
(chưa có) |
☐ Ngưỡng khớp kỳ vọng người dùng đã trao đổi |
— |