KYC management: stage-wise notices, pagination, RD base chart
This commit is contained in:
@@ -23,6 +23,10 @@ import { ClientIndiaAddressStepComponent } from '../client-stepper/client-india-
|
||||
import { ClientEntityKycStepComponent } from '../client-stepper/client-entity-kyc-step/client-entity-kyc-step.component';
|
||||
import { ClientDatatableStepComponent } from '../client-stepper/client-datatable-step/client-datatable-step.component';
|
||||
import { ClientKycStepComponent } from '../client-stepper/client-kyc-step/client-kyc-step.component';
|
||||
import {
|
||||
ClientIdentityCheckComponent,
|
||||
ClientIdentityState
|
||||
} from '../client-stepper/client-identity-check/client-identity-check.component';
|
||||
import { ClientPreviewStepComponent } from '../client-stepper/client-preview-step/client-preview-step.component';
|
||||
import { ClientFamilyMembersStepComponent } from '../client-stepper/client-family-members-step/client-family-members-step.component';
|
||||
|
||||
@@ -60,6 +64,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
|
||||
ClientEntityKycStepComponent,
|
||||
ClientDatatableStepComponent,
|
||||
ClientKycStepComponent,
|
||||
ClientIdentityCheckComponent,
|
||||
ClientPreviewStepComponent,
|
||||
ClientFamilyMembersStepComponent,
|
||||
MatProgressBarModule,
|
||||
@@ -79,6 +84,7 @@ export class CreateClientComponent {
|
||||
@ViewChild('clientIndiaAddress') clientIndiaAddressStep: ClientIndiaAddressStepComponent;
|
||||
@ViewChild(ClientEntityKycStepComponent) clientEntityKycStep: ClientEntityKycStepComponent;
|
||||
@ViewChild('clientKyc') clientKycStep: ClientKycStepComponent;
|
||||
@ViewChild(ClientIdentityCheckComponent) identityCheck: ClientIdentityCheckComponent;
|
||||
@ViewChild(ClientFamilyMembersStepComponent) clientFamilyMembersStep: ClientFamilyMembersStepComponent;
|
||||
@ViewChildren('dtclient') clientDatatables: QueryList<ClientDatatableStepComponent>;
|
||||
|
||||
@@ -87,6 +93,17 @@ export class CreateClientComponent {
|
||||
selectedTabIndex = 0;
|
||||
createdClientId = '';
|
||||
savingClient = false;
|
||||
/**
|
||||
* Result of the existing-customer check at the top of the General step. While it says the customer already exists
|
||||
* (or the identifiers disagree) a new client must not be created; otherwise the identifiers typed there are filled
|
||||
* into the KYC step.
|
||||
*/
|
||||
identity: ClientIdentityState | null = null;
|
||||
|
||||
onIdentityChange(state: ClientIdentityState): void {
|
||||
this.identity = state;
|
||||
}
|
||||
|
||||
/** Pre-fill data passed from "Create as Client" on a manual family member */
|
||||
prefillData: any = null;
|
||||
|
||||
@@ -138,6 +155,8 @@ export class CreateClientComponent {
|
||||
this.highestTabReached = 0;
|
||||
this.validationError = '';
|
||||
this.prefillData = null;
|
||||
this.identity = null;
|
||||
this.identityCheck?.reset();
|
||||
this.clientGeneralStep?.resetForNewClient();
|
||||
this.clientKycStep?.resetForNewClient();
|
||||
this.clientIndiaAddressStep?.resetForNewClient();
|
||||
@@ -212,6 +231,10 @@ export class CreateClientComponent {
|
||||
const idx = this.selectedTabIndex;
|
||||
|
||||
if (idx === 0) {
|
||||
// The customer is already on the books (any branch), or the identifiers belong to different customers.
|
||||
if (!this.createdClientId && (this.identity?.blocking || this.identity?.status === 'checking')) return false;
|
||||
// A PAN / Aadhaar / GSTIN typed in the wrong format is neither looked up nor carried on, so it must be fixed or cleared.
|
||||
if (!this.createdClientId && this.identityCheck?.hasInvalidInput) return false;
|
||||
if (!this.clientGeneralStep || !this.clientGeneralForm) return false;
|
||||
if (this.clientGeneralStep.sanctionsBlocked) return false;
|
||||
// A number the officer rejected on the DIP result must be replaced, not carried forward.
|
||||
@@ -274,6 +297,17 @@ export class CreateClientComponent {
|
||||
if (this.savingClient) return 'Saving — please wait…';
|
||||
if (this.currentStepValid) return '';
|
||||
const idx = this.selectedTabIndex;
|
||||
if (idx === 0 && !this.createdClientId && this.identityCheck?.hasInvalidInput) {
|
||||
return 'Correct the PAN / Aadhaar / GSTIN format in the Existing customer check, or clear the field.';
|
||||
}
|
||||
if (idx === 0 && !this.createdClientId && this.identity?.status === 'checking') {
|
||||
return 'Checking whether this customer already exists…';
|
||||
}
|
||||
if (idx === 0 && !this.createdClientId && this.identity?.blocking) {
|
||||
return this.identity.status === 'conflict'
|
||||
? 'The PAN / Aadhaar / GSTIN entered belong to different customers — correct them or ask a manager.'
|
||||
: 'This customer already exists — a new client is not created for the same person. Open the existing customer instead.';
|
||||
}
|
||||
if (idx === 0 && this.clientGeneralStep?.sanctionsBlocked) {
|
||||
const disposition = this.clientGeneralStep.sanctionsDisposition;
|
||||
if (disposition === 'FALSE_POSITIVE') {
|
||||
@@ -358,6 +392,19 @@ export class CreateClientComponent {
|
||||
onNext() {
|
||||
// If on General tab and client not yet created — save first
|
||||
if (this.selectedTabIndex === 0 && !this.createdClientId) {
|
||||
// Defensive re-check: the button is disabled while this holds, but a second client for the same person is the
|
||||
// one mistake this screen exists to prevent.
|
||||
if (this.identityCheck?.hasInvalidInput) {
|
||||
this.identityCheck.markAllAsTouched();
|
||||
this.snackBar.open(this.currentStepBlockerMessage, 'Close', { duration: 6000 });
|
||||
return;
|
||||
}
|
||||
if (this.identity?.blocking) {
|
||||
this.snackBar.open(this.currentStepBlockerMessage || 'This customer already exists.', 'Close', {
|
||||
duration: 6000
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!this.clientGeneralForm?.valid) {
|
||||
this.clientGeneralForm?.markAllAsTouched();
|
||||
setTimeout(() => {
|
||||
|
||||
Reference in New Issue
Block a user