FICA Employee Social Security Wages (2017) FICA_EMP_SS_WAGES_2017 python result = (payslip.date_to[:4] == '2017') code ### 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 FICA Employee Medicare Wages (2017) FICA_EMP_M_WAGES_2017 python result = (payslip.date_to[:4] == '2017') code result = categories.GROSS FICA Employee Medicare Additional Wages (2017) FICA_EMP_M_ADD_WAGES_2017 python result = (payslip.date_to[:4] == '2017') code ### 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 FICA Employee Social Security (2017) FICA_EMP_SS_2017 python result = (payslip.date_to[:4] == '2017') code ### this should be "rules.FICA_EMP_SS_WAGES_2017", but it doesn't work result_rate = -6.2 result = categories.FICA_EMP_SS_WAGES FICA Employee Medicare (2017) FICA_EMP_M_2017 python result = (payslip.date_to[:4] == '2017') code ### this should be "rules.FICA_EMP_M_WAGES_2017", but it doesn't work result_rate = -1.45 result = categories.FICA_EMP_M_WAGES FICA Employee Medicare Additional (2017) FICA_EMP_M_ADD_2017 python result = (payslip.date_to[:4] == '2017') code ### 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 Federal Income Withholding - Single (2017) FED_INC_WITHHOLD_2017_S python result = (payslip.date_to[:4] == '2017' 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 += 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) Federal Income Withholding - Married (2017) FED_INC_WITHHOLD_2017_M python result = (payslip.date_to[:4] == '2017' 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 += 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) FUTA Federal Unemployment - Wages (2017) FUTA_WAGES_2017 python result = (payslip.date_to[:4] == '2017' and contract.futa_type != contract.FUTA_TYPE_EXEMPT) code ### 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 FUTA Federal Unemployment (2017) FUTA_2017 python result = (payslip.date_to[:4] == '2017' and contract.futa_type != contract.FUTA_TYPE_EXEMPT) code result_rate = -(contract.futa_rate(2017)) result = categories.FUTA_WAGES