Employee Severance Pay Calculator

Calculates estimated gross severance pay based on *your* inputs and defined policy rules. Taxes are not included.

Employee Pay & Length of Service

(Enter total years, including partial years like 5.5 for 5 years and 6 months.)

Severance Policy Rules

Define how severance pay is calculated according to the company policy.

Other Payouts (Annual)

Add any other lump-sum payments included with severance (e.g., unused vacation pay, bonus payout). Enter the **gross** amount for each.

Calculation Results

Enter details in the tabs above and click Calculate.

Please enter valid non-negative numbers for service length, rates, minimums, and maximums.

'; downloadPdfBtn.style.display = 'none'; resultsAreaDiv.dataset.inputs = ''; resultsAreaDiv.dataset.calculations = ''; return; } // Check for valid pay input based on type if ((payType === 'hourly' && (hourlyRate <= 0 || standardHoursPerWeek <= 0)) || (payType === 'salary' && annualSalaryInput <= 0)) { resultsSummaryDiv.innerHTML = '

Calculation Results

Please enter a valid Hourly Rate and Hours Per Week, or a valid Annual Salary.

'; downloadPdfBtn.style.display = 'none'; resultsAreaDiv.dataset.inputs = ''; resultsAreaDiv.dataset.calculations = ''; return; } // --- Calculations --- // 1. Determine Annual Salary and Pay Equivalents let annualSalary = 0; if (payType === 'hourly') { annualSalary = hourlyRate * standardHoursPerWeek * 52; } else { // salary annualSalary = annualSalaryInput; } const weeklyPay = annualSalary / 52; const monthlyPay = annualSalary / 12; // 2. Adjust Length of Service let adjustedLengthOfService = lengthOfServiceYears; if (partialYearTreatment === 'roundup') { adjustedLengthOfService = Math.ceil(lengthOfServiceYears); } else if (partialYearTreatment === 'rounddown') { adjustedLengthOfService = Math.floor(lengthOfServiceYears); } // For prorated, it remains lengthOfServiceYears // 3. Calculate Base Severance Pay let baseSeverance = 0; if (calculationBasis === 'weeks') { baseSeverance = adjustedLengthOfService * ratePerYear * weeklyPay; } else { // months baseSeverance = adjustedLengthOfService * ratePerYear * monthlyPay; } // 4. Apply Minimum Severance let severanceAfterMinimum = baseSeverance; if (includeMinimum && minimumSeveranceValue >= 0) { // Check minimum value is non-negative let calculatedMinimum = 0; if (minimumBasis === 'weeks') { calculatedMinimum = minimumSeveranceValue * weeklyPay; } else { // months calculatedMinimum = minimumSeveranceValue * monthlyPay; } severanceAfterMinimum = Math.max(baseSeverance, calculatedMinimum); } // 5. Apply Maximum Severance let finalSeverance = severanceAfterMinimum; if (includeMaximum) { let calculatedMaximum = Infinity; // Start with a high number if (maximumCapType === 'weeks_months' && maximumCapValueWeeksMonths >= 0) { // Check max value is non-negative if (maximumBasisCap === 'weeks') { calculatedMaximum = maximumCapValueWeeksMonths * weeklyPay; } else { // months calculatedMaximum = maximumCapValueWeeksMonths * monthlyPay; } } else if (maximumCapType === 'fixed' && maximumCapAmountFixed >= 0) { // Check max value is non-negative calculatedMaximum = maximumCapAmountFixed; } // Only apply max if it was calculated (i.e., max value was >= 0) if (calculatedMaximum !== Infinity) { finalSeverance = Math.min(severanceAfterMinimum, calculatedMaximum); } } // 6. Sum Other Payouts let totalOtherPayouts = 0; const otherPayoutsList = []; document.querySelectorAll('#customOtherPayoutsArea .custom').forEach(item => { const nameInput = item.querySelector('.other-payout-name'); const amountInput = item.querySelector('.other-payout-amount'); const name = nameInput.value.trim() || `Other Payout ${item.dataset.id}`; const amount = parseFloat(amountInput.value) || 0; if (amount > 0) { totalOtherPayouts += amount; otherPayoutsList.push({ name: name, amount: amount }); } }); // 7. Calculate Total Gross Severance Pay const totalGrossSeverancePay = finalSeverance + totalOtherPayouts; // --- Display Results --- let resultsHTML = '

Calculation Results

'; // Display Inputs Used (Partial - full inputs in PDF) resultsHTML += '

Inputs Used:

