Merge branch 'new/13.0/l10n_pe_hr_payroll' into '13.0-test'

new/13.0/l10n_pe_hr_payroll into 13.0-test

See merge request hibou-io/hibou-odoo/suite!1392
This commit is contained in:
Hibou Bot
2022-04-28 23:38:44 +00:00
13 changed files with 37 additions and 106 deletions

View File

@@ -26,7 +26,6 @@ Peru - Payroll Rules.
'data/er_rules.xml',
'views/hr_contract_views.xml',
'views/pe_payroll_config_views.xml',
'views/res_config_settings_views.xml',
],
'demo': [
],

View File

@@ -19,11 +19,6 @@
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Partner -->
<record id="res_partner_afp" model="res.partner">
<field name="name">AFP</field>
</record>
<!-- EE Rules -->
<record id="hr_payroll_rule_ee_afp_pensiones" model="hr.salary.rule">
<field name="sequence" eval="190"/>
@@ -35,7 +30,6 @@
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp'</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][4]</field>
<field name="partner_id" ref="res_partner_afp"/>
<field name="appears_on_payslip" eval="True"/>
</record>
@@ -49,14 +43,16 @@
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp'</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
wage = categories.GROSS
wage_base = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][5]
rate = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][3]
result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base, rate=rate)
# wage_max is monthly
wage_max = payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][5]
# normalize wage_max to pay period
pay_periods_in_year = payslip.pay_periods_in_year
wage_max = (wage_max * 12.0) / pay_periods_in_year
eligible_wage = min(wage, wage_max)
rate = -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][3]
result, result_rate = eligible_wage, rate
</field>
<field name="partner_id" ref="res_partner_afp"/>
<field name="appears_on_payslip" eval="True"/>
</record>
@@ -70,7 +66,6 @@ result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base,
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp' and contract.pe_payroll_config_value('afp_comision_type') == 'mixta'</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][1]</field>
<field name="partner_id" ref="res_partner_afp"/>
<field name="appears_on_payslip" eval="True"/>
</record>
@@ -84,7 +79,6 @@ result, result_rate = general_rate(payslip, wage, ytd_wage, wage_base=wage_base,
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'afp' and contract.pe_payroll_config_value('afp_comision_type') == 'non_mixta'</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_afp')[contract.pe_payroll_config_value('afp_type')][0]</field>
<field name="partner_id" ref="res_partner_afp"/>
<field name="appears_on_payslip" eval="True"/>
</record>

View File

@@ -69,6 +69,10 @@
<record id="input_type_bono" model="hr.payslip.input.type">
<field name="name">Bono</field>
<field name="code">BONO</field>
<field name="country_id" ref="base.pe" />
<field name="struct_ids" eval="[
(4, ref('l10n_pe_hr_payroll.hr_payroll_structure')),
]" />
</record>
<record id="hr_salary_rule_bonus" model="hr.salary.rule">

View File

@@ -13,11 +13,6 @@
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Partner -->
<record id="res_partner_essalud" model="res.partner">
<field name="name">Essalud</field>
</record>
<!-- ER Rules -->
<record id="hr_payroll_rule_er_essalud" model="hr.salary.rule">
<field name="sequence" eval="220"/>
@@ -29,7 +24,6 @@
<field name="condition_python">result = categories.BASIC</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = categories.BASIC, -payslip.rule_parameter('er_essalud')</field>
<field name="partner_id" ref="res_partner_afp"/>
<field name="appears_on_payslip" eval="True"/>
</record>

View File

