@crediblex.io/fineract-api-client
Version:
TypeScript client for Fineract APIs
94 lines • 3.63 kB
JavaScript
;
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