Basic Salary 1 BASIC none code result = payslip.paid_amount Food Allowance UNTAXED_FOOD_ALLOWANCE 11 python result = 0 < version.l10n_ke_food_allowance <= payslip._rule_parameter('l10n_ke_food_alw_max') code result = version.l10n_ke_food_allowance Airtime Allowance UNTAXED_AIRTIME_ALLOWANCE 13 python result = 0 < version.l10n_ke_airtime_allowance <= payslip._rule_parameter('l10n_ke_airtime_alw_max') code result = version.l10n_ke_airtime_allowance Pension Allowance UNTAXED_PENSION_ALLOWANCE 14 python result = bool(version.l10n_ke_pension_allowance) code maximum = payslip._rule_parameter('l10n_ke_pension_alw_max') result = min(maximum, version.l10n_ke_pension_allowance) Untaxed Allowance UNTAXED_ALLOWANCE 20 python result = categories['KE_UT_ALW'] code result = categories['KE_UT_ALW'] Food Allowance TAXED_FOOD_ALLOWANCE 21 python result = version.l10n_ke_food_allowance > payslip._rule_parameter('l10n_ke_food_alw_max') code result = version.l10n_ke_food_allowance Airtime Allowance TAXED_AIRTIME_ALLOWANCE 23 python result = version.l10n_ke_airtime_allowance > payslip._rule_parameter('l10n_ke_airtime_alw_max') code result = version.l10n_ke_airtime_allowance Pension Allowance TAXED_PENSION_ALLOWANCE 24 python result = version.l10n_ke_pension_allowance >= payslip._rule_parameter('l10n_ke_pension_alw_max') code result = version.l10n_ke_pension_allowance - payslip._rule_parameter('l10n_ke_pension_alw_max') Commuter Allowance TAXED_COMMUTER_ALLOWANCE 25 python result = version.l10n_ke_commuter_allowance code result = version.l10n_ke_commuter_allowance Housing Allowance TAXED_HOUSING_ALLOWANCE 26 python result = version.l10n_ke_housing_allowance_fixed if version.l10n_ke_housing_allowance_unit == 'fixed' else version.l10n_ke_housing_allowance_percentage code result = version.l10n_ke_housing_allowance_fixed if version.l10n_ke_housing_allowance_unit == 'fixed' else categories['BASIC'] result_rate = version.l10n_ke_housing_allowance_percentage if version.l10n_ke_housing_allowance_unit == 'percentage' else 100 Taxed Allowance TAXED_ALLOWANCE 30 python result = categories['KE_T_ALW'] code result = categories['KE_T_ALW'] Fixed Bonus BONUS 31 input input Fixed Commission COMMISSION 32 input input Gross Salary 100 GROSS none code result = categories['BASIC'] + categories['ALW'] Mortgage Interest MORTGAGE 102 python result = employee.l10n_ke_mortgage and not version.l10n_ke_is_secondary code result = employee.l10n_ke_mortgage NSSF Tier 1 Employee Deduction NSSF_EMPLOYEE_TIER_1 110 python result = not (version.l10n_ke_is_secondary or payslip._l10n_ke_is_employee_at_least_60()) code lower_limit = payslip._rule_parameter('l10n_ke_nssf_lower_limit') pensionable = categories['BASIC'] + categories['COMMISSIONS'] result = min(lower_limit, pensionable) result_rate = 6 NSSF Tier 2 Employee Deduction NSSF_EMPLOYEE_TIER_2 111 python result = not (version.l10n_ke_is_secondary or payslip._l10n_ke_is_employee_at_least_60()) code lower_limit = payslip._rule_parameter('l10n_ke_nssf_lower_limit') upper_limit = payslip._rule_parameter('l10n_ke_nssf_upper_limit') pensionable = categories['BASIC'] + categories['COMMISSION'] result = 0 if upper_limit < pensionable: result = (upper_limit - lower_limit) elif lower_limit < pensionable: result = (pensionable - lower_limit) result_rate = 6 AHL Amount AHL_AMOUNT 120 none code result = categories['BASIC'] - employee.disabled * payslip._rule_parameter('l10n_ke_disability_threshold') result_rate = payslip._rule_parameter('l10n_ke_ahl_employee') * 100 NSSF Amount NSSF_AMOUNT 121 python result = not (version.l10n_ke_is_secondary or payslip._l10n_ke_is_employee_at_least_60()) code result = result_rules['NSSF_EMPLOYEE_TIER_1']['total'] + result_rules['NSSF_EMPLOYEE_TIER_2']['total'] NHIF Amount (Hidden) NHIF_AMOUNT_HIDDEN 122 python result = not version.l10n_ke_is_secondary and payslip._rule_parameter('l10n_ke_nhif') code basic = categories['BASIC'] result = 0 for high, rate in payslip._rule_parameter('l10n_ke_nhif'): if basic < float(high): result = rate break NHIF Amount NHIF_AMOUNT 123 python result = not version.l10n_ke_is_secondary and result_rules['NHIF_AMOUNT_HIDDEN']['total'] code result = result_rules['NHIF_AMOUNT_HIDDEN']['total'] SHIF Amount SHIF_AMOUNT 125 python result = not version.l10n_ke_is_secondary and payslip._rule_parameter('l10n_ke_shif_rate') code gross = result_rules['GROSS']['total'] result = 0 if gross < float(payslip._rule_parameter('l10n_ke_shif_min_gross')): result = payslip._rule_parameter('l10n_ke_shif_min_amount') else: result = payslip._rule_parameter('l10n_ke_shif_rate') * gross Gross Taxable GROSS_TAXABLE 130 none code total_pension = result_rules['NSSF_AMOUNT']['total'] + version.l10n_ke_pension_contribution max_pension_contribution = payslip._rule_parameter('l10n_ke_max_pension_contribution') non_taxable_pension = min(total_pension, max_pension_contribution) - max(0, version.l10n_ke_pension_allowance - payslip._rule_parameter('l10n_ke_pension_alw_max')) result = result_rules['GROSS']['total'] - categories['KE_UT_ALW'] - employee.l10n_ke_mortgage - non_taxable_pension if payslip.date_to >= datetime(2024,12,27).date(): result -= result_rules['SHIF_AMOUNT']['total'] + result_rules['AHL_AMOUNT']['total'] Income Tax INCOME_TAX 131 none code if version.l10n_ke_is_secondary: result = result_rules['GROSS_TAXABLE']['total'] result_rate = payslip._rule_parameter('l10n_ke_income_tax_secondary') else: remaining_gross = result_rules['GROSS_TAXABLE']['total'] income_tax_breakdown = payslip._rule_parameter('l10n_ke_income_tax_breakdown') income_tax = 0 for amount, coefficient in income_tax_breakdown: deduced_fraction = min(float(amount), remaining_gross) income_tax += deduced_fraction * coefficient remaining_gross -= deduced_fraction if remaining_gross <= 0: break result = income_tax NHIF Relief NHIF_RELIEF 142 python result = result_rules['NHIF_AMOUNT_HIDDEN']['total'] and not version.l10n_ke_is_secondary code result = result_rules['NHIF_AMOUNT_HIDDEN']['total'] result_rate = -15 #77767B Medical Insurance Relief MED_INSURANCE_RELIEF 143 python result = version.l10n_ke_voluntary_medical_insurance and not version.l10n_ke_is_secondary code result = version.l10n_ke_voluntary_medical_insurance result_rate = -15 #77767B Life Insurance Relief LIFE_INSURANCE_RELIEF 144 python result = version.l10n_ke_life_insurance and not version.l10n_ke_is_secondary code result = version.l10n_ke_life_insurance result_rate = -15 #77767B Education Relief EDUCATION_RELIEF 145 python result = version.l10n_ke_education and not version.l10n_ke_is_secondary code result = version.l10n_ke_education result_rate = -15 #77767B Total Insurance Reliefs INSURANCE_RELIEF 146 python result = categories['INS_RELIEF'] and not version.l10n_ke_is_secondary code result = - min( payslip._rule_parameter('l10n_ke_insurance_relief_max'), -categories['INS_RELIEF'] ) AHL Relief AHL_RELIEF 147 python result = payslip.date_from >= datetime(2024, 3, 19).date() and payslip.date_to < datetime(2024,12,27).date() and not version.l10n_ke_is_secondary code if payslip._rule_parameter('l10n_ke_ahl_relief_cap') < result_rules['AHL_AMOUNT']['total'] * payslip._rule_parameter('l10n_ke_ahl_relief_rate'): result = - payslip._rule_parameter('l10n_ke_ahl_relief_cap') else: result = result_rules['AHL_AMOUNT']['total'] result_rate = - payslip._rule_parameter('l10n_ke_ahl_relief_rate') * 100 Personal Relief PERS_RELIEF 148 python result = payslip._rule_parameter('l10n_ke_personal_relief') and not version.l10n_ke_is_secondary code result = - payslip._rule_parameter('l10n_ke_personal_relief') P.A.Y.E. PAYE 150 python result = result_rules['GROSS_TAXABLE']['total'] >= 24000 code result = max(result_rules['INCOME_TAX']['total'] + categories['RELIEF'], 0) Statutory Deductions STATUTORY_DED 151 python result = categories['STATUTORY_DED'] code result = categories['STATUTORY_DED'] HELB HELB 152 python result = 'HELB' in inputs and not version.l10n_ke_is_secondary input Voluntary Medical Insurance MED_INSURANCE 153 python result = version.l10n_ke_voluntary_medical_insurance and not version.l10n_ke_is_secondary code result = version.l10n_ke_voluntary_medical_insurance Life Insurance LIFE_INSURANCE 154 python result = version.l10n_ke_life_insurance and not version.l10n_ke_is_li_managed_by_employee and not version.l10n_ke_is_secondary code result = version.l10n_ke_life_insurance Education EDUCATION 155 python result = version.l10n_ke_education and not version.l10n_ke_is_secondary code result = version.l10n_ke_education Pension Contribution NSSF_EMPLOYEE_TIER_3 156 python result = version.l10n_ke_pension_contribution and not version.l10n_ke_is_secondary percentage version.l10n_ke_pension_contribution 100 Fringe Benefit FRINGE_BENEFIT 157 python result = 'FRINGE_BENEFIT' in inputs and not version.l10n_ke_is_secondary input Other Deductions OTHER_DED 158 python result = categories['OTHER_DED'] code result = categories['OTHER_DED'] Attachment of Salary 75 ATTACH_SALARY python result = 'ATTACH_SALARY' in inputs code result = inputs['ATTACH_SALARY'].amount result_name = inputs['ATTACH_SALARY'].name Assignment of Salary 76 ASSIG_SALARY python result = 'ASSIG_SALARY' in inputs code result = inputs['ASSIG_SALARY'].amount result_name = inputs['ASSIG_SALARY'].name Child Support CHILD_SUPPORT code 77 python result = 'CHILD_SUPPORT' in inputs result = inputs['CHILD_SUPPORT'].amount result_name = inputs['CHILD_SUPPORT'].name Deduction 78 DEDUCTION python result = 'DEDUCTION' in inputs code result = inputs['DEDUCTION'].amount result_name = inputs['DEDUCTION'].name Total Deductions TOTAL_DED 159 python result = categories['TOTAL_DED'] code result = categories['TOTAL_DED'] NITA Employer Cost NITA 160 code result = payslip._rule_parameter('l10n_ke_nita') NSSF Employer Cost NSSF_EMP 161 python result = not (version.l10n_ke_is_secondary or payslip._l10n_ke_is_employee_at_least_60()) code result = result_rules['NSSF_AMOUNT']['total'] AHL Amount (employer) AHL_AMOUNT_EMP 162 none code result = categories['BASIC'] - employee.disabled * payslip._rule_parameter('l10n_ke_disability_threshold') result_rate = payslip._rule_parameter('l10n_ke_ahl_employer') * 100 Non-Cash Benefit NON_CASH_BENEFIT 163 python result = 'NON_CASH_BENEFIT' in inputs code result = inputs['NON_CASH_BENEFIT'].amount result_name = inputs['NON_CASH_BENEFIT'].name Reimbursement 199 REIMBURSEMENT python result = 'REIMBURSEMENT' in inputs code result = inputs['REIMBURSEMENT'].amount result_name = inputs['REIMBURSEMENT'].name Net Salary 200 NET none code result = result_rules['GROSS']['total'] - result_rules['TOTAL_DED']['total'] + categories['EXEMPTION'] + result_rules['NON_CASH_BENEFIT']['total']