Semantius Logo

Pre-Employee Record

1. Overview

The bridge between offer-accepted and start-date: ATS owns the pre-employee lifecycle stage (paperwork in flight, pre-boarding tasks open, background check pending). Realizes the hired state on job_applications. Publishes the pre_employee.activated event that hands the canonical reconciliation to HCM-mastered employees. Formerly NEW-HIRE-HANDOFF, renamed per §7.1 because HCM canonically masters employees.

2. Entity summary

NameDescription
Pre-EmployeesATS-owned pre-employment record covering the post-offer-acceptance window before the new-hire start date: paperwork in flight, background check pending, pre-boarding tasks open. At start-date the pre-employee row is reconciled into HCM-mastered employees (the canonical employee record). HCM owns the canonical employee record; ATS owns the pre-employee lifecycle stage so recruiting and HCM can each move at their own pace.
CandidatesPerson known to the recruiting org, with or without an active application. Carries contact details, resume, tags, GDPR consent, and source. Distinct from Employee until hired.
OffersFormal employment offer extended to a candidate. Carries compensation components, start date, terms, approval chain, and status (draft / approved / sent / accepted / declined / rescinded).
flowchart TD
  classDef master fill:#d4f4dd,stroke:#27ae60,color:#0b3d20;
  classDef embedded_master fill:#fff4cc,stroke:#c79100,color:#5b4500;
  classDef platform_builtin fill:#e0e0e0,stroke:#424242,color:#1a1a1a;
  pre_employees["Pre-Employees"]
  candidates["Candidates"]
  job_offers["Offers"]
  users["Users"]
  job_offers -->|"spawns pre-employee record"| pre_employees
  candidates -->|"becomes pre-employee"| pre_employees
  job_offers -->|"has approver"| users
  pre_employees -->|"has owning hr_coordinator"| users
  class pre_employees master;
  class candidates embedded_master;
  class job_offers embedded_master;
  class users platform_builtin;

3. Entities catalog

#data_objectrolemastered innecessitypattern flagsnotes
1pre_employees (Pre-Employees)master-requiredpersonal_content-
2candidates (Candidates)embedded_masterats-candidate-crmrequiredpersonal_content-
3job_offers (Offers)embedded_masterats-offersrequiredpersonal_content, single_approver-

4. Aliases and industry synonyms

(no industry-scoped aliases or non-synonym alias types loaded for this scope; generic synonyms are omitted as common knowledge.)

5. Relationships

5.1 Intra-scope edges

fromverbtocardinalitykindnecessityowner_sidenotes
job_offersspawns pre-employee recordpre_employeesone_to_onereferencerequiredsource-
candidatesbecomes pre-employeepre_employeesone_to_onereferencerequiredsource-

5.2 Built-in edges (users and other platform built-ins)

fromverbtocardinalitynecessityowner_sidenotes
job_offershas approverusersmany_to_manyrequiredsource-
pre_employeeshas owning hr_coordinatorusersone_to_manyrequiredsource-

5.3 Cross-scope edges

fromverbtocardinalitynecessitynotes
pre_employeespromotes toemployeesone_to_onerequired-
skill_profilesfeedscandidatesone_to_manyoptional-
candidatessubmitsjob_applicationsone_to_manyrequired-
candidate_referralsintroducescandidatesone_to_manyrequired-
recruitment_sourcesattributescandidatesone_to_manyrequired-
recruitment_agenciessourcescandidatesone_to_manyrequired-
recruitment_eventsattractscandidatesone_to_manyrequired-
talent_poolsgroupscandidatesmany_to_manyrequired-
job_applicationsresults injob_offersone_to_manyrequired-
job_offersis contingent onbackground_checksone_to_manyrequired-
job_offersspawnsonboarding_journeysone_to_onerequired-
job_offerstriggersbenefit_enrollmentsone_to_onerequired-
job_offersseedscompensation_statementsone_to_onerequired-
candidatesbecomesemployeesone_to_onerequired-

6. Cross-domain context

6.1 Master consumers (other modules / domains that embed this scope’s masters)

data_objectother module / domainrolenecessitynotes
pre_employeesHCM-LIFECYCLE-WORKFLOWS (Employee Lifecycle Workflows) - HCMconsumerrequired-

