Skip to main content

Till Remove Cash Transaction

Remove cash from a teller till (decrease till balance).

Overview

A Till Remove Cash transaction decreases the cash balance of a teller till. This operation is typically used when:

  • Transferring excess cash to branch vault
  • Removing cash at end of day (till closure preparation)
  • Transferring cash to another till
  • Recording cash sent for deposit or secure transport

Key Characteristics:

  • Purpose: Decrease till cash balance
  • Transaction Type: Till management operation
  • Destination: Branch vault, another till, or GL account
  • Impact: Till balance decreased, destination account increased
  • Audit: Full audit trail with impact tracking
  • Authorization: Requires till owner or authorized user

Transaction Flow


Entities Impacted

Scenario: Remove ₦200,000 Cash from Till to Branch Vault

Context:

  • Till: TILL-002 (Teller: John Smith)
  • Current Till Balance: ₦550,000
  • Minimum Till Balance: ₦50,000
  • Amount to Remove: ₦200,000
  • Destination: Branch Vault

TransactionImpactRecord

{
transactionId: "TXN-TILL-RMV-20251229-0001",
transactionType: "REMOVE_CASH_FROM_TILL",
transactionState: "SETTLED",
transactionDate: "2025-12-29T16:30:00Z",
amount: 200000.00,
impactedEntities: [
// Teller Till
{
entityType: "TellerTill",
entityId: 102,
entityKey: "TILL-002",
fieldName: "CashBalance",
oldValue: 550000.00,
newValue: 350000.00,
deltaAmount: -200000.00,
isReversal: false
},
{
entityType: "TellerTill",
entityId: 102,
entityKey: "TILL-002",
fieldName: "AvailableBalance",
oldValue: 550000.00,
newValue: 350000.00,
deltaAmount: -200000.00,
isReversal: false
},
{
entityType: "TellerTill",
entityId: 102,
entityKey: "TILL-002",
fieldName: "TotalCashOut",
oldValue: 300000.00,
newValue: 500000.00,
deltaAmount: +200000.00,
isReversal: false
},
{
entityType: "TellerTill",
entityId: 102,
entityKey: "TILL-002",
fieldName: "TransactionCount",
oldValue: 42,
newValue: 43,
deltaAmount: +1,
isReversal: false
},
{
entityType: "TellerTill",
entityId: 102,
entityKey: "TILL-002",
fieldName: "LastUpdateDate",
oldValue: "2025-12-29T15:45:00Z",
newValue: "2025-12-29T16:30:00Z",
deltaAmount: 0,
isReversal: false
},
// Branch Vault (destination)
{
entityType: "BranchVault",
entityId: 5,
entityKey: "VAULT-HQ-001",
fieldName: "CashBalance",
oldValue: 4900000.00,
newValue: 5100000.00,
deltaAmount: +200000.00,
isReversal: false
},
// GL Accounts
{
entityType: "GLAccount",
entityKey: "1100-002", // Branch Vault
fieldName: "DebitAmount",
deltaAmount: +200000.00
},
{
entityType: "GLAccount",
entityKey: "1100-001", // Cash-in-Till
fieldName: "CreditAmount",
deltaAmount: +200000.00
}
]
}

V2 API Commands

BankLingo V2 provides a BPMCore-compatible command for till cash removal.

Architecture Overview

The V2 till remove cash command follows the BPMCore Command Pattern:

  • V2 Command: RemoveCashFromTellerTillCommand (BPMCore compatible)
  • BPM Integration: Accepts parameters via BpmUtil.GetPropertyValue()
  • Impact Tracking: Full impact tracking via TransactionImpactTracker
  • State Management: PENDING → APPROVED → SETTLED
  • Approval Workflow: Configurable approval thresholds

Implementation: CB.Administration.Api/Commands/BPMCore/Tellering/AdministrationCoreTelleringTransactionCommandHandlers.cs


RemoveCashFromTellerTillCommand

