Employment Hero Payroll Bridge
Post finalised pay runs from the people and payroll platform into Odoo accounting as balanced journal entries, on a schedule, never the same pay run twice.
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
The ledger posts itself
A finalised pay run becomes one balanced journal entry in Odoo, with wages, tax liabilities and superannuation on the right accounts. Your team stops retyping payroll totals into the general ledger by hand.
Never the same pay run twice
Each entry remembers its pay run id, backed by a database uniqueness guard. Click import, let the schedule run, retry after a hiccup, all three land exactly one entry per pay run, never a duplicate.
It refuses to post a wrong entry
An unbalanced pay run, an unmapped account code or a non numeric amount is refused loudly and that one pay run is skipped, so a bad figure never posts a wrong but balanced looking entry into your accounts.
Day in the life
Friday pay run, Monday ledger, no spreadsheet in between
Payroll finalises a pay run in the Employment Hero platform on Friday. The weekly job runs, reads every finalised pay run once, skips the ones already imported and the ones before your lock date, then pulls each remaining journal. Every line is matched to an Odoo account by its Employment Hero code, taxes are tagged for the activity statement, and one balanced entry per pay run is created and posted into the general journal you nominated. If one pay run has an unmapped code it is skipped and logged, the rest still post. Monday morning the ledger already reflects wages, PAYG and super, and you fix the single flagged code at your leisure.
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.
Every created entry is stamped with its Employment Hero pay run id. A pre scan filters candidates, a per pay run re check runs just before create, and a database unique constraint on company plus pay run id is the final guard, so concurrent runs and re runs still converge on one entry per pay run.
One bad pay run (an unmapped account, a non numeric amount, a locked period) is rolled back inside its own savepoint and skipped with a logged reason. The cursor stays usable and every other pay run in the batch still posts.
The pay run list is read page by page through the shared client, so a business with a long pay run history is walked fully rather than capped at the first page.
The underlying connection paces requests with a token bucket and retries transient failures and 429 responses with exponential backoff, jitter and any server supplied Retry-After, so a busy API does not abort an import.
OAuth2 access tokens are refreshed under a row lock by the shared connection layer, so a long running import does not fail when a token expires mid batch.
Account lines resolve first by the Employment Hero account code, then fall back to the matching Odoo account code, so accounts already coded the same way need no extra setup. A real tax code that matches nothing is refused rather than silently dropped.
A pay run in another currency posts as a multi currency move. The foreign side is the source of truth and is balance checked first, then per line conversion drift is absorbed on a currency aware rounding line, so both the company side and the foreign side net to zero.
A sub cent residual from per line rounding is absorbed on a nominated rounding account so the move still posts, while a real imbalance beyond the rounding tolerance is refused. A rounding account locked to the wrong currency is flagged early with the fix.
An optional lock date keeps historical pay runs untouched. Only pay runs paid strictly after that date are imported, so go live without back posting years of history.
Each bridge names its company, connection and journal, and record rules scope connections and journals to that company, so several companies import in parallel without crossing books.
What is inside
Built to do the job, end to end.
- Pay run bridge configuration. One bridge names the payroll connection to pull from, the general journal to post into, an optional lock date and a rounding account. It tracks how many entries it has imported and opens them in one click.
- Account and tax code mapping fields. An Employment Hero Account Code field on accounts and an Employment Hero Tax Code field on taxes drive the mapping. Accounts fall back to the Odoo code, taxes attach tax report tags so the activity statement or VAT report still reports correctly.
- Scheduled and manual import. A weekly scheduled job imports every configured bridge per company, and an Import button on the bridge runs it on demand with a success notification. Both paths are idempotent.
- Idempotency stamp on journal entries. Every posted entry carries its pay run id, indexed and protected by a per company uniqueness constraint, and is filterable in the entries list so you can trace any entry back to its source pay run.
- Employee payslip records. An optional payslip pull stores the employee level earnings, tax, deductions, super and net breakdown for reference and reporting. This is read only reference data and does not drive Odoo payroll.
- Built on the integration suite engine. Connection, pagination, rate limiting, retry and OAuth2 token handling come from the shared Employment Hero base and sync modules, so the bridge focuses on turning a pay run into a correct journal entry.
Honest about the edges
What this does not do, so nothing surprises you.
- One way only. This module pulls finalised pay runs into Odoo and posts journal entries. It does not write anything back to the Employment Hero platform.
- No webhooks in this module. Imports run on the weekly schedule or when you click Import. There is no real time push trigger here, though the shared engine handles the API transport, rate limits and retries.
- Imports finalised pay runs only. Draft or in progress pay runs are skipped until they are finalised at the source.
- No journal conflict resolution. The model is import once. If a pay run is already imported it is skipped rather than merged or reconciled against a changed source.
- Requires the Employment Hero base and sync modules and a configured payroll connection. It uses stock Odoo Community Accounting and does not require Enterprise.
- Account and tax codes must be mapped, or the matching Odoo codes must already line up. An unmapped account code or an unresolved real tax code skips that one pay run with a clear message.
- Posts the aggregate accounting entry per pay run. It does not generate Odoo payslips. The employee payslip records it can pull are read only reference data, and their field mapping is template grade and tunable to your payload.
Employment Hero payroll Odoo, KeyPay journal import Odoo, payroll journal entry import, pay run to general ledger, payroll accounting integration Odoo, wages tax superannuation posting, account code mapping payroll, tax code mapping payroll, idempotent payroll import, scheduled payroll sync Odoo, multi currency payroll journal, Odoo Community payroll bridge, payroll to accounting automation, PAYG super journal Odoo
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 | 4370 |
| 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