mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
hr_payroll_holidays hr_payroll_input_name_report hr_payroll_input_report hr_payroll_payment hr_payroll_timesheet hr_payslip_line_date l10n_us_fl_hr_payroll l10n_us_hr_payroll l10n_us_mo_hr_payroll l10n_us_oh_hr_payroll l10n_us_va_hr_payroll
605 lines
20 KiB
XML
Executable File
605 lines
20 KiB
XML
Executable File
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
|
|
<!-- HR SALARY RULES-->
|
|
<!-- Employee Deductions and Calculations -->
|
|
<record id="hr_payroll_rules_fica_emp_ss_wages_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="120"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_ss_wages"/>
|
|
<field name="name">FICA Employee Social Security Wages (2017)</field>
|
|
<field name="code">FICA_EMP_SS_WAGES_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
###
|
|
ytd = payslip.sum('FICA_EMP_SS_WAGES_2017', '2017-01-01', '2018-01-01')
|
|
ytd += contract.external_wages
|
|
remaining = 127200.0 - ytd
|
|
if remaining <= 0.0:
|
|
result = 0
|
|
elif remaining < categories.GROSS:
|
|
result = remaining
|
|
else:
|
|
result = categories.GROSS
|
|
</field>
|
|
<field name="appears_on_payslip" eval="False"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_fica_emp_m_wages_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="121"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_m_wages"/>
|
|
<field name="name">FICA Employee Medicare Wages (2017)</field>
|
|
<field name="code">FICA_EMP_M_WAGES_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">result = categories.GROSS</field>
|
|
<field name="appears_on_payslip" eval="False"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_fica_emp_m_add_wages_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="122"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_m_add_wages"/>
|
|
<field name="name">FICA Employee Medicare Additional Wages (2017)</field>
|
|
<field name="code">FICA_EMP_M_ADD_WAGES_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
###
|
|
ADD_M = 200000.0
|
|
norm_med_ytd = payslip.sum('FICA_EMP_M_WAGES_2017', '2017-01-01', '2018-01-01')
|
|
norm_med_cur = categories.FICA_EMP_M_WAGES
|
|
if ADD_M > norm_med_ytd:
|
|
diff = ADD_M - norm_med_ytd
|
|
if norm_med_cur > diff:
|
|
result = norm_med_cur - diff
|
|
else:
|
|
result = 0 # normal condition
|
|
else:
|
|
result = norm_med_cur # after YTD wages have passed the max
|
|
</field>
|
|
<field name="appears_on_payslip" eval="False"/>
|
|
</record>
|
|
|
|
<record id="hr_payroll_rules_fica_emp_ss_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="140"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_ss"/>
|
|
<field name="name">FICA Employee Social Security (2017)</field>
|
|
<field name="code">FICA_EMP_SS_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
### this should be "rules.FICA_EMP_SS_WAGES_2017", but it doesn't work
|
|
result_rate = -6.2
|
|
result = categories.FICA_EMP_SS_WAGES
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_941"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_fica_emp_m_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="141"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_m"/>
|
|
<field name="name">FICA Employee Medicare (2017)</field>
|
|
<field name="code">FICA_EMP_M_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
### this should be "rules.FICA_EMP_M_WAGES_2017", but it doesn't work
|
|
result_rate = -1.45
|
|
result = categories.FICA_EMP_M_WAGES
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_941"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_fica_emp_m_add_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="142"/>
|
|
<field name="category_id" ref="hr_payroll_fica_emp_m_add"/>
|
|
<field name="name">FICA Employee Medicare Additional (2017)</field>
|
|
<field name="code">FICA_EMP_M_ADD_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
### this should be "rules.FICA_EMP_M_ADD_WAGES_2017", but it doesn't work
|
|
result_rate = -0.9
|
|
result = categories.FICA_EMP_M_ADD_WAGES
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_941"/>
|
|
</record>
|
|
|
|
<!-- Federal Income Tax Withholding -->
|
|
<record id="hr_payroll_rules_fed_inc_withhold_2017_single" model="hr.salary.rule">
|
|
<field name="sequence" eval="145"/>
|
|
<field name="category_id" ref="hr_payroll_fed_income_withhold"/>
|
|
<field name="name">Federal Income Withholding - Single (2017)</field>
|
|
<field name="code">FED_INC_WITHHOLD_2017_S</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017' and contract.w4_filing_status != 'married' and contract.w4_filing_status)</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
wages = categories.GROSS
|
|
allowances = contract.w4_allowances
|
|
is_nra = contract.w4_is_nonresident_alien
|
|
schedule_pay = contract.schedule_pay
|
|
val = 0.00
|
|
additional = contract.w4_additional_withholding
|
|
|
|
###
|
|
# Single WEEKLY
|
|
###
|
|
if 'weekly' == schedule_pay:
|
|
wages -= allowances * 77.90
|
|
if is_nra:
|
|
wages += 44.20
|
|
|
|
if wages > 44 and wages <= 224:
|
|
val = 0.00 + ((wages - 44) * 0.10)
|
|
|
|
elif wages > 224 and wages <= 774:
|
|
val = 18.00 + ((wages - 224) * 0.15)
|
|
|
|
elif wages > 774 and wages <= 1812:
|
|
val = 100.50 + ((wages - 774) * 0.25)
|
|
|
|
elif wages > 1812 and wages <= 3730:
|
|
val = 360.00 + ((wages - 1812) * 0.28)
|
|
|
|
elif wages > 3730 and wages <= 8058:
|
|
val = 897.04 + ((wages - 3730) * 0.33)
|
|
|
|
elif wages > 8058 and wages <= 8090:
|
|
val = 2325.28 + ((wages - 8058) * 0.35)
|
|
|
|
elif wages > 8090:
|
|
val = 2336.48 + ((wages - 8090) * 0.396)
|
|
|
|
###
|
|
# Single BIWEEKLY
|
|
###
|
|
elif 'bi-weekly' == schedule_pay:
|
|
wages -= allowances * 155.80
|
|
if is_nra:
|
|
wages += 88.50
|
|
|
|
if wages > 88 and wages <= 447:
|
|
val = 0.00 + ((wages - 88) * 0.10)
|
|
|
|
elif wages > 447 and wages <= 1548:
|
|
val = 35.90 + ((wages - 447) * 0.15)
|
|
|
|
elif wages > 1548 and wages <= 3623:
|
|
val = 201.05 + ((wages - 1548) * 0.25)
|
|
|
|
elif wages > 3623 and wages <= 7460:
|
|
val = 719.80 + ((wages - 3623) * 0.28)
|
|
|
|
elif wages > 7460 and wages <= 16115:
|
|
val = 1794.16 + ((wages - 7460) * 0.33)
|
|
|
|
elif wages > 16115 and wages <= 16181:
|
|
val = 4650.31 + ((wages - 16115) * 0.35)
|
|
|
|
elif wages > 16181:
|
|
val = 4673.41 + ((wages - 16181) * 0.396)
|
|
|
|
###
|
|
# Single SEMIMONTHLY
|
|
###
|
|
elif 'semi-monthly' == schedule_pay:
|
|
wages -= allowances * 168.80
|
|
if is_nra:
|
|
wages += 95.80
|
|
|
|
if wages > 96 and wages <= 484:
|
|
val = 0.00 + ((wages - 96) * 0.10)
|
|
|
|
elif wages > 484 and wages <= 1677:
|
|
val = 38.80 + ((wages - 484) * 0.15)
|
|
|
|
elif wages > 1677 and wages <= 3925:
|
|
val = 217.75 + ((wages - 1677) * 0.25)
|
|
|
|
elif wages > 3925 and wages <= 8081:
|
|
val = 779.75 + ((wages - 3925) * 0.28)
|
|
|
|
elif wages > 8081 and wages <= 17458:
|
|
val = 1943.43 + ((wages - 8081) * 0.33)
|
|
|
|
elif wages > 17458 and wages <= 17529:
|
|
val = 5037.84 + ((wages - 17458) * 0.35)
|
|
|
|
elif wages > 17529:
|
|
val = 5062.69 + ((wages - 17529) * 0.396)
|
|
|
|
###
|
|
# Single MONTHLY
|
|
###
|
|
elif 'monthly' == schedule_pay:
|
|
wages -= allowances * 337.50
|
|
if is_nra:
|
|
wages += 191.70
|
|
|
|
if wages > 192 and wages <= 969:
|
|
val = 0.00 + ((wages - 192) * 0.10)
|
|
|
|
elif wages > 969 and wages <= 3354:
|
|
val = 77.70 + ((wages - 969) * 0.15)
|
|
|
|
elif wages > 3354 and wages <= 7850:
|
|
val = 435.45 + ((wages - 3354) * 0.25)
|
|
|
|
elif wages > 7850 and wages <= 16163:
|
|
val = 1559.45 + ((wages - 7850) * 0.28)
|
|
|
|
elif wages > 16163 and wages <= 34917:
|
|
val = 3887.09 + ((wages - 16163) * 0.33)
|
|
|
|
elif wages > 34917 and wages <= 35058:
|
|
val = 10075.91 + ((wages - 34917) * 0.35)
|
|
|
|
elif wages > 35058:
|
|
val = 10125.26 + ((wages - 35058) * 0.396)
|
|
|
|
###
|
|
# Single QUARTERLY
|
|
###
|
|
elif 'quarterly' == schedule_pay:
|
|
wages -= allowances * 1012.50
|
|
if is_nra:
|
|
wages += 575.00
|
|
|
|
if wages > 575 and wages <= 2906:
|
|
val = 0.00 + ((wages - 575) * 0.10)
|
|
|
|
elif wages > 2906 and wages <= 10063:
|
|
val = 233.10 + ((wages - 2906) * 0.15)
|
|
|
|
elif wages > 10063 and wages <= 23550:
|
|
val = 1306.65 + ((wages - 10063) * 0.25)
|
|
|
|
elif wages > 23550 and wages <= 48488:
|
|
val = 4678.40 + ((wages - 23550) * 0.28)
|
|
|
|
elif wages > 48488 and wages <= 104750:
|
|
val = 11661.04 + ((wages - 48488) * 0.33)
|
|
|
|
elif wages > 104750 and wages <= 105175:
|
|
val = 30227.50 + ((wages - 104750) * 0.35)
|
|
|
|
elif wages > 105175:
|
|
val = 30376.25 + ((wages - 105175) * 0.396)
|
|
|
|
###
|
|
# Single SEMIANNUAL
|
|
###
|
|
elif 'semi-annually' == schedule_pay:
|
|
wages -= allowances * 2025.00
|
|
if is_nra:
|
|
wages += 1150.0
|
|
|
|
if wages > 1150 and wages <= 5813:
|
|
val = 0.00 + ((wages - 1150) * 0.10)
|
|
|
|
elif wages > 5813 and wages <= 20125:
|
|
val = 466.30 + ((wages - 5813) * 0.15)
|
|
|
|
elif wages > 20125 and wages <= 47100:
|
|
val = 2613.10 + ((wages - 20125) * 0.25)
|
|
|
|
elif wages > 47100 and wages <= 96975:
|
|
val = 9356.85 + ((wages - 47100) * 0.28)
|
|
|
|
elif wages > 96975 and wages <= 209500:
|
|
val = 23321.85 + ((wages - 96975) * 0.33)
|
|
|
|
elif wages > 209500 and wages <= 210350:
|
|
val = 60455.10 + ((wages - 209500) * 0.35)
|
|
|
|
elif wages > 210350:
|
|
val = 60752.60 + ((wages - 210350) * 0.396)
|
|
|
|
###
|
|
# Single ANNUAL
|
|
###
|
|
elif 'annually' == schedule_pay:
|
|
wages -= allowances * 4050.00
|
|
if is_nra:
|
|
wages += 2300.0
|
|
|
|
if wages > 2300 and wages <= 11625:
|
|
val = 0.00 + ((wages - 2300) * 0.10)
|
|
|
|
elif wages > 11625 and wages <= 40250:
|
|
val = 932.50 + ((wages - 11625) * 0.15)
|
|
|
|
elif wages > 40250 and wages <= 94200:
|
|
val = 5226.25 + ((wages - 40250) * 0.25)
|
|
|
|
elif wages > 94200 and wages <= 193950:
|
|
val = 18713.75 + ((wages - 94200) * 0.28)
|
|
|
|
elif wages > 193950 and wages <= 419000:
|
|
val = 46643.75 + ((wages - 193950) * 0.33)
|
|
|
|
elif wages > 419000 and wages <= 420700:
|
|
val = 120910.25 + ((wages - 419000) * 0.35)
|
|
|
|
elif wages > 420700:
|
|
val = 121505.25 + ((wages - 420700) * 0.396)
|
|
|
|
else:
|
|
raise Exception('Invalid schedule_pay="' + schedule_pay + '" for W4 Allowance calculation')
|
|
|
|
result = -(val + additional)
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_941"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_fed_inc_withhold_2017_married" model="hr.salary.rule">
|
|
<field name="sequence" eval="145"/>
|
|
<field name="category_id" ref="hr_payroll_fed_income_withhold"/>
|
|
<field name="name">Federal Income Withholding - Married (2017)</field>
|
|
<field name="code">FED_INC_WITHHOLD_2017_M</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017' and contract.w4_filing_status == 'married')</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
wages = categories.GROSS
|
|
allowances = contract.w4_allowances
|
|
is_nra = contract.w4_is_nonresident_alien
|
|
schedule_pay = contract.schedule_pay
|
|
val = 0.00
|
|
additional = contract.w4_additional_withholding
|
|
|
|
###
|
|
# Married WEEKLY
|
|
###
|
|
if 'weekly' == schedule_pay:
|
|
wages -= allowances * 77.90
|
|
if is_nra:
|
|
wages += 44.20
|
|
|
|
if wages > 166 and wages <= 525:
|
|
val = 0.00 + ((wages - 166) * 0.10)
|
|
|
|
elif wages > 525 and wages <= 1626:
|
|
val = 35.90 + ((wages - 525) * 0.15)
|
|
|
|
elif wages > 1626 and wages <= 3111:
|
|
val = 201.05 + ((wages - 1626) * 0.25)
|
|
|
|
elif wages > 3111 and wages <= 4654:
|
|
val = 572.30 + ((wages - 3111) * 0.28)
|
|
|
|
elif wages > 4654 and wages <= 8180:
|
|
val = 1004.34 + ((wages - 4654) * 0.33)
|
|
|
|
elif wages > 8180 and wages <= 9218:
|
|
val = 2167.92 + ((wages - 8180) * 0.35)
|
|
|
|
elif wages > 9218:
|
|
val = 2531.22 + ((wages - 9218) * 0.396)
|
|
|
|
###
|
|
# Married BIWEEKLY
|
|
###
|
|
elif 'bi-weekly' == schedule_pay:
|
|
wages -= allowances * 155.80
|
|
if is_nra:
|
|
wages += 88.50
|
|
|
|
if wages > 333 and wages <= 1050:
|
|
val = 0.00 + ((wages - 333) * 0.10)
|
|
|
|
elif wages > 1050 and wages <= 3252:
|
|
val = 71.70 + ((wages - 1050) * 0.15)
|
|
|
|
elif wages > 3252 and wages <= 6221:
|
|
val = 402.00 + ((wages - 3252) * 0.25)
|
|
|
|
elif wages > 6221 and wages <= 9308:
|
|
val = 1144.25 + ((wages - 6221) * 0.28)
|
|
|
|
elif wages > 9308 and wages <= 16360:
|
|
val = 2008.61 + ((wages - 9308) * 0.33)
|
|
|
|
elif wages > 16360 and wages <= 18437:
|
|
val = 4335.77 + ((wages - 16360) * 0.35)
|
|
|
|
elif wages > 18437:
|
|
val = 5062.72 + ((wages - 18437) * 0.396)
|
|
|
|
###
|
|
# Married SEMIMONTHLY
|
|
###
|
|
elif 'semi-monthly' == schedule_pay:
|
|
wages -= allowances * 168.80
|
|
if is_nra:
|
|
wages += 95.80
|
|
|
|
if wages > 360 and wages <= 1138:
|
|
val = 0.00 + ((wages - 360) * 0.10)
|
|
|
|
elif wages > 1138 and wages <= 3523:
|
|
val = 77.80 + ((wages - 1138) * 0.15)
|
|
|
|
elif wages > 3523 and wages <= 6740:
|
|
val = 435.55 + ((wages - 3523) * 0.25)
|
|
|
|
elif wages > 6740 and wages <= 10083:
|
|
val = 1239.80 + ((wages - 6740) * 0.28)
|
|
|
|
elif wages > 10083 and wages <= 17723:
|
|
val = 2175.84 + ((wages - 10083) * 0.33)
|
|
|
|
elif wages > 17723 and wages <= 19973:
|
|
val = 4697.04 + ((wages - 17723) * 0.35)
|
|
|
|
elif wages > 19973:
|
|
val = 5484.54 + ((wages - 19973) * 0.396)
|
|
|
|
###
|
|
# Married MONTHLY
|
|
###
|
|
elif 'monthly' == schedule_pay:
|
|
wages -= allowances * 337.50
|
|
if is_nra:
|
|
wages += 191.70
|
|
|
|
if wages > 721 and wages <= 2275:
|
|
val = 0.00 + ((wages - 721) * 0.10)
|
|
|
|
elif wages > 2275 and wages <= 7046:
|
|
val = 155.40 + ((wages - 2275) * 0.15)
|
|
|
|
elif wages > 7046 and wages <= 13479:
|
|
val = 871.05 + ((wages - 7046) * 0.25)
|
|
|
|
elif wages > 13479 and wages <= 20167:
|
|
val = 2479.30 + ((wages - 13479) * 0.28)
|
|
|
|
elif wages > 20167 and wages <= 35446:
|
|
val = 4351.94 + ((wages - 20167) * 0.33)
|
|
|
|
elif wages > 35446 and wages <= 39946:
|
|
val = 9394.01 + ((wages - 35446) * 0.35)
|
|
|
|
elif wages > 39946:
|
|
val = 10969.01 + ((wages - 39946) * 0.396)
|
|
|
|
###
|
|
# Married QUARTERLY
|
|
###
|
|
elif 'quarterly' == schedule_pay:
|
|
wages -= allowances * 1012.50
|
|
if is_nra:
|
|
wages += 575.00
|
|
|
|
if wages > 2163 and wages <= 6825:
|
|
val = 0.00 + ((wages - 2163) * 0.10)
|
|
|
|
elif wages > 6825 and wages <= 21138:
|
|
val = 466.20 + ((wages - 6825) * 0.15)
|
|
|
|
elif wages > 21138 and wages <= 40438:
|
|
val = 2613.15 + ((wages - 21138) * 0.25)
|
|
|
|
elif wages > 40438 and wages <= 60500:
|
|
val = 7438.15 + ((wages - 40438) * 0.28)
|
|
|
|
elif wages > 60500 and wages <= 106338:
|
|
val = 13055.51 + ((wages - 60500) * 0.33)
|
|
|
|
elif wages > 106338 and wages <= 119838:
|
|
val = 28182.05 + ((wages - 106338) * 0.35)
|
|
|
|
elif wages > 119838:
|
|
val = 32907.05 + ((wages - 119838) * 0.396)
|
|
|
|
###
|
|
# Married SEMIANNUAL
|
|
###
|
|
elif 'semi-annually' == schedule_pay:
|
|
wages -= allowances * 2025.00
|
|
if is_nra:
|
|
wages += 1150.0
|
|
|
|
if wages > 4325 and wages <= 13650:
|
|
val = 0.00 + ((wages - 4325) * 0.10)
|
|
|
|
elif wages > 13650 and wages <= 42275:
|
|
val = 932.50 + ((wages - 13650) * 0.15)
|
|
|
|
elif wages > 42275 and wages <= 80875:
|
|
val = 5226.25 + ((wages - 42275) * 0.25)
|
|
|
|
elif wages > 80875 and wages <= 121000:
|
|
val = 14876.25 + ((wages - 80875) * 0.28)
|
|
|
|
elif wages > 121000 and wages <= 212675:
|
|
val = 26111.25 + ((wages - 121000) * 0.33)
|
|
|
|
elif wages > 212675 and wages <= 239675:
|
|
val = 56364.00 + ((wages - 212675) * 0.35)
|
|
|
|
elif wages > 239675:
|
|
val = 65814.00 + ((wages - 239675) * 0.396)
|
|
|
|
###
|
|
# Married ANNUAL
|
|
###
|
|
elif 'annually' == schedule_pay:
|
|
wages -= allowances * 4050.00
|
|
if is_nra:
|
|
wages += 2300.0
|
|
|
|
if wages > 8650 and wages <= 27300:
|
|
val = 0.00 + ((wages - 8650) * 0.10)
|
|
|
|
elif wages > 27300 and wages <= 84550:
|
|
val = 1865.00 + ((wages - 27300) * 0.15)
|
|
|
|
elif wages > 84550 and wages <= 161750:
|
|
val = 10452.50 + ((wages - 84550) * 0.25)
|
|
|
|
elif wages > 161750 and wages <= 242000:
|
|
val = 29752.50 + ((wages - 161750) * 0.28)
|
|
|
|
elif wages > 242000 and wages <= 425350:
|
|
val = 52222.50 + ((wages - 242000) * 0.33)
|
|
|
|
elif wages > 425350 and wages <= 479350:
|
|
val = 112728.00 + ((wages - 425350) * 0.35)
|
|
|
|
elif wages > 479350:
|
|
val = 131628.00 + ((wages - 479350) * 0.396)
|
|
|
|
else:
|
|
raise Exception('Invalid schedule_pay="' + schedule_pay + '" for W4 Allowance calculation')
|
|
|
|
result = -(val + additional)
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_941"/>
|
|
</record>
|
|
|
|
<record id="hr_payroll_rules_futa_wages_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="422"/>
|
|
<field name="category_id" ref="hr_payroll_futa_wages"/>
|
|
<field name="name">FUTA Federal Unemployment - Wages (2017)</field>
|
|
<field name="code">FUTA_WAGES_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017' and contract.futa_type != contract.FUTA_TYPE_EXEMPT)</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
###
|
|
ytd = payslip.sum('FUTA_WAGES_2017', '2017-01-01', '2018-01-01')
|
|
ytd += contract.external_wages
|
|
remaining = 7000.0 - ytd
|
|
if remaining <= 0.0:
|
|
result = 0
|
|
elif remaining < categories.GROSS:
|
|
result = remaining
|
|
else:
|
|
result = categories.GROSS
|
|
</field>
|
|
<field name="appears_on_payslip" eval="False"/>
|
|
</record>
|
|
<record id="hr_payroll_rules_futa_2017" model="hr.salary.rule">
|
|
<field name="sequence" eval="442"/>
|
|
<field name="category_id" ref="hr_payroll_futa"/>
|
|
<field name="name">FUTA Federal Unemployment (2017)</field>
|
|
<field name="code">FUTA_2017</field>
|
|
<field name="condition_select">python</field>
|
|
<field name="condition_python">result = (payslip.date_to[:4] == '2017' and contract.futa_type != contract.FUTA_TYPE_EXEMPT)</field>
|
|
<field name="amount_select">code</field>
|
|
<field name="amount_python_compute">
|
|
result_rate = -(contract.futa_rate(2017))
|
|
result = categories.FUTA_WAGES
|
|
</field>
|
|
<field name="register_id" ref="contrib_register_eftps_940"/>
|
|
<field name="appears_on_payslip" eval="False"/>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|