betterwithage Perplexity Computer Agent commited on
Commit
e42cd0c
·
verified ·
1 Parent(s): 41978b1

feat(killinchu): fold in FULL vessels context — add 4 missing seed-data datasets (event-logs, fleets, maintenance-logs, shipment-records) as static FLEET endpoints + 2 new FLEET tabs (Ops & Maintenance Logs, Voyages & Fleets). Drones stay front-and-center; vessels additive. Sample fleet dataset — not a live AIS/class-society feed.

Browse files
Dockerfile CHANGED
@@ -188,9 +188,13 @@ COPY killinchu_cannonico.py ./killinchu_cannonico.py
188
  COPY killinchu_elite_console.py ./killinchu_elite_console.py
189
  # ADDITIVE (FLEET vessels/drones, GAP-1+GAP-2): per-file COPY of the FLEET (Vessels)
190
  # module + its embedded verbatim platform seed-data. serve.py imports
191
- # killinchu_fleet_vessels and front-inserts its 8 routes under /api/killinchu/v1/fleet/*;
192
- # without these COPYs the import fails and every fleet route falls through to the SPA
193
- # catch-all (404). This Dockerfile never uses `COPY . .` — every file is explicit.
 
 
 
 
194
  COPY killinchu_fleet_vessels.py ./killinchu_fleet_vessels.py
195
  COPY fleet_vessels_data.json ./fleet_vessels_data.json
196
  # killinchu_beyond.py: Beyond-Cannonico proof console — autonomy-governance
 
188
  COPY killinchu_elite_console.py ./killinchu_elite_console.py
189
  # ADDITIVE (FLEET vessels/drones, GAP-1+GAP-2): per-file COPY of the FLEET (Vessels)
190
  # module + its embedded verbatim platform seed-data. serve.py imports
191
+ # killinchu_fleet_vessels and front-inserts its 12 routes under /api/killinchu/v1/fleet/*
192
+ # (vessels, forecast-modules, predictive-maintenance, compliance-certificates,
193
+ # port-state-deficiencies, ai-briefings, event-logs, fleets, maintenance-logs,
194
+ # shipment-records, all, voyage-risk); without these COPYs the import fails and every
195
+ # fleet route falls through to the SPA catch-all (404). This Dockerfile never uses
196
+ # `COPY . .` — every file is explicit. fleet_vessels_data.json carries all 10 datasets
197
+ # embedded verbatim, so the 4 new endpoints need no new COPY line. Cache-bust: full-vessels-2026-06-06
198
  COPY killinchu_fleet_vessels.py ./killinchu_fleet_vessels.py
199
  COPY fleet_vessels_data.json ./fleet_vessels_data.json
200
  # killinchu_beyond.py: Beyond-Cannonico proof console — autonomy-governance
