Skip to content

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.md doesn't mention domain separation at all.
  • Attribute-level detail on Company, Legal Entity, Business Unit, Cost Centertables.md lists these as bare table names with no fields.
  • The Department table's shape (this diagram treats it as a first-class custom table with its own fields; tables.md treats department as a bare reference to native cmn_department) — worth confirming which is actually correct before a Feature's spec.md/schema-changes.md states 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 Assignment given Job Profile is shared across workers.
  • No document/attachment reference exists on Person or Worker for dependent-addition or tax-withholding supporting documentation.
  • Unclear whether Worker supports more than one concurrent tax jurisdiction (multi-state/country withholding).
  • The x_nova_corehcm_* (per skills-product/naming-and-references.md) vs. x_novaw_corehcm_* (per tables.md and this diagram's scope) table-prefix discrepancy is still unresolved.