Skip to content

v1.6 — 15/05/2026 (đồng bộ với PRD v1.8)

Thay đổiSectionẢnh hưởng
Update status badge sau khi chốt DEC-027/028/029 + 4 lint clean (vietnamese / interaction / matrix / glossary đều PASS); 94 ca kiểm thửHeaderAll
Lint vietnamese clean: chuẩn hoá calque headings sang "Quy ước ..."Đầu vào chuẩnNone

Tóm tắt quyết định (Decision Brief) - Ví KM 2 (Promotion Wallet 2)

Phiên bản: 1.6 Ngày: 15/05/2026 Độ phức tạp: L Module: wallet, ecommerce, settings, user, report Trạng thái package: Sẵn sàng bàn giao — đã chốt DEC-027 (lot lifecycle không có pending), DEC-028 (schema wallet_km2_payment_attempt merge), DEC-029 (balance realtime qua action get_customer_km2_balance) ngày 15/05/2026 sau review đa góc nhìn Phase 5; 4 lint clean (vietnamese / interaction / matrix / glossary đều PASS); 94 ca kiểm thử trong qa-test-plan, có TG-001..TG-007 evidence checklist; G3.7 cổng kiểm tra độ đầy đủ UI pass


File này dùng để làm gì: đây là cửa vào của package Ví KM 2. PO, Sếp, Tech Lead và nhóm delivery đọc file này trước để nắm phạm vi, quyết định, ảnh hưởng, rủi ro và nên đọc file nào tiếp theo.

Quy tắc ưu tiên: nếu brief này xung đột với SOURCE_OF_TRUTH.md, ưu tiên SOURCE_OF_TRUTH.md. Brief chỉ tóm tắt và trỏ sang file chịu trách nhiệm, không trùng API, SQL, ca kiểm thử hoặc toàn bộ Nhật ký quyết định.

Đầu vào chuẩn (Canonical Inputs)

FileVai trò
SOURCE_OF_TRUTH.mdNguồn sự thật chuẩn và khóa giải pháp
EVIDENCE_PACK.mdBằng chứng code/screen/db/config thật
prd.mdQuy ước nghiệp vụ, DEC, FR/AC, công thức
ui-spec.mdQuy ước màn hình, delta UI, state và copy
dev-spec.mdQuy ước data/API/migration/security/tasks
qa-test-plan.mdOracle kiểm thử và traceability
go-live-checklist.mdReadiness, deploy order, rollback và monitoring
handoff.mdRACI, timeline, điểm còn mở và thứ tự giao việc

1) Tóm tắt 5 phút

  • Ví KM 2 là ví khuyến mãi theo cơ chế gói nạp ưu đãi (Gói Ví KM2): khách mua gói giá nhỏ, nhận giá trị ví lớn hơn, và mỗi đơn chỉ được dùng tối đa theo % cấu hình trên phần sản phẩm/dịch vụ đủ điều kiện.
  • Package khóa phương án tách wallet type riêng VND_PROMOTION_2, không overload VND_PROMOTION của KM1, để tránh sai nghĩa báo cáo, fund, print và customer revenue.
  • Day-1 reuse shell đang có: Settings PromotionWallet, master data prepaid_card, flow bán thẻ trả trước, payment order, customer detail và prepaid report shell.
  • Phần build mới nằm ở engine bản ghi theo từng lần mua: wallet_km2_lot, wallet_km2_lot_deduction, FIFO deduction bằng Go action có transaction lock và expiry scheduler; riêng Hoàn ví KM2 reuse luồng Yêu cầu hoàn tiền hiện có với behavior refund_km2_wallet.
  • Biên ảnh hưởng đã được khóa: các flow thanh toán, hoàn tiền, hoá đơn, quỹ, report, notification và permission phải tách KM1/KM2; rank, appointment, kho, CRM assignment, affiliate/referral, CMS gift/event và HR cơ bản không mở scope nghiệp vụ mới.
  • Do liên quan tiền/ví/report/fund, package được nâng lên profile L để có go-live-checklist.md, rollback và monitoring trước khi bàn giao dev.
  • Migration seed KM2 ở trạng thái tắt (disabled=true); PO/Admin chỉ bật trong go-live sau khi readiness pass. Quyền dùng Dynamic Permission v2 (role_module.actions + portal + branch_mode + backend enforcement); bản ghi lần mua (lot) luôn đọc qua action có kiểm tra quyền khách/branch, không đọc trực tiếp toàn bộ lot qua GraphQL.

