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
Name
Description
Pre-Employees
ATS-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.
Candidates
Person 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.
Offers
Formal employment offer extended to a candidate. Carries compensation components, start date, terms, approval chain, and status (draft / approved / sent / accepted / declined / rescinded).
6.2 Outbound handoffs (events this scope publishes)
source module
target domain
target module
trigger_event
payload
integration
friction
description
ATS-PRE-EMPLOYEE-RECORD
HCM
HCM-LIFECYCLE-WORKFLOWS
pre_employee.activated
pre_employees
event_stream
medium
Pre-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 module
source domain
source module
trigger_event
payload
integration
friction
description
ATS-PRE-EMPLOYEE-RECORD
ATS
ATS-OFFERS
job_offer.accepted
pre_employees
lifecycle_progression
low
-
ATS-PRE-EMPLOYEE-RECORD
ATS
ATS-BACKGROUND-CHECKS
background_check.cleared
pre_employees
lifecycle_progression
low
-
ATS-PRE-EMPLOYEE-RECORD
ATS
ATS-OFFERS
job_offer.rescinded
pre_employees
lifecycle_progression
high
-
6.4 Master providers (modules / domains that own masters this scope embeds)
data_object
role here
necessity
canonical owner(s)
slice notes
candidates
embedded_master
required
ATS-CANDIDATE-CRM (ATS)
-
job_offers
embedded_master
required
ATS-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.
order
state_name
initial?
terminal?
requires_permission?
derived gate
description
1
prospect
✓
-
-
-
Person known to the recruiting org with no active application.
2
active
-
-
-
-
Candidate has at least one open application or is actively engaged.
3
hired
-
✓
✓
ats-candidate-crm:hire_candidate
Candidate accepted an offer and converted to employee.
4
do_not_hire
-
✓
✓
ats-candidate-crm:flag_do_not_hire
Candidate flagged as ineligible for future consideration; gated decision.
5
archived
-
✓
-
-
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.
order
state_name
initial?
terminal?
requires_permission?
derived gate
description
1
draft
✓
-
-
-
Recruiter is composing offer terms and compensation components.
2
pending_approval
-
-
-
-
Offer routed to the designated approver for sign-off.
3
approved
-
-
✓
ats-offers:approve_offer
Approver signed off; offer is ready to send.
4
sent
-
-
-
-
Offer delivered to the candidate.
5
accepted
-
✓
-
-
Candidate accepted the offer.
6
declined
-
✓
-
-
Candidate declined the offer.
7
rescinded
-
✓
✓
ats-offers:rescind_offer
Offer withdrawn by the employer after being sent; gated action.
pre_employees (Pre-Employee)
order
state_name
initial?
terminal?
requires_permission?
derived gate
description
1
created
✓
-
-
-
Record created when an offer is accepted. Paperwork packet not yet generated.
2
paperwork_in_flight
-
-
-
-
I-9 / W-4 / direct-deposit / banking forms issued; awaiting candidate completion. Background check may run in parallel.
3
cleared
-
-
-
-
All paperwork received and background check completed clear. Ready for HCM activation.
4
activated
-
✓
✓
ats-pre-employee-record:activate_pre_employee
Reconciliation handoff fired to HCM (pre_employee.activated event). Canonical employees row created downstream; ATS record becomes read-only.
5
cancelled
-
✓
-
-
Offer rescinded or candidate withdrew before activation. Record retained for audit.
8. Permissions and business rules (derived)
8.1 Permissions
permission
tier
description
included in :admin?
ats-pre-employee-record:read
baseline-read
Read access to every entity in the module
✓
ats-pre-employee-record:manage
baseline-manage
Edit operational records
✓
ats-pre-employee-record:admin
baseline-admin
Edit reference data and inherit every workflow gate below
-
ats-pre-employee-record:activate_pre_employee
workflow-gate (lifecycle)
Transition pre_employees into state activated
✓
ats-pre-employee-record:view_all_pre-employees
override (personal_content)
View all pre_employees rows beyond row-scope
✓
ats-pre-employee-record:manage_all_pre-employees
override (personal_content)
Manage all pre_employees rows beyond row-scope
✓
8.2 Business rules
rule_name
data_object
source flag
intent
pre-employee_edit_scope
pre_employees
has_personal_content
Row-scope by default; override via ats-pre-employee-record:view_all_pre-employees / ats-pre-employee-record:manage_all_pre-employees
We use cookies
We use cookies to enhance your browsing experience and analyze our traffic. By clicking "Accept", you consent to our use of cookies.