Employment Hero Payroll Bridge
Post finalised pay runs to your ledger without rekeying a single line.
Store price is USD 157 all-in: installing this also pulls the 2 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Payroll Bridge
Payroll posts itself
A finalised pay run becomes a balanced journal entry in your general journal, with wages, tax and super on the right accounts. Nobody retypes a figure from one screen into another.
One entry per pay run, always
Each entry remembers its pay run id, backed by a database uniqueness rule per company. A manual click, the scheduled job and an accidental double run all settle on exactly one entry.
Codes you control
Items match an Odoo account by an Employment Hero account code, or fall back to the Odoo code. A real tax code that maps to nothing stops that pay run loudly rather than posting a quietly wrong journal.
Day in the life
Friday, the pay run closes
Payroll finalises the fortnight in Employment Hero. The scheduled job runs, reads each finalised run once, and posts a balanced entry into the general journal with wages, PAYG withholding and superannuation on their mapped accounts. One run had an unmapped account code, so it is skipped and logged while the rest post cleanly. Monday morning the ledger already reflects payroll, and the accountant fixes the one mapping and clicks Import to pick up the straggler.
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.
A pre scan filters pay runs already stamped on an account move, a per run re check guards a concurrent run, and a database unique constraint on company plus pay run id is the final backstop, so no pay run posts twice.
One bad pay run, an unmapped account, a non numeric amount or a locked period, is rolled back inside its own savepoint, logged and skipped. The cursor stays usable and every other pay run in the batch still posts.
A pay run whose debits and credits do not tie out beyond a cent of rounding is refused with a clear message rather than posted as a broken entry. Sub cent drift is absorbed on a configured rounding account.
When a pay run reports its own currency the entry carries amount in currency, balances are checked on both the foreign and the company side within a per line rounding tolerance, and a residual is split onto a rounding line so the move still posts.
A non numeric or non ASCII amount raises rather than silently posting a zero line, because a wrong but balanced looking journal is worse than a handled, retryable skip.
An item flagged both debit and credit is rejected for that run. When neither flag is set the sign of the amount decides the column, so a value is never zeroed or self cancelled.
Each bridge posts into one company, the connection and journal are kept consistent with that company, record rules enforce the boundary, and account resolution is company aware across the Odoo 16 to 19 account model change.
Only pay runs paid after the bridge lock date are imported, so historical runs you do not want in Odoo stay untouched while new ones flow in.
The pay run list is read through the shared connection layer, which paginates the full list, retries transient failures and rate limits with backoff, and refreshes its token, so a long list or a flaky moment does not lose a run.
What is inside
Built to do the job, end to end.
- Pay run bridge. A small configuration record per company that names the payroll connection to pull from, the general journal to post into, an optional rounding account and an optional lock date. It tracks how many entries it has imported and links straight to them.
- Journal importer service. The import flow lives in a plain service, kept out of the model so it is unit testable. It paginates pay runs, keeps the finalised, recent and not yet imported ones, fetches each journal, resolves account and tax per item, and builds one balanced account move per run.
- Account and tax mapping fields. An Employment Hero account code on the account, an Employment Hero tax code on the tax, and a pay run id stamp on the move. The prefix keeps these distinct from any localisation fields, so both can live on one database without clashing.
- Scheduled import. A cron iterates every configured bridge with its company in context, wraps each in its own error boundary so one failing bridge never aborts the others, and runs silently. The same action is a single button on the bridge form.
- Employee payslip records. An optional payslip model carries the employee level earnings, tax, deduction and super breakdown pulled through a configurable mapping, for reference and reporting alongside the aggregate accounting entry, since Community has no payslip model of its own.
Honest about the edges
What this does not do, so nothing surprises you.
- Import is one direction only, from the payroll platform into Odoo accounting. Nothing is written back to Employment Hero.
- This module posts the accounting entry. It does not run Odoo payroll, calculate pay, or produce payslips of record. Community has no payslip engine and this does not add one.
- Only finalised pay runs are imported. Draft or in progress runs are ignored until they are finalised at the source.
- Importing is triggered by the scheduled job or a manual click, not by a live webhook. The push delivery path is a separate module in the suite.
- Account and tax codes must be mapped, or a matching Odoo account code present. An item with no account code, or a real tax code that maps to nothing, stops that pay run rather than guessing.
- A pay run must balance within a cent of rounding. A genuinely unbalanced journal is refused, not forced to post.
- Requires the Employment Hero base and sync modules from the same suite, plus stock Community Accounting. No Enterprise dependency.
- Payslip detail source paths are configuration data shipped as a sensible default and meant to be tuned to your payload, not a verified field for field map of every plan.
Employment Hero payroll Odoo, KeyPay journal import Odoo, payroll to general ledger, pay run accounting integration, import pay run journal entries, superannuation PAYG posting Odoo, payroll journal sync Odoo 16, idempotent payroll import, multi company payroll Odoo, Odoo Community payroll accounting
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.
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.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Real-time fiscalisation of customer invoices and credit notes with the Mauritius Revenue Authority e-Invoicing (E...
The Canada country pack for the ERP Heritage Employment Hero integration
A dependency free asynchronous job queue that runs long running and fan out work out of band of the request that...
Post Irish payslips to the general ledger on the Irish chart of accounts
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) • Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 4322 |
| Technical Name |
eh_hero_payroll_bridge |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module