feat: fuel surcharge per lane and cargo type

This commit is contained in:
Marshal
2026-08-12 13:47:53 +00:00
parent dd39c2be7c
commit ff3cee12e3
4 changed files with 42 additions and 21 deletions

View File

@@ -302,15 +302,18 @@ export class ContractPricingService {
r.cargoTypeId === scope.cargoTypeId,
);
if (fuel && Number(fuel.rateValue) > 0) {
const base = Number(fuel.baseLiters ?? 0);
// Per-liter collapses to one flat total (base liters × rate value) —
// the customer only sees the final price, and booking pricing bills
// the same flat figure once (see RuleEngineService.fuelCharges).
const perLiter = fuel.rateUnit === 'PER_LITER';
const total = perLiter
? Number(fuel.baseLiters ?? 0) * Number(fuel.rateValue)
: Number(fuel.rateValue);
lineItems.push({
code: 'FUEL_SURCHARGE',
label:
fuel.rateUnit === 'PER_LITER'
? `Fuel surcharge (${scope.cargoType.cargoTypeName}, ${base} liters)`
: `Fuel surcharge (${scope.cargoType.cargoTypeName})`,
unit: toContractUnit(fuel.rateUnit),
unitPrice: convert(Number(fuel.rateValue)),
label: `Fuel surcharge (${scope.cargoType.cargoTypeName})`,
unit: perLiter ? 'flat' : toContractUnit(fuel.rateUnit),
unitPrice: convert(total),
cargoTypeCode: scope.cargoType.code ?? null,
conditionalOn: 'has_fuel',
});