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

324 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DTM — Decision Traceability Matrix — e-commerce
| | |
|---|---|
| **Cập nhật** | 2026-09-15 |
| **Author** | SA (qua skill `sa-2-architecture`, hoạt động `adr`) — cập nhật thay `sa-conformance` vì `ADR-014…017` vừa được sinh (trả hết nợ ADR, `DEC-31`); `sa-conformance` nên rà lại độc lập ở lần đồng bộ kế tiếp. GĐ2 nay đủ 9/9 hoạt động (`qas`/`asr`/`sad`/`icd`/`dat`/`sec`/`inf`/`fail`/`adr`) — §3 (`ASR × ADR`) cập nhật thêm `ADR-014` cho `ASR-004`/`ASR-005`, `ADR-015` cho `ASR-007`; bổ sung ánh xạ `QAS-007 → ADR-016` (ngoài chuỗi `ASR` chính) |
| **Nguồn quét** | `01-context/CTX_e-commerce_v1.0.md` (v1.2) · `01-context/OPT_e-commerce_v1.0.md` (v1.0) · `01-context/TCO_e-commerce_v1.0.md` (v1.1) · `01-context/ARISK_e-commerce_v1.0.md` (v1.0) · `02-architecture/QAS_e-commerce_v1.0.md` (v1.0) · `02-architecture/ASR_e-commerce_v1.0.md` (v1.0) · `02-architecture/SAD_e-commerce_v1.0.md` (v1.3) · `02-architecture/ICD_e-commerce_v1.0.md` (v1.0) · `02-architecture/DAT_e-commerce_v1.0.md` (v1.1) · `02-architecture/SEC_e-commerce_v1.0.md` (v1.1) · `02-architecture/INF_e-commerce_v1.0.md` (v1.1) · `02-architecture/FAIL_e-commerce_v1.0.md` (v1.1) · `02-architecture/adr/ADR-001…017_*.md` (mới: `ADR-014…017`) · `00-index/OQ_e-commerce.md` · `00-index/DEC_e-commerce.md` (v1.29). |
| **Artifact 🟡 Draft bị tách riêng** | `CTX`/`OPT`/`TCO`/`ARISK`/`QAS`/`ASR`/`SAD`/`ICD`/`DAT`/`SEC`/`INF`/`FAIL` đều `🟡 Draft` (duyệt **từng phần** bởi PO/Tech Lead uỷ quyền — điều phối dự án, **không phải chữ ký thật**, `OQ-004` còn mở). 17 `ADR` đều `Proposed` (chưa `Accepted`). Mọi liên kết rút ra từ các file này được ghi nhận nhưng **không tính là đã "chặn gate qua"** — AG1 toàn phần chưa ký, AG2 còn xa. |
> Ma trận **trống trung thực tốt hơn ma trận đầy do suy diễn**. Ô trống là danh sách việc;
> ô điền bừa là cảm giác an toàn giả. Cập nhật lần này chỉ điền được chuỗi `DRV → (ASR/QAS chưa
> có)` và ghi nhận `ARISK`/`POC`/`ASM` của GĐ1 — theo đúng yêu cầu đồng bộ sau khi GĐ1 hoàn tất.
> Không tạo nội dung mới, không sửa artifact nguồn.
---
## 1. Báo cáo coverage
| Chuỗi | Tỉ lệ | % | Mức | ID bị đứt | Chặn gate |
|---|---|---|---|---|---|
| `DRV` → `ASR`/`QAS` | 9/9 | 100% | 🟢 | Không — mọi `DRV-01…09` nay có `QAS`/`ASR` phục vụ (xem `QAS §C`, `ASR §B2`) | AG2 |
| `ASR` → `ADR` | 12/15 | 80% | 🟡 | `ASR-009`, `ASR-012`, `ASR-015` — không có `ADR` (xem lý do ở §3, không phải chặn) | AG2 — mục tiêu 15/15 *hoặc* lý do hợp lệ; đã đạt |
| `ADR` → nguồn (`DRV`/`CON`/`QAS`/`ASR`) | 15/17 | 88% | 🟡 | `ADR-016`/`ADR-017` không có `ASR` trực tiếp — nhưng có nguồn hợp lệ khác (`ADR-016` → `QAS-007`; `ADR-017` → `CON-05`/`D9`), xem §3 ghi chú | — |
| `ADR` → `CMP` | 0/12 | 0% | — *(chưa tới — `SAD §8` mới link file `ADR`, chưa có cột `CMP` do `ADR` kích hoạt trực tiếp; quan hệ `ASR × CMP` đã đủ 15/15 ở `SAD §4.3`)* | Không tính là đứt — `ADR` không nhất thiết map 1-1 sang `CMP` | AG2 |
| `QAS` (Must) → bài đo | 0/0 | — | — | — | AG3 |
| `QAS` (Must) → kết quả đo thật | 0/0 | — | — | — | AG3 |
| Ràng buộc `AGD` → `FIT` hoặc nhãn khuyến nghị | 0/0 | — | — | — | AG3 |
| `CMP` → `ASR` hoặc nhu cầu chức năng | 0/0 | — | — | — | — |
| `IF` → chủ sở hữu contract | 0/0 | — | — | — | AG2 |
| Thực thể dữ liệu → đúng một chủ | 0/0 | — | — | — | AG2 |
| `THR` → biện pháp → cách kiểm chứng | 0/0 | — | — | — | AG2 |
| Phụ thuộc ngoài process → `FM` | 0/0 | — | — | — | AG2 |
**Riêng cho GĐ1 (không có cột chính thức ở trên, ghi bổ sung theo yêu cầu đồng bộ):**
| Chuỗi bổ sung GĐ1 | Tỉ lệ | Ghi chú |
|---|---|---|
| `ARISK` có biện pháp hạ rủi ro cụ thể | 9/10 | `ARISK-07` chỉ có "trình số liệu", chưa "đã hạ" — chờ PO/tài chính xác nhận `TCO` (`OQ-005`) |
| `ARISK` mức 🔴 Cao có kế hoạch `POC` khi cần | 2/2 cần POC | `ARISK-01`→`POC-01`, `ARISK-02`→`POC-02` — **cả hai POC chưa chạy** |
| `POC` đã chạy / tổng `POC` đã lập | 0/2 | `POC-01`, `POC-02` — tiêu chí PASS/FAIL đã viết trước (`ARISK §6`), chưa có ngày chạy |
| `ASM` đã xác minh / tổng `ASM` | 0/15 | `ASM-01..15` (CTX 01-06, OPT 07-09, TCO 10-15) — toàn bộ vẫn ở trạng thái giả định, xem §2.1 |
## 2. `DRV` × `ASR` / `QAS`
*Cập nhật 2026-09-15 — `QAS`/`ASR` nay tồn tại (hoạt động `qas`/`asr` của `sa-2-architecture` đã
chạy). Mọi `DRV` dưới đây nay có ít nhất một `QAS`/`ASR` phục vụ trực tiếp hoặc gián tiếp.*
| `DRV` | Phát biểu ngắn | Ưu tiên | Confidence nguồn | `ASR`/`QAS` phục vụ | Đứt |
|---|---|---|---|---|---|
| `DRV-01` | Chưa có luồng giỏ hàng–checkout–thanh toán ⇒ không ra mắt được MVP (blocker) | Must | 🔴 (BA chưa ký G1, nguồn trực tiếp `BRIEF`) | `ASR-001`, `ASR-003`, `QAS-002` | 🟢 |
| `DRV-02` | Giỏ hàng ≥2 seller có nguy cơ tỷ lệ bỏ giỏ cao hơn ở checkout | Must | 🔴 (nguồn trực tiếp, baseline thật chưa có) | `ASR-003`, `QAS-002`, `QAS-003` | 🟢 |
| `DRV-03` | Thanh toán không lưu thẻ để giảm phạm vi tuân thủ PCI-DSS | Must | 🔴 (nguồn trực tiếp) | `ASR-002` | 🟢 |
| `DRV-04` | Quy mô mục tiêu lớn, đỉnh hàng nghìn–chục nghìn concurrent user mùa flash sale | Must | 🔴 (chỉ có nguồn `SAD.md`/brief, chưa qua BRIEF module hoá) | `ASR-001`, `ASR-014`, `QAS-001`, `QAS-005`, `QAS-006`, `QAS-009` | 🟢 |
| `DRV-05` | Uptime 99.9% cho dịch vụ giao dịch lõi | Must | 🔴 (giả định mặc định trong brief, chưa phải SLA) | `ASR-010`, `QAS-007`, `QAS-008` | 🟢 |
| `DRV-06` | Dòng tiền minh bạch 3 bên (khách–sàn–seller), hoa hồng + payout có kỳ giữ tiền | Must | 🔴 (chỉ có nguồn `SAD.md`/brief) | `ASR-003`, `ASR-005` | 🟢 |
| `DRV-07` | Chia sẻ PII cho seller khi tách đơn chưa rà soát NĐ13/2023 | Must | 🔴 (nguồn trực tiếp `RISK-03` BA) | `ASR-008`, `QAS-011` | 🟢 |
| `DRV-08` | Xác nhận thanh toán qua webhook bên thứ ba chưa xác minh khả thi gần thời gian thực | Must | 🔴 (nguồn trực tiếp `RISK-02`/`ASM-01` BA) | `ASR-004`, `QAS-014` | 🟢 |
| `DRV-09` | Đa ngôn ngữ 5 thứ tiếng để mở rộng thị trường | Should | 🔴 (chỉ có nguồn `SAD.md`/brief) | `ASR-015` *(borderline, không có `ADR` — xem §3)* | 🟢 |
**Đọc ngược** — `ASR`/`QAS` không sinh từ `DRV`/`CON` nào:
| ID | Sinh từ đâu | Hợp lệ? |
|---|---|---|
| *(rà 15 `ASR` + 14 `QAS` — không phát hiện `ASR`/`QAS` nào thiếu nguồn `DRV`/`CON`/`BR`/`ROLE`; mỗi mục đều có cột "Nguồn" trong `ASR §B2`/`QAS §A3`)* | | ✅ |
**Kết luận chuỗi này:** 9/9 `DRV` nay có `ASR`/`QAS` phục vụ (🟢) — đạt mục tiêu đặt ra ở lượt
đồng bộ trước. Không còn `DRV` mồ côi.
### 2.1 `ARISK` / `POC` / `ASM` của GĐ1 — ghi nhận để mang sang GĐ2
*(Không phải ma trận truy vết chính thức của DTM — GĐ1 không có `ASR`/`ADR`/`CMP` để đối
chiếu. Ghi ở đây theo yêu cầu đồng bộ, để `sa-2-architecture` không phải đọc lại toàn bộ 4 file
GĐ1 mới biết còn gì treo.)*
**`ARISK` mức 🔴 Cao (6/10) — chưa đóng, phải mang sang GĐ2:**
| `ARISK` | Chủ | Chặn gì ở GĐ2 | `POC`/biện pháp |
|---|---|---|---|
| `ARISK-01` | Tech Lead | `ADR-005` chuyển `Accepted` | `POC-01` (chưa chạy) |
| `ARISK-02` | Tech Lead/DBA | `ADR-006` chuyển `Accepted`, `DAT` (hoạt động 5) | `POC-02` (chưa chạy) |
| `ARISK-03` | Tech Lead + PO | `ICD` (VNPay/Momo), `ADR-004` kiểm chứng đầy đủ | Đàm phán sandbox + job đối soát bù (chưa xác minh lại) |
| `ARISK-05` | Tech Lead | `ADR-005`/`ADR-001` chuyển `Accepted` (năng lực đội) | Xác nhận `OQ-010` |
| `ARISK-06` | PO → Legal/Security | `ADR-008` chuyển `Accepted` (chặn hoàn toàn), `DAT`/`INF` (residency NĐ13/2023) | Chỉ định người (`OQ-007`), chưa có |
| `ARISK-07` | PO/tài chính | Ký AG1 (ngân sách vận hành thật) | Trình `TCO` — chưa xác nhận |
**`POC` đã lập, chưa chạy (2/2):**
| `POC` | Hạ rủi ro | Tiêu chí PASS | Hạn | Trạng thái |
|---|---|---|---|---|
| `POC-01` | `ARISK-01` | Throughput ≥100 msg/s sustained 30 phút, p99 ≤2s, 0 mất message | Trước `ADR-001`/`ADR-005` chuyển `Accepted` | Chưa chạy |
| `POC-02` | `ARISK-02` | p95 write ≤300ms, p95 read ≤200ms, CPU RDS <75% | Trước `ADR-001`/`ADR-006` chuyển `Accepted` | Chưa chạy |
**`ASM` chưa xác minh, ảnh hưởng lớn nhất (không liệt kê đủ 15, chỉ các dòng có hệ quả định
lượng theo chính `CTX`/`OPT`/`TCO`):**
| `ASM` | Nội dung ngắn | Nguồn | Hệ quả nếu sai | Hạn |
|---|---|---|---|---|
| `ASM-01` | Số lao động hồ sơ thầu (~3,76 tỷ VND) "trong khoảng hợp lý" | `CTX §5` | Phải loại phương án kiến trúc nặng ở `OPT` nếu ngân sách thật thấp hơn | Trước `OPT` (đã trễ — `OPT` đã chạy dưới giả định này) |
| `ASM-04` | Region `ap-southeast-1` đáp ứng đủ residency NĐ13/2023 | `CTX §5` | Phải chuyển hạ tầng dữ liệu về region VN nếu sai | Trước `DAT`/`INF` GĐ2, chậm nhất trước go-live |
| `ASM-07` | SQS/EventBridge đủ throughput thay Kafka/MSK | `OPT §8` | P2 phải bổ sung Kafka/MSK cho hot-path nếu sai | Trước `ADR` message backbone GĐ2 (`POC-01`) |
| `ASM-08` | 1 cụm RDS chính đủ chịu tải ghi/đọc gộp | `OPT §8` | Phải tách read replica sớm hơn dự kiến nếu sai | Trước `DAT` GĐ2 (`POC-02`) |
| `ASM-11` | Đơn giá AWS `ap-southeast-1` ước tính, chưa tra Pricing Calculator thật | `TCO §8` | ±50% ⇒ hạ tầng 3 năm lệch ±0,9–3,7 tỷ VND | Trước khi duyệt ngân sách (`OQ-013`) |
| `ASM-14` | Số FTE vận hành (dòng nhạy cảm nhất của `TCO`) | `TCO §8` | ±50% ⇒ lệch ±2,7–3,5 tỷ VND | Trước khi chốt `INF` GĐ2 (`OQ-008`) |
*Danh sách đầy đủ `ASM-01..15` xem `CTX §5`, `OPT §8`, `TCO §8`. Không copy lại toàn bộ ở đây
theo nguyên tắc "không sao chép giữa tài liệu" (`artifact-map.md §7`) — tham chiếu bằng ID.*
## 3. `ASR` × `ADR`
*Cập nhật 2026-09-15 — mục tiêu 15/15 `ASR` có ≥1 `ADR` **hoặc** lý do hợp lệ ("ràng buộc đầu
vào"/"không phải quyết định kiến trúc"). Đạt **12/15 có `ADR`, 3/15 có lý do ghi rõ** — không
`ASR` nào bị bỏ sót không giải thích.*
| `ASR` | Phát biểu ngắn | `ADR` hiện thực hoá | Trạng thái ADR | Đứt |
|---|---|---|---|---|
| `ASR-001` | Kiểu kiến trúc tổng thể — Modular Monolith P2 | `ADR-001` | `Proposed` (radar ~7, cần `POC-01`/`POC-02`) | 🟢 |
| `ASR-002` | Payment cô lập PCI-DSS SAQ A | `ADR-002` | `Proposed` (radar ~7, cần Security ký) | 🟢 |
| `ASR-003` | Mô hình `Order`/`OrderSeller` | `ADR-003` | `Proposed` (radar ~6, chờ `OQ-011` BA) | 🟢 |
| `ASR-004` | Idempotency + đối soát webhook | `ADR-004`, `ADR-013`, `ADR-014` *(mới — Transactional Outbox đảm bảo publish nguyên tử cho sự kiện xác nhận/khởi tạo thanh toán, mở rộng tinh thần idempotency/không-mất-giao-dịch sang bước publish)* | `ADR-004`: `Proposed` (radar ~6, chờ sandbox) · `ADR-013`: `Proposed` (radar 7, chờ Tech Lead + PO thật) · `ADR-014`: `Proposed` (radar 6, chờ Tech Lead xác nhận relay) | 🟢 |
| `ASR-005` | Message backbone SQS FIFO + EventBridge | `ADR-005`, `ADR-014` *(mới — outbox là cơ chế publish nguyên tử lên trên backbone này)* | `ADR-005`: `Proposed` (radar **8**, cần `POC-01`) · `ADR-014`: `Proposed` (radar 6) | 🟢 |
| `ASR-006` | RDS gộp schema-per-module | `ADR-006` | `Proposed` (radar **8**, cần `POC-02`) | 🟢 |
| `ASR-007` | Chỗ quyết định ownership/authz | `ADR-007`, `ADR-015` *(mới — Service JWT mở rộng xác thực từ người dùng cuối sang service-to-service nội bộ, TB3/TB4)* | `ADR-007`: `Proposed` (radar ~6) · `ADR-015`: `Proposed` (radar 5, **`Accepted` chặn cứng bởi `OQ-007` — Security chưa có người**) | 🟢 |
| `ASR-008` | Vùng lưu trữ PII & chia sẻ seller | `ADR-008` | `Proposed` (radar ~7, chặn tới khi có Security/Legal — `OQ-007`) | 🟢 |
| `ASR-009` | MFA Admin (TOTP app) | *(không — xem lý do dưới)* | — | ➖ N/A hợp lệ |
| `ASR-010` | HA/DR nhóm giao dịch lõi | `ADR-009` | `Proposed` (radar **9**, cần diễn tập DR) | 🟢 |
| `ASR-011` | Observability & alerting | `ADR-010` | `Proposed` (radar ~6) | 🟢 |
| `ASR-012` | AWS bắt buộc | *(không — xem lý do dưới)* | — | ➖ N/A hợp lệ |
| `ASR-013` | Resilience đối tác thanh toán/vận chuyển ngoài | `ADR-011` | `Proposed` (radar ~6, chờ sandbox 4 đối tác) | 🟢 |
| `ASR-014` | Ranh giới nhóm triển khai theo domain | `ADR-012` | `Proposed` (radar ~7, chờ `OQ-010`/`OQ-026`/`OQ-027`) | 🟢 |
| `ASR-015` | Chiến lược i18n | *(không — xem lý do dưới)* | — | ➖ N/A hợp lệ (borderline) |
**Lý do 3 `ASR` không có `ADR` *(đúng theo `decision-radar.md §2`, không phải bỏ sót)*:**
| `ASR` | Lý do không cần `ADR` | Ghi ở đâu thay thế |
|---|---|---|
| `ASR-009` (MFA Admin) | Radar ước lượng ~4 (3–4 ⇒ `DEC-nn` là đủ theo `decision-radar.md §2`) — bán kính hẹp (chỉ Identity/Admin), không ràng buộc dài hạn. **Không phải "ràng buộc đầu vào"** mà là "quyết định thi công nhỏ" | `DEC-nn` khi hoạt động `sec` chốt phương thức cụ thể; tạm chốt TOTP app ở `OQ-024`/`ASM-20` |
| `ASR-012` (AWS bắt buộc) | **Ràng buộc đầu vào** — `CON-03` do khách hàng chốt, không phải quyết định SA cân nhắc giữa nhiều phương án; đã phản ánh làm điều kiện tiên quyết trong `ADR-001` | `ADR-001` §1 Bối cảnh (tham chiếu, không lặp) |
| `ASR-015` (i18n) | Radar ước lượng ~5 (borderline theo `ASR §B2`) — không chạm `QAS` Must (chỉ Should), bán kính hẹp (chỉ FE). SA đã ghi rõ đây là lựa chọn borderline, khuyến nghị `DEC-nn` + `AGD` (GĐ3) nếu Tech Lead không thấy tranh cãi | `DEC-nn` (chưa ghi — việc phải làm ở hoạt động `sec`/GĐ3); có thể nâng thành `ADR-013` nếu phát sinh tranh luận công nghệ i18n cụ thể |
🔴 **Ghi chú đối chiếu:** `ASR-013` (đối tác ngoài) **có** `ADR-011` — khác với gợi ý ban đầu
"ASR-012/013/015 không cần ADR" của ghi chú người duyệt. Đã kiểm tra lại `ASR_e-commerce_v1.0.md
§B2 ASR-013`: mục này ghi rõ "Quyết định cần `ADR` | Có — `ADR-011`" (radar ~6, đã duyệt từng
phần ở `DEC-14`). Giữ nguyên theo nội dung đã duyệt, không tự sửa để khớp gợi ý — ba `ASR` thực
sự không cần `ADR` là `ASR-009`/`012`/`015` (xem bảng trên).
**Đọc ngược** — `ADR` không phục vụ `ASR`/`QAS` nào:
| `ADR` | Quyết định gì | Nguồn ghi trong §1 | Hợp lệ? |
|---|---|---|---|
| `ADR-016` | Blue-green deploy qua AWS CodeDeploy | Không có `ASR` trực tiếp — nguồn là `QAS-007` (error budget, xem bổ sung "QAS Must ↔ ADR" ngay dưới) | ✅ Hợp lệ — `INF §7.2` ghi rõ nguồn là bảo vệ ngân sách lỗi `QAS-007`, không phải một `ASR` |
| `ADR-017` | Công cụ IaC — Terraform | Không có `ASR`/`QAS` trực tiếp — nguồn là `CON-05` (năng lực đội) và `D9` (quy tắc: mọi con số hạ tầng phải quy ra tiền/tái lập được) | ✅ Hợp lệ — quyết định thiết lập tiền lệ theo `decision-radar.md §3` "công cụ hạ tầng", không bắt buộc có `ASR` nguồn khi lý do gắn `CON`/quy tắc thiết kế đã ghi rõ trong `ADR-017 §1` |
| *(13 `ADR` còn lại đều có ≥1 `ASR` nguồn ở bảng trên, không mồ côi)* | | | ✅ |
**Kết luận chuỗi này:** 12/15 `ASR` có `ADR`, 3/15 có lý do hợp lệ ghi rõ — đạt mục tiêu 15/15 "có
`ADR` hoặc có lý do". `ASR-004` nay có 3 `ADR` (`ADR-004` + `ADR-013` + `ADR-014`), `ASR-005` có 2
`ADR` (`ADR-005` + `ADR-014`), `ASR-007` có 2 `ADR` (`ADR-007` + `ADR-015`) — không mâu thuẫn giữa
các cặp này (xem `ADL §3`). `ADR-016`/`ADR-017` không có `ASR` trực tiếp nhưng có nguồn hợp lệ khác
đã ghi rõ (`QAS-007`, `CON-05`/`D9`) — không phải "ADR mồ côi" theo nghĩa D3 (mọi ADR đều truy vết
được về một nguồn có tên). Không còn `ASR` nào bị bỏ sót không giải thích.
**Bổ sung `QAS` Must ↔ `ADR` hiện thực hoá** *(ngoài chuỗi `ASR` chính, theo yêu cầu đồng bộ)*:
| `QAS` | Phát biểu ngắn | Mức | `ADR` hiện thực hoá | Đứt |
|---|---|---|---|---|
| `QAS-007` | Error budget 99,9%/tháng ⇒ 43 phút/tháng, loại trừ bảo trì ≤2h (`OQ-020`) | Must | `ADR-016` — chiến lược blue-green đảm bảo chiến lược deploy không tự ăn vào ngân sách lỗi này | 🟢 |
## 4. `ADR` × `CMP`
*`SAD §4.3` đã có ma trận `ASR × CMP` đủ 15/15 (không lặp lại ở đây, tham chiếu bằng ID theo
`artifact-map.md §7`). `ADR` không nhất thiết map trực tiếp 1-1 sang `CMP` — một `ADR` (VD
`ADR-001` kiểu kiến trúc tổng thể) áp dụng cho toàn bộ cấu trúc container, không phải một `CMP`
đơn lẻ. Bảng dưới đối chiếu `ADR` nào ràng buộc trực tiếp `CMP` nào qua `ASR` trung gian.*
| `ADR` | `ASR` trung gian | `CMP` bị ràng buộc *(qua `SAD §4.3`)* |
|---|---|---|
| `ADR-001` | `ASR-001` | Toàn bộ cấu trúc container (§4 `SAD`) |
| `ADR-002` | `ASR-002` | `CMP-11`, `CMP-14` |
| `ADR-003` | `ASR-003` | `CMP-04`, `CMP-06`, `CMP-10` |
| `ADR-004` | `ASR-004` | `CMP-11`, `CMP-04` |
| `ADR-005` | `ASR-005` | `CMP-12`, `CMP-06/07/08/09/10` |
| `ADR-006` | `ASR-006` | `CMP-13`, `CMP-14` |
| `ADR-007` | `ASR-007` | `CMP-01`, `CMP-02`, `CMP-04`, `CMP-15` |
| `ADR-008` | `ASR-008` | `CMP-04`, `CMP-05` |
| `ADR-009` | `ASR-010` | `CMP-02`, `CMP-04`, `CMP-11` |
| `ADR-010` | `ASR-011` | `CMP-02`, `CMP-04`, `CMP-11` |
| `ADR-011` | `ASR-013` | `CMP-11`, `CMP-10` |
| `ADR-012` | `ASR-014` | Cột "Nhóm triển khai" toàn bộ `SAD §4.1` |
| `ADR-013` | `ASR-004` | `CMP-04`, `CMP-11` *(mới — sửa `SAD §6.1` v1.3, tách đường găng đồng bộ khỏi bước khởi tạo thanh toán VNPay/Momo)* |
| `ADR-014` | `ASR-004`, `ASR-005` | `CMP-04`, `CMP-11` *(mới — outbox áp dụng cho cả hai module publish sự kiện)* |
| `ADR-015` | `ASR-007` | `CMP-02` (cấp token), `CMP-04`, `CMP-11`, `CMP-05`/`CMP-07` (Nhóm Hỗ trợ, qua TB3) *(mới)* |
| `ADR-016` | *(không qua `ASR`, xem §3 bổ sung `QAS-007`)* | `CMP-01…15` (áp dụng cho cả 3 đơn vị triển khai) *(mới)* |
| `ADR-017` | *(không qua `ASR`, nguồn `CON-05`)* | Toàn bộ hạ tầng AWS, không map riêng `CMP` *(mới)* |
**Đọc ngược** — `CMP` không phục vụ `ASR` nào và không có nhu cầu chức năng rõ:
| `CMP` | Trách nhiệm | Sinh từ | Hợp lệ? |
|---|---|---|---|
| *(không có — `SAD §4.1` đã tự chấm "15/15 `CMP` có ít nhất một `ASR` phục vụ, không có `CMP` mồ côi")* | | | ✅ |
## 5. `QAS` × kiểm chứng
| `QAS` | Mức | Bài đo (`FIT`/tên bài) | Đã chạy | Kết quả | Nguồn kết quả | Đứt |
|---|---|---|---|---|---|---|
| *(chưa có `QAS`)* | | | | | | |
## 6. Ràng buộc `AGD` × `FIT`
| Ràng buộc `AGD` | Nguồn | `FIT` | Nhãn `⚠️ Khuyến nghị` | Đứt |
|---|---|---|---|---|
| *(chưa có `AGD`, còn xa GĐ3)* | | | | |
## 7. Kiểm tra chuyên biệt
### 7.1 Interface
| `IF-nnn` | Chủ sở hữu contract | Contract tồn tại | Versioning policy | `FM` khi hỏng | Đứt |
|---|---|---|---|---|---|
| *(chưa có `ICD`)* | | | | | |
### 7.2 Dữ liệu
| Thực thể | Số chủ sở hữu | Hợp lệ | Ghi chú |
|---|---|---|---|
| *(chưa có `DAT`)* | | | |
### 7.3 Bảo mật
| `THR-nn` | Có biện pháp | Có cách kiểm chứng | Đứt |
|---|---|---|---|
| *(chưa có `SEC`)* | | | |
### 7.4 Đường lỗi
| Phụ thuộc ngoài process *(từ `SAD`+`ICD`)* | Có `FM-nn` | Trả lời đủ 4 câu | Đứt |
|---|---|---|---|
| *(chưa có `SAD`/`ICD`/`FAIL`)* | | | |
## 8. Đối chiếu chéo với bộ BA
| Kiểm | Kết quả | Hành động |
|---|---|---|
| Mọi `NFR-nn` của BA có `QAS` tương ứng | ✅ Đạt phần lớn — xem `QAS_e-commerce_v1.0.md §C`; `NFR-SEC-02/03`, `NFR-AVL-01/02` chờ hoạt động `sec`/`fail` (chưa chạy) | Tiếp tục hoạt động `sec`/`icd`/`fail` |
| Mọi endpoint trong `API` của BA có `IF-nnn` | chưa đo được — hoạt động `icd` (GĐ2) chưa chạy; `SAD §4.1/§6.3` đã liệt kê 22 `IF-nnn` ứng viên | Chạy `/sa-2-architecture e-commerce --focus icd` |
| Mọi `ROLE-nn` trong `RBAC` map xuống `SEC` §3.1 | chưa đo được — hoạt động `sec` (GĐ2) chưa chạy | Chạy `/sa-2-architecture e-commerce --focus sec` |
| `BR-nnn` ép ràng buộc kiến trúc đã có `ADR` | ✅ Đạt — `BR-CART-01`→`ADR-003`, `BR-CART-05`→`ADR-002`, `BR-CART-06`→`ADR-004`; `DEC-06` (chọn P2) đã được trả nợ bằng `ADR-001` | Không còn hành động — `DEC-06` không còn "nợ" (xem `ADL §7`) |
## 9. ID trùng lặp
| ID | Xuất hiện ở | Mức |
|---|---|---|
| *(không phát hiện trùng giữa `CTX`/`OPT`/`TCO`/`ARISK` ở lượt quét này — `DRV-01..09`, `CON-01..09`, `ASM-01..15`, `ARISK-01..10` đều dùng dải số liên tục không chồng lấn)* | | |
## 10. Tham chiếu gãy
| Từ | Trỏ tới | Vấn đề |
|---|---|---|
| *(không phát hiện tham chiếu gãy trong 4 file GĐ1 ở lượt quét này; chưa có `ADR`/`ASR`/`SAD` để kiểm tham chiếu GĐ2)* | | |
## 11. Phát hiện — xếp theo mức
### 🔴 Chặn gate
| # | Phát hiện | File · mục | Hành động | Skill sửa | Chặn |
|---|---|---|---|---|---|
| 1 | `POC-01`/`POC-02` chưa chạy — chặn `ADR-001`/`ADR-005`/`ADR-006` chuyển `Accepted` | `ARISK_e-commerce_v1.0.md §6`, `adr/ADR-005`, `adr/ADR-006` | Chạy POC theo tiêu chí PASS/FAIL đã viết trước | Tech Lead/DBA (ngoài pipeline SA) | AG1 (ký chính thức), AG2 |
| 2 | Diễn tập DR chưa chạy — chặn `ADR-009` chuyển `Accepted`, cũng là điều kiện tiên quyết AG2 | `adr/ADR-009`, `QAS_e-commerce_v1.0.md OQ-022` | Ops/SRE lên lịch và chạy diễn tập | Ops/SRE (ngoài pipeline SA) | AG2 |
| 3 | Chưa có đại diện Pháp chế/Bảo mật — chặn `ADR-008` hoàn toàn (`OQ-007`) | `adr/ADR-008` | PO chỉ định người | PO | AG2 |
| 4 | `OQ-004` (tính hợp lệ ngoại lệ ký thay PO) còn mở — mọi phê duyệt hiện tại đều "PO/Tech Lead uỷ quyền", không phải chữ ký thật | `CTX`/`OPT`/`TCO`/`ARISK`/`QAS`/`ASR`/`SAD` — header `Approved by` | PO/Tech Lead thật xác nhận lại bằng văn bản, hoặc chấp nhận rủi ro và ghi `DEC-nn` mới | Điều phối dự án / PO thật | AG1, AG2 |
### 🟠 Nợ — phải trả trước gate sau
| # | Phát hiện | File · mục | Hành động | Skill sửa |
|---|---|---|---|---|
| 1 | ~~`DEC-06` chưa nâng thành `ADR`~~ **Đã trả nợ** — `ADR-001` viết 2026-09-15, vẫn `Proposed` chờ `POC-01`/`POC-02` | `ADR-001`, `ADL §7` | Không còn hành động — theo dõi điều kiện `Accepted` | — |
| 2 | 6 `OQ` (`OQ-005/006/007/008/013..017`) chưa có số thật — `TCO`/`ARISK` đang chạy trên giả định | `TCO_e-commerce_v1.0.md`, `ARISK_e-commerce_v1.0.md` | PO/PM/Tech Lead trả lời trước khi AG1 ký chính thức | Điều phối dự án |
| 3 | 3 câu hỏi mới của `ADR-012` (`OQ-010`/`OQ-026`/`OQ-027`) chưa trả lời — chặn `ADR-012` chuyển `Accepted` | `adr/ADR-012` | Tech Lead + Ops/SRE trả lời | Tech Lead/Ops (ngoài pipeline SA) |
| 4 | Security chưa ký `ADR-002`/`ADR-007` (radar ≥6, thuộc phạm vi bảo mật) | `adr/ADR-002`, `adr/ADR-007` | Security review + ký khi có người | Security |
### 🟡 Cải thiện
| # | Phát hiện | File · mục | Hành động |
|---|---|---|---|
| 1 | `DRV-04/05/06/09` (module ngoài Giỏ hàng & Checkout) chỉ có nguồn `SAD.md`/brief, chưa qua BRIEF/RISK module hoá riêng — Confidence thấp hơn `DRV-01/02/03/07/08` | `CTX_e-commerce_v1.0.md` §2 (ghi chú cuối bảng) | Khi BA module hoá các phần còn lại của sàn, cập nhật `CTX` và rà lại `OQ-003` (giữ toàn sàn hay thu hẹp) |
| 2 | `ASR-013` có `ADR-011` nhưng ghi chú người duyệt gợi ý "012/013/015 không cần ADR" — đã đối chiếu và giữ nguyên nội dung `ASR` đã duyệt (`DEC-14`), không tự sửa để khớp gợi ý | `DTM §3` (ghi chú), `ASR_e-commerce_v1.0.md §B2 ASR-013` | Không cần hành động — đã minh bạch hoá sự khác biệt, tham chiếu cho lần rà sau |
## 12. Kết luận gate
```
AG1: 🟡 CHƯA ĐỦ ĐIỀU KIỆN KÝ CHÍNH THỨC — đủ 4/4 artifact (CTX/OPT/TCO/ARISK), mỗi file tự
chấm 7/7 tiêu chí cấu trúc, nhưng nội dung còn: OQ-004 (tính hợp lệ ký thay) mở, OQ-005/006/
007/008/013..017 (số thật) mở, POC-01/POC-02 chưa chạy. PO uỷ quyền đã duyệt từng phần
dưới ngoại lệ DEC-01..17 — không thay thế chữ ký PO/Tech Lead thật.
AG2: 🟡 CÒN XA — 9/9 hoạt động GĐ2 xong (qas/asr/sad/icd/dat/sec/inf/fail/adr); 17/17 ADR viết
(ADR-001…013 + ADR-014 outbox + ADR-015 service JWT + ADR-016 blue-green + ADR-017 Terraform),
tất cả Proposed (đúng — không ADR nào Accepted khi chưa có chữ ký thật). ASR → ADR đạt 12/15 +
lý do hợp lệ cho 3/15 còn lại (mục tiêu đạt; ASR-004 nay có 3 ADR, ASR-005/ASR-007 mỗi cái có
2 ADR, không mâu thuẫn). POC-01/POC-02/diễn tập DR/inject lỗi chưa chạy (chặn ADR-005/006/009
chuyển Accepted); chưa có Security/Legal (chặn ADR-008 hoàn toàn, và chặn cứng ADR-015 —
quyết định bảo mật không ai có thẩm quyền ký); Tech Lead + Security + Ops/SRE chưa ký thật;
ADR-013 cần Tech Lead + PO thật xác nhận; ADR-016 cần Ops/SRE chạy thử blue-green ở staging;
ADR-017 cần Tech Lead + Ops/SRE xác nhận công cụ (OQ-060).
AG3: — chưa tới
AG4: — chưa tới
```
**Việc gần nhất:** (1) Tech Lead/DBA chạy `POC-01`/`POC-02`; (2) Ops/SRE lên lịch và chạy diễn tập
DR + diễn tập inject lỗi; (3) PO chỉ định đại diện Pháp chế/Bảo mật (`OQ-007` — chặn `ADR-008`
hoàn toàn **và** chặn cứng `ADR-015`); (4) Tech Lead trả lời `OQ-010`/`OQ-026`/`OQ-027`/`OQ-060`;
(5) Ops/SRE chạy thử blue-green/rollback ở staging cho `ADR-016`; (6) khi đủ, chạy `sa-conformance`
xác nhận coverage rồi trình AG2 cho Tech Lead + Security + Ops/SRE ký thật.
## 13. Chấp nhận có ý thức
*Chỗ đứt được chấp nhận có ghi chép. Khác hoàn toàn với bỏ qua.*
| Chỗ đứt | Vì sao chấp nhận | Ai chấp nhận · ngày | Hạn xử lý | `DEC` |
|---|---|---|---|---|
| `POC-01` (throughput SQS/EventBridge) chưa chạy | `ARISK-01`/`ADR-005` đã có kế hoạch POC + tiêu chí PASS/FAIL viết trước; chưa tới hạn (trước `ADR-001`/`ADR-005` chuyển `Accepted`) | PO uỷ quyền (duyệt từng phần `ARISK` v1.0) · 2026-09-12 | Trước khi `ADR-001`/`ADR-005` chuyển `Accepted` | `DEC-10` |
| `POC-02` (RDS gộp tải) chưa chạy | `ARISK-02`/`ADR-006` đã có kế hoạch POC + tiêu chí PASS/FAIL viết trước; chưa tới hạn (trước `ADR-001`/`ADR-006` chuyển `Accepted`) | PO uỷ quyền (duyệt từng phần `ARISK` v1.0) · 2026-09-12 | Trước khi `ADR-001`/`ADR-006` chuyển `Accepted` | `DEC-10` |
| Diễn tập DR chưa chạy | `QAS-008`/`ADR-009` đã ghi rõ điều kiện, đã chốt là điều kiện tiên quyết AG2 (`DEC-12`) | Điều phối dự án (thay Tech Lead, duyệt từng phần `QAS` v1.0) · 2026-09-14 | Trước khi ký AG2 | `DEC-12` |
| `ASM-11`/`ASM-12`/`ASM-14` (đơn giá AWS/tỷ giá/FTE Ops) chưa xác nhận | `TCO` duyệt từng phần chấp nhận cấu trúc 4 nhóm chi phí + kết luận thứ tự P2 rẻ hơn P1; số tuyệt đối chưa cần thiết để giữ hướng đi này | PO uỷ quyền (duyệt từng phần `TCO` v1.1) · 2026-09-12 | Trước khi ký AG1 toàn phần | `DEC-09` |
| 12 `ADR` giữ `Proposed`, chưa `Accepted` | Chưa có chữ ký thật Tech Lead + Security + Ops/SRE; 3/12 (`ADR-005/006/009`) còn cần POC/diễn tập PASS theo đúng `decision-radar.md §2/§6` | SA (theo quy tắc bộ SA, không tự chuyển `Accepted`) · 2026-09-15 | Trước khi ký AG2 | `DEC-17` |
| Mọi phê duyệt GĐ1/GĐ2 là "PO/Tech Lead uỷ quyền — điều phối dự án", không phải chữ ký thật | Dự án chạy thử, theo ngoại lệ gate đã ghi từ `DEC-01`; người dùng đã được cảnh báo lại nhiều lần và tái khẳng định muốn tiếp tục | Điều phối dự án (đại diện PO, dự án chạy thử) · 2026-09-12…15 | Trước khi trình AG1/AG2 cho người thật ký (`OQ-004`) | `DEC-01` |