From e8623a009a269e1b40348d0203239f8f62ce7060 Mon Sep 17 00:00:00 2001
From: jmra-odoo <jmra@odoo.com>
Date: Mon, 17 Mar 2025 13:18:22 +0530
Subject: [PATCH 1/3] [ADD] l10n_in_hr_payroll_extension:  Indian l10n
 modification for hr_payroll

With This Commit
========================================================

- Added default configurations for deductions and allowances in setting.
- Added salary components and deductions section in `hr_contract`.
- Implemented dynamic percentage-based calculations for payroll allowances.
- Added computation logic to ensure real-time updates based on wage.
- Improved salary structure display in payroll & employee contracts.
---
 l10n_in_hr_payroll_extension/__init__.py      |   1 +
 l10n_in_hr_payroll_extension/__manifest__.py  |  10 ++
 .../models/__init__.py                        |   3 +
 .../models/hr_contract.py                     | 118 +++++++++++++
 .../models/res_company.py                     |  27 +++
 .../models/res_config_settings.py             |  36 ++++
 .../views/hr_contract_views.xml               | 146 ++++++++++++++++
 .../views/res_config_settings_views.xml       | 163 ++++++++++++++++++
 8 files changed, 504 insertions(+)
 create mode 100644 l10n_in_hr_payroll_extension/__init__.py
 create mode 100644 l10n_in_hr_payroll_extension/__manifest__.py
 create mode 100644 l10n_in_hr_payroll_extension/models/__init__.py
 create mode 100644 l10n_in_hr_payroll_extension/models/hr_contract.py
 create mode 100644 l10n_in_hr_payroll_extension/models/res_company.py
 create mode 100644 l10n_in_hr_payroll_extension/models/res_config_settings.py
 create mode 100644 l10n_in_hr_payroll_extension/views/hr_contract_views.xml
 create mode 100644 l10n_in_hr_payroll_extension/views/res_config_settings_views.xml

