Basic Salary 1 BASIC none code result = payslip.paid_amount Holiday Pay Recovery (Year N) HolPayRecN 14 python salary_simulation = payslip.env.context.get('salary_simulation') employee = version.employee_id first_version_date = employee.with_user(1)._get_first_version_date() is_next_year = first_version_date.year + 1 == payslip.date_from.year if first_version_date else False to_recover = employee.l10n_be_holiday_pay_to_recover_n recovered = employee.l10n_be_holiday_pay_recovered_n already_done = not float_compare(to_recover, recovered, precision_digits=2) hours_per_week = employee.resource_calendar_id.hours_per_week holidays = 'LEAVE120' in worked_days and worked_days['LEAVE120'].amount result = not salary_simulation and is_next_year and to_recover and not already_done and hours_per_week and holidays code result = payslip._get_holiday_pay_recovery_n(localdict) Holiday Pay Recovery (Year N-1) HolPayRecN1 14 python salary_simulation = payslip.env.context.get('salary_simulation') employee = version.employee_id first_version_date = employee.with_user(1)._get_first_version_date() is_next_year = first_version_date.year == payslip.date_from.year if first_version_date else False to_recover = employee.l10n_be_holiday_pay_to_recover_n1 recovered = employee.l10n_be_holiday_pay_recovered_n1 already_done = not float_compare(to_recover, recovered, precision_digits=2) hours_per_week = employee.resource_calendar_id.hours_per_week holidays = 'LEAVE120' in worked_days and worked_days['LEAVE120'].amount result = not salary_simulation and is_next_year and to_recover and not already_done and hours_per_week and holidays code result = payslip._get_holiday_pay_recovery_n1(localdict) Commission COMMISSION 15 input input Hiring Bonus HIRINGBONUS 15 input input Representation Fees Regularization REPFEESREGUL 15 input input Additional Gross ADDITIONALGROSS 15 input input After Contract Public Holidays AFTERPUB 15 input input Simple December Pay SIMPLE.DECEMBER 15 input input Benefit in Kind (Internet) ATN.INT 16 python result = bool(not payslip.is_outside_contract and version.internet) code salary_simulation = payslip.env.context.get('salary_simulation') result = 5.0 if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contract = version.browse(first_period_contract_ids).filtered(lambda c: c.internet) if first_period_contract: target_contract = payslip._get_max_basic_salary_contract(first_period_contract) result = result if (first_period_contract and payslip.version_id == target_contract) else 0 Benefit in Kind (Phone Subscription) ATN.MOB 17 python result = bool(not payslip.is_outside_contract and version.mobile) code if version.mobile and not version.internet: result = 4.0 + 5.0 elif version.mobile and version.internet: result = 4.0 salary_simulation = payslip.env.context.get('salary_simulation') if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contract = version.browse(first_period_contract_ids).filtered(lambda c: c.mobile) if first_period_contract: target_contract = payslip._get_max_basic_salary_contract(first_period_contract) result = result if (first_period_contract and payslip.version_id == target_contract) else 0 Benefit in Kind (Laptop) ATN.LAP 18 python result = bool(not payslip.is_outside_contract and version.has_laptop) code salary_simulation = payslip.env.context.get('salary_simulation') result = payslip._rule_parameter('cp200_bik_laptop') if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contract = version.browse(first_period_contract_ids).filtered(lambda c: c.has_laptop) if first_period_contract: target_contract = payslip._get_max_basic_salary_contract(first_period_contract) result = payslip._rule_parameter('cp200_bik_laptop') if (first_period_contract and payslip.version_id == target_contract) else 0 Gross Salary SALARY 20 none code result = categories['BASIC'] + result_rules['HolPayRecN']['total'] + result_rules['HolPayRecN1']['total'] if 'COMMISSION' in inputs: result += result_rules['COMMISSION']['total'] if 'HIRINGBONUS' in inputs: result += result_rules['HIRINGBONUS']['total'] if 'REPFEESREGUL' in inputs: result += result_rules['REPFEESREGUL']['total'] if 'ADDITIONALGROSS' in inputs: result += result_rules['ADDITIONALGROSS']['total'] if 'AFTERPUB' in inputs: result += result_rules['AFTERPUB']['total'] if version.internet: result += result_rules['ATN.INT']['total'] if version.mobile: result += result_rules['ATN.MOB']['total'] if version.has_laptop: result += result_rules['ATN.LAP']['total'] if 'SIMPLEDECEMBER' in inputs: result += result_rules['SIMPLE.DECEMBER']['total'] Social contribution ONSS 41 python result=not version.no_onss percentage SALARY -13.07 ONSS Restructuring Reduction ONSSRESTRUCTURING 42 python result=version.l10n_be_onss_restructuring code result = payslip._get_onss_restructuring(localdict) result = min(-result_rules['ONSS']['total'], result) Employment Bonus (Volet A: 33.14%) EmpBonus.A 42 python wage = result_rules['SALARY']['total'] result = payslip.date_from >= date(2024, 4, 1) and categories['BASIC'] and wage <= payslip._rule_parameter('work_bonus_reference_wage_high') code result = payslip._get_employment_bonus_employees_volet_A(localdict) onss = result_rules['ONSS']['total'] + result_rules['ONSSRESTRUCTURING']['total'] result = min(-onss, result) Employment Bonus (Volet B: 52.54%) EmpBonus.B 42 python wage = result_rules['SALARY']['total'] result = payslip.date_from >= date(2024, 4, 1) and categories['BASIC'] and wage <= payslip._rule_parameter('work_bonus_reference_wage_high') code result = payslip._get_employment_bonus_employees_volet_B(localdict) onss = result_rules['ONSS']['total'] + result_rules['ONSSRESTRUCTURING']['total'] + result_rules['EmpBonus.A']['total'] result = min(-onss, result) Employment Bonus EmpBonus.1 43 python wage = result_rules['SALARY']['total'] result = categories['BASIC'] and wage <= payslip._rule_parameter('work_bonus_reference_wage_high') code result = payslip._get_employment_bonus_employees(localdict) onss = result_rules['ONSS']['total'] + result_rules['ONSSRESTRUCTURING']['total'] result = min(abs(onss), result) ONSS (TOTAL) ONSSTOTAL 43 none code result = abs(categories['ONSS']) - abs(categories['ONSSRESTRUCTURING']) - abs(categories['EmpBonus']) Benefit in Kind (Company Car) ATN.CAR 70 python result = bool(not payslip.is_outside_contract and version.transport_mode_car and version.car_atn) code result = version.car_atn salary_simulation = payslip.env.context.get('salary_simulation') if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contract = version.browse(first_period_contract_ids).filtered(lambda c: c.transport_mode_car) if first_period_contract: target_contract = payslip._get_max_basic_salary_contract(first_period_contract) result = result if (first_period_contract and payslip.version_id == target_contract) else 0 Total Gross 90 GROSSIP python result = bool(version.ip) code result = categories['BASIC'] + categories['ALW'] Intellectual Property IP.PART 91 python result = bool(version.ip) code result = - payslip._get_be_ip(localdict) Taxable Salary 100 GROSS none code result = categories['BASIC'] + categories['ALW'] Withholding Tax P.P 120 python result=not version.no_withholding_taxes code result = payslip._get_be_withholding_taxes(localdict) Fiscal Voluntarism FISC_VOL 125 python result = bool(employee.fiscal_voluntarism) code result = -employee.fiscal_voluntarism Withholding reduction P.P.DED code 130 python result = bool(categories['EmpBonus']) result = payslip._get_withholding_reduction(localdict) Withholding Taxes (Adjustment) P.P.ADJ 135 input code min_withholding_tax = inputs['WT_MIN'].amount total_withholding_tax = abs(categories['PP']) + abs(result_rules['FISC_VOL']['total']) - abs(result_rules['P.P.DED']['total']) result = -max(0, min_withholding_tax - total_withholding_tax) Withholding Tax (Total) PPTOTAL code 140 none code result = -(categories['PP'] + (result_rules['P.P.DED']['total'] if bool(categories['EmpBonus']) else 0) + result_rules['FISC_VOL']['total'] + result_rules['P.P.ADJ']['total']) Benefit in Kind (Company Car) ATN.CAR.2 160 python result = bool(not payslip.is_outside_contract and version.transport_mode_car and version.car_atn) code result_qty = result_rules['ATN.CAR']['quantity'] result = -result_rules['ATN.CAR']['amount'] Benefit in Kind (Internet) ATN.INT.2 161 python result = bool(not payslip.is_outside_contract and version.internet) code result_qty = result_rules['ATN.INT']['quantity'] result = -result_rules['ATN.INT']['amount'] Benefit in Kind (Laptop) ATN.LAP.2 163 python result = bool(not payslip.is_outside_contract and version.has_laptop) code result_qty = result_rules['ATN.LAP']['quantity'] result = -result_rules['ATN.LAP']['amount'] Special social cotisation M.ONSS fix 165 code result = payslip._get_be_special_social_cotisations(localdict) Retain on Meal Voucher MEAL_V_EMP 165 python result = bool(version.meal_voucher_amount) percentage -100.0 version.meal_voucher_amount - version.meal_voucher_paid_by_employer payslip.meal_voucher_count Benefit in Kind (Phone Subscription) ATN.MOB.2 162 python result = bool(not payslip.is_outside_contract and version.mobile) code if version.mobile: result_qty = result_rules['ATN.MOB']['quantity'] result = -result_rules['ATN.MOB']['amount'] Net part payable by the Onem (< 25 years old) IMPULSION25 166 python result = bool(version.l10n_be_impulsion_plan) and version.l10n_be_impulsion_plan == '25yo' code result = - payslip._get_impulsion_plan_amount(localdict) Net part payable by the Onem (12+ months) IMPULSION12 166 python result = bool(version.l10n_be_impulsion_plan) and version.l10n_be_impulsion_plan == '12mo' code result = - payslip._get_impulsion_plan_amount(localdict) Public Transportation (Tram - Bus - Metro) PUB.TRANS code 169 python result = version.transport_mode_public or version.transport_mode_train if not categories['BASIC']: result = 0 else: public_transport_reimbursed_amount = version.with_context(payslip_date=payslip.date_from)._get_public_transport_reimbursed_amount(version.public_transport_employee_amount) result = public_transport_reimbursed_amount + version.train_transport_reimbursed_amount salary_simulation = payslip.env.context.get('salary_simulation') if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contracts = version.browse(first_period_contract_ids).filtered( lambda c: (c.transport_mode_public or c.transport_mode_train) and not (c.l10n_be_time_credit and not c.work_time_rate) ) if first_period_contracts: first_period_contract = first_period_contracts result = (public_transport_reimbursed_amount + version.train_transport_reimbursed_amount) if (first_period_contract and payslip.version_id == first_period_contract[0]) else 0 else: result = 0 Private car CAR.PRIV code 170 python result = version.transport_mode_private_car if not categories['BASIC']: result = 0 result_qty = 0 else: calendar = version.resource_calendar_id days_per_week = calendar._get_days_per_week() if days_per_week: total_amount = version.with_context(payslip_date=payslip.date_from)._get_private_car_reimbursed_amount(version.km_home_work) / 5 * days_per_week daily_amount = total_amount * 3 / 13 / days_per_week cycle_days = inputs['CYCLE'].amount if 'CYCLE' in inputs else 0 # YTI NOTE: Changed nature of field (from missing dats to granting days) result_qty = max(payslip.private_car_missing_days - cycle_days, 0) result = round(daily_amount, 2) else: result = 0 Cycle Transportation Reimbursement CYCLE code 170 python result = 'CYCLE' in inputs and inputs['CYCLE'].amount amount_per_km = payslip._rule_parameter('cp200_cycle_reimbursement_per_km') amount_max = payslip._rule_parameter('cp200_cycle_reimbursement_max') result_qty = inputs['CYCLE'].amount result = min(amount_max, amount_per_km * version.employee_id.km_home_work * 2) Representation Fees REP.FEES code 171 python result = bool(version.representation_fees) result = payslip._get_serious_representation_fees(localdict) Representation Fees (Without Serious Standards) REP.FEES.VOLATILE code 171 python result = version.representation_fees and payslip._get_representation_fees(localdict) > payslip._get_representation_fees_threshold(localdict) result = payslip._get_volatile_representation_fees(localdict) if 'REPFEESREGUL' in inputs: result = max(0, result - inputs['REPFEESREGUL'].amount) Intellectual Property IP code 172 python result = bool(version.ip) result = payslip._get_be_ip(localdict) Intellectual Property Income Deduction IP.DED code 173 python result = bool(version.ip) result = payslip._get_be_ip_deduction(localdict) Canteen Cost CANTEEN code 174 python result = version.l10n_be_canteen_cost and 'WORK100' in worked_days and worked_days['WORK100'].amount result = -version.l10n_be_canteen_cost if result_rules['BASIC']['total'] else 0 salary_simulation = payslip.env.context.get('salary_simulation') if not salary_simulation: first_period_contract_ids = payslip._get_period_contracts() first_period_contract = version.browse(first_period_contract_ids).filtered(lambda c: c.l10n_be_canteen_cost) result = result if (first_period_contract and payslip.version_id == first_period_contract[0]) else 0 Attachment of Salary 174 ATTACH_SALARY python result = 'ATTACH_SALARY' in inputs code result = -inputs['ATTACH_SALARY'].amount result_name = inputs['ATTACH_SALARY'].name Assignment of Salary 174 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 174 python result = 'CHILD_SUPPORT' in inputs result = -inputs['CHILD_SUPPORT'].amount result_name = inputs['CHILD_SUPPORT'].name Double December Pay Basic DOUBLE.DECEMBER.BASIC 175 input input Double December Pay Basic Complementary DOUBLE.DECEMBER.BASIC.COMPLEMENTARY 175 input input Gross Double December Pay Salary DOUBLE.DECEMBER.SALARY 176 python result = result_rules['DOUBLE.DECEMBER.BASIC']['total'] or result_rules['DOUBLE.DECEMBER.BASIC.COMPLEMENTARY']['total'] code result = result_rules['DOUBLE.DECEMBER.BASIC']['total'] + result_rules['DOUBLE.DECEMBER.BASIC.COMPLEMENTARY']['total'] Social contribution DOUBLE.DECEMBER.ONSS 177 python result = result_rules['DOUBLE.DECEMBER.BASIC']['total'] and not version.no_onss percentage result_rules['DOUBLE.DECEMBER.SALARY']['total'] - result_rules['DOUBLE.DECEMBER.BASIC.COMPLEMENTARY']['total'] -13.07 Double December Pay Gross DOUBLE.DECEMBER.GROSS 178 python result = result_rules['DOUBLE.DECEMBER.SALARY']['total'] code result = result_rules['DOUBLE.DECEMBER.SALARY']['total'] + result_rules['DOUBLE.DECEMBER.ONSS']['total'] Double December Pay Withholding Tax DOUBLE.DECEMBER.P.P 179 python result = result_rules['DOUBLE.DECEMBER.GROSS']['total'] code result = payslip._get_be_double_holiday_withholding_taxes(localdict) Double December Pay Net DOUBLE.DECEMBER.NET 180 python result = result_rules['DOUBLE.DECEMBER.GROSS']['total'] code result = result_rules['DOUBLE.DECEMBER.GROSS']['total']+ result_rules['DOUBLE.DECEMBER.P.P']['total'] Mobility Budget Payment MOBILITY.PAYMENT code 185 python result = 'MOBILITY.PAYMENT' in inputs result = inputs['MOBILITY.PAYMENT'].amount Mobility Budget Special Contribution MOBILITY.BUDGET.TAX code 186 python result = result_rules['MOBILITY.PAYMENT']['total'] > 0 result = result_rules['MOBILITY.PAYMENT']['total'] result_rate = -payslip._rule_parameter('mobility_budget_tax') Refund Expenses EXPENSES 190 python result = inputs['EXPENSES'].amount > 0.0 if 'EXPENSES' in inputs else False code result = inputs['EXPENSES'].amount if 'EXPENSES' in inputs else 0 result_name = inputs['EXPENSES'].name if 'EXPENSES' in inputs else False Negative Net NEGATIVE 198 python result = 'NEGATIVE' in inputs code result = -inputs['NEGATIVE'].amount result_name = inputs['NEGATIVE'].name Deduction 198 DEDUCTION python result = 'DEDUCTION' in inputs code result = -inputs['DEDUCTION'].amount result_name = inputs['DEDUCTION'].name Salary Advance Recovery SALARYADVREC 199 input code result = -inputs['SALARYADVREC'].amount 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 = categories['BASIC'] + categories['ALW'] + categories['DED'] + result_rules['DOUBLE.DECEMBER.NET']['total'] Eco-Vouchers ECOVOUCHERS 205 input input Accounting: Remuneration REMUNERATION code 500 none result = categories['BASIC'] + categories['COMMISSION'] + result_rules['HIRINGBONUS']['total'] + result_rules['REPFEESREGUL']['total'] + result_rules['ADDITIONALGROSS']['total'] + categories['AFTERPUB'] + result_rules['SIMPLE.DECEMBER']['total'] - abs(result_rules['IP']['total'] if version.ip else 0) Accounting: ONSS Basic (Employer) ONSSEMPLOYERBASIC 501 none code result_rate = payslip._rule_parameter('l10n_be_global_rate') - 13.07 result = SALARY Accounting: ONSS FFE (Employer) ONSSEMPLOYERFFE 501 none code worker_count = payslip.company_id._get_workers_count() result_rate = payslip._get_ffe_contribution_rate(worker_count) result = SALARY Accounting: ONSS Special FFE (Employer) ONSSEMPLOYERMFFE 501 none code result_rate = payslip._rule_parameter('l10n_be_special_ffe_rate') result = SALARY Accounting: ONSS CPAE (Employer) ONSSEMPLOYERCPAE 501 none code result_rate = payslip._rule_parameter('l10n_be_cpae_rate') result = SALARY Accounting: ONSS Wage Restreint (Employer) ONSSEMPLOYERRESTREINT 501 none code result_rate = payslip._rule_parameter('l10n_be_wage_restreint') result = SALARY Accounting: ONSS Temporary Unemployment (Employer) ONSSEMPLOYERUNEMP 501 none code result_rate = payslip._rule_parameter('l10n_be_temporary_unemployment_rate') result = SALARY Accounting: ONSS (Employer) ONSSEMPLOYER 502 none code result = result_rules['ONSSEMPLOYERBASIC']['total'] + result_rules['ONSSEMPLOYERFFE']['total'] + result_rules['ONSSEMPLOYERMFFE']['total'] + result_rules['ONSSEMPLOYERCPAE']['total'] + result_rules['ONSSEMPLOYERRESTREINT']['total'] + result_rules['ONSSEMPLOYERUNEMP']['total'] Group Insurance (Employer) GROUPINSURANCE 503 python result = version.l10n_be_group_insurance_rate code result_rate = 8.86 result = version.wage_with_holidays * (version.l10n_be_group_insurance_rate / 100.0) * (version.resource_calendar_id.work_time_rate / 100.0)