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)