Semantius Logo

Recruitment Pipeline

1. Overview

Requisitions → postings → applications with pipeline-stage lifecycle. Realizes REQ-MGMT and CANDIDATE-EXP (application flow slice). Embedded-masters candidates, optionally hcm_positions and org_units for canonical position/org context.

2. Entity summary

NameDescription
ApplicationsA candidate’s submission against a specific requisition. Carries pipeline stage, status (active / rejected / withdrawn / hired), source, and the full evaluation history.
Job PostingsPublished, candidate-facing version of a requisition on a career site or job board. One requisition can have many postings (per board, language, or region).
Job RequisitionsApproved request to hire for a specific role. The master ATS work item, carries headcount, level, location, hiring manager, recruiter, and status (draft / open / on_hold / filled / cancelled).
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.
Job ProfilesCanonical role definition in the job catalog: title, family, level, responsibilities, required skills and competencies, pay range, FLSA classification. Distinct from positions (which are slots referencing a profile). Many positions share a single job profile.
Locations-
Org UnitsNode in the organizational hierarchy: division, business unit, department, team. Carries manager, cost center alignment, geographic scope, and parent/child relationships. HCM masters the operational hierarchy; EPM contributes the cost-center mapping (which would be Finance-mastered once a Finance/GL domain is loaded).
PositionsApproved slot in the org - a ‘chair’ with role definition, cost center, reporting line, location, and FTE allocation. Distinct from job_profiles (the catalog definition) and from employees (the person filling the slot). A position can be open, filled, or eliminated. SWP designs future positions via org_designs; HCM operationalizes them once approved.
Position Demand ForecastsProjected need for specific roles derived from the capacity model: which positions, when, where, at what level. Feeds the requisition pipeline - approved demand becomes an authorised requisition in ATS via the headcount.approved handoff.
Predictive ModelsML / statistical model outputs deployed in PA: flight-risk scores, performance trajectory, internal-mobility likelihood. Carries the model identifier, training window, target metric, and the materialized scores per employee. Consumes employees and employment_events as features.
Project Resource AllocationsForward-looking resource commitment plan (skill, planned utilisation %, effective period) - distinct from executed assignments.
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_requisitions["Job Requisitions"]
  job_postings["Job Postings"]
  job_applications["Applications"]
  candidates["Candidates"]
  hcm_positions["Positions"]
  org_units["Org Units"]
  locations["Locations"]
  predictive_models["Predictive Models"]
  position_demand_forecasts["Position Demand Forecasts"]
  project_resource_allocations["Project Resource Allocations"]
  job_profiles["Job Profiles"]
  users["Users"]
  org_units -->|"contains"| hcm_positions
  job_profiles -->|"defines"| hcm_positions
  hcm_positions -->|"spawns (opt)"| job_requisitions
  job_profiles -->|"feeds (opt)"| job_postings
  job_requisitions -->|"is advertised through"| job_postings
  job_requisitions -->|"receives"| job_applications
  job_postings -->|"is applied to via"| job_applications
  candidates -->|"submits"| job_applications
  job_requisitions -->|"updates (opt)"| position_demand_forecasts
  org_units -->|"rolls_up_to (opt)"| org_units
  locations -->|"rolls_up_to (opt)"| locations
  position_demand_forecasts -->|"triggers (opt)"| job_requisitions
  users -->|"manages (opt)"| hcm_positions
  users -->|"leads (opt)"| org_units
  users -->|"owns (opt)"| job_profiles
  job_requisitions -->|"has recruiter and hiring manager"| users
  job_applications -->|"has owning recruiter"| users
  org_units -->|"has members (opt)"| users
  locations -->|"houses (opt)"| users
  users -->|"prepares (opt)"| position_demand_forecasts
  users -->|"allocates"| project_resource_allocations
  class job_requisitions master;
  class job_postings master;
  class job_applications master;
  class candidates embedded_master;
  class hcm_positions embedded_master;
  class org_units embedded_master;
  class locations embedded_master;
  class predictive_models consumer;
  class position_demand_forecasts consumer;
  class project_resource_allocations consumer;
  class job_profiles embedded_master;
  class users platform_builtin;
  style hcm_positions stroke-dasharray:5 5;
  style org_units stroke-dasharray:5 5;
  style locations stroke-dasharray:5 5;
  style predictive_models stroke-dasharray:5 5;
  style project_resource_allocations stroke-dasharray:5 5;

