Semantius Logo

Candidate CRM

1. Overview

The candidate-relationship backbone of an ATS, masters candidates (including the prospect lifecycle state), recruitment sources, agencies, and events. Structurally the same shape as standalone candidate-CRM products. Folds the AI-RECRUIT capability (resume parsing, ML matching, screening assistants) since those tools operate on candidates and are tightly bound to candidate workflows.

2. Entity summary

Namedata_objectDescription
Agency Submissionsagency_submissionsRecords of a staffing or search agency submitting a candidate against a requisition, with the dedup ownership window and fee terms on conversion to a hire.
Candidate Consentscandidate_consentsPer-candidate opt-in records for privacy and data retention, with consent type, jurisdiction, and granted and withdrawal timestamps.
Candidate Documentscandidate_documentsFiles attached to a candidate such as resumes, cover letters, portfolios, and signed disclosures, with document type, storage location, and visibility.
Candidate Emailscandidate_emailsThreaded email correspondence with a candidate as a first-class record, capturing sent and received messages, the template used, and delivery status.
Candidate Engagementscandidate_engagementsSingle recruiter-to-candidate touchpoints across channels such as email, call, or SMS, with direction, timestamp, status, and content reference.
Candidate Notescandidate_notesInternal-only recruiter or hiring-team notes on a candidate, with author, body, visibility scope, and optional mentions, never sent to the candidate.
Candidate Nurture Campaignscandidate_nurture_campaignsMulti-touch automated outreach sequences targeting talent-pool segments, with cadence, step templates, audience filter, and lifecycle state.
CandidatescandidatesPeople known to the recruiting organization, with or without an active application, carrying contact details, resume, tags, consent, and source.
Data Subject Requestsdata_subject_requestsPrivacy rights requests from candidates exercising access, rectification, erasure, restriction, portability, or objection, with intake, due date, and fulfillment.
Outreach Sequence Stepsoutreach_sequence_stepsOrdered steps within an outreach sequence, each defining the channel, day offset, message template, and whether the step is automated or needs a recruiter action.
Outreach Sequencesoutreach_sequencesNamed multi-step sourcing cadences that automate candidate outreach across channels, holding the sequence name, owner, channel mix, and active status.
Recruiter Interactionsrecruiter_interactionsFree-text recruiter notes attached to a candidate, application, or talent pool, time-stamped and authored by a user.
Recruiting Event Attendancesrecruiting_event_attendancesLinks between candidates and recruiting events, recording registration, check-in, attendance, and conversion outcome.
Recruitment Agenciesrecruitment_agenciesThird-party recruiters and staffing firms supplying candidates, with contract terms, contacts, performance, and submitted candidates.
Recruitment Eventsrecruitment_eventsCareer fairs, campus events, hackathons, and meetups used as sourcing channels, tracking attendees, captured leads, and event return.
Recruitment Sourcesrecruitment_sourcesChannels a candidate came from, such as job board, referral, agency, campaign, or inbound, used for source-of-hire and channel analytics.
Opportunitiesinternal_opportunitiesInternal opportunity postings covering full-time roles, gigs, projects, stretch assignments, and mentorships.
Talent Poolstalent_poolsCurated pools of candidates kept warm for future roles, such as past finalists, alumni, and hard-to-fill skill clusters.
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;
  candidates["Candidates"]
  recruitment_sources["Recruitment Sources"]
  recruitment_agencies["Recruitment Agencies"]
  recruitment_events["Recruitment Events"]
  candidate_engagements["Candidate Engagements"]
  candidate_nurture_campaigns["Candidate Nurture Campaigns"]
  recruiting_event_attendances["Recruiting Event Attendances"]
  recruiter_interactions["Recruiter Interactions"]
  candidate_consents["Candidate Consents"]
  talent_pools["Talent Pools"]
  internal_opportunities["Opportunities"]
  candidate_documents["Candidate Documents"]
  candidate_notes["Candidate Notes"]
  data_subject_requests["Data Subject Requests"]
  candidate_emails["Candidate Emails"]
  agency_submissions["Agency Submissions"]
  outreach_sequences["Outreach Sequences"]
  outreach_sequence_steps["Outreach Sequence Steps"]
  users["Users"]
  candidates -->|"engaged_via"| candidate_engagements
  candidate_nurture_campaigns -->|"generates"| candidate_engagements
  candidates -->|"attends_via"| recruiting_event_attendances
  recruitment_events -->|"has_attendance"| recruiting_event_attendances
  candidates -->|"noted_via"| recruiter_interactions
  candidates -->|"consents_via"| candidate_consents
  talent_pools -->|"targets"| candidate_nurture_campaigns
  candidates -->|"submits_via"| data_subject_requests
  candidates -->|"documented_via"| candidate_documents
  candidates -->|"annotated_via"| candidate_notes
  recruitment_sources -->|"attributes"| candidates
  recruitment_agencies -->|"sources"| candidates
  recruitment_events -->|"attracts"| candidates
  talent_pools -->|"groups"| candidates
  candidates -->|"corresponds_via"| candidate_emails
  recruitment_agencies -->|"submits_via"| agency_submissions
  candidates -->|"submitted_via"| agency_submissions
  outreach_sequences -->|"contains"| outreach_sequence_steps
  users -->|"posts"| internal_opportunities
  candidates -->|"has owning recruiter"| users
  talent_pools -->|"has owner"| users
  recruitment_agencies -->|"has relationship owner"| users
  recruitment_events -->|"has coordinator"| users
  users -->|"uploaded documents"| candidate_documents
  users -->|"authored notes"| candidate_notes
  candidate_engagements -->|"has recruiter"| users
  candidate_nurture_campaigns -->|"has owner"| users
  data_subject_requests -->|"has owner"| users
  recruiting_event_attendances -->|"has owner"| users
  recruiter_interactions -->|"has author"| users
  candidate_emails -->|"has sender"| users
  agency_submissions -->|"has owner"| users
  outreach_sequences -->|"has owner"| users
  class candidates master;
  class recruitment_sources master;
  class recruitment_agencies master;
  class recruitment_events master;
  class candidate_engagements master;
  class candidate_nurture_campaigns master;
  class recruiting_event_attendances master;
  class recruiter_interactions master;
  class candidate_consents master;
  class talent_pools embedded_master;
  class internal_opportunities embedded_master;
  class candidate_documents master;
  class candidate_notes master;
  class data_subject_requests master;
  class candidate_emails master;
  class agency_submissions master;
  class outreach_sequences master;
  class outreach_sequence_steps master;
  class users platform_builtin;
  style candidate_consents stroke-dasharray:5 5;
  style talent_pools stroke-dasharray:5 5;
  style internal_opportunities stroke-dasharray:5 5;
  style data_subject_requests stroke-dasharray:5 5;

