@for (t of tabs; track t.value) { }
@if (tab === 'fraud-reports') { } {{ total }} records
Account / customer / reference Status Any @for (s of statuses; track s) { {{ s }} } @if (tab === 'fraud-reports') { FMR / STR overdue } @if (tab === 'bank-holds') { Past a deadline }
@if (loading) { } @if (error) {
{{ error }}
} @if (tab === 'exclusions') {
Account no. Kind Nodal account Pool account Escrow account What it is (merchant nodal, aggregator pool...)
MHA SOP: holds are for first-layer mule accounts, not nodal, pool or escrow accounts. A complaint against an excluded account is answered "hold not placed" and traced through the merchant settlement.
} @if (tab === 'bank-holds' && showPlace) {
Hold a suspected mule transaction
Account no. Hold The flagged transaction's amount All debits on the account (last resort) Why flagged Does not match the customer's profile Linked to an account reported for fraud Other Transaction ref Amount (₹, at least 1,000) Reason (given to the customer)
RBI draft (11.09.2026, effective 01.04.2027 if finalised): customer 20 days to explain; bank decides within 10 days of it (30 days from the hold without one); police referral through NCRP, 30 days to instruct; never more than 60 days without an LEA instruction. The Hold Review job lifts holds at the end of those periods.
}
@switch (tab) { @case ('mule-flags') { Mule-account register Accounts in two or more complaints are flagged automatically; review each with EDD or the LEA. } @case ('fraud-reports') { Fraud reporting Police / LEA, RBI fraud monitoring return (14 days), FIU-IND STR (7 days) from classification. } @case ('linked-alerts') { Fraud money that moved on inside this bank Loan repayments (SOP 9.1(v): verify, hold, tell the linked account) and transfers to another account here (the next layer is with us). Found by the I4C Hold Review job. } @case ('exclusions') { Nodal / pool / escrow accounts Disputed amount is held; no prospective hold on future credits and normally no suspension (MHA SOP 9.1(iii)). } @case ('bank-holds') { Bank-initiated debit holds Suspected mule transactions the bank holds itself (RBI draft mule SOP). } @case ('channel-blocks') { Digital-channel suspensions Placed and lifted through hold requests (maker-checker). CBS fund transfers refuse them. } }
@switch (tab) { @case ('mule-flags') { } @case ('fraud-reports') { } @case ('linked-alerts') { } @case ('exclusions') { } @case ('bank-holds') { } @case ('channel-blocks') { } } @for (r of rows; track r.id) { @switch (tab) { @case ('mule-flags') { } @case ('fraud-reports') { } @case ('linked-alerts') { } @case ('exclusions') { } @case ('bank-holds') { } @case ('channel-blocks') { } } @if (editing?.id === r.id && tab === 'bank-holds') { } @if (editing?.id === r.id && tab !== 'bank-holds') { } } @empty { }
Flagged Account / Customer Source Complaints Reason Status
Classified Account / Customer Amount (₹) Police / LEA RBI FMR FIU-IND STR Status
Moved on From (held account) Moved to Amount (₹) Status Remarks
Added Account Kind What it is Status
Placed Account / Customer Hold Status Next date Customer told
Placed Account Channels Reason Status Lifted
{{ r.flagged_at | date: 'dd MMM yyyy' }}
{{ r.flagged_by }}
{{ r.account_no }}
{{ r.client_name }} · {{ r.account_type }}
{{ r.source }} {{ r.reports_count }} {{ r.reason }}
{{ r.review_remarks }}
{{ r.status }} @if (r.status === 'SUSPECTED') { }
{{ r.classified_on ? (r.classified_on | date: 'dd MMM yyyy') : 'Show-cause' }} @if (r.show_cause_due_on && !r.classified_on) {
reply due {{ r.show_cause_due_on | date: 'dd MMM' }}
}
{{ r.account_no }}
{{ r.client_name }} · {{ r.acknowledgement_nos }}
{{ r.amount | number: '1.2-2' }} {{ r.police_ref || '-' }}
{{ r.police_reported_on | date: 'dd MMM yyyy' }}
{{ r.fmr_ref || 'due ' + (r.fmr_due_on | date: 'dd MMM') }}
{{ r.fmr_filed_on | date: 'dd MMM yyyy' }}
{{ r.str_ref || 'due ' + (r.str_due_on | date: 'dd MMM') }}
{{ r.str_filed_on | date: 'dd MMM yyyy' }}
{{ r.status }} @if (r.status === 'OPEN') { }
{{ r.moved_on | date: 'dd MMM yyyy' }} {{ r.hold_account_no }}
Ack {{ r.acknowledgement_no }}
{{ r.target_no }}
{{ r.kind === 'INTERNAL_TRANSFER' ? r.target_type + ' account here' : 'Loan repayment' }}
{{ r.amount | number: '1.2-2' }} {{ r.status }} {{ r.remarks || '-' }} @if (r.status === 'OPEN') { }
{{ r.added_at | date: 'dd MMM yyyy' }}
{{ r.added_by }}
{{ r.account_no }}
{{ r.account_type }}
{{ r.kind }} {{ r.reason }} {{ r.status }} @if (r.status === 'ACTIVE') { }
{{ r.placed_at | date: 'dd MMM yyyy' }}
{{ r.placed_by }}
{{ r.account_no }}
{{ r.client_name }} · {{ r.trigger_type }}
{{ r.scope === 'ACCOUNT' ? 'All debits' : '₹' + (r.hold_amount | number: '1.2-2') }}
txn {{ r.flagged_txn_ref || '-' }} · ₹{{ r.flagged_amount | number: '1.2-2' }}
{{ r.status }} @if (r.lift_reason) {
{{ r.lift_reason }}
}
@switch (r.status) { @case ('HELD') { explain by {{ r.explanation_due_on | date: 'dd MMM' }} · decide by {{ r.decision_due_on | date: 'dd MMM' }} } @case ('EXPLAINED') { decide by {{ r.decision_due_on | date: 'dd MMM' }} } @case ('REFERRED') { police by {{ r.police_due_on | date: 'dd MMM' }} ({{ r.ncrp_ref }}) } @default { {{ r.status === 'LIFTED' ? (r.lifted_at | date: 'dd MMM yyyy') : 'limit ' + (r.max_until | date: 'dd MMM') }} } } @if (r.grievance_raised_on && !r.grievance_resolved_on) {
grievance due {{ r.grievance_due_on | date: 'dd MMM' }}
}
{{ r.customer_notified_at ? (r.customer_notified_at | date: 'dd MMM') + ' · ' + r.notification_mode : 'Not yet' }} @if (r.status !== 'LIFTED' || (r.grievance_raised_on && !r.grievance_resolved_on)) { }
{{ r.placed_at | date: 'dd MMM yyyy' }}
{{ r.placed_by }}
{{ r.account_no }}
{{ r.account_type }}
{{ r.channels }} {{ r.reason }} {{ r.status }} {{ r.lifted_at ? (r.lifted_at | date: 'dd MMM yyyy') + ' · ' + r.lifted_by : '-' }}
Step @for (b of bankSteps; track b.value) { {{ b.label }} } @switch (step) { @case ('notice') { How (PHONE, LETTER...) Reference } @case ('explanation') { Explanation } @case ('decision') { Decision Satisfied: lift Not satisfied: refer to police @if (form['decision'] === 'REFER') { NCRP reference } Basis } @case ('police') { Instruction Continue the hold Lift the hold Police reference } @case ('grievance') { Customer's grievance (resolve within 30 days) } @case ('grievance-resolution') { Resolution } }
@if (tab === 'fraud-reports') { Police / LEA ref FMR ref STR ref } @else { Outcome @if (tab === 'mule-flags') { Confirmed mule Not a mule (clear) } @else { Actioned Dismissed } } Remarks
Nothing here for these filters.