Employment Hero Singapore
Singapore NRIC/FIN and CPF identifiers on the employee record, encrypted at rest and pulled from Employment Hero.
Store price is USD 175 all-in: installing this also pulls the 4 paid ERP Heritage modules it depends on.
Why this module
Employment Hero Singapore
NRIC/FIN and CPF on the employee
Adds the two Singapore statutory identifiers an Employment Hero payroll integration needs to the standard Odoo employee record, with no custom fields or one off scripts to maintain.
Encrypted, HR only, never leaks on push
Both identifiers are stored as ciphertext and decrypted only for HR users. They are pull only, and a hard guard drops any masked or placeholder value before a payload is sent, so they are never pushed back to Employment Hero.
Data driven, idempotent, audited
The profile and mapping lines are data, not code. They ride the connector's idempotent upsert and append only sync runs, so an employee sync is repeatable and traceable without bespoke parsing.
Day in the life
Onboarding a Singapore hire
An employee is created in Employment Hero with their NRIC/FIN and CPF account number. On the next employee sync the connector reads the record, the two Singapore mapping lines route the identifiers into the employee form, and they are written to encrypted columns. An HR user opens the employee, sees the values under the Employment Hero (Singapore) group, and a payroll officer without HR rights does not. Run the sync again and nothing duplicates: the external id cross reference upserts the same employee. The identifiers stay owned upstream, so a later push of other employee changes never sends them back.
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.
The NRIC/FIN and CPF mapping lines are direction pull. The connector reads them into Odoo but never includes them in a push payload, so Employment Hero remains the system of record and a local edit cannot overwrite the upstream identifier.
If the encryption key is unavailable the field renders a placeholder, and masked identifiers render as asterisks. The push builder drops any such display artifact before sending, so a placeholder or mask can never leave and corrupt the upstream value.
Both identifiers live in ciphertext columns decrypted only on read for HR users. A raw database row or dump shows the fernet tagged ciphertext, never the NRIC or CPF number in clear.
An upgrade from an install that stored these as plaintext encrypts each existing value into the ciphertext column and drops the orphan plaintext column. The migration is idempotent: an already encrypted value is copied verbatim and a second run is a no op.
A mapping line marked skip if empty is omitted when the source value is absent, so an employee without a CPF number on file syncs cleanly instead of writing a blank or failing the record.
Employee sync resolves the record through an external id cross reference scoped per connection, so re-running a sync updates the same employee rather than creating duplicates, even across multiple connections holding the same id.
The push path skips a mapping target that is absent on the running Odoo version rather than raising, keeping the integration robust when a field exists in one series but not another.
What is inside
Built to do the job, end to end.
- Two encrypted employee fields. eh_nric (NRIC/FIN) and eh_cpf_number (CPF Number) on hr.employee, each backed by a ciphertext column with a compute and inverse, restricted to the HR user group, shown under an Employment Hero (Singapore) group on the employee form.
- Singapore country profile. A single eh.country.profile record for Singapore (code SG, linked to the base Singapore country), unique per country, so the deployment and the sync engine can see the localisation is active.
- Two pull only mapping lines. Mapping lines on the shared employee mapping that route the source nric and cpf_account_number paths into the two Odoo fields. Source paths are tunable data rows you can adjust to your Employment Hero payload shape.
- PII migration script. A versioned post migrate step that encrypts any legacy plaintext NRIC and CPF values into the ciphertext columns and drops the orphan columns, idempotently and without logging the clear text.
- Automated tests. A test suite covering profile registration, field presence, encryption at rest, the pull only push omission for both identifiers, the key unavailable branch, and the legacy data migration.
Honest about the edges
What this does not do, so nothing surprises you.
- Adds Singapore employee fields, the country profile, and mapping lines only. It does not run payroll, calculate CPF contributions, or file any statutory return.
- It does not validate the format of the NRIC/FIN or CPF number. The fields accept what Employment Hero sends; there is no checksum or pattern check.
- The NRIC/FIN and CPF number are pull only. The connector reads them into Odoo but does not push them back, so edits made in Odoo are not sent upstream.
- It performs no sync on its own. The actual transfer, queue, retry, and audit behaviour comes from the connector and sync engine modules this pack depends on.
- It requires eh_hero_country_base and eh_hero_hr, which in turn pull in the connector and sync engine. It is a localisation layer, not a standalone integration.
- Encryption at rest depends on the shared crypto service and the cryptography package. Without an available key, fields render a placeholder instead of the stored value.
Employment Hero Singapore Odoo, Singapore NRIC FIN Odoo employee, CPF account number Odoo, Employment Hero connector Singapore, Odoo 16 Singapore HR localisation, Singapore payroll integration Odoo, encrypted employee PII Odoo, Employment Hero country pack, Odoo Community HR Singapore, NRIC field Odoo HR
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.
Sync Employment Hero employees, departments and payroll bank details into standard Odoo Community HR over the pla...
Inbound webhook receiver for the Employment Hero people and payroll platform on Odoo 16 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
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 4136 |
| Technical Name |
eh_hero_country_sg |
| 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