UNPKG

@idm-plugin/ghg

Version:

idm plugin for greenhouse gas

222 lines (221 loc) 5.17 kB
import { FuelType } from '../../euets/src'; export declare enum Activity { Loading = "Loading", Discharging = "Discharging", Bunkering = "Bunkering", Delivered = "Delivered", ReDelivered = "ReDelivered" } export declare enum BunkerType { HSFO = "HSFO", LSFO = "LSFO", VLSFO = "VLSFO", ULSFO = "ULSFO", MGO = "MGO", LSMGO = "LSMGO", MDO = "MDO" } /** * BunkerType EUTES FuelType 的映射 */ export declare const BunkerTypeToFuelType: Record<string, FuelType>; /** * 航次计划输入 */ export interface ScheduleItem { port: string; activity: Activity; distanceTotal?: number; distanceSeca?: number; speed?: number; wf?: number; inPortDaysWork?: number; inPortDaysIdle?: number; portCosts?: number; euScope: boolean; } /** * 货物清单输入 */ export interface CargoItem { cargoName: string; quantity: number; grossFreightRate: number; addComm: number; brokComm: number; frtTax: number; } /** * 单个设备的消耗配置 (主机或辅机) */ export interface EngineConsumption { type: BunkerType; cons: number; } /** * 船舶在特定状态(如Ballast/Non-SECA)下的消耗配置 * 包含主机和辅机 */ export interface ModeConsumption { main: EngineConsumption; aux: EngineConsumption; } export interface ConsumptionProfile { ballast: { nonSeca: ModeConsumption; seca: ModeConsumption; }; laden: { nonSeca: ModeConsumption; seca: ModeConsumption; }; working: { nonSeca: ModeConsumption; seca: ModeConsumption; }; idle: { nonSeca: ModeConsumption; seca: ModeConsumption; }; } export interface VesselParticulars { imo: string; dwt?: number; builtYear?: number; loa?: number; beam?: number; dailyHire: number; comm: number; ballastBonus?: number; canalCosts?: number; extraInsurance?: number; loadDischCosts?: number; miscCosts?: number; additionalCosts?: number; consumption: ConsumptionProfile; bunkerPrice: Record<string, number>; } export interface CarbonOptions { reportYear: number; euaPrice: number; exchangeRate: number; includeEuaCost: boolean; includeFuelEuPenalty: boolean; } /** * 计算结果输出 */ /** * 航段计算结果 (Voyage Table Row) */ export interface VoyageLeg { from: string; to: string; distance: number; speed: number; atSeaDays: { total: number; nonSeca: number; seca: number; }; inPortDays: { total: number; work: number; idle: number; }; _internal?: { dayNonSeca: number; daySeca: number; dayWork: number; dayIdle: number; distNonSeca: number; distSeca: number; euScope: boolean; isPrevEu: boolean; activity: Activity; portCosts: number; isLaden: boolean; }; } export interface CalculatedCargo { cargoName: string; quantity: number; grossFreight: number; netFreight: number; } export interface VesselSummary { dwt: number; builtYear: number; loa: number; beam: number; dailyHire: number; netHireDaily: number; ballastBonus: number; otherCosts: number; consumption: ConsumptionProfile; } export interface FreightCalculationResult { legs: VoyageLeg[]; cargos: CalculatedCargo[]; vessel: VesselSummary; voyageSummary: { durationNonSecaSea: number; durationSecaSea: number; durationWork: number; durationIdle: number; totalDuration: number; distanceNonSeca: number; distanceSeca: number; distanceTotal: number; }; financials: { freightTons: number; grossFreight: number; netFreight: number; portCosts: number; fixCosts: number; totalCosts: number; tce: number; grossHire: number; netHire: number; voyEquiv: number; grossProfit: number; netProfit: number; }; bunkerCosts: { items: { type: string; cons: number; price: number; cost: number; }[]; totalCost: number; }; carbonCosts: { euas: number; euaCost: number; fuelEuPenalty: number; totalCost: number; }; } export declare class FreightHelper { /** * 计算单行货物的营收数据 * 用于前端表格实时计算展示 * 返回: { revenue (Gross Freight), netFreight } */ static calculateCargoFinancials(cargo: CargoItem): { revenue: number; netFreight: number; }; /** * 计算航程各段详细数据 * 输入: 港口列表 (Schedule) * 输出: 航段列表 (Legs) */ static calculateLegs(schedule: ScheduleItem[], vessel: VesselParticulars): VoyageLeg[]; /** * 主要计算函数 */ static calculate(schedule: ScheduleItem[], cargos: CargoItem[], vessel: VesselParticulars, carbon: CarbonOptions): FreightCalculationResult; }