3. Entities catalog

#data_objectcanonical codesingularpluralrolemastered inmastered labelnecessitypersonal_contententity_typewrite tiernotes
1agency_submissionsagency_submissionsAgency SubmissionAgency Submissionsmaster--required-operational_record:manage-
2candidate_consentscandidate_consentsCandidate ConsentCandidate Consentsmaster--optionalyesoperational_workflow:manage-
3candidate_documentscandidate_documentsCandidate DocumentCandidate Documentsmaster--requiredyesoperational_record:manage-
4candidate_emailscandidate_emailsCandidate EmailCandidate Emailsmaster--requiredyesoperational_record:manage-
5candidate_engagementscandidate_engagementsCandidate EngagementCandidate Engagementsmaster--requiredyesoperational_record:manage-
6candidate_notescandidate_notesCandidate NoteCandidate Notesmaster--requiredyesoperational_record:manage-
7candidate_nurture_campaignscandidate_nurture_campaignsCandidate Nurture CampaignCandidate Nurture Campaignsmaster--required-operational_workflow:manage-
8candidatescandidatesCandidateCandidatesmaster--requiredyesoperational_workflow:manage-
9data_subject_requestsdata_subject_requestsData Subject RequestData Subject Requestsmaster--optionalyesoperational_workflow:manage-
10outreach_sequence_stepsoutreach_sequence_stepsOutreach Sequence StepOutreach Sequence Stepsmaster--required-catalog:admin-
11outreach_sequencesoutreach_sequencesOutreach SequenceOutreach Sequencesmaster--required-operational_workflow:manage-
12recruiter_interactionsrecruiter_interactionsRecruiter InteractionRecruiter Interactionsmaster--requiredyesoperational_record:manage-
13recruiting_event_attendancesrecruiting_event_attendancesRecruiting Event AttendanceRecruiting Event Attendancesmaster--required-junction:manage-
14recruitment_agenciesrecruitment_agenciesRecruitment AgencyRecruitment Agenciesmaster--required-operational_workflow:manage-
15recruitment_eventsrecruitment_eventsRecruitment EventRecruitment Eventsmaster--required-operational_workflow:manage-
16recruitment_sourcesrecruitment_sourcesRecruitment SourceRecruitment Sourcesmaster--required-catalog:admin-
17internal_opportunitiesinternal_opportunitiesOpportunityOpportunitiesembedded_mastertlnt-intel-marketplaceTalent Marketplaceoptional-operational_workflow:manage-
18talent_poolstalent_poolsTalent PoolTalent Poolsembedded_masterats-talent-poolsCandidate Talent Poolsoptional-operational_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
candidatesengaged_viacandidate_engagementsone_to_manyreferenceoptionaltargetclearreference-
candidate_nurture_campaignsgeneratescandidate_engagementsone_to_manycompositionoptionalsourcecascadeparent-
candidatesattends_viarecruiting_event_attendancesone_to_manyreferencerequiredtargetrestrictreference-
recruitment_eventshas_attendancerecruiting_event_attendancesone_to_manycompositionrequiredsourcecascadeparent-
candidatesnoted_viarecruiter_interactionsone_to_manyreferenceoptionaltargetclearreference-
candidatesconsents_viacandidate_consentsone_to_manycompositionrequiredsourcecascadeparent-
talent_poolstargetscandidate_nurture_campaignsmany_to_manyreferenceoptionalsourceclearreference-
candidatessubmits_viadata_subject_requestsone_to_manycompositionoptionalsourcecascadeparent-
candidatesdocumented_viacandidate_documentsone_to_manycompositionoptionalsourcecascadeparent-
candidatesannotated_viacandidate_notesone_to_manycompositionoptionalsourcecascadeparent-
recruitment_sourcesattributescandidatesone_to_manyreferencerequiredtargetrestrictreference-
recruitment_agenciessourcescandidatesone_to_manyreferencerequiredtargetrestrictreference-
recruitment_eventsattractscandidatesone_to_manyreferencerequiredtargetrestrictreference-
talent_poolsgroupscandidatesmany_to_manyreferencerequiredtargetrestrictreference-
candidatescorresponds_viacandidate_emailsone_to_manyreferenceoptionalsourceclearreference-
recruitment_agenciessubmits_viaagency_submissionsone_to_manyreferenceoptionalsourceclearreference-
candidatessubmitted_viaagency_submissionsone_to_manyreferenceoptionalsourceclearreference-
outreach_sequencescontainsoutreach_sequence_stepsone_to_manycompositionrequiredsourcecascadeparent-

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

