Skip to content

Khuyến mãi, Trả trước & Request Flows — Business Rules

Tổng quan

Nhóm này gom nhiều subdomain dễ bị viết lẫn vào nhau:

  • prepaid order,
  • refund / withdraw request,
  • fund management,
  • voucher campaign / activation / restore,
  • negative payment request.

Chúng cùng nằm trong ecommerce nhưng không cùng data model.

Mounted vs Dormant

SubdomainTrạng thái
prepaid-orderMounted, dùng thật
withdraw/refund requestMounted, có 2 cây route song song
fund-managementMounted, dùng thật
negative-payment-requestsMounted, approval flow riêng
promotionCode + GraphQL + permission còn, nhưng route mount đang comment

Prepaid order

Vai trò

Prepaid order là luồng bán thẻ/gói trả trước, có commission, payment và logic nạp ví riêng.

Quy tắc nghiệp vụ

Quy tắc
BR-PR-001Tạo prepaid order bắt buộc phải chọn prepaid card/gói hợp lệ.
BR-PR-002Mỗi card phải có ít nhất 1 người nhận hoa hồng.
BR-PR-003Tổng commission không được vượt giá trị card hoặc số thực nạp.
BR-PR-004prepaid_value_into_wallet tính khác nhau giữa prepaid_type_cardprepaid_type_flexible.
BR-PR-005Payment method wallet / wallet_promotion không sinh fund như các payment method khác.

Refund / Withdraw

Refund và withdraw chạy qua wallet.transaction_request, không phải bản chất là một cột trạng thái của order.

Behaviors chính

BehaviorÝ nghĩa
refund_orderHoàn order dịch vụ
refund_order_cosmeticHoàn order mỹ phẩm
refund_topupHoàn topup ví
refund_collaboratorChi / hoàn liên quan collaborator hoặc commission payout

Quy tắc nghiệp vụ

Quy tắc
BR-PR-006Approve refund của order/cosmetic sẽ hủy các request refund khác cùng reference_id + branch_id.
BR-PR-007refund_topup có thể split số tiền giữa VNDVND_PROMOTION.
BR-PR-008Refund cash yêu cầu upload chứng từ.
BR-PR-009Approve refund có thể kéo theo refund commission, rollback point và revenue qua event wallet.

Fund management

Fund management là màn hình tổng hợp và thao tác quỹ, đọc từ cả fundinvoice theo nhiều loại nguồn.

Quy tắc nghiệp vụ

Quy tắc
BR-PR-010Fund filter riêng cho service, cosmetic, prepaid, wallet, wallet promotion, installment.
BR-PR-011Fund không đại diện toàn bộ wallet flow; một phần logic hoàn/chi vẫn nằm ở transaction_request.

Voucher campaign / activation / restore

Quy tắc nghiệp vụ

Quy tắc
BR-PR-012Approve voucher campaign chỉ cho trạng thái draft và campaign chưa hết hạn.
BR-PR-013Khi approve, hệ thống generate trước voucher issued theo quota online/offline rồi mới publish.
BR-PR-014Offline voucher activation kiểm tra published status, remaining quota, per-customer limit và race-check quota.
BR-PR-015Cancel order có thể restore voucher về trạng thái dùng lại được, nhưng implementation hiện có dấu hiệu bất thường ở usage_count.

Negative payment

Đây là subdomain riêng, không nên gộp với refund.

text
Tạo negative payment
  -> tạo invoice âm (`negative=true`)
  -> tạo request approval trong `request_working_schedule`
  -> approval flow riêng
  -> side effects commission / invoice link / request link

Quy tắc nghiệp vụ

Quy tắc
BR-PR-016Chỉ tạo negative payment khi order chưa paid_at và chưa có request pending.
BR-PR-017Negative payment bám request_working_schedule, không bám transaction_request.
BR-PR-018Với service/cosmetic, negative payment còn tính commission âm để trình duyệt.

Rủi ro / Findings

MứcMô tả
P1Promotion đang ở trạng thái “nửa sống nửa chết”: code còn nhưng route bị comment.
P1Refund/withdraw có 2 cây route song song cho cùng page set.
P1canApproved ở refund/negative detail có dấu hiệu check approver sai theo created_by thay vì current user.
P1RestoreVouchersOnOrderCancel tăng usage_count khi restore voucher, có mùi bug nghiệp vụ.
P2WithdrawRequestCreate có fallback amount 40000000 nếu không đọc được balance.
P2Nếu gộp negative payment vào refund docs sẽ sai boundary hệ thống.