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: