Manage your employee payroll records.
This module is a backport from Odoo SA and as such, it is not included in the OCA CLA. That means we do not have a copy of the copyright on it like all other OCA modules.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Manage employee payroll in Odoo: define salary structures and rules, generate payslips individually or in batches, compute worked days and leaves, and print payslip and contribution reports.
This module adds a full payroll area to Odoo. Users can set up salary structures (with parent/child hierarchy) and salary rules that define how each pay component is calculated, grouped into rule categories. Contribution registers let you track amounts owed to third parties such as social security or pension funds.
On each employee contract (hr.version) you can choose a salary structure and a payment frequency (monthly, weekly, etc.). Employees show a count of their payslips.
Payslips (hr.payslip) are created for an employee and period; the system automatically fills worked days (including leave days from holidays) and inputs, then computes payslip lines from the applicable rules. Payslips follow a status flow: Draft, Waiting, Done, Rejected. They can be confirmed, cancelled, refunded (credit note), and grouped into payslip batches (hr.payslip.run) that can be closed. A wizard generates payslips for several selected employees at once, and another changes the state of a payslip.
Reports include Payslip, Payslip Details and a Contribution Register report. Settings control whether confirmed payslips can be cancelled, whether lines can be edited, whether codes/categories are required, and how leave values are counted. Access rights separate payroll officers and managers.
Depends on
Required by other modules
Menus it adds
Models and fields (18)
- hr.payslip · new modelname (Payslip Name), note (Internal Note), paid (Made Payment Order ? ), state (Status), number (Reference), date_to, line_ids (Payslip Lines), date_from, struct_id (Structure), company_id (Company), contract_id (Contract), credit_note, employee_id (Employee), refunded_id (Refunded Payslip), compute_date, payslip_count (Payslip Computation Details), input_line_ids (Payslip Inputs), payslip_run_id (Payslip Batches), hide_child_lines, hide_invisible_lines (Show only lines that appear on payslip), worked_days_line_ids (Payslip Worked Days), allow_cancel_payslips (Allow Canceling Payslips), prevent_compute_on_confirm (Prevent Compute on Confirm), dynamic_filtered_payslip_lines
- hr.version · extends an existing modelstruct_id (Salary Structure), schedule_pay (Scheduled Pay), resource_calendar_id
- hr.employee · extends an existing modelslip_ids (Payslips), payslip_count
- hr.rule.input · new modelcode, name (Description), input_id (Salary Rule Input)
- hr.payslip.run · new modelname, state (Status), date_end (Date To), slip_ids (Payslips), struct_id (Structure), company_id (Company), date_start (Date From), credit_note
- hr.salary.rule · new modelcode, name, note (Description), active, quantity, sequence, child_ids (Child Salary Rule), input_ids (Inputs), amount_fix (Fixed Amount), company_id (Company), category_id (Category), register_id (Contribution Register), amount_select (Amount Type), parent_rule_id (Parent Salary Rule), condition_range (Range Based on), condition_python (Python Condition), condition_select (Condition Based on), amount_percentage (Percentage (%)), appears_on_payslip (Appears on Payslip), condition_range_max (Maximum Range), condition_range_min (Minimum Range), amount_python_compute (Python Code), amount_percentage_base (Percentage based on), require_code_and_category (Require code and category)
- hr.payslip.line · new modelrate (Rate (%)), total, amount, slip_id (Pay Slip), quantity, child_ids (Child Payslip Lines), date_from (Date From), contract_id (Contract), employee_id (Employee), parent_line_id (Parent Payslip Line), payslip_run_id (Payslip Batch), salary_rule_id (Rule), allow_edit_payslip_lines (Allow editing)
- hr.payslip.input · new modelcode, name (Description), amount, sequence, amount_qty (Amount Quantity), payslip_id (Pay Slip), contract_id (Contract)
- res.config.settings · extends an existing modelleaves_positive (Leaves with positive values), allow_cancel_payslips (Allow canceling confirmed payslips), module_payroll_account (Payroll Accounting), allow_edit_payslip_lines (Allow editing payslip lines), require_code_and_category (Require code/category on rules, categories and structures), prevent_compute_on_confirm (Confirm payslips without recomputing)
- hr.payroll.structure · new modelcode (Reference), name, note (Description), rule_ids (Salary Rules), parent_id (Parent), company_id (Company), children_ids (Children), require_code (Require code)
- hr.payslip.employees · new modelemployee_ids
- hr.payslip.worked_days · new modelcode, name (Description), sequence, payslip_id (Pay Slip), contract_id (Contract), number_of_days (Number of Days), number_of_hours (Number of Hours)
- hr.payslip.change.state · new modelstate (Action)
- hr.salary.rule.category · new modelcode, name, note (Description), parent_id (Parent), company_id (Company), children_ids (Children), require_code (Require code), salary_rules_ids (Salary Rule Categories)
- hr.contribution.register · new modelname, note (Description), company_id (Company), partner_id (Partner), register_line_ids (Register Line)
- payslip.lines.contribution.register · new modeldate_to, date_from
- report.payroll.report_payslipdetails · new model
- report.payroll.report_contributionregister · new model
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 7 confirmed, 2 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/payroll.
terminal Installation and usage
No verified informationInstallation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.