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. Employees
  3. EH HR Payroll v 18.0
  4. Sales Conditions FAQ

EH HR Payroll

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 18.0 Third Party 26
Download for v 18.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
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 • Employees (hr)
• Discuss (mail)
Community Apps Dependencies Show
• EH HR Compatibility
• EH HR Platform Core
• EH HR Workflow Engine
Lines of code 2237
Technical Name eh_hr_payroll
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
EH HR Platform

HR Payroll Engine

Sandboxed salary rules, sequenced payslips, hash-chained audit on Odoo 18.

Free · LGPL-3Odoo 18 CommunitySandboxed rule enginev1.0.0
Sequenced salary rules
Category accumulation
Fixed / percentage / code amounts
Conditional rules
Draft to paid workflow

Why this module

HR Payroll Engine

Calculation

Rules that read each other

Structures run rules in sequence, accumulating per-category totals. A later rule reads categories.GROSS or rules.BASIC.total, so gross, deductions, employer contributions and net all derive from the same chain. Amounts come from a fixed value, a percentage of any base expression, or a Python expression.

Safety

A rule cannot escape

Rule formulas evaluate with safe_eval in eval mode. The payslip and employee are wrapped in read-only proxies that refuse every underscore-prefixed name, and the backing stores are name-mangled, so a rule cannot reach env, the cursor, or the raw recordset. Negative tests prove payslip.env and payslip._record both fail the run.

Integrity

Every change recorded

Payslips carry a workflow state and an audit mixin. Each transition and each tracked field change writes a row to an append-only, sha256 hash-chained audit log, so an edit that does not recompute the whole downstream chain is detectable. Cross-company writes are refused unless explicitly overridden and audited.

Day in the life

A monthly pay run, start to file

A payroll officer opens a pay run for the period and adds a payslip per employee against a salary structure. Compute all runs every draft slip through its rules: basic from the contract wage, a housing allowance as a percentage of basic, a gross subtotal, tax as a percentage of gross, an employer contribution excluded from net. Each slip shows its lines and a derived gross, total deductions, and net. An admin confirms the run, marks slips paid, and exports a CSV payment file built from the confirmed and paid slips. Throughout, every transition and field change is written to the hash-chained audit log.

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.

Idempotent recompute

Compute unlinks existing lines and rebuilds them, and rebuilds feeder-generated auto inputs while leaving manual inputs untouched, so recomputing a slip never duplicates lines and always reflects the current state.

Sandbox escape blocked

safe_eval permits single-underscore names, so the proxies refuse any underscore-prefixed access and name-mangle their stores. A rule reading payslip.env, payslip._record, categories._d or inputs._d fails the run with a UserError rather than reaching the ORM.

Broken formula caught early

Rule expressions are compile-checked on save. A formula that does not even parse raises a ValidationError at save time, not mid pay run, so a typo never breaks a live payroll.

Final-state guard

Paid and cancelled are final states. The workflow mixin refuses any further transition out of a final state even if a misconfigured definition declares one, so a paid slip cannot be silently re-driven.

Group-gated transitions

Compute and cancel from draft are officer-level; confirm, pay, and cancel from confirmed are admin-only. A user outside a transition's allowed groups is rejected, so confirming and paying stay separated from data entry.

Strict multi-company

Payslips and pay runs default to the active company and refuse a cross-company write, even under sudo, unless an explicit override context is set and the elevation is written to the audit log.

Period inference

The engine infers pay periods per year (daily, weekly, fortnightly, monthly, annual) from the period span and exposes it to rules as periods, so localization rules can annualise without hardcoding a frequency.

What is inside

Built to do the job, end to end.

  • Salary structures and rules. eh.hr.salary.structure holds sequenced eh.hr.salary.rule records with unique codes. Each rule has a category, a condition (always, numeric range, or Python), an amount mode (fixed, percentage of a base, or code), a quantity expression, and a flag for whether it appears on the slip while still feeding later rules.
  • Categories that drive totals. eh.hr.salary.rule.category carries a semantic kind (basic, allowance, gross, deduction, net, employer contribution, other). The payslip derives gross from basic and allowance lines, total deductions from deduction lines, and net as gross minus deductions, all from the kinds rather than hardcoded codes.
  • Payslips and their lines. eh.hr.payslip computes one line per rule that appears on the slip, plus worked-days lines read as worked_days.CODE and input lines read as inputs.CODE. Manual inputs sit alongside feeder auto inputs. Slips are sequenced PAY/year/ and ride the configurable workflow.
  • Pay runs and bank file. eh.hr.payslip.run batches payslips for a period, computes every draft slip at once, tracks slip count and net total, and exports a CSV payment file from confirmed and paid slips. _render_bank_file is an extension point a localization overrides to emit a country-specific format.
  • Extension points. Feeder hooks (_collect_auto_inputs, _sync_auto_inputs, _on_payslip_paid) let loan, overtime, advance, and gratuity modules push inputs and mark sources processed once paid. _get_rule_helpers lets a localization add safe callables such as a PAYG helper to the rule sandbox.
  • Workflow and audit, from the platform. The module owns no workflow or audit code. State, transitions, group gating, and the final-state guard come from eh_hr_engine_workflow; the append-only hash-chained audit log and strict multi-company scoping come from eh_hr_core mixins shared across the suite.

Honest about the edges

What this does not do, so nothing surprises you.

  • Base ships a generic worked-example structure and categories, not country tax tables. PAYG, superannuation, social-insurance brackets and similar are provided by separate localization rules and the _get_rule_helpers extension point, not by this module.
  • The bank-file export is a generic CSV of employee, reference, and net amount. A real bank format such as an ABA file is produced by a localization that overrides _render_bank_file.
  • This module computes and records payslips but does not post them to accounting. Journal posting and reversal are handled by a separate accounting bridge referenced in the workflow notes.
  • Employee self-service is read-only access to structures, rules, and slips. There is no employee portal beyond standard record access.
  • The wage fed to rules as contract.wage defaults to the payslip's own basic_wage for the period. Reading a real dated contract is an override point (_contract_wage), not base behaviour.
  • Requires the EH HR Platform base, compat, and workflow-engine modules plus Odoo hr. It is a calculation engine on the platform, not a standalone payroll app.
Search

odoo 18 payroll, salary structure odoo, salary rules engine, payslip computation, sandboxed payroll rules, pay run batch, hash-chained audit payroll, multi-company payroll odoo, payslip workflow, employer contribution payroll, gross net deduction calculation, community payroll odoo 18

Work with ERP Heritage

Need this fitted to the way you work?

ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.

Build and tailor
Odoo Implementation, Customization and Development, scoped to your workflow.
Connect and move
Odoo Integration and Migration across systems and Odoo versions.
Run and support
Odoo Support and Training so your team stays productive after go live.
Plan and advise
Odoo Consultation and ERP Consulting, from discovery to roadmap.

We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.

Languages

Available in 19 languages

The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.

ArabicChinese (Simplified)Chinese (Traditional)DutchFrenchGermanHindiIndonesianItalianJapaneseKoreanPolishPortuguese (Brazil)RussianSpanishSwedishThaiTurkishVietnamese
ERP Heritage

Production-grade Odoo HR, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by ERP Heritage - Top Odoo Partner • LinkedIn

v1.0.0 · LGPL-3 · Odoo 18 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