@if (loading) {

{{ 'labels.inputs.KYC Verification' | translate }}...

} @if (!loading) {

{{ 'labels.inputs.KYC Verification' | translate }}

KYC @if (kycData?.kycStatusCode) { {{ getStatusLabel(kycData.kycStatusCode) }} }
@if (!isEditMode && kycData) { }
@if (!isEditMode && kycData) { @if (kycData.isException && !kycData.exceptionResolved) {
warning
KYC Exception Active

Account is open under a temporary KYC Exception. Reason: {{ kycData.exceptionReason || 'Other' }}. Please contact the customer and complete verification as soon as possible.

} @if (showKycDocumentAlert) {
{{ kycDocumentAlertSeverity === 'critical' ? 'error' : 'schedule' }}
{{ kycDocumentAlertTitle }}

{{ kycDocumentAlertMessage }}

}
Document Number Status Verified On Action
@if (!isNonIndividual) {
credit_card PAN {{ kycData.panNumber || '—' }} @if (kycData.panVerified) { check_circle Verified } @else if (panDeclarationTaken) { assignment_turned_in Declaration } @else { radio_button_unchecked Pending } {{ kycData.panVerified ? kycData.panVerifiedOn ? formatDate(kycData.panVerifiedOn) : '—' : panDeclarationTaken && kycData.panDeclarationTakenOn ? formatDate(kycData.panDeclarationTakenOn) : '—' }} @if (!kycData.panVerified && !panDeclarationTaken && kycData.panNumber) { }
@if (!kycData.panVerified && panDeclarationTaken) {
assignment_turned_in PAN Declaration @if (!saving) { }
Does not match {{ panDeclarationMismatchLabel }}
@if (kycData.panDeclarationNameOnPan) {
Name on PAN {{ kycData.panDeclarationNameOnPan }}
} @if (kycData.panDeclarationDobOnPan) {
DOB on PAN {{ formatDate(kycData.panDeclarationDobOnPan) }}
} @if (kycData.panDeclarationRemarks) {
Declaration file {{ kycData.panDeclarationRemarks }}
}
PAN remains unverified. No KYC exception is raised for PAN while this declaration is on file.
}
fingerprint Aadhaar {{ kycData.aadhaarNumberMasked || '—' }} @if (kycData.aadhaarVerified) { check_circle Verified } @else if (aadhaarReceiptTaken) { receipt_long Receipt } @else { radio_button_unchecked Pending } {{ kycData.aadhaarVerified ? kycData.aadhaarVerifiedOn ? formatDate(kycData.aadhaarVerifiedOn) : '—' : aadhaarReceiptTaken && kycData.aadhaarReceiptTakenOn ? formatDate(kycData.aadhaarReceiptTakenOn) : '—' }} @if (!showAadhaarReVerify && !aadhaarOtpSent) { } @if (!kycData.aadhaarVerified && !aadhaarReceiptTaken) { }
@if (!kycData.aadhaarVerified && aadhaarReceiptTaken) {
receipt_long Aadhaar Enrolment Receipt @if (!saving) { }
Enrolment ID {{ kycData.aadhaarEnrolmentId || '—' }}
@if (kycData.aadhaarEnrolmentDate) {
Enrolment date {{ formatDate(kycData.aadhaarEnrolmentDate) }}
} @if (kycData.aadhaarReceiptRemarks) {
Remarks {{ kycData.aadhaarReceiptRemarks }}
}
Aadhaar remains unverified. No KYC exception is raised for Aadhaar while this receipt is on file.
} } @if (kycData.kycDocumentName) {
description {{ kycData.kycDocumentName }} {{ kycData.kycDocumentNumber || '—' }} @switch (kycDocumentRenewal.state) { @case ('EXPIRED') { error Expired } @case ('EXPIRING_SOON') { schedule Expires Soon } @case ('DUE') { update Update Due } @case ('OK') { check_circle Current } @default { help_outline No dates } } @if (kycData.kycDocIssueDate || kycData.kycDocExpiryDate) { @if (kycData.kycDocIssueDate) { Issued {{ formatDate(kycData.kycDocIssueDate) }} } @if (kycDocumentExpiresOn) { Expires {{ kycDocumentExpiresOn }} @if (kycDocumentExpiryIsDerived) { 5-yr } } } @else { — }
} @if (isNonIndividual) {
business GSTIN {{ kycData.gstinNumber || '—' }} @if (kycData.gstinVerified) { check_circle Verified } @else { radio_button_unchecked Pending } {{ kycData.gstinVerifiedOn ? formatDate(kycData.gstinVerifiedOn) : '—' }}
} @if (isNonIndividual && enterprisePanNumber) {
credit_card Enterprise PAN {{ enterprisePanNumber }} @if (kycData.panVerified) { check_circle Verified } @else { radio_button_unchecked Pending } {{ kycData.panVerified && kycData.panVerifiedOn ? formatDate(kycData.panVerifiedOn) : '—' }}
} @if (isNonIndividual && kycData?.incorporationDate) {
event_available Date of Incorporation {{ formatDate(kycData.incorporationDate) }} — —
} @if (isNonIndividual && kycData?.cinNumber) {
verified_user CIN {{ kycData.cinNumber }} @if (kycData.cinVerified) { check_circle Verified } @else { radio_button_unchecked Pending } —
}
@if (!isNonIndividual) {
credit_card
Verification Status
PAN ↔ Aadhaar
@if (kycData?.panAadhaarSeedingStatus === 'Y') { check_circle Linked (Seeded) } @else if (kycData?.panAadhaarSeedingStatus === 'N') { cancel Not Linked } @else if (kycData?.panAadhaarSeedingStatus === 'E') { info Exempt } @else { radio_button_unchecked Pending }
@if (kycData?.panAadhaarSeedingStatus === 'Y') { check } @else if (kycData?.panAadhaarSeedingStatus === 'N') { close } @else if (kycData?.panAadhaarSeedingStatus === 'E') { info } @else { schedule }
As per Income Tax Portal — Section 139AA
} @if (showAadhaarReVerify && !aadhaarOtpSent) {
Enter 12-digit Aadhaar
} @if (aadhaarOtpSent) {
sms OTP sent Enter OTP
} @if (verificationError.aadhaar) {
error_outline {{ verificationError.aadhaar }}
} @if (verificationError.pan) {
error_outline {{ verificationError.pan }}
}
assignment_ind
KYC Type {{ kycData.kycType === 1 ? 'Individual' : kycData.kycType === 2 ? 'Non-Individual' : '—' }}
shield
Risk Category {{ kycData.riskCategory === 1 ? 'Low' : kycData.riskCategory === 2 ? 'Medium' : kycData.riskCategory === 3 ? 'High' : '—' }}
calendar_today
Initiated On {{ formatDate(kycData.initiatedOn) }}
check_circle
Last Verified {{ formatDate(kycData.verifiedOn) }}
history_toggle_off
Expiry Date {{ formatDate(kycData.expiryDate) }}
@if (kycData.remarks) {
notes
Remarks {{ kycData.remarks }}
}

Re-KYC Completion

Print self-declaration, get it signed, upload & complete re-KYC.

1
Download Self Declaration Form
System-generated PDF with PAN, Aadhaar & KYC details
2
Upload Signed Declaration
Get the form signed by the client and upload the scanned copy
3
Complete Re-KYC
Updates Last Verified date and sets new Expiry Date as per RBI norms
@if (reKycSuccess) {
Re-KYC completed successfully

Last Verified and Expiry Date have been updated.

} @if (reKycError) {
error_outline
Re-KYC failed

{{ reKycError }}

}
} @if (!isEditMode && !kycData) {
verified_user

{{ 'labels.inputs.KYC Verification' | translate }} not initiated yet.

} @if (isEditMode) {
{{ isNonIndividual ? 'Enterprise PAN' : ('labels.inputs.PAN Number' | translate) }} KYC
{{ isNonIndividual ? 'Enterprise PAN' : ('labels.inputs.PAN Number' | translate) }} @if (kycForm.get('panNumber')?.hasError('pattern') && kycForm.get('panNumber')?.touched) { {{ 'labels.inputs.Enter 10-character PAN' | translate }} } @if (verificationStatus.pan === 'VERIFIED') { check_circle } @if (verificationStatus.pan === 'FAILED') { cancel }
@if (verificationError.pan) {
error_outline {{ verificationError.pan }}
@if (!isNonIndividual) {
Customer's PAN card genuinely carries different details, or PAN cannot be checked?
} } @if (verificationStatus.pan === 'VERIFIED' && verificationDetails.pan?.name) { {{ verificationDetails.pan.name }} }
@if (!isNonIndividual) {
{{ 'labels.inputs.Aadhaar Number' | translate }} KYC
{{ 'labels.inputs.Aadhaar Number' | translate }} @if (kycData?.aadhaarNumberMasked) { On file: {{ kycData.aadhaarNumberMasked }} } @if (kycForm.get('aadhaarNumber')?.hasError('pattern') && kycForm.get('aadhaarNumber')?.touched) { {{ 'labels.inputs.Enter 12-digit Aadhaar' | translate }} } @if (verificationStatus.aadhaar === 'VERIFIED') { check_circle } @if (verificationStatus.aadhaar === 'FAILED') { cancel } @if (!aadhaarOtpSent) { }
@if (aadhaarOtpSent) {

sms OTP sent to Aadhaar-linked mobile

Enter OTP
} @if (verificationError.aadhaar) {
error_outline {{ verificationError.aadhaar }}
Customer has applied for Aadhaar but not received it yet?
}
} @if (isNonIndividual) {
{{ 'labels.inputs.GSTIN Number' | translate }} KYC
{{ 'labels.inputs.GSTIN Number' | translate }} @if (kycForm.get('gstinNumber')?.hasError('pattern') && kycForm.get('gstinNumber')?.touched) { {{ 'labels.inputs.Enter 15-character GSTIN' | translate }} } @if (verificationStatus.gstin === 'VERIFIED') { check_circle } @if (verificationStatus.gstin === 'FAILED') { cancel }
@if (verificationError.gstin) {
error_outline {{ verificationError.gstin }}
} @if (verificationStatus.gstin === 'VERIFIED' && verificationDetails.gstin?.businessName) { {{ verificationDetails.gstin.businessName }} }
} @if (!kycId) { {{ 'labels.inputs.KYC Type' | translate }} Individual Non-Individual } {{ 'labels.inputs.Risk Category' | translate }} Low Medium High
Mark as KYC Exception @if (kycForm.get('isException')?.value) { Exception Reasons @if (!isNonIndividual) { PAN Card Verification Failed Aadhaar Verification Failed } @else { Enterprise PAN Verification Failed GSTIN Verification Failed CIN Verification Failed } }
{{ 'labels.inputs.Remarks' | translate }}
@if (errorMessage) {
error_outline {{ errorMessage }}
} @if (!kycId) {
info Save KYC details first to enable verification buttons.
}
} }