@@ -31,11 +31,6 @@
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Partner -->
<record id="res_partner_ir_5ta_cat" model="res.partner">
<field name="name">IR 5ta Cat.</field>
</record>
<!-- EE Rules -->
<record id="hr_payroll_rule_ee_ir_5ta_cat" model="hr.salary.rule">
<field name="sequence" eval="196"/>
@@ -55,7 +50,9 @@ 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_year += wage_year * (1/6) # 2 months 2/12
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)
@@ -76,9 +73,8 @@ else:
else:
break
last_uit = _uit
tax = -total_tax / 12.0
tax = -total_tax / pay_periods_in_year
result, result_rate = wage_period, (tax / wage_period * 100.0)</field>
<field name="partner_id" ref="res_partner_ir_5ta_cat"/>
<field name="appears_on_payslip" eval="True"/>
</record>

View File

@@ -13,11 +13,6 @@
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Partner -->
<record id="res_partner_onp" model="res.partner">
<field name="name">ONP</field>
</record>
<!-- EE Rules -->
<record id="hr_payroll_rule_ee_onp" model="hr.salary.rule">
<field name="sequence" eval="190"/>
@@ -26,10 +21,9 @@
<field name="name">EE: PE ONP/SNP</field>
<field name="code">EE_PE_ONP</field>
<field name="condition_select">python</field>
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'onp' and rule == contract.pe_payroll_config_value('onp_rule_id')</field>
<field name="condition_python">result = categories.GROSS and contract.pe_payroll_config_value('retirement_type') == 'onp'</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result, result_rate = categories.GROSS, -payslip.rule_parameter('ee_onp')</field>
<field name="partner_id" ref="res_partner_onp"/>
<field name="appears_on_payslip" eval="True"/>
</record>

View File

@@ -3,5 +3,4 @@
from . import hr_contract
from . import hr_payslip
from . import pe_payroll_config
from . import res_config_settings
from . import update

View File

@@ -16,8 +16,6 @@ class HRContractPEPayrollConfig(models.Model):
('retired', 'Retired'),
], string='Retirement Type', required=True, default='afp')
onp_rule_id = fields.Many2one('hr.salary.rule', string='ONP Rule', domain=[('code', '=like', 'EE_PE_ONP%')])
# AFP Type may actually be company specific....
afp_type = fields.Selection([
('habitat', 'Habitat'),
@@ -34,6 +32,6 @@ class HRContractPEPayrollConfig(models.Model):
('essalud', 'Essalud'),
('eps', 'EPS'),
], string='Company Social Services', default='essalud')
comp_ss_eps_rule_id = fields.Many2one('hr.salary.rule', string='Company Social Security EPS Rule')
comp_life_insurance_rule_id = fields.Many2one('hr.salary.rule', string='Company Life Insurance Rule')
comp_risk_insurance_rule_id = fields.Many2one('hr.salary.rule', string='Company Risk Insurance Rule')
comp_ss_eps_rule_id = fields.Many2one('hr.salary.rule', string='Company Social Security EPS Rule',
domain=[('code', '=like', 'ER_PE_EPS%')],
help="Rule code prefix 'ER_PE_EPS' to select here.")

View File

@@ -1,24 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
payslip_sum_type = fields.Selection([
('date_from', 'Date From'),
('date_to', 'Date To'),
('date', 'Accounting Date'),
], 'Payslip Sum Behavior', help="Behavior for what payslips are considered "
"during rule execution. Stock Odoo behavior "
"would not consider a payslip starting on 2019-12-30 "
"ending on 2020-01-07 when summing a 2020 payslip category.\n\n"
"Accounting Date requires Payroll Accounting and will "
"fall back to date_to as the 'closest behavior'.",
config_parameter='hr_payroll.payslip.sum_behavior')
def set_values(self):
super(ResConfigSettings, self).set_values()
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior',
self.payslip_sum_type or 'date_from')

View File

