Premium Pay Portion of FLSA Overtime Wages - related to One Big Beautiful Bill
Issue/Symptom/Question
How do I determine the premium pay portion of FLSA overtime wages that might qualify for the new federal income tax deduction for Tax Years 2025 through 2028?
This new federal income tax deduction is related to the One Big Beautiful Bill.
Information found on irs.gov website:
One, Big, Beautiful Bill news | Internal Revenue Service
One, Big, Beautiful Bill provisions | Internal Revenue Service
The IRS released the following FAQ Article in late January, 2026:
Applies To
For Tax Year 2025, no changes will be made to the W-2, this information will not be reported on the W-2.
New stored procedure pk_pr_taxableEarn.f_calcFlsaOtPremiumPay has been created to calculate this amount, and will be included in the 2025 EOY December Tax Kit.
NOTE - Due to new/revised information, a revised stored procedure pk_pr_taxableEarn.f_calcFlsaOtPremiumPay will be included in the 2025 EOY January Tax Kit.
A query script (see below) has been created to use this new stored procedure and show this amount for all employees that have qualifying overtime premium pay.
The FLSA premium pay portion of FLSA overtime wages is calculated on a week by week basis for hourly employees that are paid weekly or bi-weekly.
For those paid bi-weekly, each of the two weeks are calculated separately, there is no averaging.
Void checks, voided checks, bonus checks, and other compensation checks are ignored.
Timecards with an hour class with a non-null PTO Code are ignored (sick days, vacation days, holidays, etc. do not count when determining the FLSA hours worked for the week).
For each week where more than 40 FLSA hours were worked, the FLSA premium portion of the premium pay for hours with Hour Type Code T or D is calculated.
The FLSA premium portion is arrived at by using the difference between the premium rate and the regular rate, but not exceeding half the regular rate.
For example, if the regular rate is $30 per hours and the premium rate is $45 per hour, the FLSA premium portion of the overtime pay is $15 per hour.
Likewise, if the regular rate is $30 per hours and the premium rate is $60 per hour, the FLSA premium portion of the overtime pay is $15 per hour.
If the regular hours for the week are less than 40, then some of the premium hours do not qualify, only the FLSA premium hours in excess of 40 total FLSA hours qualify.
If this is the case and the week has multiple FLSA premium portion rates, we look at the highest FLSA premium portion rates first when calculating the FLSA premium pay portion of overtime wages for the week.
New For EOY 2026
Based on client feedback from EOY 2025 and additional clarity from the IRS, the following revisions were made to the pk_pr_taxableEarn.f_calcFlsaOtPremiumPay stored procedure for EOY 2026:
Calculate each week’s qualifying amount by distinct rate rather than timecard by timecard.
Improve the handling of checks that include hours worked in prior weeks.
Handle retroactive pay when calculating the qualified overtime pay amount.
Overtime pay that is less that time and a half does not qualify for the new overtime pay deduction.
The drilldown queries at the end of this Knowledge Base article have been revised to be in sync with the revisions to the pk_pr_taxableEarn.f_calcFlsaOtPremiumPay stored procedure.
The revised pk_pr_taxableEarn.f_calcFlsaOtPremiumPay stored procedure will be included in the EOY 2026 December Tax Kit.
If you would like to have the revised pk_pr_taxableEarn.f_calcFlsaOtPremiumPay stored procedure installed earlier than that, please submit a support ticket with that request.
Resolution/Fix/Answer
The following query script will prompt for a Legal Entity OU ID and a Tax Year. This can be run in Golden or sqlplus.
It will return the total FLSA premium pay portion of FLSA overtime wages that might qualify for the new federal income tax deduction for each employee that has an amount greater than zero.
select '&leOuId' le_ou_id, &taxYear tax_year, emp_id, last_name, first_name, middle_name, name_suffix,
pk_pr_taxableEarn.f_calcFlsaOtPremiumPay('&leOuId', &taxYear, emp_id) FlsaOtPremiumPay
from employee
where pk_pr_taxableEarn.f_calcFlsaOtPremiumPay('&leOuId', &taxYear, emp_id) > 0.00
order by emp_id;
This second query script will prompt for a Legal Entity OU ID, a Tax Year, and an Employee ID to limit the return to a single employee.
select '&leOuId' le_ou_id, &taxYear tax_year, emp_id, last_name, first_name, middle_name, name_suffix,
pk_pr_taxableEarn.f_calcFlsaOtPremiumPay('&leOuId', &taxYear, emp_id) FlsaOtPremiumPay
from employee
where emp_id = '&empId';
The following query scripts can be used to see how the new stored procedure determined the annual amount for the tax year for an employee.
This third query script will prompt for a Tax Year, a Legal Entity OU ID, and an Employee ID.
This one shows the total FLSA hours by week for the employee, including a breakdown for Hour Types 'R', 'T',' and 'D', only showing the weeks with more than 40 total FLSA hours.
with weeks_data as
(select pgp.pay_group_num,
to_char(pgp.d_prd_end_date - 6, 'YYYY/MM/DD') week_start_date,
to_char(pgp.d_prd_end_date, 'YYYY/MM/DD') week_end_date
from pay_group_prd pgp
join pay_group pg
on pg.pay_group_num = pgp.pay_group_num
where pgp.pr_year = &taxYear
and pg.pay_freq_num in (26, 52)
union
select pgp.pay_group_num,
to_char(pgp.d_prd_end_date - 13, 'YYYY/MM/DD') week_start_date,
to_char(pgp.d_prd_end_date - 7, 'YYYY/MM/DD') week_end_date
from pay_group_prd pgp
join pay_group pg
on pg.pay_group_num = pgp.pay_group_num
where pgp.pr_year = &taxYear
and pg.pay_freq_num = 26)
select '&leOuId' le_ou_id,
&taxYear tax_year,
'&empId' emp_id,
weeks_data.week_start_date,
weeks_data.week_end_date,
coalesce(sum(coalesce(tc.hrs, 0)), 0) flsa_total_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'R', tc.hrs, 0), 0)), 0) flsa_reg_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'T', tc.hrs, 0), 0)), 0) flsa_th_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'D', tc.hrs, 0), 0)), 0) flsa_dt_hrs
from weeks_data
join tc_base tc
on coalesce(tc.work_date, tc.pr_date) between weeks_data.week_start_date and weeks_data.week_end_date
left outer join hr_class
on hr_class.hr_class_num = tc.hr_class_num
left outer join pay_rt
on pay_rt.pr_class_num = tc.pr_class_num
and pay_rt.pay_rt_num = tc.pay_rt_num
where tc.pr_chk_sa_num in
(select pr_chk_sa_num
from pr_chk_hist pch
where pch.ou_id = '&leOuId'
and pch.pr_year = &taxYear
and pch.emp_id = '&empId'
and pch.pr_chk_type_num not in (3, 5, 8)
and pk_pr_check.f_isVoided(pch.pr_chk_sa_num) = 'N'
and pch.pay_group_num = weeks_data.pay_group_num)
and tc.hr_type_cd != 'M'
and tc.view_num = 5
and hr_class.pto_cd is null
and coalesce(pay_rt.salaried_cd, 'N') != 'Y'
group by
weeks_data.week_start_date,
weeks_data.week_end_date
having coalesce(sum(coalesce(tc.hrs, 0)), 0) > 40.00
order by weeks_data.week_start_date;
This fourth query script will prompt for a Tax Year, a Legal Entity OU ID, and an Employee ID.
This one shows the same information as the previous script, but drills down to show the premium hours (Hour Type Codes T and D) along with the regular rate, FLSA premium portion of the rate, and FLSA premium portion of the overtime pay.
NOTE - If the regular hours for the week are less than 40, then some of the premium hours do not qualify, only the premium hours in excess of 40 total hours qualify. If the regular hours for the week are less than 40 AND the week has multiple regular pay rates, then some of the premium portion of overtime pay shown in this query would not qualify.
with weeks_data as
(select pgp.pay_group_num,
to_char(pgp.d_prd_end_date - 6, 'YYYY/MM/DD') week_start_date,
to_char(pgp.d_prd_end_date, 'YYYY/MM/DD') week_end_date
from pay_group_prd pgp
join pay_group pg
on pg.pay_group_num = pgp.pay_group_num
where pgp.pr_year = &taxYear
and pg.pay_freq_num in (26, 52)
union
select pgp.pay_group_num,
to_char(pgp.d_prd_end_date - 13, 'YYYY/MM/DD') week_start_date,
to_char(pgp.d_prd_end_date - 7, 'YYYY/MM/DD') week_end_date
from pay_group_prd pgp
join pay_group pg
on pg.pay_group_num = pgp.pay_group_num
where pgp.pr_year = &taxYear
and pg.pay_freq_num = 26),
weeks_data_2 as
(select '&leOuId' le_ou_id,
&taxYear tax_year,
'&empId' emp_id,
weeks_data.week_start_date,
weeks_data.week_end_date,
coalesce(sum(coalesce(tc.hrs, 0)), 0) flsa_total_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'R', tc.hrs, 0), 0)), 0) flsa_reg_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'T', tc.hrs, 0), 0)), 0) flsa_th_hrs,
coalesce(sum(coalesce(decode(tc.hr_type_cd, 'D', tc.hrs, 0), 0)), 0) flsa_dt_hrs
from weeks_data
join tc_base tc
on coalesce(tc.work_date, tc.pr_date) between
weeks_data.week_start_date and weeks_data.week_end_date
left outer join hr_class
on hr_class.hr_class_num = tc.hr_class_num
left outer join pay_rt
on pay_rt.pr_class_num = tc.pr_class_num
and pay_rt.pay_rt_num = tc.pay_rt_num
where tc.pr_chk_sa_num in
(select pr_chk_sa_num
from pr_chk_hist pch
where pch.ou_id = '&leOuId'
and pch.pr_year = &taxYear
and pch.emp_id = '&empId'
and pch.pr_chk_type_num not in (3, 5, 8)
and pk_pr_check.f_isVoided(pch.pr_chk_sa_num) = 'N'
and pch.pay_group_num = weeks_data.pay_group_num)
and tc.hr_type_cd != 'M'
and tc.view_num = 5
and hr_class.pto_cd is null
and coalesce(pay_rt.salaried_cd, 'N') != 'Y'
group by
weeks_data.week_start_date,
weeks_data.week_end_date
having coalesce(sum(coalesce(tc.hrs, 0)), 0) > 40.00)
select weeks_data_2.le_ou_id,
weeks_data_2.tax_year,
weeks_data_2.emp_id,
weeks_data_2.week_start_date,
weeks_data_2.week_end_date,
weeks_data_2.flsa_total_hrs,
weeks_data_2.flsa_reg_hrs,
weeks_data_2.flsa_th_hrs,
weeks_data_2.flsa_dt_hrs,
coalesce(tc2.lo_reg_rate, tc2.calc_pay_rt,
tc.lo_reg_rate, tc.calc_pay_rt, 0) reg_rate,
sum(tc.hrs) flsa_prem_hrs,
least(weeks_data_2.flsa_total_hrs - 40, sum(tc.hrs)) qual_flsa_prem_hrs,
coalesce(tc2.lo_reg_rate, tc2.calc_pay_rt,
tc.lo_reg_rate, tc.calc_pay_rt, 0) * 0.5 flsa_prem_portion_rate,
round((coalesce(tc2.lo_reg_rate, tc2.calc_pay_rt,
tc.lo_reg_rate, tc.calc_pay_rt, 0) * 0.5) *
least(weeks_data_2.flsa_total_hrs - 40, sum(tc.hrs)), 2) qual_flsa_ot_prem_pay
from weeks_data_2
join tc_base tc
on coalesce(tc.work_date, tc.pr_date) between weeks_data_2.week_start_date and weeks_data_2.week_end_date
left outer join hr_class
on hr_class.hr_class_num = tc.hr_class_num
left outer join pay_rt
on pay_rt.pr_class_num = tc.pr_class_num
and pay_rt.pay_rt_num = tc.pay_rt_num
left outer join tc_base tc2
on tc2.retro_pr_chk_sa_num = tc.pr_chk_sa_num
and tc2.retro_tc_num = tc.tc_num
where tc.pr_chk_sa_num in
(select pr_chk_sa_num
from pr_chk_hist pch
join pay_group
on pay_group.pay_group_num = pch.pay_group_num
where pch.ou_id = '&leOuId'
and pch.pr_year = &taxYear
and pch.emp_id = '&empId'
and pch.pr_chk_type_num not in (3, 5, 8)
and pk_pr_check.f_isVoided(pch.pr_chk_sa_num) = 'N'
and pay_group.pay_freq_num in (26, 52))
and tc.hr_type_cd in ('D','T')
and tc.view_num = 5
and (tc2.pr_chk_sa_num is null or tc2.pr_chk_sa_num =
(select max(pr_chk_sa_num)
from tc_base
where retro_pr_chk_sa_num = tc.pr_chk_sa_num
and retro_tc_num = tc.tc_num))
and hr_class.pto_cd is null
and coalesce(pay_rt.salaried_cd, 'N') != 'Y'
and coalesce(tc2.calc_pay_rt, tc2.lo_reg_rate,
tc.calc_pay_rt, tc.lo_reg_rate, 0) >=
coalesce(tc2.lo_reg_rate, tc2.calc_pay_rt,
tc.lo_reg_rate, tc.calc_pay_rt, 0) * 1.50
group by
weeks_data_2.le_ou_id,
weeks_data_2.tax_year,
weeks_data_2.emp_id,
weeks_data_2.week_start_date,
weeks_data_2.week_end_date,
weeks_data_2.flsa_total_hrs,
weeks_data_2.flsa_reg_hrs,
weeks_data_2.flsa_th_hrs,
weeks_data_2.flsa_dt_hrs,
coalesce(tc2.lo_reg_rate, tc2.calc_pay_rt,
tc.lo_reg_rate, tc.calc_pay_rt, 0)
order by
weeks_data_2.le_ou_id,
weeks_data_2.tax_year,
weeks_data_2.emp_id,
weeks_data_2.week_start_date,
flsa_prem_portion_rate desc;
This fifth query script will prompt for a Legal Entity OU ID, a Tax Year, and an Employee ID.
This one shows all the Premium Rate to Regular Rate Ratios for the employee, so you can determine if there were any less than time and a half (Ratio 1.5), which would not qualify for the overtime pay deduction.
select distinct
tc.emp_id,
tc.hr_type_cd,
coalesce(tc.lo_reg_rate,tc.calc_pay_rt) reg_rate,
coalesce(tc.calc_pay_rt,tc.lo_reg_rate) prem_rate,
round(coalesce(tc.calc_pay_rt,tc.lo_reg_rate) / coalesce(tc.lo_reg_rate,tc.calc_pay_rt), 4) ratio
from tc_base tc
left outer join hr_class
on hr_class.hr_class_num = tc.hr_class_num
left outer join pay_rt
on pay_rt.pr_class_num = tc.pr_class_num
and pay_rt.pay_rt_num = tc.pay_rt_num
where tc.pr_chk_sa_num in
(select pr_chk_sa_num
from pr_chk_hist pch
join pay_group pay_group
on pay_group.pay_group_num = pch.pay_group_num
where pch.ou_id = '&leOuId'
and pch.pr_year = &taxYear
and pch.emp_id = '&empId'
and pch.pr_chk_type_num not in (3, 5, 8)
and pk_pr_check.f_isVoided(pch.pr_chk_sa_num) = 'N'
and pay_group.pay_freq_num in (26, 52))
and tc.hr_type_cd in ('T','D')
and tc.view_num = 5
and hr_class.pto_cd is null
and coalesce(pay_rt.salaried_cd, 'N') != 'Y'
order by 1,2,3,4;