feat(cfcfrms): I4C Live screens for SOP layer chain, risk, bank holds and restorations
- Risk screen and shared I4C date field - Bank Master: IFSC to I4C bank code map and unmapped IFSC list - Holds, restorations, grievances, documents, outbox and dashboard updates for the backend I4C SOP / outward ledger changes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,21 @@ export interface I4cHold {
|
||||
documents?: I4cDocument[];
|
||||
released_amount?: number;
|
||||
restored_amount?: number;
|
||||
digital_suspended?: boolean;
|
||||
lapse_on?: string;
|
||||
lea_notice_due_on?: string;
|
||||
lea_notice_sent_on?: string;
|
||||
lea_notice_ref?: string;
|
||||
extension_until?: string;
|
||||
extension_ref?: string;
|
||||
linkedAlerts?: any[];
|
||||
relatedAccounts?: any[];
|
||||
excludedKind?: { kind: string }[];
|
||||
muleFlags?: any[];
|
||||
fraudReports?: any[];
|
||||
channelBlocks?: any[];
|
||||
reportsOnAccount?: number;
|
||||
canLapseRelease?: boolean;
|
||||
auto_intimation_attempts?: number;
|
||||
}
|
||||
|
||||
@@ -141,7 +156,7 @@ export interface I4cPage<T> {
|
||||
export type I4cListParams = Record<string, string | number | boolean | null | undefined>;
|
||||
|
||||
export interface HoldActionRequest {
|
||||
action: 'RELEASE' | 'FREEZE' | 'UNFREEZE' | 'UNFREEZE_AND_RELEASE';
|
||||
action: 'RELEASE' | 'FREEZE' | 'UNFREEZE' | 'UNFREEZE_AND_RELEASE' | 'SUSPEND_DIGITAL' | 'RESTORE_DIGITAL';
|
||||
/** RELEASE only: how much to release; empty releases all. */
|
||||
amount?: number | null;
|
||||
reasonType: string;
|
||||
@@ -259,6 +274,19 @@ export class I4cService {
|
||||
return this.http.get<I4cPage<any>>(`${this.base}/bank-master`, { params: this.params(query) });
|
||||
}
|
||||
|
||||
/** The bank's IFSC / prefix -> I4C Bank Code map, and reported IFSCs that had no code. */
|
||||
ifscMap(): Observable<{ mappings: any[]; unknown: any[] }> {
|
||||
return this.http.get<{ mappings: any[]; unknown: any[] }>(`${this.cases}/ifsc-map`);
|
||||
}
|
||||
|
||||
mapIfsc(body: { ifscKey: string; bankCode: number; note?: string }): Observable<{ resourceId: number }> {
|
||||
return this.http.post<{ resourceId: number }>(`${this.cases}/ifsc-map`, body);
|
||||
}
|
||||
|
||||
unmapIfsc(id: number): Observable<{ resourceId: number }> {
|
||||
return this.http.post<{ resourceId: number }>(`${this.cases}/ifsc-map/${id}/remove`, {});
|
||||
}
|
||||
|
||||
// ── GRM / MRM (/v1/i4c/cases) ──────────────────────────────────────────
|
||||
|
||||
grievances(query: I4cListParams = {}): Observable<I4cPage<any>> {
|
||||
@@ -335,6 +363,24 @@ export class I4cService {
|
||||
});
|
||||
}
|
||||
|
||||
/** A POST on /i4c/cases/{path}, e.g. restorations/5/contest or holds/3/lea-notice. */
|
||||
casePost(path: string, body: Record<string, any> = {}): Observable<any> {
|
||||
return this.http.post<any>(`${this.cases}/${path}`, body);
|
||||
}
|
||||
|
||||
casePut(path: string, body: Record<string, any> = {}): Observable<any> {
|
||||
return this.http.put<any>(`${this.cases}/${path}`, body);
|
||||
}
|
||||
|
||||
/** A paged register on /i4c/cases: mule-flags, fraud-reports, linked-alerts, channel-blocks. */
|
||||
register(name: string, query: I4cListParams = {}): Observable<I4cPage<any>> {
|
||||
return this.http.get<I4cPage<any>>(`${this.cases}/${name}`, { params: this.params(query) });
|
||||
}
|
||||
|
||||
fraudReportsCsv(): Observable<Blob> {
|
||||
return this.http.get(`${this.cases}/fraud-reports.csv`, { responseType: 'blob' });
|
||||
}
|
||||
|
||||
documents(ownerType: I4cDocumentOwner, ownerId: number): Observable<I4cDocument[]> {
|
||||
return this.http.get<I4cDocument[]>(`${this.cases}/documents`, { params: this.params({ ownerType, ownerId }) });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user