FICA Employee Social Security Wages (2016) FICA_EMP_SS_WAGES_2016 python result = (payslip.date_to[:4] == '2016') code ### ytd = payslip.sum('FICA_EMP_SS_WAGES_2016', '2016-01-01', '2017-01-01') ytd += contract.external_wages remaining = 118500.0 - ytd if remaining <= 0.0: result = 0 elif remaining < categories.GROSS: result = remaining else: result = categories.GROSS FICA Employee Medicare Wages (2016) FICA_EMP_M_WAGES_2016 python result = (payslip.date_to[:4] == '2016') code result = categories.GROSS FICA Employee Medicare Additional Wages (2016) FICA_EMP_M_ADD_WAGES_2016 python result = (payslip.date_to[:4] == '2016') code ### ADD_M = 200000.0 norm_med_ytd = payslip.sum('FICA_EMP_M_WAGES_2016', '2016-01-01', '2017-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 FICA Employee Social Security (2016) FICA_EMP_SS_2016 python result = (payslip.date_to[:4] == '2016') code ### this should be "rules.FICA_EMP_SS_WAGES_2016", but it doesn't work result_rate = -6.2 result = categories.FICA_EMP_SS_WAGES FICA Employee Medicare (2016) FICA_EMP_M_2016 python result = (payslip.date_to[:4] == '2016') code ### this should be "rules.FICA_EMP_M_WAGES_2016", but it doesn't work result_rate = -1.45 result = categories.FICA_EMP_M_WAGES FICA Employee Medicare Additional (2016) FICA_EMP_M_ADD_2016 python result = (payslip.date_to[:4] == '2016') code ### this should be "rules.FICA_EMP_M_ADD_WAGES_2016", but it doesn't work result_rate = -0.9 result = categories.FICA_EMP_M_ADD_WAGES Federal Income Withholding - Single (2016) FED_INC_WITHHOLD_2016_S python result = (payslip.date_to[:4] == '2016' and contract.w4_filing_status != 'married' and contract.w4_filing_status) code 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 += 43.30 if wages > 43 and wages <= 222: val = 0.00 + ((wages - 43) * 0.10) elif wages > 222 and wages <= 767: val = 17.90 + ((wages - 222) * 0.15) elif wages > 767 and wages <= 1796: val = 99.65 + ((wages - 767) * 0.25) elif wages > 1796 and wages <= 3700: val = 356.90 + ((wages - 1796) * 0.28) elif wages > 3700 and wages <= 7992: val = 890.02 + ((wages - 3700) * 0.33) elif wages > 7992 and wages <= 8025: val = 2306.38 + ((wages - 7992) * 0.35) elif wages > 8025: val = 2317.93 + ((wages - 8025) * 0.396) ### # Single BIWEEKLY ### elif 'bi-weekly' == schedule_pay: wages -= allowances * 155.80 if is_nra: wages += 86.50 if wages > 87 and wages <= 443: val = 0.00 + ((wages - 87) * 0.10) elif wages > 443 and wages <= 1535: val = 35.60 + ((wages - 443) * 0.15) elif wages > 1535 and wages <= 3592: val = 199.40 + ((wages - 1535) * 0.25) elif wages > 3592 and wages <= 7400: val = 713.65 + ((wages - 3592) * 0.28) elif wages > 7400 and wages <= 15985: val = 1779.89 + ((wages - 7400) * 0.33) elif wages > 15985 and wages <= 16050: val = 4612.94 + ((wages - 15985) * 0.35) elif wages > 16050: val = 4635.69 + ((wages - 16050) * 0.396) ### # Single SEMIMONTHLY ### elif 'semi-monthly' == schedule_pay: wages -= allowances * 168.80 if is_nra: wages += 93.80 if wages > 94 and wages <= 480: val = 0.00 + ((wages - 94) * 0.10) elif wages > 480 and wages <= 1663: val = 38.60 + ((wages - 480) * 0.15) elif wages > 1663 and wages <= 3892: val = 216.05 + ((wages - 1663) * 0.25) elif wages > 3892 and wages <= 8017: val = 773.30 + ((wages - 3892) * 0.28) elif wages > 8017 and wages <= 17317: val = 1928.30 + ((wages - 8017) * 0.33) elif wages > 17317 and wages <= 17388: val = 4997.30 + ((wages - 17317) * 0.35) elif wages > 17388: val = 5022.15 + ((wages - 17388) * 0.396) ### # Single MONTHLY ### elif 'monthly' == schedule_pay: wages -= allowances * 337.50 if is_nra: wages += 187.50 if wages > 188 and wages <= 960: val = 0.00 + ((wages - 188) * 0.10) elif wages > 960 and wages <= 3325: val = 77.20 + ((wages - 960) * 0.15) elif wages > 3325 and wages <= 7783: val = 431.95 + ((wages - 3325) * 0.25) elif wages > 7783 and wages <= 16033: val = 1546.45 + ((wages - 7783) * 0.28) elif wages > 16033 and wages <= 34633: val = 3856.45 + ((wages - 16033) * 0.33) elif wages > 34633 and wages <= 34775: val = 9994.45 + ((wages - 34633) * 0.35) elif wages > 34775: val = 10044.15 + ((wages - 34775) * 0.396) ### # Single QUARTERLY ### elif 'quarterly' == schedule_pay: wages -= allowances * 1012.50 if is_nra: wages += 562.50 if wages > 563 and wages <= 2881: val = 0.00 + ((wages - 563) * 0.10) elif wages > 2881 and wages <= 9975: val = 231.80 + ((wages - 2881) * 0.15) elif wages > 9975 and wages <= 23350: val = 1295.90 + ((wages - 9975) * 0.25) elif wages > 23350 and wages <= 48100: val = 4639.65 + ((wages - 23350) * 0.28) elif wages > 48100 and wages <= 103900: val = 11569.65 + ((wages - 48100) * 0.33) elif wages > 103900 and wages <= 104325: val = 29983.65 + ((wages - 103900) * 0.35) elif wages > 104325: val = 30132.40 + ((wages - 104325) * 0.396) ### # Single SEMIANNUAL ### elif 'semi-annually' == schedule_pay: wages -= allowances * 2025.00 if is_nra: wages += 1125.0 if wages > 1125 and wages <= 5763: val = 0.00 + ((wages - 1125) * 0.10) elif wages > 5763 and wages <= 19950: val = 463.80 + ((wages - 5763) * 0.15) elif wages > 19950 and wages <= 46700: val = 2591.85 + ((wages - 19950) * 0.25) elif wages > 46700 and wages <= 96200: val = 9279.35 + ((wages - 46700) * 0.28) elif wages > 96200 and wages <= 207800: val = 23139.35 + ((wages - 96200) * 0.33) elif wages > 207800 and wages <= 208650: val = 59967.35 + ((wages - 207800) * 0.35) elif wages > 208650: val = 60264.85 + ((wages - 208650) * 0.396) ### # Single ANNUAL ### elif 'annually' == schedule_pay: wages -= allowances * 4050.00 if is_nra: wages += 2250.0 if wages > 2250 and wages <= 11525: val = 0.00 + ((wages - 2250) * 0.10) elif wages > 11525 and wages <= 39900: val = 927.50 + ((wages - 11525) * 0.15) elif wages > 39900 and wages <= 93400: val = 5183.75 + ((wages - 39900) * 0.25) elif wages > 93400 and wages <= 192400: val = 18558.75 + ((wages - 93400) * 0.28) elif wages > 192400 and wages <= 415600: val = 46278.75 + ((wages - 192400) * 0.33) elif wages > 415600 and wages <= 417300: val = 119934.75 + ((wages - 415600) * 0.35) elif wages > 417300: val = 120529.75 + ((wages - 417300) * 0.396) else: raise Exception('Invalid schedule_pay="' + schedule_pay + '" for W4 Allowance calculation') result = -(val + additional) Federal Income Withholding - Married (2016) FED_INC_WITHHOLD_2016_M python result = (payslip.date_to[:4] == '2016' and contract.w4_filing_status == 'married') code 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 += 43.30 if wages > 164 and wages <= 521: val = 0.00 + ((wages - 164) * 0.10) elif wages > 521 and wages <= 1613: val = 35.70 + ((wages - 521) * 0.15) elif wages > 1613 and wages <= 3086: val = 199.50 + ((wages - 1613) * 0.25) elif wages > 3086 and wages <= 4615: val = 567.75 + ((wages - 3086) * 0.28) elif wages > 4615 and wages <= 8113: val = 995.87 + ((wages - 4615) * 0.33) elif wages > 8113 and wages <= 9144: val = 2150.21 + ((wages - 8113) * 0.35) elif wages > 9144: val = 2511.06 + ((wages - 9144) * 0.396) ### # Married BIWEEKLY ### elif 'bi-weekly' == schedule_pay: wages -= allowances * 155.80 if is_nra: wages += 86.50 if wages > 329 and wages <= 1042: val = 0.00 + ((wages - 329) * 0.10) elif wages > 1042 and wages <= 3225: val = 71.30 + ((wages - 1042) * 0.15) elif wages > 3225 and wages <= 6171: val = 398.75 + ((wages - 3225) * 0.25) elif wages > 6171 and wages <= 9231: val = 1135.25 + ((wages - 6171) * 0.28) elif wages > 9231 and wages <= 16227: val = 1992.05 + ((wages - 9231) * 0.33) elif wages > 16227 and wages <= 18288: val = 4300.73 + ((wages - 16227) * 0.35) elif wages > 18288: val = 5022.08 + ((wages - 18288) * 0.396) ### # Married SEMIMONTHLY ### elif 'semi-monthly' == schedule_pay: wages -= allowances * 168.80 if is_nra: wages += 93.80 if wages > 356 and wages <= 1129: val = 0.00 + ((wages - 356) * 0.10) elif wages > 1129 and wages <= 3494: val = 77.30 + ((wages - 1129) * 0.15) elif wages > 3494 and wages <= 6685: val = 432.05 + ((wages - 3494) * 0.25) elif wages > 6685 and wages <= 10000: val = 1229.80 + ((wages - 6685) * 0.28) elif wages > 10000 and wages <= 17579: val = 2158.00 + ((wages - 10000) * 0.33) elif wages > 17579 and wages <= 19813: val = 4659.07 + ((wages - 17579) * 0.35) elif wages > 19813: val = 5440.97 + ((wages - 19813) * 0.396) ### # Married MONTHLY ### elif 'monthly' == schedule_pay: wages -= allowances * 337.50 if is_nra: wages += 187.50 if wages > 713 and wages <= 2258: val = 0.00 + ((wages - 713) * 0.10) elif wages > 2258 and wages <= 6988: val = 154.50 + ((wages - 2258) * 0.15) elif wages > 6988 and wages <= 13371: val = 864.00 + ((wages - 6988) * 0.25) elif wages > 13371 and wages <= 20000: val = 2459.75 + ((wages - 13371) * 0.28) elif wages > 20000 and wages <= 35158: val = 4315.87 + ((wages - 20000) * 0.33) elif wages > 35158 and wages <= 39625: val = 9318.01 + ((wages - 35158) * 0.35) elif wages > 39625: val = 10881.46 + ((wages - 39625) * 0.396) ### # Married QUARTERLY ### elif 'quarterly' == schedule_pay: wages -= allowances * 1012.50 if is_nra: wages += 562.50 if wages > 2138 and wages <= 6775: val = 0.00 + ((wages - 2138) * 0.10) elif wages > 6775 and wages <= 20963: val = 463.70 + ((wages - 6775) * 0.15) elif wages > 20963 and wages <= 40113: val = 2591.90 + ((wages - 20963) * 0.25) elif wages > 40113 and wages <= 60000: val = 7379.40 + ((wages - 40113) * 0.28) elif wages > 60000 and wages <= 105475: val = 12947.76 + ((wages - 60000) * 0.33) elif wages > 105475 and wages <= 118875: val = 27954.51 + ((wages - 105475) * 0.35) elif wages > 118875: val = 32644.51 + ((wages - 118875) * 0.396) ### # Married SEMIANNUAL ### elif 'semi-annually' == schedule_pay: wages -= allowances * 2025.00 if is_nra: wages += 1125.0 if wages > 4275 and wages <= 13550: val = 0.00 + ((wages - 4275) * 0.10) elif wages > 13550 and wages <= 41925: val = 927.50 + ((wages - 13550) * 0.15) elif wages > 41925 and wages <= 80225: val = 5183.75 + ((wages - 41925) * 0.25) elif wages > 80225 and wages <= 120000: val = 14758.75 + ((wages - 80225) * 0.28) elif wages > 120000 and wages <= 210950: val = 25895.75 + ((wages - 120000) * 0.33) elif wages > 210950 and wages <= 237750: val = 55909.25 + ((wages - 210950) * 0.35) elif wages > 237750: val = 65289.25 + ((wages - 237750) * 0.396) ### # Married ANNUAL ### elif 'annually' == schedule_pay: wages -= allowances * 4050.00 if is_nra: wages += 2250.0 if wages > 8550 and wages <= 27100: val = 0.00 + ((wages - 8550) * 0.10) elif wages > 27100 and wages <= 83850: val = 1855.00 + ((wages - 27100) * 0.15) elif wages > 83850 and wages <= 160450: val = 10367.50 + ((wages - 83850) * 0.25) elif wages > 160450 and wages <= 240000: val = 29517.50 + ((wages - 160450) * 0.28) elif wages > 240000 and wages <= 421900: val = 51791.50 + ((wages - 240000) * 0.33) elif wages > 421900 and wages <= 475500: val = 111818.50 + ((wages - 421900) * 0.35) elif wages > 475500: val = 130578.50 + ((wages - 475500) * 0.396) else: raise Exception('Invalid schedule_pay="' + schedule_pay + '" for W4 Allowance calculation') result = -(val + additional) FUTA Federal Unemployment - Wages (2016) FUTA_WAGES_2016 python result = (payslip.date_to[:4] == '2016' and contract.futa_type != contract.FUTA_TYPE_EXEMPT) code ### ytd = payslip.sum('FUTA_WAGES_2016', '2016-01-01', '2017-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 FUTA Federal Unemployment (2016) FUTA_2016 python result = (payslip.date_to[:4] == '2016' and contract.futa_type != contract.FUTA_TYPE_EXEMPT) code result_rate = -(contract.futa_rate(2016)) result = categories.FUTA_WAGES