@if (editMode && editRequest?.rejection_reason) {
This request was rejected by the manager. Reason: {{ editRequest.rejection_reason }} Update the details below and click “Resubmit for Approval”.
} @if (previousDayUnsettled) {
TRANSACTIONS BLOCKED — Previous day cash settlement is pending @if (unsettledSince) { (since {{ unsettledSince }}) } . Complete Cash Settlement before processing any transactions.
} @if (!morningTransferReceived && !previousDayUnsettled) {
NO CASH ALLOCATED — Morning transfer not received. Request a morning transfer from the vault before processing cash transactions.
} @if (!accountDetails && !loadingAccount) {
Transaction Entry
Eff. Date
@for (row of rows; track $index; let i = $index) {
{{ i + 1 }}
@if (isClerk && rows.length > 1) { }
Classification
Account
Payment instrument
@if (row.acTyp !== 'SHR') { ₹ }
@if (row.acTyp === 'SHR' && rowSharePrices[row.acNo]) { = ₹{{ (row.amount ?? 0) * rowSharePrices[row.acNo] | number: '1.2-2' }} @ ₹{{ rowSharePrices[row.acNo] | number: '1.2-2' }}/share }
@if (row.acTyp === 'SHR' && (row.typ === 'Enter Bank Transfer' || row.typ === 'Fund Transfer')) {
} @else if (isClerk && row.typ !== 'Withdrawal Slip') {
}
Narration
@if (isDdCashGlRow(row)) {
DD Charges & GST — Admin Rate {{ ddGstPercentage }}%
₹
₹
₹
}
}
} @if (!isClerk && loadingWithdrawal) {
Looking up approved withdrawal request…
} @if (!isClerk && activeWithdrawalRequest) {
check_circle
Approved Withdrawal Request Linked
Token: {{ activeWithdrawalRequest.tok_no }} · Amount: ₹{{ activeWithdrawalRequest.amount | number: '1.2-2' }} · Client: {{ activeWithdrawalRequest.client_name }} · By Clerk: {{ activeWithdrawalRequest.clerk_name }} · Approved by: {{ activeWithdrawalRequest.manager_name || '—' }}
After transaction succeeds, this request will be automatically marked WITHDRAWN.
} @if (isClerk && pendingClosure) {
lock
Closing This Account
@if (closurePreview) { Balance: ₹{{ closurePreview.balance | number: '1.2-2' }} · Interest: +₹{{ closurePreview.interest | number: '1.2-2' }} · Payable: ₹{{ closurePreview.total | number: '1.2-2' }} }
Enter TOK. NO. below and press Save to send this for the Bank Manager's approval. The account closes when the cashier hands over the cash.
} @if (!isClerk && activeClosureRequest) {
lock
Approved Account Closure Linked
Token: {{ activeClosureRequest.tok_no }} · Cash to Hand Over: ₹{{ activeClosureRequest.cashier_disbursed_amount | number: '1.2-2' }} · Client: {{ activeClosureRequest.client_name }} · By Clerk: {{ activeClosureRequest.clerk_name }} · Approved by: {{ activeClosureRequest.manager_name || '—' }}
@if (activeClosureRequest.rounding_amount && activeClosureRequest.rounding_amount !== 0) { Exact closing balance was ₹{{ activeClosureRequest.closing_amount | number: '1.2-2' }} — rounded {{ activeClosureRequest.rounding_amount > 0 ? 'up' : 'down' }} to whole rupees for cash. } @else { The account is already closed. Hand over the cash to complete the request. }
} @if (loadingAccount) {
Loading Account Fetching account details, please wait…
} @if (accountError && !loadingAccount) {
{{ accountError }}
} @if (accountDetails && !loadingAccount) {
@if (isClerk) {
Personal Information
Branch{{ officeName }}
A/c No.{{ accountDetails.accountNo }}
Name{{ clientName }}
S/D/W/H/O{{ guardianName }}
Address{{ clientAddress }}
Email{{ clientEmail }}
Last Txn{{ lastTransactionDate }}
Type{{ accountDetails.depositType?.value ?? selectedRow?.acTyp ?? '—' }}
Opening Dt{{ openingDate }}
Status{{ accountDetails.status?.value ?? '—' }}
CIF No.{{ cifNumber }}
@if (isNonIndividual) {
Constitution {{ nonPersonDetails?.constitution?.name ?? nonPersonDetails?.constitutionType?.name ?? '—' }}
Incorp. No. {{ nonPersonDetails?.incorpNo ?? nonPersonDetails?.incorporationNo ?? '—' }}
Main Business {{ nonPersonDetails?.mainBusinessLine?.name ?? nonPersonDetails?.mainBusinessLineType?.name ?? '—' }}
}
Joint A/c Holders @if (accountDetails?.modeOfOperation) { {{ modeOfOperationLabel }} }
@if (jointHolders.length === 0) { No joint holders } @for (jh of jointHolders; track jh.id ?? $index; let i = $index) {
{{ jh.displayName }} {{ jh.role ?? (jh.isPrimary || jh.primary ? 'Primary' : 'Co-Holder') }} @if (jh.sharePercentage) { {{ jh.sharePercentage }}% } @if (jh.signingAuthority) { {{ jh.signingAuthority }} }
} @if (withdrawalRule) {
{{ withdrawalRule.icon }} {{ withdrawalRule.msg }}
}
@if (!isNonIndividual) {
Nominees
@if (nominees.length === 0) { No nominees } @for (n of nominees; track n.id ?? $index) {
{{ n.nomineeDisplayName ?? '—' }} {{ n.relationshipName ?? '—' }} @if (n.percentageShare) { {{ n.percentageShare }}% } @if (n.nomineeIsMinor) { Minor }
}
} @if (isNonIndividual) {
Non-Individual Account Details @if (accountDetails?.modeOfOperation) { {{ modeOfOperationLabel }} }
@if (!accountDetails?.partners?.length) { No partners / members linked } @for (p of accountDetails?.partners ?? []; track p.id; let i = $index) {
{{ p.clientName ?? '—' }} {{ p.clientCif ?? '' }} @if (p.sharePercentage) { {{ p.sharePercentage }}% } @if (p.isMandatory) { Mandatory } @else { Optional }
} @if (withdrawalRule && isNonIndividual) {
{{ withdrawalRule.icon }} {{ withdrawalRule.msg }}
}
}
Other Information
Phone No.{{ clientPhone }}
Client ID{{ accountDetails.clientId }}
PAN{{ panNumber }}
KYC Status {{ kycStatus }}
CKYC No.{{ ckycNumber }}
Aadhaar{{ aadhaarNumber }}
Product {{ accountDetails.savingsProductName || accountDetails.depositProductName || accountDetails.productName || '—' }}
@if (selectedRow?.acTyp === 'SHR') {
No. of Shares Held{{ accountDetails.summary?.totalApprovedShares ?? 0 }}
Market Price / Share{{ currencySymbol }}{{ accountDetails.currentMarketPrice | number: '1.2-2' }}
Resolution No.{{ accountDetails.resolutionNumber || '—' }}
Linked Savings A/C No.{{ accountDetails.savingsAccountNumber || '—' }}
@if (accountDetails.linkedLoanAccountNo) {
Linked Loan A/C No.{{ accountDetails.linkedLoanAccountNo }}
} }
Account Information
1. {{ selectedRow?.acTyp === 'SHR' ? 'Share Balance' : accountDetails?.glCode ? 'GL Balance' : 'Current Balance' }} {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
2.Today's Clg. Amount {{ currencySymbol }}{{ todayClgAmount | number: '1.2-2' }}
3.Clear Balance (2-3) {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
4.Freeze Amount {{ currencySymbol }}{{ freezeAmount | number: '1.2-2' }}
5.Withdrawable Amt. {{ currencySymbol }}{{ withdrawableAmount | number: '1.2-2' }}
@if (accountAlerts.length > 0) {
@for (alert of accountAlerts; track $index) {
@if (alert.type === 'danger') { } @if (alert.type === 'warning') { } @if (alert.type === 'info') { } {{ alert.message }}
}
}
Net Balance {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }} CR
Opening {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
Cash Hold {{ cashHold | number: '1.2-2' }}
Transfer Hold {{ freezeAmount | number: '1.2-2' }}
Clearing Hold {{ clearingHold | number: '1.2-2' }}
After Trans. {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
Rate {{ accountDetails.nominalAnnualInterestRate ?? 0 | number: '1.2-2' }}%
Currency {{ accountDetails.currency?.code ?? 'INR' }}
@if (canPrintStatement) { }
} @else {
@if (clientPhotoUrl) { Photo } @else {
}
{{ accountDetails?.glCode ? (accountDetails?.name ?? '—') : (clientDetails?.displayName ?? accountDetails?.clientName ?? '—') }} {{ accountDetails?.glCode ?? accountDetails?.accountNo }}
{{ activeDividendClaimRequest ? 'Awaiting Disbursement' : accountDetails?.subStatus?.value === 'Dormant' ? 'Dormant' : (accountDetails?.status?.value ?? '—') }} A/c {{ accountDetails?.depositType?.value || (activeDividendClaimRequest ? 'Dividend Claim' : selectedRow?.acTyp === 'CA' ? 'Current' : selectedRow?.acTyp === 'SD' ? 'Savings' : selectedRow?.acTyp === 'FD' ? 'Fixed Dep.' : selectedRow?.acTyp === 'RD' ? 'Recurring' : selectedRow?.acTyp === 'GL' ? (accountDetails?.type?.value ?? 'GL Account') : selectedRow?.acTyp === 'SHR' ? 'Share' : selectedRow?.acTyp === 'LA' ? 'Loan' : '—') }} Branch {{ officeName ?? '—' }} Product {{ activeDividendClaimRequest ? 'Dividend Cash Payout' : accountDetails?.savingsProductName || accountDetails?.depositProductName || accountDetails?.productName || '—' }} Rate {{ accountDetails?.nominalAnnualInterestRate ?? 0 | number: '1.2-2' }}% CCY {{ accountDetails?.currency?.code ?? 'INR' }}
Net Bal {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }} CR
Opening {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
Cash Hold {{ cashHold | number: '1.2-2' }}
Tr. Hold {{ freezeAmount | number: '1.2-2' }}
Clr. Hold {{ clearingHold | number: '1.2-2' }}
After Trans. {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
@if (canPrintStatement) {
} @if (accountAlerts.length > 0) {
@for (alert of accountAlerts; track alert.message) { {{ alert.message }} }
}
} @if (!isClerk) {
Opening Position — {{ today }}
@if (!openingLoaded) { Loading… } @if (openingLoaded && openingDenoms.length === 0) { No opening position found } @if (openingLoaded && openingDenoms.length > 0) { @for (d of sortedOpeningDenoms; track d.denominationId) { @if (d.count > 0) { } }
Denomination Opening Count Amount
₹{{ d.denominationValue }} {{ d.count }} ₹{{ d.count * d.denominationValue | number: '1.2-2' }}
Total ₹{{ openingTotal | number: '1.2-2' }}
}
Denomination Entry @if (isSelectedRowDdCashGl) { Target ₹{{ ddTargetTotal | number: '1.2-2' }} } @else { @if (denominationTotal > 0) { ₹{{ denominationTotal | number: '1.2-2' }} } @if (isCashPayment && denominationTotal <= 0) { ⚠ Required for Cash } }
@for (d of allDenominations; track d.id) { }
Denomination Count Amount
{{ d.label }}
{{ subtotalFor(d) > 0 ? (subtotalFor(d) | number: '1.2-2') : '—' }}
Total ₹{{ denominationTotal | number: '1.2-2' }}
@if (isSelectedRowDdCashGl) {
@if (denominationTotal <= 0) { ⚠ Count notes/coins totalling ₹{{ ddTargetTotal | number: '1.2-2' }} } @else if (ddDenomMatchesTarget()) { ✓ Matches Total To Collect ₹{{ ddTargetTotal | number: '1.2-2' }} } @else { ⚠ Must total ₹{{ ddTargetTotal | number: '1.2-2' }} (counted ₹{{ denominationTotal | number: '1.2-2' }}) }
} @else if (denominationTotal > 0) {
}
Closing Position (Preview) @if (selectedRow?.dbCr === 'Dr' && hasWithdrawalDenomOverdraft) { ⚠ Stock Overdraft }
@if (selectedRow?.dbCr === 'Dr' && hasWithdrawalDenomOverdraft) {
Insufficient Denomination Stock — Cannot Proceed
@for (o of denominationOverdrafts; track o.label) { }
Denomination Requested Available Short
{{ o.label }} {{ o.requested }} {{ o.available }} −{{ o.shortfall }}
Adjust denomination or request vault replenishment.
} @if (closingDenoms.length === 0) { Enter denomination to see closing position } @if (closingDenoms.length > 0) { @for (d of sortedClosingDenoms; track d.denominationValue + d.kind) { }
Denomination Opening {{ selectedRow?.dbCr === 'Cr' ? '+Deposit' : '-Withdrawal' }} Closing
₹{{ d.denominationValue }} {{ d.openCount }} {{ selectedRow?.dbCr === 'Cr' ? '+' : '-' }}{{ d.entered }} {{ d.closingCount }}
Total ₹{{ openingTotal | number: '1.2-2' }} {{ selectedRow?.dbCr === 'Cr' ? '+' : '-' }}₹{{ denominationTotal | number: '1.2-2' }} ₹{{ closingTotal | number: '1.2-2' }}
}
}
Transaction Entry
Eff. Date
@for (row of rows; track $index; let i = $index) {
{{ i + 1 }}
Classification
Account
Payment instrument
@if (row.acTyp !== 'SHR') { ₹ }
@if (row.acTyp === 'SHR' && rowSharePrices[row.acNo]) { = ₹{{ (row.amount ?? 0) * rowSharePrices[row.acNo] | number: '1.2-2' }} @ ₹{{ rowSharePrices[row.acNo] | number: '1.2-2' }}/share }
@if ( row.acTyp === 'SHR' && (row.typ === 'Enter Bank Transfer' || row.typ === 'Fund Transfer') ) {
} @else if (isClerk) {
}
Narration
@if (isDdCashGlRow(row)) {
DD Charges & GST — Admin Rate {{ ddGstPercentage }}%
₹
₹
₹
}
}
@if (reviewMode) { } @else if (editMode) { } @else { @if (isClerkCashDeposit) {
CASH DEPOSIT NOT PERMITTED — Cash deposits can only be processed by the cashier. Notes/coins denomination is managed at the cashier vault.
} }
}
@if (showAccountActions) {
⚡ Account Actions
@if (closeAccountChecked) { @if (closurePreviewLoading) {
Posting interest to the account…
} @else if (closurePreviewError) {
{{ closurePreviewError }}
} @else if (closurePreview) {
Current Balance ₹{{ closurePreview.balance | number: '1.2-2' }}
@if (closurePreview.interest < 0) {
Interest correction − ₹{{ -closurePreview.interest | number: '1.2-2' }}
} @else {
Interest to date + ₹{{ closurePreview.interest | number: '1.2-2' }}
}
Payable on Closure ₹{{ closurePreview.total | number: '1.2-2' }}
@if (!closurePreview.upToDate) {
Interest could not be calculated just now, so this shows the current balance only — the actual payout will be higher once interest is added at approval.
}
Interest has been posted to the account as of {{ closurePreview.asOfDate }} — this is the account's real balance now, not an estimate. Cash is handed over rounded to whole rupees.
This amount will be filled into AMOUNT on the slip. Enter TOK. NO. and press Save to send it for the Bank Manager's approval.
} }
} @if (showRejectDialog) {
✕ Reject Withdrawal Request

Please provide a reason. The request will be sent back to the clerk for correction and resubmission.

} @if (showConfirmDialog && confirmData) {
{{ confirmData.type === 'WITHDRAWAL' ? '⬆' : '⬇' }} Confirm {{ confirmData.isDisbursement ? 'CASH DISBURSEMENT' : confirmData.type }}
Account{{ confirmData.accountNo }}
Customer{{ confirmData.clientName }}
Payment Type{{ confirmData.paymentType }}
@if (confirmData.chequeNo) {
Cheque No.{{ confirmData.chequeNo }}
} @if (confirmData.tokNo) {
Token No.{{ confirmData.tokNo }}
}
@if (confirmData.isDisbursement) {
Current Balance {{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
Disburse Amount {{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Balance already deducted at manager approval — no further deduction
} @else if (confirmData.isDepositRequest) {
Current Balance {{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
@if (confirmData.isDdCashGl) {
DD Face Value{{ confirmData.symbol }}{{ confirmData.ddFaceValue | number: '1.2-2' }}
Charges{{ confirmData.symbol }}{{ confirmData.ddCharges | number: '1.2-2' }}
GST ({{ confirmData.ddGstPercentage }}%){{ confirmData.symbol }}{{ confirmData.ddGstAmount | number: '1.2-2' }}
}
{{ confirmData.isDdCashGl ? 'Total To Collect' : 'Deposit Amount' }} +{{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Sent for manager approval — balance will be credited only after approval
} @else {
Current Balance{{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
{{ confirmData.type === 'DEPOSIT' ? 'Deposit' : 'Withdrawal' }} Amount {{ confirmData.type === 'DEPOSIT' ? '+' : '−' }}{{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Balance After {{ confirmData.symbol }}{{ confirmData.balanceAfter | number: '1.2-2' }}
}
} @if (alertModal) {
@if (alertModal.type === 'error') { } @if (alertModal.type === 'warning') { } @if (alertModal.type === 'info') { } @if (alertModal.type === 'success') { }
{{ alertModal.type === 'error' ? 'ERROR' : alertModal.type === 'warning' ? 'WARN' : alertModal.type === 'success' ? 'OK' : 'INFO' }}

{{ alertModal.title }}

@for (line of alertModal.lines; track $index) { @if ($index === 0) {

{{ line }}

} @else if (line.startsWith('⚠')) {
{{ line.slice(1).trim() }}
} @else if (line.includes(':') && $index < alertModal.lines.length - 1) {
{{ line.split(':')[0].trim() }} {{ line.split(':').slice(1).join(':').trim() }}
} @else {

{{ line }}

} }
@if (alertModal.onConfirm) { } @else { }
}