/** * Copyright since 2025 Mifos Initiative * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import { Injectable, inject } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs'; import { Complaint, ComplaintAction, DashboardStats, TimelineEvent, PagedResponse, EscalationRequest, EscalationResponse, ReportSuspectRequest, ReportSuspectResponse, ReportMuleAccountRequest, ReportMuleAccountResponse, ReportFraudTransactionRequest, ReportFraudTransactionResponse, FmrSubmissionRequest, FmrSubmissionResponse, CfrLookupResponse } from './models/cfcfrms.models'; import { environment } from '../../environments/environment'; @Injectable({ providedIn: 'root' }) export class CfcfrmsService { private http = inject(HttpClient); private baseUrl = environment.cfcfrmsApiUrl || `${environment.serverUrl}/cfcfrms`; createComplaint(complaint: Partial): Observable { return this.http.post(`${this.baseUrl}/complaints`, complaint); } getComplaints(params?: { page?: number; size?: number; status?: string; search?: string; dateFrom?: string; dateTo?: string; }): Observable> { let httpParams = new HttpParams(); if (params) { if (params.page != null) httpParams = httpParams.set('page', params.page.toString()); if (params.size != null) httpParams = httpParams.set('size', params.size.toString()); if (params.status) httpParams = httpParams.set('status', params.status); if (params.search) httpParams = httpParams.set('search', params.search); if (params.dateFrom) httpParams = httpParams.set('dateFrom', params.dateFrom); if (params.dateTo) httpParams = httpParams.set('dateTo', params.dateTo); } return this.http.get>(`${this.baseUrl}/complaints`, { params: httpParams }); } getComplaintById(ticketId: string): Observable { return this.http.get(`${this.baseUrl}/complaints/${ticketId}`); } submitAction(ticketId: string, actionPayload: ComplaintAction): Observable { return this.http.put(`${this.baseUrl}/complaints/${ticketId}/action`, actionPayload); } getStats(): Observable { return this.http.get(`${this.baseUrl}/complaints/stats`); } getTimeline(ticketId: string): Observable { return this.http.get(`${this.baseUrl}/complaints/${ticketId}/timeline`); } escalateComplaint(ticketId: string, payload: EscalationRequest): Observable { return this.http.post(`${this.baseUrl}/complaints/${ticketId}/escalate`, payload); } // ─── Bank Proactive Reporting ─── reportSuspect(payload: ReportSuspectRequest): Observable { return this.http.post(`${this.baseUrl}/report-suspect`, payload); } reportMuleAccount(payload: ReportMuleAccountRequest): Observable { return this.http.post(`${this.baseUrl}/report-mule-account`, payload); } reportFraudTransaction(payload: ReportFraudTransactionRequest): Observable { return this.http.post(`${this.baseUrl}/report-fraud-transaction`, payload); } // ─── RBI Integration ─── private rbiBaseUrl = `${environment.serverUrl}/rbi`; submitFmr(payload: FmrSubmissionRequest): Observable { return this.http.post(`${this.rbiBaseUrl}/fmr`, payload); } lookupCfr(accountNumber: string): Observable { const params = new HttpParams().set('accountNumber', accountNumber); return this.http.get(`${this.rbiBaseUrl}/cfr/lookup`, { params }); } }