Core HR schema¶
Current data contract for Core HR's ServiceNow-side tables. Confirmed against
the live nova-corehcm-sn-app app — not a proposal, not reverse-engineered
from code alone. Supersedes github-private/docs/profile/repos/nova-corehcm-sn-app/tables.md
as the domain's schema reference where the two disagree (see Discrepancies
below) — that file is the auto-synced, code-level component KB; this file is
the reviewed, product-facing contract.
Every table carries domain / Domain Path (ServiceNow Domain Separation) —
omitted from most attribute blocks below for readability; assume present
unless a table explicitly shows otherwise.
Diagram¶
erDiagram
Person ||--o{ Worker : "person"
User ||--o| Worker : "user"
Worker ||--o{ ContactDetail : "worker"
Person ||--o{ ContactDetail : "contact_person"
Worker ||--o{ WorkerTemporaryLocation : "worker"
WorkerEngagementType ||--o{ Worker : "worker_engagement_type"
WorkerStatus ||--o{ Worker : "worker_status"
OffboardType ||--o{ WorkerStatus : "offboard_type"
Worker ||--o{ Worker : "manager"
Worker ||--o{ JobAssignment : "worker"
JobProfile ||--o{ JobAssignment : "job_profile"
Department ||--o{ JobAssignment : "department"
CmnLocation ||--o{ JobAssignment : "work_branch_location"
BusinessUnit ||--o{ JobAssignment : "business_unit"
CostCenter ||--o{ JobAssignment : "cost_center"
LegalEntity ||--o{ JobAssignment : "aor_company / working_for_legal_entity"
JobAssignment ||--o{ JobReportingRelationship : "worker_job_assignment"
Worker ||--o{ JobReportingRelationship : "related_worker"
JobFamily ||--o{ JobProfile : "job_family"
JobLevel ||--o{ JobProfile : "job_level"
Department ||--o{ JobProfile : "department"
JobProfile }o--o{ Department : "Job Profile Department (M2M)"
JobProfile }o--o{ Skill : "Job Profile Skill (M2M)"
Worker }o--o{ Skill : "Worker Skill (M2M)"
SkillLevel ||--o{ Skill : "skill_level"
LegalEntity }o--o{ Company : "Legal Entity Company (M2M)"
Company }o--o{ BusinessUnit : "Company BU (M2M)"
BusinessUnit }o--o{ CostCenter : "BU Cost Center (M2M)"
LegalEntity ||--o{ CostCenter : "legal_entity"
LegalEntity ||--o{ Company : "core_company"
BusinessUnit ||--o{ BusinessUnit : "parent (Global)"
TransactionInstance ||--o{ CoreHCMTasks : "transaction_instance"
CoreHCMTasks ||--o{ SysapprovalApprover : "approvals"
EventQueue ||--o{ TransactionInstance : "extends Platform Transaction Instance"
Person {
string person_id
date date_of_birth
string personal_email
string first_name
string last_name
string gender
string marital_status
string nationality
string current_address
string permanent_address
string domain
}
Worker {
string worker_id
ref person
ref user
string legal_name
string national_tax_id
ref national_tax_id_country
date employment_start_date
date employment_end_date
ref worker_engagement_type
ref worker_status
ref primary_job_assignment
ref manager
ref department
ref legal_entity
ref business_unit
ref cost_center
boolean active
}
JobAssignment {
int job_assignment_id
ref worker
ref job_profile
ref department
ref work_branch_location
ref business_unit
ref cost_center
ref aor_company
date job_start_date
date job_end_date
boolean primary
decimal full_time_equivalent
}
JobProfile {
string job_profile_code
string title
ref job_family
ref job_level
ref department
boolean active
}
CostCenter {
string name
string code
ref legal_entity
date valid_from
date valid_to
ref manager
boolean active
}
Company {
string name
string primary_country
ref legal_entity
boolean active
}
BusinessUnit {
string name
string code
string status
ref parent
ref company
}
Discrepancies vs. github-private's component KB¶
github-private/docs/profile/repos/nova-corehcm-sn-app/tables.md is the
auto-synced, code-level table reference for this same app. It agrees with
this file on the core entity set (Worker, Person, Job Assignment,
Job Profile, Job Family, Job Level, Skill/Skill Level,
Contact Detail, enterprise structure) but is missing, as of this writing:
- ServiceNow Domain Separation (
domain/domain_path) on every table —tables.mddoesn't mention domain separation at all. - Attribute-level detail on
Company,Legal Entity,Business Unit,Cost Center—tables.mdlists these as bare table names with no fields. - The
Departmenttable's shape (this diagram treats it as a first-class custom table with its own fields;tables.mdtreatsdepartmentas a bare reference to nativecmn_department) — worth confirming which is actually correct before a Feature'sspec.md/schema-changes.mdstates it either way.
Flag this to whoever owns the KB sync so tables.md catches up — this file
doesn't attempt to fix that KB, only to note where it's behind.
Open items for later Feature work¶
Carried over from the earlier schema-impact read of the Critical Core HR Transactions candidate Features — not yet resolved, relevant when Nova Architect scopes exact table/field changes per Feature:
- No reason-code field exists yet for a Job Data Change (role refresh / skills update / job architecture alignment).
- Unclear whether a worker-level job-description override belongs on
Job AssignmentgivenJob Profileis shared across workers. - No document/attachment reference exists on
PersonorWorkerfor dependent-addition or tax-withholding supporting documentation. - Unclear whether
Workersupports more than one concurrent tax jurisdiction (multi-state/country withholding). - The
x_nova_corehcm_*(perskills-product/naming-and-references.md) vs.x_novaw_corehcm_*(pertables.mdand this diagram's scope) table-prefix discrepancy is still unresolved.