Semantius Logo

Job Offers

1. Overview

Offer drafting, approval, extension, signature, and acceptance. Realizes OFFER-MGMT. Realizes the offer_extended state on job_applications. Requires an external sign_document tool, drops module Semantius coverage to ~83%.

2. Entity summary

Namedata_objectDescription
Offer Approvalsoffer_approvalsApproval steps in the offer-approval chain, triggered when an offer exceeds band, includes non-standard equity, or matches other escalation rules.
Offer Letter Documentsoffer_letter_documentsGenerated PDF letters of the offer terms, versioned alongside the structured offer and linked to the e-signature envelope.
Offer Letter Templatesoffer_letter_templatesReusable offer-letter templates with merge tokens for candidate, role, and pay terms, versioned by jurisdiction and language to render offer letters.
Offer Versionsoffer_versionsVersioned snapshots of a job offer during negotiation, each holding the structured terms and the author of the change, from initial through accepted.
Offersjob_offersFormal employment offers extended to candidates, with compensation, start date, terms, approval chain, and status.
Applicationsjob_applicationsCandidate submissions against a specific requisition, with pipeline stage, status, source, and full evaluation history.
CandidatescandidatesPeople known to the recruiting organization, with or without an active application, carrying contact details, resume, tags, consent, and source.
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;
  job_offers["Offers"]
  candidates["Candidates"]
  job_applications["Applications"]
  offer_versions["Offer Versions"]
  offer_approvals["Offer Approvals"]
  offer_letter_documents["Offer Letter Documents"]
  offer_letter_templates["Offer Letter Templates"]
  users["Users"]
  job_offers -->|"evolves_through"| offer_versions
  job_offers -->|"gated_by"| offer_approvals
  offer_versions -->|"renders_as"| offer_letter_documents
  offer_letter_templates -->|"rendered_as"| offer_letter_documents
  candidates -->|"submits"| job_applications
  job_applications -->|"results in"| job_offers
  candidates -->|"has owning recruiter"| users
  users -->|"authored templates"| offer_letter_templates
  users -->|"approved templates"| offer_letter_templates
  offer_versions -->|"has author"| users
  offer_approvals -->|"has approver"| users
  offer_letter_documents -->|"has owner"| users
  job_applications -->|"has owning recruiter"| users
  job_offers -->|"has approver"| users
  class job_offers master;
  class candidates embedded_master;
  class job_applications embedded_master;
  class offer_versions master;
  class offer_approvals master;
  class offer_letter_documents master;
  class offer_letter_templates master;
  class users platform_builtin;

3. Entities catalog

#data_objectcanonical codesingularpluralrolemastered inmastered labelnecessitypersonal_contententity_typewrite tiernotes
1offer_approvalsoffer_approvalsOffer ApprovalOffer Approvalsmaster--required-operational_workflow:manage-
2offer_letter_documentsoffer_letter_documentsOffer Letter DocumentOffer Letter Documentsmaster--requiredyesoperational_workflow:manage-
3offer_letter_templatesoffer_letter_templatesOffer Letter TemplateOffer Letter Templatesmaster--required-catalog:admin-
4offer_versionsoffer_versionsOffer VersionOffer Versionsmaster--requiredyesoperational_workflow:manage-
5job_offersjob_offersOfferOffersmaster--requiredyesoperational_workflow:manage-
6job_applicationsjob_applicationsApplicationApplicationsembedded_masterats-recruitment-pipelineRecruitment Pipelinerequiredyesoperational_workflow:manage-
7candidatescandidatesCandidateCandidatesembedded_masterats-candidate-crmCandidate CRMrequiredyesoperational_workflow:manage-

4. Aliases and industry synonyms

(none: no industry-scoped aliases for this scope)

5. Relationships

5.1 Intra-scope edges

fromverbtocardinalitykindnecessityowner_sidedelete_modefk_formatnotes
job_offersevolves_throughoffer_versionsone_to_manycompositionrequiredsourcecascadeparent-
job_offersgated_byoffer_approvalsone_to_manycompositionoptionalsourcecascadeparent-
offer_versionsrenders_asoffer_letter_documentsone_to_onecompositionrequiredsourcecascadeparent-
offer_letter_templatesrendered_asoffer_letter_documentsone_to_manyreferenceoptionalsourceclearreference-
candidatessubmitsjob_applicationsone_to_manyreferencerequiredtargetrestrictreference-
job_applicationsresults injob_offersone_to_manyreferencerequiredsourcerestrictreference-

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

