{
  "schemaVersion": 1,
  "slug": "salary-to-hourly-calculator",
  "category": "finance",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "e275066d2a2325ec7b10ee08c9c1012c8fba51185832477a48b111d941755070",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/salary-to-hourly-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": "R_h = S / (W × H); S = M × 12",
    "vars": [
      [
        "R_h",
        "Hourly rate"
      ],
      [
        "S",
        "Annual salary"
      ],
      [
        "W",
        "Working weeks per year, typically 52"
      ],
      [
        "H",
        "Hours worked per week, typically 40"
      ],
      [
        "M",
        "Monthly"
      ]
    ],
    "note": "For pay per hour actually worked, subtract non-working holiday weeks. For pay per paid hour, include paid leave. The daily equivalent assumes five working days per week. This is gross pay, with no tax, overtime or exchange-rate calculation."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "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": "e275066d2a2325ec7b10ee08c9c1012c8fba51185832477a48b111d941755070",
    "basis": "R_h = S / (W × H); S = M × 12",
    "limitations": "The references provide context and limitations. They do not validate this page’s illustrative multipliers, lookup values or predictions."
  },
  "contract": {
    "compute": "const empty={hourly:null,monthly:null,weekly:null,daily:null};const period=typeof payPeriod==='undefined'?'annual':payPeriod,code=typeof currency==='undefined'?'USD':currency;if(!Number.isFinite(annual)||annual<0||!Number.isFinite(hoursPerWeek)||hoursPerWeek<1||hoursPerWeek>168||!Number.isFinite(weeksPerYear)||weeksPerYear<1||weeksPerYear>52||!Number.isInteger(weeksPerYear)||!['annual','monthly'].includes(period)||![\"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 year=period==='monthly'?annual*12:annual,hourly=year/(hoursPerWeek*weeksPerYear);if(!Number.isFinite(year)||!Number.isFinite(hourly))return{...empty,__error:'inputError'};return{hourly,monthly:year/12,weekly:year/weeksPerYear,daily:hourly*(hoursPerWeek/5),__moneyUnit:code,__hourUnit:code+'/h'};",
    "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": "payPeriod",
        "type": "select",
        "default": "annual",
        "options": [
          {
            "value": "annual"
          },
          {
            "value": "monthly"
          }
        ]
      },
      {
        "name": "annual",
        "type": "number",
        "default": 60000,
        "min": 0,
        "step": 500,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "hoursPerWeek",
        "type": "number",
        "default": 40,
        "min": 1,
        "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
      }
    ],
    "outputs": [
      {
        "name": "hourly",
        "precision": 2,
        "unit": "",
        "unitField": "__hourUnit"
      },
      {
        "name": "daily",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit"
      },
      {
        "name": "weekly",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit"
      },
      {
        "name": "monthly",
        "precision": 2,
        "unit": "",
        "unitField": "__moneyUnit"
      }
    ],
    "interpret": null
  }
}
