{{ screenTitle }}

{{ screenSubtitle }}

@if (errorMsg) {
{{ errorMsg }}
} @if (successMsg) {
{{ successMsg }}
} @if (loading) {
Loading…
} @else { @if (showRates) {

Reserve rates

Rates are effective-dated rather than overwritten: a return filed for an earlier period keeps reporting the rate that was actually in force then. Saving against a date that already has a rate edits it; a new date adds one.

@for (type of ['CRR', 'SLR', 'SAVINGS_DEMAND']; track type) {
{{ type === 'SAVINGS_DEMAND' ? 'Savings demand share' : type }} in force today @if (currentRate(type); as rate) { {{ rate.percentage }}% @if (rate.seedDefault) { Placeholder — confirm the rate actually in force } @else { since {{ rate.effectiveFrom }} } } @else { Not set {{ type === 'CRR' ? 'Form 1' : 'Form 9' }} cannot compute }
}
Rate CRR — Form 1 SLR — Form 9 Savings — demand share Percentage (%) Effective from
@for (rate of rates; track rate.id) { }
Rate Percentage Effective from Status
{{ rate.rateType }} {{ rate.percentage }}% {{ rate.effectiveFrom }} @if (isFuture(rate)) { Future-dated } @else if (currentRate(rate.rateType)?.id === rate.id) { In force } @else { Superseded } @if (rate.seedDefault) { Placeholder }
}

GL accounts behind each figure

Configuring @for (f of formFilters; track f.value) { {{ f.label }} }

Every role takes as many accounts as it needs — a bank holds current accounts at several other banks, and each one counts toward what it maintains. Only postable accounts are listed: a header account's balance is the sum of its children, so mapping both would count those children twice. @if (formFilter !== 'ALL') { Heads that build or net the DTL base are shown for either return, since both charge their rate on that same base. }

@if (unmappedCount) {
{{ unmappedCount }} of {{ glRoles.length }} roles have no accounts mapped. Returns that depend on them will report why they cannot compute instead of showing a figure.
} @if (showTabs) {
@for (group of roleGroups; track group.name) { }
} @for (role of visibleRoles; track role.configKey) {
{{ roleLabel(role) }} {{ role.configKey }} {{ roleUsedBy(role) }}
@if (isUnmapped(role)) { Not mapped } @else { {{ selection[role.configKey].length }} account{{ selection[role.configKey].length === 1 ? '' : 's' }} }

{{ role.description }}

@if (selection[role.configKey]?.length) { @if (role.classified) { } @for (mapping of selection[role.configKey]; track $index; let i = $index) { @if (role.classified) { } }
GL account Portion (%)Head
@for (o of availableAccounts(role, i); track o.id) { {{ o.glCode }} · {{ o.name }} } @for (c of liabilityClasses; track c.value) { {{ c.label }} }
} @for (entry of unbalancedAccounts(role); track entry.glAccountId) {
{{ glLabel(entry.glAccountId) }} is mapped at {{ entry.total }}% in total. @if (entry.total < 100) { {{ 100 - entry.total }}% of its balance will not appear on the return. } @else { It would be counted {{ entry.total }}% — more than the account holds. }
}
@if (!role.builtIn) { }
}
@if (!showAddRole) {

For anything this bank carries that the heads above do not name — a reserve, a tax payable, bills payable. The return reads it from the same chart of accounts the balance sheet is built from.

} @else {
Name How the return uses it @for (u of roleUsages; track u.value) { {{ u.label }} } Note (optional)

Naming a head Memorandum - …, Annexure A - … or Annexure B - … prints it under that section of the return instead of in the main statement.

}
}