Thiết kế đối soát ngân hàng cho subscription: kỳ thu và quyền sử dụng

Thiết kế quan hệ subscription, kỳ thu và lần thanh toán

Một khách trả tiền vào ngày cuối kỳ có thể đang gia hạn tháng tới, bù khoản còn thiếu hoặc thanh toán một link cũ. Nếu hệ thống chỉ thấy “có tiền” rồi cộng thêm thời gian sử dụng, quyền dịch vụ sẽ lệch khỏi hợp đồng. Subscription cần biết khoản thu thuộc kỳ nào trước khi quyết định gia hạn.

Cách tự động hóa đối soát ngân hàng cho mô hình subscription vì thế là bài toán thiết kế dữ liệu và trạng thái. Kỳ thu, lần thử thanh toán và quyền sử dụng cần được quản lý riêng, kể cả khi doanh nghiệp dùng một luồng Pay2S được giới thiệu trên hoadontudong.com.vn. QR hoặc link thanh toán không tự tạo quyền trích nợ định kỳ; luồng thu tự động từ tài khoản khách cần một cơ chế được đăng ký và xác nhận riêng.

Tách subscription, kỳ thu và lần thanh toán

Phân biệt subscription với kỳ thu và các lần thử thanh toán
Phân biệt subscription với kỳ thu và các lần thử thanh toán

Subscription đại diện quan hệ dịch vụ của khách; kỳ thu đại diện một nghĩa vụ thanh toán theo thời gian; lần thanh toán đại diện một nỗ lực trả tiền cho kỳ đó. Một subscription có nhiều kỳ, một kỳ có thể có nhiều lần thử. Không dùng một mã chung rồi ghi đè mỗi tháng.

Giữ liên kết từ đơn thanh toán về kỳ thu và subscription. Khi khách trả link cũ, hệ thống biết khoản đó thuộc kỳ cũ thay vì mặc định gia hạn kỳ hiện tại. Nếu có nhiều subscription của cùng khách, mã khách hàng một mình chưa đủ để phân bổ.

Ví dụ dưới đây là dữ liệu nội bộ giả định, không phải payload Pay2S:

{
  "subscription_id": "SUB_DEMO_001",
  "billing_cycle_id": "CYCLE_DEMO_202611",
  "payment_attempt_id": "ATTEMPT_DEMO_001",
  "merchant_order_id": "ORDER_DEMO_001",
  "amount_due": "300000",
  "currency": "VND",
  "service_start": "2026-11-01",
  "service_end_exclusive": "2026-12-01"
}

Ý nghĩa ngày kết thúc phải nhất quán. Nếu dùng khoảng kết thúc không bao gồm ngày đó, mọi tác vụ gia hạn và kiểm tra quyền phải hiểu cùng quy ước.

Xác định kỳ theo tháng lịch, ngày đăng ký hay số ngày cố định. Một tháng không luôn bằng ba mươi ngày; ngày neo cuối tháng cần quy tắc khi tháng sau ngắn hơn. Giữ múi giờ và giờ cắt rõ để các job không tạo hai kỳ ở ranh giới ngày.

Lập lịch tạo kỳ với định danh duy nhất theo subscription và thời gian. Nếu job chạy lại sau lỗi, nó phải tìm kỳ đã có thay vì tạo thêm khoản phải thu. Tách ngày đến hạn thanh toán khỏi ngày bắt đầu dịch vụ, vì doanh nghiệp có thể gửi yêu cầu trước kỳ mới.

Chỉ sinh link sau khi chốt số tiền và dữ liệu kỳ. Với Pay2S, Collection Link tạo thanh toán theo đơn cung cấp một lớp nhận tiền; lịch billing và mapping subscription thuộc ứng dụng của doanh nghiệp.

Lưu giá của kỳ, không tính lại theo gói hiện tại

Mỗi kỳ nên giữ phiên bản gói, giá, ưu đãi và tổng phải thu đã được xác nhận. Khi bảng giá thay đổi, các link đang chờ không nên âm thầm mang một số tiền khác. Nếu cần thay đổi kỳ đã lập, tạo điều chỉnh có lý do và xử lý các yêu cầu thanh toán cũ.

Đổi gói giữa kỳ cần chính sách rõ: có áp dụng ngay hay kỳ sau, có phân bổ giá trị theo thời gian hay không, xử lý phần đã trả như thế nào. Đội kỹ thuật không nên tự chọn công thức proration từ một ví dụ trên mạng rồi áp cho hợp đồng.

Giá từ frontend chỉ là dữ liệu đề xuất. Backend phải lấy số tiền kỳ từ nguồn đã lưu để tạo thanh toán và đối chiếu callback. Đừng dùng chính số tiền trong thông báo nhận được làm số tiền kỳ vọng, vì khi đó kiểm tra sẽ luôn “khớp” với đầu vào.

Thiết kế trạng thái thu tiền riêng với quyền dịch vụ

Tách trạng thái thanh toán kỳ với quyền sử dụng dịch vụ
Tách trạng thái thanh toán kỳ với quyền sử dụng dịch vụ

Kỳ thu có thể đang chờ, đã nhận một phần, đủ tiền hoặc được hủy theo chính sách. Subscription có thể đang hoạt động, trong ân hạn, bị tạm dừng hoặc đã kết thúc. Hai nhóm không nên được gộp vào một trường paid duy nhất.

Ví dụ, khách đã trả cho kỳ tương lai nhưng dịch vụ hiện tại vẫn chạy theo ngày đã có; quyền mới bắt đầu ở mốc đã thống nhất. Ngược lại, subscription trong ân hạn có thể vẫn được sử dụng dù kỳ mới chưa đủ tiền. Những quyết định này thuộc chính sách sản phẩm, không suy ra từ trạng thái ngân hàng.

Mỗi thay đổi quyền cần căn cứ và định danh tác vụ. Khi tiền đã đủ, ghi nhiệm vụ gia hạn gắn với kỳ. Worker thực hiện phải an toàn khi chạy lại, không cộng thêm một tháng cho mỗi lần callback hoặc mỗi lần retry tác vụ.

Callback đến lại không được gia hạn thêm lần nữa

Chống gia hạn trùng khi nhận lại thông báo thanh toán subscription
Chống gia hạn trùng khi nhận lại thông báo thanh toán subscription

Với Collection Link, xác minh IPN và đối chiếu mã đơn, số tiền, kết quả trước khi cập nhật kỳ thu. Tài liệu SDK Pay2S nhấn mạnh merchant vẫn phải quản lý trạng thái và chống xử lý lại trong database. Một chữ ký hợp lệ không chứng minh tác vụ gia hạn chưa được thực hiện.

Khóa duy nhất nên tồn tại ở cả giao dịch nhận và nghiệp vụ cấp quyền cho kỳ. Hai callback khác nhau cùng báo một đơn không tạo hai khoản thu; hai khoản tiền thật cho cùng kỳ cần được giữ để xử lý thu thừa. Không xóa khoản thứ hai chỉ vì kỳ đã paid.

Bài vận hành chống thanh toán trùng giúp đặt kiểm soát cho luồng này. Subscription còn cần kiểm tra riêng việc gia hạn, kích hoạt tài khoản hoặc cấp tính năng không bị thực hiện lại.

Ân hạn và thanh toán muộn cần quy tắc nhất quán

Ân hạn là quyết định sản phẩm: kéo dài bao lâu, khách còn quyền gì và điều gì xảy ra khi hết hạn. Lưu mốc này trong dữ liệu thay vì rải phép tính ở nhiều job. Nếu một tác vụ nhắc nợ và một tác vụ khóa dịch vụ dùng múi giờ khác nhau, khách có thể bị khóa sớm.

Khách trả sau khi bị tạm dừng cần biết quyền được khôi phục từ ngày nào. Có thể tiếp tục kỳ đã lập hoặc áp chính sách khác đã công bố, nhưng không để callback tự chọn “từ bây giờ cộng một tháng”. Quyết định đó ảnh hưởng cả lịch kỳ sau và giá trị dịch vụ.

Khoản đến cho kỳ đã hủy nên đi vào ngoại lệ. Đối chiếu trạng thái hàng/dịch vụ và chính sách trước khi cấp lại quyền hoặc hoàn. Một link hết mục đích không đồng nghĩa mọi khoản chuyển theo thông tin cũ chắc chắn bị ngân hàng từ chối.

Trả thiếu, trả gộp và đổi người thanh toán

Khoản thiếu giữ tổng đã nhận và phần còn phải thu. Nếu cho phép cộng dồn nhiều lần, các phân bổ phải gắn đúng kỳ và không vượt giá trị giao dịch nguồn. Không bật đủ quyền chỉ vì đã có một khoản tiền vào đúng tham chiếu.

Khách có thể trả một lần cho nhiều kỳ hoặc nhiều subscription. Chỉ áp cách phân bổ được chính sách cho phép và có dữ liệu xác định. Mặc định trả kỳ cũ nhất có thể không khớp ý định khách, đặc biệt khi họ thanh toán một gói khác.

Người trả hộ không làm khoản thu vô hiệu, nhưng tên người chuyển không nên là khóa duy nhất để tự ghép. Giữ hồ sơ subscription, mã kỳ và tham chiếu thanh toán. Khi thiếu căn cứ, nhân viên xác minh thay vì engine tự gán vào tài khoản gần giống tên.

Dừng gia hạn khác với hủy kỳ và hoàn tiền

Tách dừng gia hạn, hủy kỳ thu và hoàn tiền subscription
Tách dừng gia hạn, hủy kỳ thu và hoàn tiền subscription

Khách yêu cầu không gia hạn có thể vẫn được dùng tới cuối kỳ đã trả. Hủy một kỳ chưa trả có thể dừng nhắc nợ mà không ảnh hưởng kỳ hiện tại. Hoàn một khoản đã nhận lại là nghiệp vụ tiền riêng, có điều kiện và người duyệt.

API hủy Collection Link Pay2S áp dụng đơn chưa thanh toán. Tham khảo điều kiện hủy đơn thanh toán, nhưng đừng dùng thao tác đó như nút hủy subscription hoặc hoàn tiền. Ứng dụng phải quản lý vòng đời dịch vụ riêng.

Khi khách dừng, cần quyết định các link đang chờ, lịch tạo kỳ tương lai và tác vụ nhắc. Giữ lịch sử để chăm sóc khách biết điều gì đã được hủy. Xóa bản ghi subscription có thể làm mất căn cứ xử lý khoản đến muộn hoặc yêu cầu hoàn sau đó.

Dữ liệu hóa đơn đi cùng kỳ nhưng có trạng thái riêng

Nếu gửi metadata hóa đơn cùng thanh toán, giữ phiên bản người mua, sản phẩm và số tiền của kỳ. Có thể đọc Collection Link V2 cho lớp kỹ thuật. Dữ liệu gói dịch vụ không tự quyết định thời điểm hoặc nghĩa vụ hóa đơn trong mọi hợp đồng.

Tách đủ tiền, cấp quyền và phát hành hóa đơn để xử lý lỗi đúng nơi. Kỳ đã đủ tiền nhưng hóa đơn lỗi không nên bị đổi thành chưa trả. Cấp lại quyền cũng không được phát hành thêm chứng từ chỉ vì cùng tác vụ được chạy lại.

Người phụ trách kế toán cần duyệt quy tắc theo nghiệp vụ dịch vụ và quy định hiện hành. Đội phát triển chịu trách nhiệm giữ dữ liệu, trạng thái và dấu vết cần thiết để quy tắc đó được thực hiện nhất quán.

Kiểm thử bằng đồng hồ giả lập và các kỳ cạnh nhau

Bộ thử cần đi qua cuối tháng, tháng ngắn, ngày neo đăng ký và ranh giới múi giờ. Tạo job hai lần để kiểm tra không sinh trùng kỳ; gửi callback lại để kiểm tra không gia hạn thêm. Thử thanh toán trước hạn, trong ân hạn, sau tạm dừng và vào kỳ đã hủy.

Pay2S có mô phỏng đơn demo phục vụ kiểm tra thanh toán và IPN. Kết hợp checklist sandbox với đồng hồ giả lập của ứng dụng để thử billing nhanh mà không chờ tháng thật. Luồng demo không thay kiểm tra ngân hàng và cấu hình production.

Thiết kế sẵn sàng khi nhìn một khoản tiền, đội hỗ trợ có thể chỉ ra subscription, kỳ, số tiền và quyền đã cấp. Khi quan hệ đó rõ, việc nhắc, gia hạn hay dừng dịch vụ sẽ dựa trên cùng một nền dữ liệu thay vì những phép cộng thời gian rải rác.

Nguồn kỹ thuật: Collection Link; SDK V2; Hủy đơn chưa thanh toán; Mô phỏng đơn demo. Mô hình subscription, trạng thái và JSON là thiết kế đề xuất, không phải chức năng trích nợ được xác nhận.

Leave your comment