3. Entities catalog

#data_objectrolemastered innecessitypattern flagsnotes
1job_applications (Applications)master-requiredpersonal_content-
2job_postings (Job Postings)master-required--
3job_requisitions (Job Requisitions)master-requiredsingle_approver-
4candidates (Candidates)embedded_masterats-candidate-crmrequiredpersonal_content-
5job_profiles (Job Profiles)embedded_masterhcm-org-positionsrequiredsingle_approver-
6locations (Locations)embedded_masteriwms-location-masteroptional--
7org_units (Org Units)embedded_masterhcm-org-positionsoptional--
8hcm_positions (Positions)embedded_masterhcm-org-positionsoptionalsingle_approver-
9position_demand_forecasts (Position Demand Forecasts)consumerswp-demand-forecastrequired--
10predictive_models (Predictive Models)consumerpa-predictive-modelsoptional--
11project_resource_allocations (Project Resource Allocations)consumerpsa-resource-mgmtoptional--

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
org_unitscontainshcm_positionsone_to_manyreferencerequiredsource-
job_profilesdefineshcm_positionsone_to_manyreferencerequiredsource-
hcm_positionsspawnsjob_requisitionsone_to_manyreferenceoptionalsource-
job_profilesfeedsjob_postingsone_to_manyreferenceoptionalsource-
job_requisitionsis advertised throughjob_postingsone_to_manyreferencerequiredsource-
job_requisitionsreceivesjob_applicationsone_to_manyreferencerequiredsource-
job_postingsis applied to viajob_applicationsone_to_manyreferencerequiredsource-
candidatessubmitsjob_applicationsone_to_manyreferencerequiredtarget-
job_requisitionsupdatesposition_demand_forecastsmany_to_manyreferenceoptionaltarget-
org_unitsrolls_up_toorg_unitsone_to_manyreferenceoptionalsource-
locationsrolls_up_tolocationsone_to_manyreferenceoptionalsource-
position_demand_forecaststriggersjob_requisitionsone_to_manyreferenceoptionalsource-

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

fromverbtocardinalitynecessityowner_sidenotes
usersmanageshcm_positionsone_to_manyoptionalsource-
usersleadsorg_unitsone_to_manyoptionalsource-
usersownsjob_profilesone_to_manyoptionalsource-
job_requisitionshas recruiter and hiring managerusersmany_to_manyrequiredsource-
job_applicationshas owning recruiterusersmany_to_manyrequiredsource-
org_unitshas membersusersone_to_manyoptionaltarget-
locationshousesusersone_to_manyoptionaltarget-
userspreparesposition_demand_forecastsone_to_manyoptionalsource-
usersallocatesproject_resource_allocationsone_to_manyrequiredtarget-

5.3 Cross-scope edges