Purpose: Remove cash from a teller till (decrease till balance)

Command: RemoveCashFromTellerTillCommand

Transaction State: PENDING → SETTLED

BPM Parameters

{
"commandName": "RemoveCashFromTellerTillCommand",
"data": {
"tillId": "string (mandatory)",
"amount": "decimal (mandatory)",
"destinationAccountKey": "string (optional)",
"destinationType": "string (optional)",
"removalReason": "string (optional)",
"transactionDate": "DateTime (optional)",
"notes": "string (optional)"
}
}

Parameter Details

ParameterTypeRequiredDescription
tillIdstring✅ YesTeller till ID to remove cash from
amountdecimal✅ YesCash amount to remove (must be > 0)
destinationAccountKeystring❌ NoDestination account (vault/GL account)
destinationTypestring❌ NoDestination type (e.g., "VAULT", "GL", "TILL")
removalReasonstring❌ NoReason code (e.g., "EXCESS_CASH", "END_OF_DAY")
transactionDateDateTime❌ NoTransaction date (defaults to today)
notesstring❌ NoTransaction notes/remarks

Balance Impact

Teller Till:

Balance FieldChangeReason
CashBalance-amountCash removed
AvailableBalance-amountFunds withdrawn
TotalCashOut+amountTrack total outflow
TransactionCount+1Transaction counter
LastUpdateDateSet to nowTrack last update

Destination Account (if specified):

Balance FieldChangeReason
CashBalance+amountCash received
AvailableBalance+amountFunds added

Validation Rules

Till Validation:

  • Till must exist
  • Till state must be OPENED
  • User must be authorized for till operations
  • Current balance >= amount (sufficient funds)
  • Current balance - amount >= Minimum till balance

Amount Validation:

  • Amount must be > 0
  • Amount must not leave till below minimum balance
  • Amount currency must match till currency

Destination Validation (if destination specified):

  • Destination account must exist and be active
  • Destination account currency must match till currency

Rejection Scenarios:

  • Till not found or not opened
  • Insufficient till balance
  • Amount would leave till below minimum balance
  • User not authorized for till
  • Till locked or suspended

Transaction States

States:

  1. PENDING: Transaction initiated, awaiting approval (if required)
  2. APPROVED: Approved, ready for execution
  3. SETTLED: Cash removed, till balance decreased
  4. REJECTED: Transaction rejected (no balance change)

Approval Workflow

  • ✅ Auto-approval if amount < configured limit (e.g., ₦100,000)
  • ⚠️ Manual approval required if amount ≥ limit
  • 🔒 Amount placed on hold during approval (available balance reduced)
  • 🔓 Hold released on rejection

Example Request/Response

Request:

{
"commandName": "RemoveCashFromTellerTillCommand",
"data": {
"tillId": "TILL-002",
"amount": 200000.00,
"destinationAccountKey": "VAULT-HQ-001",
"destinationType": "VAULT",
"removalReason": "EXCESS_CASH",
"transactionDate": "2025-12-29T16:30:00Z",
"notes": "End of day - transferring excess cash to vault"
}
}

Response:

{
"isSuccessful": true,
"transactionId": "TXN-TILL-RMV-20251229-0001",
"transactionState": "SETTLED",
"message": "Cash removed from till successfully",
"data": {
"tillId": "TILL-002",
"tillOwner": "John Smith",
"amount": 200000.00,
"transactionDate": "2025-12-29T16:30:00Z",
"tillBalance": {
"previousBalance": 550000.00,
"newBalance": 350000.00,
"minimumBalance": 50000.00,
"availableForRemoval": 300000.00
},
"destinationAccount": {
"accountKey": "VAULT-HQ-001",
"accountType": "VAULT",
"previousBalance": 4900000.00,
"newBalance": 5100000.00
},
"impactRecords": 8
}
}

Impact Tracking

