Skip to content

Ledger and reconciliation

Design balances, journal entries, reconciliation matching, exception queues, receipts, statements, and export-ready evidence.

ReferenceUpdated June 3, 2026
ReferenceUpdated June 3, 2026

Principle

Every credible wallet, treasury, or asset-operations product needs a ledger that is more authoritative than a dashboard balance.

Mozaca models balances as derived state from immutable events and double-entry journal entries. Available, pending, reserved, failed, reversed, and settled states must be explainable from the ledger.

If only one engine is world-class, make it the ledger. Finance, support, compliance, and reconciliation all depend on it.

Journal entry shape

Journal entries should reference the originating transfer, wallet, account, approval, rail event, and idempotency key so support and auditors can trace why a balance changed.

Ledger entry examplejson
{
  "id": "jrn_01J0N4RK7H",
  "transferId": "tr_9K42",
  "idempotencyKey": "vendor-run-2026-06-001",
  "entries": [
    {
      "account": "wallet_kes_184250.available",
      "direction": "debit",
      "amount": "2500.00",
      "currency": "KES"
    },
    {
      "account": "partner_settlement.pending",
      "direction": "credit",
      "amount": "2500.00",
      "currency": "KES"
    }
  ],
  "createdAt": "2026-06-03T09:20:00Z"
}

Balance states

Customer and operator screens need to explain what funds can be used now and what is still settling, held, or reserved.

StateMeaningTypical user message
availableFunds can be used immediatelyReady to spend or send
pendingRail or partner settlement is not finalStill settling
reservedHeld for approval, dispute, or risk reviewTemporarily held
failedMovement did not completeTransfer failed
reversedMovement was undone after earlier postingTransfer reversed

Continuous matching

Reconciliation compares Mozaca ledger state with rail, bank, mobile-money, custody-provider, accounting, and webhook evidence as events arrive.

Unmatched items need owner, reason, age, amount, rail, and next action so operations teams do not reconcile from screenshots.

  1. 01

    Collect evidence

    Ingest ledger events, rail callbacks, statements, provider reports, and accounting records.

  2. 02

    Match deterministically

    Use rail reference, amount, currency, counterparty, timestamp, and internal operation ID.

  3. 03

    Queue exceptions

    Expose mismatches with reason, owner, SLA, and audit trail.

  4. 04

    Export evidence

    Produce statement, reconciliation, board, regulator, or accounting packs.

Related docs