Calculate shipping costs based on the Weight or Measurement (W/M) rule.
Chargeable Weight (Revenue Ton):0.00
Ocean Freight Subtotal:$0.00
Variable Surcharges (Origin/Dest):$0.00
Fixed Documentation Fees:$0.00
Estimated Total Shipping Cost:$0.00
Understanding Ocean LCL Rate Calculations
Shipping via Less than Container Load (LCL) is a cost-effective way to move cargo that doesn't fill a whole 20ft or 40ft container. However, calculating the final bill can be confusing because ocean carriers use a specific rule called the W/M (Weight or Measurement) rule.
How the W/M Rule Works
In sea freight, carriers charge based on whichever is greater: the volume of the cargo in Cubic Meters (CBM) or the weight of the cargo in Metric Tons. This is known as the Revenue Ton (RT).
The Ratio: 1,000 Kilograms = 1 Metric Ton = 1 CBM.
If your cargo is 2 CBM but only weighs 500kg, you are charged for 2 RT.
If your cargo is 1 CBM but weighs 1,500kg, you are charged for 1.5 RT.
Key Components of LCL Pricing
When you receive an LCL quote, it usually consists of three main parts:
Ocean Freight: The port-to-port transportation cost, usually quoted per CBM/RT.
Origin/Destination Surcharges: These include Terminal Handling Charges (THC), unstuffing fees, and port dues. These are often calculated based on the chargeable weight.
Flat Fees: Fees like Bill of Lading (B/L) documentation, AMS filings, or customs entry that don't change regardless of cargo size.
Realistic Calculation Example
Imagine you are shipping 3 pallets of electronics:
Volume: 4.2 CBM
Weight: 1,800 KG (1.8 Metric Tons)
Ocean Freight: $60 per RT
Local Charges: $40 per RT
Flat Docs Fee: $100
Since 4.2 CBM is greater than 1.8 Tons, the Chargeable Weight is 4.2 RT. Your cost would be (4.2 * $60) + (4.2 * $40) + $100 = $520.
function calculateLCLRate() {
var cbm = parseFloat(document.getElementById('cargoVolume').value) || 0;
var weightKg = parseFloat(document.getElementById('cargoWeight').value) || 0;
var oceanRate = parseFloat(document.getElementById('oceanRate').value) || 0;
var originCharges = parseFloat(document.getElementById('originCharges').value) || 0;
var destCharges = parseFloat(document.getElementById('destCharges').value) || 0;
var flatFees = parseFloat(document.getElementById('flatFees').value) || 0;
// 1. Calculate Weight in Metric Tons
var weightTons = weightKg / 1000;
// 2. Determine Chargeable Weight (Revenue Ton) – The W/M Rule
var chargeableWeight = Math.max(cbm, weightTons);
if (chargeableWeight <= 0) {
alert("Please enter valid volume or weight.");
return;
}
// 3. Calculate Components
var subtotalOcean = chargeableWeight * oceanRate;
var subtotalSurcharges = chargeableWeight * (originCharges + destCharges);
var grandTotal = subtotalOcean + subtotalSurcharges + flatFees;
// 4. Update UI
document.getElementById('resChargeable').innerText = chargeableWeight.toFixed(3) + " RT";
document.getElementById('resOceanSub').innerText = "$" + subtotalOcean.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resSurcharges').innerText = "$" + subtotalSurcharges.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resFixed').innerText = "$" + flatFees.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotal').innerText = "$" + grandTotal.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Show results
document.getElementById('lclResults').style.display = 'block';
}