Semantius Logo

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

NameDescription
OffersFormal employment offer extended to a candidate. Carries compensation components, start date, terms, approval chain, and status (draft / approved / sent / accepted / declined / rescinded).
ApplicationsA candidate’s submission against a specific requisition. Carries pipeline stage, status (active / rejected / withdrawn / hired), source, and the full evaluation history.
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.
Salary BandsPay-range structure by grade and geographic zone with minimum, midpoint, maximum, and benchmarking source. Drives offer guidance, merit eligibility, and pay-equity gap analysis.
Compensation BenchmarksImported market salary data for a job-level-geography combination, sourced from an external compensation-survey provider. Drives salary_bands maintenance.
flowchart TD
  classDef master fill:#d4f4dd,stroke:#27ae60,color:#0b3d20;
  classDef embedded_master fill:#fff4cc,stroke:#c79100,color:#5b4500;
  classDef consumer fill:#e8def8,stroke:#7b1fa2,color:#3a155d;
  classDef platform_builtin fill:#e0e0e0,stroke:#424242,color:#1a1a1a;
  job_offers["Offers"]
  candidates["Candidates"]
  job_applications["Applications"]
  compensation_benchmarks["Compensation Benchmarks"]
  salary_bands["Salary Bands"]
  users["Users"]
  candidates -->|"submits"| job_applications
  job_applications -->|"results in"| job_offers
  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 compensation_benchmarks consumer;
  class salary_bands embedded_master;
  class users platform_builtin;
  style salary_bands stroke-dasharray:5 5;

3. Entities catalog

#data_objectrolemastered innecessitypattern flagsnotes
1job_offers (Offers)master-requiredpersonal_content, single_approver-
2job_applications (Applications)embedded_masterats-recruitment-pipelinerequiredpersonal_content-
3candidates (Candidates)embedded_masterats-candidate-crmrequiredpersonal_content-
4salary_bands (Salary Bands)embedded_mastercomp-benchmarkingoptional--
5compensation_benchmarks (Compensation Benchmarks)consumercomp-benchmarkingrequired--

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
candidatessubmitsjob_applicationsone_to_manyreferencerequiredtarget-
job_applicationsresults injob_offersone_to_manyreferencerequiredsource-

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

fromverbtocardinalitynecessityowner_sidenotes
job_applicationshas owning recruiterusersmany_to_manyrequiredsource-
job_offershas approverusersmany_to_manyrequiredsource-

5.3 Cross-scope edges

fromverbtocardinalitynecessitynotes
salary_bandsanchorshcm_positionsone_to_manyoptional-
salary_bandsbandsjob_profilesone_to_manyoptional-
skill_profilesfeedscandidatesone_to_manyoptional-
job_requisitionsreceivesjob_applicationsone_to_manyrequired-
job_postingsis applied to viajob_applicationsone_to_manyrequired-
candidate_referralsintroducescandidatesone_to_manyrequired-
recruitment_sourcesattributescandidatesone_to_manyrequired-
recruitment_agenciessourcescandidatesone_to_manyrequired-
recruitment_eventsattractscandidatesone_to_manyrequired-
talent_poolsgroupscandidatesmany_to_manyrequired-
job_applicationsschedulesinterviewsone_to_manyrequired-
job_applicationsrequirescandidate_assessmentsone_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-
job_offersspawns pre-employee recordpre_employeesone_to_onerequired-
candidatesbecomes pre-employeepre_employeesone_to_onerequired-
labor_market_benchmarkscalibratessalary_bandsmany_to_manyoptional-

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) - HCMconsumerrequired-
job_offersHIRING-STARTER (Hiring Starter) - ATSembedded_masterrequired-

6.2 Outbound handoffs (events this scope publishes)

source moduletarget domaintarget moduletrigger_eventpayloadintegrationfrictiondescription
ATS-OFFERSHCMHCM-LIFECYCLE-WORKFLOWSjob_offer.acceptedjob_offersevent_streammediumOffer acceptance signals firm hiring intent; HCM creates pending-employee record.
ATS-OFFERSCOMP-MGMTCOMP-STATEMENTSjob_offer.signedjob_offersevent_streamlowSigned offer establishes the comp baseline; COMP-MGMT incorporates into cycle history.

6.3 Inbound handoffs (events this scope reacts to)

target modulesource domainsource moduletrigger_eventpayloadintegrationfrictiondescription
ATS-OFFERSCOMP-MGMTCOMP-BENCHMARKINGcompensation_benchmark.refreshedcompensation_benchmarksbatch_synclowUpdated benchmarks inform offer-range guardrails for recruiters and hiring managers.
ATS-OFFERSATSATS-RECRUITMENT-PIPELINEjob_application.advancedjob_offerslifecycle_progressionlow-
ATS-OFFERSATSATS-BACKGROUND-CHECKSbackground_check.flaggedjob_offerslifecycle_progressionmedium-
ATS-OFFERSCOMP-MGMTCOMP-BENCHMARKINGsalary_band.updatedsalary_bandsevent_streamlowUpdated bands flow to ATS offer-generation.

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)-
salary_bandsembedded_masteroptionalCOMP-BENCHMARKING (COMP-MGMT)-
compensation_benchmarksconsumerrequiredCOMP-BENCHMARKING (COMP-MGMT)-

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_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-pre-employee-record: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.

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:approve_offerworkflow-gate (lifecycle)Transition job_offers into state approved
ats-offers:rescind_offerworkflow-gate (lifecycle)Transition job_offers into state rescinded
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

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
approve_offer_requires_approverjob_offershas_single_approverExactly one explicit approver required; uses the module’s approval gate (ats-offers:approve_offer if surfaced as a lifecycle workflow gate).