Semantius Logo

Candidate Talent Pools

1. Overview

Curated candidate groupings for nurture and pipeline-building (talent_pools). Embedded-masters candidates; deployed alone, materializes a thin candidate shell. Mirrors standalone talent-acquisition CRM products.

2. Entity summary

Namedata_objectDescription
Candidate Tag Assignmentscandidate_tag_assignmentsLinks between candidates and tags, recording who assigned each tag and when, with optional context.
Candidate Tagscandidate_tagsFree-form labels applied to candidates to support segmentation, search, and pool inclusion, with name, optional category, and color.
Recruiter Saved Searchesrecruiter_saved_searchesSaved recruiter searches over the candidate database, with the filter expression, last-run time, and alert preferences.
Talent Pool Membershipstalent_pool_membershipsLinks between candidates and talent pools, carrying added date, source, status in the pool, match score, and last engagement.
Talent Poolstalent_poolsCurated pools of candidates kept warm for future roles, such as past finalists, alumni, and hard-to-fill skill clusters.
Talent Segmentstalent_segmentsRule-based pool definitions over candidates that automatically populate membership from a saved filter.
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;
  talent_pools["Talent Pools"]
  candidates["Candidates"]
  talent_pool_memberships["Talent Pool Memberships"]
  talent_segments["Talent Segments"]
  recruiter_saved_searches["Recruiter Saved Searches"]
  candidate_tags["Candidate Tags"]
  candidate_tag_assignments["Candidate Tag Assignments"]
  users["Users"]
  talent_pools -->|"has_member"| talent_pool_memberships
  candidates -->|"member_of_via"| talent_pool_memberships
  talent_segments -->|"materializes_into"| talent_pools
  candidates -->|"tagged_via"| candidate_tag_assignments
  candidate_tags -->|"applied_via"| candidate_tag_assignments
  talent_pools -->|"groups"| candidates
  candidates -->|"has owning recruiter"| users
  talent_pools -->|"has owner"| users
  users -->|"assigned tags"| candidate_tag_assignments
  recruiter_saved_searches -->|"has owner"| users
  class talent_pools master;
  class candidates embedded_master;
  class talent_pool_memberships master;
  class talent_segments master;
  class recruiter_saved_searches master;
  class candidate_tags master;
  class candidate_tag_assignments master;
  class users platform_builtin;
  style recruiter_saved_searches stroke-dasharray:5 5;

3. Entities catalog

#data_objectcanonical codesingularpluralrolemastered inmastered labelnecessitypersonal_contententity_typewrite tiernotes
1candidate_tag_assignmentscandidate_tag_assignmentsCandidate Tag AssignmentCandidate Tag Assignmentsmaster--required-junction:admin-
2candidate_tagscandidate_tagsCandidate TagCandidate Tagsmaster--required-catalog:admin-
3recruiter_saved_searchesrecruiter_saved_searchesRecruiter Saved SearchRecruiter Saved Searchesmaster--optional-catalog:admin-
4talent_pool_membershipstalent_pool_membershipsTalent Pool MembershipTalent Pool Membershipsmaster--required-junction:manage-
5talent_poolstalent_poolsTalent PoolTalent Poolsmaster--required-operational_workflow:manage-
6talent_segmentstalent_segmentsTalent SegmentTalent Segmentsmaster--required-catalog:admin-
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
talent_poolshas_membertalent_pool_membershipsone_to_manycompositionrequiredsourcecascadeparent-
candidatesmember_of_viatalent_pool_membershipsone_to_manyreferencerequiredtargetrestrictreference-
talent_segmentsmaterializes_intotalent_poolsone_to_manyreferenceoptionalsourceclearreference-
candidatestagged_viacandidate_tag_assignmentsone_to_manyreferenceoptionalsourceclearreference-
candidate_tagsapplied_viacandidate_tag_assignmentsone_to_manyreferencerequiredsourcerestrictreference-
talent_poolsgroupscandidatesmany_to_manyreferencerequiredtargetrestrictreference-

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

