{
  "schemaVersion": 1,
  "slug": "car-wrap-cost-calculator",
  "category": "automotive",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "a91a44639a9d54d9a6dc6e180a5a61ed4731becf3889833ce1f7dbb50e090b51",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/car-wrap-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": "Cost = 1.15·A·c·p·m + (1.15·A·c ÷ 22)·k·r",
    "vars": [
      [
        "A",
        "Base vehicle area (sq ft)"
      ],
      [
        "c",
        "Coverage factor (0.35 or 1)"
      ],
      [
        "p",
        "Material price per sq ft"
      ],
      [
        "m",
        "Material multiplier (0.8–2.4)"
      ],
      [
        "k",
        "Labour factor (1 full, 1.2 partial)"
      ],
      [
        "r",
        "Labour rate per hour"
      ],
      [
        "Cost",
        "Total wrap cost"
      ]
    ],
    "note": "USD planning model: vehicle area × coverage × 1.15 waste factor; material uses entered price and illustrative material multipliers. Labour assumes 22 sq ft/hour, with a 1.2 partial-wrap factor. No shop quote or shape-specific work is included."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const A = { compact:150, sedan:190, suv:230, truck:250, van:280, sports:170 }; const M = { calendared:0.8, cast:1, colorShift:1.9, matte:1.15, ppf:2.4 }; const C = { partial:0.35, full:1 }; const areaSqft = (A[vehicleType] || 190)*(C[coverage] || 1)*1.15; const materialCost = areaSqft*(materialPrice*(M[materialType] || 1)); const labourHours = areaSqft/22*(coverage === 'full' ? 1 : 1.2); return { areaSqft, materialCost, labourHours, labourCost: labourHours*labourRate, totalCost: materialCost+labourHours*labourRate };",
    "inputs": [
      {
        "name": "vehicleType",
        "type": "select",
        "default": "sedan",
        "options": [
          {
            "value": "compact"
          },
          {
            "value": "sedan"
          },
          {
            "value": "suv"
          },
          {
            "value": "truck"
          },
          {
            "value": "van"
          },
          {
            "value": "sports"
          }
        ]
      },
      {
        "name": "materialType",
        "type": "select",
        "default": "cast",
        "options": [
          {
            "value": "calendared"
          },
          {
            "value": "cast"
          },
          {
            "value": "colorShift"
          },
          {
            "value": "matte"
          },
          {
            "value": "ppf"
          }
        ]
      },
      {
        "name": "coverage",
        "type": "select",
        "default": "full",
        "options": [
          {
            "value": "partial"
          },
          {
            "value": "full"
          }
        ]
      },
      {
        "name": "materialPrice",
        "type": "number",
        "default": 4.5,
        "min": 0.5,
        "max": 50,
        "step": 0.25,
        "slider": true
      },
      {
        "name": "labourRate",
        "type": "number",
        "default": 85,
        "min": 0,
        "max": 300,
        "step": 5,
        "slider": true
      }
    ],
    "outputs": [
      {
        "name": "areaSqft",
        "precision": 0,
        "unit": "sq ft"
      },
      {
        "name": "materialCost",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "labourHours",
        "precision": 1,
        "unit": "h"
      },
      {
        "name": "labourCost",
        "precision": 0,
        "unit": "$"
      },
      {
        "name": "totalCost",
        "precision": 0,
        "unit": "$"
      }
    ],
    "interpret": null
  }
}