fromverbtocardinalitynecessityowner_sidedelete_modefk_formatnotes
candidateshas owning recruiterusersmany_to_manyoptionalsourceclearreference-
usersauthored templatesoffer_letter_templatesone_to_manyoptionalsourceclearreference-
usersapproved templatesoffer_letter_templatesone_to_manyoptionalsourceclearreference-
offer_versionshas authorusersmany_to_manyrequiredsourcerestrictreference-
offer_approvalshas approverusersmany_to_manyrequiredsourcerestrictreference-
offer_letter_documentshas ownerusersmany_to_manyoptionalsourceclearreference-
job_applicationshas owning recruiterusersmany_to_manyrequiredsourcerestrictreference-
job_offershas approverusersmany_to_manyrequiredsourcerestrictreference-

5.3 Cross-scope edges

5.3a Outbound from this scope’s masters and contributors

Edges this scope drives: the in-scope endpoint has role of master or contributor.

fromverbtocardinalitynecessitydelete_modefk_formatnotes
offer_versionsproposesequity_grantsone_to_manyoptionalnonen/a-
job_offersis contingent onbackground_checksone_to_manyrequirednone (required-if-present)n/a-
job_offersspawnsonboarding_journeysone_to_onerequirednone (required-if-present)n/a-
job_offerstriggersbenefit_enrollmentsone_to_onerequirednone (required-if-present)n/a-
job_offersseedscompensation_statementsone_to_onerequirednone (required-if-present)n/a-
job_offersspawns pre-employee recordpre_employeesone_to_onerequirednone (required-if-present)n/a-

5.3b Context edges on embedded shells and consumed entities

Edges the canonical owner drives, shown for context: the in-scope endpoint has role of embedded_master, consumer, or derived.

fromverbtocardinalitynecessitydelete_modefk_formatnotes
candidatesverified_viaright_to_work_verificationsone_to_manyoptionalnonen/a-
candidatesengaged_viacandidate_engagementsone_to_manyoptionalnonen/a-
candidatesattends_viarecruiting_event_attendancesone_to_manyrequirednone (required-if-present)n/a-
candidatesnoted_viarecruiter_interactionsone_to_manyoptionalnonen/a-
candidatesconsents_viacandidate_consentsone_to_manyrequired⚠ audit: required composed child out of scopen/a-
candidatesmember_of_viatalent_pool_membershipsone_to_manyrequirednone (required-if-present)n/a-
candidatesdiscloses_viafcra_disclosuresone_to_manyrequired⚠ audit: required composed child out of scopen/a-
job_applicationstransitions_viaapplication_stage_transitionsone_to_manyrequired⚠ audit: required composed child out of scopen/a-
job_applicationsanswers_viaapplication_screening_answersone_to_manyoptionalnonen/a-
candidatesself_identifies_viaeeo_responsesone_to_manyoptionalnonen/a-
candidatessubmits_viadata_subject_requestsone_to_manyoptionalnonen/a-
candidatesself_ids_viavoluntary_self_identificationsone_to_manyoptionalnonen/a-
candidatesacknowledges_viafcra_summary_of_rights_acknowledgementsone_to_manyoptionalnonen/a-
job_applicationsdisposed_viaapplication_dispositionsone_to_manyoptionalnonen/a-
job_applicationslogged_viaapplicant_flow_recordsone_to_onerequired⚠ audit: required composed child out of scopen/a-
candidatesdocumented_viacandidate_documentsone_to_manyoptionalnonen/a-
candidatesannotated_viacandidate_notesone_to_manyoptionalnonen/a-
candidatestagged_viacandidate_tag_assignmentsone_to_manyoptionalnonen/a-
skill_profilesfeedscandidatesone_to_manyoptionalnonen/a-
job_requisitionsreceivesjob_applicationsone_to_manyrequirednone (required-if-present)n/a-
job_postingsis applied to viajob_applicationsone_to_manyrequirednone (required-if-present)n/a-
candidate_referralsintroducescandidatesone_to_manyrequirednone (required-if-present)n/a-
recruitment_sourcesattributescandidatesone_to_manyrequirednone (required-if-present)n/a-
recruitment_agenciessourcescandidatesone_to_manyrequirednone (required-if-present)n/a-
recruitment_eventsattractscandidatesone_to_manyrequirednone (required-if-present)n/a-
talent_poolsgroupscandidatesmany_to_manyrequirednone (required-if-present)n/a-
job_applicationsschedulesinterviewsone_to_manyrequirednone (required-if-present)n/a-
job_applicationsrequirescandidate_assessmentsone_to_manyrequirednone (required-if-present)n/a-
candidatesbecomesemployeesone_to_onerequirednone (required-if-present)n/a-
candidatesbecomes pre-employeepre_employeesone_to_onerequirednone (required-if-present)n/a-
employeesapplies_ascandidatesone_to_manyoptionalnonen/a-
candidatescorresponds_viacandidate_emailsone_to_manyoptionalnonen/a-
candidatesscreened_viadrug_health_screeningsone_to_manyoptionalnonen/a-
candidatessubmitted_viaagency_submissionsone_to_manyoptionalnonen/a-

