ms-analysis-reports-mcp-server
Version:
PMS analysis reports server handling maintenance reports, equipment analysis, compliance tracking, and performance metrics with ERP access for data extraction
87 lines • 4.06 kB
JavaScript
import { getDataLink, insertDataLinkToMongoDB, getVesselImoListFromFleet, exportDataForImoListGeneric, convertToCSV, getTypesenseClient } from "syia-mcp-utils";
import { logger } from "../../index.js";
export class ExportToolHandler {
constructor() {
this.typesenseClient = getTypesenseClient();
}
// Fleet Operations Tools
async exportFleetPms(arguments_) {
logger.info("exportFleetPms called", arguments_);
const fleetImo = arguments_.fleet_imo;
const startDate = arguments_.start_date;
const endDate = arguments_.end_date;
const sessionId = arguments_.session_id || "testing";
if (!fleetImo) {
throw new Error("Fleet IMO is required");
}
try {
// Step 1: Get vessel IMO list from fleet
logger.info(`Step 1: Getting vessel IMO list for fleet IMO ${fleetImo}`);
const vesselImoList = await getVesselImoListFromFleet(fleetImo);
if (!vesselImoList || vesselImoList.length === 0) {
return [{
type: "text",
text: `No vessels found for fleet IMO: ${fleetImo}`,
title: "No Vessels Found"
}];
}
logger.info(`Found ${vesselImoList.length} vessels in fleet IMO ${fleetImo}`);
// Step 2: Export PMS records for all vessels in the fleet
logger.info(`Step 2: Exporting PMS records for ${vesselImoList.length} vessels`);
const pmsDocuments = await this.exportPmsForImoList(vesselImoList, startDate, endDate);
if (!pmsDocuments || pmsDocuments.length === 0) {
return [{
type: "text",
text: `No PMS maintenance records found for fleet IMO ${fleetImo} with the specified criteria`,
title: "No PMS Records Found"
}];
}
logger.info(`Found ${pmsDocuments.length} PMS maintenance records for fleet IMO ${fleetImo}`);
// Step 3: Convert to CSV
logger.info(`Step 3: Converting ${pmsDocuments.length} records to CSV`);
const csvData = convertToCSV(pmsDocuments);
// Insert tracking data to MongoDB (optional)
try {
const dataLink = await getDataLink(pmsDocuments);
const linkHeader = `Fleet PMS export for fleet IMO ${fleetImo}`;
const vesselName = pmsDocuments.length > 0 ? pmsDocuments[0].vesselName : null;
await insertDataLinkToMongoDB(dataLink, linkHeader, sessionId, String(fleetImo), vesselName || `Fleet_${fleetImo}`);
}
catch (trackingError) {
logger.warn(`Failed to insert tracking data: ${trackingError}`);
// Continue execution even if tracking fails
}
// Return CSV data
const content = {
type: "text",
text: csvData,
title: `Fleet PMS Export - IMO ${fleetImo}`,
format: "csv"
};
return [content];
}
catch (error) {
logger.error(`Error exporting fleet PMS for IMO ${fleetImo}: ${error}`);
throw new Error(`Error exporting fleet PMS: ${String(error)}`);
}
}
async exportPmsForImoList(imoList, startDate, endDate) {
return exportDataForImoListGeneric('pms', // collection
imoList, // imoList
startDate, // startDate
endDate, // endDate
'jobDueDate', // dateField (instead of 'reportDate')
"_id,docId,fleetId,vesselId,fleetManagerId,technicalSuperintendentId,id,embedding", // excludeFields
[
'inspectionTargetDate',
'reportDate',
'closingDate',
'targetDate',
'nextDueDate',
'extendedDate',
'jobDueDate', // Add this
'jobDoneDate' // Add this
]);
}
}
//# sourceMappingURL=exportTools.js.map