Files
sys-analysis-design/ba-output/e-commerce/03-specification/NFR_US002-003_v1.0.md
Leonard-ThindPad-P50 2c7bcde741 improve BA skill
2026-09-09 06:34:57 +07:00

9.7 KiB
Raw Blame History

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 —