fromverbtocardinalitynecessityowner_sidedelete_modefk_formatnotes
userspostsinternal_opportunitiesone_to_manyrequiredsourcerestrictreference-
candidateshas owning recruiterusersmany_to_manyoptionalsourceclearreference-
talent_poolshas ownerusersmany_to_manyrequiredsourcerestrictreference-
recruitment_agencieshas relationship ownerusersmany_to_manyrequiredsourcerestrictreference-
recruitment_eventshas coordinatorusersmany_to_manyrequiredsourcerestrictreference-
usersuploaded documentscandidate_documentsone_to_manyoptionalsourceclearreference-
usersauthored notescandidate_notesone_to_manyoptionalsourceclearreference-
candidate_engagementshas recruiterusersmany_to_manyrequiredsourcerestrictreference-
candidate_nurture_campaignshas ownerusersmany_to_manyoptionalsourceclearreference-
data_subject_requestshas ownerusersmany_to_manyoptionalsourceclearreference-
recruiting_event_attendanceshas ownerusersmany_to_manyoptionalsourceclearreference-
recruiter_interactionshas authorusersmany_to_manyrequiredsourcerestrictreference-
candidate_emailshas senderusersmany_to_manyoptionalsourceclearreference-
agency_submissionshas ownerusersmany_to_manyoptionalsourceclearreference-
outreach_sequenceshas ownerusersmany_to_manyoptionalsourceclearreference-

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
candidatesverified_viaright_to_work_verificationsone_to_manyoptionalnonen/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-
candidatesself_identifies_viaeeo_responsesone_to_manyoptionalnonen/a-
candidatesself_ids_viavoluntary_self_identificationsone_to_manyoptionalnonen/a-
candidatesacknowledges_viafcra_summary_of_rights_acknowledgementsone_to_manyoptionalnonen/a-
candidatestagged_viacandidate_tag_assignmentsone_to_manyoptionalnonen/a-
dlp_incidentstriggers_privacy_reviewdata_subject_requestsone_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-
candidatesbecomesemployeesone_to_onerequirednone (required-if-present)n/a-
candidatesbecomes pre-employeepre_employeesone_to_onerequirednone (required-if-present)n/a-
employeesapplies_ascandidatesone_to_manyoptionalnonen/a-
candidatesscreened_viadrug_health_screeningsone_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
internal_opportunitiesreceivesopportunity_applicationsone_to_manyoptionalnonen/a-
internal_opportunitiesranked byfit_scoresone_to_manyoptionalnonen/a-
talent_poolshas_membertalent_pool_membershipsone_to_manyrequired⚠ audit: required composed child out of scopen/a-
talent_segmentsmaterializes_intotalent_poolsone_to_manyoptionalnonen/a-

