| Customer / account | Contact | @if (!alertFilter) {State | }{{ alertDateHeading }} | Balance | Next stage | Last notice sent | Next to send | Action | |
|---|---|---|---|---|---|---|---|---|---|
|
{{ r.name }}
{{ r.account }} · {{ r.branch }}
|
@if (contactOf(r.clientId); as ni) {
@if (ni.hasMobile || ni.hasEmail) {
@if (ni.hasMobile) {
Mobile
}
@if (ni.hasEmail) {
Email
}
} @else {
No mobile / email
Reach by call or visit
}
} @else {
…
}
|
@if (!alertFilter) {
{{ r.stage }} | }
{{ r.since | date: 'dd MMM yyyy' }}
{{ r.days }} {{ r.daysLabel }}
|
{{ (r.balance ?? alertNoticeInfo[r.clientId]?.balance) == null ? '—' : '₹' + (r.balance ?? alertNoticeInfo[r.clientId]?.balance | number: '1.2-2') }} |
{{ r.next }}
@if (r.nextDate) {
{{ r.nextDate | date: 'dd MMM yyyy' }}
}
|
{{ lastNoticeText(r.clientId) }}
@if (alertNoticeInfo[r.clientId]?.count) {
{{ alertNoticeInfo[r.clientId].count }} notice(s) on record
@for (c of doneChannelsFor(r.clientId, r.stageKey); track c) {
✓ {{ auditChannelLabels[c] || c }}
}
@if (earlierStages(r.clientId, r.stageKey).length) {
Earlier notices: {{ earlierStages(r.clientId, r.stageKey).join(', ') }}
}
}
|
{{ nextNoticeStep(r) }}
@if (queuedChannels(r.clientId).length) {
Waiting in queue: {{ queuedChannels(r.clientId).join(', ') }}
}
@if (nextAutoReminder(r); as auto) {
Automatic: {{ auto.date | date: 'dd MMM yyyy' }} — {{ auto.label }}
}
|
@if (hasNoContact(r.clientId)) {
}
@if (r.stageKey !== 'ESCHEAT') {
|
|
| {{ statusLoading ? 'Loading…' : 'No account matches these filters.' }} | |||||||||
| {{ alertDateHeading }} | Customers | Accounts | Notified | Then moves to | Balance | Action | |
|---|---|---|---|---|---|---|---|
| {{ g.date | date: 'dd MMM yyyy' }} | {{ g.customers }} | {{ g.rows.length }} |
@if (!g.loaded) {
…
} @else if (g.notified === g.customers) {
All {{ g.customers }} notified
} @else if (g.notified === 0) {
None notified yet
} @else {
{{ g.notified }} of {{ g.customers }} notified
}
@if (g.loaded && g.earlier) {
{{ g.earlier }} earlier notice(s) sent at previous stages
}
@if (g.loaded && g.unreachable) {
{{ g.unreachable }} cannot be reached by SMS / email
}
|
{{ g.after.label }}
@if (g.after.date) {
on {{ g.after.date | date: 'dd MMM yyyy' }}
}
|
{{ g.balance ? '₹' + (g.balance | number: '1.0-0') : '—' }} | ||
| {{ statusLoading ? 'Loading…' : 'No account matches these filters.' }} | |||||||
| Date | Customers | Notices | Waiting | Sent | Failed | Cancelled | Action |
|---|---|---|---|---|---|---|---|
| {{ g.date | date: 'dd MMM yyyy' }} | {{ g.customers }} | {{ g.rows.length }} | {{ g.waiting }} | {{ g.sent }} | {{ g.failed }} | {{ g.cancelled }} | |
| {{ queueLoading ? 'Loading…' : 'Nothing has been queued yet. Select customers on the Alert Dashboard and use Notify selected.' }} | |||||||
| Customer | KYC | Ladder | Next step | Last contact | Action | |
|---|---|---|---|---|---|---|
| @if (s.next?.sends) { } |
{{ s.row.clientName }}
{{ s.row.accountNo }}
|
{{ s.row.expiryDate | date: 'dd MMM yyyy' }}
{{
s.row.daysOverdue < 0
? -s.row.daysOverdue + ' days left'
: s.row.daysOverdue + ' days overdue'
}}
|
@for (st of s.steps; track st.label) {
{{ st.state === 'done' ? '✓ ' : '' }}{{ st.label }}
}
|
{{ s.next ? s.next.label : 'Ladder complete' }} | {{ s.row.lastContactDate ? (s.row.lastContactDate | date: 'dd MMM yyyy') : 'Never' }} | @if (s.next?.sends) { } @else if (s.next) { } |
| {{ statusLoading ? 'Loading…' : 'No customer is expiring or lapsed.' }} | ||||||
| # | Customer / account | Channel | Time | Sent to | Reference | Delivery | Officer |
|---|---|---|---|---|---|---|---|
| {{ auditDayPage * auditPageSize + i + 1 }} |
{{ r.clientName }}
{{ r.accountNo }}
|
{{ auditChannelLabels[r.channel] || r.channel }} | {{ r.contactedAt | date: 'HH:mm' }} | {{ r.destinationMasked || '—' }} | {{ r.providerReference || '—' }} | {{ auditStatusLabels[r.deliveryStatus] || r.deliveryStatus }} | {{ r.officerName || '—' }} |
|
Note
{{ r.notes }}
@if (r.messageBody) {
Message sent to the customer
{{ r.messageBody }}
}
@if (r.failureReason) {
Failure reason
{{ r.failureReason }}
}
|
|||||||
| {{ auditDayLoading ? 'Loading…' : 'No notice matches these filters on this day.' }} | |||||||
| Date | Customers notified | Customers tried | Notices | Delivered | Failed | No contact detail | Recorded (call / visit) | Action |
|---|---|---|---|---|---|---|---|---|
| {{ d.date | date: 'dd MMM yyyy' }} | {{ d.notifiedCustomers ?? 0 }} | {{ d.customers }} | {{ d.notices }} | {{ d.delivered }} | {{ d.failed }} | {{ d.noContact + d.notConfigured }} | {{ d.recorded }} | |
| {{ auditLoading ? 'Loading…' : 'No notice matches these filters.' }} | ||||||||
| Customer / account | Notices | Delivered | Failed | Not sent | Recorded | Latest | Action |
|---|---|---|---|---|---|---|---|
|
{{ c.clientName }}
{{ c.accountNo }}
|
{{ c.notices }} | {{ c.delivered }} | {{ c.failed }} | {{ c.notSent }} | {{ c.recorded }} |
{{ c.lastAt | date: 'dd MMM yyyy, HH:mm' }}
{{ auditChannelLabels[c.lastChannel] || c.lastChannel }} ·
{{ auditStatusLabels[c.lastStatus] || c.lastStatus }}
|
|
| {{ auditCustLoading ? 'Loading…' : 'No customer matches these filters.' }} | |||||||
| 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) {
} @else {
No logs recorded
}
{{ log.date }} ({{ log.action }}): {{ log.notes }}
— {{ log.officer }}
@if (log.platformSent) {
@if (log.delivered) {
Sent {{ log.destinationMasked }}
} @else {
Not sent
}
}
}
|
|
| 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) {
} @else {
No logs recorded
}
{{ log.date }} ({{ log.action }}): {{ log.notes }}
— {{ log.officer }}
@if (log.platformSent) {
@if (log.delivered) {
Sent {{ log.destinationMasked }}
} @else {
Not sent
}
}
}
|
|