CASHIER · RECONCILIATION

Cash Reconciliation

Compare physical denomination count with system expected balance. Highlights variance.

Teller @for (t of tellers; track t.id) { {{ t.name }} } Cashier @for (c of cashiers; track c.id) { {{ c.label }} } Date Note
@if (loadingExpected) {
Loading expected balances…
} @if (!loadingExpected && rows.length > 0) { @if (morningTotal > 0) {
wb_sunny Morning Opening Balance (Cash received from vault today) ₹{{ morningTotal | number: '1.2-2' }}
@if (noteRows.length > 0) {
@for (row of noteRows; track row.denominationId) { @if (row.morningCount > 0) { ₹{{ row.denominationValue }}×{{ row.morningCount }} } }
} @if (coinRows.length > 0) {
@for (row of coinRows; track row.denominationId) { @if (row.morningCount > 0) { ₹{{ row.denominationValue }}×{{ row.morningCount }} } }
}
}
@if (noteRows.length > 0) { @for (row of noteRows; track row.denominationId) { }
Denomination Morning Expected Physical Variance
₹{{ row.denominationValue }} {{ row.morningCount || '—' }} {{ row.expectedCount }}
{{ row.varianceCount > 0 ? '+' : '' }}{{ row.varianceCount }} (₹{{ row.varianceCount * row.denominationValue | number: '1.0-0' }})
} @if (coinRows.length > 0) { @for (row of coinRows; track row.denominationId) { }
Denomination Morning Expected Physical Variance
₹{{ row.denominationValue }} {{ row.morningCount || '—' }} {{ row.expectedCount }}
{{ row.varianceCount > 0 ? '+' : '' }}{{ row.varianceCount }} (₹{{ row.varianceCount * row.denominationValue | number: '1.0-0' }})
}
@if (totalVariance !== 0) {
{{ totalVariance > 0 ? 'add_circle_outline' : 'remove_circle_outline' }}
{{ totalVariance > 0 ? 'Excess' : 'Shortage' }}: ₹{{ (totalVariance < 0 ? -totalVariance : totalVariance) | number: '1.2-2' }} Variance reason is required to save reconciliation.
Variance Reason *
}
Expected: ₹{{ totalExpected | number: '1.2-2' }}  |  Physical: ₹{{ totalPhysical | number: '1.2-2' }}  |  Variance: {{ totalVariance >= 0 ? '+' : '' }}₹{{ totalVariance | number: '1.2-2' }} {{ statusLabel }}
@if (totalVariance !== 0 && !varianceReason.trim()) { Enter variance reason to save }
} @if (!loadingExpected && rows.length === 0 && selectedCashierId) {
No balance data found for this cashier.
} @if (!selectedCashierId) {
Select a teller and cashier to load expected balances.
}
@if (loadingHistory) {
Loading…
} @if (!loadingHistory && history.length === 0) {
No reconciliation records yet.
} @if (!loadingHistory && history.length > 0) {
@for (r of history; track r.id) { }
Date Cashier Expected Physical Variance Status By
{{ r.reconDate }} {{ r.cashierName || r.cashierId }} ₹{{ r.expectedAmount | number: '1.2-2' }} ₹{{ r.physicalAmount | number: '1.2-2' }} {{ r.variance >= 0 ? '+' : '' }}₹{{ r.variance | number: '1.2-2' }} {{ r.status }} {{ r.performedByUsername }}
}