28 KiB
BACKLOG — Giỏ hàng & Checkout (e-commerce)
| Version | 1.0 |
| Date | 2026-09-08 |
| Author | BA (qua skill ba-2-analysis) |
| Status | 🟡 Draft |
| Approved by | — |
| Profile | screen · greenfield · standard (xem 00-index/PROFILE_e-commerce.md) |
| Source | 01-discovery/BRIEF_CartCheckout_v1.0.md (RQ-001…RQ-004) · PROCESS_CartCheckout_v1.0.md v1.0 · Trả lời của người dùng cho OQ-004 và OQ-008 (xem DEC-03, DEC-04 ở 00-index/DECISION_e-commerce.md) |
| Scope | Module Giỏ hàng & Checkout — RQ-001…RQ-004. Ưu tiên phân rã US cho màn hình Giỏ hàng (FR-05) và Checkout & tách đơn (FR-06), theo đúng chỉ định phạm vi lần chạy này. Tối đa 8 US (giới hạn theo chỉ đạo "tối đa 6–8 US"). |
Change Log
| Version | Date | Người sửa | Thay đổi | CR |
|---|---|---|---|---|
| 1.0 | 2026-09-08 | BA (qua skill ba-2-analysis) | Bản đầu — 8 US, 2 Epic, 3 Feature | — |
⚠️ Ngoại lệ gate G1 — xem cảnh báo đầy đủ ở đầu
PROCESS_CartCheckout_v1.0.md. Tài liệu này được viết tiếp trong khiBRIEFmodule chưa qua G1 chính thức, theo xác nhận của người điều phối — xemDEC-02ở00-index/DECISION_e-commerce.md. Backlog dưới đây phải rà lại phạm vi và ưu tiên khi PO ký G1 thật.
0. Sơ đồ Use Case — toàn cảnh cho PO
flowchart LR
GUEST(["👤 Guest"])
CUS(["👤 Customer"])
subgraph HT["Phạm vi RQ-001…RQ-004 — Giỏ hàng & Checkout"]
UC1(["US-001 Thêm sản phẩm đa seller vào giỏ"])
UC2(["US-002 Xem giỏ hàng nhóm theo seller"])
UC3(["US-003 Sửa/xoá sản phẩm trong giỏ"])
UC4(["US-004 Checkout & tách đơn theo seller"])
UC5(["US-005 Nhập địa chỉ & xem phí ship theo seller"])
UC6(["US-006 Checkout không cần tài khoản (Guest)"])
UC7(["US-007 Thanh toán COD"])
UC8(["US-008 Thanh toán VNPay/Momo"])
end
NGOAI1[["Catalog & Tìm kiếm — ngoài phạm vi"]]
NGOAI2[["VNPay/Momo — ngoài phạm vi (bên thứ 3)"]]
NGOAI3[["GHN/GHTK — ngoài phạm vi (bên thứ 3)"]]
NGOAI4[["Khuyến mãi & Loyalty — ngoài phạm vi (điểm tích hợp, OQ-004 đã đóng)"]]
GUEST --- UC1
GUEST --- UC2
GUEST --- UC3
GUEST --- UC4
GUEST --- UC5
GUEST --- UC6
GUEST --- UC7
GUEST --- UC8
CUS --- UC1
CUS --- UC2
CUS --- UC3
CUS --- UC4
CUS --- UC5
CUS --- UC7
CUS --- UC8
UC1 --- NGOAI1
UC5 --- NGOAI3
UC8 --- NGOAI2
UC4 -.-> NGOAI4
Customer không có US-006 riêng (Guest checkout không áp dụng cho tài khoản đã có). Liên
kết nét đứt UC4 -.-> NGOAI4 = điểm tích hợp hiển thị kết quả coupon/điểm thưởng do module
khác tính (đã đóng OQ-004, xem DEC-03), module này chỉ gọi API áp dụng và hiển thị.
| Actor trong sơ đồ | Vai trò trong RBAC |
Số US |
|---|---|---|
| Guest | ROLE-01 | 8 |
| Customer | ROLE-02 | 7 (không gồm US-006) |
Actor khớp RBAC_CartCheckout_v1.0.md §1.
1. Cây phân rã
flowchart LR
RQ001["RQ-001 Giỏ hàng đa seller"]
RQ002["RQ-002 Tách đơn theo seller"]
RQ003["RQ-003 Thanh toán VNPay/Momo/COD"]
RQ004["RQ-004 Guest checkout"]
E01["EPIC-01 Giỏ hàng & Checkout đa seller"]
E02["EPIC-02 Thanh toán đa kênh"]
F01["FEAT-01 Quản lý giỏ hàng đa seller"]
F02["FEAT-02 Checkout & tách đơn theo seller"]
F03["FEAT-03 Thanh toán"]
U01(["US-001"])
U02(["US-002"])
U03(["US-003"])
U04(["US-004"])
U05(["US-005"])
U06(["US-006"])
U07(["US-007"])
U08(["US-008"])
RQ001 --> E01
RQ002 --> E01
RQ004 --> E01
RQ003 --> E02
E01 --> F01
E01 --> F02
E02 --> F03
F01 --> U01
F01 --> U02
F01 --> U03
F02 --> U04
F02 --> U05
F02 --> U06
F03 --> U07
F03 --> U08
2. Epic
| ID | Tên | Giá trị nghiệp vụ | RQ phủ | Feature | Ưu tiên |
|---|---|---|---|---|---|
| EPIC-01 | Giỏ hàng & Checkout đa seller | Cho phép khách mua từ nhiều seller trong một trải nghiệm thống nhất — điều kiện tiên quyết của mô hình marketplace | RQ-001, RQ-002, RQ-004 | FEAT-01, FEAT-02 | Must — ưu tiên hàng đầu theo OQ-008 (đã đóng, xem DEC-04) |
| EPIC-02 | Thanh toán đa kênh | Thu tiền qua kênh phổ biến VN mà không lưu thẻ, giảm phạm vi PCI-DSS | RQ-003 | FEAT-03 | Must, nhưng nội bộ Feature có thứ tự con: COD trước, ví điện tử có thể lùi (xem OQ-008/DEC-04 và §8) |
3. Feature
| ID | Tên | Epic | Mô tả một câu | US | MoSCoW |
|---|---|---|---|---|---|
| FEAT-01 | Quản lý giỏ hàng đa seller | EPIC-01 | Customer/Guest thêm, xem, sửa, xoá sản phẩm từ nhiều seller trong một giỏ hàng | US-001, US-002, US-003 | Must |
| FEAT-02 | Checkout & tách đơn theo seller | EPIC-01 | Customer/Guest xác nhận đặt hàng; hệ thống thu địa chỉ, tính phí ship, tách đơn theo seller, hỗ trợ cả Guest | US-004, US-005, US-006 | Must |
| FEAT-03 | Thanh toán | EPIC-02 | Customer/Guest thanh toán qua COD hoặc VNPay/Momo | US-007, US-008 | Must (US-007) — US-008 Must nhưng có thể triển khai sau theo DEC-04 |
4. User Story
Mẫu — cả ba vế bắt buộc: Là
<vai trò cụ thể>, tôi muốn<hành động>, để<giá trị nghiệp vụ>.
US-001 — Thêm sản phẩm từ nhiều seller vào giỏ hàng
| Feature | FEAT-01 |
| RQ | RQ-001 |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | Không — US nền tảng đầu tiên |
| BR áp dụng | (chưa có BR ràng buộc số lượng seller/sản phẩm tối đa trong giỏ — xem OQ mới nếu phát sinh ở GĐ3) |
| Ước lượng sơ bộ | M |
Story:
Là Customer hoặc Guest, tôi muốn thêm sản phẩm từ nhiều seller khác nhau vào cùng một giỏ hàng, để tôi có thể mua sắm từ nhiều gian hàng mà không phải đặt hàng riêng lẻ với từng seller.
Phạm vi:
- Trong: thêm
CartItemtừ bất kỳ seller nào vàoCarthiện có của khách (theocustomer_idhoặcsession_idnếu Guest) - Ngoài: kiểm tra tồn kho thời điểm checkout (thuộc US-004), tính giá sau khuyến mãi (thuộc
module Khuyến mãi/Loyalty theo
OQ-004/DEC-03)
Điều kiện nghiệm thu mức thô:
- Thêm được sản phẩm của seller A rồi seller B vào cùng một giỏ mà không bị lỗi/mất dữ liệu của seller A
- Giỏ hàng của Guest được giữ lại theo phiên (thời hạn cụ thể — GĐ3 xác nhận, tham khảo SAD §5.3.1 đề xuất 7 ngày cho Guest, cần Tech Lead xác nhận có áp dụng đúng con số này không)
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
US-002 — Xem giỏ hàng nhóm theo seller
| Feature | FEAT-01 |
| RQ | RQ-001 |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-001 (phải có sản phẩm trong giỏ trước) |
| BR áp dụng | (chưa có — mục hiển thị thuần tuý) |
| Ước lượng sơ bộ | M |
Story:
Là Customer hoặc Guest, tôi muốn xem giỏ hàng của mình được nhóm hiển thị theo từng seller kèm tổng tiền từng nhóm, để tôi biết rõ mình đang mua gì của ai trước khi quyết định đặt hàng.
Phạm vi:
- Trong: hiển thị màn hình Giỏ hàng (FR-05, ưu tiên của lần chạy này) nhóm
CartItemtheoseller_id, tổng tiền từng nhóm, tổng tiền toàn giỏ - Ngoài: phí vận chuyển (chưa biết tới lúc checkout — thuộc US-005), áp dụng coupon/điểm
thưởng (module khác,
OQ-004/DEC-03)
Điều kiện nghiệm thu mức thô:
- Giỏ hàng có sản phẩm của 3 seller hiển thị đúng 3 nhóm, mỗi nhóm đúng tổng tiền của nhóm đó
- Giỏ hàng rỗng hiển thị trạng thái rỗng rõ ràng (text cụ thể — GĐ3, W5)
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
US-003 — Sửa số lượng / xoá sản phẩm trong giỏ hàng
| Feature | FEAT-01 |
| RQ | RQ-001 |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-001 |
| BR áp dụng | (chưa có — ràng buộc số lượng tối thiểu/tối đa mỗi dòng chưa được chốt, xem GĐ3) |
| Ước lượng sơ bộ | S |
Story:
Là Customer hoặc Guest, tôi muốn cập nhật số lượng hoặc xoá sản phẩm khỏi giỏ hàng, để tôi kiểm soát đúng những gì mình sẽ mua trước khi checkout.
Phạm vi:
- Trong: sửa
quantity, xoáCartItemkhỏiCart - Ngoài: cảnh báo hết hàng theo thời gian thực (thuộc US-004 tại thời điểm checkout, không
phải tại thời điểm xem/sửa giỏ — trừ khi PO quyết khác, xem
OQ-009)
Điều kiện nghiệm thu mức thô:
- Sửa số lượng thành 0 ⇒ hành vi (xoá luôn hay chặn) — chưa chốt, cần OQ ở GĐ3
- Xoá hết sản phẩm của một seller ⇒ nhóm hiển thị theo seller đó biến mất (US-002)
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ | E: hành vi khi sửa số lượng về 0 chưa rõ — cần làm rõ ở GĐ3 (AC) |
US-004 — Checkout & tự động tách đơn theo seller
| Feature | FEAT-02 |
| RQ | RQ-002 |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-001, US-002, US-005 (cần địa chỉ + phí ship trước khi xác nhận cuối) |
| BR áp dụng | BR-CART-01 (tách đơn theo seller), BR-CART-02 (giữ tồn kho — chống oversell) |
| Ước lượng sơ bộ | L |
Story:
Là Customer hoặc Guest, tôi muốn xác nhận đặt hàng và để hệ thống tự động tách giỏ hàng đa seller thành các đơn con riêng theo từng seller, để mỗi seller nhận và xử lý đúng phần đơn của mình mà không thấy dữ liệu của seller khác.
Phạm vi:
- Trong: kiểm tra tồn kho, tạo
Order(cha) + nhiềuOrderSeller(con) +OrderItem - Ngoài: xử lý đơn sau khi tạo (đóng gói, giao hàng — FR-19/FR-26, ngoài phạm vi module)
Điều kiện nghiệm thu mức thô:
- Giỏ hàng có N seller ⇒ tạo đúng N
OrderSellercon (giả địnhASM-03chưa xác minh —OQ-011, phải xác nhận trước khi coi AC này là chốt ở GĐ3) - Không đủ tồn kho một sản phẩm bất kỳ ⇒ chặn tạo đơn, báo lỗi, giữ nguyên giỏ hàng (BR-CART-02)
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ | E: phụ thuộc OQ-009 (giá/tồn kho thay đổi) và OQ-011 (ASM-03 tách N seller); S: đây là US lõi phức tạp nhất, có thể cần tách thêm ở GĐ3 theo luồng thành công/luồng lỗi (W4); T: điều kiện biên "đủ tồn kho" cần dữ liệu test cụ thể ở GĐ3 |
US-005 — Nhập địa chỉ & xem phí vận chuyển ước tính theo từng seller
| Feature | FEAT-02 |
| RQ | RQ-002, RQ-001 (đóng góp làm rõ chi phí giỏ đa seller — RISK-04) |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-002 |
| BR áp dụng | (chưa có BR tính phí ship cụ thể — thuộc tích hợp GHN/GHTK, ASM-02 chưa xác minh) |
| Ước lượng sơ bộ | L |
Story:
Là Customer hoặc Guest, tôi muốn nhập/chọn địa chỉ giao hàng và xem phí vận chuyển ước tính theo từng đơn con seller trước khi xác nhận đặt hàng, để tôi biết chính xác tổng số tiền phải trả và không bị bất ngờ ở bước cuối (giải quyết điểm đau
P3/RISK-04ởPROCESSB3).
Phạm vi:
- Trong: thu thập địa chỉ giao hàng, gọi tích hợp GHN/GHTK để ước tính phí/thời gian giao theo từng seller
- Ngoài: tạo vận đơn thật (chỉ xảy ra sau khi đơn đã
confirmed, thuộc FR-26)
Điều kiện nghiệm thu mức thô:
- Địa chỉ ngoài vùng phục vụ của GHN/GHTK cho một seller cụ thể ⇒ hành vi hiển thị — chưa chốt, cần OQ ở GĐ3
- Nếu
ASM-02sai (API không khả dụng thời gian thực) ⇒ phương án dự phòng (ước tính tĩnh) — chưa chốt, chặn bởi xác minh ASM-02 ở GĐ1/RISK
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ✅ | ⚠️ | E/T: phụ thuộc kết quả xác minh ASM-02 (GHN/GHTK) — chưa có, ảnh hưởng trực tiếp cách viết AC ở GĐ3 |
US-006 — Checkout không cần tạo tài khoản (Guest)
| Feature | FEAT-02 |
| RQ | RQ-004 |
| MoSCoW | Must |
| Vai trò | Guest |
| Phụ thuộc | US-004, US-005 |
| BR áp dụng | BR-CART-07 (điều kiện tối thiểu cho Guest checkout) |
| Ước lượng sơ bộ | M |
Story:
Là Guest (khách vãng lai), tôi muốn hoàn tất checkout mà không cần tạo tài khoản trước, để tôi không phải dừng lại đăng ký tài khoản khi chỉ muốn mua một lần.
Phạm vi:
- Trong: cho phép hoàn tất toàn bộ luồng US-001…US-005, US-007/US-008 mà không yêu cầu đăng nhập/đăng ký
- Ngoài: chuyển đổi giỏ hàng Guest thành tài khoản Customer sau khi mua (nếu có — thuộc FR-01, ngoài phạm vi module này)
Điều kiện nghiệm thu mức thô:
- Guest hoàn tất được toàn bộ luồng checkout mà không bị chặn bởi bước "đăng nhập bắt buộc"
- Guest phải cung cấp tối thiểu thông tin liên hệ nào (họ tên, SĐT, email?) — chưa chốt, xem
BR-CART-07, cần GĐ3 xác nhận danh sách field bắt buộc
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ✅ | ✅ | E: danh sách field bắt buộc tối thiểu cho Guest chưa chốt — xem BR-CART-07, để GĐ3 làm bảng field |
US-007 — Thanh toán khi nhận hàng (COD)
| Feature | FEAT-03 |
| RQ | RQ-003 |
| MoSCoW | Must |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-004 |
| BR áp dụng | BR-CART-03 (giới hạn giá trị đơn COD — chưa chốt, OQ-006), BR-CART-04 |
| Ước lượng sơ bộ | M |
Story:
Là Customer hoặc Guest, tôi muốn thanh toán đơn hàng bằng hình thức thanh toán khi nhận hàng (COD), để tôi hoàn tất mua sắm mà không cần thanh toán trước qua kênh điện tử.
Ưu tiên triển khai trước US-008 theo xác nhận của PO ở OQ-008 — xem DEC-04 và §8.
Phạm vi:
- Trong: chọn COD làm phương thức thanh toán, tạo
Paymentgắn vớiOrder - Ngoài: thu tiền thật lúc giao hàng (thuộc vận hành giao nhận, FR-26)
Điều kiện nghiệm thu mức thô:
- Chọn COD ⇒ đơn được tạo mà không cần chuyển hướng ra ngoài hệ thống
- Đơn giá trị vượt ngưỡng (nếu PO chốt
BR-CART-03) ⇒ hành vi chặn/cảnh báo — chưa chốt,OQ-006
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ✅ | ⚠️ | E/T: phụ thuộc OQ-006 (giới hạn COD) và OQ-013 (Payment.status COD ghi nhận thế nào) — chưa có câu trả lời, AC ở GĐ3 chưa viết được đầy đủ nếu hai OQ này còn mở |
US-008 — Thanh toán qua VNPay/Momo
| Feature | FEAT-03 |
| RQ | RQ-003 |
| MoSCoW | Must (theo BRIEF), nhưng có thể lùi triển khai sau US-007 theo OQ-008/DEC-04 |
| Vai trò | Customer, Guest |
| Phụ thuộc | US-004 |
| BR áp dụng | BR-CART-04, BR-CART-05 (không lưu thẻ), BR-CART-06 (xác thực webhook — phụ thuộc ASM-01) |
| Ước lượng sơ bộ | XL |
Story:
Là Customer hoặc Guest, tôi muốn thanh toán đơn hàng qua VNPay hoặc Momo mà không phải nhập/lưu thông tin thẻ trên hệ thống sàn, để tôi dùng đúng ví điện tử quen thuộc mà không lộ thông tin thẻ cho sàn.
Phạm vi:
- Trong: khởi tạo giao dịch, chuyển hướng cổng thanh toán, nhận xác nhận qua webhook
- Ngoài: hoàn tiền qua VNPay/Momo (thuộc FR-25 đổi trả/tranh chấp, ngoài phạm vi module này), cơ chế đối soát bù đầy đủ (thuộc thiết kế chi tiết Payment Service ở GĐ3)
Điều kiện nghiệm thu mức thô:
- Thanh toán thành công ⇒ webhook cập nhật
Payment.status = success,OrderSeller.statuschuyển sangconfirmed - Webhook không tới đúng hạn ⇒ hành vi hiển thị cho khách — chưa chốt, phụ thuộc
ASM-01/OQ-010và cơ chế đối soát bù (ngoài phạm vi US module này, xemPROCESSB9)
INVEST:
| I | N | V | E | S | T | Ghi chú nếu không đạt |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ | E/S/T: đây là US phụ thuộc nhiều nhất vào xác nhận bên ngoài (ASM-01, sandbox VNPay/Momo) — nếu tới GĐ3 vẫn chưa xác minh được, đề xuất tách nhỏ US-008 theo từng cổng thanh toán (VNPay riêng, Momo riêng) để không chặn nhau |
5. Bảng tổng hợp US
| ID | Tên | Feature | RQ | MoSCoW | Ước lượng | Phụ thuộc | INVEST | Trạng thái |
|---|---|---|---|---|---|---|---|---|
| US-001 | Thêm sản phẩm đa seller vào giỏ | FEAT-01 | RQ-001 | Must | M | — | ✅ | Draft |
| US-002 | Xem giỏ hàng nhóm theo seller | FEAT-01 | RQ-001 | Must | M | US-001 | ✅ | Draft |
| US-003 | Sửa/xoá sản phẩm trong giỏ | FEAT-01 | RQ-001 | Must | S | US-001 | ⚠️ | Draft |
| US-004 | Checkout & tách đơn theo seller | FEAT-02 | RQ-002 | Must | L | US-001, US-002, US-005 | ⚠️ | Draft |
| US-005 | Địa chỉ & phí ship theo seller | FEAT-02 | RQ-002, RQ-001 | Must | L | US-002 | ⚠️ | Draft |
| US-006 | Checkout không cần tài khoản (Guest) | FEAT-02 | RQ-004 | Must | M | US-004, US-005 | ⚠️ | Draft |
| US-007 | Thanh toán COD | FEAT-03 | RQ-003 | Must | M | US-004 | ⚠️ | Draft |
| US-008 | Thanh toán VNPay/Momo | FEAT-03 | RQ-003 | Must | XL | US-004 | ⚠️ | Draft |
6. Đối chiếu ngược RQ → US (bảng bắt buộc)
| RQ | Phát biểu ngắn | MoSCoW | US phủ | Trạng thái |
|---|---|---|---|---|
| RQ-001 | Giỏ hàng đa seller, một lần checkout | Must | US-001, US-002, US-003, US-005 | ✅ Đã phủ |
| RQ-002 | Tự động tách đơn theo seller | Must | US-004, US-005 | ✅ Đã phủ |
| RQ-003 | Thanh toán VNPay/Momo/COD, không lưu thẻ | Must | US-007, US-008 | ✅ Đã phủ |
| RQ-004 | Guest checkout không cần tài khoản | Must | US-006 | ✅ Đã phủ |
Kết luận: 4/4 RQ của module này đã được phủ bởi ≥1 US — không có RQ bị bỏ quên.
7. US không truy về RQ nào (nghi ngờ scope creep)
| US | Từ đâu ra | Đề xuất | PO quyết |
|---|---|---|---|
| (không có) | — | — | — |
Kết luận: cả 8 US đều truy về được một RQ cụ thể — không phát hiện scope creep trong
lần phân rã này.
8. Đề xuất thứ tự thực hiện
BA đề xuất theo trả lời của PO ở OQ-008 (xem DEC-04): giữ RQ-001/RQ-002 (giỏ hàng đa
seller, tách đơn) trước; RQ-003 phần ví điện tử (VNPay/Momo) có thể lùi sau COD nếu thiếu
thời gian. PO chốt thứ tự cuối cùng.
| Đợt | US | Lý do xếp trước | Kết quả demo được |
|---|---|---|---|
| 1 | US-001, US-002, US-003 | Nền tảng giỏ hàng — mọi US sau đều phụ thuộc | Thêm/xem/sửa giỏ hàng đa seller |
| 2 | US-004, US-005, US-006 | Lõi giao dịch — tách đơn theo seller (RQ-002, ưu tiên theo OQ-008), gồm cả luồng Guest |
Checkout hoàn tất, tạo được Order/OrderSeller, hỗ trợ cả Guest và Customer |
| 3 | US-007 | COD không phụ thuộc tích hợp bên thứ ba phức tạp (VNPay/Momo) — làm trước theo DEC-04 |
Đặt hàng thanh toán COD đầu-cuối |
| 4 | US-008 | Phụ thuộc xác minh ASM-01 + sandbox VNPay/Momo (RISK §3 phụ thuộc bên ngoài) — có thể lùi theo DEC-04 nếu ASM-01 chưa xác minh kịp |
Đặt hàng thanh toán qua ví điện tử đầu-cuối |
9. Open Questions
| ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn US nào |
|---|---|---|---|---|
| OQ-006 | (đã mở từ GĐ1) Giới hạn giá trị đơn COD là gì? | PO, Kế toán đối soát | 2026-09-08 | US-007 |
| OQ-009 | Giá/tồn kho thay đổi giữa lúc thêm giỏ và checkout — tự động cập nhật hay chặn xác nhận lại? | PO + Tech Lead | 2026-09-08 | US-003, US-004 |
| OQ-010 | Xác nhận khả thi ASM-01 (webhook VNPay/Momo) |
Tech Lead | 2026-09-08 | US-008 |
| OQ-011 | Xác nhận ASM-03 — giỏ N seller luôn tách đúng N đơn, không gộp |
PO | 2026-09-08 | US-004 |
| OQ-013 | Với COD, Payment.status ghi "success" ngay khi xác nhận đơn hay giữ "pending" tới khi thực thu tiền? |
Kế toán đối soát, PO | 2026-09-08 | US-007 |
10. Ngoài phạm vi
- Ước lượng story point chính thức → team dev ở buổi grooming
- Thiết kế màn hình, field spec chi tiết → GĐ3
SRS - Áp dụng coupon/điểm thưởng (FR-13/FR-14) → module Khuyến mãi & Loyalty (điểm tích hợp đã
xác nhận qua
OQ-004/DEC-03) - Xử lý đơn sau khi tạo (đóng gói, giao hàng, đổi trả, khiếu nại) → module Quản lý đơn hàng
- Cơ chế đối soát bù thanh toán → thiết kế chi tiết Payment Service ở GĐ3, không phải US của module này
11. Tự chấm Gate G2 (chấm ở mức RIGOR = standard — áp đúng checklist workflow.md §2, không bớt/thêm)
| # | Tiêu chí | ☐/✅ | Ghi chú |
|---|---|---|---|
| 1 | PROCESS có AS-IS và TO-BE, mỗi bước ghi ai làm, input/output, điều kiện rẽ nhánh |
✅ (có lưu ý) | AS-IS rút gọn đúng theo greenfield (A3–A5 thay vì A1/A2/A6, giải thích rõ lý do ở PROCESS §0); TO-BE (B1–B6) đầy đủ |
| 2 | BACKLOG phân rã tới US-nnn, mỗi US có value statement và ước lượng sơ bộ |
✅ | 8 US, đủ ba vế Là/muốn/để, có ước lượng S/M/L/XL |
| 3 | Mỗi RQ-nnn của G1 map được về ≥1 US-nnn |
✅ | 4/4 RQ đã phủ — xem §6 |
| 4 | BR-nnn đã chốt, không mâu thuẫn nhau |
☐ | BR_CartCheckout_v1.0.md đã liệt kê đủ rule nhưng 3 rule quan trọng chưa chốt được giá trị (BR-CART-03 giới hạn COD, BR-CART-01 phụ thuộc xác minh ASM-03, BR-CART-06 phụ thuộc xác minh ASM-01) — đây là khoảng trống thật, đã ghi OQ, không tự chốt thay PO/Tech Lead |
| 5 | RBAC có ma trận vai trò × hành động; hành động phê duyệt/chốt sổ có bảng SoD |
✅ (có lưu ý) | Ma trận Guest/Customer đầy đủ; không có hành động phê duyệt nội bộ nào trong phạm vi RQ-001…004 (tách đơn/thanh toán do hệ thống tự động, không có bước người duyệt) — đã ghi rõ lý do thay vì bỏ trống bảng SoD, xem RBAC §3 |
| 6 | IMPACT nêu module/dữ liệu/tích hợp bị ảnh hưởng và cách xử lý dữ liệu cũ |
✅ (rút gọn theo greenfield) | Theo PROFILE §"Hệ quả đã áp dụng": IMPACT rút gọn chỉ trọng tâm trục tích hợp (1.5); các trục khác ghi N/A kèm lý do (greenfield, module đầu tiên, không dữ liệu cũ) |
| 7 | Tech Lead xác nhận khả thi kỹ thuật và nêu ràng buộc | ☐ | Chưa có — không có Tech Lead thật tham gia lần chạy này (đúng như cảnh báo G1 chưa ký); các giả định kỹ thuật (ASM-01, ASM-02, ASM-06) vẫn ở trạng thái "chưa xác minh" |
| 8 | ba-traceability báo coverage RQ→US ≥ 100% |
☐ | Chưa chạy ba-traceability trong lần này — khuyến nghị chạy trước khi trình G2, theo đúng nhắc nhở cuối SKILL.md |
Kết luận tự chấm: G2 chưa đủ điều kiện ký chính thức — 4/8 tiêu chí còn ☐, chủ yếu vì
thiếu xác nhận thật từ Tech Lead (đúng hệ quả của việc G1 cũng chưa ký thật, xem ngoại lệ gate
ở đầu tài liệu) và chưa chạy ba-traceability. Đây là kết quả tự chấm, không phải kết luận
gate — PO + Tech Lead phải xem lại trước khi ký.
12. Quy tắc viết W1–W13
| W1 | W2 | W3 | W4 | W5 | W6 | W7 | W8 | W9 | W10 | W11 | W12 | W13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ (có lưu ý) | N/A (chưa có field/con số cụ thể — thuộc GĐ3) | N/A (GĐ2 chưa viết AC Given/When/Then chi tiết) | N/A (chưa có text hiển thị — GĐ3) | ✅ (xem BR §3) |
N/A (chưa có bảng field — GĐ3) | ✅ | ✅ | ✅ | N/A (chưa có wireframe ở GĐ2) | ✅ | ✅ |
Ghi chú W2: quét nhanh|mượt|thân thiện|v\.v|phù hợp|tương ứng|nên |có thể trên 5 file GĐ2
(PROCESS, BACKLOG, BR, RBAC, IMPACT) — 27 dòng khớp trước khi soát, đã rà từng dòng:
- Hai dòng ban đầu dùng "nhanh" trong vế để của US-006/US-008 đã được sửa lại (không
còn "mua nhanh"/"thanh toán nhanh") để không mô tả giá trị bằng tính từ mơ hồ — thay bằng mô
tả hành vi cụ thể hơn (không phải dừng lại đăng ký; dùng đúng ví điện tử quen thuộc mà không
lộ thông tin thẻ). Grep lại sau khi sửa: 0 kết quả cho riêng từ khoá
nhanhtrong toàn bộ 5 file. - Các dòng còn lại (25 dòng) đều thuộc hai nhóm: (a) trích dẫn/diễn giải rủi ro theo đúng công
thức chuẩn của
RISKGĐ1 ("có thể xảy ra…"), hoặc (b) mô tả điều mà PO có thể cân nhắc như một tuỳ chọn thương mại/kỹ thuật chưa chốt (VD trợ giá phí ship ởPROCESSB3, thứ tự triển khai US-008 "có thể lùi" theoDEC-04) — đây là ngôn ngữ mô tả tuỳ chọn có nguồn (RISK,DEC-04), không phải một phát biểuRQ/ACné tránh quyết định bằng từ mơ hồ. - Không có dòng nào dùng các từ này để thay thế cho một con số/quyết định còn thiếu — mọi chỗ
thiếu số đều có
OQriêng (xem §9, §13). Đã quétTBD|TODO|\?\?\?— 0 kết quả ngoài chính dòng giải thích quy tắc này.
13. OQ mở tổng hợp của lần chạy GĐ2 này
| ID | Câu hỏi | Hỏi ai | Chặn gì | Nguồn |
|---|---|---|---|---|
| OQ-006 | (GĐ1, nhắc lại) Giới hạn giá trị đơn COD | PO, Kế toán đối soát | BR-CART-03, US-007 | RISK_CartCheckout_v1.0.md |
| OQ-009 | Giá/tồn kho đổi giữa thêm giỏ và checkout — tự động cập nhật hay chặn? | PO + Tech Lead | US-003, US-004 | PROCESS A5 (E2) |
| OQ-010 | Xác nhận khả thi ASM-01 (webhook VNPay/Momo) |
Tech Lead | BR-CART-06, US-008 | PROCESS A3 (P2) |
| OQ-011 | Xác nhận ASM-03 — luôn tách đúng N đơn theo N seller |
PO | BR-CART-01, US-004 | RISK_CartCheckout_v1.0.md ASM-03 |
| OQ-012 | Guest có giới hạn giá trị đơn hoặc cần OTP xác thực cho đơn giá trị cao? | PO, Bảo mật | RBAC §4, RISK-01 phương án (b) | RBAC_CartCheckout_v1.0.md |
| OQ-013 | Payment.status của COD ghi "success" ngay hay giữ "pending" tới khi thực thu? | Kế toán đối soát, PO | US-007, BR_CartCheckout §3 |
BR_CartCheckout_v1.0.md |
Đã đồng bộ vào 00-index/OQ_e-commerce.md — xem sổ toàn dự án để theo dõi trạng thái đóng/mở.