Employment Hero Suite Enterprise
One install for the full Employment Hero integration plus the Enterprise overlays: payroll work entries, Planning rosters, the Documents app and Australian payroll context.
Store price is USD 627 all-in: installing this also pulls the 22 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Suite Enterprise
Every overlay arrives together
Install one module and the full Community integration plus all four Enterprise overlays resolve in dependency order. No choosing between overlays and discovering later you missed the one you needed.
Sync that does not duplicate
Every record is keyed by its external id and a payload hash, so re running a job never creates a second copy and an unchanged payload is a no op. One bad record is logged and skipped while the run continues.
Tune mappings without a deploy
The overlays ship endpoints, field mappings and sync jobs as data. A deployment adjusts the shape to its own Employment Hero organisation from the user interface, with no code change and no upgrade overwriting the edits.
Day in the life
A normal day on the suite
You install the bundle once and connect it to your Employment Hero environment. Scheduled jobs pull employees, leave, attendance, timesheets and, with the Enterprise overlays, work entries, rosters and documents into Odoo. A roster change in Employment Hero fires a signed webhook; the receiver verifies the HMAC, dedupes it against earlier deliveries, and queues a targeted pull of just that one record so a retry costs a single request. A finalised pay run flows through the payroll bridge into your journals. When a record changes on both sides, the conflict policy you chose decides the winner, and every run and API call sits in an append only log you can read straight into an audit.
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 redelivered webhook is recognised by its connection and external event id and answered 200 as a duplicate, so a record is never processed twice. A concurrent duplicate that races past the check is caught by a unique constraint inside a savepoint and answered idempotently.
A webhook triggered update is forced to newest wins regardless of the job policy, and a delivery carrying no usable source timestamp is skipped rather than allowed to overwrite a newer record. Per entity deliveries run on an ordered queue channel so two changes to the same record never process concurrently.
Transient failures, timeouts and 429 responses retry with exponential backoff and jitter, honouring a clamped Retry-After. A queue job that keeps failing climbs an exponential backoff to a retry ceiling, then parks in a dead letter state that notifies the handler instead of being silently dropped.
Each record is processed inside its own savepoint, so a failed write rolls back just that record and the run ends in a partial state with the bad record logged as an error line, rather than aborting every record after it.
A create carries a stable idempotency key per Odoo record and an update keys on the payload hash, so a retried write is deduplicated by the vendor instead of creating a second record. An outbound payload identical to the last successful push is skipped to avoid a write storm.
The delta cursor advances only to the latest success strictly before the earliest failure, and holds entirely when a failure has no readable timestamp, so a failed or concurrently changed record is re fetched next run rather than skipped forever.
A delete event archives the linked record when the model supports it, otherwise unlinks it, and a hard delete blocked by a foreign key is recorded as skipped and kept locally rather than dead lettering on every future run.
A cluster wide token bucket meters every worker against one shared budget. When it is exhausted the client refuses to send and raises, so the caller backs off rather than adding to the very 429 storm the limiter exists to prevent.
OAuth2 access and refresh tokens are encrypted at rest, restricted to system administrators and never written to logs. Refresh is lazy, and a key rotation re encrypts every stored token atomically so the store is never left split across two keys.
What is inside
Built to do the job, end to end.
- Community integration core. The connector, the pull and push sync engine with idempotent upsert and explicit conflict policy, the in database queue with retries and a dead letter state, and the inbound webhook receiver with HMAC verification and replay protection. Country packs cover AU, NZ, UK, SG, MY and CA identifier fields.
- Work entries overlay. Brings Employment Hero work and roster data into the Odoo work entries app. Work entry types sync before work entries so the type relation resolves through the external id cross reference. Ships endpoints, a field mapping and ordered sync jobs as data.
- Planning overlay. Brings Employment Hero rosters into the Odoo Planning app as shifts. The shift start and end datetimes are mapped from the roster payload and the resource relation is resolved through the external id cross reference, since Planning derives the employee from the assigned resource.
- Documents overlay. Brings Employment Hero documents into the Odoo Documents app, filed under a dedicated Employment Hero folder. Ships the destination folder, an endpoint, a field mapping and a sync job as data, all tunable without code.
- Australian payroll context. A thin Australian overlay on the work entry sync. It adds superannuation and Single Touch Payroll endpoints and a country scoped work entry mapping variant the engine picks when the company country is Australia. It ships configuration only and creates no new payroll models.
- Audit and operations. Every sync run records per record outcome lines and every API call is logged, so the trail reads into a compliance audit without preparing exports. Dry run previews show what a job would do before it writes anything.
Honest about the edges
What this does not do, so nothing surprises you.
- The four Enterprise overlays require the matching Odoo Enterprise applications: work entries needs hr_work_entry, the Planning overlay needs the Planning app, and the Documents overlay needs the Documents app. The Community core itself runs on Community.
- The overlays this bundle adds are pull only: they bring Employment Hero work entries, rosters and documents into Odoo. The engine supports push and two way sync, but the shipped overlay jobs are configured for inbound sync.
- The Australian payroll overlay ships configuration only. It prepares super and STP endpoints and a country scoped mapping variant for a deployment to wire into its own jobs; it does not create payroll models or run a job out of the box.
- Field mappings ship as starter configuration aligned to the published Employment Hero payload shape. A deployment is expected to tune source paths to match its own organisation before relying on a job in production.
- The in database queue suits light to medium volume without an external broker. Very high throughput integrations should size workers and the rate budget accordingly.
- This is an integration to the Employment Hero people and payroll platform and assumes you hold valid Employment Hero API credentials. It does not include an Employment Hero subscription.
Employment Hero Odoo integration, Employment Hero connector, Employment Hero sync Odoo 17, Odoo HR integration suite, payroll work entries sync, Planning roster sync Odoo, Documents app sync, Australian STP superannuation Odoo, Single Touch Payroll integration, HMAC webhook receiver Odoo, idempotent two way sync, OAuth2 connector Odoo, KeyPay payroll bridge, HR data sync engine, people platform integration
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