Group 1 (General Officials/Employees)
Group 2 (Hazardous/Mental Health)
Group 4 (Public Safety/Corrections)
Before April 2, 2012 (Tier 1)
On or After April 2, 2012 (Tier 2)
This determines your "Age Factor" calculation table.
Age Factor Used:0.0%
Total Benefit Percentage:0%
Annual Pension (Option A):$0.00
Monthly Gross Pension:$0.00
* Note: Your benefit has been capped at the maximum 80% of your average salary.
Understanding Your Massachusetts State Pension
For employees of the Commonwealth of Massachusetts, the Massachusetts State Employees' Retirement System (MSERS) is a defined benefit plan. This means your retirement income is calculated based on a specific formula involving your age, years of service, and salary history, rather than on market returns of your contributions.
The "Option A" Formula
This calculator estimates your "Option A" allowance, which provides the maximum potential payout with no beneficiary protections. The core formula is:
Annual Pension = Average Salary × Benefit Percentage Where Benefit Percentage = Age Factor × Years of Service
Key Inputs Defined
Average Salary (High 3): This is the average of your three highest consecutive years of regular compensation. For most employees, this is their final three years, but it can be any three consecutive years.
Creditable Service: The total time you have worked for the state or purchased back (such as military service or previous municipal service).
Group Classification:
Group 1: Officials, general employees, administrative, and clerical staff.
Group 2: Certain hazardous occupations, mental health attendants, and electricians.
Group 4: Public safety officers, corrections officers, and firefighters.
Tier 1 vs. Tier 2 Membership
Your "Age Factor"—the percentage value assigned to your age—depends heavily on when you joined the system.
Tier 1 (Pre-April 2012): Generally allows for a maximum age factor of 2.5% at age 65 (Group 1), 60 (Group 2), or 55 (Group 4).
Tier 2 (Post-April 2012): Requires an older age to reach the maximum 2.5% factor (e.g., age 67 for Group 1) and has steeper reductions for retiring early.
The 80% Cap
By law, your maximum annual pension benefit cannot exceed 80% of your 3-year average salary. If your calculation based on years of service and age factor exceeds this percentage, your benefit will be capped at the 80% limit.
Example Calculation
Consider a Group 1 employee (Tier 1) retiring at age 65 with 32 years of service and a high-3 average salary of $80,000.
Age Factor: 0.025 (2.5% for age 65)
Benefit %: 0.025 × 32 = 0.80 (80%)
Calculation: 80% of $80,000 = $64,000 per year.
Note: This calculator provides an estimate for educational purposes. Final determination of benefits is made exclusively by the State Retirement Board.
function calculatePension() {
// 1. Get Input Values
var salary = parseFloat(document.getElementById('avgSalary').value);
var years = parseFloat(document.getElementById('yearsService').value);
var age = parseInt(document.getElementById('retireAge').value);
var group = document.getElementById('jobGroup').value;
var tier = document.getElementById('membershipDate').value;
// 2. Validation
if (isNaN(salary) || isNaN(years) || isNaN(age)) {
alert("Please enter valid numbers for Salary, Years of Service, and Age.");
return;
}
if (salary < 0 || years < 0 || age = 65) ageFactor = 0.025;
else if (age === 64) ageFactor = 0.024;
else if (age === 63) ageFactor = 0.023;
else if (age === 62) ageFactor = 0.022;
else if (age === 61) ageFactor = 0.021;
else if (age === 60) ageFactor = 0.020;
else if (age === 59) ageFactor = 0.019;
else if (age === 58) ageFactor = 0.018;
else if (age === 57) ageFactor = 0.017;
else if (age === 56) ageFactor = 0.016;
else ageFactor = 0.015; // Floor for 55
} else if (group === '2') {
if (age >= 60) ageFactor = 0.025;
else if (age === 59) ageFactor = 0.024;
else if (age === 58) ageFactor = 0.023;
else if (age === 57) ageFactor = 0.022;
else if (age === 56) ageFactor = 0.021;
else ageFactor = 0.020; // Floor for 55
} else if (group === '4') {
if (age >= 55) ageFactor = 0.025;
else if (age === 54) ageFactor = 0.024; // Rare allowance
else ageFactor = 0.020; // Fallback
}
}
// TIER 2 LOGIC (Post-2012)
else {
if (group === '1') {
if (age >= 67) ageFactor = 0.0250;
else if (age === 66) ageFactor = 0.0235;
else if (age === 65) ageFactor = 0.0220;
else if (age === 64) ageFactor = 0.0205;
else if (age === 63) ageFactor = 0.0190;
else if (age === 62) ageFactor = 0.0175;
else if (age === 61) ageFactor = 0.0160;
else ageFactor = 0.0145; // Age 60
} else if (group === '2') {
if (age >= 62) ageFactor = 0.0250;
else if (age === 61) ageFactor = 0.0235;
else if (age === 60) ageFactor = 0.0220;
else if (age === 59) ageFactor = 0.0205;
else if (age === 58) ageFactor = 0.0190;
else if (age === 57) ageFactor = 0.0175;
else if (age === 56) ageFactor = 0.0160;
else ageFactor = 0.0145; // Age 55
} else if (group === '4') {
if (age >= 57) ageFactor = 0.0250;
else if (age === 56) ageFactor = 0.0235;
else if (age === 55) ageFactor = 0.0220;
else if (age === 54) ageFactor = 0.0205;
else if (age === 53) ageFactor = 0.0190;
else if (age === 52) ageFactor = 0.0175;
else if (age === 51) ageFactor = 0.0160;
else ageFactor = 0.0145; // Age 50
}
}
// 4. Calculate Percentage and Cap
var calculatedPercentage = ageFactor * years;
var isCapped = false;
if (calculatedPercentage > 0.80) {
calculatedPercentage = 0.80;
isCapped = true;
}
// 5. Calculate Monetary Values
var annualPension = salary * calculatedPercentage;
var monthlyPension = annualPension / 12;
// 6. Display Results
document.getElementById('resAgeFactor').innerText = (ageFactor * 100).toFixed(2) + "%";
document.getElementById('resPercentage').innerText = (calculatedPercentage * 100).toFixed(2) + "%";
// Currency Formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('resAnnual').innerText = formatter.format(annualPension);
document.getElementById('resMonthly').innerText = formatter.format(monthlyPension);
document.getElementById('resultsArea').style.display = "block";
if(isCapped) {
document.getElementById('capWarning').style.display = "block";
} else {
document.getElementById('capWarning').style.display = "none";
}
}