fromverbtocardinalitynecessitynotes
locationshosts_desk_bookingsdesk_bookingsone_to_manyrequired-
locationshosts_room_reservationsroom_reservationsone_to_manyrequired-
locationssite_of_service_requestsworkplace_service_requestsone_to_manyrequired-
locationsmeasured_by_reportsspace_utilization_reportsone_to_manyrequired-
locationssubject_of_feedbackworkplace_experience_feedbackone_to_manyoptional-
org_unitsgroupsemployeesone_to_manyrequired-
hcm_positionsis_filled_byemployeesone_to_oneoptional-
cost_centersfundsorg_unitsone_to_manyrequired-
org_unitsengagescontingent_workersone_to_manyoptional-
org_unitsis_scored_byengagement_driversone_to_manyoptional-
org_unitsis_measured_bypeople_kpisone_to_manyoptional-
job_profilesmaps_toskill_profilesmany_to_manyoptional-
org_unitstriggersiga_entitlement_definitionsone_to_manyoptional-
job_profilesmaps_tocoursesmany_to_manyoptional-
salary_bandsanchorshcm_positionsone_to_manyoptional-
salary_bandsbandsjob_profilesone_to_manyoptional-
org_unitsmaps_tocost_centersone_to_oneoptional-
hcm_positionsrequirescompliance_assignmentsone_to_manyoptional-
job_profilesrequireslearning_pathsmany_to_manyoptional-
job_profilesexpectsskill_profilesmany_to_manyoptional-
org_unitssponsorscompliance_assignmentsone_to_manyoptional-
skill_profilesfeedscandidatesone_to_manyoptional-
org_unitssponsorsbenefit_plansmany_to_manyoptional-
survey_campaignstargetsorg_unitsmany_to_manyoptional-
org_unitsownsaction_plansone_to_manyoptional-
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_applicationsresults injob_offersone_to_manyrequired-
candidatesbecomesemployeesone_to_onerequired-
job_requisitionsfeedspeople_kpismany_to_manyoptional-
candidatesbecomes pre-employeepre_employeesone_to_onerequired-
employeesfillshcm_positionsone_to_oneoptional-
headcount_plansrolls_up_toposition_demand_forecastsmany_to_manyrequired-
position_demand_forecastsgroundsskills_gap_analysesone_to_manyoptional-
headcount_plansauthorizesjob_requisitionsone_to_manyrequired-
workforce_scenariosdriveshcm_positionsone_to_manyrequired-
org_designsproposeshcm_positionsone_to_manyrequired-
service_projectsplans_resources_viaproject_resource_allocationsone_to_manyoptional-
project_resource_allocationsconfirms_intoproject_assignmentsone_to_manyoptional-

6. Cross-domain context

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

data_objectother module / domainrolenecessitynotes
job_applicationsATS-INTERVIEWS (Interviews) - ATSembedded_masterrequired-
job_applicationsATS-OFFERS (Offers) - ATSembedded_masterrequired-
job_applicationsHIRING-STARTER (Hiring Starter) - ATSembedded_masterrequired-
job_postingsHIRING-STARTER (Hiring Starter) - ATSembedded_masterrequired-
job_requisitionsHCM-ORG-POSITIONS (Organisation and Position Management) - HCMconsumerrequired-
job_requisitionsSWP-DEMAND-FORECAST (Demand Forecast) - SWPcontributorrequired-

6.2 Outbound handoffs (events this scope publishes)

source moduletarget domaintarget moduletrigger_eventpayloadintegrationfrictiondescription
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSrequisition.filledjob_requisitionsevent_streamlowRequisition fill closes headcount slot; HCM headcount-plan updates.
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSheadcount.approvedjob_requisitionsevent_streamlowHeadcount approval (often originating from HCM/SWP) confirmed back to HCM; gives ATS green light to source.
ATS-RECRUITMENT-PIPELINESWPSWP-DEMAND-FORECASTrequisition.filledjob_requisitionsevent_streamlowFilled requisition feeds SWP actuals-vs-plan reconciliation.
ATS-RECRUITMENT-PIPELINESWPSWP-DEMAND-FORECASTrequisition.filledposition_demand_forecastsevent_streammediumFilled requisitions from ATS decrement open demand in SWP’s position forecasts and update plan-vs-actual fill metrics (time-to-fill, fill rate by role/geo). Lower friction than headcount.actuals_updated from HCM because the requisition→forecast mapping is more direct.

6.3 Inbound handoffs (events this scope reacts to)

