Teller Transfer
Overview
The teller transfer operation enables tellers to help customers transfer funds between their own accounts (e.g., from Savings to Current account). This is a customer-facing transaction where the teller facilitates the transfer on behalf of the customer.
This operation transfers funds between customer accounts, NOT between tills. For till-to-till transfers (internal cash management), see Transfer Between Tills.
BPMCore Command
Command: InitiateTransferCommand
Handler: AdministrationCoreDepositTransactionCommandHandlers
Transaction Characteristics
| Characteristic | Details |
|---|---|
| Customer Involvement | ✅ Yes - Customer present at counter requesting transfer |
| Till Cash Impact | ❌ No - No physical cash involved |
| Source Account Impact | ✅ Yes - Balance decreased |
| Destination Account Impact | ✅ Yes - Balance increased |
| GL Posting | ✅ Yes - Dr Destination Account / Cr Source Account |
| Notifications | ✅ Yes - Both accounts receive transaction notifications |
| Transaction Type | CoreTransactionType.Transfer |
Flow Diagram
Request Parameters
{
"commandType": "InitiateTransferCommand",
"sourceAccountId": "string",
"destinationAccountId": "string",
"amount": 0.00,
"narration": "string",
"reference": "string",
"tellerId": "string",
"tellerTillId": "string"
}
Parameter Details
| Parameter | Type | Required | Description |
|---|---|---|---|
sourceAccountId | string | ✅ Yes | Account to transfer FROM |
destinationAccountId | string | ✅ Yes | Account to transfer TO |
amount | decimal | ✅ Yes | Amount to transfer |
narration | string | ✅ Yes | Transfer description |
reference | string | ⚠️ Optional | External reference number |
tellerId | string | ✅ Yes | ID of teller processing transfer |
tellerTillId | string | ✅ Yes | ID of teller's till (for audit trail) |
Validation Rules
1. Account Validations
| Validation | Description | Error Code |
|---|---|---|
| Source Account Exists | Account must exist in system | ACCOUNT_NOT_FOUND |
| Destination Account Exists | Account must exist in system | ACCOUNT_NOT_FOUND |
| Source Account Active | Account must be in Active state | ACCOUNT_INACTIVE |
| Destination Account Active | Account must be in Active state | ACCOUNT_INACTIVE |
| Different Accounts | Source ≠ Destination | SAME_ACCOUNT_TRANSFER |
| Customer Ownership | Both accounts must belong to same customer | OWNERSHIP_MISMATCH |
2. Balance Validations
| Validation | Description | Error Code |
|---|---|---|
| Sufficient Balance | Source available balance ≥ transfer amount | INSUFFICIENT_FUNDS |
| No Holds/Liens | Source account has no blocking holds | ACCOUNT_HAS_HOLDS |
| Minimum Balance | Transfer won't breach minimum balance requirement | MIN_BALANCE_BREACH |
3. Till Validations
| Validation | Description | Error Code |
|---|---|---|
| Till Open | Teller's till must be in OPENED state | TILL_NOT_OPEN |
| Till Assignment | Teller must be assigned to specified till | TILL_NOT_ASSIGNED |
| Branch Match | Till and accounts must be in same branch | BRANCH_MISMATCH |
4. Amount Validations
| Validation | Description | Error Code |
|---|---|---|
| Positive Amount | Amount must be > 0 | INVALID_AMOUNT |
| Maximum Limit | Amount ≤ configured transfer limit | AMOUNT_EXCEEDS_LIMIT |
| Precision Check | Amount must have valid decimal places | INVALID_PRECISION |
State Transitions
GL Postings
Transfer Entry
| Account | Dr/Cr | Amount | Description |
|---|---|---|---|
| Destination Account | Dr | Transfer Amount | Receiving account increased |
| Source Account | Cr | Transfer Amount | Sending account decreased |
Example
Customer transfers $1,000 from Savings (101-001) to Current (101-002):
Dr 101-002 (Current Account) $1,000.00
Cr 101-001 (Savings Account) $1,000.00
Narration: Transfer from Savings to Current Account
Response Structure
Success Response
{
"success": true,
"transactionId": "TXN-20250101-001234",
"sourceAccountBalance": 5000.00,
"destinationAccountBalance": 2000.00,
"timestamp": "2025-01-01T10:30:00Z",
"reference": "REF-001234"
}
Error Response
{
"success": false,
"errorCode": "INSUFFICIENT_FUNDS",
"message": "Source account has insufficient available balance",
"availableBalance": 500.00,
"requestedAmount": 1000.00
}
Common Use Cases
1. Move Funds to Current Account
Scenario: Customer needs to transfer money from Savings to Current account for bill payment
Flow:
- Customer provides both account numbers
- Teller verifies customer identity
- Teller enters transfer details
- System validates both accounts and balance
- Transfer executes immediately
- Customer receives receipt showing new balances
2. Consolidate Savings
Scenario: Customer wants to move all funds from one savings account to another
Flow:
- Teller retrieves source account balance
- Enters full balance as transfer amount (minus minimum balance if required)
- System transfers funds
- Both accounts updated in real-time
3. Emergency Fund Access
Scenario: Customer needs immediate access to savings at teller counter
Flow:
- Transfer from Savings to Current account
- Then use Teller Withdrawal from Current account
- Customer receives cash from till
Integration Points
Related Operations
- Teller Withdrawal - Withdraw cash after transfer to current account
- Teller Deposit - Deposit cash before transfer
- Account Search - Look up account details for transfer
- Transfer Between Tills - Internal till cash management (NOT customer transfer)
Account Types Supported
| From Account | To Account | Supported |
|---|---|---|
| Savings | Current | ✅ Yes |
| Current | Savings | ✅ Yes |
| Savings | Savings | ✅ Yes |
| Current | Current | ✅ Yes |
| Savings | Loan | ✅ Yes (loan repayment alternative) |
| Current | Loan | ✅ Yes (loan repayment alternative) |
Business Rules
Transfer Limits
| Limit Type | Value | Configuration |
|---|---|---|
| Minimum Transfer | $1.00 | TransferConfig.MinAmount |
| Maximum Transfer | $50,000.00 | TransferConfig.MaxAmount |
| Daily Limit (per account) | $100,000.00 | TransferConfig.DailyLimit |
| Transaction Count Limit | 20 per day | TransferConfig.MaxTransactions |
Processing Times
| Scenario | Processing Time |
|---|---|
| Same Branch Transfer | Instant (real-time) |
| Different Branch Transfer | Instant (real-time) |
| System Downtime | Queued for retry |
Audit Trail
All transfers create audit records capturing:
- Source and destination account numbers
- Amount transferred
- Teller ID and till ID
- Customer ID
- Timestamp
- IP address
- Before/after balances
- Narration and reference
Error Handling
Common Errors
| Error | Cause | Resolution |
|---|---|---|
TILL_NOT_OPEN | Teller's till is not in OPENED state | Open Till first |
INSUFFICIENT_FUNDS | Source account balance too low | Check available balance with customer |
ACCOUNT_INACTIVE | Account is dormant or closed | Reactivate account or use different account |
OWNERSHIP_MISMATCH | Accounts belong to different customers | Verify account numbers with customer |
AMOUNT_EXCEEDS_LIMIT | Transfer exceeds configured limit | Split into multiple smaller transfers |
BRANCH_MISMATCH | Accounts in different branches than till | Use branch transfer process |
Security Considerations
Authorization Requirements
- Teller must be authenticated and authorized
- Till must be open and assigned to teller
- Customer identity verification required for large transfers
- Supervisor approval may be required for amounts exceeding threshold
Fraud Prevention
- System checks for unusual transfer patterns
- Velocity limits prevent rapid successive transfers
- Cross-reference with customer's typical transaction behavior
- Alert on first-time large transfers
Related Documentation
- Teller Deposit - Deposit cash to account
- Teller Withdrawal - Withdraw cash from account
- Loan Repayment - Alternative to transfer for loan payments
- Account Search - Look up accounts for transfer
- Till Management - Till operations overview