fix: update sponsor DD approvals, cashier transaction entry, FIU and dividend declaration

This commit is contained in:
2026-09-21 10:24:08 +05:30
parent 3c363d0372
commit a6e6220100
14 changed files with 1745 additions and 234 deletions
@@ -767,7 +767,7 @@ export class AmlFlaggedTransactionsComponent implements OnInit, AfterViewInit, O
// The day narrows everything else: the status chips and the severity tiles are asking "of what is in view", and
// an officer who has picked a day expects their counts to describe that day rather than the whole feed.
const byDay = this.allAlerts.filter((a) => this.inActivePeriod(a));
const byStatus = this.activeStatus ? byDay.filter((a) => a.status === this.activeStatus) : byDay;
const byStatus = this.activeStatus ? byDay.filter((a) => this.matchesStatus(a, this.activeStatus)) : byDay;
const bySeverity =
this.activeSeverity === null ? byStatus : byStatus.filter((a) => this.severityBand(a) === this.activeSeverity);
// Ranked last, over what the other filters left: "top 10 this month" is the ten busiest rules of that month, not
@@ -914,7 +914,7 @@ export class AmlFlaggedTransactionsComponent implements OnInit, AfterViewInit, O
get summaryTotal(): number {
const pool = this.allAlerts.filter((a) => this.inActivePeriod(a));
return this.activeStatus ? pool.filter((a) => a.status === this.activeStatus).length : pool.length;
return this.activeStatus ? pool.filter((a) => this.matchesStatus(a, this.activeStatus)).length : pool.length;
}
private recomputeStatusCounts(): void {
@@ -924,11 +924,30 @@ export class AmlFlaggedTransactionsComponent implements OnInit, AfterViewInit, O
this.statusCounts = { '': pool.length };
for (const s of this.statusFilters) {
if (s.key) {
this.statusCounts[s.key] = pool.filter((a) => a.status === s.key).length;
this.statusCounts[s.key] = pool.filter((a) => this.matchesStatus(a, s.key)).length;
}
}
}
/**
* Whether an alert belongs under a status chip.
*
* Not an equality test, deliberately. Matching the chip's key exactly meant any status the chip list did not name
* belonged to no chip at all while still counting toward "All alerts" — so an alert could sit in the feed, need a
* decision, and appear nowhere an officer looks for work. That is what UNDER_REVIEW did here: five undecided
* alerts, the largest ₹18,00,000, behind a pending figure that read 1.
*
* Pending is therefore defined by what has not been decided rather than by one status name. Any status that is
* neither whitelisted nor escalated surfaces under Raised on its own, which is the safe direction to fail — an
* alert shown as work that turns out to be finished costs a glance; one hidden costs a filing.
*/
private matchesStatus(alert: any, key: string): boolean {
if (key === 'RAISED') {
return alert?.status !== 'WHITELISTED' && alert?.status !== 'ESCALATED';
}
return alert?.status === key;
}
statusClass(status: string): string {
return 'alert-status status-' + (status || 'raised').toLowerCase();
}