@@ -27,15 +27,13 @@
<group>
<group name="employee" string="Employee">
<field name="retirement_type"/>
<field name="onp_rule_id" attrs="{'invisible': [('retirement_type', '!=', 'onp')]}"/>
<field name="afp_type" attrs="{'invisible': [('retirement_type', '!=', 'afp')]}"/>
<field name="afp_comision_type" attrs="{'invisible': [('retirement_type', '!=', 'afp')]}"/>
</group>
<group name="employer" string="Employer">
<field name="comp_ss_type" />
<p attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}">Not supported. Specify rule.</p>
<field name="comp_ss_eps_rule_id" attrs="{'invisible': [('comp_ss_type', '!=', 'eps')]}" />
<field name="comp_life_insurance_rule_id" />
<field name="comp_risk_insurance_rule_id" />
</group>
</group>
</sheet>

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_form_inherit" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="hr_payroll.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='hr_payroll']" position="inside">
<div class="row mt16 o_settings_container" id="hr_payroll_accountant">
<div class="col-lg-6 col-12 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">Payslip Sum Behavior</span>
<div class="text-muted">
Customize the behavior of what payslips are eligible when summing over date ranges in rules.
Generally, "Date To" or "Accounting Date" would be preferred in the United States and anywhere
else where the ending date on the payslip is used to calculate wage bases.
</div>
<div class="content-group">
<div class="row mt16" id="mail_alias_domain">
<label for="payslip_sum_type" class="col-lg-3 o_light_label"/>
<field name="payslip_sum_type"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View File

@@ -18,6 +18,8 @@
# pay_ir_5ta_cat='1238',
# pay_essalud='1239',
# exp_salary='1240',
# exp_com='1222',
# exp_bono='1223',
# exp_essalud='1241',
env['account.chart.template']._pe_configure_payroll_account_data(companies, salary_rules=records, full_reset=False)
</field>
@@ -39,6 +41,8 @@
# pay_ir_5ta_cat='1238',
# pay_essalud='1239',
# exp_salary='1240',
# exp_com='1222',
# exp_bono='1223',
# exp_essalud='1241',
env['account.chart.template']._pe_configure_payroll_account_data(companies, salary_rules=records, full_reset=True)
</field>

View File

@@ -3,14 +3,14 @@
from odoo import models
EXP_SALARY = '6211000'
EXP_COM = '6212000'
EXP_BONO = '6213000'
EXP_ESSALUD = '6271000'
PAY_EE = '4111000'
PAY_AFP = '407' # TODO
PAY_AFP = '4032000' # TODO
PAY_AFP = '4170000'
PAY_ONP = '4032000'
PAY_EPS = '4075' # TODO EPS isn't implemented
PAY_IR_5TA_CAT = '4017' # TODO
PAY_IR_5TA_CAT = '4017300'
PAY_ESSALUD = '4031000'
@@ -33,6 +33,8 @@ class AccountChartTemplate(models.Model):
pay_ir_5ta_cat=PAY_IR_5TA_CAT,
pay_essalud=PAY_ESSALUD,
exp_salary=EXP_SALARY,
exp_com=EXP_COM,
exp_bono=EXP_BONO,
exp_essalud=EXP_ESSALUD,
salary_rules=None, full_reset=False):
account_codes = (
@@ -43,6 +45,8 @@ class AccountChartTemplate(models.Model):
pay_ir_5ta_cat,
pay_essalud,
exp_salary,
exp_com,
exp_bono,
exp_essalud,
)
pe_structures = self.env['hr.payroll.structure'].search([('country_id', '=', self.env.ref('base.pe').id)])
@@ -122,6 +126,9 @@ class AccountChartTemplate(models.Model):
# BASIC* -> SALARY_EXPENSE debit account
set_rule_accounts('BASIC%', accounts[exp_salary], accounts['none'])
set_rule_accounts('BASIC_COM%', accounts[exp_com], accounts['none'])
set_rule_accounts('BASIC_BONO%', accounts[exp_bono], accounts['none'])
set_rule_accounts('BASIC_BADGES%', accounts[exp_bono], accounts['none'])
# ALW* -> SALARY_EXPENSE debit account
set_rule_accounts('ALW%', accounts[exp_salary], accounts['none'])
# EE_* -> AP debit