@for (s of stages; track s.value) { }
{{ total }} grievances
GR id / account / ack no. / customer Outcome Any Pending decision Allowed (order given) Rejected Left to the court Withdrawn Past deadline only
@if (loading) { } @if (error) {
{{ error }}
}
GRM Grievances (NCRP Grievance Redressal Module) Raise a grievance from the hold (Holds Register → hold → GRM / MRM). Click a row to work on it.
@for (g of rows; track g.id) { } @empty { }
Raised GR id Account / Customer Customer asks Held (₹) Stage Deadline Outcome
{{ g.created_at | date: 'dd MMM yyyy' }}
{{ g.created_by }}
{{ g.grievance_no || 'Draft #' + g.id }} {{ g.account_no }}
{{ g.client_name }} · Ack {{ g.acknowledgement_no }}
{{ requestLabel(g.customer_request) }} {{ g.amount_held | number: '1.2-2' }} {{ stageLabel(g.stage) }} @if (g.compliance_due_at && g.stage !== 'CLOSED') { Carry out by {{ g.compliance_due_at | date: 'dd MMM, HH:mm' }} } @else if (g.due_at) { {{ g.due_at | date: 'dd MMM yyyy' }} } @else { - } {{ g.status }} @if (g.decision) {
{{ g.decision_level }}: {{ decisionLabel(g.decision) }}
}
No grievances match these filters.
@if (selected; as g) {
Account {{ g.account_no }} ({{ g.client_name }}) · Ack {{ g.acknowledgement_no }} · Held ₹{{ g.amount_held | number: '1.2-2' }}{{ g.debit_frozen ? ' · debits frozen' : '' }}
@for (f of flow(g); track f.value; let last = $last) { {{ f.label }} @if (!last) { › } }
@if (tab === 'workflow') {
@if (g.stage === 'DRAFT') { @if (!g.edd_done) {
1. Enhanced due diligence (before raising on GRM)
KYC re-verified Risk Low Medium High Bank's view Supports the request Does not support it
Source of the disputed credit, as the customer explains it * Customer's statement / notes
} @else {
2. Raise it on GRM, then record the GR id
GRM's entry form needs the KYC document, the customer's application, a photograph and the bank statement. Attach them on the Documents tab (the statement can be downloaded from the hold).
@if (missingDocs(g).length) {
Still to attach: {{ missingDocs(g).join(', ') }}
}
GR id from GRM *
} } @if (g.stage === 'NODAL_REVIEW') {
Bank GRM nodal officer's decision
Remarks (required to reject)
} @if (withOfficer && g.status === 'OPEN') {
Decision of the {{ level }} @if (g.due_at) { · due {{ g.due_at | date: 'dd MMM yyyy' }} }
Decision on GRM @for (d of decisions; track d.value) { {{ d.label }} } @if (decision.decision === 'PARTIAL_HOLD') { Amount to keep on hold (₹) } @if (decision.decision !== 'SEEK_INFO' && decision.decision !== 'REJECTED_CONTINUE') { Order no. * } Order / decision date
Remarks{{ decision.decision === 'REJECTED_CONTINUE' ? ' (reason given) *' : '' }} @if (decision.decision !== 'SEEK_INFO' && decision.decision !== 'REJECTED_CONTINUE') {
Attach the signed and stamped order copy (GRM order or IO order) on the Documents tab first.
}
Something else happened on GRM
Event @for (n of noteEvents; track n.value) { {{ n.label }} } Remarks
@if (g.stage === 'WITH_IO') { }
} @if (g.status === 'REJECTED' && g.stage !== 'CLOSED') {
Rejected by the {{ g.decision_level }}: {{ g.decision_remarks }}
If the customer is not satisfied, the branch raises a review: IO → District GRO → State GRO (15 days each); after the State GRO the customer may approach the jurisdictional court.
Remarks
} @if (g.status === 'ALLOWED' && g.stage !== 'CLOSED') {
Order: {{ decisionLabel(g.decision) }} @if (g.decision_keep_amount !== null) { (keep ₹{{ g.decision_keep_amount | number: '1.2-2' }}) } · {{ g.decision_order_ref }}
Carry it out on the account by {{ g.compliance_due_at | date: 'dd MMM yyyy, HH:mm' }}. The change goes to a second officer for approval; the grievance closes when it is approved.
@if (g.actionRequest?.length) {
Request #{{ g.actionRequest[0].id }} ({{ g.actionRequest[0].action }}) is {{ g.actionRequest[0].status }} {{ g.actionRequest[0].failure_message || g.actionRequest[0].rejection_reason || '' }}
} @if ( !g.actionRequest?.length || g.actionRequest[0].status === 'REJECTED' || g.actionRequest[0].status === 'FAILED' ) {
}
} @if (g.stage === 'CLOSED') {
This grievance is closed ({{ g.status }}).
} @else {
}
} @if (tab === 'overview') {
Customer's request
Asks to
{{ requestLabel(g.customer_request) }}
Reason given
{{ g.customer_reason || '-' }}
Opened
{{ g.created_at | date: 'dd MMM yyyy, HH:mm' }} by {{ g.created_by }}
Decision
{{ g.decision ? g.decision_level + ': ' + decisionLabel(g.decision) : '-' }} @if (g.decision_order_ref) {
Order {{ g.decision_order_ref }} {{ g.decision_date | date: 'dd MMM yyyy' }}
}
Enhanced due diligence
@if (g.edd_done) {
KYC re-verified
{{ g.edd_kyc_verified ? 'Yes' : 'No' }}
Source of funds
{{ g.edd_source_of_funds }}
Statement
{{ g.edd_customer_statement || '-' }}
Risk / view
{{ g.edd_risk }} · {{ g.edd_recommendation === 'SUPPORT' ? 'Bank supports' : 'Bank does not support' }}
By
{{ g.edd_by }}, {{ g.edd_at | date: 'dd MMM yyyy, HH:mm' }}
} @else {
Not done yet.
}
} @if (tab === 'documents') {
} @if (tab === 'history') {
@for (e of g.events; track e.id) { }
When Event Stage Remarks By
{{ e.created_at | date: 'dd MMM yyyy, HH:mm' }} {{ e.event_type }} {{ stageLabel(e.stage) }} {{ e.remarks || '-' }} {{ e.actor }}
}
}