Employment Hero Documents
Pull Employment Hero documents into the Odoo Documents app, filed under one folder, tunable as data without writing code.
Store price is USD 196 all-in: installing this also pulls the 3 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Documents
Documents live where the work is
Employment Hero documents land in the Odoo Documents app under a dedicated Employment Hero folder, so files sit beside the rest of your records instead of in a separate portal or an inbox.
Mapping ships as editable data
The folder, endpoint, field mapping and job install as data rows you can adjust from the user interface. Point the source paths at your organisation's payload shape with no Python change and no module upgrade.
Idempotent by external id
Every document is keyed by its Employment Hero id through a cross reference table. Run the job once or a hundred times and it never duplicates a record; an unchanged payload is skipped, not rewritten.
Day in the life
A scheduled pull that just keeps the folder current
The pull job runs on its schedule and asks the Employment Hero HR API for documents, one page at a time at 100 records a page. For each item it reads the external id, looks it up in the cross reference, and either creates a new link record under the Employment Hero folder or updates the one already linked. New documents appear filed and named; nothing is duplicated. A document that fails to map is logged as one error line and the run keeps going, ending in a partial state rather than aborting. When the run finishes, the sync run shows counts for created, updated, skipped and failed, and the API log shows each call with its status and duration. Nobody chases a certification by email or copies a file out of a portal by hand.
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.
Records are keyed by external id in a cross reference table that is unique per model, connection and external id, so re running the job never creates a second copy of the same document.
The mapped values plus a mapping fingerprint are hashed; a payload that produced the same result last run is skipped, so a steady state run rewrites nothing and editing the mapping forces a clean rewrite next run.
Each record is processed inside its own savepoint. One document that fails to map or write is rolled back and logged as an error line on its own; every other record in the page still syncs and the run ends partial.
The endpoint fetches page by page at 100 records a page and stops when a page returns fewer than a full page, so a large document set is pulled completely without a manual page count.
The transport retries only transient failures, a timeout, a 5xx or a 429, with exponential backoff and jitter, and honours a Retry-After header when the server sends one. Everything else raises at once.
Calls pass through a token bucket grouped per product, so a multi worker deployment paces itself under the HR API limits instead of drawing a 429 storm.
The job tracks an updated_at path and only advances its cursor to the latest record that processed cleanly and strictly before any failure, so a failed or out of order document is re fetched next run rather than skipped forever.
The destination folder is resolved by name with an Employment Hero default, so renaming or moving the folder does not break filing and the data record is marked no update so an upgrade will not overwrite your change.
A connection carries a required company, and the cross reference stores that company, so documents are linked per connection and per company rather than mixed across companies.
The HR platform authenticates with OAuth2 Bearer; the access token is refreshed lazily when expired and rotated tokens are stored encrypted at rest, so a long lived schedule keeps running without a manual reconnect.
What is inside
Built to do the job, end to end.
- A destination folder. A documents.folder named Employment Hero, shipped as a no update record so a deployment can rename or move it without an upgrade overwriting the change.
- An HR document endpoint. A GET endpoint on the Employment Hero HR organisation documents path, with page based pagination, a 100 record page size, the items read from a data.items envelope and an HR rate group.
- A pull field mapping. A documents.document mapping with the document name (required), the type defaulting to a link, the source url, and the folder resolved by name through the relation by field transformer.
- A scheduled pull job. An eh.ent.document.pull job wired to the endpoint and mapping, keyed on the payload id with an updated_at path for delta, and an Employment Hero wins conflict policy on inbound.
- Idempotent upsert engine. The shipped ERP Heritage sync engine resolves each record by external id, creates or updates in place, skips unchanged payloads, and isolates per record failures in savepoints.
- Audited runs. Every run writes a sync run with created, updated, skipped and failed counts, a per record line, and an API log entry per call with status and duration for compliance review.
Honest about the edges
What this does not do, so nothing surprises you.
- Sync is one direction only, from Employment Hero into Odoo. This module ships a pull job and does not push documents back to Employment Hero.
- Synced documents are stored as link records that point at the Employment Hero copy. This module maps the document name and url and does not download or store the file binary in Odoo.
- This module is configuration on top of the ERP Heritage Employment Hero connector and sync engine, which install with it through eh_hero_hr. It is not a standalone connector.
- It does not ship a webhook subscription. Documents refresh on the scheduled pull job, not on a real time push from Employment Hero.
- The starter mapping reflects a common payload shape. If your Employment Hero organisation returns documents under different field names, adjust the source paths on the shipped mapping rows.
- Built and tested for Odoo 16 Community. The Documents app must be installed; it is listed as a dependency.
- The shipped folder and mapping are seeded once on install as no update data, so later changes are yours to make and are not overwritten on upgrade, which also means new starter rows are not pushed to an existing install.
Employment Hero documents, Employment Hero Odoo integration, Odoo Documents app sync, HR document import Odoo, Employment Hero connector, employee document sync, certification sync Odoo, Odoo 16 HR integration, idempotent document sync, scheduled document pull, field mapping as data, people platform integration
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.
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
Interactive drag and drop Gantt planner for Odoo 16 Community project tasks with a deterministic server side sche...
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Documents (documents)
• Discuss (mail) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 4059 |
| Technical Name |
eh_hero_ent_documents |
| 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