6. Cross-domain context

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

data_objectother module / domainrolenecessitynotes
candidatesATS-BACKGROUND-CHECKS (Background Checks) - ATSembedded_masterrequired-
candidatesATS-INTERVIEWS (Candidate Interviews) - ATSembedded_masterrequired-
candidatesATS-OFFERS (Job Offers) - ATSembedded_masterrequired-
candidatesATS-PRE-EMPLOYEE-RECORD (Pre-Employee Record) - ATSembedded_masterrequired-
candidatesATS-RECRUITMENT-PIPELINE (Recruitment Pipeline) - ATSembedded_masterrequired-
candidatesATS-REFERRALS (Employee Referrals) - ATSembedded_masterrequired-
candidatesATS-TALENT-POOLS (Candidate Talent Pools) - ATSembedded_masterrequired-
candidatesHCM-LIFECYCLE-WORKFLOWS (Employee Lifecycle Workflows) - HCMconsumeroptional-
candidatesHIRING-STARTER (Hiring Starter) - ATSembedded_masterrequired-
candidatesONB-JOURNEY-MGMT (Onboarding Journey Management) - ONBOARDINGconsumerrequired-
data_subject_requestsABM-INTENT (Intent and Identity) - ABM-PLATFORMembedded_masteroptional-
recruitment_sourcesHIRING-STARTER (Hiring Starter) - ATSembedded_masteroptional-
recruitment_sourcesPA-WORKFORCE-METRICS (Workforce Metrics) - PAconsumerrequired-

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-CANDIDATE-CRMATSATS-TALENT-POOLSrecruitment_event.held(lifecycle)recruitment_eventslifecycle_progressionlow-
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-CANDIDATE-CRMONBOARDINGONB-JOURNEY-MGMTcandidate.hiredhired (lifecycle)candidatesevent_streammediumHired candidate drives onboarding-plan kickoff with role/location/manager context from ATS payload.
TLNT-INTEL-MARKETPLACETLNT-INTELTLNT-INTEL-MOBILITYopportunity.openedopen (state_change)internal_opportunitieslifecycle_progressionlowA newly opened opportunity triggers MOBILITY to recompute match inferences and fit scores for eligible employees.

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-TALENT-POOLStalent_pool.candidate_added(lifecycle)talent_poolslifecycle_progressionlow-
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
internal_opportunitiesembedded_masteroptionalTLNT-INTEL-MARKETPLACE (TLNT-INTEL)-
talent_poolsembedded_masteroptionalATS-TALENT-POOLS (ATS)-