fleet_vessels_data.json CHANGED
@@ -1 +1,1894 @@
1
- {"vessels":[{"id":1,"name":"CONSTANTA SPIRIT","imo":"9732847","mmsi":"264700100","vesselType":"bulk","shipClass":"Handymax","flag":"Romania","yearBuilt":2019,"grossTonnage":33400,"deadweight":58000,"length":190,"beam":32.26,"draft":12.8,"status":"at_sea","fleetId":1,"currentLat":43.18,"currentLon":28.59,"currentSpeed":12.4,"currentHeading":195,"lastPort":"Constanta","nextPort":"Istanbul","eta":"2026-03-29","fuelConsumptionDaily":28,"co2EmissionsDaily":87.2,"ciiRating":"B","ciiValue":5.82,"attainedCII":5.82,"requiredCII":6.45,"hullCondition":91,"engineHealth":94,"maintenanceScore":90,"tce":18200,"utilization":92,"eexi":7.1,"tradeLane":"Black Sea — Marmara","operator":"Navrom SA","classificationSociety":"Bureau Veritas","builder":"Daewoo Shipbuilding"},{"id":2,"name":"MARE NIGRUM","imo":"9781234","mmsi":"264700200","vesselType":"tanker","shipClass":"Aframax","flag":"Romania","yearBuilt":2020,"grossTonnage":62500,"deadweight":115000,"length":250,"beam":44,"draft":15.2,"status":"at_sea","fleetId":1,"currentLat":41.02,"currentLon":29.01,"currentSpeed":10.8,"currentHeading":210,"lastPort":"Constanta","nextPort":"Augusta","eta":"2026-04-02","fuelConsumptionDaily":52,"co2EmissionsDaily":161.9,"ciiRating":"A","ciiValue":4.21,"attainedCII":4.21,"requiredCII":5.88,"hullCondition":95,"engineHealth":96,"maintenanceScore":94,"tce":28500,"utilization":96,"eexi":5.4,"tradeLane":"Black Sea — Mediterranean","operator":"Petrom Marine","classificationSociety":"Lloyd's Register","builder":"Samsung Heavy Industries"},{"id":3,"name":"COSCO SHANGHAI","imo":"9795432","mmsi":"413456780","vesselType":"container","shipClass":"Neo-Panamax","flag":"China","yearBuilt":2021,"grossTonnage":115000,"deadweight":136000,"length":366,"beam":51.2,"draft":16.0,"status":"at_sea","fleetId":2,"currentLat":34.05,"currentLon":-152.3,"currentSpeed":19.8,"currentHeading":275,"lastPort":"Ningbo-Zhoushan","nextPort":"Long Beach","eta":"2026-04-03","fuelConsumptionDaily":195,"co2EmissionsDaily":607.2,"ciiRating":"B","ciiValue":6.12,"attainedCII":6.12,"requiredCII":7.35,"hullCondition":96,"engineHealth":97,"maintenanceScore":95,"tce":31200,"utilization":97,"eexi":6.8,"tradeLane":"Trans-Pacific Eastbound","operator":"COSCO Shipping Lines","classificationSociety":"China Classification Society","builder":"Jiangsu New Yangzi Shipbuilding"},{"id":4,"name":"NORDIC WOLVERINE","imo":"9834567","mmsi":"258765000","vesselType":"tanker","shipClass":"VLCC","flag":"Norway","yearBuilt":2022,"grossTonnage":160000,"deadweight":300000,"length":333,"beam":60,"draft":22.5,"status":"at_sea","fleetId":4,"currentLat":26.2,"currentLon":56.3,"currentSpeed":14.1,"currentHeading":90,"lastPort":"Ras Tanura","nextPort":"Ningbo-Zhoushan","eta":"2026-04-15","fuelConsumptionDaily":85,"co2EmissionsDaily":264.7,"ciiRating":"B","ciiValue":2.18,"attainedCII":2.18,"requiredCII":2.95,"hullCondition":98,"engineHealth":99,"maintenanceScore":97,"tce":42100,"utilization":98,"eexi":4.2,"tradeLane":"AG — Far East","operator":"Frontline Ltd","classificationSociety":"DNV","builder":"Hyundai Heavy Industries"},{"id":5,"name":"OLDENDORFF BRISBANE","imo":"9756789","mmsi":"211345600","vesselType":"bulk","shipClass":"Capesize","flag":"Germany","yearBuilt":2018,"grossTonnage":92000,"deadweight":180000,"length":292,"beam":45,"draft":18.2,"status":"at_sea","fleetId":3,"currentLat":-33.9,"currentLon":18.4,"currentSpeed":13.2,"currentHeading":210,"lastPort":"Richards Bay","nextPort":"Qingdao","eta":"2026-04-18","fuelConsumptionDaily":48,"co2EmissionsDaily":149.5,"ciiRating":"C","ciiValue":4.52,"attainedCII":4.52,"requiredCII":4.1,"hullCondition":82,"engineHealth":85,"maintenanceScore":80,"tce":22800,"utilization":90,"eexi":9.1,"tradeLane":"South Africa — China Coal","operator":"Oldendorff Carriers","classificationSociety":"Germanischer Lloyd","builder":"Imabari Shipbuilding"},{"id":6,"name":"MAERSK EDINBURGH","imo":"9812345","mmsi":"219018600","vesselType":"container","shipClass":"Triple-E","flag":"Denmark","yearBuilt":2023,"grossTonnage":214000,"deadweight":198000,"length":400,"beam":58.6,"draft":16.5,"status":"at_sea","fleetId":2,"currentLat":1.3,"currentLon":103.8,"currentSpeed":16.5,"currentHeading":350,"lastPort":"Singapore","nextPort":"Rotterdam","eta":"2026-04-14","fuelConsumptionDaily":180,"co2EmissionsDaily":282.6,"ciiRating":"A","ciiValue":3.45,"attainedCII":3.45,"requiredCII":5.12,"hullCondition":99,"engineHealth":99,"maintenanceScore":98,"tce":38500,"utilization":99,"eexi":4.1,"tradeLane":"Asia — Europe (AE7)","operator":"Maersk Line","classificationSociety":"DNV","builder":"Daewoo Shipbuilding"},{"id":7,"name":"GALATA BRIDGE","imo":"9745678","mmsi":"271001234","vesselType":"bulk","shipClass":"Supramax","flag":"Turkey","yearBuilt":2017,"grossTonnage":32000,"deadweight":56000,"length":190,"beam":32.26,"draft":12.8,"status":"in_port","fleetId":1,"currentLat":44.17,"currentLon":28.65,"currentSpeed":0,"currentHeading":180,"lastPort":"Novorossiysk","nextPort":"Constanta","eta":"2026-03-28","fuelConsumptionDaily":0,"co2EmissionsDaily":0,"ciiRating":"B","ciiValue":5.55,"attainedCII":5.55,"requiredCII":6.45,"hullCondition":85,"engineHealth":88,"maintenanceScore":84,"tce":15600,"utilization":87,"eexi":7.8,"tradeLane":"Black Sea Intra-Regional","operator":"Arkas Holding","classificationSociety":"Turkish Lloyd","builder":"Oshima Shipbuilding"},{"id":8,"name":"EURONAV DANUBE","imo":"9823456","mmsi":"205456000","vesselType":"tanker","shipClass":"Suezmax","flag":"Belgium","yearBuilt":2021,"grossTonnage":82000,"deadweight":157000,"length":274,"beam":48,"draft":17.1,"status":"at_sea","fleetId":3,"currentLat":42.5,"currentLon":-38.7,"currentSpeed":14.2,"currentHeading":85,"lastPort":"Bonny Terminal","nextPort":"Rotterdam","eta":"2026-04-05","fuelConsumptionDaily":58,"co2EmissionsDaily":180.6,"ciiRating":"A","ciiValue":3.89,"attainedCII":3.89,"requiredCII":5.22,"hullCondition":97,"engineHealth":96,"maintenanceScore":95,"tce":34200,"utilization":96,"eexi":4.8,"tradeLane":"WAF — NW Europe","operator":"Euronav NV","classificationSociety":"Bureau Veritas","builder":"Samsung Heavy Industries"},{"id":9,"name":"PACIFIC BASIN TIANJIN","imo":"9767890","mmsi":"477234100","vesselType":"bulk","shipClass":"Ultramax","flag":"Hong Kong","yearBuilt":2020,"grossTonnage":38000,"deadweight":64000,"length":200,"beam":32.26,"draft":13.5,"status":"at_sea","fleetId":2,"currentLat":-5.8,"currentLon":106.8,"currentSpeed":11.8,"currentHeading":165,"lastPort":"Hay Point","nextPort":"Tanjung Priok","eta":"2026-03-30","fuelConsumptionDaily":30,"co2EmissionsDaily":93.4,"ciiRating":"B","ciiValue":5.12,"attainedCII":5.12,"requiredCII":6.02,"hullCondition":90,"engineHealth":92,"maintenanceScore":88,"tce":16800,"utilization":91,"eexi":6.9,"tradeLane":"Australia — SE Asia","operator":"Pacific Basin Shipping","classificationSociety":"ClassNK","builder":"Tsuneishi Shipbuilding"},{"id":10,"name":"TORM HELLAS","imo":"9698765","mmsi":"219019800","vesselType":"tanker","shipClass":"MR2 Product Tanker","flag":"Denmark","yearBuilt":2014,"grossTonnage":30000,"deadweight":49000,"length":183,"beam":32.2,"draft":13.1,"status":"maintenance","fleetId":1,"currentLat":44.43,"currentLon":28.66,"currentSpeed":0,"currentHeading":0,"lastPort":"Constanta","nextPort":"Constanta","eta":"2026-04-15","fuelConsumptionDaily":0,"co2EmissionsDaily":0,"ciiRating":"D","ciiValue":9.82,"attainedCII":9.82,"requiredCII":6.88,"hullCondition":62,"engineHealth":58,"maintenanceScore":55,"tce":0,"utilization":45,"eexi":14.2,"tradeLane":"Drydock — Constanta Shipyard","operator":"TORM A/S","classificationSociety":"Lloyd's Register","builder":"Guangzhou Shipyard"},{"id":11,"name":"MSC AURORA","imo":"9845678","mmsi":"353456700","vesselType":"container","shipClass":"Megamax-24","flag":"Panama","yearBuilt":2024,"grossTonnage":228000,"deadweight":220000,"length":400,"beam":61.5,"draft":17.4,"status":"at_sea","fleetId":2,"currentLat":22.3,"currentLon":114.2,"currentSpeed":21.2,"currentHeading":315,"lastPort":"Yantian","nextPort":"Tanjung Pelepas","eta":"2026-03-31","fuelConsumptionDaily":225,"co2EmissionsDaily":700.6,"ciiRating":"A","ciiValue":3.12,"attainedCII":3.12,"requiredCII":4.85,"hullCondition":99,"engineHealth":99,"maintenanceScore":99,"tce":35800,"utilization":98,"eexi":3.9,"tradeLane":"Far East — Mediterranean","operator":"MSC Mediterranean Shipping","classificationSociety":"RINA","builder":"Hyundai Samho Heavy Industries"},{"id":12,"name":"DANUBIA STAR","imo":"9712345","mmsi":"264700300","vesselType":"cargo","shipClass":"River-Sea Type","flag":"Romania","yearBuilt":2016,"grossTonnage":5800,"deadweight":7200,"length":140,"beam":16.8,"draft":4.5,"status":"at_sea","fleetId":1,"currentLat":45.15,"currentLon":29.68,"currentSpeed":8.2,"currentHeading":120,"lastPort":"Galati","nextPort":"Constanta","eta":"2026-03-28","fuelConsumptionDaily":8,"co2EmissionsDaily":24.9,"ciiRating":"B","ciiValue":5.65,"attainedCII":5.65,"requiredCII":6.88,"hullCondition":78,"engineHealth":80,"maintenanceScore":76,"tce":8500,"utilization":82,"eexi":8.4,"tradeLane":"Danube River — Black Sea","operator":"Navrom SA","classificationSociety":"Romanian Naval Authority","builder":"Santierul Naval Galati"},{"id":13,"name":"STENA POLARIS","imo":"9856789","mmsi":"265789000","vesselType":"tanker","shipClass":"IMOIIMAX","flag":"Sweden","yearBuilt":2022,"grossTonnage":25000,"deadweight":37000,"length":176,"beam":32.2,"draft":12.5,"status":"at_sea","fleetId":1,"currentLat":40.65,"currentLon":27.95,"currentSpeed":11.5,"currentHeading":45,"lastPort":"Tüpraş İzmit","nextPort":"Constanta","eta":"2026-03-29","fuelConsumptionDaily":22,"co2EmissionsDaily":68.5,"ciiRating":"A","ciiValue":4.15,"attainedCII":4.15,"requiredCII":5.95,"hullCondition":97,"engineHealth":96,"maintenanceScore":95,"tce":19800,"utilization":93,"eexi":5.2,"tradeLane":"Marmara — Black Sea Products","operator":"Stena Bulk AB","classificationSociety":"DNV","builder":"Guangzhou Shipyard International"},{"id":14,"name":"CMA CGM BOSPHORUS","imo":"9867890","mmsi":"228345600","vesselType":"container","shipClass":"Panamax","flag":"France","yearBuilt":2018,"grossTonnage":52000,"deadweight":63000,"length":265,"beam":32.2,"draft":13.5,"status":"anchored","fleetId":1,"currentLat":41.18,"currentLon":29.08,"currentSpeed":0,"currentHeading":90,"lastPort":"Piraeus","nextPort":"Constanta","eta":"2026-03-29","fuelConsumptionDaily":0,"co2EmissionsDaily":0,"ciiRating":"B","ciiValue":5.88,"attainedCII":5.88,"requiredCII":6.95,"hullCondition":89,"engineHealth":91,"maintenanceScore":88,"tce":21500,"utilization":88,"eexi":7.2,"tradeLane":"Med — Black Sea Feeder","operator":"CMA CGM Group","classificationSociety":"Bureau Veritas","builder":"Hanjin Heavy Industries"},{"id":15,"name":"VALE BRASIL","imo":"9878901","mmsi":"710567800","vesselType":"bulk","shipClass":"Valemax (VLOC)","flag":"Brazil","yearBuilt":2023,"grossTonnage":200000,"deadweight":400000,"length":362,"beam":65,"draft":23.0,"status":"at_sea","fleetId":3,"currentLat":-2.5,"currentLon":-44.3,"currentSpeed":13.5,"currentHeading":30,"lastPort":"Ponta da Madeira","nextPort":"Qingdao","eta":"2026-04-22","fuelConsumptionDaily":75,"co2EmissionsDaily":233.6,"ciiRating":"A","ciiValue":1.85,"attainedCII":1.85,"requiredCII":2.62,"hullCondition":99,"engineHealth":98,"maintenanceScore":97,"tce":28900,"utilization":95,"eexi":3.2,"tradeLane":"Brazil — China Iron Ore","operator":"Vale SA","classificationSociety":"DNV","builder":"CSSC Dalian Shipbuilding"},{"id":16,"name":"ARCTIC AURORA","imo":"9889012","mmsi":"258900100","vesselType":"tanker","shipClass":"Arc7 LNG Carrier","flag":"Norway","yearBuilt":2024,"grossTonnage":129000,"deadweight":95000,"length":299,"beam":50,"draft":12.0,"status":"at_sea","fleetId":4,"currentLat":68.95,"currentLon":33.05,"currentSpeed":16.8,"currentHeading":270,"lastPort":"Sabetta","nextPort":"Zeebrugge","eta":"2026-04-06","fuelConsumptionDaily":120,"co2EmissionsDaily":280.8,"ciiRating":"A","ciiValue":3.55,"attainedCII":3.55,"requiredCII":4.82,"hullCondition":99,"engineHealth":99,"maintenanceScore":98,"tce":52000,"utilization":97,"eexi":3.8,"tradeLane":"NSR — Yamal LNG","operator":"MOL/Teekay LNG","classificationSociety":"DNV","builder":"Daewoo Shipbuilding"},{"id":17,"name":"EVERGREEN TRIUMPH","imo":"9890123","mmsi":"416234500","vesselType":"container","shipClass":"Neo-Panamax","flag":"Taiwan","yearBuilt":2022,"grossTonnage":120000,"deadweight":140000,"length":334,"beam":51.2,"draft":16.0,"status":"at_sea","fleetId":2,"currentLat":15.4,"currentLon":120.6,"currentSpeed":18.5,"currentHeading":180,"lastPort":"Kaohsiung","nextPort":"Port Klang","eta":"2026-04-03","fuelConsumptionDaily":175,"co2EmissionsDaily":545.0,"ciiRating":"B","ciiValue":5.95,"attainedCII":5.95,"requiredCII":7.12,"hullCondition":97,"engineHealth":96,"maintenanceScore":95,"tce":27400,"utilization":95,"eexi":6.5,"tradeLane":"Intra-Asia","operator":"Evergreen Marine Corp","classificationSociety":"ClassNK","builder":"Samsung Heavy Industries"},{"id":18,"name":"MINERVA SOPHIA","imo":"9801234","mmsi":"240567800","vesselType":"tanker","shipClass":"Suezmax","flag":"Greece","yearBuilt":2019,"grossTonnage":82000,"deadweight":158000,"length":274,"beam":48,"draft":17.1,"status":"at_sea","fleetId":1,"currentLat":37.0,"currentLon":26.5,"currentSpeed":13.4,"currentHeading":30,"lastPort":"Ceyhan","nextPort":"Trieste","eta":"2026-04-01","fuelConsumptionDaily":55,"co2EmissionsDaily":171.3,"ciiRating":"B","ciiValue":5.42,"attainedCII":5.42,"requiredCII":5.88,"hullCondition":88,"engineHealth":90,"maintenanceScore":86,"tce":31800,"utilization":93,"eexi":6.2,"tradeLane":"Black Sea — Med Crude","operator":"Minerva Marine Inc","classificationSociety":"Lloyd's Register","builder":"Hyundai Heavy Industries"}],"forecast-modules":[{"id":1,"title":"Fleet Average TCE","metric":"$/day","currentValue":24850,"forecastValue":27200,"forecastDate":"2026-06-30","confidence":78,"trend":"up","dataPoints":[{"date":"2025-10","value":21800},{"date":"2025-11","value":22400},{"date":"2025-12","value":23100},{"date":"2026-01","value":23600},{"date":"2026-02","value":24200},{"date":"2026-03","value":24850},{"date":"2026-04","value":25500,"forecast":25500},{"date":"2026-05","value":26400,"forecast":26400},{"date":"2026-06","value":27200,"forecast":27200}]},{"id":2,"title":"Fleet CII (gCO2/DWT·nm)","metric":"gCO2/DWT·nm","currentValue":4.85,"forecastValue":4.42,"forecastDate":"2026-06-30","confidence":72,"trend":"down","dataPoints":[{"date":"2025-10","value":5.62},{"date":"2025-11","value":5.41},{"date":"2025-12","value":5.28},{"date":"2026-01","value":5.12},{"date":"2026-02","value":4.98},{"date":"2026-03","value":4.85},{"date":"2026-04","value":4.71,"forecast":4.71},{"date":"2026-05","value":4.55,"forecast":4.55},{"date":"2026-06","value":4.42,"forecast":4.42}]},{"id":3,"title":"Fleet Utilization Rate","metric":"%","currentValue":91.8,"forecastValue":93.5,"forecastDate":"2026-06-30","confidence":85,"trend":"up","dataPoints":[{"date":"2025-10","value":88.5},{"date":"2025-11","value":89.2},{"date":"2025-12","value":89.8},{"date":"2026-01","value":90.4},{"date":"2026-02","value":91.1},{"date":"2026-03","value":91.8},{"date":"2026-04","value":92.2,"forecast":92.2},{"date":"2026-05","value":92.8,"forecast":92.8},{"date":"2026-06","value":93.5,"forecast":93.5}]},{"id":4,"title":"Baltic Dry Index Correlation","metric":"BDI Points","currentValue":1842,"forecastValue":2150,"forecastDate":"2026-06-30","confidence":68,"trend":"up","dataPoints":[{"date":"2025-10","value":1520},{"date":"2025-11","value":1580},{"date":"2025-12","value":1650},{"date":"2026-01","value":1720},{"date":"2026-02","value":1780},{"date":"2026-03","value":1842},{"date":"2026-04","value":1920,"forecast":1920},{"date":"2026-05","value":2040,"forecast":2040},{"date":"2026-06","value":2150,"forecast":2150}]}],"predictive-maintenance":[{"id":1,"vesselId":9,"vesselName":"PACIFIC BASIN TIANJIN","component":"Propeller Shaft Stern Tube Bearing","failureProbability":73,"predictedFailureDate":"2026-05-10","recommendedAction":"Schedule emergency docking for bearing replacement at PT United Shipyard Tanjung Priok","estimatedCost":120000,"confidence":73,"riskLevel":"High"},{"id":2,"vesselId":10,"vesselName":"TORM HELLAS","component":"Main Engine Turbocharger (MAN TCA66)","failureProbability":62,"predictedFailureDate":"2026-06-15","recommendedAction":"Replace turbocharger cartridge during current Constanta Shipyard drydock","estimatedCost":85000,"confidence":68,"riskLevel":"High"},{"id":3,"vesselId":18,"vesselName":"MINERVA SOPHIA","component":"Cargo Pump Mechanical Seal (Framo SD200)","failureProbability":55,"predictedFailureDate":"2026-07-20","recommendedAction":"Order spare seals and plan replacement during next discharge at Trieste","estimatedCost":12000,"confidence":71,"riskLevel":"Medium"},{"id":4,"vesselId":7,"vesselName":"GALATA BRIDGE","component":"Ballast Water UV Reactor (Alfa Laval PureBallast)","failureProbability":48,"predictedFailureDate":"2026-08-01","recommendedAction":"Replace UV lamp assembly during scheduled BWTS maintenance at Constanta","estimatedCost":35000,"confidence":65,"riskLevel":"Medium"},{"id":5,"vesselId":5,"vesselName":"OLDENDORFF BRISBANE","component":"Auxiliary Boiler Tubes (Aalborg AQ-12)","failureProbability":41,"predictedFailureDate":"2026-09-10","recommendedAction":"Conduct ultrasonic thickness measurement during next port stay at Qingdao","estimatedCost":55000,"confidence":60,"riskLevel":"Medium"},{"id":6,"vesselId":1,"vesselName":"CONSTANTA SPIRIT","component":"Steering Gear Hydraulic Pump (Rolls-Royce)","failureProbability":28,"predictedFailureDate":"2026-11-15","recommendedAction":"Replace hydraulic pump seal kit during next scheduled Constanta port call","estimatedCost":8000,"confidence":58,"riskLevel":"Low"}],"compliance-certificates":[{"id":1,"vesselId":10,"vesselName":"TORM HELLAS","certificateType":"Safety Management Certificate (SMC)","issuer":"Lloyd's Register","issuedDate":"2022-06-15","expiryDate":"2026-04-10","status":"Expiring Soon","daysUntilExpiry":15,"regulation":"ISM Code Ch. 13"},{"id":2,"vesselId":4,"vesselName":"NORDIC WOLVERINE","certificateType":"International Oil Pollution Prevention (IOPP)","issuer":"DNV","issuedDate":"2022-09-01","expiryDate":"2027-09-01","status":"Valid","daysUntilExpiry":524,"regulation":"MARPOL Annex I, Reg. 7"},{"id":3,"vesselId":5,"vesselName":"OLDENDORFF BRISBANE","certificateType":"ISM Document of Compliance (DOC)","issuer":"Germanischer Lloyd","issuedDate":"2023-01-15","expiryDate":"2026-05-15","status":"Expiring Soon","daysUntilExpiry":50,"regulation":"ISM Code Ch. 13.2"},{"id":4,"vesselId":3,"vesselName":"COSCO SHANGHAI","certificateType":"SOLAS Safety Equipment Certificate (SEC)","issuer":"China Classification Society","issuedDate":"2023-03-20","expiryDate":"2028-03-20","status":"Valid","daysUntilExpiry":724,"regulation":"SOLAS Ch. I/Reg. 12"},{"id":5,"vesselId":6,"vesselName":"MAERSK EDINBURGH","certificateType":"Energy Efficiency Existing Ship Index (EEXI)","issuer":"DNV","issuedDate":"2023-01-01","expiryDate":"2028-01-01","status":"Valid","daysUntilExpiry":645,"regulation":"MARPOL Annex VI Reg. 23"},{"id":6,"vesselId":18,"vesselName":"MINERVA SOPHIA","certificateType":"International Air Pollution Prevention (IAPP)","issuer":"Lloyd's Register","issuedDate":"2021-03-30","expiryDate":"2026-03-30","status":"Expired","daysUntilExpiry":-4,"regulation":"MARPOL Annex VI Reg. 6"},{"id":7,"vesselId":9,"vesselName":"PACIFIC BASIN TIANJIN","certificateType":"Ballast Water Management (BWM)","issuer":"ClassNK","issuedDate":"2022-08-15","expiryDate":"2027-08-15","status":"Valid","daysUntilExpiry":507,"regulation":"BWM Convention Art. 9"},{"id":8,"vesselId":16,"vesselName":"ARCTIC AURORA","certificateType":"Polar Ship Certificate (PSC)","issuer":"DNV","issuedDate":"2024-01-10","expiryDate":"2029-01-10","status":"Valid","daysUntilExpiry":1021,"regulation":"SOLAS Ch. XIV / Polar Code"},{"id":9,"vesselId":8,"vesselName":"EURONAV DANUBE","certificateType":"International Sewage Pollution Prevention (ISPP)","issuer":"Bureau Veritas","issuedDate":"2023-05-10","expiryDate":"2028-05-10","status":"Valid","daysUntilExpiry":775,"regulation":"MARPOL Annex IV Reg. 5"},{"id":10,"vesselId":11,"vesselName":"MSC AURORA","certificateType":"Energy Efficiency Management Plan (SEEMP Part III)","issuer":"RINA","issuedDate":"2024-03-01","expiryDate":"2029-03-01","status":"Valid","daysUntilExpiry":1070,"regulation":"MARPOL Annex VI Reg. 26"}],"port-state-deficiencies":[{"id":1,"vesselId":10,"vesselName":"TORM HELLAS","port":"Constanta","inspectionDate":"2026-03-01","deficiencyCode":"01302","description":"Fire detection system — smoke detector in engine room No. 2 zone inoperative. Non-compliance with SOLAS Ch. II-2/Reg. 7.2.2.","severity":"High","status":"Open","rectifiedDate":null,"mouRegime":"Paris MOU"},{"id":2,"vesselId":4,"vesselName":"NORDIC WOLVERINE","port":"Fujairah","inspectionDate":"2026-02-15","deficiencyCode":"07410","description":"MARPOL Annex I — oil water separator discharge exceeding 15 ppm limit. Sample analysis showed 22 ppm. OWS alarm not functioning.","severity":"High","status":"Rectified","rectifiedDate":"2026-02-20","mouRegime":"Riyadh MOU"},{"id":3,"vesselId":5,"vesselName":"OLDENDORFF BRISBANE","port":"Qingdao","inspectionDate":"2026-03-10","deficiencyCode":"06110","description":"Lifesaving appliances — lifeboat on-load release mechanism requires servicing per MSC.1/Circ.1206/Rev.2. Annual maintenance record incomplete.","severity":"Medium","status":"Open","rectifiedDate":null,"mouRegime":"Tokyo MOU"},{"id":4,"vesselId":18,"vesselName":"MINERVA SOPHIA","port":"Trieste","inspectionDate":"2026-01-20","deficiencyCode":"09510","description":"MLC 2006 — crew rest hour records incomplete for Chief Officer and 2nd Engineer. Work/rest analysis shows potential non-compliance with Standard A2.3.","severity":"Low","status":"Rectified","rectifiedDate":"2026-01-25","mouRegime":"Paris MOU"},{"id":5,"vesselId":9,"vesselName":"PACIFIC BASIN TIANJIN","port":"Tanjung Priok","inspectionDate":"2026-03-05","deficiencyCode":"04315","description":"Navigation equipment — ECDIS backup arrangement not compliant with SOLAS Ch. V/Reg. 19.2.1.4. Backup ECDIS showing chart datum error.","severity":"Medium","status":"Open","rectifiedDate":null,"mouRegime":"Tokyo MOU"},{"id":6,"vesselId":12,"vesselName":"DANUBIA STAR","port":"Constanta","inspectionDate":"2026-02-28","deficiencyCode":"01520","description":"Structural safety — wastage found on main deck plating exceeding 20% of original thickness. Class condition noted by Romanian Naval Authority.","severity":"High","status":"Open","rectifiedDate":null,"mouRegime":"Paris MOU"}],"ai-briefings":[{"id":1,"title":"Black Sea Fleet CII Performance Analysis","category":"Performance","severity":"Warning","summary":"Black Sea Division fleet-wide CII trending 8% above required thresholds. TORM HELLAS rated D and OLDENDORFF BRISBANE at C boundary — both at risk of operational restrictions under IMO MEPC.352(78) 2026 tightening.","details":"9-month emission data analysis per MARPOL Annex VI Regulation 28 shows attained CII deterioration across 4 vessels. Primary contributors: TORM HELLAS (attained 9.82 vs required 6.88) and OLDENDORFF BRISBANE (4.52 vs 4.10). Hull fouling penalty estimated at 12-15% fuel increase. Constanta Shipyard drydock capacity available Q2 2026. Wind-assisted propulsion (Norsepower Rotor Sail) retrofit estimated ROI: 18 months.","confidence":91,"generatedAt":"2026-03-26T14:00:00Z","actionItems":["Submit CII Corrective Action Plan to flag state per MEPC.355(78) by June 2026","Schedule hull cleaning for TORM HELLAS at Constanta Shipyard during current drydock","Implement JIT arrival optimization for Bosporus transit to reduce idle time emissions","Evaluate Norsepower Rotor Sail retrofit for OLDENDORFF BRISBANE (est. 8% fuel saving)"],"affectedVessels":["TORM HELLAS","OLDENDORFF BRISBANE","MINERVA SOPHIA"]},{"id":2,"title":"Bosporus Strait Congestion — Route Optimization Required","category":"Operations","severity":"Warning","summary":"Turkish Straits VTS reporting 72-hour northbound transit delays. 23 vessels queued at southern anchorage. CMA CGM BOSPHORUS anchored since March 26. Revenue loss estimated at $45,000/day for detained fleet.","details":"Kıyı Emniyeti (Turkish Coastal Safety) data shows abnormal congestion due to combined factors: (1) Russian grain export surge, (2) seasonal LPG traffic increase from Ceyhan, (3) maintenance at İstanbul Strait radar station. Historical analysis suggests congestion will persist 5-7 days. Alternative routing via Suez Canal adds 4 days but avoids $180K demurrage exposure. JIT arrival coordination with Constanta Port Authority recommended.","confidence":87,"generatedAt":"2026-03-26T13:00:00Z","actionItems":["Coordinate JIT arrival with Constanta Port Authority (APMC) for STENA POLARIS","Request priority transit slot for CMA CGM BOSPHORUS via agent (Marline Agency Istanbul)","Evaluate Suez Canal alternative for non-time-critical Black Sea cargoes","Brief commercial team on potential 5-7 day delay impact on Q1 performance"],"affectedVessels":["CMA CGM BOSPHORUS","STENA POLARIS","CONSTANTA SPIRIT"]},{"id":3,"title":"EU ETS Maritime Compliance — Q1 Allowance Deadline","category":"Compliance","severity":"Critical","summary":"EU ETS maritime phase-in requires 40% of 2026 emissions covered by allowances. Submission deadline April 30. 8 vessels in fleet have EU port calls requiring reporting under Regulation 2023/959.","details":"Under EU ETS Directive 2003/87/EC as amended by 2023/959, maritime emissions for voyages to/from EU ports must be covered. Fleet exposure: estimated 42,000 EU Allowances (EUAs) at current price €85/EUA = €3.57M obligation. Vessels affected: MAERSK EDINBURGH, EURONAV DANUBE, MINERVA SOPHIA, CMA CGM BOSPHORUS, MSC AURORA, TORM HELLAS, CONSTANTA SPIRIT, DANUBIA STAR. MRV data from Thetis-MRV must reconcile with ETS reporting.","confidence":95,"generatedAt":"2026-03-26T12:00:00Z","actionItems":["Verify EU MRV emissions data in Thetis-MRV for all 8 vessels with EU port calls","Purchase 42,000 EUAs before April 30 deadline at current spot price","Implement FuelEU Maritime preparedness for 2025 well-to-wake intensity targets","Update voyage P&L models to include EU ETS cost per voyage for commercial team"],"affectedVessels":["MAERSK EDINBURGH","EURONAV DANUBE","MINERVA SOPHIA","CMA CGM BOSPHORUS","MSC AURORA","TORM HELLAS","CONSTANTA SPIRIT","DANUBIA STAR"]},{"id":4,"title":"Predictive Maintenance Alert — PACIFIC BASIN TIANJIN Stern Tube","category":"Maintenance","severity":"Warning","summary":"ML vibration analysis predicts 73% probability of stern tube bearing failure within 45 days. ClassNK Rule Part C 5.2 requires docking survey. Tanjung Priok offers lowest-cost repair window.","details":"SKF Copperhead vibration monitoring trend: propeller shaft 2x RPM harmonic increasing at 0.3 mm/s per week (current: 4.2 mm/s, ClassNK limit: 4.5 mm/s). Pattern matches pre-failure signature from fleet database (87% match to PACIFIC BASIN WUHAN failure 2024). Stern tube oil consumption: 1.2L/day (normal: 0.3L/day). PT United Shipyard Tanjung Priok quoted $95K for emergency docking incl. bearing replacement. Lead time for Wartsila lip seal assembly: 14 days.","confidence":73,"generatedAt":"2026-03-26T11:00:00Z","actionItems":["Schedule emergency docking at PT United Shipyard Tanjung Priok (earliest slot: April 8)","Order replacement Wartsila lip seal assembly — DDP Jakarta (14-day lead)","Increase vibration monitoring to 4-hour intervals","Prepare ClassNK surveyor request for tail shaft survey per Rule Part C 5.2"],"affectedVessels":["PACIFIC BASIN TIANJIN"]}]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "vessels": [
3
+ {
4
+ "id": 1,
5
+ "name": "CONSTANTA SPIRIT",
6
+ "imo": "9732847",
7
+ "mmsi": "264700100",
8
+ "vesselType": "bulk",
9
+ "shipClass": "Handymax",
10
+ "flag": "Romania",
11
+ "yearBuilt": 2019,
12
+ "grossTonnage": 33400,
13
+ "deadweight": 58000,
14
+ "length": 190,
15
+ "beam": 32.26,
16
+ "draft": 12.8,
17
+ "status": "at_sea",
18
+ "fleetId": 1,
19
+ "currentLat": 43.18,
20
+ "currentLon": 28.59,
21
+ "currentSpeed": 12.4,
22
+ "currentHeading": 195,
23
+ "lastPort": "Constanta",
24
+ "nextPort": "Istanbul",
25
+ "eta": "2026-03-29",
26
+ "fuelConsumptionDaily": 28,
27
+ "co2EmissionsDaily": 87.2,
28
+ "ciiRating": "B",
29
+ "ciiValue": 5.82,
30
+ "attainedCII": 5.82,
31
+ "requiredCII": 6.45,
32
+ "hullCondition": 91,
33
+ "engineHealth": 94,
34
+ "maintenanceScore": 90,
35
+ "tce": 18200,
36
+ "utilization": 92,
37
+ "eexi": 7.1,
38
+ "tradeLane": "Black Sea — Marmara",
39
+ "operator": "Navrom SA",
40
+ "classificationSociety": "Bureau Veritas",
41
+ "builder": "Daewoo Shipbuilding"
42
+ },
43
+ {
44
+ "id": 2,
45
+ "name": "MARE NIGRUM",
46
+ "imo": "9781234",
47
+ "mmsi": "264700200",
48
+ "vesselType": "tanker",
49
+ "shipClass": "Aframax",
50
+ "flag": "Romania",
51
+ "yearBuilt": 2020,
52
+ "grossTonnage": 62500,
53
+ "deadweight": 115000,
54
+ "length": 250,
55
+ "beam": 44,
56
+ "draft": 15.2,
57
+ "status": "at_sea",
58
+ "fleetId": 1,
59
+ "currentLat": 41.02,
60
+ "currentLon": 29.01,
61
+ "currentSpeed": 10.8,
62
+ "currentHeading": 210,
63
+ "lastPort": "Constanta",
64
+ "nextPort": "Augusta",
65
+ "eta": "2026-04-02",
66
+ "fuelConsumptionDaily": 52,
67
+ "co2EmissionsDaily": 161.9,
68
+ "ciiRating": "A",
69
+ "ciiValue": 4.21,
70
+ "attainedCII": 4.21,
71
+ "requiredCII": 5.88,
72
+ "hullCondition": 95,
73
+ "engineHealth": 96,
74
+ "maintenanceScore": 94,
75
+ "tce": 28500,
76
+ "utilization": 96,
77
+ "eexi": 5.4,
78
+ "tradeLane": "Black Sea — Mediterranean",
79
+ "operator": "Petrom Marine",
80
+ "classificationSociety": "Lloyd's Register",
81
+ "builder": "Samsung Heavy Industries"
82
+ },
83
+ {
84
+ "id": 3,
85
+ "name": "COSCO SHANGHAI",
86
+ "imo": "9795432",
87
+ "mmsi": "413456780",
88
+ "vesselType": "container",
89
+ "shipClass": "Neo-Panamax",
90
+ "flag": "China",
91
+ "yearBuilt": 2021,
92
+ "grossTonnage": 115000,
93
+ "deadweight": 136000,
94
+ "length": 366,
95
+ "beam": 51.2,
96
+ "draft": 16.0,
97
+ "status": "at_sea",
98
+ "fleetId": 2,
99
+ "currentLat": 34.05,
100
+ "currentLon": -152.3,
101
+ "currentSpeed": 19.8,
102
+ "currentHeading": 275,
103
+ "lastPort": "Ningbo-Zhoushan",
104
+ "nextPort": "Long Beach",
105
+ "eta": "2026-04-03",
106
+ "fuelConsumptionDaily": 195,
107
+ "co2EmissionsDaily": 607.2,
108
+ "ciiRating": "B",
109
+ "ciiValue": 6.12,
110
+ "attainedCII": 6.12,
111
+ "requiredCII": 7.35,
112
+ "hullCondition": 96,
113
+ "engineHealth": 97,
114
+ "maintenanceScore": 95,
115
+ "tce": 31200,
116
+ "utilization": 97,
117
+ "eexi": 6.8,
118
+ "tradeLane": "Trans-Pacific Eastbound",
119
+ "operator": "COSCO Shipping Lines",
120
+ "classificationSociety": "China Classification Society",
121
+ "builder": "Jiangsu New Yangzi Shipbuilding"
122
+ },
123
+ {
124
+ "id": 4,
125
+ "name": "NORDIC WOLVERINE",
126
+ "imo": "9834567",
127
+ "mmsi": "258765000",
128
+ "vesselType": "tanker",
129
+ "shipClass": "VLCC",
130
+ "flag": "Norway",
131
+ "yearBuilt": 2022,
132
+ "grossTonnage": 160000,
133
+ "deadweight": 300000,
134
+ "length": 333,
135
+ "beam": 60,
136
+ "draft": 22.5,
137
+ "status": "at_sea",
138
+ "fleetId": 4,
139
+ "currentLat": 26.2,
140
+ "currentLon": 56.3,
141
+ "currentSpeed": 14.1,
142
+ "currentHeading": 90,
143
+ "lastPort": "Ras Tanura",
144
+ "nextPort": "Ningbo-Zhoushan",
145
+ "eta": "2026-04-15",
146
+ "fuelConsumptionDaily": 85,
147
+ "co2EmissionsDaily": 264.7,
148
+ "ciiRating": "B",
149
+ "ciiValue": 2.18,
150
+ "attainedCII": 2.18,
151
+ "requiredCII": 2.95,
152
+ "hullCondition": 98,
153
+ "engineHealth": 99,
154
+ "maintenanceScore": 97,
155
+ "tce": 42100,
156
+ "utilization": 98,
157
+ "eexi": 4.2,
158
+ "tradeLane": "AG — Far East",
159
+ "operator": "Frontline Ltd",
160
+ "classificationSociety": "DNV",
161
+ "builder": "Hyundai Heavy Industries"
162
+ },
163
+ {
164
+ "id": 5,
165
+ "name": "OLDENDORFF BRISBANE",
166
+ "imo": "9756789",
167
+ "mmsi": "211345600",
168
+ "vesselType": "bulk",
169
+ "shipClass": "Capesize",
170
+ "flag": "Germany",
171
+ "yearBuilt": 2018,
172
+ "grossTonnage": 92000,
173
+ "deadweight": 180000,
174
+ "length": 292,
175
+ "beam": 45,
176
+ "draft": 18.2,
177
+ "status": "at_sea",
178
+ "fleetId": 3,
179
+ "currentLat": -33.9,
180
+ "currentLon": 18.4,
181
+ "currentSpeed": 13.2,
182
+ "currentHeading": 210,
183
+ "lastPort": "Richards Bay",
184
+ "nextPort": "Qingdao",
185
+ "eta": "2026-04-18",
186
+ "fuelConsumptionDaily": 48,
187
+ "co2EmissionsDaily": 149.5,
188
+ "ciiRating": "C",
189
+ "ciiValue": 4.52,
190
+ "attainedCII": 4.52,
191
+ "requiredCII": 4.1,
192
+ "hullCondition": 82,
193
+ "engineHealth": 85,
194
+ "maintenanceScore": 80,
195
+ "tce": 22800,
196
+ "utilization": 90,
197
+ "eexi": 9.1,
198
+ "tradeLane": "South Africa — China Coal",
199
+ "operator": "Oldendorff Carriers",
200
+ "classificationSociety": "Germanischer Lloyd",
201
+ "builder": "Imabari Shipbuilding"
202
+ },
203
+ {
204
+ "id": 6,
205
+ "name": "MAERSK EDINBURGH",
206
+ "imo": "9812345",
207
+ "mmsi": "219018600",
208
+ "vesselType": "container",
209
+ "shipClass": "Triple-E",
210
+ "flag": "Denmark",
211
+ "yearBuilt": 2023,
212
+ "grossTonnage": 214000,
213
+ "deadweight": 198000,
214
+ "length": 400,
215
+ "beam": 58.6,
216
+ "draft": 16.5,
217
+ "status": "at_sea",
218
+ "fleetId": 2,
219
+ "currentLat": 1.3,
220
+ "currentLon": 103.8,
221
+ "currentSpeed": 16.5,
222
+ "currentHeading": 350,
223
+ "lastPort": "Singapore",
224
+ "nextPort": "Rotterdam",
225
+ "eta": "2026-04-14",
226
+ "fuelConsumptionDaily": 180,
227
+ "co2EmissionsDaily": 282.6,
228
+ "ciiRating": "A",
229
+ "ciiValue": 3.45,
230
+ "attainedCII": 3.45,
231
+ "requiredCII": 5.12,
232
+ "hullCondition": 99,
233
+ "engineHealth": 99,
234
+ "maintenanceScore": 98,
235
+ "tce": 38500,
236
+ "utilization": 99,
237
+ "eexi": 4.1,
238
+ "tradeLane": "Asia — Europe (AE7)",
239
+ "operator": "Maersk Line",
240
+ "classificationSociety": "DNV",
241
+ "builder": "Daewoo Shipbuilding"
242
+ },
243
+ {
244
+ "id": 7,
245
+ "name": "GALATA BRIDGE",
246
+ "imo": "9745678",
247
+ "mmsi": "271001234",
248
+ "vesselType": "bulk",
249
+ "shipClass": "Supramax",
250
+ "flag": "Turkey",
251
+ "yearBuilt": 2017,
252
+ "grossTonnage": 32000,
253
+ "deadweight": 56000,
254
+ "length": 190,
255
+ "beam": 32.26,
256
+ "draft": 12.8,
257
+ "status": "in_port",
258
+ "fleetId": 1,
259
+ "currentLat": 44.17,
260
+ "currentLon": 28.65,
261
+ "currentSpeed": 0,
262
+ "currentHeading": 180,
263
+ "lastPort": "Novorossiysk",
264
+ "nextPort": "Constanta",
265
+ "eta": "2026-03-28",
266
+ "fuelConsumptionDaily": 0,
267
+ "co2EmissionsDaily": 0,
268
+ "ciiRating": "B",
269
+ "ciiValue": 5.55,
270
+ "attainedCII": 5.55,
271
+ "requiredCII": 6.45,
272
+ "hullCondition": 85,
273
+ "engineHealth": 88,
274
+ "maintenanceScore": 84,
275
+ "tce": 15600,
276
+ "utilization": 87,
277
+ "eexi": 7.8,
278
+ "tradeLane": "Black Sea Intra-Regional",
279
+ "operator": "Arkas Holding",
280
+ "classificationSociety": "Turkish Lloyd",
281
+ "builder": "Oshima Shipbuilding"
282
+ },
283
+ {
284
+ "id": 8,
285
+ "name": "EURONAV DANUBE",
286
+ "imo": "9823456",
287
+ "mmsi": "205456000",
288
+ "vesselType": "tanker",
289
+ "shipClass": "Suezmax",
290
+ "flag": "Belgium",
291
+ "yearBuilt": 2021,
292
+ "grossTonnage": 82000,
293
+ "deadweight": 157000,
294
+ "length": 274,
295
+ "beam": 48,
296
+ "draft": 17.1,
297
+ "status": "at_sea",
298
+ "fleetId": 3,
299
+ "currentLat": 42.5,
300
+ "currentLon": -38.7,
301
+ "currentSpeed": 14.2,
302
+ "currentHeading": 85,
303
+ "lastPort": "Bonny Terminal",
304
+ "nextPort": "Rotterdam",
305
+ "eta": "2026-04-05",
306
+ "fuelConsumptionDaily": 58,
307
+ "co2EmissionsDaily": 180.6,
308
+ "ciiRating": "A",
309
+ "ciiValue": 3.89,
310
+ "attainedCII": 3.89,
311
+ "requiredCII": 5.22,
312
+ "hullCondition": 97,
313
+ "engineHealth": 96,
314
+ "maintenanceScore": 95,
315
+ "tce": 34200,
316
+ "utilization": 96,
317
+ "eexi": 4.8,
318
+ "tradeLane": "WAF — NW Europe",
319
+ "operator": "Euronav NV",
320
+ "classificationSociety": "Bureau Veritas",
321
+ "builder": "Samsung Heavy Industries"
322
+ },
323
+ {
324
+ "id": 9,
325
+ "name": "PACIFIC BASIN TIANJIN",
326
+ "imo": "9767890",
327
+ "mmsi": "477234100",
328
+ "vesselType": "bulk",
329
+ "shipClass": "Ultramax",
330
+ "flag": "Hong Kong",
331
+ "yearBuilt": 2020,
332
+ "grossTonnage": 38000,
333
+ "deadweight": 64000,
334
+ "length": 200,
335
+ "beam": 32.26,
336
+ "draft": 13.5,
337
+ "status": "at_sea",
338
+ "fleetId": 2,
339
+ "currentLat": -5.8,
340
+ "currentLon": 106.8,
341
+ "currentSpeed": 11.8,
342
+ "currentHeading": 165,
343
+ "lastPort": "Hay Point",
344
+ "nextPort": "Tanjung Priok",
345
+ "eta": "2026-03-30",
346
+ "fuelConsumptionDaily": 30,
347
+ "co2EmissionsDaily": 93.4,
348
+ "ciiRating": "B",
349
+ "ciiValue": 5.12,
350
+ "attainedCII": 5.12,
351
+ "requiredCII": 6.02,
352
+ "hullCondition": 90,
353
+ "engineHealth": 92,
354
+ "maintenanceScore": 88,
355
+ "tce": 16800,
356
+ "utilization": 91,
357
+ "eexi": 6.9,
358
+ "tradeLane": "Australia — SE Asia",
359
+ "operator": "Pacific Basin Shipping",
360
+ "classificationSociety": "ClassNK",
361
+ "builder": "Tsuneishi Shipbuilding"
362
+ },
363
+ {
364
+ "id": 10,
365
+ "name": "TORM HELLAS",
366
+ "imo": "9698765",
367
+ "mmsi": "219019800",
368
+ "vesselType": "tanker",
369
+ "shipClass": "MR2 Product Tanker",
370
+ "flag": "Denmark",
371
+ "yearBuilt": 2014,
372
+ "grossTonnage": 30000,
373
+ "deadweight": 49000,
374
+ "length": 183,
375
+ "beam": 32.2,
376
+ "draft": 13.1,
377
+ "status": "maintenance",
378
+ "fleetId": 1,
379
+ "currentLat": 44.43,
380
+ "currentLon": 28.66,
381
+ "currentSpeed": 0,
382
+ "currentHeading": 0,
383
+ "lastPort": "Constanta",
384
+ "nextPort": "Constanta",
385
+ "eta": "2026-04-15",
386
+ "fuelConsumptionDaily": 0,
387
+ "co2EmissionsDaily": 0,
388
+ "ciiRating": "D",
389
+ "ciiValue": 9.82,
390
+ "attainedCII": 9.82,
391
+ "requiredCII": 6.88,
392
+ "hullCondition": 62,
393
+ "engineHealth": 58,
394
+ "maintenanceScore": 55,
395
+ "tce": 0,
396
+ "utilization": 45,
397
+ "eexi": 14.2,
398
+ "tradeLane": "Drydock — Constanta Shipyard",
399
+ "operator": "TORM A/S",
400
+ "classificationSociety": "Lloyd's Register",
401
+ "builder": "Guangzhou Shipyard"
402
+ },
403
+ {
404
+ "id": 11,
405
+ "name": "MSC AURORA",
406
+ "imo": "9845678",
407
+ "mmsi": "353456700",
408
+ "vesselType": "container",
409
+ "shipClass": "Megamax-24",
410
+ "flag": "Panama",
411
+ "yearBuilt": 2024,
412
+ "grossTonnage": 228000,
413
+ "deadweight": 220000,
414
+ "length": 400,
415
+ "beam": 61.5,
416
+ "draft": 17.4,
417
+ "status": "at_sea",
418
+ "fleetId": 2,
419
+ "currentLat": 22.3,
420
+ "currentLon": 114.2,
421
+ "currentSpeed": 21.2,
422
+ "currentHeading": 315,
423
+ "lastPort": "Yantian",
424
+ "nextPort": "Tanjung Pelepas",
425
+ "eta": "2026-03-31",
426
+ "fuelConsumptionDaily": 225,
427
+ "co2EmissionsDaily": 700.6,
428
+ "ciiRating": "A",
429
+ "ciiValue": 3.12,
430
+ "attainedCII": 3.12,
431
+ "requiredCII": 4.85,
432
+ "hullCondition": 99,
433
+ "engineHealth": 99,
434
+ "maintenanceScore": 99,
435
+ "tce": 35800,
436
+ "utilization": 98,
437
+ "eexi": 3.9,
438
+ "tradeLane": "Far East — Mediterranean",
439
+ "operator": "MSC Mediterranean Shipping",
440
+ "classificationSociety": "RINA",
441
+ "builder": "Hyundai Samho Heavy Industries"
442
+ },
443
+ {
444
+ "id": 12,
445
+ "name": "DANUBIA STAR",
446
+ "imo": "9712345",
447
+ "mmsi": "264700300",
448
+ "vesselType": "cargo",
449
+ "shipClass": "River-Sea Type",
450
+ "flag": "Romania",
451
+ "yearBuilt": 2016,
452
+ "grossTonnage": 5800,
453
+ "deadweight": 7200,
454
+ "length": 140,
455
+ "beam": 16.8,
456
+ "draft": 4.5,
457
+ "status": "at_sea",
458
+ "fleetId": 1,
459
+ "currentLat": 45.15,
460
+ "currentLon": 29.68,
461
+ "currentSpeed": 8.2,
462
+ "currentHeading": 120,
463
+ "lastPort": "Galati",
464
+ "nextPort": "Constanta",
465
+ "eta": "2026-03-28",
466
+ "fuelConsumptionDaily": 8,
467
+ "co2EmissionsDaily": 24.9,
468
+ "ciiRating": "B",
469
+ "ciiValue": 5.65,
470
+ "attainedCII": 5.65,
471
+ "requiredCII": 6.88,
472
+ "hullCondition": 78,
473
+ "engineHealth": 80,
474
+ "maintenanceScore": 76,
475
+ "tce": 8500,
476
+ "utilization": 82,
477
+ "eexi": 8.4,
478
+ "tradeLane": "Danube River — Black Sea",
479
+ "operator": "Navrom SA",
480
+ "classificationSociety": "Romanian Naval Authority",
481
+ "builder": "Santierul Naval Galati"
482
+ },
483
+ {
484
+ "id": 13,
485
+ "name": "STENA POLARIS",
486
+ "imo": "9856789",
487
+ "mmsi": "265789000",
488
+ "vesselType": "tanker",
489
+ "shipClass": "IMOIIMAX",
490
+ "flag": "Sweden",
491
+ "yearBuilt": 2022,
492
+ "grossTonnage": 25000,
493
+ "deadweight": 37000,
494
+ "length": 176,
495
+ "beam": 32.2,
496
+ "draft": 12.5,
497
+ "status": "at_sea",
498
+ "fleetId": 1,
499
+ "currentLat": 40.65,
500
+ "currentLon": 27.95,
501
+ "currentSpeed": 11.5,
502
+ "currentHeading": 45,
503
+ "lastPort": "Tüpraş İzmit",
504
+ "nextPort": "Constanta",
505
+ "eta": "2026-03-29",
506
+ "fuelConsumptionDaily": 22,
507
+ "co2EmissionsDaily": 68.5,
508
+ "ciiRating": "A",
509
+ "ciiValue": 4.15,
510
+ "attainedCII": 4.15,
511
+ "requiredCII": 5.95,
512
+ "hullCondition": 97,
513
+ "engineHealth": 96,
514
+ "maintenanceScore": 95,
515
+ "tce": 19800,
516
+ "utilization": 93,
517
+ "eexi": 5.2,
518
+ "tradeLane": "Marmara — Black Sea Products",
519
+ "operator": "Stena Bulk AB",
520
+ "classificationSociety": "DNV",
521
+ "builder": "Guangzhou Shipyard International"
522
+ },
523
+ {
524
+ "id": 14,
525
+ "name": "CMA CGM BOSPHORUS",
526
+ "imo": "9867890",
527
+ "mmsi": "228345600",
528
+ "vesselType": "container",
529
+ "shipClass": "Panamax",
530
+ "flag": "France",
531
+ "yearBuilt": 2018,
532
+ "grossTonnage": 52000,
533
+ "deadweight": 63000,
534
+ "length": 265,
535
+ "beam": 32.2,
536
+ "draft": 13.5,
537
+ "status": "anchored",
538
+ "fleetId": 1,
539
+ "currentLat": 41.18,
540
+ "currentLon": 29.08,
541
+ "currentSpeed": 0,
542
+ "currentHeading": 90,
543
+ "lastPort": "Piraeus",
544
+ "nextPort": "Constanta",
545
+ "eta": "2026-03-29",
546
+ "fuelConsumptionDaily": 0,
547
+ "co2EmissionsDaily": 0,
548
+ "ciiRating": "B",
549
+ "ciiValue": 5.88,
550
+ "attainedCII": 5.88,
551
+ "requiredCII": 6.95,
552
+ "hullCondition": 89,
553
+ "engineHealth": 91,
554
+ "maintenanceScore": 88,
555
+ "tce": 21500,
556
+ "utilization": 88,
557
+ "eexi": 7.2,
558
+ "tradeLane": "Med — Black Sea Feeder",
559
+ "operator": "CMA CGM Group",
560
+ "classificationSociety": "Bureau Veritas",
561
+ "builder": "Hanjin Heavy Industries"
562
+ },
563
+ {
564
+ "id": 15,
565
+ "name": "VALE BRASIL",
566
+ "imo": "9878901",
567
+ "mmsi": "710567800",
568
+ "vesselType": "bulk",
569
+ "shipClass": "Valemax (VLOC)",
570
+ "flag": "Brazil",
571
+ "yearBuilt": 2023,
572
+ "grossTonnage": 200000,
573
+ "deadweight": 400000,
574
+ "length": 362,
575
+ "beam": 65,
576
+ "draft": 23.0,
577
+ "status": "at_sea",
578
+ "fleetId": 3,
579
+ "currentLat": -2.5,
580
+ "currentLon": -44.3,
581
+ "currentSpeed": 13.5,
582
+ "currentHeading": 30,
583
+ "lastPort": "Ponta da Madeira",
584
+ "nextPort": "Qingdao",
585
+ "eta": "2026-04-22",
586
+ "fuelConsumptionDaily": 75,
587
+ "co2EmissionsDaily": 233.6,
588
+ "ciiRating": "A",
589
+ "ciiValue": 1.85,
590
+ "attainedCII": 1.85,
591
+ "requiredCII": 2.62,
592
+ "hullCondition": 99,
593
+ "engineHealth": 98,
594
+ "maintenanceScore": 97,
595
+ "tce": 28900,
596
+ "utilization": 95,
597
+ "eexi": 3.2,
598
+ "tradeLane": "Brazil — China Iron Ore",
599
+ "operator": "Vale SA",
600
+ "classificationSociety": "DNV",
601
+ "builder": "CSSC Dalian Shipbuilding"
602
+ },
603
+ {
604
+ "id": 16,
605
+ "name": "ARCTIC AURORA",
606
+ "imo": "9889012",
607
+ "mmsi": "258900100",
608
+ "vesselType": "tanker",
609
+ "shipClass": "Arc7 LNG Carrier",
610
+ "flag": "Norway",
611
+ "yearBuilt": 2024,
612
+ "grossTonnage": 129000,
613
+ "deadweight": 95000,
614
+ "length": 299,
615
+ "beam": 50,
616
+ "draft": 12.0,
617
+ "status": "at_sea",
618
+ "fleetId": 4,
619
+ "currentLat": 68.95,
620
+ "currentLon": 33.05,
621
+ "currentSpeed": 16.8,
622
+ "currentHeading": 270,
623
+ "lastPort": "Sabetta",
624
+ "nextPort": "Zeebrugge",
625
+ "eta": "2026-04-06",
626
+ "fuelConsumptionDaily": 120,
627
+ "co2EmissionsDaily": 280.8,
628
+ "ciiRating": "A",
629
+ "ciiValue": 3.55,
630
+ "attainedCII": 3.55,
631
+ "requiredCII": 4.82,
632
+ "hullCondition": 99,
633
+ "engineHealth": 99,
634
+ "maintenanceScore": 98,
635
+ "tce": 52000,
636
+ "utilization": 97,
637
+ "eexi": 3.8,
638
+ "tradeLane": "NSR — Yamal LNG",
639
+ "operator": "MOL/Teekay LNG",
640
+ "classificationSociety": "DNV",
641
+ "builder": "Daewoo Shipbuilding"
642
+ },
643
+ {
644
+ "id": 17,
645
+ "name": "EVERGREEN TRIUMPH",
646
+ "imo": "9890123",
647
+ "mmsi": "416234500",
648
+ "vesselType": "container",
649
+ "shipClass": "Neo-Panamax",
650
+ "flag": "Taiwan",
651
+ "yearBuilt": 2022,
652
+ "grossTonnage": 120000,
653
+ "deadweight": 140000,
654
+ "length": 334,
655
+ "beam": 51.2,
656
+ "draft": 16.0,
657
+ "status": "at_sea",
658
+ "fleetId": 2,
659
+ "currentLat": 15.4,
660
+ "currentLon": 120.6,
661
+ "currentSpeed": 18.5,
662
+ "currentHeading": 180,
663
+ "lastPort": "Kaohsiung",
664
+ "nextPort": "Port Klang",
665
+ "eta": "2026-04-03",
666
+ "fuelConsumptionDaily": 175,
667
+ "co2EmissionsDaily": 545.0,
668
+ "ciiRating": "B",
669
+ "ciiValue": 5.95,
670
+ "attainedCII": 5.95,
671
+ "requiredCII": 7.12,
672
+ "hullCondition": 97,
673
+ "engineHealth": 96,
674
+ "maintenanceScore": 95,
675
+ "tce": 27400,
676
+ "utilization": 95,
677
+ "eexi": 6.5,
678
+ "tradeLane": "Intra-Asia",
679
+ "operator": "Evergreen Marine Corp",
680
+ "classificationSociety": "ClassNK",
681
+ "builder": "Samsung Heavy Industries"
682
+ },
683
+ {
684
+ "id": 18,
685
+ "name": "MINERVA SOPHIA",
686
+ "imo": "9801234",
687
+ "mmsi": "240567800",
688
+ "vesselType": "tanker",
689
+ "shipClass": "Suezmax",
690
+ "flag": "Greece",
691
+ "yearBuilt": 2019,
692
+ "grossTonnage": 82000,
693
+ "deadweight": 158000,
694
+ "length": 274,
695
+ "beam": 48,
696
+ "draft": 17.1,
697
+ "status": "at_sea",
698
+ "fleetId": 1,
699
+ "currentLat": 37.0,
700
+ "currentLon": 26.5,
701
+ "currentSpeed": 13.4,
702
+ "currentHeading": 30,
703
+ "lastPort": "Ceyhan",
704
+ "nextPort": "Trieste",
705
+ "eta": "2026-04-01",
706
+ "fuelConsumptionDaily": 55,
707
+ "co2EmissionsDaily": 171.3,
708
+ "ciiRating": "B",
709
+ "ciiValue": 5.42,
710
+ "attainedCII": 5.42,
711
+ "requiredCII": 5.88,
712
+ "hullCondition": 88,
713
+ "engineHealth": 90,
714
+ "maintenanceScore": 86,
715
+ "tce": 31800,
716
+ "utilization": 93,
717
+ "eexi": 6.2,
718
+ "tradeLane": "Black Sea — Med Crude",
719
+ "operator": "Minerva Marine Inc",
720
+ "classificationSociety": "Lloyd's Register",
721
+ "builder": "Hyundai Heavy Industries"
722
+ }
723
+ ],
724
+ "forecast-modules": [
725
+ {
726
+ "id": 1,
727
+ "title": "Fleet Average TCE",
728
+ "metric": "$/day",
729
+ "currentValue": 24850,
730
+ "forecastValue": 27200,
731
+ "forecastDate": "2026-06-30",
732
+ "confidence": 78,
733
+ "trend": "up",
734
+ "dataPoints": [
735
+ {
736
+ "date": "2025-10",
737
+ "value": 21800
738
+ },
739
+ {
740
+ "date": "2025-11",
741
+ "value": 22400
742
+ },
743
+ {
744
+ "date": "2025-12",
745
+ "value": 23100
746
+ },
747
+ {
748
+ "date": "2026-01",
749
+ "value": 23600
750
+ },
751
+ {
752
+ "date": "2026-02",
753
+ "value": 24200
754
+ },
755
+ {
756
+ "date": "2026-03",
757
+ "value": 24850
758
+ },
759
+ {
760
+ "date": "2026-04",
761
+ "value": 25500,
762
+ "forecast": 25500
763
+ },
764
+ {
765
+ "date": "2026-05",
766
+ "value": 26400,
767
+ "forecast": 26400
768
+ },
769
+ {
770
+ "date": "2026-06",
771
+ "value": 27200,
772
+ "forecast": 27200
773
+ }
774
+ ]
775
+ },
776
+ {
777
+ "id": 2,
778
+ "title": "Fleet CII (gCO2/DWT·nm)",
779
+ "metric": "gCO2/DWT·nm",
780
+ "currentValue": 4.85,
781
+ "forecastValue": 4.42,
782
+ "forecastDate": "2026-06-30",
783
+ "confidence": 72,
784
+ "trend": "down",
785
+ "dataPoints": [
786
+ {
787
+ "date": "2025-10",
788
+ "value": 5.62
789
+ },
790
+ {
791
+ "date": "2025-11",
792
+ "value": 5.41
793
+ },
794
+ {
795
+ "date": "2025-12",
796
+ "value": 5.28
797
+ },
798
+ {
799
+ "date": "2026-01",
800
+ "value": 5.12
801
+ },
802
+ {
803
+ "date": "2026-02",
804
+ "value": 4.98
805
+ },
806
+ {
807
+ "date": "2026-03",
808
+ "value": 4.85
809
+ },
810
+ {
811
+ "date": "2026-04",
812
+ "value": 4.71,
813
+ "forecast": 4.71
814
+ },
815
+ {
816
+ "date": "2026-05",
817
+ "value": 4.55,
818
+ "forecast": 4.55
819
+ },
820
+ {
821
+ "date": "2026-06",
822
+ "value": 4.42,
823
+ "forecast": 4.42
824
+ }
825
+ ]
826
+ },
827
+ {
828
+ "id": 3,
829
+ "title": "Fleet Utilization Rate",
830
+ "metric": "%",
831
+ "currentValue": 91.8,
832
+ "forecastValue": 93.5,
833
+ "forecastDate": "2026-06-30",
834
+ "confidence": 85,
835
+ "trend": "up",
836
+ "dataPoints": [
837
+ {
838
+ "date": "2025-10",
839
+ "value": 88.5
840
+ },
841
+ {
842
+ "date": "2025-11",
843
+ "value": 89.2
844
+ },
845
+ {
846
+ "date": "2025-12",
847
+ "value": 89.8
848
+ },
849
+ {
850
+ "date": "2026-01",
851
+ "value": 90.4
852
+ },
853
+ {
854
+ "date": "2026-02",
855
+ "value": 91.1
856
+ },
857
+ {
858
+ "date": "2026-03",
859
+ "value": 91.8
860
+ },
861
+ {
862
+ "date": "2026-04",
863
+ "value": 92.2,
864
+ "forecast": 92.2
865
+ },
866
+ {
867
+ "date": "2026-05",
868
+ "value": 92.8,
869
+ "forecast": 92.8
870
+ },
871
+ {
872
+ "date": "2026-06",
873
+ "value": 93.5,
874
+ "forecast": 93.5
875
+ }
876
+ ]
877
+ },
878
+ {
879
+ "id": 4,
880
+ "title": "Baltic Dry Index Correlation",
881
+ "metric": "BDI Points",
882
+ "currentValue": 1842,
883
+ "forecastValue": 2150,
884
+ "forecastDate": "2026-06-30",
885
+ "confidence": 68,
886
+ "trend": "up",
887
+ "dataPoints": [
888
+ {
889
+ "date": "2025-10",
890
+ "value": 1520
891
+ },
892
+ {
893
+ "date": "2025-11",
894
+ "value": 1580
895
+ },
896
+ {
897
+ "date": "2025-12",
898
+ "value": 1650
899
+ },
900
+ {
901
+ "date": "2026-01",
902
+ "value": 1720
903
+ },
904
+ {
905
+ "date": "2026-02",
906
+ "value": 1780
907
+ },
908
+ {
909
+ "date": "2026-03",
910
+ "value": 1842
911
+ },
912
+ {
913
+ "date": "2026-04",
914
+ "value": 1920,
915
+ "forecast": 1920
916
+ },
917
+ {
918
+ "date": "2026-05",
919
+ "value": 2040,
920
+ "forecast": 2040
921
+ },
922
+ {
923
+ "date": "2026-06",
924
+ "value": 2150,
925
+ "forecast": 2150
926
+ }
927
+ ]
928
+ }
929
+ ],
930
+ "predictive-maintenance": [
931
+ {
932
+ "id": 1,
933
+ "vesselId": 9,
934
+ "vesselName": "PACIFIC BASIN TIANJIN",
935
+ "component": "Propeller Shaft Stern Tube Bearing",
936
+ "failureProbability": 73,
937
+ "predictedFailureDate": "2026-05-10",
938
+ "recommendedAction": "Schedule emergency docking for bearing replacement at PT United Shipyard Tanjung Priok",
939
+ "estimatedCost": 120000,
940
+ "confidence": 73,
941
+ "riskLevel": "High"
942
+ },
943
+ {
944
+ "id": 2,
945
+ "vesselId": 10,
946
+ "vesselName": "TORM HELLAS",
947
+ "component": "Main Engine Turbocharger (MAN TCA66)",
948
+ "failureProbability": 62,
949
+ "predictedFailureDate": "2026-06-15",
950
+ "recommendedAction": "Replace turbocharger cartridge during current Constanta Shipyard drydock",
951
+ "estimatedCost": 85000,
952
+ "confidence": 68,
953
+ "riskLevel": "High"
954
+ },
955
+ {
956
+ "id": 3,
957
+ "vesselId": 18,
958
+ "vesselName": "MINERVA SOPHIA",
959
+ "component": "Cargo Pump Mechanical Seal (Framo SD200)",
960
+ "failureProbability": 55,
961
+ "predictedFailureDate": "2026-07-20",
962
+ "recommendedAction": "Order spare seals and plan replacement during next discharge at Trieste",
963
+ "estimatedCost": 12000,
964
+ "confidence": 71,
965
+ "riskLevel": "Medium"
966
+ },
967
+ {
968
+ "id": 4,
969
+ "vesselId": 7,
970
+ "vesselName": "GALATA BRIDGE",
971
+ "component": "Ballast Water UV Reactor (Alfa Laval PureBallast)",
972
+ "failureProbability": 48,
973
+ "predictedFailureDate": "2026-08-01",
974
+ "recommendedAction": "Replace UV lamp assembly during scheduled BWTS maintenance at Constanta",
975
+ "estimatedCost": 35000,
976
+ "confidence": 65,
977
+ "riskLevel": "Medium"
978
+ },
979
+ {
980
+ "id": 5,
981
+ "vesselId": 5,
982
+ "vesselName": "OLDENDORFF BRISBANE",
983
+ "component": "Auxiliary Boiler Tubes (Aalborg AQ-12)",
984
+ "failureProbability": 41,
985
+ "predictedFailureDate": "2026-09-10",
986
+ "recommendedAction": "Conduct ultrasonic thickness measurement during next port stay at Qingdao",
987
+ "estimatedCost": 55000,
988
+ "confidence": 60,
989
+ "riskLevel": "Medium"
990
+ },
991
+ {
992
+ "id": 6,
993
+ "vesselId": 1,
994
+ "vesselName": "CONSTANTA SPIRIT",
995
+ "component": "Steering Gear Hydraulic Pump (Rolls-Royce)",
996
+ "failureProbability": 28,
997
+ "predictedFailureDate": "2026-11-15",
998
+ "recommendedAction": "Replace hydraulic pump seal kit during next scheduled Constanta port call",
999
+ "estimatedCost": 8000,
1000
+ "confidence": 58,
1001
+ "riskLevel": "Low"
1002
+ }
1003
+ ],
1004
+ "compliance-certificates": [
1005
+ {
1006
+ "id": 1,
1007
+ "vesselId": 10,
1008
+ "vesselName": "TORM HELLAS",
1009
+ "certificateType": "Safety Management Certificate (SMC)",
1010
+ "issuer": "Lloyd's Register",
1011
+ "issuedDate": "2022-06-15",
1012
+ "expiryDate": "2026-04-10",
1013
+ "status": "Expiring Soon",
1014
+ "daysUntilExpiry": 15,
1015
+ "regulation": "ISM Code Ch. 13"
1016
+ },
1017
+ {
1018
+ "id": 2,
1019
+ "vesselId": 4,
1020
+ "vesselName": "NORDIC WOLVERINE",
1021
+ "certificateType": "International Oil Pollution Prevention (IOPP)",
1022
+ "issuer": "DNV",
1023
+ "issuedDate": "2022-09-01",
1024
+ "expiryDate": "2027-09-01",
1025
+ "status": "Valid",
1026
+ "daysUntilExpiry": 524,
1027
+ "regulation": "MARPOL Annex I, Reg. 7"
1028
+ },
1029
+ {
1030
+ "id": 3,
1031
+ "vesselId": 5,
1032
+ "vesselName": "OLDENDORFF BRISBANE",
1033
+ "certificateType": "ISM Document of Compliance (DOC)",
1034
+ "issuer": "Germanischer Lloyd",
1035
+ "issuedDate": "2023-01-15",
1036
+ "expiryDate": "2026-05-15",
1037
+ "status": "Expiring Soon",
1038
+ "daysUntilExpiry": 50,
1039
+ "regulation": "ISM Code Ch. 13.2"
1040
+ },
1041
+ {
1042
+ "id": 4,
1043
+ "vesselId": 3,
1044
+ "vesselName": "COSCO SHANGHAI",
1045
+ "certificateType": "SOLAS Safety Equipment Certificate (SEC)",
1046
+ "issuer": "China Classification Society",
1047
+ "issuedDate": "2023-03-20",
1048
+ "expiryDate": "2028-03-20",
1049
+ "status": "Valid",
1050
+ "daysUntilExpiry": 724,
1051
+ "regulation": "SOLAS Ch. I/Reg. 12"
1052
+ },
1053
+ {
1054
+ "id": 5,
1055
+ "vesselId": 6,
1056
+ "vesselName": "MAERSK EDINBURGH",
1057
+ "certificateType": "Energy Efficiency Existing Ship Index (EEXI)",
1058
+ "issuer": "DNV",
1059
+ "issuedDate": "2023-01-01",
1060
+ "expiryDate": "2028-01-01",
1061
+ "status": "Valid",
1062
+ "daysUntilExpiry": 645,
1063
+ "regulation": "MARPOL Annex VI Reg. 23"
1064
+ },
1065
+ {
1066
+ "id": 6,
1067
+ "vesselId": 18,
1068
+ "vesselName": "MINERVA SOPHIA",
1069
+ "certificateType": "International Air Pollution Prevention (IAPP)",
1070
+ "issuer": "Lloyd's Register",
1071
+ "issuedDate": "2021-03-30",
1072
+ "expiryDate": "2026-03-30",
1073
+ "status": "Expired",
1074
+ "daysUntilExpiry": -4,
1075
+ "regulation": "MARPOL Annex VI Reg. 6"
1076
+ },
1077
+ {
1078
+ "id": 7,
1079
+ "vesselId": 9,
1080
+ "vesselName": "PACIFIC BASIN TIANJIN",
1081
+ "certificateType": "Ballast Water Management (BWM)",
1082
+ "issuer": "ClassNK",
1083
+ "issuedDate": "2022-08-15",
1084
+ "expiryDate": "2027-08-15",
1085
+ "status": "Valid",
1086
+ "daysUntilExpiry": 507,
1087
+ "regulation": "BWM Convention Art. 9"
1088
+ },
1089
+ {
1090
+ "id": 8,
1091
+ "vesselId": 16,
1092
+ "vesselName": "ARCTIC AURORA",
1093
+ "certificateType": "Polar Ship Certificate (PSC)",
1094
+ "issuer": "DNV",
1095
+ "issuedDate": "2024-01-10",
1096
+ "expiryDate": "2029-01-10",
1097
+ "status": "Valid",
1098
+ "daysUntilExpiry": 1021,
1099
+ "regulation": "SOLAS Ch. XIV / Polar Code"
1100
+ },
1101
+ {
1102
+ "id": 9,
1103
+ "vesselId": 8,
1104
+ "vesselName": "EURONAV DANUBE",
1105
+ "certificateType": "International Sewage Pollution Prevention (ISPP)",
1106
+ "issuer": "Bureau Veritas",
1107
+ "issuedDate": "2023-05-10",
1108
+ "expiryDate": "2028-05-10",
1109
+ "status": "Valid",
1110
+ "daysUntilExpiry": 775,
1111
+ "regulation": "MARPOL Annex IV Reg. 5"
1112
+ },
1113
+ {
1114
+ "id": 10,
1115
+ "vesselId": 11,
1116
+ "vesselName": "MSC AURORA",
1117
+ "certificateType": "Energy Efficiency Management Plan (SEEMP Part III)",
1118
+ "issuer": "RINA",
1119
+ "issuedDate": "2024-03-01",
1120
+ "expiryDate": "2029-03-01",
1121
+ "status": "Valid",
1122
+ "daysUntilExpiry": 1070,
1123
+ "regulation": "MARPOL Annex VI Reg. 26"
1124
+ }
1125
+ ],
1126
+ "port-state-deficiencies": [
1127
+ {
1128
+ "id": 1,
1129
+ "vesselId": 10,
1130
+ "vesselName": "TORM HELLAS",
1131
+ "port": "Constanta",
1132
+ "inspectionDate": "2026-03-01",
1133
+ "deficiencyCode": "01302",
1134
+ "description": "Fire detection system — smoke detector in engine room No. 2 zone inoperative. Non-compliance with SOLAS Ch. II-2/Reg. 7.2.2.",
1135
+ "severity": "High",
1136
+ "status": "Open",
1137
+ "rectifiedDate": null,
1138
+ "mouRegime": "Paris MOU"
1139
+ },
1140
+ {
1141
+ "id": 2,
1142
+ "vesselId": 4,
1143
+ "vesselName": "NORDIC WOLVERINE",
1144
+ "port": "Fujairah",
1145
+ "inspectionDate": "2026-02-15",
1146
+ "deficiencyCode": "07410",
1147
+ "description": "MARPOL Annex I — oil water separator discharge exceeding 15 ppm limit. Sample analysis showed 22 ppm. OWS alarm not functioning.",
1148
+ "severity": "High",
1149
+ "status": "Rectified",
1150
+ "rectifiedDate": "2026-02-20",
1151
+ "mouRegime": "Riyadh MOU"
1152
+ },
1153
+ {
1154
+ "id": 3,
1155
+ "vesselId": 5,
1156
+ "vesselName": "OLDENDORFF BRISBANE",
1157
+ "port": "Qingdao",
1158
+ "inspectionDate": "2026-03-10",
1159
+ "deficiencyCode": "06110",
1160
+ "description": "Lifesaving appliances — lifeboat on-load release mechanism requires servicing per MSC.1/Circ.1206/Rev.2. Annual maintenance record incomplete.",
1161
+ "severity": "Medium",
1162
+ "status": "Open",
1163
+ "rectifiedDate": null,
1164
+ "mouRegime": "Tokyo MOU"
1165
+ },
1166
+ {
1167
+ "id": 4,
1168
+ "vesselId": 18,
1169
+ "vesselName": "MINERVA SOPHIA",
1170
+ "port": "Trieste",
1171
+ "inspectionDate": "2026-01-20",
1172
+ "deficiencyCode": "09510",
1173
+ "description": "MLC 2006 — crew rest hour records incomplete for Chief Officer and 2nd Engineer. Work/rest analysis shows potential non-compliance with Standard A2.3.",
1174
+ "severity": "Low",
1175
+ "status": "Rectified",
1176
+ "rectifiedDate": "2026-01-25",
1177
+ "mouRegime": "Paris MOU"
1178
+ },
1179
+ {
1180
+ "id": 5,
1181
+ "vesselId": 9,
1182
+ "vesselName": "PACIFIC BASIN TIANJIN",
1183
+ "port": "Tanjung Priok",
1184
+ "inspectionDate": "2026-03-05",
1185
+ "deficiencyCode": "04315",
1186
+ "description": "Navigation equipment — ECDIS backup arrangement not compliant with SOLAS Ch. V/Reg. 19.2.1.4. Backup ECDIS showing chart datum error.",
1187
+ "severity": "Medium",
1188
+ "status": "Open",
1189
+ "rectifiedDate": null,
1190
+ "mouRegime": "Tokyo MOU"
1191
+ },
1192
+ {
1193
+ "id": 6,
1194
+ "vesselId": 12,
1195
+ "vesselName": "DANUBIA STAR",
1196
+ "port": "Constanta",
1197
+ "inspectionDate": "2026-02-28",
1198
+ "deficiencyCode": "01520",
1199
+ "description": "Structural safety — wastage found on main deck plating exceeding 20% of original thickness. Class condition noted by Romanian Naval Authority.",
1200
+ "severity": "High",
1201
+ "status": "Open",
1202
+ "rectifiedDate": null,
1203
+ "mouRegime": "Paris MOU"
1204
+ }
1205
+ ],
1206
+ "ai-briefings": [
1207
+ {
1208
+ "id": 1,
1209
+ "title": "Black Sea Fleet CII Performance Analysis",
1210
+ "category": "Performance",
1211
+ "severity": "Warning",
1212
+ "summary": "Black Sea Division fleet-wide CII trending 8% above required thresholds. TORM HELLAS rated D and OLDENDORFF BRISBANE at C boundary — both at risk of operational restrictions under IMO MEPC.352(78) 2026 tightening.",
1213
+ "details": "9-month emission data analysis per MARPOL Annex VI Regulation 28 shows attained CII deterioration across 4 vessels. Primary contributors: TORM HELLAS (attained 9.82 vs required 6.88) and OLDENDORFF BRISBANE (4.52 vs 4.10). Hull fouling penalty estimated at 12-15% fuel increase. Constanta Shipyard drydock capacity available Q2 2026. Wind-assisted propulsion (Norsepower Rotor Sail) retrofit estimated ROI: 18 months.",
1214
+ "confidence": 91,
1215
+ "generatedAt": "2026-03-26T14:00:00Z",
1216
+ "actionItems": [
1217
+ "Submit CII Corrective Action Plan to flag state per MEPC.355(78) by June 2026",
1218
+ "Schedule hull cleaning for TORM HELLAS at Constanta Shipyard during current drydock",
1219
+ "Implement JIT arrival optimization for Bosporus transit to reduce idle time emissions",
1220
+ "Evaluate Norsepower Rotor Sail retrofit for OLDENDORFF BRISBANE (est. 8% fuel saving)"
1221
+ ],
1222
+ "affectedVessels": [
1223
+ "TORM HELLAS",
1224
+ "OLDENDORFF BRISBANE",
1225
+ "MINERVA SOPHIA"
1226
+ ]
1227
+ },
1228
+ {
1229
+ "id": 2,
1230
+ "title": "Bosporus Strait Congestion — Route Optimization Required",
1231
+ "category": "Operations",
1232
+ "severity": "Warning",
1233
+ "summary": "Turkish Straits VTS reporting 72-hour northbound transit delays. 23 vessels queued at southern anchorage. CMA CGM BOSPHORUS anchored since March 26. Revenue loss estimated at $45,000/day for detained fleet.",
1234
+ "details": "Kıyı Emniyeti (Turkish Coastal Safety) data shows abnormal congestion due to combined factors: (1) Russian grain export surge, (2) seasonal LPG traffic increase from Ceyhan, (3) maintenance at İstanbul Strait radar station. Historical analysis suggests congestion will persist 5-7 days. Alternative routing via Suez Canal adds 4 days but avoids $180K demurrage exposure. JIT arrival coordination with Constanta Port Authority recommended.",
1235
+ "confidence": 87,
1236
+ "generatedAt": "2026-03-26T13:00:00Z",
1237
+ "actionItems": [
1238
+ "Coordinate JIT arrival with Constanta Port Authority (APMC) for STENA POLARIS",
1239
+ "Request priority transit slot for CMA CGM BOSPHORUS via agent (Marline Agency Istanbul)",
1240
+ "Evaluate Suez Canal alternative for non-time-critical Black Sea cargoes",
1241
+ "Brief commercial team on potential 5-7 day delay impact on Q1 performance"
1242
+ ],
1243
+ "affectedVessels": [
1244
+ "CMA CGM BOSPHORUS",
1245
+ "STENA POLARIS",
1246
+ "CONSTANTA SPIRIT"
1247
+ ]
1248
+ },
1249
+ {
1250
+ "id": 3,
1251
+ "title": "EU ETS Maritime Compliance — Q1 Allowance Deadline",
1252
+ "category": "Compliance",
1253
+ "severity": "Critical",
1254
+ "summary": "EU ETS maritime phase-in requires 40% of 2026 emissions covered by allowances. Submission deadline April 30. 8 vessels in fleet have EU port calls requiring reporting under Regulation 2023/959.",
1255
+ "details": "Under EU ETS Directive 2003/87/EC as amended by 2023/959, maritime emissions for voyages to/from EU ports must be covered. Fleet exposure: estimated 42,000 EU Allowances (EUAs) at current price €85/EUA = €3.57M obligation. Vessels affected: MAERSK EDINBURGH, EURONAV DANUBE, MINERVA SOPHIA, CMA CGM BOSPHORUS, MSC AURORA, TORM HELLAS, CONSTANTA SPIRIT, DANUBIA STAR. MRV data from Thetis-MRV must reconcile with ETS reporting.",
1256
+ "confidence": 95,
1257
+ "generatedAt": "2026-03-26T12:00:00Z",
1258
+ "actionItems": [
1259
+ "Verify EU MRV emissions data in Thetis-MRV for all 8 vessels with EU port calls",
1260
+ "Purchase 42,000 EUAs before April 30 deadline at current spot price",
1261
+ "Implement FuelEU Maritime preparedness for 2025 well-to-wake intensity targets",
1262
+ "Update voyage P&L models to include EU ETS cost per voyage for commercial team"
1263
+ ],
1264
+ "affectedVessels": [
1265
+ "MAERSK EDINBURGH",
1266
+ "EURONAV DANUBE",
1267
+ "MINERVA SOPHIA",
1268
+ "CMA CGM BOSPHORUS",
1269
+ "MSC AURORA",
1270
+ "TORM HELLAS",
1271
+ "CONSTANTA SPIRIT",
1272
+ "DANUBIA STAR"
1273
+ ]
1274
+ },
1275
+ {
1276
+ "id": 4,
1277
+ "title": "Predictive Maintenance Alert — PACIFIC BASIN TIANJIN Stern Tube",
1278
+ "category": "Maintenance",
1279
+ "severity": "Warning",
1280
+ "summary": "ML vibration analysis predicts 73% probability of stern tube bearing failure within 45 days. ClassNK Rule Part C 5.2 requires docking survey. Tanjung Priok offers lowest-cost repair window.",
1281
+ "details": "SKF Copperhead vibration monitoring trend: propeller shaft 2x RPM harmonic increasing at 0.3 mm/s per week (current: 4.2 mm/s, ClassNK limit: 4.5 mm/s). Pattern matches pre-failure signature from fleet database (87% match to PACIFIC BASIN WUHAN failure 2024). Stern tube oil consumption: 1.2L/day (normal: 0.3L/day). PT United Shipyard Tanjung Priok quoted $95K for emergency docking incl. bearing replacement. Lead time for Wartsila lip seal assembly: 14 days.",
1282
+ "confidence": 73,
1283
+ "generatedAt": "2026-03-26T11:00:00Z",
1284
+ "actionItems": [
1285
+ "Schedule emergency docking at PT United Shipyard Tanjung Priok (earliest slot: April 8)",
1286
+ "Order replacement Wartsila lip seal assembly — DDP Jakarta (14-day lead)",
1287
+ "Increase vibration monitoring to 4-hour intervals",
1288
+ "Prepare ClassNK surveyor request for tail shaft survey per Rule Part C 5.2"
1289
+ ],
1290
+ "affectedVessels": [
1291
+ "PACIFIC BASIN TIANJIN"
1292
+ ]
1293
+ }
1294
+ ],
1295
+ "event-logs": [
1296
+ {
1297
+ "id": 1,
1298
+ "timestamp": "2026-03-26T14:32:18Z",
1299
+ "vesselId": 10,
1300
+ "vesselName": "TORM HELLAS",
1301
+ "severity": "Critical",
1302
+ "category": "Engine",
1303
+ "message": "Main engine cylinder 3 exhaust gas temperature exceeding safe limits — MAN B&W 6S50ME-C",
1304
+ "details": "Exhaust gas temperature reading 520°C, normal range 380-450°C. Scavenge air pressure drop detected. Auto-shutdown protocol per SMS Section 8.4.2 initiated. Constanta Shipyard maintenance team mobilized.",
1305
+ "source": "Engine Room Automation System (Kongsberg K-Chief 700)"
1306
+ },
1307
+ {
1308
+ "id": 2,
1309
+ "timestamp": "2026-03-26T14:28:05Z",
1310
+ "vesselId": 6,
1311
+ "vesselName": "MAERSK EDINBURGH",
1312
+ "severity": "Warning",
1313
+ "category": "Emissions",
1314
+ "message": "Scrubber wash water pH below IMO MEPC.259(68) threshold",
1315
+ "details": "pH reading 5.8, minimum threshold 6.0. Open loop scrubber wash water exceeding PAH limits. Approaching EU ECA where open loop operation is restricted. Auto-switching to closed loop mode.",
1316
+ "source": "Wärtsilä EGCS Control System"
1317
+ },
1318
+ {
1319
+ "id": 3,
1320
+ "timestamp": "2026-03-26T14:15:42Z",
1321
+ "vesselId": 3,
1322
+ "vesselName": "COSCO SHANGHAI",
1323
+ "severity": "Info",
1324
+ "category": "Navigation",
1325
+ "message": "Vessel entered US EEZ boundary — USCG reporting requirements active",
1326
+ "details": "Position: 34.05°N, 152.30°W. Speed: 19.8 knots. Heading: 275°. 96-hour advance notice of arrival submitted to NVMC. ISPS Security Level 1 confirmed.",
1327
+ "source": "AIS Transponder / ECDIS (JRC JAN-9201)"
1328
+ },
1329
+ {
1330
+ "id": 4,
1331
+ "timestamp": "2026-03-26T14:10:33Z",
1332
+ "vesselId": 8,
1333
+ "vesselName": "EURONAV DANUBE",
1334
+ "severity": "Info",
1335
+ "category": "Cargo",
1336
+ "message": "Cargo tank ullage levels verified — all 14 cargo tanks within parameters",
1337
+ "details": "Total cargo volume: 148,500 m³ Bonny Light crude (API 33.4°). Tank atmosphere: O2 <8%, HC <1% LEL. Crude oil washing completed on tanks 1P/1S per MARPOL Annex I COW requirements.",
1338
+ "source": "Saab TankRadar REX Cargo Management"
1339
+ },
1340
+ {
1341
+ "id": 5,
1342
+ "timestamp": "2026-03-26T13:58:20Z",
1343
+ "vesselId": 13,
1344
+ "vesselName": "STENA POLARIS",
1345
+ "severity": "Warning",
1346
+ "category": "Weather",
1347
+ "message": "Bosporus Strait transit delay — strong southerly current advisory",
1348
+ "details": "Turkish Maritime Authority (Kıyı Emniyeti) reporting 4-6 knot southerly current in strait. Vessel Traffic Service (TÜDAV) advising convoys delayed 8-12 hours. Next northbound slot: 2026-03-27 0600 LT.",
1349
+ "source": "Turkish Straits VTS / Navtex Station Istanbul"
1350
+ },
1351
+ {
1352
+ "id": 6,
1353
+ "timestamp": "2026-03-26T13:45:11Z",
1354
+ "vesselId": 4,
1355
+ "vesselName": "NORDIC WOLVERINE",
1356
+ "severity": "Warning",
1357
+ "category": "Security",
1358
+ "message": "Vessel transiting UKMTO Voluntary Reporting Area — Strait of Hormuz",
1359
+ "details": "BMP5 procedures activated per UKMTO reporting. SSAS armed and tested. Citadel readiness confirmed. AIS transmitting on full power. Speed maintained above 12 knots. Iranian Revolutionary Guard vessels observed 8nm south.",
1360
+ "source": "UKMTO / Ship Security Alert System"
1361
+ },
1362
+ {
1363
+ "id": 7,
1364
+ "timestamp": "2026-03-26T13:30:00Z",
1365
+ "vesselId": 11,
1366
+ "vesselName": "MSC AURORA",
1367
+ "severity": "Info",
1368
+ "category": "Performance",
1369
+ "message": "Noon report submitted — CII performance on target for A rating",
1370
+ "details": "HFO: 190 MT, MGO: 15 MT. Average speed: 21.2 knots. Slip: 2.1%. Weather factor: 1.05. Attained CII: 3.12 gCO2/DWT·nm (required boundary: 4.85). Running on dual-fuel LNG.",
1371
+ "source": "IMO DCS Noon Report System"
1372
+ },
1373
+ {
1374
+ "id": 8,
1375
+ "timestamp": "2026-03-26T13:22:45Z",
1376
+ "vesselId": 9,
1377
+ "vesselName": "PACIFIC BASIN TIANJIN",
1378
+ "severity": "Warning",
1379
+ "category": "Mechanical",
1380
+ "message": "Propeller shaft vibration levels approaching ClassNK threshold",
1381
+ "details": "Vibration reading: 4.2 mm/s velocity (ClassNK threshold: 4.5 mm/s). Bearing temperature: 62°C. Harmonic analysis shows 2x RPM frequency increasing at 0.3 mm/s/week. Stern tube oil consumption elevated.",
1382
+ "source": "SKF Copperhead Condition Monitoring"
1383
+ },
1384
+ {
1385
+ "id": 9,
1386
+ "timestamp": "2026-03-26T13:15:30Z",
1387
+ "vesselId": 15,
1388
+ "vesselName": "VALE BRASIL",
1389
+ "severity": "Info",
1390
+ "category": "Compliance",
1391
+ "message": "Ballast water exchange completed per D-1 standard",
1392
+ "details": "Tanks 1-6 sequential exchange in open ocean (>200nm from shore, depth >200m per BWMC Reg. B-3.1). Volume: 42,000 m³. Post-exchange salinity: 35.2 PSU (>30 PSU required). Samples retained.",
1393
+ "source": "Ballast Water Management Plan (BWMP)"
1394
+ },
1395
+ {
1396
+ "id": 10,
1397
+ "timestamp": "2026-03-26T12:55:18Z",
1398
+ "vesselId": 18,
1399
+ "vesselName": "MINERVA SOPHIA",
1400
+ "severity": "Critical",
1401
+ "category": "Compliance",
1402
+ "message": "MARPOL Annex VI IAPP Certificate expiring in 4 days",
1403
+ "details": "Certificate expires 2026-03-30. Flag State (Greece) notified. Lloyd's Register Class surveyor available at Trieste for renewal survey. IAPP renewal requires NOx Technical File verification and EIAPP engine certification.",
1404
+ "source": "Lloyd's Register FleetMon Certificate Tracking"
1405
+ },
1406
+ {
1407
+ "id": 11,
1408
+ "timestamp": "2026-03-26T12:40:05Z",
1409
+ "vesselId": 14,
1410
+ "vesselName": "CMA CGM BOSPHORUS",
1411
+ "severity": "Info",
1412
+ "category": "Navigation",
1413
+ "message": "Vessel anchored at Bosporus approach — awaiting northbound transit slot",
1414
+ "details": "Anchored at position 41°10.5'N, 029°04.8'E (Bosporus southern anchorage). Current queue: 18 vessels northbound. Turkish Straits VTS assigned Slot #14. Estimated transit: 2026-03-28 1400 LT.",
1415
+ "source": "Turkish Straits VTS (Türk Boğazları VTS)"
1416
+ },
1417
+ {
1418
+ "id": 12,
1419
+ "timestamp": "2026-03-26T12:30:00Z",
1420
+ "vesselId": 16,
1421
+ "vesselName": "ARCTIC AURORA",
1422
+ "severity": "Info",
1423
+ "category": "Navigation",
1424
+ "message": "Exiting Northern Sea Route — entering Norwegian sector Barents Sea",
1425
+ "details": "Position: 68°57'N, 033°03'E. Ice class Arc7 hull performing nominally. NSR Administration transit permit fulfilled. No ice damage observed. Murmansk pilot disembarked.",
1426
+ "source": "NSR Administration / Rosatom Ice Pilot Service"
1427
+ },
1428
+ {
1429
+ "id": 13,
1430
+ "timestamp": "2026-03-26T12:15:22Z",
1431
+ "vesselId": 10,
1432
+ "vesselName": "TORM HELLAS",
1433
+ "severity": "Critical",
1434
+ "category": "Safety",
1435
+ "message": "Enclosed space entry permit expired during drydock maintenance",
1436
+ "details": "Permit for engine room lower platform expired at 12:00. Last atmosphere test at 09:00: O2: 20.8%, HC: 0% LEL, H2S: 0 ppm, CO: 2 ppm. All personnel evacuated per SMS Section 12.3 and MSC.1/Circ.1401.",
1437
+ "source": "Constanta Shipyard Permit-to-Work System"
1438
+ },
1439
+ {
1440
+ "id": 14,
1441
+ "timestamp": "2026-03-26T11:50:10Z",
1442
+ "vesselId": 17,
1443
+ "vesselName": "EVERGREEN TRIUMPH",
1444
+ "severity": "Debug",
1445
+ "category": "System",
1446
+ "message": "Inmarsat Fleet Xpress bandwidth optimized",
1447
+ "details": "VSAT link stabilized at 6 Mbps download / 2 Mbps upload via Inmarsat GX Ka-band. Latency: 580ms. Backup: Iridium Certus L-band. Crew welfare bandwidth allocation: 40%.",
1448
+ "source": "Intellian V100NX VSAT Terminal"
1449
+ },
1450
+ {
1451
+ "id": 15,
1452
+ "timestamp": "2026-03-26T11:35:45Z",
1453
+ "vesselId": 2,
1454
+ "vesselName": "MARE NIGRUM",
1455
+ "severity": "Info",
1456
+ "category": "Environmental",
1457
+ "message": "Continuous Emission Monitoring — within IMO 2020 sulphur limits",
1458
+ "details": "SOx: 0.42% m/m (IMO 2020 limit: 0.50%). NOx: 12.4 g/kWh (Tier II compliant, 14.4 limit). PM: 0.08 g/kWh. Running on 0.5% VLSFO (ISO 8217:2017 compliant). EU MRV data auto-reported.",
1459
+ "source": "ABB CEMS (Continuous Emission Monitoring System)"
1460
+ },
1461
+ {
1462
+ "id": 16,
1463
+ "timestamp": "2026-03-26T11:20:00Z",
1464
+ "vesselId": 1,
1465
+ "vesselName": "CONSTANTA SPIRIT",
1466
+ "severity": "Warning",
1467
+ "category": "Cargo",
1468
+ "message": "Hold #3 bilge alarm activated — monitoring during Black Sea transit",
1469
+ "details": "Water ingress detected in cargo hold #3 (grain cargo). Bilge well level: 0.35m. Sounding pipe readings stable. Bilge pump started — 2.5 m³/hr discharge. Hatch cover watertight integrity check ordered.",
1470
+ "source": "Tank Level Monitoring (Scanjet SC30)"
1471
+ },
1472
+ {
1473
+ "id": 17,
1474
+ "timestamp": "2026-03-26T11:05:30Z",
1475
+ "vesselId": 7,
1476
+ "vesselName": "GALATA BRIDGE",
1477
+ "severity": "Info",
1478
+ "category": "Port",
1479
+ "message": "Berth allocation confirmed at Constanta South Agigea",
1480
+ "details": "Berth 80, Constanta South Container Terminal (CSCT). ETA: March 28, 0800 LT. Pilot boarding at Constanta fairway buoy (43°59.5'N, 028°40.5'E). Tugs: 2x Svitzer required.",
1481
+ "source": "Constanta Port Authority (APMC)"
1482
+ },
1483
+ {
1484
+ "id": 18,
1485
+ "timestamp": "2026-03-26T10:45:15Z",
1486
+ "vesselId": 12,
1487
+ "vesselName": "DANUBIA STAR",
1488
+ "severity": "Info",
1489
+ "category": "Navigation",
1490
+ "message": "Entering Sulina Channel — Danube Maritime Administration pilot boarded",
1491
+ "details": "Sulina Branch channel entry. Draft: 4.3m (max permitted 5.8m). Speed limit: 6 knots in channel. Romanian Danube Administration (AFDJ) pilot embarked. Expected Constanta arrival: March 28.",
1492
+ "source": "AFDJ Danube Traffic Information System"
1493
+ },
1494
+ {
1495
+ "id": 19,
1496
+ "timestamp": "2026-03-26T10:30:00Z",
1497
+ "vesselId": 3,
1498
+ "vesselName": "COSCO SHANGHAI",
1499
+ "severity": "Info",
1500
+ "category": "Crew",
1501
+ "message": "Crew change completed at Ningbo per MLC 2006 requirements",
1502
+ "details": "12 crew signed off (max 11-month contracts per MLC Standard A2.5.1), 12 signed on. All STCW certificates verified. Covid and Yellow Fever vaccination certificates valid. Seafarer Employment Agreements filed.",
1503
+ "source": "COSCO Manning Agency / MLC 2006 Compliance"
1504
+ },
1505
+ {
1506
+ "id": 20,
1507
+ "timestamp": "2026-03-26T10:15:42Z",
1508
+ "vesselId": 10,
1509
+ "vesselName": "TORM HELLAS",
1510
+ "severity": "Critical",
1511
+ "category": "Safety",
1512
+ "message": "Annual class survey overdue — vessel subject to Paris MOU detention risk",
1513
+ "details": "Annual class survey was due 2026-03-15 per Lloyd's Register rules. Survey outstanding. Class notation suspended conditionally. If not completed by 2026-04-15, vessel will be placed on Condition of Class. High detention priority at next PSC inspection.",
1514
+ "source": "Lloyd's Register ClassDirect / Paris MOU THETIS Database"
1515
+ }
1516
+ ],
1517
+ "fleets": [
1518
+ {
1519
+ "id": 1,
1520
+ "name": "Black Sea & Med Division",
1521
+ "region": "Black Sea / Eastern Mediterranean",
1522
+ "status": "active",
1523
+ "description": "Constanta-based operations covering Black Sea, Bosporus transit, and Eastern Mediterranean trade lanes including Danube river feeder services."
1524
+ },
1525
+ {
1526
+ "id": 2,
1527
+ "name": "Trans-Pacific Fleet",
1528
+ "region": "Pacific Basin",
1529
+ "status": "active",
1530
+ "description": "Major container and bulk carrier operations on Asia-North America routes via great circle and southern routing."
1531
+ },
1532
+ {
1533
+ "id": 3,
1534
+ "name": "Atlantic Tanker Group",
1535
+ "region": "North & South Atlantic",
1536
+ "status": "active",
1537
+ "description": "VLCC and Suezmax tanker operations on WAF-USEC, Caribbean, and transatlantic crude/product routes."
1538
+ },
1539
+ {
1540
+ "id": 4,
1541
+ "name": "Arabian Gulf & Indian Ocean",
1542
+ "region": "AG / Indian Ocean / Red Sea",
1543
+ "status": "active",
1544
+ "description": "Middle East petroleum logistics covering AG loading ports, Suez Canal transit, and Indian subcontinent discharge."
1545
+ }
1546
+ ],
1547
+ "maintenance-logs": [
1548
+ {
1549
+ "id": 1,
1550
+ "vesselId": 10,
1551
+ "vesselName": "TORM HELLAS",
1552
+ "component": "Main Engine MAN B&W 6S50ME-C — Cylinder 3",
1553
+ "type": "Overhaul",
1554
+ "status": "In Progress",
1555
+ "severity": "Critical",
1556
+ "scheduledDate": "2026-03-20",
1557
+ "description": "Complete cylinder liner replacement and piston ring renewal. Exhaust gas temperature 520°C exceeding 450°C limit. Crosshead bearing inspection required per maker's instruction MI-3.2.1.",
1558
+ "estimatedHours": 120,
1559
+ "cost": 285000
1560
+ },
1561
+ {
1562
+ "id": 2,
1563
+ "vesselId": 7,
1564
+ "vesselName": "GALATA BRIDGE",
1565
+ "component": "Ballast Water Treatment System (Alfa Laval PureBallast 3)",
1566
+ "type": "Repair",
1567
+ "status": "Scheduled",
1568
+ "severity": "High",
1569
+ "scheduledDate": "2026-04-01",
1570
+ "description": "UV reactor chamber replacement — failing to meet IMO D-2 discharge standard (max 10 viable organisms/m³). Required before next PSC inspection per BWMC Regulation B-3.",
1571
+ "estimatedHours": 48,
1572
+ "cost": 95000
1573
+ },
1574
+ {
1575
+ "id": 3,
1576
+ "vesselId": 5,
1577
+ "vesselName": "OLDENDORFF BRISBANE",
1578
+ "component": "Hull Coating (Jotun SeaQuantum X200)",
1579
+ "type": "Scheduled",
1580
+ "status": "Overdue",
1581
+ "severity": "Medium",
1582
+ "scheduledDate": "2026-03-15",
1583
+ "description": "Anti-fouling paint application due. Underwater ROV inspection shows 25% biofouling coverage, adding estimated 12% fuel penalty. CII rating at risk of downgrade from C to D.",
1584
+ "estimatedHours": 72,
1585
+ "cost": 180000
1586
+ },
1587
+ {
1588
+ "id": 4,
1589
+ "vesselId": 18,
1590
+ "vesselName": "MINERVA SOPHIA",
1591
+ "component": "Auxiliary Generator #2 (Wärtsilä 6L20)",
1592
+ "type": "Preventive",
1593
+ "status": "Scheduled",
1594
+ "severity": "Medium",
1595
+ "scheduledDate": "2026-04-05",
1596
+ "description": "6,000-hour service interval. Fuel injector overhaul, turbocharger cartridge inspection per W20 maintenance manual. Lube oil sampling indicates elevated iron content (85 ppm vs 45 ppm normal).",
1597
+ "estimatedHours": 24,
1598
+ "cost": 35000
1599
+ },
1600
+ {
1601
+ "id": 5,
1602
+ "vesselId": 3,
1603
+ "vesselName": "COSCO SHANGHAI",
1604
+ "component": "Crane #4 — Port Side (Liebherr CBG 350)",
1605
+ "type": "Repair",
1606
+ "status": "Completed",
1607
+ "severity": "Low",
1608
+ "scheduledDate": "2026-03-10",
1609
+ "description": "Hydraulic hose replacement and SWL 45t load test certification renewal per SOLAS Ch. VI/Reg. 7. Class surveyor attended.",
1610
+ "estimatedHours": 8,
1611
+ "cost": 4500
1612
+ },
1613
+ {
1614
+ "id": 6,
1615
+ "vesselId": 9,
1616
+ "vesselName": "PACIFIC BASIN TIANJIN",
1617
+ "component": "Propeller Shaft Stern Tube Bearing",
1618
+ "type": "Inspection",
1619
+ "status": "Scheduled",
1620
+ "severity": "High",
1621
+ "scheduledDate": "2026-04-08",
1622
+ "description": "Vibration analysis shows 4.2 mm/s velocity (threshold 4.5). Harmonic frequency at 2x RPM increasing. Docking required for tail shaft survey per ClassNK Rule Part C 5.2.",
1623
+ "estimatedHours": 36,
1624
+ "cost": 120000
1625
+ },
1626
+ {
1627
+ "id": 7,
1628
+ "vesselId": 8,
1629
+ "vesselName": "EURONAV DANUBE",
1630
+ "component": "Cargo Pump #1 (Framo SD150)",
1631
+ "type": "Preventive",
1632
+ "status": "Completed",
1633
+ "severity": "Low",
1634
+ "scheduledDate": "2026-03-05",
1635
+ "description": "Routine pump performance test per OCIMF SIRE Chapter 9. Discharge rate verified at 3,000 m³/hr. Mechanical seal inspection satisfactory.",
1636
+ "estimatedHours": 6,
1637
+ "cost": 3200
1638
+ },
1639
+ {
1640
+ "id": 8,
1641
+ "vesselId": 1,
1642
+ "vesselName": "CONSTANTA SPIRIT",
1643
+ "component": "Navigation Radar (Furuno FAR-2228)",
1644
+ "type": "Calibration",
1645
+ "status": "Scheduled",
1646
+ "severity": "Medium",
1647
+ "scheduledDate": "2026-04-02",
1648
+ "description": "Annual radar performance check and ARPA calibration per SOLAS Ch. V/Reg. 19. ECDIS backup arrangement verification included. IMO Performance Standard MSC.192(79) compliance.",
1649
+ "estimatedHours": 4,
1650
+ "cost": 8500
1651
+ },
1652
+ {
1653
+ "id": 9,
1654
+ "vesselId": 6,
1655
+ "vesselName": "MAERSK EDINBURGH",
1656
+ "component": "Exhaust Gas Cleaning System (Wärtsilä Open Loop Scrubber)",
1657
+ "type": "Maintenance",
1658
+ "status": "In Progress",
1659
+ "severity": "High",
1660
+ "scheduledDate": "2026-03-25",
1661
+ "description": "Wash water pH sensor replacement and effluent monitoring calibration. Must meet IMO MEPC.259(68) discharge criteria before entering EU ECA.",
1662
+ "estimatedHours": 12,
1663
+ "cost": 22000
1664
+ },
1665
+ {
1666
+ "id": 10,
1667
+ "vesselId": 15,
1668
+ "vesselName": "VALE BRASIL",
1669
+ "component": "Steering Gear (Rolls-Royce Aquamaster)",
1670
+ "type": "Inspection",
1671
+ "status": "Completed",
1672
+ "severity": "Medium",
1673
+ "scheduledDate": "2026-03-18",
1674
+ "description": "Annual steering gear test per SOLAS Ch. V/Reg. 26. Hydraulic system pressure test at 1.25x working pressure. Emergency steering changeover drill conducted in 28 seconds (requirement: <60s).",
1675
+ "estimatedHours": 3,
1676
+ "cost": 2100
1677
+ },
1678
+ {
1679
+ "id": 11,
1680
+ "vesselId": 10,
1681
+ "vesselName": "TORM HELLAS",
1682
+ "component": "Boiler System (Aalborg AQ-9)",
1683
+ "type": "Repair",
1684
+ "status": "In Progress",
1685
+ "severity": "Critical",
1686
+ "scheduledDate": "2026-03-22",
1687
+ "description": "Steam drum tube leak repair — water side corrosion identified during internal inspection. Tube plugging of 3 damaged tubes. Hydrostatic test required at 1.5x MAWP before return to service.",
1688
+ "estimatedHours": 96,
1689
+ "cost": 195000
1690
+ },
1691
+ {
1692
+ "id": 12,
1693
+ "vesselId": 11,
1694
+ "vesselName": "MSC AURORA",
1695
+ "component": "Reefer Container Power Supply (2,200 TEU reefer capacity)",
1696
+ "type": "Preventive",
1697
+ "status": "Scheduled",
1698
+ "severity": "Low",
1699
+ "scheduledDate": "2026-04-10",
1700
+ "description": "Inspection of reefer power supply connections and Emerson/Carrier Lynx monitoring system across tier 5-9. Thermal imaging of bus bars for hotspot detection.",
1701
+ "estimatedHours": 16,
1702
+ "cost": 6800
1703
+ }
1704
+ ],
1705
+ "shipment-records": [
1706
+ {
1707
+ "id": 1,
1708
+ "vesselId": 1,
1709
+ "vesselName": "CONSTANTA SPIRIT",
1710
+ "shipmentId": "SHP-2026-0451",
1711
+ "origin": "Constanta",
1712
+ "destination": "Istanbul",
1713
+ "cargoType": "Ukrainian Grain (Wheat)",
1714
+ "weight": 52000,
1715
+ "status": "In Transit",
1716
+ "departureDate": "2026-03-26",
1717
+ "eta": "2026-03-29",
1718
+ "actualArrival": null,
1719
+ "onTimeScore": 95,
1720
+ "customerSatisfaction": 4.7,
1721
+ "demurrageRisk": "Low"
1722
+ },
1723
+ {
1724
+ "id": 2,
1725
+ "vesselId": 8,
1726
+ "vesselName": "EURONAV DANUBE",
1727
+ "shipmentId": "SHP-2026-0452",
1728
+ "origin": "Bonny Terminal (Nigeria)",
1729
+ "destination": "Rotterdam Europoort",
1730
+ "cargoType": "Bonny Light Crude Oil",
1731
+ "weight": 150000,
1732
+ "status": "In Transit",
1733
+ "departureDate": "2026-03-18",
1734
+ "eta": "2026-04-05",
1735
+ "actualArrival": null,
1736
+ "onTimeScore": 92,
1737
+ "customerSatisfaction": 4.5,
1738
+ "demurrageRisk": "Medium"
1739
+ },
1740
+ {
1741
+ "id": 3,
1742
+ "vesselId": 6,
1743
+ "vesselName": "MAERSK EDINBURGH",
1744
+ "shipmentId": "SHP-2026-0453",
1745
+ "origin": "Singapore (PSA)",
1746
+ "destination": "Rotterdam (ECT Delta)",
1747
+ "cargoType": "Mixed Containers — Electronics/Machinery",
1748
+ "weight": 145000,
1749
+ "status": "In Transit",
1750
+ "departureDate": "2026-03-24",
1751
+ "eta": "2026-04-14",
1752
+ "actualArrival": null,
1753
+ "onTimeScore": 98,
1754
+ "customerSatisfaction": 4.9,
1755
+ "demurrageRisk": "Low"
1756
+ },
1757
+ {
1758
+ "id": 4,
1759
+ "vesselId": 4,
1760
+ "vesselName": "NORDIC WOLVERINE",
1761
+ "shipmentId": "SHP-2026-0448",
1762
+ "origin": "Ras Tanura (Saudi Aramco)",
1763
+ "destination": "Ningbo-Zhoushan",
1764
+ "cargoType": "Arabian Extra Light Crude Oil",
1765
+ "weight": 280000,
1766
+ "status": "In Transit",
1767
+ "departureDate": "2026-03-22",
1768
+ "eta": "2026-04-15",
1769
+ "actualArrival": null,
1770
+ "onTimeScore": 94,
1771
+ "customerSatisfaction": 4.6,
1772
+ "demurrageRisk": "Low"
1773
+ },
1774
+ {
1775
+ "id": 5,
1776
+ "vesselId": 14,
1777
+ "vesselName": "CMA CGM BOSPHORUS",
1778
+ "shipmentId": "SHP-2026-0449",
1779
+ "origin": "Piraeus (PCT)",
1780
+ "destination": "Constanta",
1781
+ "cargoType": "Consumer Goods / Automotive Parts",
1782
+ "weight": 38000,
1783
+ "status": "Anchored — Awaiting Bosporus Transit",
1784
+ "departureDate": "2026-03-25",
1785
+ "eta": "2026-03-29",
1786
+ "actualArrival": null,
1787
+ "onTimeScore": 85,
1788
+ "customerSatisfaction": 4.3,
1789
+ "demurrageRisk": "Medium"
1790
+ },
1791
+ {
1792
+ "id": 6,
1793
+ "vesselId": 15,
1794
+ "vesselName": "VALE BRASIL",
1795
+ "shipmentId": "SHP-2026-0445",
1796
+ "origin": "Ponta da Madeira (Vale S11D)",
1797
+ "destination": "Qingdao (Dongjiaokou)",
1798
+ "cargoType": "Iron Ore Fines (Fe 65%)",
1799
+ "weight": 385000,
1800
+ "status": "In Transit",
1801
+ "departureDate": "2026-03-15",
1802
+ "eta": "2026-04-22",
1803
+ "actualArrival": null,
1804
+ "onTimeScore": 90,
1805
+ "customerSatisfaction": 4.4,
1806
+ "demurrageRisk": "Medium"
1807
+ },
1808
+ {
1809
+ "id": 7,
1810
+ "vesselId": 5,
1811
+ "vesselName": "OLDENDORFF BRISBANE",
1812
+ "shipmentId": "SHP-2026-0440",
1813
+ "origin": "Richards Bay Coal Terminal",
1814
+ "destination": "Qingdao",
1815
+ "cargoType": "Thermal Coal (6,000 kcal NAR)",
1816
+ "weight": 170000,
1817
+ "status": "In Transit",
1818
+ "departureDate": "2026-03-20",
1819
+ "eta": "2026-04-18",
1820
+ "actualArrival": null,
1821
+ "onTimeScore": 88,
1822
+ "customerSatisfaction": 4.2,
1823
+ "demurrageRisk": "Medium"
1824
+ },
1825
+ {
1826
+ "id": 8,
1827
+ "vesselId": 11,
1828
+ "vesselName": "MSC AURORA",
1829
+ "shipmentId": "SHP-2026-0455",
1830
+ "origin": "Yantian (YICT)",
1831
+ "destination": "Tanjung Pelepas",
1832
+ "cargoType": "Mixed Containers — Textiles/Electronics",
1833
+ "weight": 165000,
1834
+ "status": "In Transit",
1835
+ "departureDate": "2026-03-25",
1836
+ "eta": "2026-03-31",
1837
+ "actualArrival": null,
1838
+ "onTimeScore": 99,
1839
+ "customerSatisfaction": 4.9,
1840
+ "demurrageRisk": "Low"
1841
+ },
1842
+ {
1843
+ "id": 9,
1844
+ "vesselId": 17,
1845
+ "vesselName": "EVERGREEN TRIUMPH",
1846
+ "shipmentId": "SHP-2026-0456",
1847
+ "origin": "Kaohsiung",
1848
+ "destination": "Port Klang (Westports)",
1849
+ "cargoType": "Semiconductor Manufacturing Equipment",
1850
+ "weight": 95000,
1851
+ "status": "In Transit",
1852
+ "departureDate": "2026-03-24",
1853
+ "eta": "2026-04-03",
1854
+ "actualArrival": null,
1855
+ "onTimeScore": 96,
1856
+ "customerSatisfaction": 4.8,
1857
+ "demurrageRisk": "Low"
1858
+ },
1859
+ {
1860
+ "id": 10,
1861
+ "vesselId": 2,
1862
+ "vesselName": "MARE NIGRUM",
1863
+ "shipmentId": "SHP-2026-0460",
1864
+ "origin": "Constanta (ROMPETROL Terminal)",
1865
+ "destination": "Augusta (Sicily)",
1866
+ "cargoType": "Diesel/Gasoil (EN 590)",
1867
+ "weight": 105000,
1868
+ "status": "In Transit",
1869
+ "departureDate": "2026-03-26",
1870
+ "eta": "2026-04-02",
1871
+ "actualArrival": null,
1872
+ "onTimeScore": 93,
1873
+ "customerSatisfaction": 4.5,
1874
+ "demurrageRisk": "Low"
1875
+ },
1876
+ {
1877
+ "id": 11,
1878
+ "vesselId": 16,
1879
+ "vesselName": "ARCTIC AURORA",
1880
+ "shipmentId": "SHP-2026-0461",
1881
+ "origin": "Sabetta (Yamal LNG)",
1882
+ "destination": "Zeebrugge LNG Terminal",
1883
+ "cargoType": "LNG (Yamal Gas)",
1884
+ "weight": 72000,
1885
+ "status": "In Transit",
1886
+ "departureDate": "2026-03-24",
1887
+ "eta": "2026-04-06",
1888
+ "actualArrival": null,
1889
+ "onTimeScore": 97,
1890
+ "customerSatisfaction": 4.8,
1891
+ "demurrageRisk": "Low"
1892
+ }
1893
+ ]
1894
+ }
killinchu_elite_console.py CHANGED
@@ -445,6 +445,8 @@ details.raw{margin-top:1rem;} details.raw summary{cursor:pointer;font-family:var
445
  <div class="nav-group">Fleet (Vessels)</div>
446
  <div class="nav-item" data-view="fleet" onclick="go('fleet')"><span class="ico">⛴</span>Fleet Overview</div>
447
  <div class="nav-item" data-view="fleetmaint" onclick="go('fleetmaint')"><span class="ico">⚒</span>Maintenance &amp; Compliance</div>
 
 
448
  <div class="nav-item" data-view="fleetbrief" onclick="go('fleetbrief')"><span class="ico">◈</span>Fleet Briefings</div>
449
 
450
  <div class="nav-group">Decide &amp; Govern</div>
@@ -1132,6 +1134,125 @@ const VIEWS = {
1132
  }catch(e){setHTML('fb-cards','<div class="row mono dim">retry: '+esc(e.message)+'</div>');setOut('fb-raw','retry: '+e.message);}
1133
  }},
