UNPKG

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

100 lines 5.31 kB
import { getDataLink, getVesselImoListFromFleet, exportDataForImoListGeneric, convertToCSV } from "../../utils/helper_functions.js"; import { getTypesenseClient } from "../../utils/typesense.js"; import { logger } from "../../index.js"; import { filterImoListForCompany } from "../../utils/company-filtering.js"; export class ExportToolHandler { constructor() { this.typesenseClient = getTypesenseClient(); } // Fleet Operations Tools async exportFleetPms(arguments_) { logger.info("exportFleetPms called", arguments_); const fleetImo = Number(arguments_.fleet_imo); const startDate = arguments_.start_date; const endDate = arguments_.end_date; if (!fleetImo) { throw new Error("fleet_imo is required. Only the following properties are allowed: fleet_imo, start_date, end_date. Please check the tool schema for exportFleetPms for the allowed properties."); } try { // Step 1: Get vessel IMO list from fleet logger.info(`Step 1: Getting vessel IMO list for fleet IMO ${fleetImo}`); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; const vesselImoList = await getVesselImoListFromFleet(fleetImo, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); 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 1.5: Filter out vessels that are not part of the current company // This fetches company IMOs once (cached) and filters the list efficiently using O(1) Set lookups const filteredVesselImoList = await filterImoListForCompany(vesselImoList, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); if (!filteredVesselImoList || filteredVesselImoList.length === 0) { return [{ type: "text", text: `No vessels from fleet IMO ${fleetImo} belong to your company. Access denied.`, title: "No Vessels Found" }]; } // 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}`, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); } 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