7. Lifecycle states

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1granted---Candidate has granted consent.
2withdrawn-ats-candidate-crm:withdraw_consentCandidate revoked consent; data must be anonymized per policy.
3expired---Retention window elapsed without renewal.

candidate_engagements (Candidate Engagement)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1planned---Engagement queued, not yet sent.
2sent----Outbound dispatched to candidate.
3delivered----Channel confirmed delivery.
4responded---Candidate replied or engaged with content.
5bounced---Delivery failed (bad address, blocked, unsubscribed).

candidate_nurture_campaigns (Candidate Nurture Campaign)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Campaign being authored.
2active----Campaign live and sending to audience.
3paused----Campaign halted; can resume.
4completed---Campaign reached scheduled end.

candidates (Candidate)

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.

data_subject_requests (Data Subject Request)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1received---Data subject request received. The GDPR 30-day response clock starts; extension to 60 days requires a separate notification to the subject.
2verified--ats-candidate-crm:verify_dsr_identityIdentity of the data subject confirmed by the DPO or designated handler. Required before any data is disclosed or modified.
3in_progress----Auto-progressed once identity is verified. Collection and review of subject data underway.
4fulfilled-ats-candidate-crm:fulfill_dsrFull response delivered to the data subject within the regulatory window. All requested data provided or the requested action completed.
5partially_fulfilled-ats-candidate-crm:fulfill_dsr_partiallyPartial response delivered. Some data categories were unavailable or out of scope; the rationale is documented on the request record.
6rejected-ats-candidate-crm:reject_dsrRequest rejected (unverifiable identity, manifestly unfounded, repetitive, or out of scope). Rejection rationale documented on the request record.

internal_opportunities (Opportunity)

This scope holds internal_opportunities as embedded_master; the canonical state machine is owned by TLNT-INTEL-MARKETPLACE.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft----
2open--ats-candidate-crm:publish_opportunity-
3closed--ats-candidate-crm:close_opportunity-
4filled----
5canceled-ats-candidate-crm:cancel_opportunity-

outreach_sequences (Outreach Sequence)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft----
2active--ats-candidate-crm:activate_outreach_sequence-
3paused-----
4archived----

recruiting_event_attendances (Recruiting Event Attendance)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1registered---Candidate RSVP’d or was pre-registered.
2checked_in----Candidate arrived at the event.
3attended---Engaged at the event; eligible for follow-up.
4no_show---Registered but did not attend.

recruitment_agencies (Recruitment Agency)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1prospective---Agency under evaluation; contract not yet executed.
2active----Agency has executed agreement and is engaged on one or more requisitions.
3on_hold----Engagement paused (performance review, contractual dispute, hiring freeze).
4terminated---Relationship ended; no further requisitions are routed to this agency.