1134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1135
  // ── 3.4 ROE Policy Editor ────────────────────────────────────────
1136
  roe:{title:'Engagement Rules',badge:'LIVE POLICY',sub:'The rules that decide whether a drone may be engaged — speed limits, required ID, allowed directions. Test a track against the current rules; every check produces a genuinely signed receipt.',
1137
  render:async(c)=>{
 
445
  <div class="nav-group">Fleet (Vessels)</div>
446
  <div class="nav-item" data-view="fleet" onclick="go('fleet')"><span class="ico">⛴</span>Fleet Overview</div>
447
  <div class="nav-item" data-view="fleetmaint" onclick="go('fleetmaint')"><span class="ico">⚒</span>Maintenance &amp; Compliance</div>
448
+ <div class="nav-item" data-view="fleetlogs" onclick="go('fleetlogs')"><span class="ico">⊟</span>Ops &amp; Maintenance Logs</div>
449
+ <div class="nav-item" data-view="fleetvoyages" onclick="go('fleetvoyages')"><span class="ico">⛟</span>Voyages &amp; Fleets</div>
450
  <div class="nav-item" data-view="fleetbrief" onclick="go('fleetbrief')"><span class="ico">◈</span>Fleet Briefings</div>
451
 
452
  <div class="nav-group">Decide &amp; Govern</div>
 
1134
  }catch(e){setHTML('fb-cards','<div class="row mono dim">retry: '+esc(e.message)+'</div>');setOut('fb-raw','retry: '+e.message);}
1135
  }},
