Files
loyalty-agent-service/docs/knowledge-refs/customer/adjustment_deduction_logic.md

54 lines
3.4 KiB
Markdown

---
ref_id: "customer/adjustment_deduction_logic"
parent_card: "customer/operations_adjustment"
title: "Chi tiết Logic Bù Trừ và Trừ Điểm (Adjustment Deduction Logic)"
domain: "customer"
ref_type: "edge_cases"
tags: ["adjustment", "offset", "deduction", "negative balance", "fifo"]
---
# Chi tiết Logic Bù Trừ và Trừ Điểm (Adjustment Deduction Logic)
## Thuộc về
customer/operations_adjustment — Card mô tả quy tắc bù trừ (offset) và trừ điểm (deduction) chung chung. Reference này làm rõ chi tiết thứ tự trừ điểm giữa các bucket, cách xử lý negative balance để đảm bảo model hiểu cách tính toán điểm chính xác khi có điều chỉnh.
## Chi tiết
### Logic Bù trừ (Offset) khi Cộng Điểm (Positive Adjustment)
Khi một giao dịch Positive Adjustment được duyệt, hệ thống phân bổ số điểm được cộng theo thứ tự ưu tiên sau:
| Trình tự | Điều kiện kiểm tra | Hành động |
|---|---|---|
| 1 | Tìm các Bucket đang có số dư âm (Negative Balance) | Điểm cộng thêm được ưu tiên dùng để bù đắp (offset) cho bucket đang âm về 0. |
| 2 | Nếu có nhiều Bucket âm | Ưu tiên bù trừ cho Bucket có Expiry Date sớm nhất. |
| 3 | Điểm cộng vẫn còn dư (sau khi offset hết các bucket âm) | Số điểm dư sẽ được tạo thành một Bucket mới với Expiry Date được cấu hình trong giao dịch điều chỉnh. |
### Logic Trừ Điểm (Deduction) khi Điều chỉnh Âm (Negative Adjustment)
Người dùng có hai lựa chọn khi thực hiện Negative Adjustment:
| Tùy chọn | Cơ chế xử lý |
|---|---|
| **Chỉ định đích danh Bucket** | Nếu người dùng chọn cụ thể 1 Bucket để trừ điểm (dựa trên Bucket Expiry Date), hệ thống sẽ CHỈ trừ điểm trên Bucket đó. Nếu số lượng trừ lớn hơn số dư của Bucket, Bucket đó sẽ bị âm (nếu Pool cho phép âm). |
| **Không chỉ định Bucket (Mặc định)** | Hệ thống tự động trừ điểm theo phương pháp **FIFO (First-In, First-Out) dựa trên Expiry Date**. Điểm sẽ được trừ dần từ Bucket có ngày hết hạn sớm nhất đến ngày hết hạn muộn nhất cho đến khi đủ số lượng. |
### Validation Rules
| Rule | Khi nào check | Reject nếu |
|---|---|---|
| Cho phép âm (Allow Negative Balance) | Khi thực hiện Negative Adjustment mà số lượng trừ lớn hơn tổng số dư khả dụng | Pool Definition được cấu hình `Allow Negative Balance = OFF` |
## Ví dụ cụ thể
1. **Ví dụ Bù trừ (Offset)**:
- Tình trạng: Khách hàng đang có 1 Bucket âm `-50` điểm (hết hạn 31/12/2024).
- Hành động: Nhân viên thực hiện Positive Adjustment `+100` điểm (hết hạn 31/12/2025).
- Kết quả: Hệ thống lấy 50 điểm bù cho Bucket cũ (về 0). 50 điểm còn lại vào Bucket mới (Balance 50, hết hạn 31/12/2025).
2. **Ví dụ Trừ điểm theo FIFO**:
- Tình trạng: Khách hàng có Bucket A (50 điểm, hết hạn T6/2024) và Bucket B (100 điểm, hết hạn T12/2024).
- Hành động: Nhân viên thực hiện Negative Adjustment `-70` điểm không chỉ định Bucket.
- Kết quả: Hệ thống trừ 50 điểm ở Bucket A (về 0) và tiếp tục trừ 20 điểm ở Bucket B (còn 80).