Semantius Logo

Hiring Starter

1. Overview

Entry-tier deployable for a basic hiring workflow: post jobs, capture applications, run interviews, generate offers. Embeds the canonical masters from the full ATS modules and inherits their lifecycle states. Ships three baseline permissions and one system skill; no workflow gates, no requisition approvals, no background-check orchestration, no pre-employee reconciliation. Upgrades to the full ATS surface without tenant data migration via the embedded-master demotion path.

2. Entity summary

Namedata_objectDescription
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.
Interview Scorecardsinterview_scorecardsStructured interviewer feedback against a rubric: per-competency ratings, written notes, and a hire or no-hire recommendation.
InterviewsinterviewsScheduled assessment events between a candidate and one or more interviewers, with time, location, panel, and outcome.
Job Postingsjob_postingsPublished, candidate-facing versions of a requisition on a career site or job board, one requisition possibly having many postings.
Offersjob_offersFormal employment offers extended to candidates, with compensation, start date, terms, approval chain, and status.
Recruitment Sourcesrecruitment_sourcesChannels a candidate came from, such as job board, referral, agency, campaign, or inbound, used for source-of-hire and channel analytics.
UsersusersPlatform users referenced as assignees, authors, approvers, and creators across records.
flowchart TD
  classDef embedded_master fill:#fff4cc,stroke:#c79100,color:#5b4500;
  classDef consumer fill:#e8def8,stroke:#7b1fa2,color:#3a155d;
  candidates["Candidates"]
  job_postings["Job Postings"]
  job_applications["Applications"]
  interviews["Interviews"]
  interview_scorecards["Interview Scorecards"]
  job_offers["Offers"]
  recruitment_sources["Recruitment Sources"]
  users["Users"]
  candidates -->|"has owning recruiter"| users
  job_postings -->|"has publisher"| users
  job_postings -->|"is applied to via"| job_applications
  candidates -->|"submits"| job_applications
  recruitment_sources -->|"attributes"| candidates
  job_applications -->|"schedules"| interviews
  interviews -->|"is scored via"| interview_scorecards
  job_applications -->|"results in"| job_offers
  job_applications -->|"has owning recruiter"| users
  interviews -->|"has coordinator and panelists"| users
  interview_scorecards -->|"has interviewer as author"| users
  job_offers -->|"has approver"| users
  class candidates embedded_master;
  class job_postings embedded_master;
  class job_applications embedded_master;
  class interviews embedded_master;
  class interview_scorecards embedded_master;
  class job_offers embedded_master;
  class recruitment_sources embedded_master;
  class users consumer;
  style interview_scorecards stroke-dasharray:5 5;
  style recruitment_sources stroke-dasharray:5 5;

3. Entities catalog

#data_objectcanonical codesingularpluralrolemastered inmastered labelnecessitypersonal_contententity_typewrite tiernotes
1job_applicationsjob_applicationsApplicationApplicationsembedded_masterats-recruitment-pipelineRecruitment Pipelinerequiredyesoperational_workflow:manage-
2candidatescandidatesCandidateCandidatesembedded_masterats-candidate-crmCandidate CRMrequiredyesoperational_workflow:manage-
3interview_scorecardsinterview_scorecardsInterview ScorecardInterview Scorecardsembedded_masterats-interviewsCandidate Interviewsoptionalyesoperational_workflow:manage-
4interviewsinterviewsInterviewInterviewsembedded_masterats-interviewsCandidate Interviewsrequired-operational_workflow:manage-
5job_postingsjob_postingsJob PostingJob Postingsembedded_masterats-recruitment-pipelineRecruitment Pipelinerequired-operational_workflow:manage-
6job_offersjob_offersOfferOffersembedded_masterats-offersJob Offersrequiredyesoperational_workflow:manage-
7recruitment_sourcesrecruitment_sourcesRecruitment SourceRecruitment Sourcesembedded_masterats-candidate-crmCandidate CRMoptional-catalog:admin-
8usersusersUserUsersconsumer(platform built-in)(platform built-in)required-operational_record: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_postingsis applied to viajob_applicationsone_to_manyreferencerequiredsourcerestrictreference-
candidatessubmitsjob_applicationsone_to_manyreferencerequiredtargetrestrictreference-
recruitment_sourcesattributescandidatesone_to_manyreferencerequiredtargetrestrictreference-
job_applicationsschedulesinterviewsone_to_manyreferencerequiredsourcerestrictreference-
interviewsis scored viainterview_scorecardsone_to_manyreferencerequiredsourcerestrictreference-
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-
job_postingshas publisherusersmany_to_manyrequiredsourcerestrictreference-
job_applicationshas owning recruiterusersmany_to_manyrequiredsourcerestrictreference-
interviewshas coordinator and panelistsusersmany_to_manyrequiredsourcerestrictreference-
interview_scorecardshas interviewer as authorusersmany_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.

