OVIRO LogoOVIRO
CRMGiao dịch trừ điểm

Trừ điểm thủ công

Tạo giao dịch trừ điểm tích lũy cho khách hàng bằng thao tác thủ công.

Endpoint

POST /v1/loyaltypointredeems

Quyền: customerpoint.manage

Workflow & Logic

  1. Validate khách hàng và số điểm: Kiểm tra khách hàng tồn tại, thuộc đúng công ty, số điểm trừ > 0.
  2. Kiểm tra số dư: So sánh points_redeemed với tổng điểm khả dụng (points_remaining còn hạn).
  3. Trừ theo FIFO: Lấy các lô tích điểm chưa hết hạn, ưu tiên lô sắp hết hạn trước.
  4. Ghi giao dịch: Tạo LoyaltyPointRedeem và các bản ghi LoyaltyPointRedeemDetail.
  5. Cập nhật lô tích: Giảm points_remaining trên từng lô LoyaltyPointEarn bị ảnh hưởng.
  6. Cập nhật thống kê khách hàng.

Body Parameters

TênKiểuBắt buộcMô tả
creator_idintID người tạo
customer_idintID khách hàng bị trừ điểm
points_redeemedintSố điểm cần trừ (> 0)
points_valueintGiá trị quy đổi ra tiền (VND). Mặc định: 0
source_idintID nguồn phát sinh. Dùng để chống trùng khi tạo lại
external_idstringMã tham chiếu ngoài hệ thống
notestringGhi chú

Lưu ý:

  • Giao dịch tạo thủ công sẽ có type = TYPE_DEFAULT, mode = MODE_MANUAL.
  • company_id được lấy từ phiên đăng nhập hiện tại.
  • Nếu truyền source_id > 0, hệ thống kiểm tra trùng giao dịch thủ công cùng customer_id + source_id.

Request Payload

{
  "creator_id": 1,
  "customer_id": 8801,
  "points_redeemed": 100,
  "points_value": 100000,
  "source_id": 0,
  "external_id": "MANUAL-2026-001",
  "note": "Trừ điểm đổi quà tại quầy"
}

Response Schema

HTTP 200 - JSON Object

Trả về object kết quả xử lý FIFO. Xem mục Response khi tạo mới (POST) trong LoyaltyPointRedeem Object Schema.

{
  "customer_available_points": 450,
  "redeem_points": 100,
  "redeem_id": 902,
  "redeem_details": [
    {
      "earn_id": 1201,
      "used": 80
    },
    {
      "earn_id": 1205,
      "used": 20
    }
  ],
  "updated_batches": [
    {
      "id": 1201,
      "point_remaining": 0
    },
    {
      "id": 1205,
      "point_remaining": 130
    }
  ],
  "ledger": []
}

Error Codes

HTTPCodeMô tả
422error_creator_id_requiredThiếu ID người tạo
422error_customer_id_requiredThiếu ID khách hàng
422error_customer_notfoundKhông tìm thấy khách hàng
422error_customer_company_mismatchKhách hàng không thuộc công ty hiện tại
422error_points_redeemed_requiredSố điểm trừ phải lớn hơn 0
422error_points_redeemed_must_be_positiveSố điểm trừ không hợp lệ
422error_redeem_points_exceeds_available_pointsSố điểm trừ vượt quá điểm khả dụng
422error_points_value_invalidGiá trị quy đổi không hợp lệ (< 0)
422error_source_id_invalidID nguồn không hợp lệ
422error_redeem_already_processedGiao dịch với source_id này đã được xử lý
422error_user_id_notfoundID người tạo không hợp lệ

On this page