| Raised On | +Requested Action | +Target Account / Complaint | +Held Amount (₹) | +Reason & Legal Order | +Maker Remarks | +Status | +Decision Actions | +
|---|---|---|---|---|---|---|---|
|
+ {{ r.maker_at | date: 'dd MMM yyyy, HH:mm' }}
+
+ Raised by: {{ r.maker_name }}
+
+ |
+ + + {{ r.action }} + + | +
+
+ {{ r.account_no }}
+
+ {{ r.account_type }} • Ack: {{ r.acknowledgement_no }}
+ |
+
+ ₹{{ r.amount_held | number: '1.2-2' }}
+ Disputed: ₹{{ r.disputed_amount | number: '1.2-2' }}
+ |
+
+ {{ reasonLabel(r.reason_type) }}
+
+ Ref: {{ r.order_reference }} {{ r.order_date ? '(' + r.order_date + ')' : '' }}
+ {{ r.authority ? '• ' + r.authority : '' }}
+
+ |
+
+ {{ r.remarks || '-' }}
+ |
+
+
+ {{ r.status }}
+
+ @if (r.checker_name) {
+ Checked by {{ r.checker_name }}, {{ r.checker_at | date: 'dd MMM, HH:mm' }}
+ }
+ @if (r.rejection_reason || r.failure_message) {
+ {{ r.rejection_reason || r.failure_message }}
+ }
+ |
+
+ @if (r.status === 'PENDING') {
+
+
+
+
+ } @else {
+ Decision Recorded
+ }
+ |
+
|
+
+ No approval requests in this category.
+ |
+ |||||||
| Bank Code | +Institution / Intermediary Name | +Entity Type | +IFSC Prefix Pattern | +Routing Standard | +Action | +
|---|---|---|---|---|---|
| + #{{ b.bank_code }} + | +
+
+
+
+
+
+ {{ b.bank_name }}
+ Reported as payee_bank_code
+
+ |
+ + + {{ b.entity_type }} + + | ++ @if (b.ifsc_prefix) { + + } @else { + Dynamic / Non-IFSC + } + | +
+ |
+ + + | +
|
+
+ No banking intermediaries found matching "{{ search }}".
+ |
+ |||||
{{ sampleJson(selectedBankModal) }}
+ | Direction | +Calls | +Succeeded | +Failed | +Success Rate | +Avg (ms) | +Max (ms) | +
|---|---|---|---|---|---|---|
| + + {{ row.direction === 'IN' ? '↓ Inbound (I4C → Bank)' : '↑ Outbound (Bank → I4C)' }} + + | +{{ row.calls }} | +{{ row.succeeded }} | +0">{{ row.failed }} | +
+ @if (successRate(row) === null) {
+ -
+ } @else {
+
+
+ {{ successRate(row) | number: '1.0-1' }}%
+
+ }
+ |
+ {{ row.avg_ms ? row.avg_ms + ' ms' : '-' }} | +{{ row.max_ms ? row.max_ms + ' ms' : '-' }} | +
| No API calls recorded in the last 30 days. | +||||||
| Transaction / Hold Type | +Entries | +Reported Amount | +
|---|---|---|
| + {{ row.txn_type }} + | +{{ row.count }} | +₹{{ row.amount | number: '1.2-2' }} | +
| No findings reported to I4C yet. | +||
| Type | +File | +Remarks | +Uploaded | ++ |
|---|---|---|---|---|
| {{ label(d.doc_type) }} | +
+ {{ d.file_name }}
+
+ {{ size(d.size_bytes) }} · {{ d.sha256.slice(0, 12) }}…
+
+ |
+ {{ d.remarks || '-' }} | +
+ {{ d.uploaded_at | date: 'dd MMM yyyy, HH:mm' }}
+ {{ d.uploaded_by }}
+ |
+ + + | +
| No documents attached yet. | +||||
| 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. | +|||||||
| When | +Event | +Stage | +Remarks | +By | +
|---|---|---|---|---|
| {{ e.created_at | date: 'dd MMM yyyy, HH:mm' }} | ++ {{ e.event_type }} + | +{{ stageLabel(e.stage) }} | +{{ e.remarks || '-' }} | +{{ e.actor }} | +
| 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) {
+
+ |
+
+
+ @if (isReviewDue(h)) {
+ |
+
|
+
+ No holds found in this view.
+ |
+ |||||||||
| 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). + | +|||
| 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. | +||||||
| 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' }}
+ }
+ |
+
| Account | +Holder / Branch | +Status | +Ledger balance | +Available | +On hold | +Disputed | +Complaints | +Acknowledgement nos. | +
|---|---|---|---|---|---|---|---|---|
|
+ {{ r.account_no }}
+ {{ r.account_type }}{{ r.debit_frozen ? ' · debits frozen' : '' }}
+ |
+
+ {{ r.client_name }}
+ {{ r.office_name }}
+ |
+ {{ r.account_status || '-' }} | +{{ r.ledger_balance | number: '1.2-2' }} | +{{ r.available_balance | number: '1.2-2' }} | ++ {{ r.held | number: '1.2-2' }} + | +{{ r.disputed | number: '1.2-2' }} | +{{ r.complaints }} | +{{ r.acknowledgement_nos }} | +
| No accounts with active I4C holds. | +||||||||
| Complaint (ack) | +Layer | +Disputed | +Held for it | +Share | +
|---|---|---|---|---|
| {{ h.acknowledgement_no }} | +{{ h.layer }} | +{{ h.disputed_amount | number: '1.2-2' }} | +{{ h.amount_held | number: '1.2-2' }} | ++ {{ h.share | number: '1.2-2' }} + | +
| Created At | +Complaint Ack No. | +Type | +Delivery Status | +Attempts | +Next Retry | +HTTP Code | +Sent Timestamp | +Error | +Actions | +
|---|---|---|---|---|---|---|---|---|---|
| + {{ o.created_at | date: 'dd MMM, HH:mm:ss' }} + | ++ + {{ o.acknowledgement_no }} + + | ++ {{ + o.message_type === 'ACK' ? 'ACK' : 'RESPONSE' + }} + | ++ + {{ o.status }} + + | +{{ o.attempts }} | +{{ o.status === 'PENDING' ? (o.next_attempt_at | date: 'dd MMM, HH:mm:ss') : '-' }} | ++ {{ o.http_status ?? '-' }} + | +{{ o.sent_at ? (o.sent_at | date: 'dd MMM, HH:mm:ss') : '-' }} | +{{ o.last_error || '-' }} | +
+
+
+ @if (o.status === 'FAILED') {
+
+ }
+
+ |
+
|
+
+ No responses in the outbox queue matching current filter.
+ |
+ |||||||||
| Time | +Direction | +Endpoint | +HTTP Status | +Response Code | +Ack No. | +Latency (ms) | +Caller IP | +Error Details | +
|---|---|---|---|---|---|---|---|---|
| {{ l.created_at | date: 'dd MMM, HH:mm:ss' }} | ++ + {{ l.direction === 'IN' ? '↓ I4C → Bank' : '↑ Bank → I4C' }} + + | ++ {{ l.endpoint }} + | ++ + {{ l.http_status ?? 'N/A' }} + + | +{{ l.response_code || '-' }} | ++ {{ l.acknowledgement_no || '-' }} + | +{{ l.duration_ms }} ms | +{{ l.client_ip || '-' }} | ++ {{ logNote(l.error) || '-' }} + | +
|
+
+ No API calls recorded.
+ |
+ ||||||||
{{ pretty(selectedLogModal.request_body) || 'No request body sent.' }}
+ {{ pretty(selectedLogModal.response_body) || 'No response body received.' }}
+ {{ pretty(selectedOutboxModal.payload) || 'No payload recorded.' }}
+ {{ pretty(selectedOutboxModal.response_body) }}
+ | # | +RRN | +Date & Time | +Amount (₹) | +Disputed (₹) | +Layer | +Match Method | +Outcome | +Held Amount | +Remarks | +
|---|---|---|---|---|---|---|---|---|---|
| + {{ inc.seq_no }} + | ++ {{ inc.rrn }} + | +{{ inc.transaction_date }} {{ inc.transaction_time }} | +{{ inc.amount | number: '1.2-2' }} | +{{ inc.disputed_amount | number: '1.2-2' }} | +{{ inc.layer }} | +
+ {{ methodLabel(inc.match_method) }}
+ @if (inc.matched_txn_id) {
+ Txn #{{ inc.matched_txn_id }}
+ }
+ |
+
+ {{ inc.outcome || 'PENDING' }}
+ Code: {{ inc.status_code || '-' }}
+ |
+
+ @if (holdFor(inc.id); as hold) {
+ ₹{{ hold.amount_held | number: '1.2-2' }}
+ @if (hold.shortfall > 0) {
+ Short: ₹{{ hold.shortfall | number: '1.2-2' }}
+ }
+ } @else {
+ -
+ }
+ |
+ {{ inc.remarks || '-' }} | +
| Incident | +Transaction Type | +Amount (₹) | +Disputed (₹) | +Status Code | +Actions | +
|---|---|---|---|---|---|
| + {{ f.incident_id }} + | +{{ f.txn_type }} ({{ f.txn_type_id }}) | +₹{{ f.amount | number: '1.2-2' }} | +₹{{ f.disputed_amount | number: '1.2-2' }} | ++ {{ f.status_code }} + | ++ + | +
|
+
+
+
+
+ {{ pretty(f.entry_json) }}
+ |
+ |||||
| No section 6 findings reported yet. | +|||||
| Created At | +Status | +Attempts | +HTTP Code | +Sent Timestamp | +Error | ++ |
|---|---|---|---|---|---|---|
| {{ o.created_at | date: 'dd MMM, HH:mm:ss' }} | ++ {{ o.status }} + | +{{ o.attempts }} | ++ {{ o.http_status ?? '-' }} + | +{{ o.sent_at ? (o.sent_at | date: 'dd MMM, HH:mm:ss') : '-' }} | +{{ o.last_error || '-' }} | ++ @if (o.status === 'FAILED') { + + } + | +
| No response written to outbox yet. | +||||||
{{ pretty(data.raw_payload) }}
+ {{ pretty(o.payload) }}
+ | Received | +Acknowledgement No. | +Sub-Category | +Target Account | +Layer | +Incidents | +Held (₹) | +Status | +I4C Response | +
|---|---|---|---|---|---|---|---|---|
|
+ {{ row.received_at | date: 'dd MMM yyyy' }}
+ {{ row.received_at | date: 'HH:mm:ss' }}
+ |
+
+
+ {{ row.acknowledgement_no }}
+
+
+ Job: {{ row.job_id }}
+ |
+ + {{ row.sub_category || 'N/A' }} + | ++ {{ row.payer_account_number }} + | +{{ row.max_layer }} | +{{ row.incidents }} | +₹{{ row.amount_held | number: '1.2-2' }} | +
+ {{ row.status }}
+ @if (row.processing_error) {
+ {{ row.processing_error }}
+ }
+ |
+ + + {{ row.response_status || 'NOT YET' }} + + | +
|
+
+ No complaints from I4C matched your query.
+ |
+ ||||||||
| # | +RRN | +Date | +Amount (₹) | +Disputed (₹) | +Layer | +Matched By | +Outcome | +Held (₹) | +
|---|---|---|---|---|---|---|---|---|
| + {{ inc.seq_no }} + | +{{ inc.rrn }} | +{{ inc.transaction_date }} {{ inc.transaction_time }} | +{{ inc.amount | number: '1.2-2' }} | +{{ inc.disputed_amount | number: '1.2-2' }} | +{{ inc.layer }} | +
+ {{ inc.match_method || 'EXACT' }}
+ @if (inc.matched_txn_id) {
+ Txn #{{ inc.matched_txn_id }}
+ }
+ |
+
+ {{
+ inc.outcome || 'PENDING'
+ }}
+ Code: {{ inc.status_code || '-' }}
+ |
+
+ @if (holdFor(inc.id); as hold) {
+ ₹{{ hold.amount_held | number: '1.2-2' }}
+ @if (hold.shortfall > 0) {
+ Short ₹{{ hold.shortfall | number: '1.2-2' }}
+ }
+ } @else {
+ -
+ }
+ |
+
| No incident details found. | +||||||||
| Incident ID | +Transaction Type | +Amount (₹) | +Disputed (₹) | +Status Code | +Raw JSON | +|
|---|---|---|---|---|---|---|
| {{ f.incident_id }} | +{{ f.txn_type }} ({{ f.txn_type_id }}) | +₹{{ f.amount | number: '1.2-2' }} | + @if (f.disputed_amount === null || f.disputed_amount === undefined) { ++ - + | + } @else { +₹{{ f.disputed_amount | number: '1.2-2' }} | + } ++ + {{ f.status_code }} · {{ statusCodeMeaning(f.status_code) }} + + | ++ + | +
|
+
+
+
+
+ {{ prettyJson(f.entry_json) }}
+ |
+ ||||||
| No section 6 findings reported yet. | +||||||
| Created | +Type | +Status | +Attempts | +HTTP Code | +Sent Time | +Error | +Action | +
|---|---|---|---|---|---|---|---|
| {{ o.created_at | date: 'dd MMM, HH:mm:ss' }} | ++ {{ + o.message_type === 'ACK' ? 'ACK' : 'RESPONSE' + }} + | ++ {{ o.status }} + | +{{ o.attempts }} | +{{ o.http_status ?? '-' }} | +{{ o.sent_at ? (o.sent_at | date: 'dd MMM, HH:mm:ss') : '-' }} | +{{ o.last_error }} | ++ @if (o.status === 'FAILED') { + + } + | +
| No outbox delivery records yet. | +|||||||
{{ prettyJson(selectedComplaint.raw_payload) }}
+ {{ prettyJson(o.payload) }}
+ | Opened | +Ack / MR id | + @if (role === 'BENEFICIARY_BANK') { +Account on hold | +Basis | +Restorable (₹) | + } +Victim | +Status | +Money | +
|---|---|---|---|---|---|---|---|
|
+ {{ r.created_at | date: 'dd MMM yyyy' }}
+ {{ r.created_by }}
+ |
+
+ {{ r.acknowledgement_no }}
+ {{ r.mrm_request_no || 'no MR id yet' }}
+ |
+ @if (role === 'BENEFICIARY_BANK') {
+
+ {{ r.hold_account_no }}
+ {{ r.client_name }} · held ₹{{ r.amount_held | number: '1.2-2' }}
+ |
+ {{ label(bases, r.basis) }} | +{{ r.restorable_amount | number: '1.2-2' }} | + } +
+ {{ r.victim_name || '-' }}
+ {{ r.victim_account_no }} {{ r.victim_ifsc }}
+ |
+
+ {{ label(statuses, r.status) }}
+ @if (r.bank_action && r.bank_action !== 'PENDING') {
+ {{ r.bank_action }}
+ }
+ @if (r.transfer_error) {
+ {{ r.transfer_error }}
+ }
+ |
+
+ @if (r.role === 'VICTIM_BANK') {
+ {{
+ r.received_amount
+ ? '₹' + (r.received_amount | number: '1.2-2') + ' received'
+ : r.victim_status || '-'
+ }}
+ } @else {
+ {{ r.restored_amount ? '₹' + (r.restored_amount | number: '1.2-2') : '-' }}
+ {{ r.utr || r.transfer_status || '' }}{{ r.mrm_updated ? ' · on MRM' : '' }}
+ }
+ |
+
| + No restorations match these filters. + | +
| Complaint (ack) | +Disputed | +Held | +Pro-rata share | +
|---|---|---|---|
| {{ h.acknowledgement_no }}{{ h.id === r.hold_id ? ' (this one)' : '' }} | +{{ h.disputed_amount | number: '1.2-2' }} | +{{ h.amount_held | number: '1.2-2' }} | ++ {{ h.share | number: '1.2-2' }} + | +