target modulesource domainsource moduletrigger_eventpayloadintegrationfrictiondescription
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.activatedorg_unitsapi_calllow-
ATS-RECRUITMENT-PIPELINEATSATS-CANDIDATE-CRMjob_application.submittedjob_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.approved_for_creationhcm_positionsevent_streammediumApproved position flows to ATS as the basis for a requisition. Approval state must be in sync to avoid requisitions opened against unapproved positions.
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSjob_profile.publishedjob_profilesevent_streamlowCanonical job profile feeds ATS posting templates and screening criteria.
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.openedhcm_positionsapi_callmedium-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.filledhcm_positionsapi_callmedium-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.frozenhcm_positionsapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.eliminatedhcm_positionsapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSjob_profile.approvedjob_profilesapi_calllow-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSjob_profile.activatedjob_profilesapi_calllow-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSjob_profile.retiredjob_profilesapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-CORE-WORKERemployee.terminatedjob_requisitionsapi_calllowEmployee termination in HCM optionally triggers backfill requisition consideration in ATS. Low friction when SWP-driven; some orgs auto-open a backfill req on regrettable losses, others route through SWP for approval first.
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.reorganizedorg_unitsapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.closedorg_unitsapi_callhigh-
ATS-RECRUITMENT-PIPELINEATSATS-TALENT-POOLStalent_pool.candidate_activatedjob_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWSinterview.completedjob_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWScandidate_assessment.passedjob_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEATSATS-INTERVIEWScandidate_assessment.failedjob_applicationslifecycle_progressionlow-
ATS-RECRUITMENT-PIPELINEPAPA-PREDICTIVE-MODELSpredictive_model.scoredpredictive_modelsapi_callmediumHire-success and quality-of-hire scores inform ATS sourcing prioritization.
ATS-RECRUITMENT-PIPELINESWPSWP-DEMAND-FORECASTposition_demand_forecast.updatedposition_demand_forecastsevent_streamhighHiring demand sets ATS requisition-creation expectations. Plan-to-execute gap is a frequent friction source.
ATS-RECRUITMENT-PIPELINESWPSWP-DEMAND-FORECASTheadcount.approvedjob_requisitionsapi_callhighApproved headcount in SWP authorises requisition creation in ATS. THIS IS THE CO-MASTER BRIDGE: SWP masters the intent slice (approved position, budget, time window) and ATS masters the execution slice (pipeline, candidates, interviews, offer). High friction because SWP’s plan structure (org × geo × level × time) rarely matches ATS’s requisition template structure (job code × location × hiring manager × pay range), requiring mapping rules that drift as either side evolves.
ATS-RECRUITMENT-PIPELINEPSAPSA-RESOURCE-MGMTproject_resource_allocation.demand_unmetproject_resource_allocationsmanual_handoffhighUnmet allocation demand is the seed for a hiring requisition; the manual handoff between resource manager and recruiter is the dominant pattern.
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSjob_profile.updatedjob_profilesapi_callmedium-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.createdorg_unitsapi_callmedium-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.mergedorg_unitsapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONSorg_unit.disbandedorg_unitsapi_callhigh-
ATS-RECRUITMENT-PIPELINEHCMHCM-ORG-POSITIONShcm_position.approvedhcm_positionsapi_callmedium-

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

data_objectrole herenecessitycanonical owner(s)slice notes
candidatesembedded_masterrequiredATS-CANDIDATE-CRM (ATS)-
hcm_positionsembedded_masteroptionalHCM-ORG-POSITIONS (HCM)-
job_profilesembedded_masterrequiredHCM-ORG-POSITIONS (HCM)-
locationsembedded_masteroptionalIWMS-LOCATION-MASTER (IWMS)-
org_unitsembedded_masteroptionalHCM-ORG-POSITIONS (HCM)-
position_demand_forecastsconsumerrequiredSWP-DEMAND-FORECAST (SWP)-
predictive_modelsconsumeroptionalPA-PREDICTIVE-MODELS (PA)-
project_resource_allocationsconsumeroptionalPSA-RESOURCE-MGMT (PSA)-

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.

hcm_positions (Position)

