324 lines
30 KiB
Markdown
324 lines
30 KiB
Markdown
# 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` |
|