'; resultsHTML += `
Employee Pay Type: ${payType.charAt(0).toUpperCase() + payType.slice(1)}
`; if (payType === 'hourly') { resultsHTML += `
Final Hourly Rate: ${formatCurrency(hourlyRate)}/hour
`; resultsHTML += `
Standard Hours Per Week: ${standardHoursPerWeek.toFixed(2)} hours
`; } else { resultsHTML += `
Final Annual Salary: ${formatCurrency(annualSalaryInput)}
`; } resultsHTML += `
Calculated Annual Salary: ${formatCurrency(annualSalary)}
`; resultsHTML += `
Calculated Weekly Pay: ${formatCurrency(weeklyPay)}
`; resultsHTML += `
Calculated Monthly Pay: ${formatCurrency(monthlyPay)}
`; resultsHTML += `
Length of Service (Years): ${lengthOfServiceYears.toFixed(2)}
`; resultsHTML += `
Severance Calculation Basis: ${calculationBasis.charAt(0).toUpperCase() + calculationBasis.slice(1)} per Year
`; resultsHTML += `
Rate Per Year of Service: ${ratePerYear.toFixed(2)} ${calculationBasis}
`; resultsHTML += `
Partial Year Treatment: ${partialYearTreatment.charAt(0).toUpperCase() + partialYearTreatment.slice(1)}
`; if (includeMinimum) resultsHTML += `
Minimum Severance: ${minimumSeveranceValue.toFixed(2)} ${minimumBasis}
`; if (includeMaximum) { resultsHTML += `
Maximum Severance Cap Type: ${maximumCapType === 'weeks_months' ? 'Weeks/Months of Pay' : 'Fixed Amount'}
`; if (maximumCapType === 'weeks_months') resultsHTML += `
Maximum Cap Value: ${maximumCapValueWeeksMonths.toFixed(2)} ${maximumBasisCap}
`; if (maximumCapType === 'fixed') resultsHTML += `
Maximum Cap Amount: ${formatCurrency(maximumCapAmountFixed)}
`; } // Display Calculated Items resultsHTML += '

Calculated Items:

'; resultsHTML += `
Adjusted Length of Service: ${adjustedLengthOfService.toFixed(2)} years
`; resultsHTML += `
Calculated Base Severance: ${formatCurrency(baseSeverance)}
`; if (includeMinimum) resultsHTML += `
Severance After Minimum Applied: ${formatCurrency(severanceAfterMinimum)}
`; if (includeMaximum) resultsHTML += `
Severance After Maximum Applied: ${formatCurrency(finalSeverance)}
`; // Display Other Payouts resultsHTML += '

Other Payouts:

'; if (otherPayoutsList.length > 0) { otherPayoutsList.forEach(payout => { resultsHTML += `
${payout.name}: ${formatCurrency(payout.amount)}
`; }); } else { resultsHTML += '

No other payouts added.

'; } resultsHTML += `
Total Other Payouts: ${formatCurrency(totalOtherPayouts)}
`; // Display Total Gross Severance Pay resultsHTML += `
Total Gross Severance Pay: ${formatCurrency(totalGrossSeverancePay)}
`; resultsHTML += `

Note: This is the *gross* amount. Taxes and other deductions will be withheld.

