{
  "schemaVersion": 1,
  "slug": "hourly-to-salary-calculator",
  "category": "finance",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "83324f93bf308a2e5d5760f1fd561ed36b92f883e0020c2852220e03cfbca88f",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/hourly-to-salary-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": "S = r × h × W ; M = S ÷ 12 ; Wk = r × h ; D = r × d",
    "vars": [
      [
        "r",
        "hourly rate"
      ],
      [
        "h",
        "hours per week"
      ],
      [
        "W",
        "working weeks per year"
      ],
      [
        "d",
        "hours per day"
      ]
    ],
    "note": "S annual salary, M monthly, Wk weekly, D daily pay; overtime and taxes not included."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-22",
    "sources": [
      {
        "name": "US Department of Labor — Hours worked and overtime under the FLSA",
        "url": "https://www.dol.gov/agencies/whd/fact-sheets/22-flsa-hours-worked"
      }
    ],
    "referenceRole": "context",
    "implementationHash": "83324f93bf308a2e5d5760f1fd561ed36b92f883e0020c2852220e03cfbca88f",
    "basis": "S = r × h × W ; M = S ÷ 12 ; Wk = r × h ; D = r × d",
    "limitations": "The references provide context and limitations. They do not validate this page’s illustrative multipliers, lookup values or predictions."
  },
  "contract": {
    "compute": "const empty={annual:null,monthly:null,weekly:null,daily:null};const code=typeof currency==='undefined'?'USD':currency;if(![hourlyRate,hoursPerWeek,weeksPerYear,hoursPerDay].every(Number.isFinite)||hourlyRate<0||hourlyRate>10000||hoursPerWeek<0||hoursPerWeek>168||weeksPerYear<1||weeksPerYear>52||!Number.isInteger(weeksPerYear)||hoursPerDay<0||hoursPerDay>24||![\"USD\", \"EUR\", \"GBP\", \"NOK\", \"DKK\", \"SEK\", \"CHF\", \"PLN\", \"CZK\", \"HUF\", \"RON\", \"TRY\", \"CAD\", \"AUD\", \"JPY\", \"CNY\", \"INR\", \"BRL\", \"MXN\", \"VND\", \"KRW\", \"IDR\", \"THB\"].includes(code))return{...empty,__error:'inputError'};const weekly=hourlyRate*hoursPerWeek;return{annual:weekly*weeksPerYear,monthly:weekly*weeksPerYear/12,weekly,daily:hourlyRate*hoursPerDay,__moneyUnit:code};",
    "inputs": [
      {
        "name": "currency",
        "type": "select",
        "default": "USD",
        "options": [
          {
            "value": "USD"
          },
          {
            "value": "EUR"
          },
          {
            "value": "GBP"
          },
          {
            "value": "NOK"
          },
          {
            "value": "DKK"
          },
          {
            "value": "SEK"
          },
          {
            "value": "CHF"
          },
          {
            "value": "PLN"
          },
          {
            "value": "CZK"
          },
          {
            "value": "HUF"
          },
          {
            "value": "RON"
          },
          {
            "value": "TRY"
          },
          {
            "value": "CAD"
          },
          {
            "value": "AUD"
          },
          {
            "value": "JPY"
          },
          {
            "value": "CNY"
          },
          {
            "value": "INR"
          },
          {
            "value": "BRL"
          },
          {
            "value": "MXN"
          },
          {
            "value": "VND"
          },
          {
            "value": "KRW"
          },
          {
            "value": "IDR"
          },
          {
            "value": "THB"
          }
        ]
      },
      {
        "name": "hourlyRate",
        "type": "number",
        "default": 25,
        "min": 0,
        "max": 10000,
        "step": 0.25,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "hoursPerWeek",
        "type": "number",
        "default": 40,
        "min": 0,
        "max": 168,
        "step": 0.5,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "weeksPerYear",
        "type": "number",
        "default": 52,
        "min": 1,
        "max": 52,
        "step": 1,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "hoursPerDay",
        "type": "number",
        "default": 8,
        "min": 0,
        "max": 24,
        "step": 0.5,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      }
    ],
    "outputs": [
      {
        "name": "annual",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit",
        "trimTrailingZeros": true
      },
      {
        "name": "monthly",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit",
        "trimTrailingZeros": true
      },
      {
        "name": "weekly",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit",
        "trimTrailingZeros": true
      },
      {
        "name": "daily",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit",
        "trimTrailingZeros": true
      }
    ],
    "interpret": null
  }
}