recruitment_events (Recruitment Event)

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1planned---Event scoped and budgeted; date, venue, target audience set; registration not yet open.
2open_for_registration----Registration is accepting attendees; promotion campaigns active.
3held----Event has been executed; attendee lists captured, leads ingested into talent pool.
4closed---Post-event activities complete; cost accounting and source-attribution finalized.
5canceled---Event called off before it happens; sunk costs recognized, attendees notified.

talent_pools (Talent Pool)

This scope holds talent_pools as embedded_master; the canonical state machine is owned by ATS-TALENT-POOLS.

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.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
ats-candidate-crm:readbaseline-readRead access to every entity in the module
ats-candidate-crm:managebaseline-manageEdit operational records
ats-candidate-crm:adminbaseline-adminEdit reference data and inherit every workflow gate below-
ats-candidate-crm:hire_candidateworkflow-gate (lifecycle)Transition candidates into state hired
ats-candidate-crm:flag_do_not_hireworkflow-gate (lifecycle)Transition candidates into state do_not_hire
ats-candidate-crm:publish_opportunityworkflow-gate (lifecycle)Transition internal_opportunities into state open
ats-candidate-crm:close_opportunityworkflow-gate (lifecycle)Transition internal_opportunities into state closed
ats-candidate-crm:cancel_opportunityworkflow-gate (lifecycle)Transition internal_opportunities into state canceled
ats-candidate-crm:withdraw_consentworkflow-gate (lifecycle)Transition candidate_consents into state withdrawn
ats-candidate-crm:verify_dsr_identityworkflow-gate (lifecycle)Transition data_subject_requests into state verified
ats-candidate-crm:fulfill_dsrworkflow-gate (lifecycle)Transition data_subject_requests into state fulfilled
ats-candidate-crm:fulfill_dsr_partiallyworkflow-gate (lifecycle)Transition data_subject_requests into state partially_fulfilled
ats-candidate-crm:reject_dsrworkflow-gate (lifecycle)Transition data_subject_requests into state rejected
ats-candidate-crm:activate_outreach_sequenceworkflow-gate (lifecycle)Transition outreach_sequences into state active
ats-candidate-crm:view_all_candidatesoverride (personal_content)View all candidates rows beyond row-scope
ats-candidate-crm:manage_all_candidatesoverride (personal_content)Manage all candidates rows beyond row-scope
ats-candidate-crm:view_all_candidate_engagementsoverride (personal_content)View all candidate_engagements rows beyond row-scope
ats-candidate-crm:manage_all_candidate_engagementsoverride (personal_content)Manage all candidate_engagements rows beyond row-scope
ats-candidate-crm:view_all_recruiter_interactionsoverride (personal_content)View all recruiter_interactions rows beyond row-scope
ats-candidate-crm:manage_all_recruiter_interactionsoverride (personal_content)Manage all recruiter_interactions rows beyond row-scope
ats-candidate-crm:view_all_candidate_consentsoverride (personal_content)View all candidate_consents rows beyond row-scope
ats-candidate-crm:manage_all_candidate_consentsoverride (personal_content)Manage all candidate_consents rows beyond row-scope
ats-candidate-crm:view_all_candidate_documentsoverride (personal_content)View all candidate_documents rows beyond row-scope
ats-candidate-crm:manage_all_candidate_documentsoverride (personal_content)Manage all candidate_documents rows beyond row-scope
ats-candidate-crm:view_all_candidate_notesoverride (personal_content)View all candidate_notes rows beyond row-scope
ats-candidate-crm:manage_all_candidate_notesoverride (personal_content)Manage all candidate_notes rows beyond row-scope
ats-candidate-crm:view_all_data_subject_requestsoverride (personal_content)View all data_subject_requests rows beyond row-scope
ats-candidate-crm:manage_all_data_subject_requestsoverride (personal_content)Manage all data_subject_requests rows beyond row-scope
ats-candidate-crm:view_all_candidate_emailsoverride (personal_content)View all candidate_emails rows beyond row-scope
ats-candidate-crm:manage_all_candidate_emailsoverride (personal_content)Manage all candidate_emails rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
candidate_edit_scopecandidateshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidates / ats-candidate-crm:manage_all_candidates
candidate_engagement_edit_scopecandidate_engagementshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidate_engagements / ats-candidate-crm:manage_all_candidate_engagements
recruiter_interaction_edit_scoperecruiter_interactionshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_recruiter_interactions / ats-candidate-crm:manage_all_recruiter_interactions
candidate_consent_edit_scopecandidate_consentshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidate_consents / ats-candidate-crm:manage_all_candidate_consents
candidate_document_edit_scopecandidate_documentshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidate_documents / ats-candidate-crm:manage_all_candidate_documents
candidate_note_edit_scopecandidate_noteshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidate_notes / ats-candidate-crm:manage_all_candidate_notes
data_subject_request_edit_scopedata_subject_requestshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_data_subject_requests / ats-candidate-crm:manage_all_data_subject_requests
candidate_email_edit_scopecandidate_emailshas_personal_contentRow-scope by default; override via ats-candidate-crm:view_all_candidate_emails / ats-candidate-crm:manage_all_candidate_emails

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-CANDIDATE-CRM

