@for (v of views; track v.value) { }
Account / acknowledgement / customer {{ total }} holds
Account type All accounts Savings Current Customer intimation Any Customer told Not yet told Layer All layers Layer 0 Layer 1+ Debits frozen only
@if (loading || busy) { } @if (error) {
{{ error }}
}
I4C Account Holds Register Only disputed amounts are restricted; remaining balance stays usable by customer.
@for (h of rows; track h.id) { } @empty { }
Customer Account Account Holder / Branch Ack No. Layer Disputed (₹) Held (₹) Short (₹) Hold Status Customer Intimation 90-Day Review
{{ h.account_no }} {{ h.account_type }}
{{ h.client_name || 'N/A' }}
{{ h.office_name }}
{{ h.acknowledgement_no }}
{{ h.layer }} ₹{{ h.disputed_amount | number: '1.2-2' }} ₹{{ h.amount_held | number: '1.2-2' }} @if (h.shortfall > 0) { ₹{{ h.shortfall | number: '1.2-2' }} } @else { - } {{ h.status }} @if (h.debit_frozen) { DEBIT FROZEN } @if (h.pending_actions) { APPROVAL PENDING } @if (h.customer_intimated_at) { {{ h.customer_intimated_at | date: 'dd MMM' }} ({{ h.intimation_mode }}) } @else if (isOverdue(h)) { OVERDUE } @else if (h.amount_held > 0 && h.status === 'ACTIVE') { INTIMATION DUE } @else { - } @if (isReviewDue(h)) { } {{ h.review_due_on }}
No holds found in this view.
@if (selected; as h) {
Customer: {{ h.client_name || 'N/A' }} ({{ h.office_name }}) • Ack: {{ h.acknowledgement_no }}
@if ((h.status === 'ACTIVE' && h.amount_held > 0) || h.intimationLog?.length) { } @if (allowedActions.length > 0) { } @if (h.actions?.length) { }
@if (modalTab === 'overview') {
Hold Balances & Account
Customer Name
{{ h.client_name || '-' }} ({{ h.office_name }})
Account Number
{{ h.account_no }} ({{ h.account_type }})
I4C Complaint Ack
{{ h.acknowledgement_no }} (Layer {{ h.layer }})
Disputed Amount
₹{{ h.disputed_amount | number: '1.2-2' }}
Amount Held
₹{{ h.amount_held | number: '1.2-2' }}
Shortfall
@if (h.shortfall > 0) { ₹{{ h.shortfall | number: '1.2-2' }} (Prospective hold) } @else { Fully covered (₹0.00) }
Compliance & Directions
Hold Placed On
{{ h.held_at | date: 'dd MMM yyyy, HH:mm:ss' }} (System automated)
90-Day Review Due
{{ h.review_due_on }}
Debit Freeze Status
@if (h.debit_frozen) { FROZEN } @else { Active (Debit Not Frozen) }
Customer Intimation
@if (h.customer_intimated_at) { {{ h.customer_intimated_at | date: 'dd MMM yyyy, HH:mm' }} by {{ h.intimated_by }} ({{ h.intimation_mode }}{{ h.intimation_reference ? ', ' + h.intimation_reference : '' }}) } @else { Not told yet{{ h.intimation_due_by ? ' - due by ' + (h.intimation_due_by | date: 'dd MMM yyyy, HH:mm') : '' }} }
@if (h.status === 'RELEASED') {
Released On
{{ h.released_at | date: 'dd MMM yyyy, HH:mm' }} - {{ reasonLabel(h.release_reason_type || '') }} {{ h.release_reference }}
}
} @if (modalTab === 'txns') {
Account Hold Transactions
@for (t of h.transactions; track t.id) { } @empty { }
Account Txn ID Held Amount (₹) Placed Timestamp Released Timestamp
{{ t.account_txn_id }} ₹{{ t.amount | number: '1.2-2' }} {{ t.placed_at | date: 'dd MMM yyyy, HH:mm' }} {{ t.released_at ? (t.released_at | date: 'dd MMM yyyy, HH:mm') : '-' }}
No money held yet (prospective hold waiting for funds deposit).
} @if (modalTab === 'intimation') { @if (h.customer_intimated_at) {
Customer told on {{ h.customer_intimated_at | date: 'dd MMM yyyy, HH:mm' }} by {{ channelLabel(h.intimation_mode || '') }}{{ h.intimation_reference ? ' - ' + h.intimation_reference : '' }} ({{ h.intimated_by }})
} @else if (h.automaticChannels?.length) {
Automatic intimation is on ({{ autoChannelsText(h) }}). @if (h.intimationLog?.length) { The last automatic attempt did not reach the customer; the system retries up to 3 times. You can send again now, or call the customer and record it below. } @else { The notice is sent as soon as the hold is placed. If it has not gone yet, send it now. }
} @else {
No automatic channel is configured. Call the customer (or send a letter / meet in person), then record it below. Channels are switched on under Intimation Settings.
} @if (!h.customer_intimated_at && h.status === 'ACTIVE' && h.amount_held > 0) {
Record Customer Intimation (manual)
RBI draft directions mandate that the account holder be notified of an account hold by the end of the next day, including reason, restoration options, and Grievance Officer contacts.
How the customer was told @for (m of intimationModes; track m) { {{ channelLabel(m) }} } Reference (call note, letter no.)
}
Intimation History ({{ h.intimationLog?.length || 0 }})
@for (l of h.intimationLog || []; track l.id) { } @empty { }
When Channel Type Status Sent to Reference / Reason By
{{ l.created_at | date: 'dd MMM yyyy, HH:mm' }} {{ channelLabel(l.channel) }} {{ l.mode === 'AUTO' ? 'Automatic' : l.mode === 'RESEND' ? 'Sent by officer' : 'Recorded' }} {{ l.status }} {{ l.destination_masked || '-' }} {{ l.failure_reason || l.provider_reference || '-' }} {{ l.actor || '-' }}
No notice sent or recorded yet.
} @if (modalTab === 'action') {
Raise Request on Hold (Maker)
@if (hasPendingAction) {
A request on this hold is already waiting for checker approval on the Approvals page.
} @else {
Requested Action @for (a of allowedActions; track a.value) { {{ a.label }} } @if (action.action === 'RELEASE') { Amount to release (₹, empty = all) @if (remainingAfterRelease !== null) { ₹{{ remainingAfterRelease | number: '1.2-2' }} stays on hold (order names the amount to keep) } } Reason @for (r of reasonTypes; track r.value) { {{ r.label }} } Order / Reference No.{{ orderRequired ? ' *' : '' }} Order Date Issuing Authority (IO, Court, DGRO...) Maker Remarks
}
} @if (modalTab === 'cases') {
GRM grievance (customer contests the hold)
@for (g of h.grievances || []; track g.id) {
{{ g.grievance_no || 'Draft #' + g.id }} {{ g.stage }} {{ g.status }} {{ g.created_at | date: 'dd MMM yyyy' }}
} @if (h.status === 'ACTIVE' && !openGrievance) {
Customer asks to Remove the hold Unfreeze the account Restore digital services Customer's reason
} @else if (!h.grievances?.length) {
No grievance on this hold.
}
MRM money restoration
@for (r of h.restorations || []; track r.id) {
{{ r.mrm_request_no || 'Restoration #' + r.id }} {{ r.status }} {{ r.basis }} {{ r.restorable_amount ? '₹' + (r.restorable_amount | number: '1.2-2') : '' }}
} @if (h.status === 'ACTIVE' && !openRestoration) {
Restoration @for (b of mrmBases; track b.value) { {{ b.label }} } @if (assessForm.basis === 'ATTRIBUTION' || assessForm.basis === 'PRO_RATA') { Restorable amount (₹, at most {{ h.amount_held | number: '1.2-2' }}) } Remarks
} @else if (!h.restorations?.length) {
No restoration on this hold.
}
Bank statement (GRM / MRM ask for it)
From (default 90 days back) To (default today)
Documents on this hold (IO / court orders...)
} @if (modalTab === 'history') {
Requests Audit History on this Hold
@for (a of h.actions; track a.id) { }
Action Reason / Order Status Maker Details Checker Details
{{ a.action }} {{ reasonLabel(a.reason_type) }}
{{ a.order_reference }} {{ a.authority ? '- ' + a.authority : '' }}
{{ a.status }} @if (a.rejection_reason || a.failure_message) {
{{ a.rejection_reason || a.failure_message }}
}
{{ a.maker_name }}
{{ a.maker_at | date: 'dd MMM, HH:mm' }}
{{ a.checker_name || '-' }} @if (a.checker_at) {
{{ a.checker_at | date: 'dd MMM, HH:mm' }}
}
}
}