UNPKG

@crediblex.io/fineract-api-client

Version:
94 lines 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FineractReportsApi = void 0; const errors_1 = require("../types/errors"); /** * API client for Fineract "run reports" functionality. * Provides helper methods to execute reports and obtain their tabular data. */ class FineractReportsApi { // Key normalization strategy: use raw columnName as-is. Optionally could camelCase later. mapReportResponse(raw) { const columnNames = raw.columnHeaders.map((c) => c.columnName); const data = raw.data.map((rowObj) => { const record = {}; columnNames.forEach((col, idx) => { record[col] = rowObj.row[idx]; }); return record; }); return { data }; } constructor(httpClient) { this.basePath = "/fineract-provider/api/v1/runreports"; this.httpClient = httpClient; } /** * Internal generic report executor (intentionally private to restrict consumers * to approved convenience methods only). */ async run(reportName, params = {}) { // Encode report name for URL path while leaving query params separate const encodedName = encodeURIComponent(reportName); try { const apiPath = `${this.basePath}/${encodedName}`; const response = await this.httpClient.get(apiPath, params); return response.data; } catch (rawError) { const errorPayload = rawError; const message = errorPayload?.message || errorPayload?.error || "Fineract report request failed"; throw new errors_1.FineractApiError(message, errorPayload?.statusCode, errorPayload?.details, errorPayload?.error); } } /** * Convenience wrapper for the specific "Loan payments due" report. * @param params Report parameters (office, fromX, toY, loanOfficerId) */ async getLoanPaymentsDue(params) { const mapped = { R_officeId: 1, R_loanOfficerId: -1, R_fromX: params.fromInstallment, R_toY: params.toInstallment, }; const raw = await this.run("Loan payments due", mapped); return this.mapReportResponse(raw); } /** * Convenience wrapper for the "Loan payments due (Overdue Loans)" report. * @param params Report parameters including overdue range. */ async getLoanPaymentsDueOverdue(params) { const mapped = { R_officeId: 1, R_loanOfficerId: -1, R_fromX: params.fromInstallment, R_toY: params.toInstallment, R_overdueX: params.overdueFromDays, R_overdueY: params.overdueToDays, }; const raw = await this.run("Loan payments due (Overdue Loans) Table Report", mapped); return this.mapReportResponse(raw); } /** * Convenience wrapper for the "Expected Payments By Date - Basic" report. * @param params Report parameters including date range and office/officer. */ async getExpectedPaymentsByDateBasic(params) { const mapped = { R_officeId: 1, R_loanOfficerId: -1, R_startDate: params.startDate, R_endDate: params.endDate, locale: params.locale, dateFormat: params.dateFormat, }; const raw = await this.run("Expected Payments By Date - Basic", mapped); return this.mapReportResponse(raw); } } exports.FineractReportsApi = FineractReportsApi; //# sourceMappingURL=fineract-reports-api.js.map