Baseline roles:

rolebaseline grant
ats-candidate-crm_viewerats-candidate-crm:read
ats-candidate-crm_managerats-candidate-crm:manage
ats-candidate-crm_adminats-candidate-crm:admin

Permission hierarchy:

permissionincludes
ats-candidate-crm:adminats-candidate-crm:manage
ats-candidate-crm:manageats-candidate-crm:read
ats-candidate-crm:adminats-candidate-crm:hire_candidate
ats-candidate-crm:adminats-candidate-crm:flag_do_not_hire
ats-candidate-crm:adminats-candidate-crm:publish_opportunity
ats-candidate-crm:adminats-candidate-crm:close_opportunity
ats-candidate-crm:adminats-candidate-crm:cancel_opportunity
ats-candidate-crm:adminats-candidate-crm:withdraw_consent
ats-candidate-crm:adminats-candidate-crm:verify_dsr_identity
ats-candidate-crm:adminats-candidate-crm:fulfill_dsr
ats-candidate-crm:adminats-candidate-crm:fulfill_dsr_partially
ats-candidate-crm:adminats-candidate-crm:reject_dsr
ats-candidate-crm:adminats-candidate-crm:activate_outreach_sequence
ats-candidate-crm:adminats-candidate-crm:view_all_candidates
ats-candidate-crm:adminats-candidate-crm:manage_all_candidates
ats-candidate-crm:adminats-candidate-crm:view_all_candidate_engagements
ats-candidate-crm:adminats-candidate-crm:manage_all_candidate_engagements
ats-candidate-crm:adminats-candidate-crm:view_all_recruiter_interactions
ats-candidate-crm:adminats-candidate-crm:manage_all_recruiter_interactions
ats-candidate-crm:adminats-candidate-crm:view_all_candidate_consents
ats-candidate-crm:adminats-candidate-crm:manage_all_candidate_consents
ats-candidate-crm:adminats-candidate-crm:view_all_candidate_documents
ats-candidate-crm:adminats-candidate-crm:manage_all_candidate_documents
ats-candidate-crm:adminats-candidate-crm:view_all_candidate_notes
ats-candidate-crm:adminats-candidate-crm:manage_all_candidate_notes
ats-candidate-crm:adminats-candidate-crm:view_all_data_subject_requests
ats-candidate-crm:adminats-candidate-crm:manage_all_data_subject_requests
ats-candidate-crm:adminats-candidate-crm:view_all_candidate_emails
ats-candidate-crm:adminats-candidate-crm:manage_all_candidate_emails

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-candidate-crm: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