Skip to main content

Data Flow Architecture

Overview

This document describes the flow of data through the BankLingo Core Banking System. It covers transaction processing flows, approval workflows, event-driven patterns, message queue interactions, process engine execution, and data synchronization mechanisms.

High-Level Data Flow

Transaction Processing Flow

1. Deposit Transaction Flow

Key Data Points:

StepData WrittenData ReadCache Updated
1. Create PENDINGTransaction record, AccountHoldAccount balanceTransaction state
2. ApprovalTransaction update, Account balanceTransaction detailsTransaction state
3. Direct SETTLEDTransaction record, Account balanceAccount balanceTransaction state
4. Audit loggingAuditLog entries--
5. NotificationServiceBus message--

2. Withdrawal Transaction Flow

Data Flow Characteristics:

  • Balance Validation: Read-only queries with cache-first strategy
  • Hold Placement: Write to AccountHolds table + Redis cache update
  • Settlement: Account balance update + hold removal (atomic transaction)
  • External Payment: Asynchronous call to NIBSS with retry logic
  • Audit Trail: All state changes logged to AuditLog table

3. Cheque Transaction Flow (Two-Level State)

Cheque State Mapping:

Transaction StateCheque StateDescriptionBalance Impact
PENDINGAPPROVAL_PENDINGAwaiting transaction approvalNone
PENDINGPENDINGTransaction approved, awaiting clearingNone
SETTLEDCLEAREDCheque cleared successfullyBalance credited
CANCELLEDCANCELLEDCancelled before approval/clearingNone
SETTLEDBOUNCEDCheque bounced during clearingNone (or reversed if credited)

Approval Workflow Data Flow

Approval State Transitions

Approval Workflow Sequence

Database Operations Summary:

PhaseWrites (DB)Reads (DB)Cache Operations
Create PENDINGTransaction, AccountHold, TransactionImpactAccountSET txn:id, SET hold:id
ApproveAccount, GL_Entry, Transaction (UPDATE), ApprovalHistory, DELETE HoldTransaction, TransactionImpactDEL hold:id, SET txn:id, SET acct:id:balance
RejectTransaction (UPDATE), ApprovalHistory, DELETE HoldTransactionDEL hold:id, SET txn:id, INCR availableBalance
ReverseAccount, GL_Entry (reversal), Transaction (UPDATE), ReversalHistoryTransaction, AccountSET txn:id, SET acct:id:balance

Event-Driven Data Flow

Domain Events Architecture

Event Types & Handlers

Transaction Events:

Event TypePublished BySubscribersData Payload
TransactionCreatedAll transaction handlersAudit, Notification, ReportingTransactionId, Type, Amount, AccountId, Status, Timestamp
TransactionApprovedTransaction ManagementAudit, Notification, Reporting, IntegrationTransactionId, ApproverId, ApprovalDate, PreviousState, NewState
TransactionRejectedTransaction ManagementAudit, NotificationTransactionId, RejecterId, RejectionReason, Timestamp
TransactionSettledTransaction ManagementAudit, Reporting, IntegrationTransactionId, SettlementDate, FinalAmount, BalanceImpact
TransactionReversedTransaction ManagementAudit, Notification, Reporting, IntegrationTransactionId, ReversalReason, ReversedBy, ReversalDate, BalanceImpact

Cheque Events:

Event TypePublished BySubscribersData Payload
ChequeDepositedCheque HandlerAudit, NotificationChequeId, TransactionId, ChequeNumber, Amount, BankCode
ChequeClearedCheque ServiceAudit, Notification, ReportingChequeId, ClearingDate, Amount
ChequeBouncedCheque ServiceAudit, Notification, ReportingChequeId, BounceReason, BounceDate, Charges

Process Events:

Event TypePublished BySubscribersData Payload
ProcessStartedProcess EngineAuditProcessInstanceId, ProcessDefinitionKey, StartDate, StartedBy
UserTaskCreatedProcess EngineNotificationTaskId, ProcessInstanceId, AssigneeId, TaskName
UserTaskCompletedProcess EngineAudit, Process EngineTaskId, CompletedBy, CompletionDate, Variables

Outbox Pattern for Reliable Messaging

Outbox Table Schema:

CREATE TABLE Outbox (
Id UNIQUEIDENTIFIER PRIMARY KEY,
EventType NVARCHAR(100) NOT NULL,
EventData NVARCHAR(MAX) NOT NULL,
CreatedAt DATETIME2 NOT NULL,
Processed BIT NOT NULL DEFAULT 0,
ProcessedAt DATETIME2 NULL,
RetryCount INT NOT NULL DEFAULT 0,
LastError NVARCHAR(MAX) NULL
)

CREATE INDEX IX_Outbox_Processed ON Outbox(Processed, CreatedAt)

Process Engine Data Flow

BPMN Process Execution Flow

Process Instance Data Model:

-- Process Instance
CREATE TABLE ProcessInstance (
Id UNIQUEIDENTIFIER PRIMARY KEY,
ProcessDefinitionKey NVARCHAR(100) NOT NULL,
BusinessKey NVARCHAR(100),
State NVARCHAR(50) NOT NULL, -- ACTIVE, WAITING, COMPLETED, TERMINATED
StartTime DATETIME2 NOT NULL,
EndTime DATETIME2 NULL,
StartedBy UNIQUEIDENTIFIER NOT NULL
)

