{
  "schemaVersion": 1,
  "slug": "led-savings-calculator",
  "category": "household",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "bfd8d24e562bb9ef3de03d4b1915b390eb94ddaa6fbe71e09a7f0b401ea7e951",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/led-savings-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": "E = n × max(W_old − W_led, 0) ÷ 1000 × h × 365; save = E × r; payback = n × p ÷ save × 12",
    "vars": [
      [
        "n",
        "number of bulbs"
      ],
      [
        "W_old",
        "old bulb power (W)"
      ],
      [
        "W_led",
        "LED power (W)"
      ],
      [
        "h",
        "daily use (hours)"
      ],
      [
        "r",
        "electricity rate per kWh"
      ],
      [
        "p",
        "price per LED bulb"
      ]
    ],
    "note": "Annual energy saved (kWh); payback is in months and is undefined when modeled savings are zero."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const mergedResult=(()=>{\nif((true&&(!Number.isFinite(count)||count<1||count>1000))||(true&&(!Number.isFinite(oldWatts)||oldWatts<1||oldWatts>1000))||(true&&(!Number.isFinite(newWatts)||newWatts<0.5||newWatts>500))||(true&&(!Number.isFinite(hoursPerDay)||hoursPerDay<0||hoursPerDay>24))||(true&&(!Number.isFinite(rate)||rate<0||rate>5))||(true&&(!Number.isFinite(price)||price<0||price>100)))return{__error:'inputError'};\nconst diff = Math.max(oldWatts-newWatts, 0); const kwhSaved = count*diff/1000*hoursPerDay*365; const costSaved = kwhSaved*rate; const cost = count*price; return { wattsSaved:diff*count,kwhSaved, costSaved, payback: costSaved > 0 ? cost/costSaved*12 : null };\n})();return mergedResult.__error?{\"kwhSaved\":null,\"costSaved\":null,\"payback\":null,\"wattsSaved\":null,...mergedResult}:mergedResult;",
    "inputs": [
      {
        "name": "count",
        "type": "number",
        "default": 10,
        "min": 1,
        "max": 1000,
        "step": 1,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "oldWatts",
        "type": "number",
        "default": 60,
        "min": 1,
        "max": 1000,
        "step": 1,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "newWatts",
        "type": "number",
        "default": 9,
        "min": 0.5,
        "max": 500,
        "step": 0.5,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "hoursPerDay",
        "type": "number",
        "default": 4,
        "min": 0,
        "max": 24,
        "step": 0.5,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "rate",
        "type": "number",
        "default": 0.17,
        "min": 0,
        "max": 5,
        "step": 0.001,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "price",
        "type": "number",
        "default": 3,
        "min": 0,
        "max": 100,
        "step": 0.1,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      }
    ],
    "outputs": [
      {
        "name": "kwhSaved",
        "precision": 0,
        "unit": "kWh"
      },
      {
        "name": "costSaved",
        "precision": 2,
        "unit": "$"
      },
      {
        "name": "payback",
        "precision": 1,
        "unit": "mo",
        "optional": true
      },
      {
        "name": "wattsSaved",
        "precision": 1,
        "unit": "W"
      }
    ],
    "interpret": null
  }
}
