{
  "schemaVersion": 1,
  "slug": "moving-truck-size-calculator",
  "category": "moving",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "6f45094c5399c7519f32871579e1ca38e21755c6b08e25ca1b838d282bcbf5ee",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/moving-truck-size-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "V = 250b + 180l + 45g + 2.5x; C₀=250, C₁=450, C₂=700, C₃=1200; i = max({k ∈ {0,1,2,3} : C_k < V} ∪ {0}); C = C_i; T = max(1, ⌈V ÷ C⌉)",
    "vars": [
      [
        "V",
        "Total load volume (cu ft)"
      ],
      [
        "b, l, g, x",
        "Bedrooms, living rooms, large items, boxes"
      ],
      [
        "C_k",
        "Truck capacities: 250 / 450 / 700 / 1200 cu ft"
      ],
      [
        "i",
        "Selected truck index (largest capacity strictly below V)"
      ],
      [
        "C",
        "Selected truck capacity, C = C_i"
      ],
      [
        "T",
        "Number of trips"
      ]
    ],
    "note": "Estimated volume = 250 cu ft per bedroom + 180 per living area + 45 per large item + 2.5 per box. Selects the largest vehicle class crossed by volume thresholds (250/450/700/1,200 cu ft), then estimates trips by ceiling(volume/capacity). This is a rough volume model and does not assess payload weight or actual rental inventory."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "sources": [
      {
        "name": "U-Haul — Truck capacity and loading specifications",
        "url": "https://www.uhaul.com/Truck-Rentals/"
      }
    ],
    "referenceRole": "input",
    "implementationHash": "6f45094c5399c7519f32871579e1ca38e21755c6b08e25ca1b838d282bcbf5ee",
    "basis": "V = 250b + 180l + 45g + 2.5x; C₀=250, C₁=450, C₂=700, C₃=1200; i = max({k ∈ {0,1,2,3} : C_k < V} ∪ {0}); C = C_i; T = max(1, ⌈V ÷ C⌉)",
    "limitations": "Use the cited guidance and your own measurements, bills or product specifications to choose inputs. Sample defaults are not current local data."
  },
  "contract": {
    "compute": "const vol=bedrooms*250+livingRooms*180+largeItems*45+boxes*2.5,trucks=[['Cargo van',250],['Small truck',450],['Medium truck',700],['Large truck',1200]];const pick=trucks.find(t=>vol<=t[1])||trucks[trucks.length-1],cap=pick[1],trips=vol>0?Math.ceil(vol/cap):0;return{volumeCuFt:vol,recommendedTruck:pick[0],truckCapacity:cap,trips,utilisation:trips>0?vol/(cap*trips)*100:0};",
    "inputs": [
      {
        "name": "bedrooms",
        "type": "number",
        "default": 3,
        "min": 0,
        "max": 20,
        "step": 1,
        "slider": true
      },
      {
        "name": "livingRooms",
        "type": "number",
        "default": 2,
        "min": 0,
        "max": 10,
        "step": 1,
        "slider": true
      },
      {
        "name": "largeItems",
        "type": "number",
        "default": 6,
        "min": 0,
        "max": 100,
        "step": 1,
        "slider": true
      },
      {
        "name": "boxes",
        "type": "number",
        "default": 90,
        "min": 0,
        "max": 5000,
        "step": 1,
        "slider": true
      }
    ],
    "outputs": [
      {
        "name": "recommendedTruck",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "volumeCuFt",
        "precision": 0,
        "unit": "cu ft"
      },
      {
        "name": "truckCapacity",
        "precision": 0,
        "unit": "cu ft"
      },
      {
        "name": "trips",
        "precision": 1,
        "unit": ""
      },
      {
        "name": "utilisation",
        "precision": 1,
        "unit": "%"
      }
    ],
    "interpret": null
  }
}
