All posts
Functional4 min read

Managing Employee Contracts and Wage Structures in Odoo HR

Create and manage employee contracts in Odoo HR - defining salary structure, contract type, probation period, and linking to payroll for automatic payslip generation.

Employee Contracts in Odoo HR#

Every payslip in Odoo is derived from a contract - which defines the employee's wage, contract type, work schedule, and salary structure. Getting contracts right ensures payslips are accurate and compliant.

Contract Types#

HR → Configuration → Contract Types:

  • Permanent (CDI): indefinite duration, standard notice period
  • Fixed-Term (CDD): specific end date, limited renewals
  • Part-Time: standard structure but different working hours
  • Freelance/Consultant: no benefits, different tax treatment
  • Probation: temporary lower wage or different benefits during trial period

Creating an Employee Contract#

HR → Employees → [Employee] → Contracts tab → New:

General Information:

  • Contract Reference: EMP-2027-042
  • Start Date: 2027-10-01
  • End Date: (blank for indefinite)
  • Contract Type: Permanent
  • Work Schedule: Standard 40h (Mon–Fri)

Salary Information:

  • Wage: $7,500/month (gross)
  • Salary Structure Type: Monthly Employee (determines which payroll rules apply)
  • HR Responsible: HR Manager

Other Benefits (via wage type lines):

  • Car Allowance: $500/month
  • Phone Allowance: $100/month
  • Meal Vouchers: $150/month

Salary Structure Types#

Payroll → Configuration → Salary Structure Types:

  • Monthly Employee: full-time, monthly payroll
  • Hourly Worker: paid by hours worked
  • Commission-Based: base + variable commission
  • Executive: special rules for executives (different tax treatment in some countries)

The structure type links to a set of payroll rules that are applied when generating payslips.

Wage History#

When an employee gets a raise:

Contract → New Contract (don't modify the old one):

  • Archive the old contract (valid from start to raise date)
  • Create a new contract starting from the raise date

This preserves the wage history - critical for payroll audits and dispute resolution.

Probation Period Tracking#

Contract → Probation End Date: set to 90 days from start date

Automated Action: 7 days before probation ends → create activity for HR manager "Confirm or terminate probation - [Employee Name]"

This ensures no employee passes probation by default without a conscious decision.

Contract Reporting#

HR → Reporting → Contracts:

  • Employees without a contract (payroll will fail for these)
  • Contracts expiring within 30/60/90 days (fixed-term employees)
  • Salary by grade/level (equity analysis)
  • Average wage by department

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free