6. Cross-domain context

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

data_objectother module / domainrolenecessitynotes
job_offersATS-BACKGROUND-CHECKS (Background Checks) - ATSembedded_masterrequired-
job_offersATS-PRE-EMPLOYEE-RECORD (Pre-Employee Record) - ATSembedded_masterrequired-
job_offersCOMP-STATEMENTS (Total Rewards Statements) - COMP-MGMTconsumerrequired-
job_offersHCM-LIFECYCLE-WORKFLOWS (Employee Lifecycle Workflows) - HCMconsumeroptional-
job_offersHIRING-STARTER (Hiring Starter) - ATSembedded_masterrequired-

6.2 Outbound handoffs (events this scope publishes)

source moduletarget domaintarget moduletrigger_eventtransitionpayloadintegrationfrictiondescription
ATS-CANDIDATE-CRMHCMHCM-LIFECYCLE-WORKFLOWScandidate.hiredhired (lifecycle)candidatesevent_streamhighHired-candidate event publishes the hiring outcome to HCM, which must create the employee record. Identifier mapping (candidate_id -> employee_id) is the canonical reconciliation gap.
ATS-OFFERSHCMHCM-LIFECYCLE-WORKFLOWSjob_offer.acceptedaccepted (state_change)job_offersevent_streammediumOffer acceptance signals firm hiring intent; HCM creates pending-employee record.
ATS-RECRUITMENT-PIPELINEATSATS-TALENT-POOLSjob_application.rejected(state_change)job_applicationslifecycle_progressionlow-
ATS-OFFERSCOMP-MGMTCOMP-STATEMENTSjob_offer.signedsigned (lifecycle)job_offersevent_streamlowSigned offer establishes the comp baseline; COMP-MGMT incorporates into cycle history.
ATS-CANDIDATE-CRMBEN-ADMINBEN-ENROLLMENTcandidate.hiredhired (lifecycle)candidatesevent_streamlowHired candidate triggers eligibility window in BEN-ADMIN.
ATS-CANDIDATE-CRMONBOARDINGONB-JOURNEY-MGMTcandidate.hiredhired (lifecycle)candidatesevent_streammediumHired candidate drives onboarding-plan kickoff with role/location/manager context from ATS payload.

6.3 Inbound handoffs (events this scope reacts to)

target modulesource domainsource moduletrigger_eventtransitionpayloadintegrationfrictiondescription
ATS-CANDIDATE-CRMHCMHCM-CORE-WORKERemployee.applied_internallyactiveactive (signal)candidatesapi_callmediumWhen an employee applies internally, HCM hands the worker context to the applicant tracker, which materializes an internal candidate record from the worker profile. Friction: reconciling the worker identity against the candidate identity space.
ATS-RECRUITMENT-PIPELINEATSATS-TALENT-POOLStalent_pool.candidate_activated(state_change)job_applicationslifecycle_progressionlow-
ATS-CANDIDATE-CRMATSATS-REFERRALScandidate_referral.submitted(lifecycle)candidateslifecycle_progressionlow-
ATS-OFFERSATSATS-RECRUITMENT-PIPELINEjob_application.advanced(state_change)job_offerslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWScandidate_assessment.failed(lifecycle)job_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWScandidate_assessment.passed(lifecycle)job_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWSinterview.completed(lifecycle)job_applicationslifecycle_progressionlow-
ATS-OFFERSATSATS-BACKGROUND-CHECKSbackground_check.flagged(lifecycle)job_offerslifecycle_progressionmedium-

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_applicationsembedded_masterrequiredATS-RECRUITMENT-PIPELINE (ATS)-