2) Bản đồ package

FileĐọc khi cầnPhụ trách nội dung
SOURCE_OF_TRUTH.mdĐối chiếu nguồn sự thật chuẩn / conflictPO/BA + TL
EVIDENCE_PACK.mdXem bằng chứng code/screen/db/configPO/BA + TL
prd.mdDuyệt phạm vi nghiệp vụ, DEC, FR/AC, công thứcPO/BA
ui-spec.mdThiết kế/triển khai màn hình, thay đổi, tương tácUI/UX + FE
dev-spec.mdTriển khai data/API/migration/security/tasksTL + FE/BE
qa-test-plan.mdViết/rà test oracle và regressionQA
go-live-checklist.mdRelease gates, rollback, monitoringOps + TL
handoff.mdRACI, timeline, blocker, thứ tự việcDelivery + TL

3) Khóa phạm vi

Trong phạm vi

#Nội dungTham chiếu
1Cấu hình KM2 global-first: bật/tắt, max%, cho phép KM1+KM2, chính sách Hoàn ví KM2prd.md FR-001
2Mở rộng prepaid_card thành loại Gói Ví KM2 bằng wallet_targetexpiry_monthsprd.md FR-002
3Bán Gói Ví KM2 qua flow thẻ trả trước, tạo bản ghi wallet_km2_lot theo số lượng và snapshot giá mua góiprd.md FR-003
4Thanh toán bằng KM2 theo max%, FIFO và audit deductionprd.md FR-004
5Flag eligible riêng allow_promo_wallet_2 cho product/serviceprd.md FR-005
6Customer profile hiện tổng số dư, danh sách Gói Ví KM2 đã mua, cảnh báo hết hạn và Hoàn ví KM2prd.md FR-006, FR-009
7Expiry scheduler, report/fund/print impact và QA regression cho các flow đang chạydev-spec.md, qa-test-plan.md

Ngoài phạm vi

#Không làm trong phase nàyLý doRef
1Branch-specific config UI hoàn chỉnhDay-1 dùng global-first để bám pattern settings hiện tạiSOURCE_OF_TRUTH.md
2Bulk enable KM2 hàng loạt product/serviceChưa có evidence về bulk UI/pipeline phù hợpSOURCE_OF_TRUTH.md
3Customer app tự mua Gói Ví KM2Không thuộc rollout POS/AdminSOURCE_OF_TRUTH.md
4Hợp nhất KM1/KM2 thành một lớp analytics mớiRủi ro phá semantics báo cáo hiện tạiSOURCE_OF_TRUTH.md

4) Quyết định đã khóa

Quyết địnhÝ nghĩa bàn giaoTham chiếu
Tách wallet type VND_PROMOTION_2Giảm regression KM1 và giữ báo cáo/fund/print rõ nghĩaprd.md DEC-001
Reuse shell hiện có, không tạo module lạFE/UX phải extend màn hình đang chạy thay vì vẽ flow rờiSOURCE_OF_TRUTH.md DEC-002
Config v1 global-firstMigration seed config tắt; sau go-live chỉ có đúng một config global active; branch override để phase sauSOURCE_OF_TRUTH.md DEC-005, DEC-023
FIFO deduction dùng Go transaction + idempotencyBảo vệ tiền ví khi double submit, race condition, retry lỗidev-spec.md C3/C5
Expired lot không được deduct dù scheduler missPayment action phải check expired_at khi trừ tiềndev-spec.md C3
Cross-branch usage không mở rộng visibilityKhách có thể dùng Gói Ví KM2 khác chi nhánh qua Go action, nhưng UI/API chỉ trả dữ liệu theo Dynamic Permission v2 và phạm vi khách/branchSOURCE_OF_TRUTH.md DEC-014, DEC-024, DEC-025; dev-spec.md C8
Hoàn ví KM2 reuse Yêu cầu hoàn tiềnKhông tạo approval module riêng; thêm behavior refund_km2_wallet, label "Hoàn ví KM2" vào request engine hiện cóSOURCE_OF_TRUTH.md DEC-026; prd.md FR-009
Impact boundary là contract bàn giaoTeam phải list rõ feature nào ảnh hưởng, thêm gì, và feature nào không mở scope; QA có TC-IMPACT-* để chặn gộp nhầm KM1/KM2SOURCE_OF_TRUTH.md mục 5.2-5.3; qa-test-plan.md
ZNS là optional Phase 2+ trừ khi PO chốt bắt buộcGo-live Phase 1 không bị block bởi template ZNS nếu FR-011 chưa enableSOURCE_OF_TRUTH.md

