BRANCH OPERATIONS · {{ missedOnly ? 'MISSED CLOSE' : 'DAY REGISTER' }}

{{ missedOnly ? 'Missed Close Register' : 'Day Open / Day Close' }}

@if (missedOnly) { Business days that were opened and never closed. While a day stays open its closing balance never carries forward, a back-dated entry can still be posted into it, and any cash difference on that date goes unnoticed. } @else { The branch's business day, opened each morning and closed each evening. A day left open never carries its closing balance forward, and any cash difference on that date goes unnoticed — so the ones still hanging are listed first. }

@if (canOpenToday && !missedOnly) { }
@if (errorMsg) {
{{ errorMsg }}
} @if (successMsg) {
{{ successMsg }}
} @if (!canOperate && loaded) {
info You can see the register but not open or close a day — a Clerk, Head Cashier or Bank Manager does that, since a cashier works inside the day and cannot declare it closed.
} @if (missed.length > 0) {
warning {{ missed.length }} business day{{ missed.length === 1 ? '' : 's' }} never closed
@for (m of missed; track m.id) {
{{ m.businessDate }} open {{ m.daysOpen }} day{{ m.daysOpen === 1 ? '' : 's' }} opened {{ timeOnly(m.openedAt) }} by {{ m.openedByName }} · opening ₹{{ m.openingCash | number: '1.2-2' }} @if (canOperate) { }
}
} @if (missedOnly && loaded && missed.length === 0) {
check_circle

No missed closes. Every business day opened for this branch has been closed.

} @if (!missedOnly && openDay) {
DAY OPEN {{ openDay.businessDate }} opened {{ timeOnly(openDay.openedAt) }} by {{ openDay.openedByName }} · opening cash ₹{{ openDay.openingCash | number: '1.2-2' }}
@if (canOperate) { }
} @else if (loaded && canOperate) {
NO DAY OPEN Open the business day before any cash transaction is accepted.
} @if (showOpenForm) {
Open business day

@if (hasAutoFilledOpenCounts) { Auto-filled below from yesterday's own closing count (₹{{ carriedForwardTotal | number: '1.2-2' }}) — correct only the rows where today's physical count differs before opening. } @else { Left blank with no notes/coins counted below, yesterday's closing figure carries forward automatically — which is what keeps the opening balance from drifting. Counting the drawer below is what actually records the note/coin stock the branch can check a vault handout against later. }

@if (hasAutoFilledOpenCounts && openLiveDifference !== null) { @if (openLiveDifference === 0) {
vs. yesterday's close Tallied
} @else {
vs. yesterday's close {{ openLiveDifference > 0 ? 'Excess' : 'Short' }} ₹{{ absValue(openLiveDifference) | number: '1.2-2' }}
} }
@if (notes.length) { } @for (d of notes; track d.id) { } @if (coins.length) { } @for (d of coins; track d.id) { }
Denomination Count Amount
Bank Notes
{{ d.label }}
@if (hasAutoFilledOpenCounts && countFor(openCounts, d) !== autoOpenCountFor(d)) { yesterday closed {{ autoOpenCountFor(d) }} }
₹{{ subtotalFor(openCounts, d) | number: '1.2-2' }}
Coins
{{ d.label }}
@if (hasAutoFilledOpenCounts && countFor(openCounts, d) !== autoOpenCountFor(d)) { yesterday closed {{ autoOpenCountFor(d) }} }
₹{{ subtotalFor(openCounts, d) | number: '1.2-2' }}
@if (openDenomTotal > 0) {

Denomination total: ₹{{ openDenomTotal | number: '1.2-2' }} @if (hasAutoFilledOpenCounts) { }

} @if (openLiveDifference !== null && openLiveDifference !== 0) { }
} @if (closeTarget) {
Close business day — {{ closeTarget.businessDate }}
@if (isLateClose) {

This day is being closed after its own date. It will be recorded as a force close, with the reason below kept permanently against it.

} @if (previewLoading) {

Working out the day's figure…

} @if (preview) {
Opening cash (carried forward) ₹{{ preview.openingCash | number: '1.2-2' }}
+ Cash deposits taken (approved) ₹{{ preview.deposits | number: '1.2-2' }}
− Cash paid out (approved withdrawals) ₹{{ preview.withdrawals | number: '1.2-2' }}
Cash the branch should be holding ₹{{ preview.expectedCash | number: '1.2-2' }}
@if (preview.vaultIn > 0 || preview.settledOut > 0) {
Vault activity today — moves cash within the branch, not counted in the total above: ₹{{ preview.vaultIn | number: '1.2-2' }} handed to a cashier, ₹{{ preview.settledOut | number: '1.2-2' }} settled back to the vault.
}
} @if (eodLoading) {

Fetching vault and cashier positions…

} @if (branchTotalSummary; as bt) {
account_balance_wallet Branch Total (Vault + All Cashiers)
Vault ₹{{ bt.vaultTotal | number: '1.2-2' }} + Cashiers ₹{{ bt.cashierTotal | number: '1.2-2' }} = ₹{{ bt.grandTotal | number: '1.2-2' }} vs. book ₹{{ bt.expected | number: '1.2-2' }}
@if (bt.difference === 0) { Branch Tallied } @else { {{ bt.difference > 0 ? 'Excess' : 'Short' }} ₹{{ absValue(bt.difference) | number: '1.2-2' }} }
} @for (t of eodTellers; track t.tellerId) {
account_balance {{ t.tellerName }} vault holds {{ t.vault?.hasBreakdown ? '₹' + (t.vault.totalAmount | number: '1.2-2') : 'no breakdown recorded' }}
@if (t.vault?.hasBreakdown && t.vault.denominations.length > 0) {
@for (d of t.vault.denominations; track d.denominationId) { ₹{{ d.denominationValue }} × {{ d.count }} }
} @if (t.cashiers.length === 0) {

No cashiers allocated under this vault.

} @for (c of t.cashiers; track c.cashierId) {
{{ c.cashierName }} morning ₹{{ c.morningTotal | number: '1.2-2' }} → current ₹{{ c.currentTotal | number: '1.2-2' }} · {{ c.txnCount ?? '—' }} txn{{ c.txnCount === 1 ? '' : 's' }} today
@if (c.reconciled === true) { Reconciled } @else if (c.reconciled === false) { Not Reconciled } @if (c.alreadySettled === true) { Settled to Vault } @else if (c.alreadySettled === false) { Not Settled }
@if (c.denominations.length > 0) {
@for (d of c.denominations; track d.denominationId) { ₹{{ d.denominationValue }}: {{ d.morningCount }} → {{ d.count }} @if (d.delta !== 0) { ({{ d.delta > 0 ? '+' : '' }}{{ d.delta }}) } }
} @else { No balance. }
}
}
@if (preview && liveDifference !== null) { @if (liveDifference === 0) {
Difference Tallied
} @else {
Difference {{ liveDifference > 0 ? 'Excess' : 'Short' }} ₹{{ liveDifference < 0 ? -liveDifference : (liveDifference | number: '1.2-2') }}
} } @if (preview && liveDifference !== 0) { }

@if (hasAutoFilledCounts) { Auto-filled below from the vault and every cashier's position shown above — correct only the rows where the physical count differs, note by note. } @else { Pre-filled with what the books expect — change it only if the drawer counted something different, and that difference is then recorded against the day. Counting the denominations below overrides the typed figure with what was actually counted, note by note. }

@if (notes.length) { } @for (d of notes; track d.id) { } @if (coins.length) { } @for (d of coins; track d.id) { }
Denomination Count Amount
Bank Notes
{{ d.label }}
@if (hasAutoFilledCounts && countFor(closeCounts, d) !== autoCountFor(d)) { system counted {{ autoCountFor(d) }} }
₹{{ subtotalFor(closeCounts, d) | number: '1.2-2' }}
Coins
{{ d.label }}
@if (hasAutoFilledCounts && countFor(closeCounts, d) !== autoCountFor(d)) { system counted {{ autoCountFor(d) }} }
₹{{ subtotalFor(closeCounts, d) | number: '1.2-2' }}
@if (closeDenomTotal > 0) {

Denomination total: ₹{{ closeDenomTotal | number: '1.2-2' }} @if (hasAutoFilledCounts) { }

} @if (isLateClose) { }

The figure above is stored against the record, so a difference stays readable later even if a transaction is reversed afterwards.

@if (hasUnreconciledOrUnsettledCashiers) {
block
Cannot close the day — cashiers still holding cash have not been reconciled or settled.
    @for (detail of unreconciledOrUnsettledCashierDetails; track detail.name) {
  • {{ detail.name }} — @if (detail.notReconciled && detail.notSettled) { Not Reconciled, Not Settled } @else if (detail.notReconciled) { Not Reconciled } @else { Not Settled }
  • }
Each cashier must reconcile their cash and settle it back to the vault before the branch day can be closed.
}
} @if (loading) {
Loading…
} @if (!loading && loaded && days.length === 0 && !missedOnly) {
event_note

No business day has been opened for this branch yet.

} @if (days.length > 0 && !missedOnly) {
@for (d of days; track d.id) { }
Business Date Status Opened By Opening ₹ Closed By Closing ₹ Book ₹ Difference Note
{{ d.businessDate }} @if (d.status === 'OPEN') { OPEN } @else if (d.forceClosed) { FORCE CLOSED } @else { CLOSED } {{ d.openedByName ?? '—' }} · {{ timeOnly(d.openedAt) }} ₹{{ d.openingCash | number: '1.2-2' }} {{ d.closedByName ?? '—' }} @if (d.closedAt) { · {{ timeOnly(d.closedAt) }} } {{ d.closingCash != null ? '₹' + (d.closingCash | number: '1.2-2') : '—' }} {{ d.bookCash != null ? '₹' + (d.bookCash | number: '1.2-2') : '—' }} @if (d.cashDifference == null) { — } @else if (d.cashDifference === 0) { Tallied } @else { {{ differenceLabel(d.cashDifference) }} } @if (d.forceCloseReason) { Left open: {{ d.forceCloseReason }} } @if (d.remarks) { {{ d.remarks }} }
}