1136
 
1137
+ // ── Ops & Maintenance Logs (event-logs + maintenance-logs) ──────
1138
+ fleetlogs:{title:'Ops & Maintenance Logs',badge:'OPS LOG · MAINT LOG',sub:'The raw operational record: engine/critical event log (K-Chief 700 automation, SMS sections) and the actual maintenance work-order history (overhauls, surveys, dry-docks) with hours and cost. Sample fleet dataset — not a live AIS / class-society feed.',
1139
+ render:async(c)=>{
1140
+ c.innerHTML=`<div class="kpis">
1141
+ <div class="kpi"><div class="k">Events logged</div><div class="v" id="fl-ev">—</div><div class="d">engine / critical / ops</div></div>
1142
+ <div class="kpi"><div class="k">Critical events</div><div class="v err" id="fl-crit">—</div><div class="d">highest severity</div></div>
1143
+ <div class="kpi"><div class="k">Maintenance jobs</div><div class="v" id="fl-mj">—</div><div class="d">in work-order log</div></div>
1144
+ <div class="kpi"><div class="k">In-progress spend</div><div class="v teal" id="fl-spend">—</div><div class="d">est. cost, open jobs</div></div>
1145
+ </div>
1146
+ <div class="grid2">
1147
+ <div class="card"><div class="card-h"><span class="card-t">Events by severity</span><span class="card-ep">engine room automation</span></div><div class="chartbox"><canvas id="fl-sev-bar"></canvas></div></div>
1148
+ <div class="card"><div class="card-h"><span class="card-t">Maintenance cost by job type</span><span class="card-ep">est. $ / work order</span></div><div class="chartbox"><canvas id="fl-mt-bar"></canvas></div></div>
1149
+ </div>
1150
+ <div class="card"><div class="card-h"><span class="card-t">Event log — newest first</span><span class="card-ep" id="fl-ev-ep">—</span></div><div id="fl-ev-list"><div class="row mono dim">loading…</div></div></div>
1151
+ <div class="card"><div class="card-h"><span class="card-t">Maintenance work-order log</span><span class="card-ep" id="fl-mt-ep">—</span></div><div id="fl-mt-list"><div class="row mono dim">loading…</div></div></div>
1152
+ <details class="raw"><summary>raw /fleet/event-logs · /fleet/maintenance-logs</summary><pre class="out" id="fl-raw">—</pre></details>
1153
+ <div class="honesty"><b>Honest by design.</b> <b>Sample fleet dataset — not a live AIS/class-society feed.</b> Event entries (engine-room automation source, SMS sections) and maintenance work orders are real, citable demo content served verbatim from the SZL platform dataset (seed-data/vessels/*), not a live K-Chief or planned-maintenance-system feed. Receipts are <b>genuinely signed</b> (ECDSA P-256) and verifiable offline.</div>`;
1154
+ try{
1155
+ const [ev,mt]=await Promise.all([getJSON(FLEET+'/event-logs'),getJSON(FLEET+'/maintenance-logs')]);
1156
+ const EV=ev.data||[],MT=mt.data||[];
1157
+ setOut('fl-raw',{event_logs:EV.length,maintenance_logs:MT.length,honesty:ev.honesty,sample_event:EV.slice(0,1)});
1158
+ el('fl-ev').textContent=EV.length;
1159
+ el('fl-crit').textContent=EV.filter(e=>String(e.severity||'').toLowerCase()==='critical').length;
1160
+ el('fl-mj').textContent=MT.length;
1161
+ const openSpend=MT.filter(m=>String(m.status||'').toLowerCase()!=='completed').reduce((a,m)=>a+(m.cost||0),0);
1162
+ el('fl-spend').textContent='$'+(openSpend||0).toLocaleString();
1163
+ // severity bar
1164
+ const sevOrder=['Critical','Warning','Info','Debug'];
1165
+ const sevCounts=sevOrder.map(s=>EV.filter(e=>e.severity===s).length);
1166
+ barV('fl-sev-bar',sevOrder,sevCounts,[RED,WARN,'#5f8fb3','#7a7a7a']);
1167
+ // maintenance cost by type
1168
+ const types=[...new Set(MT.map(m=>m.type))];
1169
+ const typeCost=types.map(t=>MT.filter(m=>m.type===t).reduce((a,m)=>a+(m.cost||0),0));
1170
+ barH('fl-mt-bar',types,typeCost,types.map(()=>TEAL));
1171
+ // event list, newest first
1172
+ const evh=el('fl-ev-list'); evh.innerHTML=''; el('fl-ev-ep').textContent=EV.length+' events';
1173
+ EV.slice().sort((a,b)=>String(b.timestamp||'').localeCompare(String(a.timestamp||''))).forEach(e=>{
1174
+ const sev=String(e.severity||'').toLowerCase();
1175
+ const cls=sev==='critical'?'b-err':sev==='warning'?'b-warn':sev==='info'?'b-teal':'b-live';
1176
+ evh.insertAdjacentHTML('beforeend',`<div class="row">
1177
+ <span class="badge ${cls}">${esc(e.severity)} · ${esc(e.category)}</span>
1178
+ <span><b>${esc(e.vesselName)}</b> — ${esc(e.message)}</span>
1179
+ <span class="spacer mono dim" style="font-size:10px">${esc(String(e.timestamp||'').replace('T',' ').replace('Z',' UTC'))} · ${esc(e.source)}</span>
1180
+ </div>`);});
1181
+ if(!EV.length) evh.innerHTML='<div class="row mono dim">no events</div>';
1182
+ // maintenance list
1183
+ const mth=el('fl-mt-list'); mth.innerHTML=''; el('fl-mt-ep').textContent=MT.length+' work orders';
1184
+ MT.forEach(m=>{
1185
+ const sev=String(m.severity||'').toLowerCase();
1186
+ const cls=sev==='critical'||sev==='high'?'b-err':sev==='medium'?'b-warn':'b-live';
1187
+ const st=String(m.status||'');
1188
+ const sc=st==='Completed'?'b-live':st==='In Progress'?'b-warn':'b-teal';
1189
+ mth.insertAdjacentHTML('beforeend',`<div class="row">
1190
+ <span class="badge ${cls}">${esc(m.severity)}</span>
1191
+ <span class="badge ${sc}" style="font-size:9px">${esc(m.status)}</span>
1192
+ <span><b>${esc(m.vesselName)}</b> — ${esc(m.component)} <span class="mono dim" style="font-size:10px">(${esc(m.type)})</span></span>
1193
+ <span class="spacer mono dim" style="font-size:10px">due ${esc(m.scheduledDate)} · ${m.estimatedHours||'?'}h · est $${(m.cost||0).toLocaleString()}</span>
1194
+ </div>`);});
1195
+ if(!MT.length) mth.innerHTML='<div class="row mono dim">no maintenance jobs</div>';
1196
+ }catch(e){setHTML('fl-ev-list','<div class="row mono dim">retry: '+esc(e.message)+'</div>');setOut('fl-raw','retry: '+e.message);}
1197
+ }},
1198
+
1199
+ // ── Voyages & Fleets (shipment-records + fleets grouping) ───────
1200
+ fleetvoyages:{title:'Voyages & Fleets',badge:'VOYAGES · FLEET GROUPING',sub:'Cargo voyages / shipment records (origin → destination, cargo, on-time score, demurrage risk) and the operating fleets the vessels are grouped into (region, status). Sample fleet dataset — not a live AIS / class-society feed.',
1201
+ render:async(c)=>{
1202
+ c.innerHTML=`<div class="kpis">
1203
+ <div class="kpi"><div class="k">Voyages</div><div class="v" id="fv-cnt">—</div><div class="d">shipment records</div></div>
1204
+ <div class="kpi"><div class="k">In transit</div><div class="v teal" id="fv-tr">—</div><div class="d">currently sailing</div></div>
1205
+ <div class="kpi"><div class="k">High demurrage risk</div><div class="v err" id="fv-dem">—</div><div class="d">cost exposure</div></div>
1206
+ <div class="kpi"><div class="k">Operating fleets</div><div class="v" id="fv-fl">—</div><div class="d">vessel grouping</div></div>
1207
+ </div>
1208
+ <div class="grid2">
1209
+ <div class="card"><div class="card-h"><span class="card-t">On-time score by voyage</span><span class="card-ep">%</span></div><div class="chartbox tall"><canvas id="fv-ot-bar"></canvas></div></div>
1210
+ <div class="card"><div class="card-h"><span class="card-t">Operating fleets</span><span class="card-ep">region · status</span></div><div id="fv-fl-list"><div class="row mono dim">loading…</div></div></div>
1211
+ </div>
1212
+ <div class="card"><div class="card-h"><span class="card-t">Voyages / cargo shipments</span><span class="card-ep" id="fv-ep">—</span></div><div id="fv-list"><div class="row mono dim">loading…</div></div></div>
1213
+ <details class="raw"><summary>raw /fleet/shipment-records · /fleet/fleets</summary><pre class="out" id="fv-raw">—</pre></details>
1214
+ <div class="honesty"><b>Honest by design.</b> <b>Sample fleet dataset — not a live AIS/class-society feed.</b> Voyage / cargo shipment records and the fleet groupings are real, citable demo content served verbatim from the SZL platform dataset (seed-data/vessels/*), not a live AIS or charter-party feed. On-time and demurrage figures are sample values, not guarantees. Receipts are <b>genuinely signed</b> and verifiable offline.</div>`;
1215
+ try{
1216
+ const [sr,fs]=await Promise.all([getJSON(FLEET+'/shipment-records'),getJSON(FLEET+'/fleets')]);
1217
+ const SR=sr.data||[],FS=fs.data||[];
1218
+ setOut('fv-raw',{shipment_records:SR.length,fleets:FS.length,honesty:sr.honesty,sample_voyage:SR.slice(0,1)});
1219
+ el('fv-cnt').textContent=SR.length;
1220
+ el('fv-tr').textContent=SR.filter(s=>String(s.status||'').toLowerCase()==='in transit').length;
1221
+ el('fv-dem').textContent=SR.filter(s=>String(s.demurrageRisk||'').toLowerCase()==='high').length;
1222
+ el('fv-fl').textContent=FS.length;
1223
+ // on-time bar
1224
+ const labs=SR.map(s=>s.shipmentId||('#'+s.id));
1225
+ const ot=SR.map(s=>s.onTimeScore||0);
1226
+ const cols=SR.map(s=>(s.onTimeScore||0)>=90?TEAL:(s.onTimeScore||0)>=75?WARN:RED);
1227
+ barH('fv-ot-bar',labs,ot,cols);
1228
+ // fleets grouping
1229
+ const fh=el('fv-fl-list'); fh.innerHTML='';
1230
+ FS.forEach(f=>{
1231
+ const st=String(f.status||'').toLowerCase();
1232
+ const sc=st==='active'?'b-live':st==='inactive'?'b-warn':'b-teal';
1233
+ fh.insertAdjacentHTML('beforeend',`<div class="row">
1234
+ <span class="badge ${sc}">${esc(f.status)}</span>
1235
+ <span><b>${esc(f.name)}</b></span>
1236
+ <span class="spacer mono dim" style="font-size:10px">${esc(f.region)}</span>
1237
+ </div>
1238
+ <div class="row" style="border:none;padding-top:0"><span class="mono dim" style="font-size:10px;line-height:1.5">${esc(f.description)}</span></div>`);});
1239
+ if(!FS.length) fh.innerHTML='<div class="row mono dim">no fleets</div>';
1240
+ // voyage list
1241
+ const vh=el('fv-list'); vh.innerHTML=''; el('fv-ep').textContent=SR.length+' voyages';
1242
+ SR.forEach(s=>{
1243
+ const st=String(s.status||'');
1244
+ const sc=st==='Delivered'?'b-live':st==='In Transit'?'b-teal':st==='Delayed'?'b-err':'b-warn';
1245
+ const dm=String(s.demurrageRisk||'').toLowerCase();
1246
+ const dc=dm==='high'?'b-err':dm==='medium'?'b-warn':'b-live';
1247
+ vh.insertAdjacentHTML('beforeend',`<div class="row">
1248
+ <span class="badge ${sc}">${esc(s.status)}</span>
1249
+ <span><b>${esc(s.vesselName)}</b> <span class="mono dim" style="font-size:10px">${esc(s.shipmentId)}</span> — ${esc(s.origin)} → ${esc(s.destination)}</span>
1250
+ <span class="spacer mono dim" style="font-size:10px">${esc(s.cargoType)} · ${(s.weight||0).toLocaleString()}t · dep ${esc(s.departureDate)} · ETA ${esc(s.eta)} · on-time ${s.onTimeScore??'?'}% · <span class="badge ${dc}" style="font-size:8px">demurrage ${esc(s.demurrageRisk)}</span></span>
1251
+ </div>`);});
1252
+ if(!SR.length) vh.innerHTML='<div class="row mono dim">no voyages</div>';
1253
+ }catch(e){setHTML('fv-list','<div class="row mono dim">retry: '+esc(e.message)+'</div>');setOut('fv-raw','retry: '+e.message);}
1254
+ }},
1255
+
1256
  // ── 3.4 ROE Policy Editor ────────────────────────────────────────