`; resultsSummaryDiv.innerHTML = resultsHTML + '
'; downloadPdfBtn.style.display = 'block'; // Show PDF button // Store data for PDF generation resultsAreaDiv.dataset.inputs = JSON.stringify({ payType: payType, hourlyRate: hourlyRate, standardHoursPerWeek: standardHoursPerWeek, annualSalaryInput: annualSalaryInput, lengthOfServiceYears: lengthOfServiceYears, calculationBasis: calculationBasis, ratePerYear: ratePerYear, partialYearTreatment: partialYearTreatment, includeMinimum: includeMinimum, minimumSeveranceValue: minimumSeveranceValue, minimumBasis: minimumBasis, includeMaximum: includeMaximum, maximumCapType: maximumCapType, maximumCapValueWeeksMonths: maximumCapValueWeeksMonths, maximumBasisCap: maximumBasisCap, maximumCapAmountFixed: maximumCapAmountFixed, otherPayoutsList: otherPayoutsList // Store the list of payouts entered }); resultsAreaDiv.dataset.calculations = JSON.stringify({ annualSalary: annualSalary, weeklyPay: weeklyPay, monthlyPay: monthlyPay, adjustedLengthOfService: adjustedLengthOfService, baseSeverance: baseSeverance, severanceAfterMinimum: severanceAfterMinimum, finalSeverance: finalSeverance, // Severance after min/max, before other payouts totalOtherPayouts: totalOtherPayouts, totalGrossSeverancePay: totalGrossSeverancePay }); } // Event listener for calculate button calculateBtn.addEventListener('click', calculateAndDisplay); // Trigger calculation when switching TO the results tab document.getElementById('results').addEventListener('transitionend', function() { if (this.classList.contains('active')) { calculateAndDisplay(); } }); // Initial state setup for pay type if (payTypeHourlyRadio.checked) { hourlyPayInputDiv.style.display = 'block'; salaryPayInputDiv.style.display = 'none'; } else { hourlyPayInputDiv.style.display = 'none'; salaryPayInputDiv.style.display = 'block'; } // Initial state setup for min/max visibility if (includeMinimumCheckbox.checked) { minimumSeveranceInputsDiv.style.display = 'block'; } else { minimumSeveranceInputsDiv.style.display = 'none'; } if (includeMaximumCheckbox.checked) { maximumSeveranceInputsDiv.style.display = 'block'; // Also set initial state for max cap type if (maximumCapWeeksMonthsRadio.checked) { maximumValueWeeksMonthsInputDiv.style.display = 'block'; maximumValueFixedInputDiv.style.display = 'none'; } else { maximumValueWeeksMonthsInputDiv.style.display = 'none'; maximumValueFixedInputDiv.style.display = 'block'; } } else { maximumSeveranceInputsDiv.style.display = 'none'; } // Initial label updates updateMinimumBasisLabel(); updateMaximumBasisCapLabel(); if (calculationBasisWeeksRadio.checked) { ratePerYearLabel.textContent = 'Weeks of Pay per Year of Service:'; } else { ratePerYearLabel.textContent = 'Months of Pay per Year of Service:'; } if (minimumBasisWeeksRadio.checked) { minimumSeveranceValueLabel.textContent = 'Minimum Severance Value (Weeks):'; } else { minimumSeveranceValueLabel.textContent = 'Minimum Severance Value (Months):'; } // --- PDF Generation --- downloadPdfBtn.addEventListener('click', function() { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const inputs = JSON.parse(resultsAreaDiv.dataset.inputs || '{}'); const calculations = JSON.parse(resultsAreaDiv.dataset.calculations || '{}'); if (!inputs || !calculations || calculations.totalGrossSeverancePay === undefined) { alert("No results to download. Please calculate first."); return; } // --- PDF Styling (Matching CSS color scheme) --- const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim(); const textColor = getComputedStyle(document.documentElement).getPropertyValue('--text-color').trim(); const outputBackgroundColor = getComputedStyle(document.documentElement).getPropertyValue('--output-background').trim(); const white = '#ffffff'; const green = '#27ae60'; doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text("Employee Severance Pay Calculation", 14, 22); doc.setFontSize(10); doc.setTextColor('#555'); doc.text("Based on user-provided inputs and policy rules. Gross estimate only.", 14, 30); doc.setFontSize(12); doc.setTextColor(textColor); let yPos = 40; // Inputs Section in PDF doc.text("Inputs & Policy Details:", 14, yPos); yPos += 7; doc.setFontSize(10); const inputsTableBody = [ ['Employee Pay Type', inputs.payType.charAt(0).toUpperCase() + inputs.payType.slice(1)], ]; if (inputs.payType === 'hourly') { inputsTableBody.push(['Final Hourly Rate', formatCurrency(inputs.hourlyRate) + '/hour']); inputsTableBody.push(['Standard Hours Per Week', inputs.standardHoursPerWeek.toFixed(2) + ' hours']); } else { inputsTableBody.push(['Final Annual Salary', formatCurrency(inputs.annualSalaryInput)]); } inputsTableBody.push(['Length of Service (Years)', inputs.lengthOfServiceYears.toFixed(2)]); inputsTableBody.push(['', '']); // Separator inputsTableBody.push(['Severance Basis', `${inputs.calculationBasis.charAt(0).toUpperCase() + inputs.calculationBasis.slice(1)} per Year`]); inputsTableBody.push(['Rate Per Year of Service', `${inputs.ratePerYear.toFixed(2)} ${inputs.calculationBasis}`]); inputsTableBody.push(['Partial Year Treatment', inputs.partialYearTreatment.charAt(0).toUpperCase() + inputs.partialYearTreatment.slice(1)]); inputsTableBody.push(['', '']); // Separator if (inputs.includeMinimum) inputsTableBody.push(['Minimum Severance Policy', `${inputs.minimumSeveranceValue.toFixed(2)} ${inputs.minimumBasis}`]); if (inputs.includeMaximum) { inputsTableBody.push(['Maximum Severance Cap Type', inputs.maximumCapType === 'weeks_months' ? 'Weeks/Months of Pay' : 'Fixed Amount']); if (inputs.maximumCapType === 'weeks_months') inputsTableBody.push(['Maximum Cap Value', `${inputs.maximumCapValueWeeksMonths.toFixed(2)} ${inputs.maximumBasisCap}`]); if (inputs.maximumCapType === 'fixed') inputsTableBody.push(['Maximum Cap Amount', formatCurrency(inputs.maximumCapAmountFixed)]); } doc.autoTable({ startY: yPos + 5, head: [['Description', 'Value']], body: inputsTableBody, theme: 'grid', styles: { textColor: textColor.substring(1), lineColor: '#cccccc', lineWidth: 0.1, cellPadding: 3 }, headStyles: { fillColor: primaryColor.substring(1), textColor: white.substring(1), fontStyle: 'bold' }, bodyStyles: { fillColor: outputBackgroundColor.substring(1), textColor: textColor.substring(1) }, alternateRowStyles: { fillColor: white.substring(1) }, margin: { top: yPos + 5 } }); const inputsTableFinalY = doc.autoTable.previous.finalY || yPos + 5; // Calculated Items Section in PDF yPos = inputsTableFinalY + 15; // Space after inputs table doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Calculated Values:", 14, yPos); const calculationsTableBody = [ ['Calculated Annual Salary', formatCurrency(calculations.annualSalary)], ['Calculated Weekly Pay', formatCurrency(calculations.weeklyPay)], ['Calculated Monthly Pay', formatCurrency(calculations.monthlyPay)], ['', ''], // Separator ['Adjusted Length of Service', calculations.adjustedLengthOfService.toFixed(2) + ' years'], ['Calculated Base Severance', formatCurrency(calculations.baseSeverance)], ]; if (inputs.includeMinimum) calculationsTableBody.push(['Severance After Minimum Applied', formatCurrency(calculations.severanceAfterMinimum)]); if (inputs.includeMaximum) calculationsTableBody.push(['Severance After Maximum Applied', formatCurrency(calculations.finalSeverance)]); doc.autoTable({ startY: yPos + 5, head: [['Calculation Step', 'Amount ($)']], body: calculationsTableBody, theme: 'grid', styles: { textColor: textColor.substring(1), lineColor: '#cccccc', lineWidth: 0.1, cellPadding: 3 }, headStyles: { fillColor: primaryColor.substring(1), textColor: white.substring(1), fontStyle: 'bold' }, bodyStyles: { fillColor: outputBackgroundColor.substring(1), textColor: textColor.substring(1) }, alternateRowStyles: { fillColor: white.substring(1) }, margin: { top: yPos + 5 } }); const calculationsTableFinalY = doc.autoTable.previous.finalY || yPos + 5; // Other Payouts in PDF yPos = calculationsTableFinalY + 15; // Space after calculations table doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Other Payouts Included:", 14, yPos); const payoutsTableBody = inputs.otherPayoutsList.map(p => [p.name, formatCurrency(p.amount)]); doc.autoTable({ startY: yPos + 5, head: [['Payout Name', 'Amount ($)']], body: payoutsTableBody.length > 0 ? payoutsTableBody : [['No other payouts added', '']], theme: 'grid', styles: { textColor: textColor.substring(1), lineColor: '#cccccc', lineWidth: 0.1, cellPadding: 3 }, headStyles: { fillColor: primaryColor.substring(1), textColor: white.substring(1), fontStyle: 'bold' }, bodyStyles: { fillColor: outputBackgroundColor.substring(1), textColor: textColor.substring(1) }, alternateRowStyles: { fillColor: white.substring(1) }, margin: { top: yPos + 5 } }); const payoutsTableFinalY = doc.autoTable.previous.finalY || yPos + 5; // Total Gross Severance Pay in PDF yPos = payoutsTableFinalY + 15; // Space after payouts table doc.setFontSize(14); doc.setTextColor(green); // Highlight total gross pay doc.text(`Total Gross Severance Pay: ${formatCurrency(calculations.totalGrossSeverancePay)}`, 14, yPos); yPos += 10; doc.setFontSize(10); doc.setTextColor('#555'); doc.text("Note: This is the gross amount. Taxes and other deductions will be withheld.", 14, yPos); doc.save('employee_severance_pay.pdf'); }); });

The Employee Severance Pay Calculator is a practical tool designed to help both employers and employees estimate severance pay accurately. Severance packages vary depending on factors such as length of service, salary, company policies, and applicable laws. This calculator simplifies the process by allowing you to input relevant details to calculate a fair severance amount.

By entering information like employee tenure, base salary, and any additional compensation or benefits, the tool provides a clear estimate of the severance pay an employee is entitled to receive upon termination or layoff. It helps ensure transparency and fairness during the separation process.

For employers, the calculator aids in budgeting severance costs and maintaining compliance with legal requirements. For employees, it offers clarity on expected compensation and assists in financial planning during employment transitions.

Using the Employee Severance Pay Calculator reduces disputes and misunderstandings by providing an objective, data-driven estimate based on common severance practices and relevant regulations. It supports smooth offboarding and fosters positive employer-employee relations even in difficult situations.

Whether you manage HR, payroll, or are facing job transition yourself, this tool is an essential resource for calculating severance pay efficiently and accurately.

Start using the Employee Severance Pay Calculator today to ensure fair severance payments and plan your next steps with confidence.

Scroll to Top