Employment Hero Documents Sync
Bring certifications and employee document records out of the people platform and into Odoo, where stock Community has no model for either.
Store price is USD 117 all-in: installing this also pulls the 2 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Documents Sync
Models Community does not ship
Stock Odoo Community has no HR certification record and no employee document register. This module adds eh.hr.certification and eh.hr.document, both message tracked, both scoped per company, populated straight from the people platform.
Two way where it is real, pull where it is not
Certifications sync both ways: edits in Odoo push back through create and update endpoints, edits upstream pull in, governed by a newest wins policy. Document records pull in. Metadata and source URL only. The binary file is not downloaded in this version.
Endpoints and mappings are data
Every endpoint, field mapping and sync job ships as a data record. Source paths are starter defaults you point at your own organisation's payload shape from the interface. No Python edit, no fork, no upgrade conflict on your changes.
Day in the life
A new ticket of first aid certificates clears training
The certification sync job runs and pulls the new completions from the people platform. Each one resolves to its Odoo employee through the external id cross reference and lands on eh.hr.certification with issue date, expiry and status, tracked in the chatter. A record already present and unchanged is skipped by payload hash, so the run never duplicates. A certificate a manager corrected in Odoo is pushed back on the same pass under the newest wins policy, with a stable idempotency key so a retried write is deduplicated rather than doubled. Document records for the same employees register their title, type and source URL, linking back to the platform for the file.
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 record is keyed by its external id through a unique cross reference, and a payload hash skips inbound rows that have not changed, so re running a job or replaying a delivery never creates duplicates.
Transient failures (5xx, timeouts) and 429 are retried with exponential backoff plus jitter. A server Retry-After header is honoured and clamped so a hostile or buggy value cannot stall the worker.
A client side token bucket paces requests per rate group to avoid 429 storms before they start, and a real 429 from the server is backed off and retried inside the request loop.
A targeted single record pull on the webhook path is forced to newest wins regardless of the job policy, so an older snapshot arriving late never overwrites a newer record. A delivery with no timestamp is skipped rather than allowed to win.
Outbound creates and updates carry a stable Idempotency-Key per Odoo record, so a retried write is deduplicated by the vendor instead of producing a second certification.
OAuth2 access tokens refresh lazily before expiry with a safety leeway, are stored encrypted at rest, and a token response missing an access token is rejected rather than written half formed.
An employee relation resolves through the external id cross reference. A certification whose employee has no cross reference yet is reported on the run rather than silently attached to the wrong person.
Field mappings ship noupdate so your tuned source paths survive a module upgrade, and a non matching path leaves the optional target empty instead of failing the whole batch.
What is inside
Built to do the job, end to end.
- Two HR records. eh.hr.certification (name, reference, issue date, expiry, status, employee, company) and eh.hr.document (title, type, source URL, upload date, employee, company). Both inherit mail.thread and mail.activity.mixin for chatter and activities, both ordered for a clean list view.
- Endpoints as data. Document list and create, per employee certification detail, and org level certification create and update endpoints ship as eh.endpoint records with paths, page style, items path, page size and rate group set, ready to call through the shared client.
- Field mappings. Starter mappings for certification and document, each with sequenced mapping lines, date transformers and an external matcher that resolves the employee by external id. Shipped noupdate so your edits are not overwritten on upgrade.
- Sync jobs. A two way certification job (pull list, push create and update, newest wins) and a pull document job, both wired to their endpoint, mapping, external id path and conflict policy, ready to schedule or trigger.
- Security and scoping. Access rules and record rules ship for both models, and every record carries a company field so the data respects multi company boundaries.
- Tests. Shipped tests exercise the certification pull creating and linking a record to its employee, and the two way push updating an existing record by PATCH against a scripted API.
Honest about the edges
What this does not do, so nothing surprises you.
- Document files are not downloaded. The connector stores document metadata and the source URL only and links back to the people platform for the binary. Pulling files into ir.attachment is planned for a later version.
- The document pull job ships ready, but the platform exposes documents as an employee sub resource, so a deployment drives it per employee (supplying the employee id) rather than one org wide automatic pull out of the box.
- Two way sync applies to certifications. Document records are pull only in this version.
- Mapping source paths are starter defaults aligned to a common payload shape. You confirm and tune them against your own organisation's API response before relying on the sync.
- Inbound webhook delivery is handled by the shared sync engine. This module ships the models, mappings and jobs that the webhook path drives, not a standalone HTTP receiver of its own.
- This module depends on the Employment Hero base and sync modules and a configured connection to the people platform. It does not provision platform credentials for you.
Employment Hero Odoo, Employment Hero documents sync, HR certification Odoo, employee qualification tracking Odoo, employee document register Odoo, Odoo Community HR integration, people platform connector Odoo, two way HR sync Odoo, certification expiry tracking, Odoo 19 HR connector, external id matching Odoo, idempotent API sync Odoo, OAuth Odoo HR integration, multi company HR 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.
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 19 Community
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...
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 3929 |
| Technical Name |
eh_hero_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