Skip to content

Employees

1. Purpose

Employees is the master record of everyone who works for the company — their personal and job details, which department they sit in, who they report to, and the contract that defines what they are paid. Every HR and payroll process in NestERP starts from a record here.

Nothing in payroll can compute without both an employee record and a running contract. Most "payroll produced no payslips" problems trace back to this module.

2. Features

  • Employee directory with personal, job, and work-contact details
  • Departments, with a hierarchy and a manager per department
  • Job positions, and the manager each employee reports to
  • Work locations and working schedules (working hours per employee)
  • Employment contracts carrying wage, salary structure and validity dates
  • Contract states — Draft, Running, Expired, Cancelled — with expiry alerts
  • Employee documents, with expiry tracking (via Cybrosys OpenHRMS)
  • HR settings per employee: bank account for salary payment, identification numbers
  • Employee self-service through the portal, showing their own record
  • Badges and rewards (hr_gamification)
  • Multi-company employee assignment

3. Where to find it

  • Menu: Employees → Employees / Departments / Configuration
  • Technical names: hr, hr_contract, hr_gamification
  • Tier: Odoo core (Community Edition)
  • Available in: Odoo 16, 17 and 18. hr_contract is required by our stack on 17 and 18.

4. Modules used

Module Tier Why it is needed
hr Odoo core Employee records, departments, job positions
hr_contract Odoo core Contracts, wage and salary-structure assignment — payroll cannot run without it
hr_gamification Odoo core Badges, required by OpenHRMS
hr_payroll_community Third-party (Cybrosys) Salary structures and rules. Odoo's official payroll is Enterprise-only.
hr_payroll_account_community Third-party (Cybrosys) Posts payslips to accounting
ohrms_core and the OpenHRMS suite Third-party (Cybrosys) Loans, salary advances, resignation, transfers, document expiry, HR dashboard

NestERP custom modules that build on Employees

Module Odoo version What it adds
payroll_custom_module 17 · 18 Tanzanian statutory rules, payslip batches, payroll payment registration, bank export
payroll_department_filter 17 · 18 Department filter on the Generate Payslips wizard
employee_info_export 17 · 18 Employee data export to Excel, including bank details and structure

5. Configuration

  1. Create the company structure first — Settings → Users & Companies → Companies. Employee records attach to a company and moving them later is messy.
  2. Create departments — Employees → Departments. Set the parent department and the manager. Department structure drives payroll filtering and most HR reporting, so agree it with the client before loading employees.
  3. Create job positions — Configuration → Job Positions.
  4. Define working schedules — Configuration → Working Schedules. The default is a full-time week; part-time or shift patterns need their own schedule.
  5. Create work locations — Configuration → Work Locations.
  6. Create the employees. Required for payroll: department, job position, manager, working schedule, and on the HR Settings tab the bank account for salary payment.
  7. Create a contract per employee — Employees → Contracts. Set the wage, the salary structure, the start date, and set the state to Running.
  8. Enable employee self-service if the client wants staff to see their own records — requires a portal user linked to the employee.

Configuration traps

  • An employee without a Running contract produces no payslip, and the payslip generation wizard will not tell you why. It simply returns an empty batch.
  • A contract without a salary structure computes nothing.
  • A missing bank account on the employee breaks the payroll bank export at the last step of the month, when it is most expensive to discover.
  • Department is used as the payroll filter. Employees left without a department disappear from department-filtered payslip generation.
  • Deleting an employee with payroll history is blocked, and should be. Archive instead.

6. How it's used

Onboarding a new employee

  1. HR Officer — Employees → Employees → New. Fills personal details, department, job position, manager and working schedule.
  2. HR Officer — completes the HR Settings tab: bank account, identification numbers.
  3. HR Officer — creates the contract with wage and salary structure, and sets it to Running.
  4. HR Manager — reviews and confirms the contract.
  5. System Administrator — creates a user account if the employee needs system access.

Employee leaving

  1. HR Officer — sets the contract end date; the contract moves to Expired.
  2. HR Officer — archives the employee record. Do not delete it — payroll history depends on it.

Ongoing maintenance

  1. HR Officer — updates contracts on salary review; a wage change during employment is a new contract or an amended one, depending on the client's practice.
  2. HR Manager — monitors expiring contracts and documents.

Screenshots needed

Save to docs/assets/employees/: employee list view · employee form showing the HR Settings tab · a Running contract · department hierarchy · working schedule configuration.

7. Access rights

Group Can do
Employees / Officer Create and edit employee records and contracts
Employees / Administrator All of the above, plus departments, job positions, working schedules, and configuration
Employee (own record) Read their own employee record through the portal

Sensitive fields — wage, bank account, identification numbers — are restricted to HR groups, not visible to ordinary users. Multi-company deployments restrict employees by company; hr_multi_company (Cybrosys) extends this where the client's structure needs more.

8. Version differences (16 / 17 / 18)

  • Views use attrs / states.
  • hr_contract is not required by our Odoo 16 modules — the 16 line carries no payroll.
  • attrs and states removed from views.
  • The version of the Thalia reference instance, and the primary payroll platform today.
  • <tree> elements superseded by <list>.
  • editable="0" is required where an empty attribute previously sufficed. This came up during the payroll v18 upgrade.
  • Mail-template rendering is stricter — a template referencing a field that does not resolve now raises rather than rendering empty. Relevant to HR notification templates.
  • hr_contract still exists as a separate module and is depended on by our payroll stack on 18.

9. Known limitations

  • No official payroll on Community. Odoo's hr_payroll is Enterprise. Everything payroll in NestERP is built on Cybrosys hr_payroll_community, a Tier 2 dependency. This is the single largest third-party exposure in the product.
  • No appraisals. hr_appraisal is Enterprise.
  • No employee referral programme. Enterprise.
  • No planning or shift-scheduling app. Enterprise.
  • Fleet, employee skills and document expiry are either absent or thin on Community; document expiry comes from Cybrosys oh_employee_documents_expiry.
  • No approval workflow on contract changes in core — a user with HR Administrator rights can change a wage with no second signature.

Needs verification on the Thalia live instance

  • The department structure actually in use
  • How many employees, and how many hold Running contracts
  • Which salary structures exist and which is the default
  • Whether every employee has a bank account set for the payroll export
  • Which OpenHRMS modules are installed live versus merely present on disk
  • Whether employee self-service / portal access is in use
  • Whether hr_multi_company is active, and the company structure