This scope holds hcm_positions as embedded_master; the canonical state machine is owned by HCM-ORG-POSITIONS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1proposed---Position has been designed but not yet approved against the headcount plan.
2approved--hcm-org-positions:approved_positionCleared by headcount/finance owner; eligible to spawn a requisition.
3open--hcm-org-positions:open_positionApproved and actively being recruited against; not yet filled.
4filled--hcm-org-positions:filled_positionAn employee occupies the position.
5frozen--hcm-org-positions:frozen_positionTemporarily not fillable (hiring freeze, budget hold); retains the slot.
6eliminated-hcm-org-positions:eliminated_positionRemoved from the org structure permanently.

job_applications (Application)

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_postings (Job Posting)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Posting being composed against a requisition for a specific board or region.
2published--ats-recruitment-pipeline:publish_postingPosting is live on the target channel; gated publish step.
3paused----Posting temporarily hidden from the channel.
4expired---Posting reached its scheduled end date.
5closed---Posting taken down because the requisition is filled or cancelled.

job_profiles (Job Profile)

This scope holds job_profiles as embedded_master; the canonical state machine is owned by HCM-ORG-POSITIONS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Profile is being authored or revised; not yet available for position assignment.
2approved--hcm-org-positions:approved_job_profileCleared by the catalog owner; ready to be referenced by positions and postings.
3active--hcm-org-positions:active_job_profileIn production use; positions and postings can reference it.
4retired-hcm-org-positions:retired_job_profileNo longer assignable to new positions; historical references preserved.

job_requisitions (Job Requisition)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Hiring manager is drafting the requisition.
2pending_approval----Requisition routed for headcount and budget approval.
3open--ats-recruitment-pipeline:approve_requisitionRequisition approved and actively recruiting.
4on_hold----Recruiting temporarily paused (budget freeze, scope change).
5filled-ats-recruitment-pipeline:close_requisitionRequisition closed because the role was filled.
6cancelled---Requisition closed without a hire.

org_units (Org Unit)

This scope holds org_units as embedded_master; the canonical state machine is owned by HCM-ORG-POSITIONS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Org unit defined as part of a future structure; not yet operational.
2active--hcm-org-positions:active_org_unitOperational unit; carries headcount, cost-center linkage, and reporting lines.
3reorganized-hcm-org-positions:reorganized_org_unitUnit folded into or replaced by a new structure; references remain for history.
4closed-hcm-org-positions:closed_org_unitUnit dissolved; no employees or positions reside in it.

project_resource_allocations (Project Resource Allocation)

This scope holds project_resource_allocations as consumer; the canonical state machine is owned by PSA-RESOURCE-MGMT.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1tentative---Forecast allocation drafted by resource manager; not yet committed.
2committed--psa-resource-mgmt:commit_project_resource_allocationAllocation firmed up: HCM treats the named hours as booked capacity; CLM links the allocation to the underlying engagement contract.
3fulfilled---Allocation period elapsed and corresponding assignments closed.
4cancelled-psa-resource-mgmt:cancel_project_resource_allocationAllocation withdrawn before commitment (forecast change, project delayed or descoped).

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
ats-recruitment-pipeline:readbaseline-readRead access to every entity in the module
ats-recruitment-pipeline:managebaseline-manageEdit operational records
ats-recruitment-pipeline:adminbaseline-adminEdit reference data and inherit every workflow gate below-
ats-recruitment-pipeline:approve_requisitionworkflow-gate (lifecycle)Transition job_requisitions into state open
ats-recruitment-pipeline:close_requisitionworkflow-gate (lifecycle)Transition job_requisitions into state filled
ats-recruitment-pipeline:publish_postingworkflow-gate (lifecycle)Transition job_postings into state published
ats-recruitment-pipeline:view_all_applicationsoverride (personal_content)View all job_applications rows beyond row-scope
ats-recruitment-pipeline:manage_all_applicationsoverride (personal_content)Manage all job_applications rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
approve_job_requisition_requires_approverjob_requisitionshas_single_approverExactly one explicit approver required; uses the module’s approval gate (ats-recruitment-pipeline:approve_job_requisition if surfaced as a lifecycle workflow gate).
application_edit_scopejob_applicationshas_personal_contentRow-scope by default; override via ats-recruitment-pipeline:view_all_applications / ats-recruitment-pipeline:manage_all_applications