6.2 Outbound handoffs (events this scope publishes)

source moduletarget domaintarget moduletrigger_eventpayloadintegrationfrictiondescription
ATS-PRE-EMPLOYEE-RECORDHCMHCM-LIFECYCLE-WORKFLOWSpre_employee.activatedpre_employeesevent_streammediumPre-employee activation hands the canonical reconciliation to HCM-mastered employees. ATS owns the pre-employee lifecycle stage (paperwork, background check, pre-boarding); at start-date the pre_employee row is reconciled into the HCM employee record. Identifier mapping (pre_employee_id → employee_id) is the canonical reconciliation gap. Replaces / complements the older candidate.hired and job_offer.accepted handoffs by carrying the proper post-acceptance reconciliation milestone.

6.3 Inbound handoffs (events this scope reacts to)

target modulesource domainsource moduletrigger_eventpayloadintegrationfrictiondescription
ATS-PRE-EMPLOYEE-RECORDATSATS-OFFERSjob_offer.acceptedpre_employeeslifecycle_progressionlow-
ATS-PRE-EMPLOYEE-RECORDATSATS-BACKGROUND-CHECKSbackground_check.clearedpre_employeeslifecycle_progressionlow-
ATS-PRE-EMPLOYEE-RECORDATSATS-OFFERSjob_offer.rescindedpre_employeeslifecycle_progressionhigh-

6.4 Master providers (modules / domains that own masters this scope embeds)

data_objectrole herenecessitycanonical owner(s)slice notes
candidatesembedded_masterrequiredATS-CANDIDATE-CRM (ATS)-
job_offersembedded_masterrequiredATS-OFFERS (ATS)-

7. Lifecycle states (per touched entity)

candidates (Candidate)

This scope holds candidates as embedded_master; the canonical state machine is owned by ATS-CANDIDATE-CRM.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1prospect---Person known to the recruiting org with no active application.
2active----Candidate has at least one open application or is actively engaged.
3hired-ats-candidate-crm:hire_candidateCandidate accepted an offer and converted to employee.
4do_not_hire-ats-candidate-crm:flag_do_not_hireCandidate flagged as ineligible for future consideration; gated decision.
5archived---Candidate kept in the database but not active in any pipeline.

job_offers (Offer)

This scope holds job_offers as embedded_master; the canonical state machine is owned by ATS-OFFERS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Recruiter is composing offer terms and compensation components.
2pending_approval----Offer routed to the designated approver for sign-off.
3approved--ats-offers:approve_offerApprover signed off; offer is ready to send.
4sent----Offer delivered to the candidate.
5accepted---Candidate accepted the offer.
6declined---Candidate declined the offer.
7rescinded-ats-offers:rescind_offerOffer withdrawn by the employer after being sent; gated action.

pre_employees (Pre-Employee)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1created---Record created when an offer is accepted. Paperwork packet not yet generated.
2paperwork_in_flight----I-9 / W-4 / direct-deposit / banking forms issued; awaiting candidate completion. Background check may run in parallel.
3cleared----All paperwork received and background check completed clear. Ready for HCM activation.
4activated-ats-pre-employee-record:activate_pre_employeeReconciliation handoff fired to HCM (pre_employee.activated event). Canonical employees row created downstream; ATS record becomes read-only.
5cancelled---Offer rescinded or candidate withdrew before activation. Record retained for audit.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
ats-pre-employee-record:readbaseline-readRead access to every entity in the module
ats-pre-employee-record:managebaseline-manageEdit operational records
ats-pre-employee-record:adminbaseline-adminEdit reference data and inherit every workflow gate below-
ats-pre-employee-record:activate_pre_employeeworkflow-gate (lifecycle)Transition pre_employees into state activated
ats-pre-employee-record:view_all_pre-employeesoverride (personal_content)View all pre_employees rows beyond row-scope
ats-pre-employee-record:manage_all_pre-employeesoverride (personal_content)Manage all pre_employees rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
pre-employee_edit_scopepre_employeeshas_personal_contentRow-scope by default; override via ats-pre-employee-record:view_all_pre-employees / ats-pre-employee-record:manage_all_pre-employees