1257
  roe:{title:'Engagement Rules',badge:'LIVE POLICY',sub:'The rules that decide whether a drone may be engaged — speed limits, required ID, allowed directions. Test a track against the current rules; every check produces a genuinely signed receipt.',
1258
  render:async(c)=>{
killinchu_fleet_vessels.py CHANGED
@@ -14,6 +14,10 @@ fleet data, NOT a live AIS / class-society feed.
14
  GET /api/killinchu/v1/fleet/compliance-certificates -> seed-data/vessels/compliance-certificates.json
15
  GET /api/killinchu/v1/fleet/port-state-deficiencies -> seed-data/vessels/port-state-deficiencies.json
16
  GET /api/killinchu/v1/fleet/ai-briefings -> seed-data/vessels/ai-briefings.json
 
 
 
 
17
  GET /api/killinchu/v1/fleet/all -> {datasets..., honesty}
18
 
19
  GAP-2 — the vessels vertical "Voyage Risk Exchange" governed-decision loop, ported
@@ -71,6 +75,10 @@ def _load() -> dict[str, Any]:
71
  "compliance-certificates": [],
72
  "port-state-deficiencies": [],
73
  "ai-briefings": [],
 
 
 
 
74
  }
75
  return _DATASETS
76
 
@@ -220,6 +228,10 @@ def register(app) -> dict[str, Any]:
220
  ("compliance-certificates", "/compliance-certificates"),
221
  ("port-state-deficiencies", "/port-state-deficiencies"),
222
  ("ai-briefings", "/ai-briefings"),
 
 
 
 
223
  ]:
224
  router.add_api_route(f"{base}{path}", _serve(key), methods=["GET"])
225
  registered.append(f"{base}{path}")
 
14
  GET /api/killinchu/v1/fleet/compliance-certificates -> seed-data/vessels/compliance-certificates.json
15
  GET /api/killinchu/v1/fleet/port-state-deficiencies -> seed-data/vessels/port-state-deficiencies.json
16
  GET /api/killinchu/v1/fleet/ai-briefings -> seed-data/vessels/ai-briefings.json
17
+ GET /api/killinchu/v1/fleet/event-logs -> seed-data/vessels/event-logs.json
18
+ GET /api/killinchu/v1/fleet/fleets -> seed-data/vessels/fleets.json
19
+ GET /api/killinchu/v1/fleet/maintenance-logs -> seed-data/vessels/maintenance-logs.json
20
+ GET /api/killinchu/v1/fleet/shipment-records -> seed-data/vessels/shipment-records.json
21
  GET /api/killinchu/v1/fleet/all -> {datasets..., honesty}
22
 
23
  GAP-2 — the vessels vertical "Voyage Risk Exchange" governed-decision loop, ported
 
75
  "compliance-certificates": [],
76
  "port-state-deficiencies": [],
77
  "ai-briefings": [],
78
+ "event-logs": [],
79
+ "fleets": [],
80
+ "maintenance-logs": [],
81
+ "shipment-records": [],
82
  }
