Skip to main content

Universal Transaction Management - Developer Reference

Overview​

The Universal Transaction Management system provides a unified API for managing the lifecycle of all transactions across the BankLingo Core Banking System. These commands work consistently across:

  • ✅ Deposit transactions (deposits, withdrawals, transfers)
  • ✅ Loan transactions (disbursements, repayments, writeoffs)
  • ✅ Teller transactions (over-the-counter operations)
  • ✅ Till operations (cash management, till-to-till, till-to-vault)
  • ✅ Vault operations (funding, transfers)
  • ✅ Cheque transactions (deposits, withdrawals, clearing, bouncing)

Key Features​

🎯 Transaction-Type Agnostic​

All commands work using the CBSTransaction unified transaction table and TransactionImpactRecord tracking system. You don't need to know the specific transaction type - the system handles it automatically.

🔄 Complete Lifecycle Management​

📊 Impact-Based Reversals​

The system uses TransactionImpactRecord to track all entity changes. When reversing a transaction:

  • Balance changes are automatically restored
  • State transitions are reversed (e.g., ACTIVE → PENDING_APPROVAL)
  • Hold amounts are released or re-applied
  • Accounting entries are automatically journaled

Available Commands​

1. Query Commands​

CommandPurposeKey Features
Get All TransactionsSystem-wide transaction searchFiltering, pagination, account lookups
Get Transaction DetailsSingle transaction with full historyImpact records, related entities, audit trail

2. Approval Workflow Commands​

CommandPurposeTransition
Approve TransactionApprove pending transactionPENDING → SETTLED
Reject TransactionReject transaction in workflowPENDING → CANCELLED

3. Cancellation & Reversal Commands​

CommandPurposeTransition
Cancel TransactionCancel pending transactionPENDING → CANCELLED
Reverse TransactionReverse completed transactionSETTLED → REVERSED

Transaction States​

State Definitions​

StateDescriptionBalance ImpactHold ImpactReversible
PENDINGAwaiting approvalNoneIncreasedYes (Cancel/Reject)
SETTLEDCompleted successfullyAppliedReleasedYes (Reverse)
CANCELLEDRejected before settlementNoneReleasedNo (Terminal)
REVERSEDReversed after settlementRestoredN/ANo (Terminal)

State Transitions​

Creating a Transaction​

// With approval required
POST /api/bpm/cmd/CreateDeposit
{
"accountId": "...",
"amount": 10000,
"requireApproval": true // → PENDING state
}

// Direct settlement (no approval)
POST /api/bpm/cmd/CreateDeposit
{
"accountId": "...",
"amount": 10000,
"requireApproval": false // → SETTLED state
}

Approval Path (PENDING → SETTLED)​

// Approve transaction
POST /api/bpm/cmd/ApproveTransaction
{
"transactionKey": "TRX-2026-001234",
"approverNotes": "Verified customer identity"
}
// Result: PENDING → SETTLED, balance updated

Rejection Path (PENDING → CANCELLED)​

// Option 1: Reject with workflow categorization
POST /api/bpm/cmd/RejectTransaction
{
"transactionKey": "TRX-2026-001234",
"rejectionReason": "Customer documents expired",
"rejectionCategory": "INSUFFICIENT_DOCUMENTATION"
}

// Option 2: Simple cancellation
POST /api/bpm/cmd/CancelTransaction
{
"transactionKey": "TRX-2026-001234",
"reason": "Customer request"
}
// Result: PENDING → CANCELLED, holds released

Reversal Path (SETTLED → REVERSED)​

// Reverse completed transaction
POST /api/bpm/cmd/ReverseTransaction
{
"transactionKey": "TRX-2026-001234",
"reversalReason": "Duplicate transaction detected",
"reversalCategory": "DUPLICATE"
}
// Result: SETTLED → REVERSED, balance restored

Common Use Cases​

Use Case 1: High-Value Deposit with Approval​

Use Case 2: Suspicious Transaction Rejection​

Use Case 3: Accidental Double-Payment Reversal​


TransactionImpactRecord System​

How It Works​

Every transaction creates a TransactionImpactRecord that tracks all entity changes:

{
"transactionId": "a1b2c3d4...",
"impactedEntities": [
{
"entityType": "DepositAccount",
"entityId": "account-123",
"fieldName": "Balance",
"oldValue": "50000.00",
"newValue": "60000.00",
"deltaAmount": "+10000.00"
},
{
"entityType": "DepositAccount",
"entityId": "account-123",
"fieldName": "HoldAmount",
"oldValue": "5000.00",
"newValue": "0.00",
"deltaAmount": "-5000.00"
}
]
}

Benefits​

✅ Automatic Reversal: System knows exactly what to undo
✅ Audit Trail: Complete history of all changes
✅ Type Safety: Works across all transaction types
✅ Rollback Support: Can reverse any settled transaction


Error Handling​

Common Response Codes​

CodeMeaningAction
TRX_NOT_FOUNDTransaction doesn't existVerify transaction key
INVALID_STATE_TRANSITIONCannot perform action in current stateCheck transaction state
ALREADY_SETTLEDCannot cancel settled transactionUse ReverseTransaction instead
ALREADY_REVERSEDTransaction already reversedTransaction is terminal
INSUFFICIENT_PERMISSIONSUser lacks approval rightsCheck user roles

Example Error Response​

{
"success": false,
"message": "Cannot cancel transaction in SETTLED state",
"code": "INVALID_STATE_TRANSITION",
"data": {
"transactionKey": "TRX-2026-001234",
"currentState": "SETTLED",
"attemptedAction": "CANCEL",
"suggestion": "Use ReverseTransaction to undo a settled transaction"
}
}

Authentication & Authorization​

Required Permissions​

OperationRequired RoleNotes
Get All TransactionsViewTransactionsBranch-level filtering applies
Get Transaction DetailsViewTransactionsCan only view own branch
Approve TransactionApproveTransactionsMay require manager role
Reject TransactionApproveTransactionsRejection reasons logged
Cancel TransactionManageTransactionsCan cancel own transactions
Reverse TransactionReverseTransactionsTypically manager-only

Branch-Level Security​

All queries automatically filter by user's branch access:

Code Removed

Implementation details removed for security.

Contact support for implementation guidance.


Best Practices​

✅ DO​

  • ✅ Always provide descriptive reasons for cancellations/reversals
  • ✅ Use appropriate rejection/reversal categories for reporting
  • ✅ Check transaction state before attempting operations
  • ✅ Include approver notes for audit trail
  • ✅ Use pagination for large transaction queries

❌ DON'T​

  • ❌ Don't try to cancel SETTLED transactions (use reverse instead)
  • ❌ Don't reverse PENDING transactions (use cancel instead)
  • ❌ Don't skip approval workflow for high-value transactions
  • ❌ Don't reuse transaction keys
  • ❌ Don't query all transactions without filters

Next Steps​

Choose a command to learn more: