Skip to main content

Yêu Cầu Cải Tiến: Cấu Hình Khoảng Chi Tiêu Hạng Thành Viên (Membership Tiers)

Ngày cập nhật: 24/06/2026
Phản hồi từ: Khách hàng (Admin)
Nội dung phản hồi: "Hạng thành viên cái này anh không biết nhập khoảng chi tiêu như thế nào luôn."

Ảnh feedback:


1. Vấn Đề Hiện Tại

Trên màn hình Membership Tiers, mỗi hạng thành viên có một trường duy nhất tên là "Spend" — chỉ là một ô nhập số đơn giản.

Giao diện Membership Tiers hiện tại

Vấn đề gây nhầm lẫn:

  • Admin không biết đây là giá trị chi tiêu tối thiểu hay tối đa.
  • Không có nhãn (label) giải thích ý nghĩa con số.
  • Không có đơn vị tiền tệ hiển thị rõ ràng.
  • Không thể hiểu được logic khoảng chi tiêu (từ bao nhiêu → đến bao nhiêu) từ giao diện hiện tại.

2. Dữ Liệu Nghiệp Vụ Thực Tế (Tham Chiếu)

Theo bảng cơ chế phân hạng, khoảng chi tiêu tích lũy (GPoint) cho từng hạng như sau:

Bảng nghiệp vụ phân hạng thực tế

HạngCodeChi tiêu tối thiểuChi tiêu tối đaĐiểm tích lũy (Thẻ/CK)Điểm tích lũy (Tiền mặt)
SilverSILVER< 5.000.000đ3%5%
GoldGOLD5.000.000đ< 40.000.000đ5%7%
PlatinumPLATINUM40.000.000đ< 80.000.000đ8%10%
DiamondDIAMOND80.000.000đKhông giới hạn11%13%

3. Yêu Cầu Cải Tiến UI — Trường "Spend"

3.1 Thay đổi trường "Spend" đơn thành 2 trường rõ ràng

Thay một ô Spend bằng 2 ô riêng biệt với nhãn rõ ràng:

Trường cũThay bằng
Spend (1 ô số)Spend từ (Min Spend) + Spend đến (Max Spend)

Mockup giao diện đề xuất:

┌────────────────────────────────────────────────────────────────────────────────────────────┐
│ Code Tên tier Priority Điểm Spend từ (đ) Spend đến (đ) Bật │
│ [SILVER] [Silver ] [0 ] [0 ] [0 ] [4.999.999 ] [◉] │
│ │
│ Code Tên tier Priority Điểm Spend từ (đ) Spend đến (đ) Bật │
│ [GOLD ] [Gold ] [2 ] [20 ] [5.000.000 ] [39.999.999 ] [◉] │
└────────────────────────────────────────────────────────────────────────────────────────────┘

3.2 Bổ sung tooltip/placeholder giải thích

  • Placeholder của ô Spend từ: "VD: 5000000 (5 triệu đồng)"
  • Placeholder của ô Spend đến: "VD: 39999999 | Để trống = không giới hạn"
  • Tooltip icon ❓ cạnh label giải thích: "Khách hàng sẽ được xếp vào hạng này nếu tổng chi tiêu tích lũy nằm trong khoảng [Spend từ] đến [Spend đến]"

3.3 Bổ sung cột "Tỷ lệ tích điểm"

Theo nghiệp vụ, mỗi hạng có tỷ lệ tích điểm khác nhau — hiện chưa có trường này trên CMS. Cần bổ sung:

Trường mớiMô tả
Tỷ lệ (Thẻ/CK)% điểm tích lũy khi thanh toán bằng thẻ/chuyển khoản
Tỷ lệ (Tiền mặt)% điểm tích lũy khi thanh toán tiền mặt

4. Hướng Dẫn Nhập Liệu Tạm Thời (Workaround)

Trong khi chờ UI được cập nhật, đây là hướng dẫn nhập liệu cho Admin:

Ý nghĩa trường "Spend" hiện tại = Mức chi tiêu TỐI THIỂU để đạt hạng đó (tương đương Min Spend).

HạngNhập vào ô "Spend"Giải thích
SILVER0Mặc định từ 0đ
GOLD5000000Từ 5 triệu trở lên
PLATINUM40000000Từ 40 triệu trở lên
DIAMOND80000000Từ 80 triệu trở lên

Trường "Điểm" (Points) = Số điểm GPoint tối thiểu cần có để duy trì hạng (có thể để 0 nếu không áp dụng điều kiện điểm riêng).


5. Checklist Kỹ Thuật

  • Tách trường spend (số nguyên) thành spend_minspend_max trong database schema
  • Cập nhật API endpoint PATCH /membership-tiers/:id nhận 2 trường spend_min, spend_max
  • Cập nhật giao diện CMS: 2 ô nhập liệu thay vì 1, có label và placeholder rõ ràng
  • Cập nhật logic xếp hạng phía backend: spend_min <= customer.total_spend < spend_max
  • Hạng Diamond (cao nhất): spend_max = null = không giới hạn trên
  • Thêm tooltip giải thích ý nghĩa từng trường
  • Thêm 2 trường tỷ lệ tích điểm: point_rate_cardpoint_rate_cash
  • Validate: spend_min của hạng N phải bằng spend_max của hạng N-1 (không được có khoảng trống hoặc chồng lấn)