457(b) Annual Limitation Paycheck Scripting
Employee deductions and contributions made by employers to 457(b) plans cannot exceed the specified annual limits. To combine the deduction (employee) and earning (employer) amounts and limit the total contribution to the annual maximum, add a paycheck calc script (sample below). Using the Earning and Deduction Types below also ties these amounts into Box 12G on the W2.
The Deduction type is: 457b
The Earning type is: Memo 457b ERMatch
As with 401(k) plans and the like, there are three possible scenarios.
Scenario One — Employee Deduction Only
Set up Deduction codes using the 457b ded type. The Deduction type handles the taxability, cap, and W2 field.
Scenario Two — Employer Contribution Only
Set up an Earn Code using the Memo 457b ERMatch earntype and add a paycheck calc script to cap it per the 457(b) limit.
Scenario Three — Employee and Employer Contribution
There are two parts to this scenario. First, set up the employer contribution:
- Set up an Earn Code using the Memo 457b ERMatch earntype.
- Set up a Ded Code using the 457b dedtype.
- Use a paycheck calc script to cap it per the 457(b) limit.
Sample Script
Sub PaycheckCalculator_PostCheckCalculation()
'Get the cap from the system
capAmt = GetCodeLimit("457b")
'Get the EE and ER Codes
earnCode = "E457bER"
RothCode = "DR457b"
RegCode = "D457"
'Get the YTD information for each
earnCodeYTDAmt = EYTDAmount(earnCode)
RothCodeYTDAmt = EYTDAmount(RothCode)
RegCodeYTDAmt = EYTDAmount(RegCode)
TotalYTDAmount = earnCodeYTDAmt + RothCodeYTDAmt + RegCodeYTDAmt
'Get the current information for each
earnCodeAmt = GetAmount(earnCode)
RothCodeAmt = GetAmount(RothCode)
RegCodeAmt = GetAmount(RegCode)
TotalCurrentAmount = earnCodeAmt + RothCodeAmt + RegCodeAmt
'Figure the amount based on YTD info and Pay Entry Amounts
If TotalYTDAmount >= capAmt Then
allowedAmt = 0
Else
If TotalYTDAmount < capAmt Then
If TotalYTDAmount + TotalCurrentAmount >= capAmt Then
allowedAmt = capAmt - TotalYTDAmount - TotalCurrentAmount
'Do some calculations here to decide how the remaining amount
'is allocated. This example allocates 33% to the Match and the
'Roth Code and the remainder to the regular 457b code.
earnCodeAmt = allowedAmt * 0.33
RothCodeAmt = allowedAmt * 0.33
RegCodeAmt = allowedAmt - earnCodeAmt - RothCodeAmt
'Loop through items on check and update per the calc above
For index = 0 To GetTransactionCount - 1
code = GetDet(index) + GetDetCode(index)
If code = earnCode Then
SetAmount(index, earnCodeAmt)
End If
If code = RothCode Then
SetAmount(index, RothCodeAmt)
End If
If code = RegCode Then
SetAmount(index, RegCodeAmt)
End If
Next
Else
'do nothing
End If
End If
End If
End Sub
Questions?
Contact your Payroll Service Provider.