Back

What is the Human Resources scope?

The HR scope covers everything about your people: who they are, where they sit in the organisation, what they're skilled at, and how they're performing. It ships in two modules β€” core_hr for the master records and structure, and core_hr_talent_management for goals, KPI, and competency tracking.

Together they give you a full employee lifecycle backbone: from creating an employee with their full personal & work profile, organising them into departments and job positions, tagging their skills and experience, all the way to setting OKRs, defining KPIs, and building competency frameworks for performance reviews.

The two modules at a glance

πŸ‘€

core_hr

Employee records, departments, job positions, skills, contract types, work locations, hierarchy charts, organisation configuration. The master data foundation.

🎯

core_hr_talent_management

OKR/Goals library, KPI library, Competency library & templates, performance date ranges. Layered on top of core_hr.

Employee lifecycle in HMX

Hire→ Profile + Contract→ Org Assignment→ Goals + KPI→ Performance Review→ Promotion / Exit

Steps 1–3 are owned by core_hr; steps 4–5 by core_hr_talent_management.

What ships in the HR scope

CapabilityModuleKey Models
Employee master + personal/work profilecore_hrhremployee, hremployeeaddress, hremployeefamily, hremployeeeducation, hremployeebankaccount, hremployeeemergencycontact
Organisation structurecore_hrhrdepartment, hremployeejob, hrhierarchychart
Reference master datacore_hrhrcontracttype, hrworklocation, hrskills, hremployeegrade, hrjobclassification, hrjobexperiencelevel, hrrace, hrreligion, hrmaritalstatus, hremployeerelation, hremployeecategory, hrcompanyholiday, hryears
Goals (OKR) library & templatescore_hr_talent_managementhrgoals, hrgoalstemplate
KPI library & templatescore_hr_talent_managementhrkpilibrary, hrkpitemplate
Competency library & templatescore_hr_talent_managementhrcompetencylibrary, hrcompetencytemplate, hrcompetencycategory, hrcompetencylevel
Performance date rangescore_hr_talent_managementhrperformancedaterange

Prerequisites

  • base module β€” provides Companies, Branches, Countries, Currencies that HR records reference.
  • mail module β€” provides activity logging on employees, departments, and goals.
  • webx_widget β€” used by the org chart, kanban, and several form widgets.
  • At least one Company set up. HR records default to the active company on creation.

Install & bootstrap

Install core_hr

Install the master module first. It seeds the four HR groups on first install.

hmx update install core_hr --alias=default --noinput

Install talent management (optional)

If you'll use OKR / KPI / Competency tracking, install the talent module too.

hmx update install core_hr_talent_management --alias=default --noinput

Verify HR roles

Open Settings → Users & Companies → Groups, filter "HR" β€” you should see four roles.

Settings / Groups
Groups (filter: "HR")
NameModuleUsers
HR Super Usercore_hr0
HR Managercore_hr0
HR Supervisorcore_hr0
HR Usercore_hr0
Four HR tiers seeded on install

Seed reference data

Before creating employees, seed the lists they reference: Departments, Job Positions, Contract Types, Work Locations, Skills.

Assign HR roles to people

Open Settings → Users, pick a user, add the appropriate HR role.

Open the HR menu and create your first employee

After refresh, an HR top-level menu appears. Click HR → Employees to start onboarding.

