account_balance_wallet
A Cash Credit (CC) account is a current account that may draw an overdraft against a sanctioned limit. For each one, this shows how much came in and how much went out, against the turnover the customer declared and the limit the bank sanctioned. It is read from the posted transactions, so it is live now, while the scenarios for CC are still being added to the engine.
@if (asOf) { {{ from | date: 'dd MMM yyyy' }} to {{ asOf | date: 'dd MMM yyyy' }} }
₹{{ totalIn | number: '1.2-2' }}
Came in
₹{{ totalOut | number: '1.2-2' }}
Went out
{{ shown.length }}
CC accounts
@if (loading) {
Loading the CC account figures…
} @else if (error) {
{{ error }}
} @else if (!shown.length) {
No CC account in your branch yet. A CC account is a current account opened on a product that allows an overdraft (Client page, Applications, New CC Account).
} @else {
@for (a of shown; track a.accountId; let i = $index) { }
# Customer / Account Branch Limit Drawn Declared / month Came in Went out Net In ÷ declared Cash in Last txn CC rules Details
{{ i + 1 }}
{{ a.clientName }} {{ a.isCc ? 'CC' : 'Current' }}
{{ a.accountNo }}
{{ a.branchName || '—' }} {{ a.isCc ? '₹' + (a.sanctionedLimit | number: '1.0-0') : '—' }} {{ a.limitDrawnPercent != null ? a.limitDrawnPercent + '%' : '—' }} {{ a.declaredMonthlyTurnover != null ? '₹' + (a.declaredMonthlyTurnover | number: '1.0-0') : 'not declared' }} ₹{{ a.credits | number: '1.2-2' }}
{{ a.creditCount }} txn
₹{{ a.debits | number: '1.2-2' }}
{{ a.debitCount }} txn
{{ rs(a.net) }} @if (a.creditsVsDeclared != null) { {{ a.creditsVsDeclared }}× } @else { — } {{ a.cashCreditPercent != null ? a.cashCreditPercent + '%' : '—' }} {{ a.lastTxnDate ? (a.lastTxnDate | date: 'dd MMM yyyy') : '—' }} {{ a.rulesHit }} hit
{{ a.rulesNoHit }} no hit · {{ a.rulesNotChecked }} not checked

Busiest first. “In ÷ declared” compares what came in with the turnover the customer declared, scaled to the window; {{ spikeMultiple }}× or more is highlighted for a look. It is an indicative starting value, not a finding.

}
@if (trailLoading) {
Loading the account's money trail…
} @else if (trailError) {
{{ trailError }}
} @else if (trail) {
{{ trail.clientName }} {{ trail.isCc ? 'CC' : 'Current' }}
{{ trail.accountNo }} · {{ trail.branchName }}
{{ trail.from | date: 'dd MMM yyyy' }} to {{ trail.asOf | date: 'dd MMM yyyy' }} · Sanctioned limit ₹{{ trail.sanctionedLimit | number: '1.0-0' }} · Closing balance {{ drcr(trail.balance) }}
Cr (credit) = money received into the account. Dr (debit) = money paid out of the account. On a CC account, a Dr balance means the customer has drawn on the overdraft, that is, owes the bank.
@if (trailView === 'rules') {

Hit = this account's transactions trigger the rule. No hit = the rule was checked and not triggered. Not checked = the rule needs an officer's judgement or data the system does not hold yet, so it is not shown as passed.

@for (r of filteredRuleChecks; track r.ruleId) { } @empty { }
Rule Kind Risk Result Why
{{ r.name }} @if (r.onTrial) { TRIAL } {{ r.kind }} {{ riskLabel(r.riskCategory) }} {{ r.status === 'HIT' ? 'HIT' : r.status === 'NO_HIT' ? 'No hit' : 'Not checked' }} {{ r.detail }}
No rule in this group.
} @else if (trailView === 'analysis') {
In short
@for (line of story; track $index) {

{{ line }}

}
Total credits (Cr)
₹{{ trail.summary.in | number: '1.2-2' }}
{{ trail.summary.inCount }} credit{{ trail.summary.inCount === 1 ? '' : 's' }} · money received
Total debits (Dr)
₹{{ trail.summary.out | number: '1.2-2' }}
{{ trail.summary.outCount }} debit{{ trail.summary.outCount === 1 ? '' : 's' }} · money paid out
Net (Cr − Dr)
{{ drcr(trail.summary.net) }}
{{ trail.summary.net < 0 ? 'Debits were more than credits' : trail.summary.net > 0 ? 'Credits were more than debits' : 'Credits equal debits' }}
Closing balance
{{ drcr(trail.balance) }}
{{ trail.balance < 0 ? 'Overdrawn: the customer owes the bank' : trail.balance > 0 ? "The customer's own money" : 'Nil' }}
Lowest balance
{{ drcr(trail.summary.lowestBalance, '1.0-0') }}
{{ trail.summary.peakLimitUsedPercent != null ? trail.summary.peakLimitUsedPercent + '% of the limit used at the worst point' : 'Never overdrawn' }}
Active days: {{ trail.summary.activeDays }} Average credit: {{ trail.summary.averageIn != null ? '₹' + (trail.summary.averageIn | number: '1.0-0') : '—' }} Average debit: {{ trail.summary.averageOut != null ? '₹' + (trail.summary.averageOut | number: '1.0-0') : '—' }} Declared turnover for the window: {{ trail.summary.declaredForWindow != null ? '₹' + (trail.summary.declaredForWindow | number: '1.0-0') : 'not declared' }} Credits ÷ declared: {{ trail.summary.creditsVsDeclared != null ? trail.summary.creditsVsDeclared + '×' : '—' }}
What stands out
@for (o of trail.observations; track $index) {
{{ o.level }}
{{ o.title }}
{{ o.detail }}
@if (o.why) {
Why it matters: {{ o.why }}
}
}
By mode of transaction
@for (m of trail.byMode; track m.label) { } @empty { }
Mode Credit (Cr) Debit (Dr) Net Txns Share
{{ m.label }} ₹{{ m.in | number: '1.0-0' }} ₹{{ m.out | number: '1.0-0' }} {{ drcr(m.in - m.out, '1.0-0') }} {{ m.count }} {{ m.sharePercent }}%
No transactions in this window.

Share = this mode's part of all the money that moved (credits + debits).

Who the money came from (Cr) and went to (Dr)
@for (p of trail.byCounterparty; track $index) { } @empty { }
Account / Bank Credit (Cr) Debit (Dr) Net Txns Share
{{ p.label }}
{{ p.sub || '' }}
₹{{ p.in | number: '1.0-0' }} ₹{{ p.out | number: '1.0-0' }} {{ drcr(p.in - p.out, '1.0-0') }} {{ p.count }} {{ p.sharePercent }}%
—

Cr from a party = it paid this account. Dr to a party = this account paid it.

Week by week
@for (w of trail.timeline; track w.label) { }
Week starting Credit (Cr) Debit (Dr) Net for the week Txns
{{ w.label | date: 'dd MMM yyyy' }} ₹{{ w.in | number: '1.0-0' }} ₹{{ w.out | number: '1.0-0' }} {{ drcr(w.in - w.out, '1.0-0') }} {{ w.count }}
@if (trail.summary.largestIn) {
Largest credit (Cr): ₹{{ trail.summary.largestIn.amount | number: '1.2-2' }}, received from {{ trail.summary.largestIn.party }} by {{ trail.summary.largestIn.mode }} on {{ trail.summary.largestIn.date | date: 'dd MMM yyyy' }}.
} @if (trail.summary.largestOut) {
Largest debit (Dr): ₹{{ trail.summary.largestOut.amount | number: '1.2-2' }}, paid to {{ trail.summary.largestOut.party }} by {{ trail.summary.largestOut.mode }} on {{ trail.summary.largestOut.date | date: 'dd MMM yyyy' }}.
}

Observations use fixed starting values (for example 3× the declared turnover, a credit mostly paid out again within 3 days, one party above half of all the money moved). They point at something worth a look; they are not findings, and the bank's compliance team sets the real thresholds.

} @else {
@for (t of trail.transactions; track t.id) { } @empty { }
Date Cr / Dr Mode Other side Reference Credit (Cr) Debit (Dr) Balance after
{{ t.date | date: 'dd MMM yyyy' }} {{ t.direction === 'IN' ? 'Cr · received' : 'Dr · paid out' }} {{ t.mode }} @if (t.chequeNo) {
No. {{ t.chequeNo }}
}
{{ t.counterpartyAccount || '—' }}
{{ t.counterpartyBank || '' }}{{ t.counterpartyIfsc ? ' · ' + t.counterpartyIfsc : '' }}
{{ t.reference || '—' }}
{{ t.remarks }}
{{ t.direction === 'IN' ? '₹' + (t.amount | number: '1.2-2') : '' }} {{ t.direction === 'OUT' ? '₹' + (t.amount | number: '1.2-2') : '' }} {{ drcr(t.balanceAfter) }}
No transactions in this window.

“Mode” and the other side are what the payment recorded: cash, cheque (by its number), and NEFT, RTGS, IMPS, UPI, demand draft or internal transfer where the payment says so. Where it recorded nothing, it shows as “Not recorded”. “Balance after” is the account's balance once that transaction was posted: Dr when overdrawn, Cr when in credit.

} }