feat(fixed-deposits): maturity approval UI, scoped to deposits with no closure instruction

Adds the FD Maturity Reports screen (due-without-report, generate/
approve, branch and head-office scope, detail with closure instruction
and estimated interest per deposit), a nav entry, the route, and
Branch Day Closing's maturing-today section and approval-pending
warning banner.

Adds "Matured automatically" to the maturity screen: deposits that
settled via their own Transfer-to-Savings or Reinvest instruction,
needing no approval, listed for visibility with product totals and
per-deposit detail.

Adds "Product summary" to the FD Interest Posting Reports screen
(head office): interest by product and scheme — posted through the
report, still pending, and posted directly at maturity instead — added
up to what each product has paid out in total over a period.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 19:06:57 +05:30
co-authored by Claude Sonnet 5
parent 79bffaca69
commit c90528e109
5 changed files with 283 additions and 0 deletions
@@ -386,6 +386,40 @@
</div>
</div>
}
<!-- Deposits whose term ends today — status, final interest and any renewal/transfer instruction
all run together the moment this report is approved and the day closes. -->
@if (preview?.fdMaturityDue?.length) {
<div class="bd-calc bd-calc--fd">
<div class="bd-calc__head">
<mat-icon>event_available</mat-icon>
<strong>Fixed deposits maturing today</strong>
</div>
@for (d of preview.fdMaturityDue; track $index) {
<div class="bd-calc__row">
<span>
{{ d.accountCount }} deposit(s)
@if (d.reportStatus === 'APPROVED' || d.reportStatus === 'POSTED') {
<span class="bd-fd-ok">{{ d.reportStatus }}</span>
} @else {
<span class="bd-fd-pending">{{ d.reportStatus === 'NONE' ? 'NO REPORT' : d.reportStatus }}</span>
}
</span>
<span class="bd-calc__amt">₹{{ d.totalInterest | number: '1.2-2' }}</span>
</div>
}
</div>
}
@if (preview?.fdMaturityPending?.length) {
<div class="bd-warn">
<mat-icon>warning</mat-icon>
<div>
<strong>The day cannot be closed yet.</strong> Fixed deposit maturities are not approved for:
{{ preview.fdMaturityPending.join(', ') }}. Approve it under Reports → FD Maturity Reports, then close the
day. The user who generated a report cannot approve it.
</div>
</div>
}
@if (preview?.savingsInterestPending?.length) {
<div class="bd-warn">
<mat-icon>warning</mat-icon>