Files
suite/l10n_pe_hr_payroll/data/ir_5ta_cat_rules.xml
Jared Kipe f71a2ca6b7 [IMP] l10n_pe_hr_payroll: numerous improvements and simplifications (list)
Removed partners as chart of accounts is detailed enough to allow reconciliation.
No support for EPS as discussed as legacy.
No wage base, but rather 'monthly maximum' on Seguo.

NEEDS IR 5TH CAT. refactor to use partial pay period and true up on month 6 and 12
2022-05-10 19:19:25 +00:00

82 lines
3.0 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Parameters -->
<record id="rule_parameter_pe_uit" model="hr.rule.parameter">
<field name="name">Peru UIT</field>
<field name="code">pe_uit</field>
<field name="country_id" ref="base.pe"/>
</record>
<record id="rule_parameter_pe_uit_2020" model="hr.rule.parameter.value">
<field name="parameter_value">4400.0</field>
<field name="rule_parameter_id" ref="rule_parameter_pe_uit"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_ee_ir_5ta_cat" model="hr.rule.parameter">
<field name="name">EE: IR 5ta Cat.</field>
<field name="code">ee_ir_5ta_cat</field>
<field name="country_id" ref="base.pe"/>
</record>
<!-- 2015 chart -->
<record id="rule_parameter_ee_ir_5ta_cat_2020" model="hr.rule.parameter.value">
<field name="parameter_value">[
( 5.0, 8.0),
( 20.0, 14.0),
( 35.0, 17.0),
( 45.0, 20.0),
('inf', 30.0),
]</field>
<field name="rule_parameter_id" ref="rule_parameter_ee_ir_5ta_cat"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- EE Rules -->
<record id="hr_payroll_rule_ee_ir_5ta_cat" model="hr.salary.rule">
<field name="sequence" eval="196"/>
<field name="struct_id" ref="hr_payroll_structure"/>
<field name="category_id" ref="hr_payroll_category_ee_ir_5ta_cat"/>
<field name="name">EE: PE IR 5TA Cat.</field>
<field name="code">EE_PE_IR_5TA_CAT</field>
<field name="condition_select">python</field>
<field name="condition_python">result = categories.GROSS</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
pay_periods_in_year = payslip.pay_periods_in_year
uit = payslip.rule_parameter('pe_uit')
basic_wage = BASIC
wage_period = categories.GROSS
period_additional_wage = max(wage_period - basic_wage, 0.0)
wage_year = basic_wage * pay_periods_in_year
# additional 2 months (July and December)
wage_2 = wage_year * (1/6)
wage_3 = wage_2 * 0.09 # TODO paramatarize 9% # 2 months 2/12
wage_year += wage_2 + wage_3
wage_year += period_additional_wage
over_7uit = wage_year - (7.0 * uit)
if over_7uit &lt;= 0.0:
result = 0.0
else:
total_tax = 0.0
last_uit = 0.0
for _uit, rate in payslip.rule_parameter('ee_ir_5ta_cat'):
# marginal brackets
_uit = float(_uit)
if over_7uit &gt; (last_uit * uit):
eligible_wage = min(over_7uit, _uit * uit) - (last_uit * uit)
if eligible_wage &gt; 0.0:
total_tax += eligible_wage * (rate / 100.0)
else:
break
else:
break
last_uit = _uit
tax = -total_tax / pay_periods_in_year
result, result_rate = wage_period, (tax / wage_period * 100.0)</field>
<field name="appears_on_payslip" eval="True"/>
</record>
</odoo>