fromverbtocardinalitynecessityowner_sidedelete_modefk_formatnotes
candidateshas owning recruiterusersmany_to_manyoptionalsourceclearreference-
talent_poolshas ownerusersmany_to_manyrequiredsourcerestrictreference-
usersassigned tagscandidate_tag_assignmentsone_to_manyoptionalsourceclearreference-
recruiter_saved_searcheshas ownerusersmany_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
talent_poolstargetscandidate_nurture_campaignsmany_to_manyoptionalnonen/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-
candidatesdiscloses_viafcra_disclosuresone_to_manyrequired⚠ audit: required composed child out of scopen/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-
candidatesdocumented_viacandidate_documentsone_to_manyoptionalnonen/a-
candidatesannotated_viacandidate_notesone_to_manyoptionalnonen/a-
skill_profilesfeedscandidatesone_to_manyoptionalnonen/a-
candidatessubmitsjob_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-
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
talent_poolsATS-CANDIDATE-CRM (Candidate CRM) - ATSembedded_masteroptional-

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-TALENT-POOLSATSATS-CANDIDATE-CRMtalent_pool.candidate_added(lifecycle)talent_poolslifecycle_progressionlow-
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-CANDIDATE-CRMATSATS-REFERRALScandidate_referral.submitted(lifecycle)candidateslifecycle_progressionlow-

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

data_objectrole herenecessitycanonical owner(s)slice notes
candidatesembedded_masterrequiredATS-CANDIDATE-CRM (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-talent-pools:hire_candidateCandidate accepted an offer and converted to employee.
4do_not_hire-ats-talent-pools:flag_do_not_hireCandidate flagged as ineligible for future consideration; gated decision.
5archived---Candidate kept in the database but not active in any pipeline.

talent_pool_memberships (Talent Pool Membership)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1cold---In pool, no recent engagement.
2warm----Recent positive engagement (replied, attended event).
3hot----Actively engaged; recruiter is in conversation about a specific role.
4removed---Candidate removed from pool (opt-out, archive, do-not-contact).

talent_pools (Talent Pool)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1active---Pool is open for additions and nurture campaigns.
2paused----Pool nurture is temporarily halted (off-season, budget freeze) but membership is retained.
3archived---Pool is closed; membership is retained for historical attribution but no further outreach occurs.

talent_segments (Talent Segment)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Segment rule being authored.
2active----Segment live; membership materializes from rule.
3archived---Segment retired; rule no longer evaluated.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
ats-talent-pools:readbaseline-readRead access to every entity in the module
ats-talent-pools:managebaseline-manageEdit operational records
ats-talent-pools:adminbaseline-adminEdit reference data and inherit every workflow gate below-
ats-talent-pools:hire_candidateworkflow-gate (lifecycle)Transition candidates into state hired
ats-talent-pools:flag_do_not_hireworkflow-gate (lifecycle)Transition candidates into state do_not_hire
ats-talent-pools:view_all_candidatesoverride (personal_content)View all candidates rows beyond row-scope
ats-talent-pools:manage_all_candidatesoverride (personal_content)Manage all candidates rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
candidate_edit_scopecandidateshas_personal_contentRow-scope by default; override via ats-talent-pools:view_all_candidates / ats-talent-pools:manage_all_candidates

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-TALENT-POOLS

Baseline roles:

rolebaseline grant
ats-talent-pools_viewerats-talent-pools:read
ats-talent-pools_managerats-talent-pools:manage
ats-talent-pools_adminats-talent-pools:admin

Permission hierarchy:

permissionincludes
ats-talent-pools:adminats-talent-pools:manage
ats-talent-pools:manageats-talent-pools:read
ats-talent-pools:adminats-talent-pools:hire_candidate
ats-talent-pools:adminats-talent-pools:flag_do_not_hire
ats-talent-pools:adminats-talent-pools:view_all_candidates
ats-talent-pools:adminats-talent-pools:manage_all_candidates

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.

RACI realization:

actorkindraciprocess_keyrealization
RECRUITING-RECRUITERpersonaresponsiblehire_candidategrant gates [ats-talent-pools:hire_candidate] + the gated entities’ write tier
HIRING-MANAGERpersonaaccountablehire_candidateapproval gate
LEGAL-COMPLIANCE-SPECIALISTpersonainformedhire_candidatenotification side effect (trigger_event / webhook_receiver)

9.2 Functional ownership and default grants

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