7. Lifecycle states

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-offers:hire_candidateCandidate accepted an offer and converted to employee.
4do_not_hire-ats-offers: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_applications (Application)

This scope holds job_applications as embedded_master; the canonical state machine is owned by ATS-RECRUITMENT-PIPELINE.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1applied---Candidate submitted an application against the requisition.
2screening----Recruiter is reviewing resume and qualifications.
3interviewing----Candidate is progressing through interview loops.
4offer_extended----An offer has been generated and is in flight for this application.
5hired-ats-offers:hire_candidateCandidate accepted the offer and was hired; gated transition.
6rejected---Application closed without progression by recruiter or hiring manager.
7withdrawn---Candidate withdrew their application.

job_offers (Offer)

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.

offer_approvals (Offer Approval)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1pending---Approval step awaiting decision.
2approved-ats-offers:approve_offerStep approved; offer can advance.
3rejected-ats-offers:reject_offerStep rejected; offer blocked or requires revision.
4escalated----Step escalated to a higher approver.

offer_letter_documents (Offer Letter Document)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1drafted---Letter rendered from template; not yet sent.
2sent----Letter delivered to candidate via e-sign provider.
3signed---Candidate signed; offer accepted.
4voided---Letter voided before signature.

offer_letter_templates (Offer Letter Template)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
10draft---Template is being authored; not visible for offer generation.
20in_review----Author has submitted the template for legal or HR-Comp review.
30approved--ats-offers:approve_offer_letter_templateSingle approver (legal or HR-Comp) has signed off; ready for activation.
40active----Template is live and available for new offers to render against.
50superseded----A newer version of this template has been activated; this row is retained for historical offers.
60retired-ats-offers:retire_offer_letter_templateTemplate withdrawn from use; no new offers may render against it.

offer_versions (Offer Version)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Version being authored; not yet presented.
2presented----Version sent to candidate.
3countered----Candidate countered; this version superseded by a newer one.
4accepted---Version accepted by candidate.
5withdrawn---Version pulled before acceptance.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
ats-offers:readbaseline-readRead access to every entity in the module
ats-offers:managebaseline-manageEdit operational records
ats-offers:adminbaseline-adminEdit reference data and inherit every workflow gate below-
ats-offers:hire_candidateworkflow-gate (lifecycle)Transition candidates into state hired
ats-offers:flag_do_not_hireworkflow-gate (lifecycle)Transition candidates into state do_not_hire
ats-offers:approve_offerworkflow-gate (lifecycle)Transition job_offers into state approved
ats-offers:rescind_offerworkflow-gate (lifecycle)Transition job_offers into state rescinded
ats-offers:reject_offerworkflow-gate (lifecycle)Transition offer_approvals into state rejected
ats-offers:approve_offer_letter_templateworkflow-gate (lifecycle)Transition offer_letter_templates into state approved
ats-offers:retire_offer_letter_templateworkflow-gate (lifecycle)Transition offer_letter_templates into state retired
ats-offers:view_all_offersoverride (personal_content)View all job_offers rows beyond row-scope
ats-offers:manage_all_offersoverride (personal_content)Manage all job_offers rows beyond row-scope
ats-offers:view_all_candidatesoverride (personal_content)View all candidates rows beyond row-scope
ats-offers:manage_all_candidatesoverride (personal_content)Manage all candidates rows beyond row-scope
ats-offers:view_all_applicationsoverride (personal_content)View all job_applications rows beyond row-scope
ats-offers:manage_all_applicationsoverride (personal_content)Manage all job_applications rows beyond row-scope
ats-offers:view_all_offer_versionsoverride (personal_content)View all offer_versions rows beyond row-scope
ats-offers:manage_all_offer_versionsoverride (personal_content)Manage all offer_versions rows beyond row-scope
ats-offers:view_all_offer_letter_documentsoverride (personal_content)View all offer_letter_documents rows beyond row-scope
ats-offers:manage_all_offer_letter_documentsoverride (personal_content)Manage all offer_letter_documents rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
offer_edit_scopejob_offershas_personal_contentRow-scope by default; override via ats-offers:view_all_offers / ats-offers:manage_all_offers
candidate_edit_scopecandidateshas_personal_contentRow-scope by default; override via ats-offers:view_all_candidates / ats-offers:manage_all_candidates
application_edit_scopejob_applicationshas_personal_contentRow-scope by default; override via ats-offers:view_all_applications / ats-offers:manage_all_applications
offer_version_edit_scopeoffer_versionshas_personal_contentRow-scope by default; override via ats-offers:view_all_offer_versions / ats-offers:manage_all_offer_versions
offer_letter_document_edit_scopeoffer_letter_documentshas_personal_contentRow-scope by default; override via ats-offers:view_all_offer_letter_documents / ats-offers:manage_all_offer_letter_documents

