Note: For hourly employees, the IRS uses 130 hours per month regardless of actual hours worked.
Enter the cost for the lowest-priced self-only coverage plan offered.
2024 (8.39%)
2023 (9.12%)
2022 (9.61%)
Understanding the Rate of Pay Safe Harbor
The Affordable Care Act (ACA) requires "Applicable Large Employers" (ALEs) to offer health coverage that is affordable to their full-time employees. Because an employer may not know an employee's total household income, the IRS provides "Safe Harbors" to help prove affordability.
How the Rate of Pay Safe Harbor Works
This specific safe harbor is popular because it allows employers to ignore fluctuations in hours worked. For hourly employees, the math is based on a flat 130 hours per month, regardless of whether they worked 100 hours or 200 hours. For salaried employees, it is based on their monthly salary.
Calculate max affordable premium: $2,080.00 × 0.0839 = $174.51.
If the employer's lowest-cost self-only health plan costs the employee $170.00 per month, the plan is considered Affordable under this safe harbor.
Important Restrictions
An employer cannot use the Rate of Pay Safe Harbor for an hourly employee if the employer reduced the employee's hourly rate during the year. This method is intended to provide a stable, predictable floor for compliance monitoring.
function togglePayInput() {
var payType = document.getElementById("payType").value;
var rateLabel = document.getElementById("rateLabel");
var rateHelp = document.getElementById("rateHelp");
if (payType === "hourly") {
rateLabel.innerHTML = "Hourly Rate ($):";
rateHelp.style.display = "block";
} else {
rateLabel.innerHTML = "Monthly Salary ($):";
rateHelp.style.display = "none";
}
}
function calculateSafeHarbor() {
var payType = document.getElementById("payType").value;
var rateValue = parseFloat(document.getElementById("rateValue").value);
var premium = parseFloat(document.getElementById("premiumCost").value);
var percentage = parseFloat(document.getElementById("acaYear").value);
var resultWrapper = document.getElementById("resultWrapper");
var statusHeader = document.getElementById("statusHeader");
var calculationDetails = document.getElementById("calculationDetails");
if (isNaN(rateValue) || isNaN(premium) || rateValue <= 0 || premium < 0) {
alert("Please enter valid positive numbers for pay rate and premium cost.");
return;
}
var monthlyBasis = 0;
var basisType = "";
if (payType === "hourly") {
// IRS standard for hourly safe harbor is 130 hours
monthlyBasis = rateValue * 130;
basisType = "Projected Monthly Income (Rate × 130 hrs)";
} else {
monthlyBasis = rateValue;
basisType = "Monthly Salary Basis";
}
var maxPremium = monthlyBasis * percentage;
var isAffordable = premium <= maxPremium;
var percentageDisplay = (percentage * 100).toFixed(2) + "%";
resultWrapper.style.display = "block";
if (isAffordable) {
resultWrapper.style.backgroundColor = "#e7f4e9";
resultWrapper.style.border = "1px solid #2ecc71";
statusHeader.style.color = "#27ae60";
statusHeader.innerHTML = "✓ AFFORDABLE";
} else {
resultWrapper.style.backgroundColor = "#fdf2f2";
resultWrapper.style.border = "1px solid #e74c3c";
statusHeader.style.color = "#c0392b";
statusHeader.innerHTML = "✗ NOT AFFORDABLE";
}
var detailsHtml = "Calculated Basis: $" + monthlyBasis.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " (" + basisType + ")";
detailsHtml += "Allowable Premium (" + percentageDisplay + "): $" + maxPremium.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + "";
detailsHtml += "Your Current Premium: $" + premium.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + "";
if (isAffordable) {
detailsHtml += "The employee premium is within the " + percentageDisplay + " limit for the chosen compliance year.";
} else {
var overage = premium – maxPremium;
detailsHtml += "The premium exceeds the limit by $" + overage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ". To meet this safe harbor, you must lower the employee contribution or increase the pay rate.";
}
calculationDetails.innerHTML = detailsHtml;
// Smooth scroll to results
resultWrapper.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}