{
  "schemaVersion": 1,
  "slug": "moving-cost-calculator",
  "category": "everyday",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "c186f8e28b4edc6492c70640d4b5a35ba1fd664ca4d244b02c8e395a84304389",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/moving-cost-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": "T = b + 22×W×m/1000 + 3.5×max(0,d−50)×s + 2.5x + p + 0.35V + 180×M×V/1000 + 0.006E; W = 7V",
    "vars": [
      [
        "T",
        "estimated total cost"
      ],
      [
        "V",
        "load volume, cu ft (lookup)"
      ],
      [
        "d",
        "distance, miles"
      ],
      [
        "x",
        "self-packed boxes"
      ],
      [
        "M",
        "months of storage"
      ],
      [
        "E",
        "declared insurance value"
      ]
    ],
    "note": "V is a fixed bedroom-based volume estimate (250/600/1,100/1,600/2,200/2,800 cu ft); W = 7V lb. Transport = base charge + (W/1,000 × type-specific rate × distance), plus $3.50 per mile over 50 for local moves. Packing = $2.50 per self-packed box + service fee (0/250/900) + $0.35V; storage = $180 × months × V/1,000; valuation = declared value × the user-entered rate %. All figures are editable planning assumptions in USD, not a quote."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "sources": [
      {
        "name": "FMCSA — Written moving estimates and included charges (US interstate context)",
        "url": "https://www.fmcsa.dot.gov/consumer-protection/protect-your-move/what-binding-move-estimate"
      }
    ],
    "referenceRole": "input",
    "implementationHash": "c186f8e28b4edc6492c70640d4b5a35ba1fd664ca4d244b02c8e395a84304389",
    "basis": "T = b + 22×W×m/1000 + 3.5×max(0,d−50)×s + 2.5x + p + 0.35V + 180×M×V/1000 + 0.006E; W = 7V",
    "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 V={studio:250,'1bed':600,'2bed':1100,'3bed':1600,'4bed':2200,'5bed':2800},volumeCf=V[bedrooms]||1100,weightEstimate=volumeCf*7,perMile={local:.1,longDistance:.55,interstate:.65,international:1.4},base={local:250,longDistance:900,interstate:1100,international:2500};const hireCost=base[moveType]+(weightEstimate/1000)*perMile[moveType]*distance+(moveType==='local'?Math.max(0,distance-50)*3.5:0),P={none:0,partial:250,full:900},packingCost=boxesEstimate*2.5+P[packingService]+volumeCf*.35,storageCost=storageMonths*volumeCf/1000*180,insuranceCost=insuranceValue*insuranceRatePct/100,total=hireCost+packingCost+storageCost+insuranceCost;return{weightEstimate,volumeCf,hireCost,packingCost,storageCost,insuranceCost,total};",
    "inputs": [
      {
        "name": "distance",
        "type": "number",
        "default": 300,
        "min": 1,
        "max": 10000,
        "step": 10,
        "slider": true
      },
      {
        "name": "bedrooms",
        "type": "select",
        "default": "2bed",
        "options": [
          {
            "value": "studio"
          },
          {
            "value": "1bed"
          },
          {
            "value": "2bed"
          },
          {
            "value": "3bed"
          },
          {
            "value": "4bed"
          },
          {
            "value": "5bed"
          }
        ]
      },
      {
        "name": "moveType",
        "type": "select",
        "default": "longDistance",
        "options": [
          {
            "value": "local"
          },
          {
            "value": "longDistance"
          },
          {
            "value": "interstate"
          },
          {
            "value": "international"
          }
        ]
      },
      {
        "name": "packingService",
        "type": "select",
        "default": "partial",
        "options": [
          {
            "value": "none"
          },
          {
            "value": "partial"
          },
          {
            "value": "full"
          }
        ]
      },
      {
        "name": "boxesEstimate",
        "type": "number",
        "default": 40,
        "min": 0,
        "max": 500,
        "step": 5,
        "slider": true
      },
      {
        "name": "storageMonths",
        "type": "number",
        "default": 0,
        "min": 0,
        "max": 24,
        "step": 1,
        "slider": true
      },
      {
        "name": "insuranceValue",
        "type": "number",
        "default": 20000,
        "min": 0,
        "max": 2000000,
        "step": 500
      },
      {
        "name": "insuranceRatePct",
        "type": "number",
        "default": 0.6,
        "min": 0,
        "max": 10,
        "step": 0.1
      }
    ],
    "outputs": [
      {
        "name": "total",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "weightEstimate",
        "precision": 0,
        "unit": "lb"
      },
      {
        "name": "volumeCf",
        "precision": 0,
        "unit": "cu ft"
      },
      {
        "name": "hireCost",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "packingCost",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "storageCost",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "insuranceCost",
        "precision": 0,
        "unit": "$"
      }
    ],
    "interpret": null
  }
}
