@if (activeSection === 'alerts') {
KYC Alert Dashboard
47
Expiring in 30 days
▲ 12 this month
23
Debit Frozen
Action required
8
Inoperative
Escalating
3
Dormant
RBI reportable
18
Notices Today
SMS + Email
Accounts Requiring Action
Showing {{ alertRows.length }} of 81 · Click row for client details
@for (row of alertRows; track row.id) { }
Customer Risk Expiry Date Days Left Notices State Pending Action Next Stage
{{ row.name }}
{{ row.account }}
{{ row.riskLabel.split(' ')[0] }} {{ row.expiry }}
{{ row.daysLeft > 0 ? row.daysLeft : '—' }}
{{ row.noticesSent }}/3 {{ stateLabel(row.state) }} {{ row.noticePending }} {{ row.nextStage }}
} @if (activeSection === 'notif') {
Notification Scheduler
Escalation Ladder — one channel at a time
{{ reKycCompletedCount }} of {{ reKycSteps.length }} dispatched · Expiry: 30 Apr 2027 · Window: 31 Mar – 30 Apr
@for (s of reKycSteps; track s.step; let i = $index) {
{{ s.step }}
@if (isFirstOfNotice(i)) {
Notice {{ s.notice }}
}
Step {{ s.step }} — {{ s.channel }}
{{ s.date }} · {{ s.offset }} · {{ reKycStatusLabel(s.status) }}
{{ s.channel }} {{ s.detail }}
@if (s.status === 'PENDING') {
}
}
!
Debit Freeze — if no action
30 April 2027 · Auto-triggered on expiry
Auto-triggered Credits allowed Debits blocked
!
Inoperative — +60 days
30 June 2027 · No compliance
All txns blocked
!
Dormant — +150 days
30 September 2027
Dormant RBI reporting
Channel Sequence
@for (s of reKycSteps; track s.step) {
{{ s.step }}. {{ s.channel }}
{{ s.detail }}
{{ reKycStatusLabel(s.status) }}
}
India Post Notice
Dispatch Date
10 April 2027
Reg. Post Docket No.
RP-BPL-20270410-443
Status
In Transit
Home Visit
Scheduled Date
Officer
} @if (activeSection === 'audit') {
Audit Inventory
KYC Notice Log
Click row for client details
# Account / Customer Notice Channel Dispatched Reference / Docket Delivery Client Action Officer
001
Rajesh K. Sharma
ACC-BPL-2024-00847
Notice 1 SMS + Email 31 Mar 2027 MSG-2027-0331-001 ✓ Delivered Awaited Scheduler
002
Rajesh K. Sharma
ACC-BPL-2024-00847
Notice 2 Reg. Post + IVR 10 Apr 2027 RP-BPL-20270410-443 In Transit Awaited Scheduler
003
Priya Malhotra
ACC-BPL-2021-00231
Notice 1 SMS + Email 10 Mar 2027 MSG-2027-0310-003 ✓ Delivered No Response Scheduler
004
Priya Malhotra
ACC-BPL-2021-00231
Notice 2 Reg. Post 20 Mar 2027 RP-BPL-20270320-091 ✓ Delivered No Response Scheduler
005
Priya Malhotra
ACC-BPL-2021-00231
Notice 3 Home Visit 30 Mar 2027 VIS-BPL-20270330-012 ✓ Done Refused A. Mishra
006
Suresh Patel
ACC-BPL-2019-00112
Notice 3 Video KYC 5 Feb 2027 VKYC-2027-0205-007 No Response No Action System
Showing 6 of 12
} @if (activeSection === 'status') {
Account Status Management
Active
1,847
KYC valid
Alert Window
47
Expiring < 30d
Debit Freeze
23
Debits blocked
Inoperative
8
All txns blocked
Dormant
3
RBI reportable
Auto-Transition Rules
Active → Debit FreezeEnabled
KYC expires + 3 notices sent + no response → debits blocked, credits allowed
Window: 31 Mar – 30 Apr 3/3 notices
Debit Freeze → InoperativeEnabled
+60 days from expiry, still unresolved → all transactions blocked
Apr 30 – Jun 30
Inoperative → DormantEnabled
+150 days from expiry → dormant, RBI Dormant Account reporting triggered
Jun 30 – Sep 30 RBI notification
Manual Override
Maker-Checker
Account
Current State
Debit Freeze
Override Action
Reason
⚠ Maker-Checker Required
All manual changes require second officer approval and are logged in audit inventory.
Recent State Transitions
Click row for client details
Account From To Trigger Date By Action
Priya Malhotra
ACC-BPL-2021-00231
Active Debit Freeze Auto — KYC Expired 10 Apr 2027 Scheduler
Suresh Patel
ACC-BPL-2019-00112
Debit Freeze Inoperative Auto — 60d elapsed 15 May 2027 Scheduler
Kavitha Nair
ACC-BPL-2018-00088
Inoperative Dormant Auto — 150d elapsed 1 Jun 2027 Scheduler
} @if (activeSection === 'exceptions') {
KYC Exceptions Dashboard
{{ exceptionRows.length }}
Pending Exceptions
Immediate attention
{{ notYetContactedCount }}
Not Yet Contacted
Action required
{{ panMismatchesCount }}
PAN Mismatches
Requires physical review
{{ aadhaarFailuresCount }}
Aadhaar Failures
Re-KYC OTP needed
Exceptions Register
@if (activeExceptionSubTab === 'pending') { @if (pendingExceptions.length === 0) {
🎉
All exceptions resolved!
There are no active client KYC exceptions on record.
} @else { @for (c of pendingExceptions; track c.id) { }
Client / Account Branch Exception Reason & Date Risk Contact Status Contact Logs Actions
{{ c.name }}
{{ c.account }}
{{ c.contact.branch }}
{{ c.exceptionReason }}
Opened: {{ c.exceptionDate }}
{{ c.riskLabel }} @if (c.contactHistory && c.contactHistory.length > 0) { Contacted
Last: {{ c.contactHistory[c.contactHistory.length - 1].date }}
} @else { Not Contacted }
@if (c.contactHistory && c.contactHistory.length > 0) {
@for (log of c.contactHistory; track $index) {
{{ log.date }} ({{ log.action }}): {{ log.notes }} — {{ log.officer }} @if (log.platformSent) { @if (log.delivered) { Sent {{ log.destinationMasked }} } @else { Not sent } }
}
} @else { No logs recorded }
} } @if (activeExceptionSubTab === 'resolved') { @if (resolvedExceptions.length === 0) {
📋
No resolved exceptions
Resolved KYC exceptions will appear here once verification is completed.
} @else { @for (c of resolvedExceptions; track c.id) { }
Client / Account Branch Exception Reason & Resolution Risk Contact Logs Status
{{ c.name }}
{{ c.account }}
{{ c.contact.branch }}
{{ c.exceptionReason }}
Resolved On: {{ c.exceptionResolvedOn }}
{{ c.riskLabel }} @if (c.contactHistory && c.contactHistory.length > 0) {
@for (log of c.contactHistory; track $index) {
{{ log.date }} ({{ log.action }}): {{ log.notes }} — {{ log.officer }} @if (log.platformSent) { @if (log.delivered) { Sent {{ log.destinationMasked }} } @else { Not sent } }
}
} @else { No logs recorded }
Exception Resolved
} }
}
@if (modalOpen && current) {
{{ current.av }}
{{ current.name }}
{{ current.meta }}
{{ stateLabel(current.state) }} {{ current.riskLabel }}
✕
@if (modalTab === 'overview') {
Compliance Journey
@for (step of getStepperState(current); track step.label) {
{{ stepIcon(step.state) }}
{{ step.label }}
}
⚡
{{ stateLabel(current.state) }} — {{ current.daysLeft }} days to expiry
Next pending: {{ current.noticePending }}. Next stage: {{ current.nextStage }}.
{{ current.noticesSent }}
Notices Sent
{{ noticesPending(current) }}
Notices Pending
{{ current.actionTaken.length }}
Actions Taken
{{ current.pendingActions.length }}
Pending Actions
KYC Information
PAN
{{ current.kyc.pan }}
PAN Status
{{ current.kyc.panStatus }}
Aadhaar
{{ current.kyc.aadhaar }}
Aadhaar Status
{{ current.kyc.aadhaarStatus }}
KYC Validity
{{ current.kyc.validity }}
Expiry Date
{{ current.expiry }}
Contact Details
Mobile
{{ current.contact.mobile }}
Email
{{ current.contact.email }}
Address
{{ current.contact.address }}
Branch
{{ current.contact.branch }}
} @if (modalTab === 'timeline') {
Notice & Escalation Timeline
@for (item of current.actionTaken; track $index) {
✓
{{ item }}
Completed
} @for (item of current.pendingActions; track $index) {
!
{{ item }}
Pending action
}
} @if (modalTab === 'notices') {
All Notices Dispatched
@for (n of current.notices; track n.ref; let i = $index) { } @if (noticesPending(current) > 0) { }
# Notice Channel Date Reference Delivery Response
{{ i + 1 }} {{ n.no }} {{ n.channel }} {{ n.date }} {{ n.ref }} {{ n.delivery }} {{ n.response }}
⏳ {{ noticesPending(current) }} notice(s) still pending dispatch
} @if (modalTab === 'evidence') { @if (!current.evidence) {
📄
No evidence collected yet for this client.
Evidence is captured during branch visits or video KYC sessions.
} @else {
{{ current.evidence.type === 'visit' ? 'Home Visit Evidence' : 'Video KYC Session Log' }}
Date
{{ current.evidence.date }}
Officer / Agent
{{ current.evidence.officer }}
@if (current.evidence.type === 'visit') {
GPS Coordinates
{{ current.evidence.gps }}
Location
{{ current.evidence.location }}
}
Reference / Docket
{{ current.evidence.docket || current.evidence.ref }}
Outcome
No Compliance
@if (current.evidence.type === 'visit') {
Map Placeholder
{{ current.evidence.gps }}
{{ current.evidence.location }}
Photo Evidence
Visit photo uploaded · Tap to view
}
Officer Notes
{{ current.evidence.outcome }}
} } @if (modalTab === 'action') {
Available Actions
@for (action of current.pendingActions; track action) {
{{ action }}
Initiate via available channels
}
}
} @if (homeVisitOpen && current) {
{{ current.av }}
Schedule Home Visit
{{ current.name }} · {{ current.account }}
✕
Visit Address
{{ current.name }}
{{ current.contact.address }}
Branch: {{ current.contact.branch }}
} @if (vkycOpen && current) {
{{ current.av }}
Send Video KYC Link
{{ current.name }} · {{ current.account }}
✕
Customer Contact
{{ current.name }}
{{ current.contact.mobile }}
{{ current.contact.email }}
Default: 48 hours (RBI Video-based KYC norms)
} @if (contactDialogOpen && current) {
{{ current.av }}
Log Customer Contact
{{ current.name }} · {{ current.account }}
✕
Customer Contact Info
{{ current.name }}
{{ current.contact.mobile }}
{{ current.contact.email }}
@if (selectedChannelSends) {
A KYC notice will be sent to the customer when you save.
} @else {
Records an action you already took. Nothing is sent to the customer.
} @if (selectedChannelUnavailable) {
This customer has no {{ selectedChannel?.requires === 'email' ? 'email address' : 'mobile number' }} on file — choose a different channel.
}
@if (contactError) { }
} @if (resolveDialogOpen && current) {
{{ current.av }}
Resolve KYC Exception
{{ current.name }} · {{ current.account }}
✕
Pending Reason: {{ current.exceptionReason }} @if (current.exceptionRemarks) {
"{{ current.exceptionRemarks }}"
}
@if (showPanResolution) {
@if (resolvePanActive) {
@if (resolvePanNumber && resolvePanNumber.length !== 10) {
PAN must be exactly 10 characters.
}
}
} @if (showAadhaarResolution) {
@if (resolveAadhaarActive) {
@if (resolveAadhaarNumber && resolveAadhaarNumber.length !== 12) {
Aadhaar must be exactly 12 digits.
}
}
} @if (showGeneralResolution) {
@if (resolveGeneralActive) {
}
}
}
{{ toastMsg }}