Skip to content

Ledger Service

Core service for ACID-compliant journal and ledger entry operations.

Methods Overview

MethodDescription
createJournalEntry()Create journal with ledger entries
reverseJournalEntry()Create reversing entry
getJournalById()Retrieve journal with entries
getJournalsByWalletTransaction()Get journals for a transaction
getLedgerEntriesByEntity()Get entries for user/vendor

createJournalEntry()

Creates a journal entry with associated ledger entries in an ACID transaction.

Parameters:

ParameterTypeRequiredDescription
templateJournalEntryTemplateYesTemplate from Templates Service
metadataCreateJournalMetadataYesTransaction metadata
sessionClientSessionNoPostgreSQL session

Returns: { journal, ledgerEntries }

Validation:

  • Debits must equal credits
  • All accounts must exist
  • Checks for duplicate entries
  • Currency consistency enforced

reverseJournalEntry()

Creates a reversing entry for a posted journal entry.

Parameters:

ParameterTypeRequiredDescription
journalIdstringYesJournal ID to reverse
reasonstringYesReason for reversal
metadataReverseJournalMetadataYesReversal metadata
sessionClientSessionNoPostgreSQL session

Returns: { originalJournal, reversalJournal }

Process:

  1. Validates original is POSTED
  2. Creates opposite entries (debit ↔ credit)
  3. Links entries via reversalOf/reversedBy
  4. Original marked as REVERSED
  5. New journal posted immediately

Note: Original entry remains in database for audit trail.


getJournalById()

Retrieves a journal entry with its associated ledger entries.

Parameters:

ParameterTypeRequiredDescription
journalIdstringYesJournal ID to retrieve

Returns: Journal with populated ledger entries


getJournalsByWalletTransaction()

Retrieves all journal entries linked to a wallet transaction.

Parameters:

ParameterTypeRequiredDescription
walletTransactionIdstringYesWallet transaction ID

Returns: Array of journal entries

Use Cases:

  • Viewing accounting details for a transaction
  • Verifying journal entries were created
  • Debugging discrepancies

getLedgerEntriesByEntity()

Retrieves all ledger entries for a specific entity.

Parameters:

ParameterTypeRequiredDescription
entityIdstringYesUser or Vendor ID
entityTypestringYes"User" or "Vendor"
options.startDateDateNoFilter start date
options.endDateDateNoFilter end date
options.statusstringNoPENDING, POSTED, REVERSED
options.limitnumberNoMaximum entries

Returns: Array of ledger entries


Metadata Types

CreateJournalMetadata

FieldTypeDefaultDescription
walletTransactionIdstring-Link to source transaction
actorIdstring-User/admin performing action
ipAddressstring-Request IP for audit
requestIdstring-Request tracking ID
autoPostbooleantruePost immediately (industry standard)
amlFlaggedbooleanfalseFlag for AML review

ReverseJournalMetadata

FieldTypeDescription
reversedBystringAdmin performing reversal
ipAddressstringRequest IP
requestIdstringRequest tracking ID

Error Types

ErrorDescription
ValidationErrorTemplate validation failed
BalanceErrorDebits ≠ Credits
DuplicateErrorDuplicate journal for transaction

Best Practices

  1. Always use templates - Don't create journal templates manually
  2. Use PostgreSQL sessions - Wrap operations in transactions
  3. Link to wallet transactions - Always provide walletTransactionId
  4. Use autoPost appropriately - true for normal, false for review
  5. Document reversals - Provide clear reasons for audit trail

Internal use only - Keshless Payment Platform