UNPKG

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
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