Files
sys-analysis-design/sa-output/e-commerce/02-architecture/ASR_e-commerce_v1.0.md
Canhchimlac 343ad8bbbc save
2026-09-15 16:02:30 +07:00

55 KiB
Raw Blame History

ASR — Architecturally Significant Requirements — e-commerce

Version 1.0
Date 2026-09-14
Author SA (skill sa-2-architecture, chế độ go, hoạt động asr)
Status 🟡 Draft (duyệt từng phần — xem Approved by; AG2 cần cả ba vai trò (Tech Lead/Security/Ops-SRE) ký, mới có một chữ ký thay có điều kiện — chưa đủ điều kiện chuyển 🔵 Approved)
Approved by Tech Lead: Điều phối dự án (uỷ quyền, chế độ chạy thử — ký thay theo ngoại lệ DEC-01, không phải chữ ký Tech Lead thật) — duyệt từng phần bản v1.0 · 2026-09-15: chấp nhận 15 ASR-001…015 (14 Must + 1 Should) đủ nguồn/"vì sao định hình kiến trúc"/cấu trúc bị ép, và chấp nhận danh sách 12 ADR ứng viên (ADR-001…012, §B2) với radar ước lượng đã ghi kèm; xác nhận ADR-005/ADR-006/ADR-009 (radar ước lượng ≥8) chỉ được chuyển Accepted sau khi POC-01/POC-02/diễn tập DR (Ops/SRE) chạy xong, đúng decision-radar.md §2/§6 — không ký tắt qua bước đo. Chốt TẠM OQ-024 (phương thức MFA Admin = TOTP app, theo ASM-20) và OQ-025 (không dịch nội dung seller tự nhập ở MVP, chỉ i18n UI hệ thống, theo ASM-21) làm hướng đi tạm để sad/sec kế tiếp không nghẽn — OQ-024/OQ-025 giữ nguyên MỞ, chờ Security/PO thật xác nhận, không coi là đã đóng. Ký thay Tech Lead theo ngoại lệ DEC-01 (SA) — không phải chữ ký Tech Lead thật. · Security: — (chưa ký) · Ops/SRE: — (chưa ký) — AG2 cần cả ba cùng ký; tài liệu này vẫn chưa qua AG2. OQ-004 (tính hợp lệ ký thay) vẫn mở. Confidence giữ nguyên 🔴 — duyệt từng phần không phải bằng chứng nguồn mới, không nâng Confidence. Status giữ 🟡 Draft — AG2 chưa đủ ba chữ ký thật/hợp lệ. Ghi thêm DEC-14.
Source 01-context/CTX_e-commerce_v1.0.md (v1.2) §2 (DRV-01…09), §3 (CON-01…09) · 01-context/OPT_e-commerce_v1.0.md §1, §3 (P2), §5 (P3/P4 loại), §8 (ASM-07…09) · 01-context/ARISK_e-commerce_v1.0.md §3 (ARISK-01…10), §6 (POC-01/POC-02) · 02-architecture/QAS_e-commerce_v1.0.md v1.0 (toàn bộ QAS-001…014, đặc biệt Phần B "Ghi chú phạm vi") · 00-index/OQ_e-commerce.md v1.9 · 00-index/DEC_e-commerce.md v1.10 · 00-index/DTM_e-commerce.md §11 ("🟠 Nợ #1" — ADR-001) · 00-index/ADL_e-commerce.md §8 (việc phải làm #1) · ba-output/e-commerce/02-analysis/BR_CartCheckout_v1.0.md (BR-CART-01…09) · ba-output/e-commerce/02-analysis/RBAC_CartCheckout_v1.0.md (ROLE-01/02, ma trận §2, §4, §6) · ba-output/e-commerce/02-analysis/IMPACT_CartCheckout_v1.0.md · ba-output/e-commerce/03-specification/API_US002-003_v1.0.md · e-commerce/docs/sections/02-phan-tich-yeu-cau.md (NFR-01…08) · e-commerce/docs/sections/03-kien-truc.md §3.1–§3.4 (tham khảo, kế thừa nguyên trạng — không thiết kế lại ở lượt này)
Scope Toàn sàn e-commerce theo phương án P2 (modular monolith + managed AWS, tách riêng Payment Service — DEC-06, chưa phải ADR chính thức). Chi tiết nhất: module Giỏ hàng & Checkout (US-002/003, BR-CART-01…09, RBAC ROLE-01/02). Chỉ hoạt động 2/9 của sa-2-architecture (ASR) — không tạo SAD/ADR/ICD/DAT/SEC/INF/FAIL ở lượt này; QAS (hoạt động 1) đã có ở QAS_e-commerce_v1.0.md, duyệt từng phần theo DEC-12.
Confidence 🔴 Giả định chưa xác minh — theo yêu cầu điều phối. AG1 chưa có chữ ký PO/Tech Lead thật (OQ-004 mở); POC-01/POC-02 chưa chạy; BA chưa ký G1 cho BRIEF_CartCheckout; QAS nguồn của phần lớn ASR dưới đây cũng đang giữ Confidence 🔴 (xem QAS_e-commerce_v1.0.md header). Mọi ASR giữ mức thấp nhất cho tới khi: (a) AG1 ký thật, (b) POC-01/POC-02 chạy xong, (c) các OQ nguồn (OQ-002/007/010/012/018…025) được trả lời.

Change Log

Version Date Người sửa Thay đổi ADR/DEC
1.0 2026-09-14 SA (qua skill sa-2-architecture, chế độ go, hoạt động asr) Bản đầu — chưng cất 15 ASR-nnn từ DRV/CON/QAS (GĐ1–2 SA) và BR-CART/ROLE (BA), bao phủ đủ 14 nhóm bắt buộc theo ghi chú người duyệt (tách đơn theo seller, Payment cô lập, webhook idempotent + đối soát, message backbone + giới hạn FIFO group, RDS gộp, ownership check, PII/residency, MFA Admin, HA/DR + drill, observability, AWS bắt buộc, đối tác thanh toán/vận chuyển, ranh giới module Conway, đa ngôn ngữ) cộng 1 ASR tổng thể (kiểu kiến trúc P2, gắn ADR-001 đang nợ theo DTM/ADL). Mỗi ASR có nguồn, "vì sao định hình kiến trúc", cấu trúc bị ép, đánh giá radar ước lượng và ADR ứng viên (số dự kiến — hoạt động adr kế tiếp xác nhận lại thứ tự thật). Không viết ADR ở lượt này. Thêm OQ-024/OQ-025 (phương thức MFA Admin, chủ sở hữu chiến lược i18n) và ASM-19…21. Ghi DEC-13 (tiếp nối DEC-01…12, ngoại lệ gate tiếp tục GĐ2 hoạt động asr). Không sửa QAS/CTX/OPT đã duyệt từng phần. Confidence 🔴 toàn bộ. DEC-13
1.0 2026-09-15 Điều phối dự án (thay mặt Tech Lead, ngoại lệ DEC-01) — tác vụ sign/approve Duyệt từng phần: chấp nhận 15 ASR-001…015 (14 Must + 1 Should) và danh sách 12 ADR ứng viên (ADR-001…012, §B2) với radar ước lượng; xác nhận ADR-005/ADR-006/ADR-009 (radar ≥8) chỉ được Accepted sau khi POC-01/POC-02/diễn tập DR chạy xong. Chốt TẠM OQ-024 (MFA Admin = TOTP app, ASM-20) và OQ-025 (không dịch nội dung seller tự nhập ở MVP, chỉ i18n UI hệ thống, ASM-21) làm hướng đi tạm — cả hai giữ nguyên mở, chờ Security/PO thật xác nhận. Không đổi nội dung chuyên môn. Security/Ops chưa ký; OQ-004 mở; Confidence giữ 🔴; Status giữ 🟡 Draft; AG2 chưa ký. Ghi thêm DEC-14. DEC-14

Sơ đồ thắng về quan hệ và luồng — tài liệu này không có sơ đồ mới (chỉ bảng chưng cất yêu cầu). Bảng/văn bản thắng về ràng buộc và con số. Mâu thuẫn ngoài hai loại này là lỗi tài liệu, phải sửa chứ không chọn bên (D12).


0. Ghi chú Preflight & ngoại lệ gate — bắt buộc đọc trước

AG1 (gate GĐ1 SA) vẫn chưa được ký chính thức, và AG2 (gate của chính GĐ2) càng chưa tới hạn — tài liệu này mới là hoạt động 2/9 của GĐ2. Tình trạng kế thừa nguyên vẹn từ QAS_e-commerce_v1.0.md §0 và ARISK/OPT §Tự chấm: AG1 4/4 artifact đủ cấu trúc nhưng nội dung còn OQ-004 (tính hợp lệ ký thay), OQ-005/006/007/008/010/012 (số/người thật) mở, POC-01/POC-02 chưa chạy.

Người dùng (vai điều phối dự án chạy thử) đã được cảnh báo lại và khẳng định muốn tiếp tục sang hoạt động 2 (ASR) của sa-2-architecture, sau khi hoạt động 1 (QAS) đã được duyệt từng phần (DEC-12). Quyết định ngoại lệ này được ghi tại DEC-13 dưới đây và tại sổ 00-index/DEC_e-commerce.md.

DEC-13 (SA) — Tiếp tục sa-2-architecture (hoạt động 2 — ASR) cho e-commerce trong khi AG1 chưa có chữ ký PO/Tech Lead thật và AG2 (gate của chính GĐ2) chưa tới hạn — tiếp nối DEC-01…12. Quyết định: Chưng cất 15 ASR từ DRV/CON/QAS/BR-CART/ROLE đã có, giữ Confidence 🔴 cho tới khi nguồn tương ứng được xác nhận thật (đặc biệt: AG1 ký thật, POC-01/POC-02 chạy xong, OQ-002/007/010/012/018…025 được trả lời). Người quyết: Điều phối dự án (đại diện PO, dự án chạy thử). Radar (ước lượng): ~4 — chi phí đảo ngược thấp (chưng cất ASR từ tài liệu đã có, sửa lại không tốn nhiều nếu nguồn đổi) · bán kính ảnh hưởng: toàn bộ hoạt động sad/adr kế tiếp phụ thuộc danh sách này, nhưng bản thân việc ghi tài liệu dưới ngoại lệ thì nhỏ · có chạm QAS Must trực tiếp (đang chưng cất từ chính các QAS Must) nhưng chưa phải quyết định kiến trúc đã cam kết thi công · không ràng buộc dài hạn (danh sách ASR có thể sửa khi nguồn đổi, chưa phải ADR bất biến) · không tranh cãi mới, tiếp nối tiền lệ DEC-11/12 → ghi DEC-nn, không cần ADR cho việc chạy dưới ngoại lệ (decision-radar.md §1–§2) — khác với các ADR ứng viên liệt kê ở §B2 dưới đây, việc đó vẫn để hoạt động sad/adr kế tiếp. Hệ quả nếu không chấp nhận ngoại lệ: dừng GĐ2 ở hoạt động qas, không có ASR để hoạt động sad (bắt buộc có trước theo thứ tự 1→2→3 của SKILL.md) dùng làm đầu vào — chậm tiến độ chạy thử tương ứng thời gian xử lý các OQ đang mở.

🔴 Nhắc quan trọng: đây là hoạt động 2/9. SAD (hoạt động 3), ADR, ICD, DAT, SEC, INF, FAIL chưa được tạo. Theo SKILL.md: "1→2→3 bắt buộc trước; 4–8 chạy song song được" — ASR này là điều kiện đầu vào bắt buộc cho SAD (hoạt động 3) kế tiếp.


PHẦN B — Architecturally Significant Requirements

B0. Tóm tắt

Nhóm Số ASR Must Should Có ứng viên ADR Chỉ cần DEC
Cấu trúc hệ thống (kiểu kiến trúc, ranh giới, tách đơn) 3 (ASR-001,003,014) 3/3 — 3/3 0
Bảo mật & tuân thủ 4 (ASR-002,007,008,009) 3/4 1/4 (MFA Admin Must, phần Seller Should) 3/4 1 (ASR-009, borderline)
Tích hợp & dữ liệu 3 (ASR-004,005,006) 3/3 — 3/3 0
Hạ tầng & vận hành 2 (ASR-010,011) 2/2 — 2/2 0
Ràng buộc nền tảng (đầu vào, không phải quyết định SA) 1 (ASR-012) 1/1 — 0/1 (đã phản ánh trong ADR-001) —
Phụ thuộc bên ngoài 1 (ASR-013) 1/1 — 1/1 0
Frontend / i18n 1 (ASR-015) — 1/1 0/1 (borderline) 1
Tổng 15 13/15 2/15 12/15 2/15 (+1 N/A)

Đọc bảng: 15 nằm trong khoảng "8–15 mục" khuyến nghị của SKILL.md §2 — không phải danh sách 200 mục. Ba ASR không bắt buộc ADR (ASR-009, ASR-012, ASR-015) vẫn được giữ trong sổ vì đều có QAS Must hoặc Should đứng sau (tiêu chí B1), chỉ khác ở việc quyết định cụ thể có thể chốt bằng DEC-nn/AGD thay vì ADR bất biến.

B1. Tiêu chí một yêu cầu là ASR (tham chiếu — xem đầy đủ ở templates/quality-scenarios.md §B1)

Có ≥ 1 điều: ép một cấu trúc · ép một ràng buộc không đảo ngược · ép một đánh đổi · có QAS mức Must đứng sau. Mỗi ASR dưới đây ghi rõ đang thoả điều nào.

B2. Danh sách ASR — chi tiết

ASR-001 — Kiểu kiến trúc tổng thể phải là Modular Monolith + managed AWS, Payment tách riêng (P2) [Must]

Phát biểu Toàn sàn phải được tổ chức thành 2–3 nhóm triển khai ECS Fargate (modular monolith theo domain), không phải ~10 microservices độc lập database-per-service (P1); duy nhất Payment Service tách hoàn toàn khỏi phần còn lại.
Nguồn DEC-06 (chọn P2, chưa phải ADR) · OPT_e-commerce_v1.0.md §1, §3, §4 (điểm 4.05 vs 2.95) · CON-05 (năng lực team, Conway) · CON-01/CON-02 (chi phí/thời gian)
Vì sao định hình kiến trúc Chi phí đổi sau cao (đảo từ monolith sang microservices hay ngược lại tốn tái cấu trúc network/DB/CI-CD, không phải một buổi chiều) + cắt ngang mọi component (mọi module — Catalog, Cart&Order, Seller, Commission, Promo, Review, Notify, Shipping — đều nằm trong ranh giới triển khai này)
Ép ra cấu trúc gì Ranh giới triển khai (deployment boundary): tối đa 2–3 đơn vị ECS Fargate cho phần monolith + 1 đơn vị Payment riêng biệt mạng/IAM; 1 RDS chính schema-per-module (xem ASR-006); SQS/EventBridge thay Kafka/MSK (xem ASR-005)
Quyết định cần ADR Có — ADR-001 (số đã "nợ" theo DTM §11/ADL §8) — "Kiểu kiến trúc tổng thể GĐ2 — Modular Monolith P2, không phải Microservices P1". Radar ước lượng ~7 (chi phí đảo ngược cao=2 · bán kính toàn hệ thống=2 · chạm QAS Must gián tiếp qua QAS-005/006/009=1 · ràng buộc ≥1 năm=2 · chưa tranh cãi mới=0). Dưới ngưỡng 8 cứng nhưng vẫn cần POC-01/POC-02 trước khi Accepted vì bản thân ASM-07/ASM-08 (SQS đủ throughput, RDS đủ tải gộp) chưa xác minh — nếu một trong hai POC fail, quyết định này phải viết lại một phần (kiến trúc lai), không phải toàn bộ.
Trạng thái Đã ghi nhận — ADR-001 chưa viết (hoạt động sad/adr kế tiếp phải viết ngay khi bắt đầu, theo cảnh báo đã có ở DTM/ADL)

ASR-002 — Payment Service là biên cô lập PCI-DSS SAQ A, không lưu thông tin thẻ [Must]

Phát biểu Payment Service phải là ranh giới mạng + IAM + dữ liệu (RDS riêng) hoàn toàn tách biệt khỏi phần monolith còn lại; hệ thống sàn không được lưu số thẻ/CVV ở bất kỳ đâu — mọi xử lý thẻ do VNPay/Momo thực hiện, sàn chỉ lưu gateway_transaction_ref + kết quả.
Nguồn DRV-03 (giảm phạm vi PCI-DSS) · CON-06 (PCI-DSS SAQ A + NĐ13/2023, cứng) · BR-CART-05 (BA, "Không lưu trữ thông tin thẻ thanh toán" — không thể đổi trong 1 năm)
Vì sao định hình kiến trúc Ràng buộc công nghệ/pháp lý không đảo ngược (vi phạm PCI-DSS/hợp đồng với VNPay/Momo, không phải quyết định kỹ thuật có thể đổi ý sau) + cắt ngang (mọi luồng chạm dữ liệu thanh toán trong toàn hệ thống phải đi qua đúng một biên này)
Ép ra cấu trúc gì Payment Service = container riêng, network/IAM riêng, RDS riêng nhỏ (đã phản ánh sơ bộ ở OPT §3 P2); mọi module khác chỉ nhận gateway_transaction_ref/status, không bao giờ nhận/lưu dữ liệu thẻ
Quyết định cần ADR Có — ADR-002 (dự kiến) — "Payment Service là biên cô lập PCI-DSS SAQ A". Radar ước lượng ~7 (đảo ngược tốn — tách lại sau khi đã gộp nhầm sẽ phải audit lại toàn bộ luồng thẻ=2 · bán kính: mọi module chạm thanh toán=1 · chạm QAS-011 Must (PII) gián tiếp=1 · ràng buộc pháp lý ≥1 năm, không thương lượng=2 · chưa tranh cãi=1). Không cần POC bắt buộc (không phải con số hiệu năng chưa đo — đây là ràng buộc pháp lý đã có sẵn), nhưng cần Security ký (theo decision-radar.md §5: bảo mật/quyền riêng tư do Security chốt).
Trạng thái Đã ghi nhận — ADR-002 chưa viết; input trực tiếp cho hoạt động sec (threat model) và dat (ownership dữ liệu Payment) kế tiếp

ASR-003 — Tách đơn hàng theo seller khi checkout (Order cha / OrderSeller con) [Must]

Phát biểu Khi checkout, hệ thống phải nhóm CartItem theo seller_id và tạo một OrderSeller (đơn con) riêng cho mỗi nhóm; Order (đơn cha) là tập hợp các OrderSeller, mỗi OrderSeller có vòng đời trạng thái độc lập.
Nguồn BR-CART-01 (BA) · DRV-01 (blocker MVP) · DRV-02 (bỏ giỏ đa seller) · DRV-06 (minh bạch dòng tiền 3 bên)
Vì sao định hình kiến trúc Chi phí đổi sau cao (đổi mô hình dữ liệu Order/OrderSeller sau go-live cần migrate toàn bộ đơn hàng lịch sử + sửa mọi module đọc Order) + cắt ngang nhiều component (Cart&Order, Commission&Payout, Shipping&Fulfillment, Review đều phụ thuộc cấu trúc cha-con này)
Ép ra cấu trúc gì Mô hình dữ liệu 1 Order — N OrderSeller — N OrderItem; mỗi OrderSeller là đơn vị hạch toán/vận chuyển/đối soát độc lập; ranh giới sở hữu dữ liệu giữa Cart&Order (tạo Order/OrderSeller) và Commission&Payout/Shipping (tiêu thụ)
Quyết định cần ADR Có — ADR-003 (dự kiến) — "Mô hình Order/OrderSeller — tách đơn theo seller". Radar ước lượng ~6 (đảo ngược cao=2 · bán kính nhiều module=2 · chạm QAS Must gián tiếp (không có QAS số riêng nhưng là nền cho toàn luồng checkout QAS-002)=1 · ràng buộc ≥1 năm (mô hình dữ liệu lõi)=1 · ít tranh cãi, đã là mô hình kinh doanh đã chốt=0). Lưu ý: cơ chế tách chi tiết "luôn đúng N đơn cho N seller, không gộp" vẫn phụ thuộc OQ-011 (BA) chưa đóng — ADR-003 phải chờ hoặc ghi rõ giả định.
Trạng thái Đã ghi nhận — ADR-003 chưa viết; phụ thuộc OQ-011 (BA) trước khi có thể coi là "Đã kiểm chứng"

ASR-004 — Webhook xác nhận thanh toán phải idempotent + có job đối soát bù [Must]

Phát biểu Cập nhật Payment.status = success chỉ được thực hiện khi webhook VNPay/Momo có chữ ký hợp lệ và xử lý idempotent (webhook gọi lại nhiều lần không tạo hiệu ứng phụ); đồng thời phải có job đối soát bù chạy định kỳ để phát hiện lệch trạng thái khi webhook trễ/mất.
Nguồn QAS-014 (đối soát ≤15 phút, đề xuất SA, OQ-021) · DRV-08 (webhook chưa xác minh khả thi gần thời gian thực) · BR-CART-06 (BA) · ARISK-03
Vì sao định hình kiến trúc Ép một đánh đổi (không thể đảm bảo consistency mạnh cho trạng thái thanh toán vì phụ thuộc bên thứ ba — phải chấp nhận eventual consistency có giới hạn thời gian, đây là quyết định kiến trúc không phải chi tiết code) + cắt ngang (chạm Payment Service, Cart&Order — cập nhật OrderSeller.status, và tầng quan sát được — job đối soát cần alerting riêng)
Ép ra cấu trúc gì Idempotency key (theo gateway_transaction_ref) cho endpoint nhận webhook; job đối soát bù (reconciliation) chạy định kỳ, độc lập với luồng webhook chính; cần bảng log webhook đã nhận để so khớp
Quyết định cần ADR Có — ADR-004 (dự kiến) — "Cơ chế idempotency & đối soát cho webhook thanh toán bên thứ ba". Radar ước lượng ~6 (đảo ngược trung bình-cao (đổi cơ chế đối soát sau khi có dữ liệu thật tốn công viết lại job + backfill)=1 · bán kính: Payment + Cart&Order + Observability=1 · chạm QAS-014 Must trực tiếp=2 · ràng buộc trong khoảng GĐ2, có thể đổi khi có sandbox thật=1 · chưa tranh cãi=1).
Trạng thái Đã ghi nhận — ADR-004 chưa viết; phụ thuộc sandbox VNPay/Momo thật (ARISK-03, chưa có) để kiểm chứng

ASR-005 — Message backbone SQS FIFO (per-seller group) + EventBridge cho luồng đặt hàng, có giới hạn thông lượng theo group [Must]

Phát biểu Luồng sự kiện OrderPlaced/PaymentConfirmed phải dùng SQS FIFO (message group theo seller_id, đảm bảo thứ tự xử lý trong cùng seller) + EventBridge fan-out cho các consumer chuỗi sau đặt hàng (hoa hồng, payout, notify, loyalty); phải có phương án cho seller có volume cao chạm trần throughput của một message group.
Nguồn QAS-005 (≥100 msg/s sustained, p99 ≤2s, 0 mất message) · ARISK-01 · DEC-06 (P2 chọn SQS/EventBridge thay Kafka/MSK) · ASM-07 (chưa xác minh)
Vì sao định hình kiến trúc Ràng buộc công nghệ không đảo ngược trong ngắn hạn (đổi từ SQS/EventBridge sang Kafka/MSK sau khi đã có producer/consumer thật là viết lại toàn bộ tầng tích hợp bất đồng bộ, không phải cấu hình) + cắt ngang (mọi module tiêu thụ event OrderPlaced — Commission, Payout, Notification, Loyalty — đều phụ thuộc cơ chế này)
Ép ra cấu trúc gì SQS FIFO queue với message group key = seller_id; EventBridge rule cho fan-out ≥5 consumer; cơ chế giám sát riêng cho seller có volume cao (theo dõi/cảnh báo riêng theo QAS A4 xung đột dòng 2); KHÔNG dùng Kafka/MSK trừ khi POC-01 fail
Quyết định cần ADR Có — ADR-005 (dự kiến) — "Message backbone cho luồng đặt hàng — SQS FIFO + EventBridge". Radar ước lượng ~8 (đảo ngược cao=2 · bán kính nhiều module=2 · chạm QAS-005 Must trực tiếp=2 · ràng buộc ≥1 năm (chọn message broker là quyết định dài hạn)=1 · chưa tranh cãi mới=1). ≥8 ⇒ theo decision-radar.md §2, ADR này không được chuyển Accepted khi chưa có POC/bài đo — POC-01 (ARISK §6) chính là bài đo bắt buộc, hiện CHƯA CHẠY.
Trạng thái Đã ghi nhận — ADR-005 chưa viết; chặn Accepted cho tới khi POC-01 chạy xong (đã ghi ở OQ-012, ARISK §6)

ASR-006 — Một cụm RDS PostgreSQL chính, schema-per-module, chịu tải ghi/đọc gộp (trừ Payment) [Must]

Phát biểu Toàn bộ module ngoại trừ Payment phải dùng chung 1 cụm RDS PostgreSQL Multi-AZ, phân tách theo schema-per-module (ranh giới logic rõ ràng dù chung instance); cụm này phải chịu được tải ghi (checkout) + đọc (catalog) gộp ở tải đỉnh.
Nguồn QAS-006 (p95 write ≤300ms, p95 read ≤200ms, CPU <75%) · ARISK-02 · DEC-06 (P2) · ASM-08 (chưa xác minh)
Vì sao định hình kiến trúc Chi phí đổi sau cao (tách read replica/DB riêng cho từng module sau khi đã gộp là một dự án migration riêng, không phải config) + cắt ngang (mọi module ngoài Payment — Catalog, Cart&Order, Seller, Commission, Promo, Review, Notify, Shipping — đều chia sẻ cùng một instance, một module quá tải ảnh hưởng tất cả)
Ép ra cấu trúc gì 1 RDS instance chính (db.r6g.xlarge Multi-AZ theo TCO/ARISK, tham khảo — số thật thuộc hoạt động inf), schema riêng cho từng module, connection pool chia sẻ có giới hạn theo module để tránh một module chiếm hết pool
Quyết định cần ADR Có — ADR-006 (dự kiến) — "Chiến lược dữ liệu — RDS gộp schema-per-module cho P2". Radar ước lượng ~8 (đảo ngược cao=2 · bán kính toàn bộ module ngoài Payment=2 · chạm QAS-006 Must trực tiếp=2 · ràng buộc ≥1 năm=1 · chưa tranh cãi=1). ≥8 ⇒ bắt buộc POC/bài đo trước Accepted — POC-02 (ARISK §6) là bài đo bắt buộc, hiện CHƯA CHẠY.
Trạng thái Đã ghi nhận — ADR-006 chưa viết; chặn Accepted cho tới khi POC-02 chạy xong

ASR-007 — Mọi thao tác Cart/Order phải qua kiểm tra quyền sở hữu (ownership check) [Must]

Phát biểu Mọi request đọc/sửa/xoá Cart/CartItem/Order phải được đối chiếu quyền sở hữu: Guest theo session_id của chính phiên, Customer theo customer_id của chính họ — 0% truy cập chéo (IDOR) thành công.
Nguồn QAS-010 (100% request qua kiểm tra, 0 IDOR thành công) · RBAC_CartCheckout_v1.0.md §2 (ma trận: "Xem giỏ hàng/đơn hàng của người khác" = ❌ cho cả ROLE-01 Guest và ROLE-02 Customer)
Vì sao định hình kiến trúc Ép một đánh đổi (kiểm tra ownership mỗi request cạnh tranh trực tiếp với ngân sách latency QAS-003/QAS-004 — đã ghi nhận ở QAS A4 xung đột dòng 1, cần quyết định cache ownership hay query DB mỗi lần) + cắt ngang (mọi endpoint GET/PATCH/DELETE của /v1/cart* đều cần cùng một cơ chế)
Ép ra cấu trúc gì Chỗ ra quyết định authz (API gateway hay từng service) phải nhất quán cho toàn bộ nhóm "giao dịch"; cần cơ chế cache session/ownership (VD Redis) nếu chọn tối ưu latency thay vì query DB mỗi request
Quyết định cần ADR Có — ADR-007 (dự kiến) — "Chỗ ra quyết định ownership/authz cho Cart & Order — gateway hay service, có cache không". Radar ước lượng ~6 (đảo ngược trung bình=1 · bán kính: toàn bộ endpoint Cart&Order=1 · chạm QAS-010 Must trực tiếp + xung đột trực tiếp với QAS-003/004=2 · ràng buộc trong khoảng GĐ2=1 · đã có xung đột ghi nhận ở QAS A4, cần Tech Lead quyết=1).
Trạng thái Đã ghi nhận — ADR-007 chưa viết; input trực tiếp cho hoạt động sec (mô hình phân quyền) và sad (nơi đặt logic authz)

ASR-008 — Dữ liệu PII chia sẻ cho seller phải qua data-minimization + xác nhận residency NĐ13/2023 [Must]

Phát biểu Khi tách đơn theo seller, chỉ những trường PII (địa chỉ, SĐT người nhận) thực sự cần thiết để giao hàng mới được chia sẻ cho seller tương ứng; toàn bộ dữ liệu này (và mọi PII khách hàng/seller khác) phải được xác nhận nơi lưu trữ (residency) đáp ứng NĐ13/2023 trước go-live.
Nguồn QAS-011 (100% trường PII đã rà soát, 0 trường dư thừa) · CON-06 (NĐ13/2023, cứng) · DRV-07 (chưa rà soát) · ARISK-06 · ASM-04 (ap-southeast-1 chưa xác nhận đủ)
Vì sao định hình kiến trúc Ràng buộc pháp lý không đảo ngược (vi phạm NĐ13/2023 là vi phạm pháp luật, không phải lựa chọn kỹ thuật) + cắt ngang (mọi module có PII — Identity, Cart&Order khi tách đơn, Seller Management với KYC — đều chịu ràng buộc vùng lưu trữ và chính sách chia sẻ này)
Ép ra cấu trúc gì Danh sách trường PII được phép truyền cho seller (whitelist, không phải blacklist); vùng lưu trữ dữ liệu (region AWS) phải được Legal/Security xác nhận; cơ chế che/ẩn field khi hiển thị cho seller (mức che — theo RBAC §4, chưa chốt)
Quyết định cần ADR Có — ADR-008 (dự kiến) — "Vùng lưu trữ dữ liệu cá nhân & chính sách chia sẻ PII cho seller". Radar ước lượng ~7 (đảo ngược cao — đổi region sau go-live là migration dữ liệu thật=2 · bán kính nhiều module có PII=1 · chạm QAS-011 Must trực tiếp=2 · ràng buộc pháp lý ≥1 năm, không thương lượng=2 · chưa tranh cãi (chờ người rà soát)=0). Phủ quyết thuộc Security/Legal (decision-radar.md §5), không phải SA — SA chỉ chuẩn bị danh sách trường để người đó rà soát (đã ghi ở ARISK-06).
Trạng thái Đã ghi nhận — ADR-008 chưa viết; chặn hoàn toàn cho tới khi có đại diện Pháp chế/Bảo mật (OQ-007, vẫn chưa có người sau cả GĐ1 lẫn hoạt động qas)

ASR-009 — Đăng nhập Admin bắt buộc MFA (Seller khuyến khích, không bắt buộc) [Must cho Admin / Should cho Seller]

Phát biểu 100% đăng nhập tài khoản Admin phải qua bước xác thực thứ hai (MFA); 0 lượt bypass được chấp nhận. Seller được khuyến khích bật MFA nhưng không bắt buộc ở MVP.
Nguồn QAS-012 (100% Admin qua MFA, Must; Seller Should)
Vì sao định hình kiến trúc Chủ yếu chạm QAS Must (tiêu chí thứ tư của B1) — bán kính hẹp hơn các ASR khác (chỉ Identity/Admin module), chi phí đổi sau ở mức trung bình (thêm MFA sau go-live không tốn quá nhiều nếu thiết kế đúng ngay từ đầu, nhưng đổi phương thức MFA sau khi user đã đăng ký thì tốn UX)
Ép ra cấu trúc gì Identity/Access module cần bước xác thực thứ hai (TOTP app / SMS OTP / khác — chưa chốt phương thức cụ thể, xem OQ-024 mới) trong luồng đăng nhập Admin; cần lưu trạng thái MFA đã bật/thu hồi được
Quyết định cần ADR Không bắt buộc ADR — radar ước lượng ~4 (đảo ngược trung bình=1 · bán kính hẹp, 1 module=0 · chạm QAS-012 Must trực tiếp=2 · ràng buộc trong 1 release, có thể đổi nhà cung cấp MFA sau=1 · chưa tranh cãi=0). Theo decision-radar.md §2 (3–4 điểm) ⇒ DEC-nn là đủ khi Tech Lead chốt phương thức cụ thể ở hoạt động sec. Ngoại lệ: nếu chọn nhà cung cấp MFA bên thứ ba ràng buộc hợp đồng dài hạn, nâng lên ADR theo decision-radar.md §4 "ngoại lệ tiền lệ".
Trạng thái Đã ghi nhận — quyết định cụ thể (phương thức MFA) để hoạt động sec chốt bằng DEC-nn, không nhất thiết ADR

ASR-010 — HA/DR cho nhóm dịch vụ giao dịch lõi: RPO ≤15 phút, RTO ≤1 giờ, bắt buộc diễn tập trước AG2 [Must]

Phát biểu Payment, Cart & Order, Identity & Access phải có khả năng khôi phục sau sự cố với RPO ≤15 phút và RTO ≤1 giờ; con số này phải được chứng minh bằng diễn tập (failover drill) thật trước khi AG2 được ký — không chấp nhận RTO/RPO chỉ tồn tại trên giấy.
Nguồn QAS-008 · OQ-022 (đã chốt điều kiện qua DEC-12: diễn tập là điều kiện tiên quyết AG2)
Vì sao định hình kiến trúc Chi phí đổi sau cao (thiết kế lại chiến lược backup/failover sau khi đã go-live là một dự án riêng, có rủi ro downtime khi thực hiện) + cắt ngang (ảnh hưởng chiến lược backup, network, và runbook vận hành của cả 3 service lõi) + chạm QAS Must trực tiếp
Ép ra cấu trúc gì Chiến lược backup point-in-time (RPO ≤15 phút ⇒ tần suất backup/WAL archiving tương ứng); kiến trúc Multi-AZ + quy trình failover có runbook; lịch diễn tập cụ thể — vẫn chưa có, OQ-022 giữ mở chờ Ops/SRE
Quyết định cần ADR Có — ADR-009 (dự kiến) — "Chiến lược HA/DR cho nhóm dịch vụ giao dịch lõi". Radar ước lượng ~9 (đảo ngược cao=2 · bán kính 3 service lõi + toàn bộ vận hành=2 · chạm QAS-008 Must trực tiếp=2 · ràng buộc hạ tầng ≥1 năm=2 · chưa tranh cãi nhưng con số kế thừa từ SAD.md chưa được SA thiết kế lại=1). ≥8 ⇒ bắt buộc bài đo (diễn tập DR) trước Accepted — đây chính là điều kiện đã chốt ở DEC-12/OQ-022, nhất quán với decision-radar.md §6.
Trạng thái Đã ghi nhận — ADR-009 chưa viết; input bắt buộc cho hoạt động inf kế tiếp; chặn Accepted cho tới khi diễn tập DR chạy (đã là điều kiện ký AG2, không chỉ điều kiện Accepted của riêng ADR này)

ASR-011 — Observability phải cảnh báo lỗi 5xx tăng đột biến trong ≤1 phút cho nhóm giao dịch lõi [Must]

Phát biểu Sự cố lỗi 5xx tăng đột biến ở Cart & Order, Payment, Identity phải được cảnh báo tự động trong ≤1 phút; on-call phải acknowledge trong ≤15 phút.
Nguồn QAS-013
Vì sao định hình kiến trúc Cắt ngang (mọi service lõi cần cùng chuẩn logging/metric để pipeline cảnh báo hoạt động nhất quán) + chạm QAS Must trực tiếp; chi phí đổi sau ở mức trung bình (đổi công cụ observability sau này khả thi nhưng tốn công di chuyển dashboard/alert đã cấu hình)
Ép ra cấu trúc gì Chuẩn log/metric/trace thống nhất cho 3 service lõi; pipeline cảnh báo (CloudWatch Synthetics/Alarms hoặc tương đương) kết nối kênh on-call (PagerDuty/OpsGenie); ngưỡng cấu hình cảnh báo phải khớp ≤1 phút
Quyết định cần ADR Có — ADR-010 (dự kiến) — "Kiến trúc observability & alerting cho dịch vụ giao dịch lõi". Radar ước lượng ~6 (đảo ngược trung bình=1 · bán kính 3 service lõi=1 · chạm QAS-013 Must trực tiếp=2 · ràng buộc trong khoảng GĐ2/GĐ3, có thể đổi công cụ=1 · chưa tranh cãi=1).
Trạng thái Đã ghi nhận — ADR-010 chưa viết; input cho hoạt động inf (observability) kế tiếp

ASR-012 — Toàn bộ hạ tầng phải chạy trên AWS [Must — ràng buộc đầu vào]

Phát biểu Không dùng cloud khác hoặc on-premise cho bất kỳ thành phần nào của hệ thống.
Nguồn CON-03 (cứng, đã xác nhận vòng 3 Q&A brief — không phải sở thích SA)
Vì sao định hình kiến trúc Ràng buộc công nghệ không đảo ngược — nhưng đây là ràng buộc đầu vào (khách hàng đã chốt), không phải một quyết định do SA cân nhắc và chọn giữa nhiều phương án
Ép ra cấu trúc gì Loại toàn bộ phương án dùng cloud khác/on-prem ngay từ OPT (đã thực hiện ở GĐ1); mọi dịch vụ managed trong ASR-001…011 (ECS Fargate, RDS, SQS/EventBridge, CloudWatch) đều phải là dịch vụ AWS
Quyết định cần ADR Không cần ADR riêng — đây là input, không phải quyết định SA; đã được phản ánh làm điều kiện tiên quyết trong ADR-001 (kiểu kiến trúc tổng thể). Ghi lại ở đây để đầy đủ theo yêu cầu bao phủ, không phải vì cần quyết định thêm.
Trạng thái Đã ghi nhận — không cần thiết kế thêm, chỉ cần tuân thủ xuyên suốt SAD/INF

ASR-013 — Tích hợp bắt buộc VNPay/Momo (thanh toán) + GHN/GHTK (vận chuyển, có fallback chéo) [Must]

Phát biểu Hệ thống phải tích hợp đúng 4 đối tác đã chốt (không phải "chờ chọn tuỳ ý"); GHN/GHTK phải có cơ chế fallback chéo khi một bên lỗi. Mỗi đối tác cần chính sách timeout/retry/idempotent nhất quán.
Nguồn CON-04 (cứng về danh tính đối tác) · ARISK-03 (VNPay/Momo) · ARISK-04 (GHN/GHTK fallback chưa kiểm chứng)
Vì sao định hình kiến trúc Ràng buộc hợp đồng/công nghệ không đảo ngược (đổi đối tác thanh toán/vận chuyển là quyết định kinh doanh + hợp đồng, không phải cấu hình) + cắt ngang (Payment Service phụ thuộc VNPay/Momo; Shipping & Fulfillment phụ thuộc GHN/GHTK; cùng một chính sách resilience nên áp dụng nhất quán)
Ép ra cấu trúc gì Adapter/anti-corruption layer riêng cho từng đối tác; chính sách timeout/retry/idempotent chung (kế thừa đề xuất từ SAD.md §3.4: VNPay/Momo 10s, GHN/GHTK 8s — chưa kiểm chứng sandbox thật); cơ chế fallback GHN↔GHTK cần test riêng
Quyết định cần ADR Có — ADR-011 (dự kiến) — "Chính sách resilience khi đối tác thanh toán/vận chuyển bên ngoài lỗi (timeout/retry/fallback chung)". Radar ước lượng ~6 (đảo ngược trung bình=1 · bán kính Payment + Shipping=1 · chạm gián tiếp QAS-002/QAS-014=1 · ràng buộc hợp đồng đối tác, khó đổi giữa chừng=2 · chưa tranh cãi=1). Đây cũng là input trực tiếp cho hoạt động fail (đường lỗi) — không trùng lặp, ADR chốt chính sách chung, FAIL áp dụng chi tiết từng phụ thuộc.
Trạng thái Đã ghi nhận — ADR-011 chưa viết; phụ thuộc sandbox thật của cả 4 đối tác (chưa có, CON-04/ARISK-03/04) để kiểm chứng đầy đủ

ASR-014 — Ranh giới nhóm triển khai (deployment grouping) phải khớp năng lực đội thi công thật (Conway) [Must]

Phát biểu Việc gom module vào 2–3 nhóm ECS Fargate (thay vì ~10 service độc lập như P1) phải phản ánh đúng số người/kỹ năng đội thi công thật, không chỉ theo giả định "team MVP chuẩn" (DEC-02, 🔴 chưa xác nhận) hay đội hình đề xuất của hồ sơ thầu (9 vị trí TB, đỉnh 10).
Nguồn DEC-02 (giả định tạm, chưa xác nhận) · CON-05 (con người, chưa xác nhận số thật) · OQ-002/OQ-010 (còn mở) · OPT §1/§4 (tiêu chí 5 "Năng lực team & vận hành")
Vì sao định hình kiến trúc Chi phí đổi sau cao (vẽ lại ranh giới triển khai sau khi team đã quen vận hành theo ranh giới cũ tốn công tái tổ chức CI/CD + on-call) + cắt ngang (ảnh hưởng toàn bộ cách tổ chức code, quyền truy cập, và trách nhiệm vận hành của mọi module)
Ép ra cấu trúc gì Nhóm "giao dịch" (Cart/Order/Catalog, scale nhanh) tách khỏi nhóm "hỗ trợ" (Seller/Promo/Review/Notify/Shipping) — theo đề xuất OPT §3 P2; ranh giới cụ thể này chưa được xác nhận lại ở mức chi tiết ASR khi có số team thật (xem ASM-19 mới)
Quyết định cần ADR Có — ADR-012 (dự kiến) — "Ranh giới nhóm triển khai (deployment boundary) theo domain và năng lực đội" — khác ADR-001 (kiểu kiến trúc tổng thể: monolith hay không) ở chỗ đây là quyết định cụ thể module nào nằm nhóm nào. Radar ước lượng ~7 (đảo ngược cao=2 · bán kính toàn bộ tổ chức code/vận hành=2 · chạm gián tiếp mọi QAS (mở rộng, quan sát được)=1 · ràng buộc ≥1 năm=1 · chưa tranh cãi, nhưng phụ thuộc số liệu chưa xác nhận=1).
Trạng thái Đã ghi nhận — ADR-012 chưa viết; phụ thuộc OQ-010 (Tech Lead xác nhận đội thật) trước khi có thể coi ranh giới này là vững

ASR-015 — Chiến lược đa ngôn ngữ (5 thứ tiếng) phải tách chuỗi hiển thị khỏi code ngay từ đầu [Should]

Phát biểu Nội dung hiển thị (VI mặc định/EN/ZH/KO/JA) phải được quản lý tách biệt khỏi logic code (resource file/bảng dịch theo locale), để bổ sung ngôn ngữ mới không cần sửa code nghiệp vụ.
Nguồn DRV-09 (Should, không chặn MVP)
Vì sao định hình kiến trúc Chủ yếu ràng buộc kiến trúc bảo trì dài hạn — nếu không tách ngay từ đầu, retrofit i18n sau khi đã có hàng trăm màn hình là công việc tốn kém hơn nhiều lần so với làm đúng từ đầu; bán kính rộng (toàn bộ tầng hiển thị FE) nhưng không chạm QAS Must nào (chỉ Should)
Ép ra cấu trúc gì Framework i18n ở tầng FE (tách string ra resource file theo locale); chiến lược lưu trữ nội dung động (VD tên sản phẩm do seller nhập — có cần dịch không, ai dịch — chưa chốt, xem OQ-025 mới)
Quyết định cần ADR Borderline, không bắt buộc — radar ước lượng ~5 (đảo ngược trung bình=1 · bán kính rộng nhưng chỉ FE=1 · không chạm QAS Must (chỉ Should)=0 · ràng buộc trong khoảng dự án=1 · chưa tranh cãi=0, +2 vì đây là danh mục "Chiến lược đa ngôn ngữ" được decision-radar.md §3 liệt kê rõ trong nhóm Frontend). Khuyến nghị: nếu Tech Lead không thấy tranh cãi, ghi DEC-nn + đưa framework cụ thể vào AGD (GĐ3) thay vì mở một ADR riêng; nâng lên ADR-013 nếu phát sinh tranh luận về công nghệ i18n cụ thể.
Trạng thái Đã ghi nhận — quyết định công cụ cụ thể để hoạt động sad/GĐ3 (AGD) chốt

B3. Ma trận ASR × CMP

Chưa điền — SAD (hoạt động 3, kế tiếp) chưa tồn tại nên chưa có CMP-nn để đối chiếu. Khung để hoạt động sad điền khi có bảng component:

CMP-nn (điền ở hoạt động sad)
ASR-001…015 (chờ SAD)

🔴 Nhắc cho hoạt động sad kế tiếp: mỗi CMP phải phục vụ được ít nhất một ASR ở trên (cột "cái nó KHÔNG làm" của SAD giúp kiểm tra ngược); ASR-012 (AWS) không sinh ra CMP riêng, chỉ là ràng buộc nền cho mọi CMP.


C. Đối chiếu với BR/ROLE của bộ BA

BR/ROLE (BA) Nội dung gốc ASR tương ứng Khớp? Hành động
BR-CART-01 Tách đơn theo seller ASR-003 ✅ Không lệch — BR-CART-01 chính là nguồn của ASR-003; cơ chế chi tiết vẫn chờ OQ-011 (BA)
BR-CART-02 Giữ tồn kho khi checkout (chống oversell) (không có ASR riêng) ➖ N/A Đây là quy tắc nghiệp vụ thuần (điều kiện hành động), không ép cấu trúc kiến trúc riêng — thuộc SAD/logic thi công, không phải ASR
BR-CART-03 Giới hạn giá trị đơn COD (chưa chốt) (không có ASR) ➖ N/A Đây là quyết định nghiệp vụ/rủi ro tài chính (PO chọn phương án), không ép cấu trúc kiến trúc — nếu PO chọn phương án (b) "xác thực bổ sung" (OTP), có thể phát sinh ASR mới (tích hợp OTP) — chưa xảy ra
BR-CART-04 Điều kiện chọn phương thức thanh toán Gián tiếp qua ASR-002/ASR-013 🟡 Một phần Không có ASR riêng vì bản thân việc "cho chọn 1 trong 3 phương thức" không ép cấu trúc — cấu trúc bị ép là do mỗi phương thức cần tích hợp riêng (ASR-002 Payment, ASR-013 đối tác ngoài)
BR-CART-05 Không lưu thông tin thẻ ASR-002 ✅ Khớp hoàn toàn
BR-CART-06 Xác thực webhook thanh toán ASR-004 ✅ Khớp hoàn toàn
BR-CART-07 Điều kiện tối thiểu Guest checkout (không có ASR) ➖ N/A Danh sách field bắt buộc là chi tiết UI/validation, không ép cấu trúc kiến trúc
ROLE-01 Guest / ROLE-02 Customer (RBAC §1, §2) 2 vai trò, phạm vi dữ liệu theo session_id/customer_id ASR-007 ✅ Khớp — ASR-007 chính là hoá kỹ thuật của ranh giới "không xem được giỏ/đơn người khác" trong ma trận RBAC §2
RBAC §4 (PII địa chỉ/SĐT chia sẻ cho seller) Mức che khi hiển thị cho seller — chưa chốt ASR-008 🟡 Một phần ASR-008 bao phủ phần "vùng lưu trữ + data minimization"; phần "mức che hiển thị cụ thể" vẫn chờ Pháp chế/Bảo mật — ghi nhận là chưa tách rời được cho tới khi có người đó
RBAC §8 OQ-012 (RISK-01 phương án OTP cho Guest giá trị cao) Guest cần giới hạn/OTP cho đơn giá trị cao? (chưa có ASR — phụ thuộc BR-CART-03) ➖ Chờ PO Nếu PO chọn phương án OTP ở BR-CART-03, sẽ phát sinh ASR mới (tích hợp OTP) ở lần cập nhật ASR tiếp theo

BR-nnn ép ràng buộc kiến trúc ⇒ ADR (theo artifact-map.md §7) — bảng trên xác nhận 4/7 BR-CART có ASR tương ứng trực tiếp; 3 còn lại (BR-CART-02/03/07) là quy tắc nghiệp vụ thuần không ép cấu trúc, đúng theo tiêu chí B1 (không phải mọi BR đều thành ASR).


D. Giả định & Ngoài phạm vi

Giả định (tiếp số toàn dự án — ASM-01…18 đã dùng ở CTX/OPT/TCO/QAS, bắt đầu ASM-19):

ID Giả định Cách xác minh Nếu sai thì ASR/ADR nào đổi
ASM-19 Ranh giới "nhóm giao dịch" (Cart/Order/Catalog) vs "nhóm hỗ trợ" (Seller/Promo/Review/Notify/Shipping) theo OPT §3 P2 vẫn là ranh giới đúng ở mức chi tiết ASR-014/ADR-012 Tech Lead xác nhận lại tại hoạt động sad, sau khi có số đội thi công thật (OQ-010) ASR-014/ADR-012 (dự kiến) — nếu team thật nhỏ hơn/khác cơ cấu, phải vẽ lại nhóm (VD gộp thêm module vào 1 nhóm duy nhất)
ASM-20 MFA cho Admin dùng TOTP app (không phụ thuộc thêm nhà cung cấp SMS gateway) làm mặc định đề xuất cho ASR-009 Security xác nhận phương thức tại hoạt động sec (OQ-024 mới) ASR-009 — nếu cần SMS OTP, phát sinh phụ thuộc nhà cung cấp SMS mới (chi phí + ASR phụ thuộc bên ngoài mới)
ASM-21 Nội dung do seller tự nhập (tên sản phẩm, mô tả) không cần dịch tự động sang 5 ngôn ngữ ở MVP — chỉ UI hệ thống (nhãn, thông báo) cần i18n theo ASR-015 PO xác nhận phạm vi i18n tại hoạt động sad/GĐ3 (OQ-025 mới) ASR-015 — nếu seller content cũng cần dịch, cần thêm chiến lược dịch thuật (thủ công/máy) và ảnh hưởng DAT (lưu bản dịch)

ASM-01…18 của CTX/OPT/TCO/QAS vẫn áp dụng nguyên trạng — không lặp lại nội dung, chỉ tham chiếu (đặc biệt ASM-04→ASR-008, ASM-07→ASR-005, ASM-08→ASR-006).

Ngoài phạm vi:

  • SAD/ADR/ICD/DAT/SEC/INF/FAIL — chưa thực hiện ở lượt chạy này (chỉ hoạt động asr). Mọi "ADR ứng viên" ở §B2 là đề xuất số thứ tự, chưa phải file ADR thật — hoạt động adr kế tiếp xác nhận lại số thật theo thứ tự viết, không nhất thiết khớp số đề xuất ở đây.
  • Ma trận ASR × CMP (§B3) — để trống, chờ SAD.
  • BR-CART-02/03/07 không có ASR tương ứng (xem §C) — đây là quyết định nghiệp vụ thuần, đúng theo tiêu chí B1, không phải bỏ sót.
  • ASR mới có thể phát sinh nếu PO chọn phương án OTP cho BR-CART-03 (xem §C, dòng cuối) — chưa xảy ra ở lượt này.

E. Open Questions

Tiếp số sổ SA (00-index/OQ_e-commerce.md đang ở OQ-023) — bắt đầu OQ-024.

ID Câu hỏi Hỏi ai Từ ngày Chặn gì Hệ quả nếu trả lời ngược
OQ-024 Phương thức MFA cho Admin là gì — TOTP app (Google Authenticator/Authy), SMS OTP, hay khoá bảo mật cứng? Tech Lead + Security 2026-09-14 ASR-009; thiết kế SEC (mô hình xác thực) Nếu chọn SMS OTP: phát sinh phụ thuộc nhà cung cấp SMS gateway mới (chi phí + ARISK phụ thuộc ngoài mới, tương tự ARISK-10); nếu chọn TOTP app: không phát sinh chi phí vận hành thêm nhưng cần hướng dẫn user cài app
OQ-025 Nội dung do seller tự nhập (tên/mô tả sản phẩm) có cần dịch sang 5 ngôn ngữ ở MVP không, hay chỉ UI hệ thống cần i18n? Nếu cần dịch, ai cung cấp bản dịch (dịch máy tự động hay seller tự nhập đa ngôn ngữ)? PO + Tech Lead 2026-09-14 ASR-015; DAT (có cần lưu bản dịch theo locale không) Nếu cần dịch nội dung seller: DAT phải thêm mô hình lưu trữ đa ngôn ngữ cho Product/ProductVariant (ngoài phạm vi module Giỏ hàng & Checkout hiện tại), tăng effort đáng kể so với chỉ dịch UI tĩnh

Nhắc: cộng với các OQ còn mở ảnh hưởng trực tiếp ASR ở tài liệu này — OQ-002/OQ-010 (team thật, chặn ASR-001/ASR-014), OQ-007 (đại diện Pháp chế, chặn ASR-008), OQ-011 (BA, cơ chế tách đơn, chặn ASR-003), OQ-012 (thời điểm POC-01, chặn ASR-001/ASR-005), OQ-018…023 (số QAS nguồn của nhiều ASR) — xem sổ đầy đủ 00-index/OQ_e-commerce.md.


Tự chấm

① Bảng tự chấm Gate AG2 (workflow.md §2 — chỉ dòng liên quan tới ASR, tự chấm sớm)

# Tiêu chí ☐/✅ Ghi chú
1 ASR liệt kê yêu cầu thực sự định hình kiến trúc, mỗi cái truy về DRV hoặc QAS ✅ 15 ASR, mỗi cái có cột "Nguồn" trỏ về DRV/CON/QAS/BR/ROLE cụ thể, không có ASR "mồ côi" nguồn
— QAS — mọi NFR đã lượng hoá ✅ (đã đạt ở hoạt động qas trước) Xem QAS_e-commerce_v1.0.md, không lặp lại ở đây
— SAD có sơ đồ C4 ☐ Chưa tới — hoạt động 3, kế tiếp
2 ADR-nnn tồn tại cho mọi quyết định đạt ngưỡng radar ☐ Chưa viết ADR nào — đúng theo yêu cầu điều phối "không viết ADR ở lượt này"; §B2 đã liệt kê đủ 12/15 ứng viên ADR (radar 6–9) để hoạt động adr kế tiếp không phải dò lại từ đầu
— ICD/DAT/SEC/INF/FAIL ☐ Chưa tới — hoạt động 4–8
— sa-conformance báo coverage ASR → ADR/CMP ≥ 100% ☐ 0/15 — kỳ vọng đúng lúc này (đã ghi nhận là "🟠 Nợ" trong DTM/ADL từ trước khi file này tồn tại), sẽ chặn AG2 thật nếu vẫn 0/15 khi hoạt động adr/sad đã chạy xong

Kết luận tự chấm (riêng phần ASR): Hoạt động asr hoàn tất đúng phạm vi được giao — 15 ASR có nguồn, có "vì sao định hình kiến trúc", có ADR ứng viên (hoặc lý do không cần). AG2 còn xa vì 7/9 hoạt động khác của GĐ2 chưa chạy — đây là tiến độ kỳ vọng, không phải lỗi.

② Checklist D1–D12 (design-rules.md)

# Mục ☐/✅ Ghi chú
D1 Một ADR một quyết định N/A Tài liệu này không viết ADR — chỉ liệt kê ứng viên; mỗi ứng viên đã được tách theo đúng nguyên tắc một quyết định (VD ADR-001 kiểu kiến trúc tổng thể tách khỏi ADR-012 ranh giới nhóm triển khai cụ thể, dù liên quan)
D2 Không NFR định tính; đủ 4 câu N/A ASR không phải QAS — không áp dụng trực tiếp; mọi ASR tham chiếu đúng QAS đã lượng hoá ở hoạt động trước, không tự đặt số mới
D3 Nêu phương án bị loại + lý do gắn CON/QAS ✅ (kế thừa) ASR-001 tham chiếu OPT §5 (P1/P3/P4 đã loại) làm nền; không lặp lại nội dung, chỉ dẫn
D4 Sơ đồ khai báo mức + legend N/A Không có sơ đồ mới trong tài liệu này
D5 Interface có chủ/contract N/A Chưa tới ICD
D6 Phụ thuộc ngoài process có timeout/retry 🟡 Một phần ASR-004/ASR-013 đã nêu yêu cầu (idempotent, timeout/retry) nhưng chi tiết đầy đủ 4 câu hỏi D6 thuộc hoạt động fail kế tiếp
D7 Một chủ sở hữu dữ liệu 🟡 Một phần ASR-006 xác nhận 1 RDS chính là chủ cho các module ngoài Payment, ASR-002 xác nhận Payment có DB riêng — chi tiết từng thực thể để DAT
D8 Ràng buộc có FIT hoặc nhãn khuyến nghị N/A Chưa tới AGD/FIT (GĐ3)
D9 Con số hạ tầng quy ra tiền + nguồn N/A ASR không thêm con số hạ tầng mới — kế thừa TCO/ARISK
D10 Không quyết định thay người có thẩm quyền ✅ ASR-008 ghi rõ phủ quyết thuộc Security/Legal; ASR-002 ghi Security cần ký; mọi chỗ chưa rõ đều có OQ kèm hệ quả phương án ngược (§E, và trong từng khối ASR)
D11 Có mục "Ngoài phạm vi" + ASM-nn ✅ §D đầy đủ — ASM-19…21 mới, có cách xác minh/hệ quả; mục "Ngoài phạm vi" liệt kê rõ những gì chưa làm
D12 Câu quy định thẩm quyền sơ đồ vs văn bản ✅ Có ngay sau Change Log

③ Bảng đối chiếu với bộ BA

Xem Phần C ở trên (BR/ROLE × ASR) — 4/7 BR-CART có ASR tương ứng trực tiếp; 3 còn lại xác nhận đúng là không ép cấu trúc (không phải bỏ sót). Không có hành động "BA cập nhật SRS" nào cần thiết ở lượt này vì không phát hiện lệch nội dung, chỉ có 1 dòng chờ quyết định PO (BR-CART-03) có thể sinh ASR mới sau.

④ Danh sách OQ mở kèm người phải trả lời, chặn gì

Xem §E (mới: OQ-024, OQ-025) cộng các OQ còn mở từ CTX/OPT/ARISK/QAS (OQ-002/004/005/006/007/008/010/012/013…023) — sổ đầy đủ tại 00-index/OQ_e-commerce.md. Ba câu quan trọng nhất cho tiến độ ASR→ADR/SAD kế tiếp: OQ-010 (team thật — chặn ASR-001/ASR-014), OQ-012 (thời điểm POC-01 — chặn ASR-001/ASR-005), OQ-007 (đại diện Pháp chế — chặn ASR-008).

Nhắc: AG2 cần Tech Lead + Security + Ops/SRE ký — còn xa vì SAD/ADR/ICD/DAT/SEC/ INF/FAIL chưa chạy. Hoạt động kế tiếp bắt buộc là sad (hoạt động 3, theo đúng thứ tự 1→2→3 của SKILL.md), dùng chính 15 ASR ở tài liệu này làm đầu vào để phân rã component và vẽ C4; ADR-001 (kiểu kiến trúc tổng thể) nên được viết ngay khi sad/adr bắt đầu, theo đúng cảnh báo đã có từ DTM §11/ADL §8.