Skip to content

Transaction Templates Reference

The Transaction Templates Service provides pre-built double-entry transaction patterns that automatically create balanced journal entries.

Templates Overview

TemplateDescriptionDouble-Entry Pattern
getUserTransferTemplateP2P transfer between usersUser Wallets ↔ User Wallets
getUserPaymentTemplateUser pays vendor (with fee)User Wallets → Vendor Wallets + Fee Revenue
getUserTopupTemplateUser adds funds from external sourceUser Wallets ↔ Cash in Transit
getUserWithdrawalTemplateUser withdraws cash at vendorUser Wallets → Vendor + Fee Revenue
getVendorCommissionTemplateVendor earns commissionCommission Income → Vendor Wallets
getUserRefundTemplateRefund to userRefund Expenses → User Wallets
getAirtimePurchaseTemplateAirtime purchaseUser Wallets → Processing Costs
getBillPaymentTemplateBill paymentUser Wallets → Processing Costs
getOpeningBalanceTemplateMigration balanceWallet → Retained Earnings
getManualAdjustmentTemplateAdmin correctionSpecified Account ↔ Retained Earnings
getReversalTemplateReverse any entrySwaps all debits/credits

Template Details

1. User Transfer (P2P)

Transfers funds between two users.

ParameterTypeRequiredDescription
senderIdstringYesSender user ID
recipientIdstringYesRecipient user ID
amountnumberYesAmount in Emalageni
referencestringNoTransaction description

Accounts: 1110 (User Wallets) - debit sender, credit recipient


2. User Payment (to Vendor)

User pays vendor with transaction fee.

ParameterTypeRequiredDescription
userIdstringYesPaying user ID
vendorIdstringYesReceiving vendor ID
amountnumberYesPayment amount
feenumberYesTransaction fee
referencestringNoTransaction description

Accounts:

  • 1110 (User Wallets) - debit (amount + fee)
  • 1120 (Vendor Wallets) - credit amount
  • 4110 (Transaction Fee Revenue) - credit fee

3. User Topup

User adds funds from external source (mobile money, etc.).

ParameterTypeRequiredDescription
userIdstringYesUser ID
amountnumberYesTopup amount
sourcestringYesPayment source (e.g., "Mobile Money - MTN")

Accounts:

  • 1110 (User Wallets) - debit
  • 1130 (Cash in Transit) - credit

4. User Withdrawal

User withdraws cash at vendor location.

ParameterTypeRequiredDescription
userIdstringYesWithdrawing user ID
vendorIdstringYesPayout vendor ID
amountnumberYesWithdrawal amount
feenumberYesWithdrawal fee
referencestringNoTransaction description

Accounts:

  • 1110 (User Wallets) - debit (amount + fee)
  • 1120 (Vendor Wallets) - credit amount
  • 4120 (Withdrawal Fee Revenue) - credit fee

5. Vendor Commission

Vendor earns commission from platform.

ParameterTypeRequiredDescription
vendorIdstringYesVendor ID
amountnumberYesCommission amount
descriptionstringYesCommission description

Accounts:

  • 4130 (Commission Income) - debit
  • 1120 (Vendor Wallets) - credit

6. User Refund

Refund a previous transaction.

ParameterTypeRequiredDescription
userIdstringYesUser receiving refund
amountnumberYesRefund amount
reasonstringYesRefund reason
originalTransactionIdstringNoOriginal transaction reference

Accounts:

  • 5120 (Refund Expenses) - debit
  • 1110 (User Wallets) - credit

7. Airtime Purchase

User purchases airtime through platform.

ParameterTypeRequiredDescription
userIdstringYesPurchasing user ID
amountnumberYesAirtime amount
providerstringYesNetwork provider (MTN, etc.)
phoneNumberstringYesRecipient phone number

Accounts:

  • 1110 (User Wallets) - debit
  • 5110 (Processing Costs) - credit

8. Bill Payment

User pays utility bill (electricity, water, etc.).

ParameterTypeRequiredDescription
userIdstringYesPaying user ID
amountnumberYesBill amount
billTypestringYesBill type (Electricity, Water, etc.)
accountNumberstringYesUtility account number

Accounts:

  • 1110 (User Wallets) - debit
  • 5110 (Processing Costs) - credit

9. Opening Balance

Migrate historical balance for existing user/vendor (one-time migration).

ParameterTypeRequiredDescription
entityIdstringYesUser or Vendor ID
entityTypestringYes"User" or "Vendor"
balancenumberYesExisting balance to migrate
descriptionstringYesMigration description

Accounts:

  • 1110/1120 (Wallet) - debit balance
  • 3100 (Retained Earnings) - credit balance

Use Case: One-time migration of existing wallet balances to new accounting system.


10. Manual Adjustment

Admin manual correction (use sparingly, requires approval).

ParameterTypeRequiredDescription
entityIdstringYesUser or Vendor ID
entityTypestringYes"User" or "Vendor"
accountCodestringYesTarget account code
amountnumberYesAdjustment amount
isDebitbooleanYestrue = increase, false = decrease
reasonstringYesAdjustment reason
adminIdstringYesApproving admin ID

Accounts: Specified account ↔ 3100 (Retained Earnings)

Warning: Only use for corrections approved by finance team.


11. Reversal

Reverse any existing template.

ParameterTypeRequiredDescription
originalTemplateobjectYesThe template to reverse
reasonstringYesReversal reason

Effect: Swaps all debits ↔ credits from the original template

Note: Prefer using ledgerService.reverseJournalEntry() for posted entries.


Account Codes Reference

CodeAccount NameTypeNormal Balance
1110User WalletsAssetDebit
1120Vendor WalletsAssetDebit
1130Cash in TransitAssetDebit
3100Retained EarningsEquityCredit
4110Transaction Fee RevenueRevenueCredit
4120Withdrawal Fee RevenueRevenueCredit
4130Commission IncomeRevenueCredit
5110Processing CostsExpenseDebit
5120Refund ExpensesExpenseDebit

Validation Rules

All templates are validated before journal creation:

  1. Balance Check: Total debits must equal total credits
  2. Account Existence: All account codes must exist in Chart of Accounts
  3. Amount Validation: All amounts must be > 0
  4. Currency Consistency: All amounts in Emalageni (E)

Best Practices

  1. Always use templates - Don't create journal entries manually
  2. Choose the right template - Use the most specific template available
  3. Provide references - Help with tracing and audit
  4. Use opening balances once - Only during migration
  5. Document manual adjustments - Require approval and clear reasoning

Internal use only - Keshless Payment Platform