Skip to content
ERP Expert

Odoo HR — employees, contracts, attendance, recruitment

Ahmed Hassan Algammal4 min read
Course cover: a business meeting blurred behind an Arabic title reading «Human resources in Odoo — a training course», with the ERPEXPERT.NET logo

Odoo’s HR modules are among the easiest parts of the product to configure and among the easiest to configure wrongly, because three or four fields carry consequences that only surface at the end of the month.

What follows is the order to learn them in, and the specific fields that decide whether the rest works.

Station one: Employees

The employee record is the foundation every other HR module reads from. Four things on it matter more than the rest.

Job position and department. These are not labels. They drive approval routing, they drive the org chart, and they drive who sees what. A flat department structure produces an approval matrix nobody can maintain.

Manager and coach. Odoo separates them deliberately. The manager approves; the coach develops. Assigning both to the same person by default is the commonest configuration shortcut and it removes the distinction the field exists for.

Related User. This is the field that separates an HR record from a system login. Setting it links a person to a portal or internal user; leaving it empty means the employee exists in HR and cannot self-serve.

Get this one wrong in the other direction and you have granted system access to a record that was only meant to be a personnel file. It is the single field on the form most worth reviewing before go-live.

Skills. Underused, and the reason is that nobody populates it. A populated skills matrix answers questions no report otherwise can — who speaks French, who is certified on that machine — in a search rather than a phone call.

Document expiry. Passports, visas and residency permits carry dates. Configured, they raise an alert ahead of expiry. Unconfigured, they raise a fine.

Station two: Contracts

The contract is where HR becomes payroll, and where a small omission stops the payroll run entirely.

Three fields decide it:

The field Why it decides the run
Start date Payroll computes from it; a wrong date produces a correct calculation of the wrong period
Salary structure Determines which rules apply — without it there is nothing to compute
State Must be Running. A contract left at New is invisible to payroll

The third row is the one that costs an afternoon. Everything looks configured, the employee exists, the salary is entered, and payroll returns nothing — because the contract was never moved out of draft.

Check the state before you check anything else.

Station three: Attendance and Time Off

This is where the module pays for itself, and it is not through payroll.

Before it, leave runs on messages. An employee asks a manager, the manager remembers or does not, HR is told at some point, and the balance exists only in somebody’s notes. Every dispute is a matter of recollection.

After it, the employee sees their own balance and requests against it. The system refuses a request against a zero balance — which removes the conversation entirely rather than resolving it.

Two things to configure properly:

  • Leave types with real accrual and carry-over rules, matching what the employment contract and local law actually say. A single generic leave type is the same as no system.
  • The check-in method, either kiosk mode on a shared device or mobile check-in with location. Whichever you choose, it is the source that feeds payroll, so the decision is about evidence rather than convenience.

Attendance data that does not feed payroll is a report nobody reads.

Station four: Recruitment

Odoo’s recruitment module is a full applicant tracking system, and it is usually the last one implemented and the first one that impresses.

The pipeline is a kanban: applications arrive from the published job page or by email, move through stages you define, carry the CV as an attachment, and record the interview notes against the candidate rather than in somebody’s inbox.

The step that matters is the last one. Pressing Recruit on a hired candidate creates the employee record — carrying the name, the position, the department and the attached documents forward.

Nobody re-keys anything, and nothing is lost between the two modules. That single handoff is the argument for implementing recruitment in the same system as HR rather than alongside it.

The order, and why

Employees, then contracts, then attendance, then recruitment.

Contracts read from employees. Attendance and time off read from contracts. Recruitment writes into employees. Implementing recruitment first produces a pipeline that hires people into a module that cannot hold them.

If you are learning Odoo generally rather than HR specifically, the ten-station path is here. For where HR sits among the other modules and what each one is for, see the ERP modules article.

OdooHRPayroll

About the author

Ahmed Hassan Algammal

ERP implementation consultant. More than 60 deliveries across the UAE, Saudi Arabia and Egypt in manufacturing, contracting and distribution.

Book a call →

Read next