(none: no outbound cross-scope edges from this scope’s masters or contributors)

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_postingssyndicates_viajob_posting_distributionsone_to_manyoptionalnonen/a-
job_postingsasksapplication_screening_questionsone_to_manyoptionalnonen/a-
job_applicationsanswers_viaapplication_screening_answersone_to_manyoptionalnonen/a-
candidatesself_identifies_viaeeo_responsesone_to_manyoptionalnonen/a-
interview_kitsshapesinterviewsone_to_manyoptionalnonen/a-
interviewsconvenesinterview_panelsone_to_onerequired⚠ audit: required composed child out of scopen/a-
interview_panelsproducesinterview_scorecardsone_to_manyoptionalnonen/a-
interviewer_availability_slotsbooked_forinterviewsone_to_oneoptionalnonen/a-
job_offersevolves_throughoffer_versionsone_to_manyrequired⚠ audit: required composed child out of scopen/a-
job_offersgated_byoffer_approvalsone_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-
job_profilesfeedsjob_postingsone_to_manyoptionalnonen/a-
skill_profilesfeedscandidatesone_to_manyoptionalnonen/a-
job_requisitionsis advertised throughjob_postingsone_to_manyrequirednone (required-if-present)n/a-
job_requisitionsreceivesjob_applicationsone_to_manyrequirednone (required-if-present)n/a-
candidate_referralsintroducescandidatesone_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_applicationsrequirescandidate_assessmentsone_to_manyrequirednone (required-if-present)n/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-
candidatesbecomesemployeesone_to_onerequirednone (required-if-present)n/a-
job_offersspawns pre-employee recordpre_employeesone_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)

(none: no other module embeds this scope’s masters; the canonical owners do.)

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-CRMPAPA-WORKFORCE-METRICSrecruitment_source.attributed(lifecycle)recruitment_sourcesbatch_synclowSource attribution feeds people-analytics quality-of-hire and cost-per-hire models.
ATS-INTERVIEWSPAPA-WORKFORCE-METRICSinterview_scorecard.submitted(lifecycle)interview_scorecardsevent_streamlow-
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-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)-
interview_scorecardsembedded_masteroptionalATS-INTERVIEWS (ATS)-
interviewsembedded_masterrequiredATS-INTERVIEWS (ATS)-
job_applicationsembedded_masterrequiredATS-RECRUITMENT-PIPELINE (ATS)-
job_offersembedded_masterrequiredATS-OFFERS (ATS)-
job_postingsembedded_masterrequiredATS-RECRUITMENT-PIPELINE (ATS)-
recruitment_sourcesembedded_masteroptionalATS-CANDIDATE-CRM (ATS)-
usersconsumerrequired(platform built-in)-

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-hiring-starter:hire_candidateCandidate accepted an offer and converted to employee.
4do_not_hire-hiring-starter:flag_do_not_hireCandidate flagged as ineligible for future consideration; gated decision.
5archived---Candidate kept in the database but not active in any pipeline.

interview_scorecards (Interview Scorecard)

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

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Interviewer is filling in ratings and notes against the rubric.
2submitted-hiring-starter:submit_scorecardScorecard submitted and locked; hire/no-hire recommendation recorded.

interviews (Interview)

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

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1scheduled---Interview booked with candidate, panel, time, and medium.
2confirmed----Candidate and panel confirmed attendance.
3completed---Interview took place; scorecards are being collected.
4no_show---Candidate or panel did not attend; interview did not occur.
5canceled---Interview canceled before it took place.
6rescheduled---Original slot abandoned in favor of a new scheduled interview record.

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-hiring-starter: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)

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--hiring-starter: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-hiring-starter:rescind_offerOffer withdrawn by the employer after being sent; gated action.

