@idm-plugin/ghg
Version:
idm plugin for greenhouse gas
222 lines (221 loc) • 5.17 kB
TypeScript
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;
}