9. Roles, RACI, and responsibilities (derived)

Baseline roles, the permission hierarchy, and RACI realization are DERIVED from this scope’s entity-type write tiers + process_raci; none of it is stored in the catalog (the deployer provisions it from this blueprint).

9.1 ATS-OFFERS

Baseline roles:

rolebaseline grant
ats-offers_viewerats-offers:read
ats-offers_managerats-offers:manage
ats-offers_adminats-offers:admin

Permission hierarchy:

permissionincludes
ats-offers:adminats-offers:manage
ats-offers:manageats-offers:read
ats-offers:adminats-offers:hire_candidate
ats-offers:adminats-offers:flag_do_not_hire
ats-offers:adminats-offers:approve_offer
ats-offers:adminats-offers:rescind_offer
ats-offers:adminats-offers:reject_offer
ats-offers:adminats-offers:approve_offer_letter_template
ats-offers:adminats-offers:retire_offer_letter_template
ats-offers:adminats-offers:view_all_offers
ats-offers:adminats-offers:manage_all_offers
ats-offers:adminats-offers:view_all_candidates
ats-offers:adminats-offers:manage_all_candidates
ats-offers:adminats-offers:view_all_applications
ats-offers:adminats-offers:manage_all_applications
ats-offers:adminats-offers:view_all_offer_versions
ats-offers:adminats-offers:manage_all_offer_versions
ats-offers:adminats-offers:view_all_offer_letter_documents
ats-offers:adminats-offers:manage_all_offer_letter_documents

Processes wired:

process_keyprocess_namePCF codePCF IDleveldescription
hire_candidateHire candidate7.2.4.3104654Wrapping up the process for hiring candidates. Agree to all hiring terms and conditions. Have the candidate accept and sign the job offer.
draw_up_make_offerDraw up and make offer7.2.4.1104634Compiling job-related information for the selected candidates in order to make up a job. Include information about the job description, reporting relationship, salary, bonus potential, benefits, and vacation allotment.

RACI realization:

actorkindraciprocess_keyrealization
RECRUITING-RECRUITERpersonaresponsiblehire_candidategrant gates [ats-offers:hire_candidate, ats-offers:hire_candidate] + the gated entities’ write tier
HIRING-MANAGERpersonaaccountablehire_candidateapproval gate
LEGAL-COMPLIANCE-SPECIALISTpersonainformedhire_candidatenotification side effect (trigger_event / webhook_receiver)
RECRUITING-RECRUITERpersonaresponsibledraw_up_make_offergrant gates [ats-offers:approve_offer] + the gated entities’ write tier
HIRING-MANAGERpersonaaccountabledraw_up_make_offerapproval gate
RECRUITING-MANAGERpersonaconsulteddraw_up_make_offeradvisory read grant

9.2 Functional ownership and default grants

responsibilitybusiness functiondefault roledefault tier
ownerRecruitingadmin:admin
contributorHuman Resourcesmanage:manage
contributorLegalmanage:manage
consumerFinanceread:read