Skip to content

Transaction Workflows

The accounting system uses immediate posting by default, with exception-based manual review for flagged transactions.

Entry States

StateUsageDescription
POSTED95%+ of transactionsImmediate, immutable, industry standard
PENDING<5% exceptionsFlagged for review, can be cancelled
CANCELLEDException flowAborted before posting
REVERSEDCorrectionsPosted entry that was corrected

Standard Flow (95%+ of transactions)

Transaction Created → POSTED (immediate)

              (if correction needed)

                      REVERSED

Default Behavior:

  • Transactions are POSTED immediately when created
  • No delays in transaction completion
  • Users receive money instantly
  • Matches user expectations

Characteristics:

  • Ledger entries immediately immutable
  • Cannot be edited or deleted
  • Only correctable via reversal
  • Audit log entry created instantly

Exception Flow (<5% of transactions)

Flagged Transaction → PENDING → POSTED (after review)

              (if rejected)

                      CANCELLED

Exception Triggers:

  • autoPost: false explicitly set
  • AML system flags transaction
  • Risk score exceeds threshold
  • Manual admin hold
  • High-value transactions (e.g., > E10,000)

Characteristics:

  • Entries created but not yet immutable
  • Can be cancelled without reversal
  • Wallet balances already updated
  • Appears in review queues

When to Use Each Flow

Standard (autoPost: true - default)

ScenarioReason
Normal P2P transfersLow risk, expected behavior
Small paymentsNo compliance concern
TopupsStandard operation
Most withdrawalsNormal operations

Exception (autoPost: false)

ScenarioReason
High-value paymentsCompliance review threshold
AML flagged transactionsSuspicious activity detected
Refund processingRequires admin approval
Manual adjustmentsFinance team review
First-time user transactionsNew user verification

Posting Service Operations

OperationDescription
postEntry()Manually post a pending entry
cancelEntry()Cancel a pending entry
autoPostPendingEntries()Auto-post old pending entries
getEntriesForReview()Get flagged entries needing review
reviewEntry()Approve or reject flagged entry

Auto-Posting Logic

Daily reconciliation job (2 AM) auto-posts pending entries:

Criteria:

  • Entry is PENDING
  • Created more than 30 minutes ago
  • Not flagged for manual review
  • No AML/fraud flags

Review Queues

Transactions flagged for manual review:

Flag TypeDescription
amlFlaggedAML system flagged
highValueTransactions ≥ threshold
newUserUser registered < 7 days ago
crossBorderInternational transactions

Immutability

Posted entries are protected at the database level:

  • Cannot change status from POSTED back to PENDING
  • Cannot modify posted ledger entries
  • Any correction requires a reversal entry

Best Practices

  1. Use autoPost: true for low-value transactions (< E100)
  2. Use autoPost: false for high-value transactions (≥ E100)
  3. Flag suspicious transactions for manual review
  4. Never modify posted entries - use reversals
  5. Document reversal reasons in the audit trail
  6. Review pending queue daily to ensure nothing stuck

Internal use only - Keshless Payment Platform