Enable Dark Mode!
By: Hasna VP

Salary Structure and Rules Configuration in Odoo Payroll Module

Functional Odoo 14

Management of salary packages is very essential in a company to define the accurate calculation of the salary of each employee according to their job position. To ensure convenience in the payment of the salary of any employee in your firm a definite salary structure is required. The salary structure encompasses a set of salary rules and parameters that help a company calculate the allowance of each employee efficiently. A salary structure is a detailed description or total salary package of an employee. To determine the salary structure and set salary rules or parameters, we need a dynamic system to manage. 

Odoo, the most reliable open-source ERP management software, provides versatility in its functions and features. Odoo enables its users in managing almost all HR management activities like Management of Employees, Contracts, Attendance, Timesheets, Time off, and Payroll. To organize all payroll actions in a firm Odoo provides you the efficient Payroll Management module. The total amount of wage a company pays to its employees can be defined as payrolls. There are certain factors that decide the payroll are total work time, basic payment, overtime, and extra rewards. 

At the time of an employee’s recruitment, the company makes a contract with the employee in which we detail the salary package offered by the company for the particular job position. We can set salary rules and define the salary structure of an employee in any job position through the Payroll Module in Odoo. It is an easy and efficient platform to perform all payroll activities of employees within an organization.

In this blog, we will discuss the configuration of salary structure and rules in payroll and how to use them to generate salary slips in Odoo.

You will get the Odoo Payroll module from the Apps module and make sure to install the module into your system. 


When you enter into this module, you will get a preview of the data of all employees in your company. To define the salary rule and structure we have many options under the configuration menu of this module.


As you can see in the image, we can create a Salary Structure and Structure Type, Salary Rules, Salary Rule Parameters, Other Input Types, Salary Package Configurator like Advantages, Personal Info, and Resume. Let’s discuss each of these in detail in the following part.

Salary Structure Types

You can create a new salary structure type in this field. While creating a new contract with the newly recruited employee, it is very important to mention the salary structure type in the contract. You can specify the salary structure type for employees, workers, and trainees separately specifying the wage type as monthly or hourly.


Different types of salary structures can be seen in the list with Default Scheduled Pay, Default Working Hours, Wage Type, and Regular Pay Structure. Use the ‘Create’ button to create a new salary structure type.


In the given fields, add Structure Type and Country. In Wage Type, you can select Monthly Fixed Wage or Hourly Wage. you can schedule payment as Monthly, Quarterly, Annually, Weekly, Bi-weekly, or Bi-monthly. Mention the Working Hours, Pay Structure, and Work Entry Type in the specific fields. After adding all details, save the new salary structure type and you can use this new type for the appropriate salary structure on creating contracts.

Salary Structures

This field will help you to create a new salary structure in Odoo. Salary structure is very essential for computing the salary of each employee according to their job position and generating payslips for each payroll. 


The list includes all available salary structures in Odoo. Use the ‘Create’ button to create a new salary structure.


Name the salary structure and select type from the given list. Add Country name, Report method, Scheduled Pay, Salary Journal to the new salary structure. Under the Salary Rules, you can add salary rules which can be created through the Configuration menu of the module. You can also attach details of the Unpaid Work Entry Type in the new salary structure and save the data after completing every field. 

Salary Rules

To fix the salary of an employee, setting conditions in the form of salary rules is very important. The net amount will change according to the specific set of rules. In the Configuration menu of Odoo payroll, we can see the option ‘Salary Rule’ where you will get all available salary rules created in this module.


Click the ‘Create’ button as always to create a new salary rule. These are used to define the salary structure on creating a new employee contract. 


Give the name of the payment, select the category of pay such as basic, allowance or bonus, code, sequence, and salary structure. Under the ‘General’ tab add general information about the salary rule.


You can select the conditions based on Always True, Range, or Python Expression. Additional fields will appear according to the Condition Based on what you have selected. In the Computation field, add amount type, quantity, and the fixed amount. In the Company Contribution select Partner in salary rule. Under the ‘Description’ tab add a note if any description is required.  Under the ‘Accounting’ tab.


Configure details about Debit Account, Credit Account, and Analytic Account for the preparation of new salary rules. Save the new salary rule and use this when defining the appropriate salary structure.

Rule Parameters 

In the Salary Rule Parameters under the Configuration menu, you can easily set new parameters using the ‘Create’ button. The salary rules are being defined based on the salary rule parameter we set in this field. 


Other Input Types

You can set up additional fields that will appear on generating a payslip in the ‘Other Input Types’ in the Configuration menu.


Give a brief description, select the Availability in Structure and add a unique Code to the input. 


Odoo allows you to set up additional salary advantages in the Configuration menu. This will be added to your salary package according to the salary structure you have selected. 


In this field, you can add details about the Name of the advantage, Cost Field, Advantage Type, Salary Structure Type, Icon, Advantage Unit of Measure, Display Type, and Registered Documents of the advantage. You can add a description to this field and if you want to hide the description, click on ‘Hide Description’.


After adding a new advantage, you can see them in the list as shown in the image.

Personal Info

The Personal Info field under the Configuration menu will help you to configure personal information about the employee into the salary slip. 


You can add a Name, select Applies On which person, Related Field, Info Type, Salary Structure Type, Placeholder, Helper, Position, and Display type. Save the data if everything is added. 


In this field, you can add resume type to your salary structure. Add Name, Category, Salary Structure Type, Advantage Unit of Measure, Value Type, and Fixed Value.


These are the configurations available in the Payroll module which help a company to define the salary package of each employee. Managing payroll actions has now become easy and hassle-free by the advanced features of Odoo and you can effortlessly organize all your payslips in this module.  

If you need any assistance in odoo, we are online, please chat with us.


Ibrahim Adel

i have this error also 'Field schedule_pay referenced in related field definition hr.contract.schedule_pay does not exist.




Gabriel Montiel

Hello, im trying to install a module from you, this one: https://apps.odoo.com/apps/modules/15.0/ohrms_overtime/ but i get this error when i try to install the dependencies of payroll : RPC_ERROR Odoo Server Error Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch result = request.dispatch() File "/usr/lib/python3/dist-packages/odoo/http.py", line 688, in dispatch result = self._call_function(**self.params) File "/usr/lib/python3/dist-packages/odoo/http.py", line 360, in _call_function return checked_call(self.db, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/http.py", line 349, in checked_call result = self.endpoint(*a, **kw) File "/usr/lib/python3/dist-packages/odoo/http.py", line 917, in __call__ return self.method(*args, **kw) File "/usr/lib/python3/dist-packages/odoo/http.py", line 536, in response_wrap response = f(*args, **kw) File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1352, in call_button action = self._call_kw(model, method, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1340, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/api.py", line 464, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/usr/lib/python3/dist-packages/odoo/api.py", line 451, in _call_kw_multi result = method(recs, *args, **kwargs) File "", line 2, in button_immediate_install File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 483, in button_immediate_install return self._button_immediate_function(type(self).button_install) File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 600, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 87, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 474, in load_modules processed_modules += load_marked_modules(cr, graph, File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 363, in load_marked_modules loaded, processed = load_module_graph( File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 198, in load_module_graph registry.setup_models(cr) File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 290, in setup_models model._setup_fields() File "/usr/lib/python3/dist-packages/odoo/models.py", line 3049, in _setup_fields field.setup(self) File "/usr/lib/python3/dist-packages/odoo/fields.py", line 462, in setup self.setup_related(model) File "/usr/lib/python3/dist-packages/odoo/fields.py", line 2373, in setup_related super().setup_related(model) File "/usr/lib/python3/dist-packages/odoo/fields.py", line 527, in setup_related raise KeyError( Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/odoo/http.py", line 644, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/usr/lib/python3/dist-packages/odoo/http.py", line 302, in _handle_exception raise exception.with_traceback(None) from new_cause KeyError: 'Field schedule_pay referenced in related field definition hr.contract.schedule_pay does not exist.' If you can help me with this module. i have odoo 15 enterprise




Leave a comment




Cybrosys Technologies Pvt. Ltd.
Neospace, Kinfra Techno Park
Kakkancherry, Calicut
Kerala, India - 673635



Cybrosys Technologies Pvt. Ltd.
1st Floor, Thapasya Building,
Infopark, Kakkanad,
Kochi, India - 682030.



Cybrosys Techno Solutions
The Estate, 8th Floor,
Dickenson Road,
Bangalore, India - 560042

Send Us A Message