Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Platform
  3. EH HR Workflow Engine v 16.0
  4. Sales Conditions FAQ

EH HR Workflow Engine

by ERP Heritage
Odoo
v 16.0 Third Party 18
Download for v 16.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Compatibility
Lines of code 1092
Technical Name eh_hr_engine_workflow
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Compatibility
Lines of code 1092
Technical Name eh_hr_engine_workflow
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
EH HR Platform engine

HR Workflow Engine for Odoo 16

One declarative state machine that every HR document shares, so a new approval step is a data change, not a Python deploy.

Free · LGPL-3Odoo 16 CommunityLGPL-3v1.0.0
Declarative states
Data-defined transitions
Group-gated steps
Final-state guard
Self-approval block

Why this module

HR Workflow Engine for Odoo 16

Config over code

A new step is a data change

States and transitions are records on eh.hr.workflow.definition. Adding a transition, reordering states, or pointing a step at a different next state is editing data in the Workflows screen, never a Python deploy. The status bar and the available buttons follow the definition automatically.

One engine, every document

The same lifecycle everywhere

Models inherit one mixin and set a workflow code. They gain a dynamic state field, an initial state on brand-new unsaved forms, a state label, and action_transition. The platform already wires this engine into more than twenty HR document types so they behave consistently.

Guarded by design

Transitions that refuse to misbehave

Every advance checks that the transition is defined from the current state, that final states reject further moves, and that the user holds one of the transition's allowed groups. Gated transitions hand off to the approval engine, which captures the real submitter so a person cannot approve their own request.

Day in the life

An attendance correction moves through its lifecycle

An employee saves a correction; the form already shows the initial state from the definition because the default is resolved before the first save. They press Submit, which calls action_transition with the submit code. The engine confirms the transition exists from the current state, writes the new state, and emits a workflow.transition event that lands in the append-only audit log with a correlation id. Because the submit transition is marked requires_approval, the engine opens an approval request through eh.hr.approval.engine, recording the submitter so they cannot later approve it themselves. When an approver with the right group decides, the approval engine fires the follow-up approve or refuse transition back into the workflow, and the record reaches its final state, after which no further transition is allowed.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

Final-state guard

A record in a state flagged is_final rejects every further transition with a clear error, even one a misconfigured definition declares from it. The terminal marker is authoritative, not the transition table.

Self-approval block

When a gated transition opens an approval request, the engine captures the real submitter before its internal sudo, so the user who fired the transition cannot approve their own request even if they hold an approver group.

Idempotent submit

The state advance is unconditional and the approval handoff is a side effect on the follow-up step, so a submit no longer leaves the record stuck in its pre-submit state or fires repeated approval requests against the same record on close.

Group-gated transitions

If a transition declares allowed groups, only members of those groups (or the admin) can execute it; everyone else is refused. An empty group list means any owner may run it.

Button-callable transitions

The transition code can arrive positionally from server callers or from the view context for header buttons, which cannot pass positional arguments, and a missing code raises rather than silently passing.

Active-definition uniqueness

A database constraint enforces one active definition per workflow code, so a model never resolves an ambiguous state machine. The constraint is declared in the version-correct form for Odoo 16.

Audit replay

Every transition emits a typed platform event that is cross-written to the append-only, hash-chained audit log, so the lifecycle of a record is reconstructable after the fact.

What is inside

Built to do the job, end to end.

  • Four data models. eh.hr.workflow.definition holds the code, name, initial state, and active flag; eh.hr.workflow.state carries code, name, sequence, kind, and the is_final marker; eh.hr.workflow.transition carries from and to states, allowed groups, the requires_approval flag, an approval chain code, and an optional post-action method name.
  • The consumer mixin. eh.hr.workflow.mixin builds on the platform mixin and exposes a dynamic Selection state field, a state label, a default initial state, action_transition, and audit emission. A model joins by inheriting it and declaring its workflow code.
  • Service entry point. A registered eh.hr.workflow.engine service exposes apply_transition so other engines, such as the approval engine after a chain approves, can drive a transition programmatically rather than through the UI.
  • Configuration UI. A Workflows form under the HR configuration menu, restricted to the HR admin group, lets you edit definitions with inline State and Transition tabs, including drag-handle ordering of states.
  • Access control. Shipped record rules give the HR admin group full read and write on definitions, states, and transitions, and the HR officer group read-only visibility.

Honest about the edges

What this does not do, so nothing surprises you.

  • This is a platform engine, not a standalone app. It depends on eh_hr_core and is intended to back EH HR Platform document modules, not to be used in isolation.
  • Approval routing, escalation, and multi-step chains live in the separate approval engine. This module hands gated transitions off to it and applies the follow-up transition it returns; it does not implement the approval ladder itself.
  • States and transitions are configured as data through the Workflows screen or XML. There is no drag-and-drop visual flow designer.
  • The module ships no automated test suite of its own. Workflow behavior is exercised by tests in consumer modules such as attendance and leave.
  • Events publish on the in-process bus and the audit log. Clustered or cross-host delivery would need a queue or broker adapter in place of the in-process bus.
  • Transition rules cover state validity, final-state guarding, and group membership. Field-level or value-based conditions on a transition are not part of the definition model.
Search

Odoo 16 HR workflow engine, declarative state machine Odoo, configurable HR approval workflow, Odoo status bar workflow, HR document lifecycle Odoo, transition security groups Odoo, data-driven workflow Odoo 16, HR audit log Odoo, no-code workflow Odoo, eh_hr_core platform, HR approval handoff, Odoo Community HR engine

ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Consultant Sydney

v1.0.0 · LGPL-3 · Odoo 16 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with