Remodelers Guide

Wage Calculator

Total Compensation Calculator Gross pay per hour ($) Hours worked per week Overtime 1.5x over 40 hrs Holiday days per year Vacation days per year Employer health contribution ($/month) Employee health contribution ($/month) 401k employer match (% of pay)
Calculate Reset
(function(){ const HOURS_PER_DAY = 8; function $(id){ return document.getElementById(id); } function num(id){ return parseFloat($(id).value || 0); } function fmt0(n){ return n.toLocaleString(undefined,{style:'currency',currency:'USD',maximumFractionDigits:0}); } function fmt2(n){ return n.toLocaleString(undefined,{style:'currency',currency:'USD',maximumFractionDigits:2}); } function calc(){ const hourly = num('dbtcc_hourly'); const hpw = num('dbtcc_hours_per_week'); const otEnabled = $('dbtcc_ot_toggle').checked; const holidayDays = num('dbtcc_holiday_days'); const vacationDays = num('dbtcc_vacation_days'); const empHealthMonth = num('dbtcc_health_employer_month'); const eeHealthMonth = num('dbtcc_health_employee_month'); const matchPct = num('dbtcc_match_percent') / 100; const baseHours = otEnabled ? Math.min(hpw, 40) : hpw; const otHours = otEnabled ? Math.max(hpw - 40, 0) : 0; const weeklyBase = baseHours * hourly; const weeklyOT = otHours * hourly * 1.5; const annualWages = (weeklyBase + weeklyOT) * 52; const paidHolidayValue = holidayDays * HOURS_PER_DAY * hourly; const paidVacationValue = vacationDays * HOURS_PER_DAY * hourly; const employerHealthAnnual = empHealthMonth * 12; const employerMatch = annualWages * matchPct; const totalAnnualComp = annualWages + paidHolidayValue + paidVacationValue + employerHealthAnnual + employerMatch; const annualWorkedHours = (baseHours + otHours) * 52; const paidDaysHours = (holidayDays + vacationDays) * HOURS_PER_DAY; const effectiveHours = annualWorkedHours + paidDaysHours; const effectiveHourly = effectiveHours > 0 ? (totalAnnualComp / effectiveHours) : 0; const rows = , , , , , , , ]; let html = '

Annualized Breakdown

'; rows.forEach((r, idx) => { const strong = idx === rows.length - 1 ? 'font-weight:600;' : ''; html += '
' + ''+r+''+r+'
'; }); html += '

Effective Rates

'; html += '
Effective hourly (incl. benefits):'+fmt2(effectiveHourly)+'
'; html += '
Baseline hourly (input):'+fmt2(hourly)+'
'; html += '

Employee health entered: '+fmt0(eeHealthMonth*12)+' per year (not added to total compensation).

'; $('dbtcc_results').innerHTML = html; } function resetForm(){ $('dbtcc_hourly').value = 30; $('dbtcc_hours_per_week').value = 40; $('dbtcc_ot_toggle').checked = true; $('dbtcc_holiday_days').value = 6; $('dbtcc_vacation_days').value = 10; $('dbtcc_health_employer_month').value = 600; $('dbtcc_health_employee_month').value = 150; $('dbtcc_match_percent').value = 4; $('dbtcc_results').innerHTML = ''; } document.addEventListener('DOMContentLoaded', function(){ const c = document.getElementById('dbtcc_calc_btn'); const r = document.getElementById('dbtcc_reset_btn'); if(c) c.addEventListener('click', calc); if(r) r.addEventListener('click', resetForm); }); })();