83
  return _DATASETS
84
 
 
228
  ("compliance-certificates", "/compliance-certificates"),
229
  ("port-state-deficiencies", "/port-state-deficiencies"),
230
  ("ai-briefings", "/ai-briefings"),
231
+ ("event-logs", "/event-logs"),
232
+ ("fleets", "/fleets"),
233
+ ("maintenance-logs", "/maintenance-logs"),
234
+ ("shipment-records", "/shipment-records"),
235
  ]:
236
  router.add_api_route(f"{base}{path}", _serve(key), methods=["GET"])
237
  registered.append(f"{base}{path}")
serve.py CHANGED
@@ -2503,6 +2503,10 @@ try:
2503
  ("/compliance-certificates", _fleet2_make("compliance-certificates"), "fleet_compliance_certificates"),
2504
  ("/port-state-deficiencies", _fleet2_make("port-state-deficiencies"), "fleet_port_state_deficiencies"),
2505
  ("/ai-briefings", _fleet2_make("ai-briefings"), "fleet_ai_briefings"),
 
 
 
 
2506
  ("/all", _fleet2_all, "fleet_all"),
2507
  ("/voyage-risk", _fleet2_voyage, "fleet_voyage_risk"),
2508
  ]
 
2503
  ("/compliance-certificates", _fleet2_make("compliance-certificates"), "fleet_compliance_certificates"),
2504
  ("/port-state-deficiencies", _fleet2_make("port-state-deficiencies"), "fleet_port_state_deficiencies"),
2505
  ("/ai-briefings", _fleet2_make("ai-briefings"), "fleet_ai_briefings"),
2506
+ ("/event-logs", _fleet2_make("event-logs"), "fleet_event_logs"),
2507
+ ("/fleets", _fleet2_make("fleets"), "fleet_fleets"),
2508
+ ("/maintenance-logs", _fleet2_make("maintenance-logs"), "fleet_maintenance_logs"),
2509
+ ("/shipment-records", _fleet2_make("shipment-records"), "fleet_shipment_records"),
2510
  ("/all", _fleet2_all, "fleet_all"),
2511
  ("/voyage-risk", _fleet2_voyage, "fleet_voyage_risk"),
2512
  ]