Impacted Entities:

  • ✅ Teller Till (5 field changes: cash balance, available balance, total cash out, transaction count, last update)
  • ✅ Destination Account (2 field changes: cash balance, available balance) - if specified
  • ✅ GL Accounts (journal entries for cash movement)

Use Cases

1. End of Day - Excess Cash to Vault:

{
"tillId": "TILL-001",
"amount": 300000.00,
"destinationAccountKey": "VAULT-HQ-001",
"removalReason": "END_OF_DAY",
"notes": "Daily close - excess cash transfer"
}

2. Till Closure Preparation:

{
"tillId": "TILL-003",
"amount": 450000.00,
"destinationAccountKey": "VAULT-HQ-001",
"removalReason": "TILL_CLOSURE",
"notes": "Teller leaving - closing till"
}

3. Transfer to Another Till:

{
"tillId": "TILL-001",
"amount": 100000.00,
"destinationAccountKey": "TILL-004",
"destinationType": "TILL",
"removalReason": "TILL_TRANSFER",
"notes": "Transfer to TILL-004 (low cash)"
}

4. Secure Transport Pickup:

{
"tillId": "TILL-002",
"amount": 500000.00,
"destinationAccountKey": "GL-CASH-IN-TRANSIT",
"destinationType": "GL",
"removalReason": "SECURE_TRANSPORT",
"notes": "CIT pickup - weekly deposit"
}

Error Handling

Common Errors:

ErrorReasonResolution
TILL_NOT_OPENEDTill is not in OPENED stateOpen till first
INSUFFICIENT_TILL_BALANCETill balance < amountReduce amount
BELOW_MINIMUM_BALANCERemoval would leave till below minimumReduce amount or adjust minimum
UNAUTHORIZED_USERUser not authorized for tillUse authorized user or till owner
TILL_LOCKEDTill is locked or suspendedUnlock till first

Business Rules

  1. Minimum Till Balance: Each till has a minimum cash requirement (e.g., ₦50,000)
  2. Daily Limits: May have daily removal limits for security
  3. Authorization: Only till owner or authorized users can remove cash
  4. Audit Trail: All cash removals fully audited with user, timestamp, destination
  5. Physical Custody: System transaction must be accompanied by physical cash transfer
  6. Concurrent Safety: Uses locking to prevent concurrent till modifications
  7. Reversal: Transactions can be reversed if posted in error (see ReverseTransactionCommand)
  • Add Cash: AddCashToTellerTillCommand (increase till balance)
  • Till Transfer: TransferBetweenTellerTillCommand (move cash between tills)
  • Vault Transfer: TransferFromBranchVaultAccountCommand (move from vault)
  • Till Closure: CloseTellerTillCommand (close till and transfer all balance)

Performance Considerations

  • Till Locking: Uses row-level locking on till record during transaction
  • Transaction Time: Typically < 50ms for simple remove cash operation
  • Impact Records: Creates 5-10 impact entries per transaction
  • Concurrent Operations: Serialized per till to prevent race conditions
  • Validation: All validations complete before balance changes

Audit and Compliance

Audit Trail

Every remove cash transaction records:

  • ✅ User who initiated transaction
  • ✅ Timestamp of transaction
  • ✅ Amount removed
  • ✅ Destination of cash (vault/GL/other till)
  • ✅ Removal reason
  • ✅ Till owner and ID
  • ✅ Approval details (if applicable)
  • ✅ Before/after balances
  • ✅ Physical custody transfer signatures

Compliance Reports

Daily Till Activity Report:

  • All cash removals per till
  • Total cash removed per teller
  • Destination breakdown (vault vs other)
  • Exception transactions (large amounts)
  • Below minimum balance incidents

Cash Movement Tracking:

  • Real-time till balance monitoring
  • Minimum balance breach alerts
  • Unusual removal pattern detection
  • Physical vs system balance reconciliation


Developer Resources

For API implementation details, see:


Navigation: