Payments
Contents
Payments#
Payments are the final step in benefit delivery—converting approved entitlements into actual disbursements to beneficiaries. OpenSPP manages the full payment lifecycle from preparation through reconciliation.
For: All audiences
What is a payment?#
A payment is a record of an actual or attempted disbursement:
Field |
Description |
|---|---|
Entitlement |
The approved benefit being paid |
Beneficiary |
Who receives the payment |
Amount issued |
The payment amount |
Account number |
Payment destination |
Status |
Paid, failed, or pending |
Payments vs. entitlements#
Concept |
Purpose |
|---|---|
Entitlement |
What the beneficiary should receive (approved benefit) |
Payment |
The actual disbursement transaction |
One entitlement can have multiple payment attempts (if initial attempts fail) or partial payments.
Payment lifecycle#
stateDiagram-v2
direction LR
[*] --> Issued: Prepare payments
Issued --> Sent: Send to FSP
Sent --> Reconciled: Receive confirmation
state Reconciled {
[*] --> Paid: Success
[*] --> Failed: Error
}
Paid --> [*]
Failed --> Issued: Retry
Payment states#
State |
Description |
Next steps |
|---|---|---|
Issued |
Payment created, ready to send |
Send to payment provider |
Sent |
Transmitted to financial service provider |
Await confirmation |
Reconciled |
Response received |
Check status (paid/failed) |
Payment status#
After reconciliation, payments have a final status:
Status |
Meaning |
Action |
|---|---|---|
Paid |
Successfully delivered |
Complete |
Failed |
Could not be delivered |
Investigate and retry |
Payment batches#
Payments are organized into batches for efficient processing:
graph TD
C[Cycle] --> B1[Batch 1<br/>500 payments]
C --> B2[Batch 2<br/>500 payments]
C --> B3[Batch 3<br/>250 payments]
B1 --> FSP[Financial Service Provider]
B2 --> FSP
B3 --> FSP
style C fill:#e3f2fd
style FSP fill:#e8f5e9
Why batches?#
Benefit |
Description |
|---|---|
Manageable size |
Easier to track and troubleshoot |
Parallel processing |
Multiple batches can process simultaneously |
Error isolation |
Problems in one batch don't affect others |
Reporting |
Clear statistics per batch |
Batch configuration#
Setting |
Description |
|---|---|
Max batch size |
Maximum payments per batch (default: 500) |
Batch tags |
Categories for organizing batches |
Auto-create |
Automatically create batches from entitlements |
Batch statistics#
Each batch tracks:
Metric |
Description |
|---|---|
Issued transactions |
Payments created |
Issued amount |
Total value issued |
Sent transactions |
Payments transmitted |
Paid transactions |
Successful payments |
Paid amount |
Total value delivered |
Failed transactions |
Unsuccessful payments |
Failed amount |
Value not delivered |
Payment flow#
1. Prepare payments#
Convert approved entitlements into payment records:
graph LR
E[Approved<br/>Entitlements] --> P[Prepare<br/>payments]
P --> R[Payment<br/>records]
R --> B[Organize<br/>into batches]
style E fill:#e3f2fd
style R fill:#fff3e0
style B fill:#f3e5f5
What happens:
Creates payment records for each entitlement
Captures beneficiary account information
Organizes into batches based on configuration
Sets initial amount from entitlement
2. Send payments#
Transmit batches to financial service providers:
What happens:
Batch is marked as started
Payments are sent to payment gateway/FSP
State changes from "Issued" to "Sent"
External reference numbers are recorded
3. Reconcile payments#
Receive and process payment confirmations:
What happens:
FSP returns payment status
Successful payments marked as "Paid"
Failed payments marked for investigation
Entitlement status is updated
Statistics are calculated
Payment manager#
The payment manager controls how payments are processed:
Manager type |
Description |
|---|---|
Default |
File-based export for manual processing |
Bank integration |
Direct API to banking systems |
Mobile money |
Integration with mobile wallet providers |
Custom |
Developer-defined payment logic |
Manager configuration#
Setting |
Purpose |
|---|---|
Auto-create batch |
Automatically batch payments |
Batch tags |
Categorization rules |
Validation rules |
Account validation before sending |
Payment methods#
OpenSPP supports multiple payment channels:
Bank transfer#
Aspect |
Details |
|---|---|
Data required |
Bank account number, bank code |
Processing |
Batch file or API |
Confirmation |
Bank reconciliation file |
Mobile money#
Aspect |
Details |
|---|---|
Data required |
Mobile phone number |
Processing |
API integration |
Confirmation |
Real-time or webhook |
Cash pickup#
Aspect |
Details |
|---|---|
Data required |
ID document, pickup location |
Processing |
Voucher/code generation |
Confirmation |
Point-of-sale confirmation |
Vouchers#
Aspect |
Details |
|---|---|
Data required |
Redemption location |
Processing |
Voucher printing/digital |
Confirmation |
Merchant redemption |
Handling payment failures#
Common failure reasons#
Reason |
Description |
Resolution |
|---|---|---|
Invalid account |
Account doesn't exist |
Update beneficiary data |
Inactive account |
Account is closed/dormant |
Get new account details |
Incorrect details |
Name/number mismatch |
Verify and correct |
Insufficient funds |
Program account underfunded |
Add funds |
Technical error |
System/network issue |
Retry |
Recovery process#
graph TD
F[Failed Payment] --> I[Investigate]
I --> |Data issue| U[Update data]
I --> |Technical| R[Retry]
I --> |Permanent| C[Cancel & create new]
U --> R
R --> S[Send again]
C --> N[New entitlement]
style F fill:#ffebee
style S fill:#e8f5e9
Retry workflow#
Identify failures - Filter payments by failed status
Investigate cause - Check error messages
Correct data - Update account information if needed
Reset state - Move payment back to "Issued"
Retry - Include in new batch
Payment security#
Data protection#
Measure |
Purpose |
|---|---|
Account encryption |
Protect payment details |
Access control |
Limit who can process payments |
Audit logging |
Track all payment actions |
Fraud prevention#
Control |
Description |
|---|---|
Duplicate detection |
Prevent double payments |
Amount limits |
Flag unusual amounts |
Approval workflow |
Require authorization |
Reconciliation |
Match sent vs. received |
Reporting#
Payment reports#
Report |
Contents |
|---|---|
Payment summary |
Totals by status |
Batch status |
Progress of each batch |
Failure analysis |
Breakdown of failures |
Reconciliation |
Matching with FSP records |
Key metrics#
Metric |
Description |
|---|---|
Payment success rate |
% of payments that succeed |
Average processing time |
Time from issue to paid |
Failure rate by type |
Which errors are most common |
Amount disbursed |
Total value delivered |
Best practices#
Preparation#
Practice |
Reason |
|---|---|
Validate accounts first |
Reduce failures |
Verify amounts |
Catch errors early |
Test with small batch |
Confirm integration works |
Document process |
Clear procedures |
Processing#
Practice |
Reason |
|---|---|
Process in batches |
Manageable, traceable |
Monitor progress |
Catch issues early |
Keep records |
Audit trail |
Have fallback |
Alternative if FSP fails |
Reconciliation#
Practice |
Reason |
|---|---|
Reconcile promptly |
Timely failure handling |
Investigate all failures |
Understand root causes |
Update beneficiary data |
Reduce future failures |
Report discrepancies |
Catch fraud/errors |
Are you stuck?#
Why are payments failing?#
Common causes:
Invalid or outdated account numbers
Mismatched beneficiary names
FSP technical issues
Insufficient program funds
Debug steps:
Check failure message/code
Verify beneficiary account data
Confirm FSP connectivity
Check program journal balance
How do I retry failed payments?#
Go to Payment Batches
Filter for failed payments
Correct any data issues
Create new batch with failed payments
Send the new batch
Can I cancel a payment?#
If state is "Issued" (not yet sent):
Yes, you can delete the payment record
If state is "Sent":
Cannot cancel in OpenSPP
Must coordinate with FSP to reverse
How do I handle partial payments?#
If a beneficiary should receive payment in installments:
Create separate entitlements for each installment, or
Process multiple payments against same entitlement
Track balance remaining on entitlement
Why don't I see payment options?#
Payment features only appear for cash entitlement programs. Check:
Is the entitlement manager a Cash type?
Is the journal configured on the program?
Do you have payment manager permissions?
Next steps#
Learn more about concepts:
Entitlements - What payments are based on
Cycles - Where payment processing happens
Programs - How payment managers are configured
For configuration:
See the Configuration Guide for setting up payment managers and FSP integrations
For developers:
See the Developer Guide for creating custom payment managers
openspp.org