Savings Interest Posted

Interest actually credited to members, grouped by the rhythm each product posts on. An account appears under its own product's posting period and nowhere else.
@if (errorMessage) {
{{ errorMessage }}
} @if (rhythmWarnings.length > 0) {
Postings do not follow the product's rhythm. @for (w of rhythmWarnings; track w.product) {
{{ w.product }} is configured {{ w.label }} ({{ w.expected }}) but has paid on {{ w.dates }} different dates.
}
These were written by the platform's own savings interest job, which posts a day at a time regardless of the product's period. Every posting below is real money credited to a member — the figures are correct, but a period total will not match the rhythm the product is set to.
}
@for (p of periods; track p.enumValue) { }
@if (periodPick[activePeriod]) { } {{ availablePicks(activePeriod).length }} {{ activeMeta.pickUnit }}{{ availablePicks(activePeriod).length === 1 ? '' : 's' }} with postings
{{ activeMeta.label }}. {{ activeMeta.cadence }} — every account on a product configured to post {{ activeMeta.label.toLowerCase() }}.
{{ visibleAccounts }} accounts · {{ visibleRows.length }} postings · ₹{{ visibleTotal | number: '1.2-2' }} paid
@if (loading) {
Loading…
} @else if (visibleRows.length === 0) {
No {{ activeMeta.label.toLowerCase() }} interest posted in this period. @if (activePeriod !== 1) { A cycle that has not ended yet has nothing to show. }
} @else { @for (group of groupedByDate; track group.date) {
{{ formatDate(group.date) }} {{ group.accounts }} account{{ group.accounts === 1 ? '' : 's' }} · ₹{{ group.total | number: '1.2-2' }}
@for (r of group.rows; track r.transaction_id) { }
Account No Customer Product Rate Balance Before Interest Posted Balance After Branch
{{ r.account_no }} {{ r.client_name || '—' }} {{ r.product_name }} {{ r.interest_rate | number: '1.2-2' }}% {{ r.balance_before | number: '1.2-2' }} {{ r.interest_amount | number: '1.2-2' }} {{ r.balance_after | number: '1.2-2' }} {{ r.office_name || '—' }}
} }