feat: implement DIP/MNRL lookups and enhance Sanctions screening workflows
build-run / Run Lint, Build and Deploy (push) Canceled after 0s
Publish Image in Docker Hub / build (push) Canceled after 0s
Playwright E2E Tests / Run Playwright Tests (push) Canceled after 0s
Tests / testRigor (push) Canceled after 0s

- Implement DIP/MNRL lookup logs table, filtering, and detail review under reports.
- Integrate DIP verification gating on client creation, allowing officers to record PROCEEDED/REJECTED decisions with reasons.
- Upgrade Sanctions verification dialog to support comparing Name, DOB, and Nationality particulars.
- Add Sanctions disposition recording (FALSE_POSITIVE / CONFIRMED_MATCH) awaiting Principal Officer approval.
- Add sanctions-alert-review-dialog for reviewers to assess and escalate/clear flagged names.
- Enforce strict screening reset logic on client name changes, preventing bypass of existing blocks.
- Update routes and shell menu navigation to include DIP/MNRL Lookups and Sanctions Logs.
This commit is contained in:
2026-08-14 10:44:00 +05:30
parent 8d67a22f18
commit 352a65cb5d
22 changed files with 2219 additions and 61 deletions
+24
View File
@@ -855,6 +855,30 @@ export class ClientsService {
return this.http.post('/sanctions/screen', { name });
}
/**
* Records the reviewing officer's assessment of a flagged screening.
*
* A FALSE_POSITIVE does not unblock onboarding on its own — it only becomes effective once
* the Principal Officer approves it from the Sanctions Logs screen.
*
* @param logId screening log id returned by screenSanctions()
* @param disposition 'FALSE_POSITIVE' | 'CONFIRMED_MATCH'
* @param reason which identifiers were compared and why they do/don't match
*/
recordSanctionsDisposition(logId: number, disposition: string, reason: string): Observable<any> {
return this.http.post(`/sanctions/alerts/${logId}/disposition`, { disposition, reason });
}
/**
* Records the officer's decision on a DIP/MNRL lookup that came back flagged or unverifiable.
* Until PROCEEDED is stored, the client-create gate refuses to save the number.
*
* @param decision 'PROCEEDED' | 'REJECTED'
*/
recordDipDecision(logId: number, decision: string, reason: string): Observable<any> {
return this.http.post(`/lookup/logs/${logId}/decision`, { decision, reason });
}
/**
* Updates existing KYC details for a client.
* @param clientId Client ID