5) Bản đồ ảnh hưởng

Khu vựcReuse / Extend / Build mớiĐiều team cần chú ýTham chiếu
UIReuse + ExtendSettings, PrepaidCard, PrepaidOrder, CustomerDetail, Report shellui-spec.md
Backend / APIExtend + Build mớipayment_order, transaction_insert, deduct_km2_payment, refund_km2_wallet, schedulerdev-spec.md
Database / HasuraExtend + Build mới3 table wallet mới, 3 alter ecommerce, permissions, cron/action metadatadev-spec.md
Notification / ExportExtendZNS optional; export/report/fund phải tách KM2 semanticsui-spec.md, dev-spec.md
QA / RegressionFull regressionPayment, fund, print, report, customer revenue, race conditionqa-test-plan.md

6) Rủi ro và blocker

MứcRủi ro / blockerPhụ tráchCách xử lýTham chiếu
CaoSai tiền ví khi retry/double submit paymentTL + BEIdempotency key + transaction lock + post-deploy monitoringdev-spec.md, go-live-checklist.md
CaoBáo cáo/fund/print nhập nhằng KM1/KM2TL + BE + QATách field/semantics, grep hardcode, QA regression FR-012dev-spec.md, qa-test-plan.md
CaoLộ dữ liệu lot/deduction nếu role user được direct select toàn bảngTL + BE + QAKhông cấp RLS direct select cho user; dùng get_customer_km2_lots có access checkdev-spec.md, qa-test-plan.md
CaoQuyền KM2 bị hard-code theo role, không theo Dynamic Permission v2TL + FE + BE + QASeed/mapping module_permission_action + role_module.actions, test grant/revoke/portal split/API no-leakSOURCE_OF_TRUTH.md, dev-spec.md, qa-test-plan.md
Trung bìnhLot quá hạn vẫn bị trừ nếu scheduler missBEPayment action guard expired_at > NOW() + scheduler alertdev-spec.md
Trung bìnhVị trí report dashboard chưa chốtPOChốt trước Phase 3; không block Phase 1/2handoff.md
ThấpZNS template chưa đăng kýOpsChỉ block nếu PO bật FR-011 trong rolloutgo-live-checklist.md

Cập nhật sau review kỹ thuật 28/04/2026: package đủ để kickoff Phase 1/2, nhưng team phải dùng bộ TG-001..TG-007 trong handoff.md làm gate trước merge/UAT. Các gate này khóa 7 điểm rủi ro còn lại: Hoàn ví KM2 trong Yêu cầu hoàn tiền, hard-code KM1/KM2, FIFO/idempotency/expiry, DB/Hasura/codegen, Dynamic Permission v2, scheduler/rollback/monitoring và impact boundary regression.

7) Tóm tắt bàn giao

NhómViệc chínhFile cần đọc
PO/BAChốt phạm vi, DEC, công thức, PD-001decision-brief.md, prd.md
UI/UXChốt delta UI trên màn hình hiện có và copy/stateui-spec.md
FETriển khai settings, prepaid, payment, customer, report UIui-spec.md, dev-spec.md
BETriển khai migrations, action, scheduler, report/fund contractsdev-spec.md
QATest FR/AC và regression tiền/ví/reportqa-test-plan.md
TL/OpsChốt deploy order, rollback, monitoring, sign-offgo-live-checklist.md, handoff.md

8) Điểm còn mở

IDCâu hỏi còn mởPhụ tráchHạn chótNếu chưa chốt thì ảnh hưởng
PD-001Report KM2 đặt trong group/menu nàoPOTrước Phase 3Không block Phase 1/2, chỉ block report dashboard