Install order & data seeding

  • core_hr.__hmx__.py declares depends: ["base", "mail", "webx_widget"].
  • core_hr_talent_management.__hmx__.py depends on core_hr. Seeds two data files (evaluation roles + competency categories).
  • Both modules ship Vue assets under static/vue/views/*.

What is an Employee record?

An Employee in HMX is the canonical record for a single person working for your organisation. It captures their personal identity (name, gender, photo, contact), work assignment (company, branch, department, job position, manager, work location), contract details, plus pluggable child records for addresses, family, education, skills, and bank accounts.

Most other HR features hang off this record: hierarchy is built from manager references; OKRs, KPI assignments, and competency profiles all reference an hremployee.

How to create an employee

Open the Employee list

Navigate to HR → Employees → Employees. The default list shows name, work email, job title, department, and manager.

HR / Employees
+ Create
NameWork EmailJob TitleDepartmentManager
Sarah Limsarah.lim@acme.coSenior EngineerEngineeringAndi Rahman
Andi Rahmanandi@acme.coEngineering LeadEngineeringβ€”
Employee list β€” your team roster

Click Create & fill the basics

Enter Name (required), Work Email (required), Job Title, optional Photo. Company defaults to your active company.

Assign organisational fields

Pick a Branch, Department, Job Position, and Manager. The Manager field accepts another Employee β€” this builds the hierarchy chart automatically.

New Employee
Name
Sarah Lim
Work Email
sarah.lim@acme.co
Job Title
Senior Engineer
Photo
πŸ“· sarah.jpg
Work Information
Company
Acme HQ
Branch
Jakarta Main
Department
Engineering
Job Position
Backend Engineer
Manager
Andi Rahman
Work Location
Remote β€” ID
Personal + work assignment β€” the core of every employee

Add supplementary records (tabs)

The form has tabs for child models: Personal, Skills, Contract, Bank Accounts, Emergency Contact.

PersonalSkillsContractBankEmergency Contact
Skills
SkillLevelYears
PythonExpert7
PostgreSQLAdvanced5
Vue.jsIntermediate2
Skills tab β€” pick from the Skill master, set level & years

Save the employee

On save, the Employee record is created. They appear in the org chart and can be assigned KPIs / OKRs from the Talent module.

Employee rules to know

🏷️

Categories (Tags) are computed

The Categories M2M field is auto-computed via _compute_m2m_fields. Don't write to it directly.

🌍

Country phone codes are FK references

Both country_mobile_code and country_phone_code point to basecountry.

πŸ”

Manager is just another Employee

There is no separate "Manager" model. The hierarchy is built by employees pointing to other employees.

HrEmployee model overview

FieldTypeNotes
nameCharField(255)Required, indexed via ordering
job_titleCharField(255)Free-text β€” separate from Job Position FK
work_emailCharField(255)Required
companyFK → basecompanyDefault = active company; SET_NULL on delete
branchFK → basebranchOptional
categoriesM2M → hremployeecategoryComputed (_compute_m2m_fields), stored
country_mobile_code, country_phone_codeFK → basecountrySET_NULL on delete
+ inherited from imagemixinβ€”Adds image, image_small, etc.

Departments

A Department is a hierarchical group of employees. Departments belong to a Company; the (company, name) pair must be unique. A Department can have a parent Department for nesting and a manager who is an Employee.

How to create a department tree

Open Departments

Navigate to HR → Configuration → Departments. Start with the top-level (no parent), then add children.

Departments
NameParentManagerCompany
Engineeringβ€”Andi RahmanAcme HQ
↳ BackendEngineeringSarah LimAcme HQ
↳ FrontendEngineeringβ€”Acme HQ
Salesβ€”Maya PutriAcme HQ
A simple two-level department tree

Set the manager

Pick an existing Employee as Manager. They become the default approver for actions originating from this department.

Save β€” uniqueness is enforced

A unique constraint on (company, name) prevents duplicate department names within the same company.

Job Positions

A Job Position is the role an employee holds. Positions belong to a Department and Branch β€” the (name, company, branch) triple must be unique.

How to create a job position

Open Job Positions

Go to HR → Configuration → Job Positions.

Fill in the form

Enter Name, optional Description, pick the Company, Branch, and Department.

New Job Position
Name
Backend Engineer
Department
Engineering / Backend
Branch
Jakarta Main
Company
Acme HQ
Job Position attached to a Department + Branch

Save β€” assign to employees

Once saved, the position appears in the dropdown on the Employee form.

Hierarchy Chart

The Hierarchy Chart auto-renders an organisational tree from the manager references on Departments and Employees. Configure it via HR → Configuration → Hierarchy Chart Configuration.

Hierarchy Chart β€” Acme HQ
CEO β€” Andi Rahman
VP Eng β€” Sarah Lim
VP Sales β€” Maya Putri
CFO β€” Bayu Saputra
Hierarchy Chart β€” auto-built from manager FKs

Org models reference

ModelConstraintKey fields
hrdepartmentUniqueConstraint(company, name)name, parent, manager → hremployee, company
hremployeejobunique(name, company, branch)name, description, company, branch, department
hrhierarchychartβ€”Configuration model for the chart widget

Why seed reference data?

Most fields on the Employee form are dropdowns into master lists β€” Skills, Contract Types, Work Locations, Job Classifications. Seeding these once at setup time gives you consistent options to pick from, instead of free-text typos that ruin reports later.

Reference lists shipped with core_hr

ListWhat it isTypical entries
Contract Type hrcontracttypeEmployment relationship classifierFull-time, Part-time, Contractor, Intern
Work Location hrworklocationWhere the employee actually worksHQ Office, Plant Bekasi, Remote β€” ID, Remote β€” SG
Skills hrskillsMaster skill cataloguePython, Negotiation, AutoCAD, English
Employee Grade hremployeegradePay grade or seniority levelG1 β€” Junior, G2 β€” Mid, G3 β€” Senior, G4 β€” Lead
Job Classification hrjobclassificationFunctional family classifierEngineering, Sales, Support, Admin
Job Experience Level hrjobexperiencelevelYears-of-experience bandingEntry, Junior, Mid, Senior, Principal
Employee Category hremployeecategoryTags applied (computed) on employeesHigh Performer, On Probation, Onsite-only
Employee Relation hremployeerelationFamily relation type for emergency contactsSpouse, Parent, Child, Sibling
Race / Religion / Marital StatusDemographic fields (compliance-driven)Local terms per regulatory requirement
Company Holiday hrcompanyholidayPublic holidays per company / branchNew Year, Idul Fitri, National Day
Years hryearsYear master used by Talent date ranges2025, 2026, 2027

Adding an entry to a reference list

Open the list

Each reference list lives under HR → Configuration → <list name>.

Fill the form

Most lists need just Name. Some have a Code, Description, or Company scope.

New Skill
Name
Python
Skill Type
Technical
Description
Backend programming language
Adding "Python" to the Skills master

Save β€” it's now pickable on every employee

From this point, when editing an employee, the new entry is in the dropdown for the relevant field.

What is a Goal in HMX?

A Goal (model hrgoals, surfaced as OKR Library) is a reusable objective at three levels: Company, Team, or Individual. Goals can be aligned hierarchically, and the achievement score can be aggregated from sub-goals using a formula (sum / average / max / min / median).

How to create an OKR

Open the OKR Library

Navigate to HR → Talent → OKR Library.

Click Create & pick the goal type

Choose between Company, Team, or Individual. Enter the Goal Title and (optionally) align it with a parent goal.

New Goal
Goal Title
Increase product NPS to 60
Goal Type
Company Goals
Align With
β€” (top-level)
Objective Type
Percentage
A top-level Company OKR β€” "Increase NPS to 60"

Enable Sub Goals (optional)

Tick Sub Goals and pick a Formula (Average / Sum / Max / Min / Median). The achievement score auto-aggregates from child goals.

Sub-Goals β€” Formula: Average
Sub-GoalTypeScore
Reduce app crashes by 50%Team80%
Improve onboarding completion to 90%Team65%
Launch in-app feedback widgetTeam100%
Aggregated (avg)81.7%
Parent score = average of children, computed automatically

Save & assign to people

Once saved, the OKR sits in the library and can be picked when creating Goals Templates or assigning to specific employees.

HrGoals model

FieldChoices / Type
nameCharField(255) β€” Goal Title
goal_types'company' | 'team' | 'individual'
goals_parent_idFK → self (alignment)
subgoal_is_activeBooleanField β€” toggle sub-goal aggregation
formula'none' | 'average' | 'sum' | 'max' | 'min' | 'median'
achievement_scoreFloatField β€” % achieved
objective_type'percentage' | 'kpi_based'

KPI Library

A KPI is a measurable indicator with a name, code, computation mode, and a comparison rule (higher is better, or lower is better). KPIs live in a central library so you can reuse them across employees and templates.

How to add a KPI to the library

Open KPI Library

Navigate to HR → Talent → KPI Library, click Create.

Fill in the KPI

Enter Name, Code, optional Description, pick Computation Mode and Comparison.

New KPI
Name
Customer Retention Rate
Code
CRR
Computation Mode
Recorded Manually
Comparison
↑ Higher the better
A retention KPI β€” manually recorded each quarter

Save & reference from KPI Templates

Once saved, the KPI is available in HR → Talent → KPI Templates for grouping into role-specific scorecards.

Competency Library

Competencies are capabilities with defined levels (Beginner → Expert) grouped under categories. Talent management ships seed data for common categories.

Competency Library
CompetencyCategoryLevels
Strategic ThinkingLeadershipL1 → L5
Backend ArchitectureTechnicalL1 → L5
NegotiationFunctionalL1 → L5
Competency Library entries grouped by Category

Talent models

ModelPurpose
hrkpilibraryCatalogue of KPIs (name, code, computation, comparison)
hrkpitemplateGroup KPIs into role-specific scorecards
hrcompetencylibraryCatalogue of competencies
hrcompetencytemplateGroup competencies into role-specific frameworks
hrcompetencycategoryCategories (Leadership, Technical, Functional, …)
hrcompetencylevelLevel definitions (L1–L5 by default)
hrjobcompetencydetailBridge: Job ↔ Competency requirements
hremployeetalent / hrjobtalentPer-employee / per-job talent profiles
hrperformancedaterangePeriod definitions used by the review cycle

The four HR roles

RoleWho gets itTypical capability
HR Super UserHR System Owner / IT-HRConfigure modules, override anything, manage roles. Reserved for 1–2 people.
HR ManagerHR Director / HRBP LeadRead all employees, edit master data, run reports, manage performance cycles.
HR SupervisorHRBPs / People Ops SpecialistsEdit employees in their scope, review goals, manage onboarding flows.
HR UserHR Coordinators / People Ops staffDay-to-day employee data entry, basic lookups, cannot change master data.

Picking the right role

⚠️

Don't grant Super User widely

HR Super User can override everything in the HR scope. Reserve it for 1–2 people who actually run the system.

πŸ“‹

Manager ≠ Department Manager

The HR Manager role is about system access, not the manager field on a Department. A Department Manager who isn't part of HR doesn't need this role at all.

Group records (core_hr)

<record id="hr_group_super_user" model="group"><field name="name">HR Super User</field></record>
<record id="hr_group_manager"    model="group"><field name="name">HR Manager</field></record>
<record id="hr_group_supervisor" model="group"><field name="name">HR Supervisor</field></record>
<record id="hr_group_user"       model="group"><field name="name">HR User</field></record>

External XML IDs: core_hr.hr_group_super_user, core_hr.hr_group_manager, core_hr.hr_group_supervisor, core_hr.hr_group_user. core_hr_talent_management ships its own role set.

Module manifests

core_hr

  • Depends: base, mail, webx_widget
  • Data: 22 files (security + 20 view XMLs + final menu file)
  • Assets: CSS + JS + Vue under static/ registered to webx.assets_backend

core_hr_talent_management

  • Depends: base, core_hr, webx_widget, mail
  • Data: security + 2 seed XMLs + 11 view files
  • Assets: Kanban + field widgets (CSS, Vue templates loaded before JS, then JS)

All HR models (37 total)

core_hr (25 models)

ModelPurpose
hremployeeEmployee master record
hremployeeaddressAddress records (per-employee)
hremployeefamilyFamily / dependent records
hremployeeeducationEducation history
hremployeebankaccountBank account info
hremployeeemergencycontactEmergency contacts
hremployeeskillBridge: Employee ↔ Skill
hremployeerelationRelation type master
hremployeecategoryTag categories applied to employees
hremployeegradePay grade / seniority
hremployeejobJob Position master
hrmultiplejobMulti-job assignment per employee
hrdepartmentDepartment (hierarchical)
hrjobclassificationJob classification master
hrjobexperiencelevelExperience level master
hrcontracttypeContract type master
hrworklocationWork location master
hrskillsSkill master
hrrace / hrreligion / hrmaritalstatusDemographic masters
hrcompanyholidayPublic holidays per company
hryearsYear master (used by Talent dates)
hrresumelineResume line items
hrorgconfigurationOrganisation chart configuration
authgroupExtended Auth Group from base

core_hr_talent_management (12 models)

ModelPurpose
hrgoalsOKR Library β€” reusable goals
hrgoalstemplateOKR templates
hrkpilibraryKPI master library
hrkpitemplateKPI templates
hrcompetencylibraryCompetency master
hrcompetencytemplateCompetency templates
hrcompetencycategoryCompetency categorisation
hrcompetencylevelLevel definitions
hrjobcompetencydetailBridge: Job ↔ Competency requirement
hremployeetalentPer-employee talent profile
hrjobtalentPer-job talent definition
hrperformancedaterangePerformance period date ranges