-- Process Variables (EAV pattern)
CREATE TABLE ProcessVariable (
Id UNIQUEIDENTIFIER PRIMARY KEY,
ProcessInstanceId UNIQUEIDENTIFIER NOT NULL,
VariableName NVARCHAR(100) NOT NULL,
VariableValue NVARCHAR(MAX),
DataType NVARCHAR(50) NOT NULL
)

-- User Tasks
CREATE TABLE UserTask (
Id UNIQUEIDENTIFIER PRIMARY KEY,
ProcessInstanceId UNIQUEIDENTIFIER NOT NULL,
TaskDefinitionKey NVARCHAR(100) NOT NULL,
AssigneeId UNIQUEIDENTIFIER,
State NVARCHAR(50) NOT NULL, -- CREATED, COMPLETED, CANCELLED
CreatedAt DATETIME2 NOT NULL,
CompletedAt DATETIME2 NULL
)

Data Synchronization Patterns

1. Cache Synchronization Strategy

Write-Through Pattern:

Cache-Aside Pattern (Read):

Cached Data Types:

Data TypeCache Key PatternTTLInvalidation Strategy
Account Balanceacct:{accountId}:balance5 minutesWrite-through on transaction
Transaction Statetxn:{transactionId}:state1 hourWrite-through on state change
User Sessionsession:{sessionId}30 minutesSliding expiration
Product Configproduct:{productId}24 hoursManual invalidation on change
Process Stateprocess:{instanceId}:state1 hourWrite-through on state change
User Permissionsuser:{userId}:permissions15 minutesInvalidate on permission change

2. Read Replica Synchronization

Replication Lag Handling:

  • Typical lag: 1-5 seconds (asynchronous replication)
  • Strategy: Direct critical reads to primary, non-critical to replica
  • Read-your-writes: Cache recent writes, serve from cache if read immediately

3. Event Store Synchronization

Event Sourcing Read Models:

Read ModelUpdated ByPurposeRebuild Time
AccountBalanceTransactionSettled, TransactionReversedQuery balance~5 minutes
TransactionHistoryAll transaction eventsQuery history~30 minutes
AuditTrailAll audit eventsCompliance reporting~2 hours
DailyTransactionSummaryTransactionSettledEOD reporting~1 hour

Message Queue Data Flow

Service Bus Queue Architecture

Message Processing Flow:

Message Types & Payloads:

1. Notification Messages:

{
"messageType": "TransactionApproved",
"recipientId": "user-123",
"channels": ["email", "sms", "push"],
"templateId": "transaction-approval",
"data": {
"transactionId": "txn-456",
"amount": 5000.00,
"accountNumber": "1234567890",
"approvalDate": "2026-01-01T10:30:00Z"
},
"priority": "high",
"scheduledTime": null
}

2. Batch Processing Messages:

{
"messageType": "EndOfDayBatch",
"batchId": "batch-789",
"batchType": "InterestCalculation",
"parameters": {
"businessDate": "2026-01-01",
"productTypes": ["SAVINGS", "CURRENT"]
},
"estimatedDuration": "PT30M"
}

3. Integration Messages:

{
"messageType": "PaymentInstruction",
"externalSystem": "NIBSS",
"operation": "InterBankTransfer",
"payload": {
"transactionId": "txn-789",
"sourceAccount": "1234567890",
"destinationAccount": "0987654321",
"amount": 10000.00,
"narration": "Payment for services"
},
"idempotencyKey": "idem-123-456",
"retryPolicy": {
"maxRetries": 5,
"backoffSeconds": [10, 30, 60, 300, 600]
}
}

Data Flow Performance Characteristics

Throughput Metrics

Flow TypeAverage LatencyP95 LatencyP99 LatencyThroughput
Direct Transaction (no approval)150ms300ms500ms500 TPS
Approval Transaction (PENDING creation)100ms200ms350ms800 TPS
Approval Processing200ms400ms700ms300 TPS
Cheque Deposit180ms350ms600ms400 TPS
Cheque Clearing250ms500ms900ms200 TPS
Process Instance Start300ms600ms1000ms150 TPS
User Task Completion250ms500ms800ms200 TPS
Event Publishing50ms100ms200ms2000 TPS
Message Queue Publish20ms50ms100ms5000 TPS
Message Queue Consume100ms200ms400ms1000 TPS

Data Volume Estimates

Daily Transaction Volume:

  • Deposits: 50,000 transactions/day
  • Withdrawals: 40,000 transactions/day
  • Cheques: 10,000 transactions/day
  • Loans: 5,000 transactions/day
  • Total: ~105,000 transactions/day

Database Growth:

  • Transaction table: ~3 GB/year
  • Audit logs: ~10 GB/year
  • Event store: ~5 GB/year
  • Total: ~18 GB/year

Cache Hit Rates:

  • Account balance: 85% hit rate
  • Transaction state: 90% hit rate
  • User permissions: 95% hit rate
  • Product config: 99% hit rate


Summary

The data flow architecture demonstrates:

  • Transaction Processing - Clear flow from API to database with caching
  • Approval Workflows - Two-phase processing with hold management
  • Event-Driven Architecture - Reliable event publishing with Outbox pattern
  • Process Engine Integration - BPMN execution with context loading
  • Cache Synchronization - Write-through and cache-aside patterns
  • Message Queues - Reliable async processing with DLQ handling
  • High Performance - Sub-second latency for most operations
  • Scalability - 500+ TPS capacity with horizontal scaling

Data Flow Characteristics:

  • Consistency: Strong consistency for financial transactions
  • Availability: 99.95% uptime with failover capabilities
  • Partition Tolerance: Geo-redundant data replication
  • Latency: P95 < 500ms for critical paths
  • Throughput: 500+ transactions per second