@if (loading) {
Computing from the ledger…
} @else if (errorMsg) {
{{ errorMsg }}
} @else if (data) {

{{ data.formName }}

{{ data.frequency }} @if (data.fortnightLabel) { {{ data.fortnightLabel }} · {{ data.fortnightStart }} to {{ data.fortnightEnd }} } @else { Month ended {{ data.reportingDate }} }
Reporting date
@if (activeTab === 'report') { @if (data.unmetRequirements.length) {
{{ data.computable ? 'Check this before filing.' : 'This return cannot be computed yet.' }} Open RBI Reserve Configuration →
}
DTL base as at {{ data.basis.dtlAsOnDate }}
Balances maintained as at {{ data.basis.holdingsAsOnDate }}
@if (data.basis.rawLagDate) {
{{ data.basis.lagDays }}-day lag falls on {{ data.basis.rawLagDate }}
}

{{ data.basis.note }}

@if (data.computable) {
NDTL base {{ amount(data.ndtlAmount) }} DTL {{ amount(data.dtlAmount) }} less {{ amount(data.interBankAssets) }} · as at {{ data.basis.dtlAsOnDate }}
{{ data.rateType }} rate {{ data.ratePercentage }}% @if (data.rateIsSeedDefault) { Placeholder — not confirmed } @else { in force on {{ data.reportingDate }} }
Required {{ amount(data.requiredAmount) }} {{ data.ratePercentage }}% of NDTL
Maintained {{ amount(data.maintainedAmount) }} {{ percent(data.maintainedPercentage) }} of NDTL
{{ isShortfall ? 'Shortfall' : 'Surplus' }} {{ amount(shortfallAmount) }} {{ isShortfall ? 'Below requirement' : 'Above requirement' }}
}
@for (line of data.lines; track $index) { @for (account of line.accounts; track account.glAccountId) { } } @if (data.computable) { }
Particulars As at Amount (INR)
{{ line.label }} @if (!line.configured) { Not configured } {{ line.asOnDate }} @if (line.configured) { {{ amount(line.amount) }} } @else { — }
{{ account.glCode }} {{ account.name }} @if (account.excluded) { excluded — {{ account.excluded }} } @if (isPartial(account)) { {{ account.weightPercentage }}% of {{ amount(account.accountBalance) }} } @if (account.liabilityClass) { {{ account.liabilityClass | titlecase }} } {{ amount(account.balance) }}
{{ data.rateType }} required ({{ data.ratePercentage }}% of NDTL) {{ amount(data.requiredAmount) }}
{{ data.rateType }} maintained {{ amount(data.maintainedAmount) }}
{{ isShortfall ? 'Shortfall' : 'Surplus' }} {{ amount(shortfallAmount) }}
@if (data.maintenance; as m) {

Daily maintenance — {{ m.periodLabel || 'this month' }} @if (!m.fortnightComplete) { In progress — {{ m.dayCount }} days so far }

Every day of the month, against the requirement in force. CRR is reckoned over the period rather than on one day: the full requirement must be held on average, and at least {{ m.dailyMinimumPercent }}% of it on every single day.

Average maintained {{ amount(m.average) }} {{ m.averageMet ? 'Meets' : 'Below' }} required {{ amount(m.requiredAverage) }}
Lowest day {{ amount(m.lowest) }} on {{ m.lowestOn }} · floor {{ amount(m.dailyMinimumAmount) }}
Days counted {{ m.dayCount }} {{ m.fortnightComplete ? 'Full fortnight' : 'To reporting date' }}
@for (day of m.days; track day.date) { }
Date Required (INR) Actual (INR) Surplus / (Shortfall) Against floor
{{ day.date }} {{ amount(day.required) }} {{ amount(day.amount) }} {{ amount(day.surplus) }} @if (day.amount < m.dailyMinimumAmount) { Below floor } @else { OK }
} @for (section of namedSections; track section.title) { @if (section.rows.length) {

{{ section.title }}

{{ section.hint }}

@for (row of section.rows; track row.configKey) { }
Particulars Amount (INR)
{{ row.label }} @if (!row.configured) { Not configured } @if (row.configured) { {{ amount(row.amount) }} } @else { — }
} } } } @if (activeTab === 'saved') {

Saved returns @if (savedReturns.length) { {{ savedReturns.length }} }

Returns kept for the record. Each opens exactly as it was saved — the stored statement, not a re-run of today's ledger, so a figure already reported cannot change underneath it.

@if (data?.computable) {
Note (optional)
} @if (savedLoading) {
Loading saved returns…
} @else if (!savedReturns.length) {
Nothing saved yet. Generate a return and press Save to keep it.
} @else { @for (row of savedReturns; track row.id) { }
Reporting date Period NDTL Required Maintained Status Saved
{{ row.reportingDate }} {{ row.periodStart }} → {{ row.periodEnd }} {{ amount(row.ndtlAmount) }} {{ amount(row.requiredAmount) }} {{ amount(row.maintainedAmount) }} @for (s of filingStatuses; track s) { {{ statusLabel(s) }} } {{ row.createdOn }}
{{ row.createdBy }}
}
@if (viewingSaved && savedData; as _) {

Saved return — {{ savedData.reportingDate }} {{ statusLabel(viewingSaved.status) }}

Saved {{ viewingSaved.createdOn }} by {{ viewingSaved.createdBy || 'unknown' }}. These are the figures as they stood when it was saved — not today's ledger, which may have moved since. @if (viewingSaved.remarks) { “{{ viewingSaved.remarks }}” }

NDTL base {{ amount(savedData.ndtlAmount ?? savedData.dtlAmount) }} as at {{ savedData.basis.dtlAsOnDate }}
{{ savedData.rateType }} rate {{ savedData.ratePercentage }}% as filed
Required {{ amount(savedData.requiredAmount) }} {{ savedData.ratePercentage }}% of NDTL
Maintained {{ amount(savedData.maintainedAmount) }} on {{ savedData.basis.holdingsAsOnDate }}
{{ savedData.compliant ? 'Surplus' : 'Shortfall' }} {{ amount(savedSurplus) }} {{ savedData.compliant ? 'Above requirement' : 'Below requirement' }}
@for (line of savedData.lines; track line.configKey) { @for (account of line.accounts; track account.glAccountId) { } }
Particulars As at Amount (INR)
{{ line.label }} {{ line.asOnDate }} @if (line.configured) { {{ amount(line.amount) }} } @else { — }
{{ account.glCode }} {{ account.name }} @if (isPartial(account)) { {{ account.weightPercentage }}% of {{ amount(account.accountBalance) }} } @if (account.liabilityClass) { {{ account.liabilityClass | titlecase }} } {{ amount(account.balance) }}
@if (savedData.maintenance; as sm) {

Daily maintenance as filed — {{ sm.periodLabel || '' }}

@for (day of sm.days; track day.date) { }
Date Required Actual Surplus / (Shortfall)
{{ day.date }} {{ amount(day.required) }} {{ amount(day.amount) }} {{ amount(day.surplus) }}
}
} } @if (toastVisible) {
{{ toastMsg }}
}