job_postings (Job Posting)

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

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Posting being composed against a requisition for a specific board or region.
2published--hiring-starter: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 canceled.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
hiring-starter:readbaseline-readRead access to every entity in the module
hiring-starter:managebaseline-manageEdit operational records
hiring-starter:adminbaseline-adminEdit reference data and inherit every workflow gate below-
hiring-starter:publish_postingworkflow-gate (lifecycle)Transition job_postings into state published
hiring-starter:hire_candidateworkflow-gate (lifecycle)Transition candidates into state hired
hiring-starter:flag_do_not_hireworkflow-gate (lifecycle)Transition candidates into state do_not_hire
hiring-starter:submit_scorecardworkflow-gate (lifecycle)Transition interview_scorecards into state submitted
hiring-starter:approve_offerworkflow-gate (lifecycle)Transition job_offers into state approved
hiring-starter:rescind_offerworkflow-gate (lifecycle)Transition job_offers into state rescinded
hiring-starter:view_all_candidatesoverride (personal_content)View all candidates rows beyond row-scope
hiring-starter:manage_all_candidatesoverride (personal_content)Manage all candidates rows beyond row-scope
hiring-starter:view_all_applicationsoverride (personal_content)View all job_applications rows beyond row-scope
hiring-starter:manage_all_applicationsoverride (personal_content)Manage all job_applications rows beyond row-scope
hiring-starter:view_all_interview_scorecardsoverride (personal_content)View all interview_scorecards rows beyond row-scope
hiring-starter:manage_all_interview_scorecardsoverride (personal_content)Manage all interview_scorecards rows beyond row-scope
hiring-starter:view_all_offersoverride (personal_content)View all job_offers rows beyond row-scope
hiring-starter:manage_all_offersoverride (personal_content)Manage all job_offers rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
candidate_edit_scopecandidateshas_personal_contentRow-scope by default; override via hiring-starter:view_all_candidates / hiring-starter:manage_all_candidates
application_edit_scopejob_applicationshas_personal_contentRow-scope by default; override via hiring-starter:view_all_applications / hiring-starter:manage_all_applications
interview_scorecard_edit_scopeinterview_scorecardshas_personal_contentRow-scope by default; override via hiring-starter:view_all_interview_scorecards / hiring-starter:manage_all_interview_scorecards
offer_edit_scopejob_offershas_personal_contentRow-scope by default; override via hiring-starter:view_all_offers / hiring-starter:manage_all_offers

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 HIRING-STARTER

Baseline roles:

rolebaseline grant
hiring-starter_viewerhiring-starter:read
hiring-starter_managerhiring-starter:manage

Permission hierarchy:

permissionincludes
hiring-starter:adminhiring-starter:manage
hiring-starter:managehiring-starter:read
hiring-starter:adminhiring-starter:publish_posting
hiring-starter:adminhiring-starter:hire_candidate
hiring-starter:adminhiring-starter:flag_do_not_hire
hiring-starter:adminhiring-starter:submit_scorecard
hiring-starter:adminhiring-starter:approve_offer
hiring-starter:adminhiring-starter:rescind_offer
hiring-starter:adminhiring-starter:view_all_candidates
hiring-starter:adminhiring-starter:manage_all_candidates
hiring-starter:adminhiring-starter:view_all_applications
hiring-starter:adminhiring-starter:manage_all_applications
hiring-starter:adminhiring-starter:view_all_interview_scorecards
hiring-starter:adminhiring-starter:manage_all_interview_scorecards
hiring-starter:adminhiring-starter:view_all_offers
hiring-starter:adminhiring-starter:manage_all_offers

Processes wired:

process_keyprocess_namePCF codePCF IDleveldescription
recruit_source_candidatesRecruit/Source candidates7.2.2104403Recruiting new candidates for deployment across various functional areas inside the organization. Select methods for sourcing new employees. Manage relationships with third-party agencies. Stage recruitment fairs and drives. Manage employee referral programs.
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.
interview_candidatesInterview candidates7.2.3.2104574Assessing the candidates by their performance in the interviews. Conduct HR interview, technical interview, hiring manager interview, etc. Understand the mindset of the candidate, and comprehend his/her personal and professional lives.
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-SOURCERpersonaresponsiblerecruit_source_candidatesgrant gates [hiring-starter:publish_posting] + the gated entities’ write tier
RECRUITING-RECRUITERpersonaresponsiblerecruit_source_candidatesgrant gates [hiring-starter:publish_posting] + the gated entities’ write tier
RECRUITING-MANAGERpersonaaccountablerecruit_source_candidatesapproval gate
HIRING-MANAGERpersonainformedrecruit_source_candidatesnotification side effect (trigger_event / webhook_receiver)
RECRUITING-RECRUITERpersonaresponsiblehire_candidategrant gates [hiring-starter:hire_candidate, hiring-starter:hire_candidate] + the gated entities’ write tier
HIRING-MANAGERpersonaaccountablehire_candidateapproval gate
LEGAL-COMPLIANCE-SPECIALISTpersonainformedhire_candidatenotification side effect (trigger_event / webhook_receiver)
HIRING-MANAGERpersonaresponsibleinterview_candidatesgrant gates [hiring-starter:submit_scorecard] + the gated entities’ write tier
RECRUITING-MANAGERpersonaaccountableinterview_candidatesapproval gate
RECRUITING-RECRUITERpersonaconsultedinterview_candidatesadvisory read grant
RECRUITING-COORDINATORpersonainformedinterview_candidatesnotification side effect (trigger_event / webhook_receiver)
RECRUITING-RECRUITERpersonaresponsibledraw_up_make_offergrant gates [hiring-starter: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