diff --git a/l10n_in_hr_payroll_extension/__init__.py b/l10n_in_hr_payroll_extension/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/l10n_in_hr_payroll_extension/__manifest__.py b/l10n_in_hr_payroll_extension/__manifest__.py
new file mode 100644
index 00000000000..1e4175e4ae9
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/__manifest__.py
@@ -0,0 +1,10 @@
+{
+    'name': "Indian Payroll Extension",
+    'depends': ['l10n_in_hr_payroll'],
+    'installable': True,
+    'license': 'LGPL-3',
+    'data': [
+        'views/res_config_settings_views.xml',
+        'views/hr_contract_views.xml',
+    ],
+}
diff --git a/l10n_in_hr_payroll_extension/models/__init__.py b/l10n_in_hr_payroll_extension/models/__init__.py
new file mode 100644
index 00000000000..880e048d29b
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/models/__init__.py
@@ -0,0 +1,3 @@
+from . import res_company
+from . import res_config_settings
+from . import hr_contract
diff --git a/l10n_in_hr_payroll_extension/models/hr_contract.py b/l10n_in_hr_payroll_extension/models/hr_contract.py
new file mode 100644
index 00000000000..025d95d27b1
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/models/hr_contract.py
@@ -0,0 +1,118 @@
+from odoo import api, fields, models
+
+
+class HrContract(models.Model):
+    _inherit = 'hr.contract'
+
+    l10n_in_basic_salary = fields.Float(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary")
+    l10n_in_house_rent_allowance = fields.Float(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance")
+    l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default=4167)
+    l10n_in_performance_bonus = fields.Float(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus")
+    l10n_in_leave_travel_allowance = fields.Float(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance")
+    l10n_in_leave_allowance = fields.Float(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance")
+    l10n_in_leave_days = fields.Float(string="Leave Days", default=1)
+    l10n_in_gratuity = fields.Float(string="Gratuity", default=0)
+    l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", default=0)
+
+    l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", help="basic salary percentage of wage", default=50)
+    l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance Percentage", help="this is the percentage of basic salary", default=50)
+    l10n_in_standard_allowance_percent = fields.Float(string="Standard Allowance Percentage", compute="_compute_l10n_in_standard_allowance_percent", inverse="_inverse_l10n_in_standard_allowance_percent")
+    l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus Percentage", default=20)
+    l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance Percentage", default=20)
+    l10n_in_leave_allowance_per_day_percent = fields.Float(string="Leave allowance per day percentage")
+    l10n_in_leave_allowance_percent = fields.Float(string="Leave Allowance Percentage")
+    l10n_in_gratuity_percent = fields.Float(string="Gratuity Percentage", compute="_compute_l10n_in_gratuity_percent", inverse="_inverse_l10n_in_gratuity_percent")
+    l10n_in_supplementary_allowance_percent = fields.Float(string="Supplementary Allowance Percentage")
+
+    l10n_in_pf_employee_contribution = fields.Float(related="company_id.l10n_in_pf_employee_contribution", readonly=False)
+    l10n_in_pf_employer_contribution = fields.Float(related="company_id.l10n_in_pf_employer_contribution", readonly=False)
+    l10n_in_professional_tax = fields.Float(string="Professional Tax", default=200)
+    l10n_in_esic_employee_contribution = fields.Float(related="company_id.l10n_in_esic_employee_contribution", readonly=False)
+    l10n_in_esic_employer_contribution = fields.Float(related="company_id.l10n_in_esic_employer_contribution", readonly=False)
+    l10n_in_lwf_employee_contribution = fields.Float(related="company_id.l10n_in_lwf_employee_contribution", readonly=False)
+    l10n_in_lwf_employer_contribution = fields.Float(related="company_id.l10n_in_lwf_employer_contribution", readonly=False)
+    l10n_in_other_deduction = fields.Float(string="Other Deduction")
+
+    @api.depends("l10n_in_basic_salary_percent", "wage")
+    def _compute_l10n_in_basic_salary(self):
+        for record in self:
+            record.l10n_in_basic_salary = record.wage * (record.l10n_in_basic_salary_percent / 100)
+
+    def _inverse_l10n_in_basic_salary(self):
+        for record in self:
+            record.l10n_in_basic_salary_percent = (record.l10n_in_basic_salary * 100) / record.wage if record.wage else 0
+
+    @api.depends("l10n_in_basic_salary", "l10n_in_house_rent_allowance_percent")
+    def _compute_l10n_in_house_rent_allowance(self):
+        for record in self:
+            record.l10n_in_house_rent_allowance = record.l10n_in_basic_salary * (record.l10n_in_house_rent_allowance_percent / 100)
+
+    def _inverse_l10n_in_house_rent_allowance(self):
+        for record in self:
+            record.l10n_in_house_rent_allowance_percent = (record.l10n_in_house_rent_allowance * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+
+    @api.depends("l10n_in_standard_allowance", "wage")
+    def _compute_l10n_in_standard_allowance_percent(self):
+        for record in self:
+            record.l10n_in_standard_allowance_percent = (record.l10n_in_standard_allowance * 100) / record.wage if record.wage else 0
+
+    def _inverse_l10n_in_standard_allowance_percent(self):
+        for record in self:
+            record.l10n_in_standard_allowance = (record.l10n_in_standard_allowance_percent * record.wage) / 100
+
+    @api.depends("l10n_in_performance_bonus_percent", "l10n_in_basic_salary")
+    def _compute_l10n_in_performance_bonus(self):
+        for record in self:
+            record.l10n_in_performance_bonus = record.l10n_in_basic_salary * (record.l10n_in_performance_bonus_percent / 100)
+
+    def _inverse_l10n_in_performance_bonus(self):
+        for record in self:
+            record.l10n_in_performance_bonus_percent = (record.l10n_in_performance_bonus * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+
+    @api.depends("l10n_in_leave_travel_allowance_percent", "l10n_in_basic_salary")
+    def _compute_l10n_in_leave_travel_allowance(self):
+        for record in self:
+            record.l10n_in_leave_travel_allowance = record.l10n_in_basic_salary * (record.l10n_in_leave_travel_allowance_percent / 100)
+
+    def _inverse_l10n_in_leave_travel_allowance(self):
+        for record in self:
+            record.l10n_in_leave_travel_allowance_percent = record.l10n_in_leave_days * ((record.l10n_in_leave_allowance * 100) / record.wage if record.wage else 0)
+
+    @api.depends('wage', 'l10n_in_leave_allowance_per_day_percent', 'l10n_in_leave_days')
+    def _compute_leave_allowance(self):
+        for record in self:
+            record.l10n_in_leave_allowance = (record.wage * (record.l10n_in_leave_allowance_per_day_percent/100) * record.l10n_in_leave_days)
+
+    def _inverse_leave_allowance(self):
+        for record in self:
+            if record.l10n_in_basic_salary and record.l10n_in_leave_days:
+                record.l10n_in_leave_allowance_percent = record.l10n_in_leave_allowance * 100 / record.wage if record.wage else 0
+                record.l10n_in_leave_allowance_per_day_percent = (record.l10n_in_leave_allowance * 100 / (record.wage * record.l10n_in_leave_days)) if record.wage else 0
+
+    @api.depends("l10n_in_gratuity", "l10n_in_basic_salary")
+    def _compute_l10n_in_gratuity_percent(self):
+        for record in self:
+            record.l10n_in_gratuity_percent = (record.l10n_in_gratuity * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+
+    def _inverse_l10n_in_gratuity_percent(self):
+        for record in self:
+            record.l10n_in_gratuity = record.l10n_in_basic_salary * (record.l10n_in_gratuity_percent / 100)
+
+    @api.depends("wage", "l10n_in_basic_salary", "l10n_in_house_rent_allowance", "l10n_in_standard_allowance", "l10n_in_performance_bonus", "l10n_in_leave_travel_allowance", "l10n_in_leave_allowance", "l10n_in_gratuity")
+    def _compute_l10n_in_supplementary_allowance(self):
+        for record in self:
+            total_allowance = sum([
+                record.l10n_in_basic_salary,
+                record.l10n_in_house_rent_allowance,
+                record.l10n_in_standard_allowance,
+                record.l10n_in_performance_bonus,
+                record.l10n_in_leave_travel_allowance,
+                record.l10n_in_leave_allowance,
+                record.l10n_in_gratuity
+            ])
+            if record.wage:
+                record.l10n_in_supplementary_allowance = record.wage - total_allowance
+
+    def _inverse_l10n_in_supplementary_allowance(self):
+        for record in self:
+            record.l10n_in_supplementary_allowance_percent = (record.l10n_in_supplementary_allowance * 100) / record.wage if record.wage else 0
diff --git a/l10n_in_hr_payroll_extension/models/res_company.py b/l10n_in_hr_payroll_extension/models/res_company.py
new file mode 100644
index 00000000000..04ccd22ee86
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/models/res_company.py
@@ -0,0 +1,27 @@
+from odoo import fields, models
+
+
+class ResCompany(models.Model):
+    _inherit = 'res.company'
+
+    l10n_in_org_pan_number = fields.Char(string="PAN Number")
+    l10n_in_org_tan_number = fields.Char(string="TAN Number")
+    l10n_in_org_tds_circle = fields.Char(string="TDS Circle/AO Code")
+    l10n_in_org_tax_details = fields.Boolean(string="Organisation Tax Details")
+
+    l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund")
+    l10n_in_employer_identification = fields.Char(string="Employer Identification")
+    l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution")
+    l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution")
+
+    l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax")
+    l10n_in_professional_tax_number = fields.Char(string="Professional Tax Number")
+
+    l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation")
+    l10n_in_esic_ip = fields.Char(string="ESIC IP")
+    l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution")
+    l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution")
+
+    l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund")
+    l10n_in_lwf_employee_contribution = fields.Float(string="Employee Contribution")
+    l10n_in_lwf_employer_contribution = fields.Float(string="Employer Contribution")
diff --git a/l10n_in_hr_payroll_extension/models/res_config_settings.py b/l10n_in_hr_payroll_extension/models/res_config_settings.py
new file mode 100644
index 00000000000..6914f6567ab
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/models/res_config_settings.py
@@ -0,0 +1,36 @@
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+    _inherit = 'res.config.settings'
+
+    l10n_in_org_pan_number = fields.Char(related='company_id.l10n_in_org_pan_number', readonly=False)
+    l10n_in_org_tan_number = fields.Char(related='company_id.l10n_in_org_tan_number', readonly=False)
+    l10n_in_org_tds_circle = fields.Char(related='company_id.l10n_in_org_tds_circle', readonly=False)
+    l10n_in_org_tax_details = fields.Boolean(related='company_id.l10n_in_org_tax_details', readonly=False)
+
+    l10n_in_is_provident_fund = fields.Boolean(related='company_id.l10n_in_is_provident_fund', readonly=False, default=True)
+    l10n_in_employer_identification = fields.Char(related='company_id.l10n_in_employer_identification', readonly=False)
+    l10n_in_pf_employee_contribution = fields.Float(related='company_id.l10n_in_pf_employee_contribution', readonly=False, default=12)
+    l10n_in_pf_employer_contribution = fields.Float(related='company_id.l10n_in_pf_employer_contribution', readonly=False, default=12)
+
+    l10n_in_is_professional_tax = fields.Boolean(related='company_id.l10n_in_is_professional_tax', readonly=False, default=True)
+    l10n_in_professional_tax_number = fields.Char(related='company_id.l10n_in_professional_tax_number', readonly=False)
+
+    l10n_in_is_esic = fields.Boolean(related='company_id.l10n_in_is_esic', readonly=False, default=True)
+    l10n_in_esic_ip = fields.Char(related='company_id.l10n_in_esic_ip', readonly=False)
+    l10n_in_esic_employee_contribution = fields.Float(related='company_id.l10n_in_esic_employee_contribution', readonly=False, default=0.75)
+    l10n_in_esic_employer_contribution = fields.Float(related='company_id.l10n_in_esic_employer_contribution', readonly=False, default=3.25)
+
+    l10n_in_is_lwf = fields.Boolean(related='company_id.l10n_in_is_lwf', readonly=False, default=True)
+    l10n_in_lwf_employee_contribution = fields.Float(related='company_id.l10n_in_lwf_employee_contribution', readonly=False, default=6)
+    l10n_in_lwf_employer_contribution = fields.Float(related='company_id.l10n_in_lwf_employer_contribution', readonly=False, default=12)
+
+    default_l10n_in_basic_salary_percent = fields.Float(string="Basic Salary", help="You can define the % of the salary from company cost to compute the basic salary based on your wages (Including D4).", default_model="hr.contract", default=50)
+    default_l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance", help="You can define 50% for metro city and 40% for non-metro city.", default_model="hr.contract", default=50)
+    default_l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default_model="hr.contract", default=4167)
+    default_l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus", default_model="hr.contract", default=20)
+    default_l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance", default_model="hr.contract", default=20)
+    default_l10n_in_leave_days = fields.Float(string="Leave Days", default_model="hr.contract", default=1)
+    default_l10n_in_gratuity = fields.Float(string="Gratuity", default_model="hr.contract")
+    default_l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance", default_model="hr.contract")
diff --git a/l10n_in_hr_payroll_extension/views/hr_contract_views.xml b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
new file mode 100644
index 00000000000..510307702e2
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
@@ -0,0 +1,146 @@
+<odoo>
+    <record id="hr_contract_form_in_inherit" model="ir.ui.view">
+        <field name="name">hr.contract.form.in.inherit</field>
+        <field name="model">hr.contract</field>
+        <field name="inherit_id" ref="l10n_in_hr_payroll.hr_contract_form_in_inherit"/>
+        <field name="arch" type="xml">
+            <xpath expr="//group[field[@name='l10n_in_driver_salay']]" position="attributes">
+                <attribute name="invisible">1</attribute>
+            </xpath>
+            <xpath expr="//group[field[@name='l10n_in_provident_fund']]" position="attributes">
+                <attribute name="invisible">1</attribute>
+            </xpath>
+            <xpath expr="//group[@name='salary_info']" position="inside">
+                <group name="salary_componensts" string="Salary Components" invisible="country_code != 'IN'">
+                    <label for="l10n_in_basic_salary" />
+                    <div class="o_row mw-80" name="l10n_in_basic_salary">
+                        <field name="l10n_in_basic_salary"/>
+                        <div>₹ / month</div>
+                        <field name="l10n_in_basic_salary_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_house_rent_allowance" />
+                    <div class="o_row mw-80" name="l10n_in_house_rent_allowance">
+                        <field name="l10n_in_house_rent_allowance"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_house_rent_allowance_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_standard_allowance" />
+                    <div class="o_row mw-80" name="l10n_in_standard_allowance">
+                        <field name="l10n_in_standard_allowance"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_standard_allowance_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_performance_bonus" />
+                    <div class="o_row mw-80" name="l10n_in_performance_bonus">
+                        <field name="l10n_in_performance_bonus"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_performance_bonus_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_leave_travel_allowance" />
+                    <div class="o_row mw-80" name="l10n_in_leave_travel_allowance">
+                        <field name="l10n_in_leave_travel_allowance"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_leave_travel_allowance_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_leave_allowance" />
+                    <div class="o_row mw-80" name="l10n_in_leave_allowance">
+                        <field name="l10n_in_leave_allowance"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_leave_allowance_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_leave_days" />
+                    <div class="o_row mw-80" name="l10n_in_leave_days">
+                        <field name="l10n_in_leave_days"/>
+                        <div class="mb-2">days / month</div>
+                    </div>
+
+                    <label for="l10n_in_gratuity" />
+                    <div class="o_row mw-80" name="l10n_in_gratuity">
+                        <field name="l10n_in_gratuity"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_gratuity_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+
+                    <label for="l10n_in_supplementary_allowance" />
+                    <div class="o_row mw-80" name="l10n_in_supplementary_allowance">
+                        <field name="l10n_in_supplementary_allowance"/>
+                        <div class="mb-2">₹ / month</div>
+                        <field name="l10n_in_supplementary_allowance_percent" groups="base.group_no_one"/>
+                        <div groups="base.group_no_one">%</div>
+                    </div>
+                </group>
+                <div id="deductions_container" invisible="country_code != 'IN'">
+                    <group name="tax_deductions" string="Tax Deductions">
+                        <label for="l10n_in_tds"/>
+                        <div class="d-flex gap-3">
+                            <field name="l10n_in_tds"/>
+                            <button name="%(l10n_in_hr_payroll.action_tds_calculation)d" string="TDS Calculator" type="action" class="w-75 btn btn-secondary"/>
+                        </div>
+                    </group>
+                    <group name="other_deductions" string="Other Deductions">
+                        <label for="l10n_in_pf_employee_contribution" string="PF Employee Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_pf_employee_contribution">
+                            <field name="l10n_in_pf_employee_contribution"/>
+                            <div class="mb-2">%</div>
+                        </div>
+
+                        <label for="l10n_in_pf_employer_contribution" string="PF Employer Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_pf_employer_contribution">
+                            <field name="l10n_in_pf_employer_contribution"/>
+                            <div class="mb-2">%</div>
+                        </div>
+
+                        <label for="l10n_in_professional_tax"/>
+                        <div class="o_row mw-60" name="l10n_in_professional_tax">
+                            <field name="l10n_in_professional_tax"/>
+                            <div class="mb-2">₹ / month</div>
+                        </div>
+
+                        <label for="l10n_in_esic_employee_contribution" string="ESIC Employee Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_esic_employee_contribution">
+                            <field name="l10n_in_esic_employee_contribution"/>
+                            <div class="mb-2">%</div>
+                        </div>
+
+                        <label for="l10n_in_esic_employer_contribution" string="ESIC Employer Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_esic_employer_contribution">
+                            <field name="l10n_in_esic_employer_contribution"/>
+                            <div class="mb-2">%</div>
+                        </div>
+
+                        <label for="l10n_in_lwf_employee_contribution" string="LWF Employee Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_lwf_employee_contribution">
+                            <field name="l10n_in_lwf_employee_contribution"/>
+                            <div class="mb-2">₹ / month</div>
+                        </div>
+
+                        <label for="l10n_in_lwf_employer_contribution" string="LWF Employer Contribution" />
+                        <div class="o_row mw-60" name="l10n_in_lwf_employer_contribution">
+                            <field name="l10n_in_lwf_employer_contribution"/>
+                            <div class="mb-2">₹ / month</div>
+                        </div>
+
+                        <label for="l10n_in_other_deduction" />
+                        <div class="o_row mw-60" name="l10n_in_other_deduction">
+                            <field name="l10n_in_other_deduction"/>
+                            <div class="mb-2">₹ / month</div>
+                        </div>
+                    </group>
+                </div>
+            </xpath>
+        </field>
+    </record>
+</odoo>
diff --git a/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
new file mode 100644
index 00000000000..6646c5cb7d3
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
@@ -0,0 +1,163 @@
+<odoo>
+    <record id="res_config_settings_view_form_inherited" model="ir.ui.view">
+        <field name="name">res.config.settings.view.form.inherited.l10n_in_hr_payroll</field>
+        <field name="model">res.config.settings</field>
+        <field name="inherit_id" ref="l10n_in_hr_payroll.res_config_settings_view_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//block[@id='hr_payroll_accountant']" position="inside">
+                <setting string="Organisation Tax Details"
+                    help="PAN and TAN number's details, used to generate the TDS reports"
+                    invisible="company_country_code != 'IN'">
+                    <field name="l10n_in_org_tax_details" />
+                    <group class="mt16" invisible="not l10n_in_org_tax_details">
+                        <field name="l10n_in_org_pan_number" />
+                        <field name="l10n_in_org_tan_number" />
+                        <field name="l10n_in_org_tds_circle" />
+                    </group>
+                </setting>
+            </xpath>
+            <xpath expr="//div[@id='l10n_in_hr_payroll']" position="after">
+                <div class="row o_settings_container" invisible="company_country_code != 'IN'">
+                    <div class="col-lg-6 col-12 o_setting_box" id="epf_section">
+                        <div class="o_setting_left_pane">
+                            <field name="l10n_in_is_provident_fund" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="l10n_in_is_provident_fund"
+                                string="Employee's Provident Fund" />
+                            <group class="mt16" invisible="not l10n_in_is_provident_fund">
+                                <field name="l10n_in_employer_identification" />
+
+                                <label for="l10n_in_pf_employee_contribution"/>
+                                <div class="o_row">
+                                    <field name="l10n_in_pf_employee_contribution" />
+                                    <div>%</div>
+                                </div>
+
+                                <label for="l10n_in_pf_employer_contribution"/>
+                                <div class="o_row">
+                                    <field name="l10n_in_pf_employer_contribution" />
+                                    <div>%</div>
+                                </div>
+                            </group>
+                        </div>
+                    </div>
+                    <div class="col-lg-6 col-12 o_setting_box" id="esic_section">
+                        <div class="o_setting_left_pane">
+                            <field name="l10n_in_is_esic" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="l10n_in_is_esic"
+                                string="Employee's State Insurance Corporation" />
+                            <group class="mt16" invisible="not l10n_in_is_esic">
+                                <field name="l10n_in_esic_ip" />
+
+                                <label for="l10n_in_esic_employee_contribution"/>
+                                <div class="o_row">
+                                    <field name="l10n_in_esic_employee_contribution" />
+                                    <div>%</div>
+                                </div>
+
+                                <label for="l10n_in_esic_employer_contribution"/>
+                                <div class="o_row">
+                                    <field name="l10n_in_esic_employer_contribution" />
+                                    <div>%</div>
+                                </div>
+                            </group>
+                        </div>
+                    </div>
+                </div>
+                <div class="row o_settings_container" invisible="company_country_code != 'IN'">
+                    <div class="col-lg-6 col-12 o_setting_box" id="pt_section">
+                        <div class="o_setting_left_pane">
+                            <field name="l10n_in_is_professional_tax" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="l10n_in_is_professional_tax" string="Professional Tax" />
+                            <group class="mt16" invisible="not l10n_in_is_professional_tax">
+                                <field name="l10n_in_professional_tax_number" />
+                            </group>
+                        </div>
+                    </div>
+                    <div class="col-lg-6 col-12 o_setting_box" id="lwf_section">
+                        <div class="o_setting_left_pane">
+                            <field name="l10n_in_is_lwf" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="l10n_in_is_lwf" string="Labour Welfare Fund" />
+                            <group class="mt16" invisible="not l10n_in_is_lwf">
+                                <label for="l10n_in_lwf_employee_contribution"/>
+                                <div class="o_row mw-80">
+                                    <field name="l10n_in_lwf_employee_contribution" />
+                                    <div>₹</div>
+                                </div>
+
+                                <label for="l10n_in_lwf_employer_contribution"/>
+                                <div class="o_row mw-80">
+                                    <field name="l10n_in_lwf_employer_contribution" />
+                                    <div>₹</div>
+                                </div>
+                            </group>
+                        </div>
+                    </div>
+                </div>
+                <div class="row o_settings_container" id="salary_components_section" invisible="company_country_code != 'IN'">
+                    <div class="col-lg-8 col-12 o_setting_box">
+                        <div class="o_setting_right_pane">
+                            <span class="fw-bold fs-4">Salary Components</span>
+                            <group name="l10n_in_salary_components" class="mt16">
+                                <label for="default_l10n_in_basic_salary_percent"/>
+                                <div class="o_row mw-80" name="default_l10n_in_basic_salary_percent">
+                                    <field name="default_l10n_in_basic_salary_percent" nolabel="1"/>
+                                    <div>%</div>
+                                </div>
+
+                                <label for="default_l10n_in_house_rent_allowance_percent" />
+                                <div class="o_row mw-80" name="default_l10n_in_house_rent_allowance_percent">
+                                    <field name="default_l10n_in_house_rent_allowance_percent" nolabel="1"/>
+                                    <div class="mb-2">%</div>
+                                </div>
+
+                                <label for="default_l10n_in_standard_allowance" />
+                                <div class="o_row mw-80" name="default_l10n_in_standard_allowance">
+                                    <field name="default_l10n_in_standard_allowance" nolabel="1"/>
+                                    <div class="mb-2">%</div>
+                                </div>
+
+                                <label for="default_l10n_in_performance_bonus_percent" />
+                                <div class="o_row mw-80" name="default_l10n_in_performance_bonus_percent">
+                                    <field name="default_l10n_in_performance_bonus_percent" nolabel="1"/>
+                                    <div class="mb-2">%</div>
+                                </div>
+
+                                <label for="default_l10n_in_leave_travel_allowance_percent" />
+                                <div class="o_row mw-80" name="default_l10n_in_leave_travel_allowance_percent">
+                                    <field name="default_l10n_in_leave_travel_allowance_percent" nolabel="1"/>
+                                    <div class="mb-2">₹ / month</div>
+                                </div>
+
+                                <label for="default_l10n_in_leave_days" />
+                                <div class="o_row mw-80" name="default_l10n_in_leave_days">
+                                    <field name="default_l10n_in_leave_days" nolabel="1"/>
+                                    <div class="mb-2">days / month</div>
+                                </div>
+
+                                <label for="default_l10n_in_gratuity" />
+                                <div class="o_row mw-80" name="default_l10n_in_gratuity">
+                                    <field name="default_l10n_in_gratuity" nolabel="1"/>
+                                    <div class="mb-2">₹ / month</div>
+                                </div>
+
+                                <label for="default_l10n_in_supplementary_allowance" />
+                                <div class="o_row mw-80" name="default_l10n_in_supplementary_allowance">
+                                    <field name="default_l10n_in_supplementary_allowance" nolabel="1"/>
+                                    <div class="mb-2">₹ / month</div>
+                                </div>
+                            </group>
+                        </div>
+                    </div>
+                </div>
+            </xpath>
+        </field>
+    </record>
+</odoo>

From b405a1996ecb84d5161c745cb731253d782aa9a1 Mon Sep 17 00:00:00 2001
From: jmra-odoo <jmra@odoo.com>
Date: Thu, 20 Mar 2025 14:11:39 +0530
Subject: [PATCH 2/3] [IMP] l10n_in_hr_payroll_extension:  test cases and
 monetary fields

With This Commit
========================================================

- Added Test Cases for salary component calculations
- Modified some fields to make them monetary
- Minor changes in views according above changes
---
 .gitignore                                    |  1 +
 .../models/hr_contract.py                     | 36 +++++++++----------
 .../models/res_company.py                     | 15 +-------
 .../models/res_config_settings.py             | 24 +++++++------
 .../tests/__init__.py                         |  1 +
 .../tests/test_hr_contract.py                 | 29 +++++++++++++++
 .../views/hr_contract_views.xml               | 24 ++++++-------
 .../views/res_config_settings_views.xml       | 26 +++++++-------
 8 files changed, 88 insertions(+), 68 deletions(-)
 create mode 100644 l10n_in_hr_payroll_extension/tests/__init__.py
 create mode 100644 l10n_in_hr_payroll_extension/tests/test_hr_contract.py

diff --git a/.gitignore b/.gitignore
index b6e47617de1..2ab793ba540 100644
--- a/.gitignore
+++ b/.gitignore
@@ -127,3 +127,4 @@ dmypy.json
 
 # Pyre type checker
 .pyre/
+.vscode
diff --git a/l10n_in_hr_payroll_extension/models/hr_contract.py b/l10n_in_hr_payroll_extension/models/hr_contract.py
index 025d95d27b1..32c1302cf62 100644
--- a/l10n_in_hr_payroll_extension/models/hr_contract.py
+++ b/l10n_in_hr_payroll_extension/models/hr_contract.py
@@ -4,15 +4,15 @@
 class HrContract(models.Model):
     _inherit = 'hr.contract'
 
-    l10n_in_basic_salary = fields.Float(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary")
-    l10n_in_house_rent_allowance = fields.Float(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance")
-    l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default=4167)
-    l10n_in_performance_bonus = fields.Float(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus")
-    l10n_in_leave_travel_allowance = fields.Float(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance")
-    l10n_in_leave_allowance = fields.Float(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance")
+    l10n_in_basic_salary = fields.Monetary(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary", currency_field="currency_id")
+    l10n_in_house_rent_allowance = fields.Monetary(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance", currency_field="currency_id")
+    l10n_in_standard_allowance = fields.Monetary(string="Standard Allowance", default=4167, currency_field="currency_id")
+    l10n_in_performance_bonus = fields.Monetary(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus", currency_field="currency_id")
+    l10n_in_leave_travel_allowance = fields.Monetary(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance", currency_field="currency_id")
+    l10n_in_leave_allowance = fields.Monetary(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance", currency_field="currency_id")
     l10n_in_leave_days = fields.Float(string="Leave Days", default=1)
-    l10n_in_gratuity = fields.Float(string="Gratuity", default=0)
-    l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", default=0)
+    l10n_in_gratuity = fields.Monetary(string="Gratuity", currency_field="currency_id")
+    l10n_in_supplementary_allowance = fields.Monetary(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", currency_field="currency_id")
 
     l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", help="basic salary percentage of wage", default=50)
     l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance Percentage", help="this is the percentage of basic salary", default=50)
@@ -24,14 +24,14 @@ class HrContract(models.Model):
     l10n_in_gratuity_percent = fields.Float(string="Gratuity Percentage", compute="_compute_l10n_in_gratuity_percent", inverse="_inverse_l10n_in_gratuity_percent")
     l10n_in_supplementary_allowance_percent = fields.Float(string="Supplementary Allowance Percentage")
 
-    l10n_in_pf_employee_contribution = fields.Float(related="company_id.l10n_in_pf_employee_contribution", readonly=False)
-    l10n_in_pf_employer_contribution = fields.Float(related="company_id.l10n_in_pf_employer_contribution", readonly=False)
-    l10n_in_professional_tax = fields.Float(string="Professional Tax", default=200)
-    l10n_in_esic_employee_contribution = fields.Float(related="company_id.l10n_in_esic_employee_contribution", readonly=False)
-    l10n_in_esic_employer_contribution = fields.Float(related="company_id.l10n_in_esic_employer_contribution", readonly=False)
-    l10n_in_lwf_employee_contribution = fields.Float(related="company_id.l10n_in_lwf_employee_contribution", readonly=False)
-    l10n_in_lwf_employer_contribution = fields.Float(related="company_id.l10n_in_lwf_employer_contribution", readonly=False)
-    l10n_in_other_deduction = fields.Float(string="Other Deduction")
+    l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default=12)
+    l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default=12)
+    l10n_in_professional_tax = fields.Monetary(string="Professional Tax", default=200)
+    l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default=0.75)
+    l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default=3.25)
+    l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default=6)
+    l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default=12)
+    l10n_in_other_deduction = fields.Monetary(string="Other Deduction", currency_field="currency_id")
 
     @api.depends("l10n_in_basic_salary_percent", "wage")
     def _compute_l10n_in_basic_salary(self):
@@ -76,12 +76,12 @@ def _compute_l10n_in_leave_travel_allowance(self):
 
     def _inverse_l10n_in_leave_travel_allowance(self):
         for record in self:
-            record.l10n_in_leave_travel_allowance_percent = record.l10n_in_leave_days * ((record.l10n_in_leave_allowance * 100) / record.wage if record.wage else 0)
+            record.l10n_in_leave_travel_allowance_percent = (record.l10n_in_leave_travel_allowance * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
 
     @api.depends('wage', 'l10n_in_leave_allowance_per_day_percent', 'l10n_in_leave_days')
     def _compute_leave_allowance(self):
         for record in self:
-            record.l10n_in_leave_allowance = (record.wage * (record.l10n_in_leave_allowance_per_day_percent/100) * record.l10n_in_leave_days)
+            record.l10n_in_leave_allowance = (record.wage * (record.l10n_in_leave_allowance_per_day_percent / 100) * record.l10n_in_leave_days)
 
     def _inverse_leave_allowance(self):
         for record in self:
diff --git a/l10n_in_hr_payroll_extension/models/res_company.py b/l10n_in_hr_payroll_extension/models/res_company.py
index 04ccd22ee86..03ce8e60df5 100644
--- a/l10n_in_hr_payroll_extension/models/res_company.py
+++ b/l10n_in_hr_payroll_extension/models/res_company.py
@@ -4,24 +4,11 @@
 class ResCompany(models.Model):
     _inherit = 'res.company'
 
+    l10n_in_org_tax_details = fields.Boolean(string="Organisation Tax Details")
     l10n_in_org_pan_number = fields.Char(string="PAN Number")
     l10n_in_org_tan_number = fields.Char(string="TAN Number")
     l10n_in_org_tds_circle = fields.Char(string="TDS Circle/AO Code")
-    l10n_in_org_tax_details = fields.Boolean(string="Organisation Tax Details")
 
-    l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund")
     l10n_in_employer_identification = fields.Char(string="Employer Identification")
-    l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution")
-    l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution")
-
-    l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax")
     l10n_in_professional_tax_number = fields.Char(string="Professional Tax Number")
-
-    l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation")
     l10n_in_esic_ip = fields.Char(string="ESIC IP")
-    l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution")
-    l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution")
-
-    l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund")
-    l10n_in_lwf_employee_contribution = fields.Float(string="Employee Contribution")
-    l10n_in_lwf_employer_contribution = fields.Float(string="Employer Contribution")
diff --git a/l10n_in_hr_payroll_extension/models/res_config_settings.py b/l10n_in_hr_payroll_extension/models/res_config_settings.py
index 6914f6567ab..ce65fd40f8a 100644
--- a/l10n_in_hr_payroll_extension/models/res_config_settings.py
+++ b/l10n_in_hr_payroll_extension/models/res_config_settings.py
@@ -4,27 +4,29 @@
 class ResConfigSettings(models.TransientModel):
     _inherit = 'res.config.settings'
 
+    currency_id = fields.Many2one("res.currency", default=lambda self: self.env.company.currency_id)
+
+    l10n_in_org_tax_details = fields.Boolean(related='company_id.l10n_in_org_tax_details', readonly=False)
     l10n_in_org_pan_number = fields.Char(related='company_id.l10n_in_org_pan_number', readonly=False)
     l10n_in_org_tan_number = fields.Char(related='company_id.l10n_in_org_tan_number', readonly=False)
     l10n_in_org_tds_circle = fields.Char(related='company_id.l10n_in_org_tds_circle', readonly=False)
-    l10n_in_org_tax_details = fields.Boolean(related='company_id.l10n_in_org_tax_details', readonly=False)
 
-    l10n_in_is_provident_fund = fields.Boolean(related='company_id.l10n_in_is_provident_fund', readonly=False, default=True)
+    l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund", default=True)
     l10n_in_employer_identification = fields.Char(related='company_id.l10n_in_employer_identification', readonly=False)
-    l10n_in_pf_employee_contribution = fields.Float(related='company_id.l10n_in_pf_employee_contribution', readonly=False, default=12)
-    l10n_in_pf_employer_contribution = fields.Float(related='company_id.l10n_in_pf_employer_contribution', readonly=False, default=12)
+    default_l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=12)
+    default_l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=12)
 
-    l10n_in_is_professional_tax = fields.Boolean(related='company_id.l10n_in_is_professional_tax', readonly=False, default=True)
+    l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax", default=True)
     l10n_in_professional_tax_number = fields.Char(related='company_id.l10n_in_professional_tax_number', readonly=False)
 
-    l10n_in_is_esic = fields.Boolean(related='company_id.l10n_in_is_esic', readonly=False, default=True)
+    l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation", default=True)
     l10n_in_esic_ip = fields.Char(related='company_id.l10n_in_esic_ip', readonly=False)
-    l10n_in_esic_employee_contribution = fields.Float(related='company_id.l10n_in_esic_employee_contribution', readonly=False, default=0.75)
-    l10n_in_esic_employer_contribution = fields.Float(related='company_id.l10n_in_esic_employer_contribution', readonly=False, default=3.25)
+    default_l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=0.75)
+    default_l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=3.25)
 
-    l10n_in_is_lwf = fields.Boolean(related='company_id.l10n_in_is_lwf', readonly=False, default=True)
-    l10n_in_lwf_employee_contribution = fields.Float(related='company_id.l10n_in_lwf_employee_contribution', readonly=False, default=6)
-    l10n_in_lwf_employer_contribution = fields.Float(related='company_id.l10n_in_lwf_employer_contribution', readonly=False, default=12)
+    l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund", default=True)
+    default_l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default_model="hr.contract", default=6)
+    default_l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default_model="hr.contract", default=12)
 
     default_l10n_in_basic_salary_percent = fields.Float(string="Basic Salary", help="You can define the % of the salary from company cost to compute the basic salary based on your wages (Including D4).", default_model="hr.contract", default=50)
     default_l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance", help="You can define 50% for metro city and 40% for non-metro city.", default_model="hr.contract", default=50)
diff --git a/l10n_in_hr_payroll_extension/tests/__init__.py b/l10n_in_hr_payroll_extension/tests/__init__.py
new file mode 100644
index 00000000000..0894c057839
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_hr_contract
diff --git a/l10n_in_hr_payroll_extension/tests/test_hr_contract.py b/l10n_in_hr_payroll_extension/tests/test_hr_contract.py
new file mode 100644
index 00000000000..6c756030053
--- /dev/null
+++ b/l10n_in_hr_payroll_extension/tests/test_hr_contract.py
@@ -0,0 +1,29 @@
+from odoo.tests.common import TransactionCase
+from odoo.tests import tagged
+
+
+@tagged('post_install', '-at_install')
+class TestHrContract(TransactionCase):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+
+        cls.contract = cls.env['hr.contract'].create({
+            'name': "Test Contract",
+            'wage': 100000,
+            'l10n_in_basic_salary_percent': 50,
+            'l10n_in_house_rent_allowance_percent': 50,
+            'l10n_in_standard_allowance': 4167,
+            'l10n_in_performance_bonus_percent': 20,
+            'l10n_in_leave_travel_allowance_percent': 20,
+            'l10n_in_gratuity': 250,
+        })
+
+    def test_salary_component_amounts(self):
+        self.assertEqual(self.contract.l10n_in_basic_salary, 50000, "50% of 100000 should be 50000")
+        self.assertEqual(self.contract.l10n_in_house_rent_allowance, 25000, "50% of 50000(Basic Salary) should be 25000")
+        self.assertEqual(self.contract.l10n_in_standard_allowance_percent, 4.167, "4167 is a 4.17% of 100000(Wage)")
+        self.assertEqual(self.contract.l10n_in_performance_bonus, 10000, "20% of 50000(Basic Salary) should be 10000")
+        self.assertEqual(self.contract.l10n_in_leave_travel_allowance, 10000, "20% of 50000(Basic Salary) should be 10000")
+        self.assertEqual(self.contract.l10n_in_gratuity_percent, 0.50, "250 is a 0.50% of 50000(Basic Salary)")
+        self.assertEqual(self.contract.l10n_in_supplementary_allowance, 583, "supplementary should be remaining amount from wage")
diff --git a/l10n_in_hr_payroll_extension/views/hr_contract_views.xml b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
index 510307702e2..44c2540f827 100644
--- a/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
+++ b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
@@ -15,7 +15,7 @@
                     <label for="l10n_in_basic_salary" />
                     <div class="o_row mw-80" name="l10n_in_basic_salary">
                         <field name="l10n_in_basic_salary"/>
-                        <div>₹ / month</div>
+                        <div> / month</div>
                         <field name="l10n_in_basic_salary_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -23,7 +23,7 @@
                     <label for="l10n_in_house_rent_allowance" />
                     <div class="o_row mw-80" name="l10n_in_house_rent_allowance">
                         <field name="l10n_in_house_rent_allowance"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_house_rent_allowance_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -31,7 +31,7 @@
                     <label for="l10n_in_standard_allowance" />
                     <div class="o_row mw-80" name="l10n_in_standard_allowance">
                         <field name="l10n_in_standard_allowance"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_standard_allowance_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -39,7 +39,7 @@
                     <label for="l10n_in_performance_bonus" />
                     <div class="o_row mw-80" name="l10n_in_performance_bonus">
                         <field name="l10n_in_performance_bonus"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_performance_bonus_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -47,7 +47,7 @@
                     <label for="l10n_in_leave_travel_allowance" />
                     <div class="o_row mw-80" name="l10n_in_leave_travel_allowance">
                         <field name="l10n_in_leave_travel_allowance"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_leave_travel_allowance_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -55,7 +55,7 @@
                     <label for="l10n_in_leave_allowance" />
                     <div class="o_row mw-80" name="l10n_in_leave_allowance">
                         <field name="l10n_in_leave_allowance"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_leave_allowance_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -69,7 +69,7 @@
                     <label for="l10n_in_gratuity" />
                     <div class="o_row mw-80" name="l10n_in_gratuity">
                         <field name="l10n_in_gratuity"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_gratuity_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -77,7 +77,7 @@
                     <label for="l10n_in_supplementary_allowance" />
                     <div class="o_row mw-80" name="l10n_in_supplementary_allowance">
                         <field name="l10n_in_supplementary_allowance"/>
-                        <div class="mb-2">₹ / month</div>
+                        <div class="mb-2"> / month</div>
                         <field name="l10n_in_supplementary_allowance_percent" groups="base.group_no_one"/>
                         <div groups="base.group_no_one">%</div>
                     </div>
@@ -106,7 +106,7 @@
                         <label for="l10n_in_professional_tax"/>
                         <div class="o_row mw-60" name="l10n_in_professional_tax">
                             <field name="l10n_in_professional_tax"/>
-                            <div class="mb-2">₹ / month</div>
+                            <div class="mb-2"> / month</div>
                         </div>
 
                         <label for="l10n_in_esic_employee_contribution" string="ESIC Employee Contribution" />
@@ -124,19 +124,19 @@
                         <label for="l10n_in_lwf_employee_contribution" string="LWF Employee Contribution" />
                         <div class="o_row mw-60" name="l10n_in_lwf_employee_contribution">
                             <field name="l10n_in_lwf_employee_contribution"/>
-                            <div class="mb-2">₹ / month</div>
+                            <div class="mb-2"> / month</div>
                         </div>
 
                         <label for="l10n_in_lwf_employer_contribution" string="LWF Employer Contribution" />
                         <div class="o_row mw-60" name="l10n_in_lwf_employer_contribution">
                             <field name="l10n_in_lwf_employer_contribution"/>
-                            <div class="mb-2">₹ / month</div>
+                            <div class="mb-2"> / month</div>
                         </div>
 
                         <label for="l10n_in_other_deduction" />
                         <div class="o_row mw-60" name="l10n_in_other_deduction">
                             <field name="l10n_in_other_deduction"/>
-                            <div class="mb-2">₹ / month</div>
+                            <div class="mb-2"> / month</div>
                         </div>
                     </group>
                 </div>
diff --git a/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
index 6646c5cb7d3..1f5212021f6 100644
--- a/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
+++ b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
@@ -28,15 +28,15 @@
                             <group class="mt16" invisible="not l10n_in_is_provident_fund">
                                 <field name="l10n_in_employer_identification" />
 
-                                <label for="l10n_in_pf_employee_contribution"/>
+                                <label for="default_l10n_in_pf_employee_contribution"/>
                                 <div class="o_row">
-                                    <field name="l10n_in_pf_employee_contribution" />
+                                    <field name="default_l10n_in_pf_employee_contribution" />
                                     <div>%</div>
                                 </div>
 
-                                <label for="l10n_in_pf_employer_contribution"/>
+                                <label for="default_l10n_in_pf_employer_contribution"/>
                                 <div class="o_row">
-                                    <field name="l10n_in_pf_employer_contribution" />
+                                    <field name="default_l10n_in_pf_employer_contribution" />
                                     <div>%</div>
                                 </div>
                             </group>
@@ -52,15 +52,15 @@
                             <group class="mt16" invisible="not l10n_in_is_esic">
                                 <field name="l10n_in_esic_ip" />
 
-                                <label for="l10n_in_esic_employee_contribution"/>
+                                <label for="default_l10n_in_esic_employee_contribution"/>
                                 <div class="o_row">
-                                    <field name="l10n_in_esic_employee_contribution" />
+                                    <field name="default_l10n_in_esic_employee_contribution" />
                                     <div>%</div>
                                 </div>
 
-                                <label for="l10n_in_esic_employer_contribution"/>
+                                <label for="default_l10n_in_esic_employer_contribution"/>
                                 <div class="o_row">
-                                    <field name="l10n_in_esic_employer_contribution" />
+                                    <field name="default_l10n_in_esic_employer_contribution" />
                                     <div>%</div>
                                 </div>
                             </group>
@@ -86,15 +86,15 @@
                         <div class="o_setting_right_pane">
                             <label for="l10n_in_is_lwf" string="Labour Welfare Fund" />
                             <group class="mt16" invisible="not l10n_in_is_lwf">
-                                <label for="l10n_in_lwf_employee_contribution"/>
+                                <label for="default_l10n_in_lwf_employee_contribution"/>
                                 <div class="o_row mw-80">
-                                    <field name="l10n_in_lwf_employee_contribution" />
+                                    <field name="default_l10n_in_lwf_employee_contribution" />
                                     <div>₹</div>
                                 </div>
 
-                                <label for="l10n_in_lwf_employer_contribution"/>
+                                <label for="default_l10n_in_lwf_employer_contribution"/>
                                 <div class="o_row mw-80">
-                                    <field name="l10n_in_lwf_employer_contribution" />
+                                    <field name="default_l10n_in_lwf_employer_contribution" />
                                     <div>₹</div>
                                 </div>
                             </group>
@@ -133,7 +133,7 @@
                                 <label for="default_l10n_in_leave_travel_allowance_percent" />
                                 <div class="o_row mw-80" name="default_l10n_in_leave_travel_allowance_percent">
                                     <field name="default_l10n_in_leave_travel_allowance_percent" nolabel="1"/>
-                                    <div class="mb-2">₹ / month</div>
+                                    <div class="mb-2">%</div>
                                 </div>
 
                                 <label for="default_l10n_in_leave_days" />

From 69d698a23834d54702d94f0772fa86d138a5d08d Mon Sep 17 00:00:00 2001
From: jmra-odoo <jmra@odoo.com>
Date: Fri, 11 Apr 2025 16:58:56 +0530
Subject: [PATCH 3/3] [IMP] l10n_in_hr_payroll_extension:  company dependant,
 formatting

With this commit
====================================================

- Made salary structure company dependent
- Added percentage widget to required fields & code formatting
---
 .../models/hr_contract.py                     | 100 ++++++------
 .../models/res_company.py                     |  21 ++-
 .../models/res_config_settings.py             |  34 ++---
 .../views/hr_contract_views.xml               |  56 +++----
 .../views/res_config_settings_views.xml       | 143 +++++++++---------
 5 files changed, 179 insertions(+), 175 deletions(-)

diff --git a/l10n_in_hr_payroll_extension/models/hr_contract.py b/l10n_in_hr_payroll_extension/models/hr_contract.py
index 32c1302cf62..9eebf2c1419 100644
--- a/l10n_in_hr_payroll_extension/models/hr_contract.py
+++ b/l10n_in_hr_payroll_extension/models/hr_contract.py
@@ -6,19 +6,19 @@ class HrContract(models.Model):
 
     l10n_in_basic_salary = fields.Monetary(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary", currency_field="currency_id")
     l10n_in_house_rent_allowance = fields.Monetary(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance", currency_field="currency_id")
-    l10n_in_standard_allowance = fields.Monetary(string="Standard Allowance", default=4167, currency_field="currency_id")
+    l10n_in_standard_allowance = fields.Monetary(string="Standard Allowance", default=lambda self: self.env.company.l10n_in_standard_allowance, currency_field="currency_id")
     l10n_in_performance_bonus = fields.Monetary(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus", currency_field="currency_id")
     l10n_in_leave_travel_allowance = fields.Monetary(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance", currency_field="currency_id")
     l10n_in_leave_allowance = fields.Monetary(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance", currency_field="currency_id")
-    l10n_in_leave_days = fields.Float(string="Leave Days", default=1)
-    l10n_in_gratuity = fields.Monetary(string="Gratuity", currency_field="currency_id")
-    l10n_in_supplementary_allowance = fields.Monetary(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", currency_field="currency_id")
+    l10n_in_leave_days = fields.Float(string="Leave Days", default=lambda self: self.env.company.l10n_in_leave_days)
+    l10n_in_gratuity = fields.Monetary(string="Gratuity", currency_field="currency_id", default=lambda self: self.env.company.l10n_in_gratuity)
+    l10n_in_supplementary_allowance = fields.Monetary(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", currency_field="currency_id", default=lambda self: self.env.company.l10n_in_supplementary_allowance)
 
-    l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", help="basic salary percentage of wage", default=50)
-    l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance Percentage", help="this is the percentage of basic salary", default=50)
+    l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", help="basic salary percentage of wage", default=lambda self: self.env.company.l10n_in_basic_salary_percent)
+    l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance Percentage", help="this is the percentage of basic salary", default=lambda self: self.env.company.l10n_in_house_rent_allowance_percent)
     l10n_in_standard_allowance_percent = fields.Float(string="Standard Allowance Percentage", compute="_compute_l10n_in_standard_allowance_percent", inverse="_inverse_l10n_in_standard_allowance_percent")
-    l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus Percentage", default=20)
-    l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance Percentage", default=20)
+    l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus Percentage", default=lambda self: self.env.company.l10n_in_performance_bonus_percent)
+    l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance Percentage", default=lambda self: self.env.company.l10n_in_leave_travel_allowance_percent)
     l10n_in_leave_allowance_per_day_percent = fields.Float(string="Leave allowance per day percentage")
     l10n_in_leave_allowance_percent = fields.Float(string="Leave Allowance Percentage")
     l10n_in_gratuity_percent = fields.Float(string="Gratuity Percentage", compute="_compute_l10n_in_gratuity_percent", inverse="_inverse_l10n_in_gratuity_percent")
@@ -35,84 +35,84 @@ class HrContract(models.Model):
 
     @api.depends("l10n_in_basic_salary_percent", "wage")
     def _compute_l10n_in_basic_salary(self):
-        for record in self:
-            record.l10n_in_basic_salary = record.wage * (record.l10n_in_basic_salary_percent / 100)
+        for contract in self:
+            contract.l10n_in_basic_salary = contract.wage * contract.l10n_in_basic_salary_percent
 
     def _inverse_l10n_in_basic_salary(self):
-        for record in self:
-            record.l10n_in_basic_salary_percent = (record.l10n_in_basic_salary * 100) / record.wage if record.wage else 0
+        for contract in self:
+            contract.l10n_in_basic_salary_percent = contract.l10n_in_basic_salary / contract.wage if contract.wage else 0
 
     @api.depends("l10n_in_basic_salary", "l10n_in_house_rent_allowance_percent")
     def _compute_l10n_in_house_rent_allowance(self):
-        for record in self:
-            record.l10n_in_house_rent_allowance = record.l10n_in_basic_salary * (record.l10n_in_house_rent_allowance_percent / 100)
+        for contract in self:
+            contract.l10n_in_house_rent_allowance = contract.l10n_in_basic_salary * contract.l10n_in_house_rent_allowance_percent
 
     def _inverse_l10n_in_house_rent_allowance(self):
-        for record in self:
-            record.l10n_in_house_rent_allowance_percent = (record.l10n_in_house_rent_allowance * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+        for contract in self:
+            contract.l10n_in_house_rent_allowance_percent = contract.l10n_in_house_rent_allowance / contract.l10n_in_basic_salary if contract.l10n_in_basic_salary else 0
 
     @api.depends("l10n_in_standard_allowance", "wage")
     def _compute_l10n_in_standard_allowance_percent(self):
-        for record in self:
-            record.l10n_in_standard_allowance_percent = (record.l10n_in_standard_allowance * 100) / record.wage if record.wage else 0
+        for contract in self:
+            contract.l10n_in_standard_allowance_percent = contract.l10n_in_standard_allowance / contract.wage if contract.wage else 0
 
     def _inverse_l10n_in_standard_allowance_percent(self):
-        for record in self:
-            record.l10n_in_standard_allowance = (record.l10n_in_standard_allowance_percent * record.wage) / 100
+        for contract in self:
+            contract.l10n_in_standard_allowance = contract.l10n_in_standard_allowance_percent * contract.wage
 
     @api.depends("l10n_in_performance_bonus_percent", "l10n_in_basic_salary")
     def _compute_l10n_in_performance_bonus(self):
-        for record in self:
-            record.l10n_in_performance_bonus = record.l10n_in_basic_salary * (record.l10n_in_performance_bonus_percent / 100)
+        for contract in self:
+            contract.l10n_in_performance_bonus = contract.l10n_in_basic_salary * contract.l10n_in_performance_bonus_percent
 
     def _inverse_l10n_in_performance_bonus(self):
-        for record in self:
-            record.l10n_in_performance_bonus_percent = (record.l10n_in_performance_bonus * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+        for contract in self:
+            contract.l10n_in_performance_bonus_percent = contract.l10n_in_performance_bonus / contract.l10n_in_basic_salary if contract.l10n_in_basic_salary else 0
 
     @api.depends("l10n_in_leave_travel_allowance_percent", "l10n_in_basic_salary")
     def _compute_l10n_in_leave_travel_allowance(self):
-        for record in self:
-            record.l10n_in_leave_travel_allowance = record.l10n_in_basic_salary * (record.l10n_in_leave_travel_allowance_percent / 100)
+        for contract in self:
+            contract.l10n_in_leave_travel_allowance = contract.l10n_in_basic_salary * contract.l10n_in_leave_travel_allowance_percent
 
     def _inverse_l10n_in_leave_travel_allowance(self):
-        for record in self:
-            record.l10n_in_leave_travel_allowance_percent = (record.l10n_in_leave_travel_allowance * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+        for contract in self:
+            contract.l10n_in_leave_travel_allowance_percent = contract.l10n_in_leave_travel_allowance / contract.l10n_in_basic_salary if contract.l10n_in_basic_salary else 0
 
     @api.depends('wage', 'l10n_in_leave_allowance_per_day_percent', 'l10n_in_leave_days')
     def _compute_leave_allowance(self):
-        for record in self:
-            record.l10n_in_leave_allowance = (record.wage * (record.l10n_in_leave_allowance_per_day_percent / 100) * record.l10n_in_leave_days)
+        for contract in self:
+            contract.l10n_in_leave_allowance = contract.wage * contract.l10n_in_leave_allowance_per_day_percent * contract.l10n_in_leave_days
 
     def _inverse_leave_allowance(self):
-        for record in self:
-            if record.l10n_in_basic_salary and record.l10n_in_leave_days:
-                record.l10n_in_leave_allowance_percent = record.l10n_in_leave_allowance * 100 / record.wage if record.wage else 0
-                record.l10n_in_leave_allowance_per_day_percent = (record.l10n_in_leave_allowance * 100 / (record.wage * record.l10n_in_leave_days)) if record.wage else 0
+        for contract in self:
+            if contract.l10n_in_basic_salary and contract.l10n_in_leave_days:
+                contract.l10n_in_leave_allowance_percent = contract.l10n_in_leave_allowance / contract.wage if contract.wage else 0
+                contract.l10n_in_leave_allowance_per_day_percent = contract.l10n_in_leave_allowance / (contract.wage * contract.l10n_in_leave_days) if contract.wage else 0
 
     @api.depends("l10n_in_gratuity", "l10n_in_basic_salary")
     def _compute_l10n_in_gratuity_percent(self):
-        for record in self:
-            record.l10n_in_gratuity_percent = (record.l10n_in_gratuity * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
+        for contract in self:
+            contract.l10n_in_gratuity_percent = contract.l10n_in_gratuity / contract.l10n_in_basic_salary if contract.l10n_in_basic_salary else 0
 
     def _inverse_l10n_in_gratuity_percent(self):
-        for record in self:
-            record.l10n_in_gratuity = record.l10n_in_basic_salary * (record.l10n_in_gratuity_percent / 100)
+        for contract in self:
+            contract.l10n_in_gratuity = contract.l10n_in_basic_salary * contract.l10n_in_gratuity_percent
 
     @api.depends("wage", "l10n_in_basic_salary", "l10n_in_house_rent_allowance", "l10n_in_standard_allowance", "l10n_in_performance_bonus", "l10n_in_leave_travel_allowance", "l10n_in_leave_allowance", "l10n_in_gratuity")
     def _compute_l10n_in_supplementary_allowance(self):
-        for record in self:
+        for contract in self:
             total_allowance = sum([
-                record.l10n_in_basic_salary,
-                record.l10n_in_house_rent_allowance,
-                record.l10n_in_standard_allowance,
-                record.l10n_in_performance_bonus,
-                record.l10n_in_leave_travel_allowance,
-                record.l10n_in_leave_allowance,
-                record.l10n_in_gratuity
+                contract.l10n_in_basic_salary,
+                contract.l10n_in_house_rent_allowance,
+                contract.l10n_in_standard_allowance,
+                contract.l10n_in_performance_bonus,
+                contract.l10n_in_leave_travel_allowance,
+                contract.l10n_in_leave_allowance,
+                contract.l10n_in_gratuity
             ])
-            if record.wage:
-                record.l10n_in_supplementary_allowance = record.wage - total_allowance
+            if contract.wage:
+                contract.l10n_in_supplementary_allowance = contract.wage - total_allowance
 
     def _inverse_l10n_in_supplementary_allowance(self):
-        for record in self:
-            record.l10n_in_supplementary_allowance_percent = (record.l10n_in_supplementary_allowance * 100) / record.wage if record.wage else 0
+        for contract in self:
+            contract.l10n_in_supplementary_allowance_percent = contract.l10n_in_supplementary_allowance / contract.wage if contract.wage else 0
diff --git a/l10n_in_hr_payroll_extension/models/res_company.py b/l10n_in_hr_payroll_extension/models/res_company.py
index 03ce8e60df5..20a1185d9cc 100644
--- a/l10n_in_hr_payroll_extension/models/res_company.py
+++ b/l10n_in_hr_payroll_extension/models/res_company.py
@@ -9,6 +9,25 @@ class ResCompany(models.Model):
     l10n_in_org_tan_number = fields.Char(string="TAN Number")
     l10n_in_org_tds_circle = fields.Char(string="TDS Circle/AO Code")
 
-    l10n_in_employer_identification = fields.Char(string="Employer Identification")
+    l10n_in_pf_employer_identification = fields.Char(string="Employer Identification")
+    l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default=12)
+    l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default=12)
+
     l10n_in_professional_tax_number = fields.Char(string="Professional Tax Number")
+
     l10n_in_esic_ip = fields.Char(string="ESIC IP")
+    l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default=0.75)
+    l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default=3.25)
+
+    l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default=6)
+    l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default=12)
+
+    # Salary Structure
+    l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", default=0.50)
+    l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance", help="You can define 50% for metro city and 40% for non-metro city.", default=0.50)
+    l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default=4167)
+    l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus", default=0.20)
+    l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance", default=0.20)
+    l10n_in_leave_days = fields.Float(string="Leave Days", default=1)
+    l10n_in_gratuity = fields.Float(string="Gratuity")
+    l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance")
diff --git a/l10n_in_hr_payroll_extension/models/res_config_settings.py b/l10n_in_hr_payroll_extension/models/res_config_settings.py
index ce65fd40f8a..a90def5f03e 100644
--- a/l10n_in_hr_payroll_extension/models/res_config_settings.py
+++ b/l10n_in_hr_payroll_extension/models/res_config_settings.py
@@ -12,27 +12,27 @@ class ResConfigSettings(models.TransientModel):
     l10n_in_org_tds_circle = fields.Char(related='company_id.l10n_in_org_tds_circle', readonly=False)
 
     l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund", default=True)
-    l10n_in_employer_identification = fields.Char(related='company_id.l10n_in_employer_identification', readonly=False)
-    default_l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=12)
-    default_l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=12)
+    l10n_in_pf_employer_identification = fields.Char(related='company_id.l10n_in_pf_employer_identification', readonly=False)
+    l10n_in_pf_employee_contribution = fields.Float(related="company_id.l10n_in_pf_employee_contribution", readonly=False)
+    l10n_in_pf_employer_contribution = fields.Float(related="company_id.l10n_in_pf_employer_contribution", readonly=False)
 
     l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax", default=True)
     l10n_in_professional_tax_number = fields.Char(related='company_id.l10n_in_professional_tax_number', readonly=False)
 
     l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation", default=True)
-    l10n_in_esic_ip = fields.Char(related='company_id.l10n_in_esic_ip', readonly=False)
-    default_l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=0.75)
-    default_l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=3.25)
+    l10n_in_esic_ip = fields.Char(string="ESIC IP", related='company_id.l10n_in_esic_ip', readonly=False)
+    l10n_in_esic_employee_contribution = fields.Float(related="company_id.l10n_in_esic_employee_contribution", readonly=False)
+    l10n_in_esic_employer_contribution = fields.Float(related="company_id.l10n_in_esic_employer_contribution", readonly=False)
 
     l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund", default=True)
-    default_l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default_model="hr.contract", default=6)
-    default_l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default_model="hr.contract", default=12)
-
-    default_l10n_in_basic_salary_percent = fields.Float(string="Basic Salary", help="You can define the % of the salary from company cost to compute the basic salary based on your wages (Including D4).", default_model="hr.contract", default=50)
-    default_l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance", help="You can define 50% for metro city and 40% for non-metro city.", default_model="hr.contract", default=50)
-    default_l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default_model="hr.contract", default=4167)
-    default_l10n_in_performance_bonus_percent = fields.Float(string="Performance Bonus", default_model="hr.contract", default=20)
-    default_l10n_in_leave_travel_allowance_percent = fields.Float(string="Leave Travel Allowance", default_model="hr.contract", default=20)
-    default_l10n_in_leave_days = fields.Float(string="Leave Days", default_model="hr.contract", default=1)
-    default_l10n_in_gratuity = fields.Float(string="Gratuity", default_model="hr.contract")
-    default_l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance", default_model="hr.contract")
+    l10n_in_lwf_employee_contribution = fields.Monetary(related="company_id.l10n_in_lwf_employee_contribution", readonly=False)
+    l10n_in_lwf_employer_contribution = fields.Monetary(related="company_id.l10n_in_lwf_employer_contribution", readonly=False)
+
+    l10n_in_basic_salary_percent = fields.Float(related="company_id.l10n_in_basic_salary_percent", readonly=False)
+    l10n_in_house_rent_allowance_percent = fields.Float(related="company_id.l10n_in_house_rent_allowance_percent", readonly=False)
+    l10n_in_standard_allowance = fields.Float(related="company_id.l10n_in_standard_allowance", readonly=False)
+    l10n_in_performance_bonus_percent = fields.Float(related="company_id.l10n_in_performance_bonus_percent", readonly=False)
+    l10n_in_leave_travel_allowance_percent = fields.Float(related="company_id.l10n_in_leave_travel_allowance_percent", readonly=False)
+    l10n_in_leave_days = fields.Float(related="company_id.l10n_in_leave_days", readonly=False)
+    l10n_in_gratuity = fields.Float(related="company_id.l10n_in_gratuity", readonly=False)
+    l10n_in_supplementary_allowance = fields.Float(related="company_id.l10n_in_supplementary_allowance", readonly=False)
diff --git a/l10n_in_hr_payroll_extension/views/hr_contract_views.xml b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
index 44c2540f827..32b877eb05e 100644
--- a/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
+++ b/l10n_in_hr_payroll_extension/views/hr_contract_views.xml
@@ -12,74 +12,66 @@
             </xpath>
             <xpath expr="//group[@name='salary_info']" position="inside">
                 <group name="salary_componensts" string="Salary Components" invisible="country_code != 'IN'">
-                    <label for="l10n_in_basic_salary" />
+                    <label for="l10n_in_basic_salary"/>
                     <div class="o_row mw-80" name="l10n_in_basic_salary">
                         <field name="l10n_in_basic_salary"/>
                         <div> / month</div>
-                        <field name="l10n_in_basic_salary_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_basic_salary_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_house_rent_allowance" />
+                    <label for="l10n_in_house_rent_allowance"/>
                     <div class="o_row mw-80" name="l10n_in_house_rent_allowance">
                         <field name="l10n_in_house_rent_allowance"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_house_rent_allowance_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_house_rent_allowance_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_standard_allowance" />
+                    <label for="l10n_in_standard_allowance"/>
                     <div class="o_row mw-80" name="l10n_in_standard_allowance">
                         <field name="l10n_in_standard_allowance"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_standard_allowance_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_standard_allowance_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_performance_bonus" />
+                    <label for="l10n_in_performance_bonus"/>
                     <div class="o_row mw-80" name="l10n_in_performance_bonus">
                         <field name="l10n_in_performance_bonus"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_performance_bonus_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_performance_bonus_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_leave_travel_allowance" />
+                    <label for="l10n_in_leave_travel_allowance"/>
                     <div class="o_row mw-80" name="l10n_in_leave_travel_allowance">
                         <field name="l10n_in_leave_travel_allowance"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_leave_travel_allowance_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_leave_travel_allowance_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_leave_allowance" />
+                    <label for="l10n_in_leave_allowance"/>
                     <div class="o_row mw-80" name="l10n_in_leave_allowance">
                         <field name="l10n_in_leave_allowance"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_leave_allowance_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_leave_allowance_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_leave_days" />
+                    <label for="l10n_in_leave_days"/>
                     <div class="o_row mw-80" name="l10n_in_leave_days">
                         <field name="l10n_in_leave_days"/>
                         <div class="mb-2">days / month</div>
                     </div>
 
-                    <label for="l10n_in_gratuity" />
+                    <label for="l10n_in_gratuity"/>
                     <div class="o_row mw-80" name="l10n_in_gratuity">
                         <field name="l10n_in_gratuity"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_gratuity_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_gratuity_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
 
-                    <label for="l10n_in_supplementary_allowance" />
+                    <label for="l10n_in_supplementary_allowance"/>
                     <div class="o_row mw-80" name="l10n_in_supplementary_allowance">
                         <field name="l10n_in_supplementary_allowance"/>
                         <div class="mb-2"> / month</div>
-                        <field name="l10n_in_supplementary_allowance_percent" groups="base.group_no_one"/>
-                        <div groups="base.group_no_one">%</div>
+                        <field name="l10n_in_supplementary_allowance_percent" widget="percentage" groups="base.group_no_one"/>
                     </div>
                 </group>
                 <div id="deductions_container" invisible="country_code != 'IN'">
@@ -91,13 +83,13 @@
                         </div>
                     </group>
                     <group name="other_deductions" string="Other Deductions">
-                        <label for="l10n_in_pf_employee_contribution" string="PF Employee Contribution" />
+                        <label for="l10n_in_pf_employee_contribution" string="PF Employee Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_pf_employee_contribution">
                             <field name="l10n_in_pf_employee_contribution"/>
                             <div class="mb-2">%</div>
                         </div>
 
-                        <label for="l10n_in_pf_employer_contribution" string="PF Employer Contribution" />
+                        <label for="l10n_in_pf_employer_contribution" string="PF Employer Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_pf_employer_contribution">
                             <field name="l10n_in_pf_employer_contribution"/>
                             <div class="mb-2">%</div>
@@ -109,31 +101,31 @@
                             <div class="mb-2"> / month</div>
                         </div>
 
-                        <label for="l10n_in_esic_employee_contribution" string="ESIC Employee Contribution" />
+                        <label for="l10n_in_esic_employee_contribution" string="ESIC Employee Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_esic_employee_contribution">
                             <field name="l10n_in_esic_employee_contribution"/>
                             <div class="mb-2">%</div>
                         </div>
 
-                        <label for="l10n_in_esic_employer_contribution" string="ESIC Employer Contribution" />
+                        <label for="l10n_in_esic_employer_contribution" string="ESIC Employer Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_esic_employer_contribution">
                             <field name="l10n_in_esic_employer_contribution"/>
                             <div class="mb-2">%</div>
                         </div>
 
-                        <label for="l10n_in_lwf_employee_contribution" string="LWF Employee Contribution" />
+                        <label for="l10n_in_lwf_employee_contribution" string="LWF Employee Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_lwf_employee_contribution">
                             <field name="l10n_in_lwf_employee_contribution"/>
                             <div class="mb-2"> / month</div>
                         </div>
 
-                        <label for="l10n_in_lwf_employer_contribution" string="LWF Employer Contribution" />
+                        <label for="l10n_in_lwf_employer_contribution" string="LWF Employer Contribution"/>
                         <div class="o_row mw-60" name="l10n_in_lwf_employer_contribution">
                             <field name="l10n_in_lwf_employer_contribution"/>
                             <div class="mb-2"> / month</div>
                         </div>
 
-                        <label for="l10n_in_other_deduction" />
+                        <label for="l10n_in_other_deduction"/>
                         <div class="o_row mw-60" name="l10n_in_other_deduction">
                             <field name="l10n_in_other_deduction"/>
                             <div class="mb-2"> / month</div>
diff --git a/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
index 1f5212021f6..c36f6bbdb24 100644
--- a/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
+++ b/l10n_in_hr_payroll_extension/views/res_config_settings_views.xml
@@ -2,17 +2,17 @@
     <record id="res_config_settings_view_form_inherited" model="ir.ui.view">
         <field name="name">res.config.settings.view.form.inherited.l10n_in_hr_payroll</field>
         <field name="model">res.config.settings</field>
-        <field name="inherit_id" ref="l10n_in_hr_payroll.res_config_settings_view_form" />
+        <field name="inherit_id" ref="l10n_in_hr_payroll.res_config_settings_view_form"/>
         <field name="arch" type="xml">
             <xpath expr="//block[@id='hr_payroll_accountant']" position="inside">
                 <setting string="Organisation Tax Details"
                     help="PAN and TAN number's details, used to generate the TDS reports"
                     invisible="company_country_code != 'IN'">
-                    <field name="l10n_in_org_tax_details" />
+                    <field name="l10n_in_org_tax_details"/>
                     <group class="mt16" invisible="not l10n_in_org_tax_details">
-                        <field name="l10n_in_org_pan_number" />
-                        <field name="l10n_in_org_tan_number" />
-                        <field name="l10n_in_org_tds_circle" />
+                        <field name="l10n_in_org_pan_number"/>
+                        <field name="l10n_in_org_tan_number"/>
+                        <field name="l10n_in_org_tds_circle"/>
                     </group>
                 </setting>
             </xpath>
@@ -20,23 +20,23 @@
                 <div class="row o_settings_container" invisible="company_country_code != 'IN'">
                     <div class="col-lg-6 col-12 o_setting_box" id="epf_section">
                         <div class="o_setting_left_pane">
-                            <field name="l10n_in_is_provident_fund" />
+                            <field name="l10n_in_is_provident_fund"/>
                         </div>
                         <div class="o_setting_right_pane">
                             <label for="l10n_in_is_provident_fund"
-                                string="Employee's Provident Fund" />
+                                string="Employee's Provident Fund"/>
                             <group class="mt16" invisible="not l10n_in_is_provident_fund">
-                                <field name="l10n_in_employer_identification" />
+                                <field name="l10n_in_pf_employer_identification"/>
 
-                                <label for="default_l10n_in_pf_employee_contribution"/>
+                                <label for="l10n_in_pf_employee_contribution"/>
                                 <div class="o_row">
-                                    <field name="default_l10n_in_pf_employee_contribution" />
+                                    <field name="l10n_in_pf_employee_contribution"/>
                                     <div>%</div>
                                 </div>
 
-                                <label for="default_l10n_in_pf_employer_contribution"/>
+                                <label for="l10n_in_pf_employer_contribution"/>
                                 <div class="o_row">
-                                    <field name="default_l10n_in_pf_employer_contribution" />
+                                    <field name="l10n_in_pf_employer_contribution"/>
                                     <div>%</div>
                                 </div>
                             </group>
@@ -44,23 +44,23 @@
                     </div>
                     <div class="col-lg-6 col-12 o_setting_box" id="esic_section">
                         <div class="o_setting_left_pane">
-                            <field name="l10n_in_is_esic" />
+                            <field name="l10n_in_is_esic"/>
                         </div>
                         <div class="o_setting_right_pane">
                             <label for="l10n_in_is_esic"
-                                string="Employee's State Insurance Corporation" />
+                                string="Employee's State Insurance Corporation"/>
                             <group class="mt16" invisible="not l10n_in_is_esic">
-                                <field name="l10n_in_esic_ip" />
+                                <field name="l10n_in_esic_ip"/>
 
-                                <label for="default_l10n_in_esic_employee_contribution"/>
+                                <label for="l10n_in_esic_employee_contribution"/>
                                 <div class="o_row">
-                                    <field name="default_l10n_in_esic_employee_contribution" />
+                                    <field name="l10n_in_esic_employee_contribution"/>
                                     <div>%</div>
                                 </div>
 
-                                <label for="default_l10n_in_esic_employer_contribution"/>
+                                <label for="l10n_in_esic_employer_contribution"/>
                                 <div class="o_row">
-                                    <field name="default_l10n_in_esic_employer_contribution" />
+                                    <field name="l10n_in_esic_employer_contribution"/>
                                     <div>%</div>
                                 </div>
                             </group>
@@ -70,93 +70,86 @@
                 <div class="row o_settings_container" invisible="company_country_code != 'IN'">
                     <div class="col-lg-6 col-12 o_setting_box" id="pt_section">
                         <div class="o_setting_left_pane">
-                            <field name="l10n_in_is_professional_tax" />
+                            <field name="l10n_in_is_professional_tax"/>
                         </div>
                         <div class="o_setting_right_pane">
-                            <label for="l10n_in_is_professional_tax" string="Professional Tax" />
+                            <label for="l10n_in_is_professional_tax" string="Professional Tax"/>
                             <group class="mt16" invisible="not l10n_in_is_professional_tax">
-                                <field name="l10n_in_professional_tax_number" />
+                                <field name="l10n_in_professional_tax_number"/>
                             </group>
                         </div>
                     </div>
                     <div class="col-lg-6 col-12 o_setting_box" id="lwf_section">
                         <div class="o_setting_left_pane">
-                            <field name="l10n_in_is_lwf" />
+                            <field name="l10n_in_is_lwf"/>
                         </div>
                         <div class="o_setting_right_pane">
-                            <label for="l10n_in_is_lwf" string="Labour Welfare Fund" />
+                            <label for="l10n_in_is_lwf" string="Labour Welfare Fund"/>
                             <group class="mt16" invisible="not l10n_in_is_lwf">
-                                <label for="default_l10n_in_lwf_employee_contribution"/>
+                                <label for="l10n_in_lwf_employee_contribution"/>
                                 <div class="o_row mw-80">
-                                    <field name="default_l10n_in_lwf_employee_contribution" />
+                                    <field name="l10n_in_lwf_employee_contribution"/>
                                     <div>₹</div>
                                 </div>
 
-                                <label for="default_l10n_in_lwf_employer_contribution"/>
+                                <label for="l10n_in_lwf_employer_contribution"/>
                                 <div class="o_row mw-80">
-                                    <field name="default_l10n_in_lwf_employer_contribution" />
+                                    <field name="l10n_in_lwf_employer_contribution"/>
                                     <div>₹</div>
                                 </div>
                             </group>
                         </div>
                     </div>
                 </div>
-                <div class="row o_settings_container" id="salary_components_section" invisible="company_country_code != 'IN'">
+                <setting class="row o_settings_container" string="Salary Components" id="salary_components_section" invisible="company_country_code != 'IN'" company_dependent="1">
                     <div class="col-lg-8 col-12 o_setting_box">
-                        <div class="o_setting_right_pane">
-                            <span class="fw-bold fs-4">Salary Components</span>
-                            <group name="l10n_in_salary_components" class="mt16">
-                                <label for="default_l10n_in_basic_salary_percent"/>
-                                <div class="o_row mw-80" name="default_l10n_in_basic_salary_percent">
-                                    <field name="default_l10n_in_basic_salary_percent" nolabel="1"/>
-                                    <div>%</div>
-                                </div>
+                        <group name="l10n_in_salary_components" class="mt16">
+                            <label for="l10n_in_basic_salary_percent"/>
+                            <div class="o_row mw-40" name="l10n_in_basic_salary_percent">
+                                <field name="l10n_in_basic_salary_percent" widget="percentage" nolabel="1"/>
+                            </div>
 
-                                <label for="default_l10n_in_house_rent_allowance_percent" />
-                                <div class="o_row mw-80" name="default_l10n_in_house_rent_allowance_percent">
-                                    <field name="default_l10n_in_house_rent_allowance_percent" nolabel="1"/>
-                                    <div class="mb-2">%</div>
-                                </div>
+                            <label for="l10n_in_house_rent_allowance_percent"/>
+                            <div class="o_row mw-40" name="l10n_in_house_rent_allowance_percent">
+                                <field name="l10n_in_house_rent_allowance_percent" widget="percentage" nolabel="1"/>
+                            </div>
 
-                                <label for="default_l10n_in_standard_allowance" />
-                                <div class="o_row mw-80" name="default_l10n_in_standard_allowance">
-                                    <field name="default_l10n_in_standard_allowance" nolabel="1"/>
-                                    <div class="mb-2">%</div>
-                                </div>
+                            <label for="l10n_in_standard_allowance"/>
+                            <div class="o_row mw-80" name="l10n_in_standard_allowance">
+                                <field name="l10n_in_standard_allowance" nolabel="1"/>
+                                <div class="mb-2">₹ / month</div>
+                            </div>
 
-                                <label for="default_l10n_in_performance_bonus_percent" />
-                                <div class="o_row mw-80" name="default_l10n_in_performance_bonus_percent">
-                                    <field name="default_l10n_in_performance_bonus_percent" nolabel="1"/>
-                                    <div class="mb-2">%</div>
-                                </div>
+                            <label for="l10n_in_performance_bonus_percent"/>
+                            <div class="o_row mw-40" name="l10n_in_performance_bonus_percent">
+                                <field name="l10n_in_performance_bonus_percent" widget="percentage" nolabel="1"/>
+                            </div>
 
-                                <label for="default_l10n_in_leave_travel_allowance_percent" />
-                                <div class="o_row mw-80" name="default_l10n_in_leave_travel_allowance_percent">
-                                    <field name="default_l10n_in_leave_travel_allowance_percent" nolabel="1"/>
-                                    <div class="mb-2">%</div>
-                                </div>
+                            <label for="l10n_in_leave_travel_allowance_percent"/>
+                            <div class="o_row mw-40" name="l10n_in_leave_travel_allowance_percent">
+                                <field name="l10n_in_leave_travel_allowance_percent" widget="percentage" nolabel="1"/>
+                            </div>
 
-                                <label for="default_l10n_in_leave_days" />
-                                <div class="o_row mw-80" name="default_l10n_in_leave_days">
-                                    <field name="default_l10n_in_leave_days" nolabel="1"/>
-                                    <div class="mb-2">days / month</div>
-                                </div>
+                            <label for="l10n_in_leave_days"/>
+                            <div class="o_row mw-80" name="l10n_in_leave_days">
+                                <field name="l10n_in_leave_days" nolabel="1"/>
+                                <div class="mb-2">days / month</div>
+                            </div>
 
-                                <label for="default_l10n_in_gratuity" />
-                                <div class="o_row mw-80" name="default_l10n_in_gratuity">
-                                    <field name="default_l10n_in_gratuity" nolabel="1"/>
-                                    <div class="mb-2">₹ / month</div>
-                                </div>
+                            <label for="l10n_in_gratuity"/>
+                            <div class="o_row mw-80" name="l10n_in_gratuity">
+                                <field name="l10n_in_gratuity" nolabel="1"/>
+                                <div class="mb-2">₹ / month</div>
+                            </div>
 
-                                <label for="default_l10n_in_supplementary_allowance" />
-                                <div class="o_row mw-80" name="default_l10n_in_supplementary_allowance">
-                                    <field name="default_l10n_in_supplementary_allowance" nolabel="1"/>
-                                    <div class="mb-2">₹ / month</div>
-                                </div>
-                            </group>
-                        </div>
+                            <label for="l10n_in_supplementary_allowance"/>
+                            <div class="o_row mw-80" name="l10n_in_supplementary_allowance">
+                                <field name="l10n_in_supplementary_allowance" nolabel="1"/>
+                                <div class="mb-2">₹ / month</div>
+                            </div>
+                        </group>
                     </div>
-                </div>
+                </setting>
             </xpath>
         </field>
     </record>