Domain map, not a database schema. Code · exact = audited model name; Code · alias = simpler label for code; Concept = explanatory grouping; Planned = pilot requirement, not a shipped entity. Select a node for its code mapping.
Current
Proposed agency pilot
Entity
Link record
Document
Concept / external system
1:n one-to-many · n:1 many-to-one · “1 active” at a time
Three links that are easy to confuse
CompanyMembership A person may act inside a company. Profile → Company · grants AccessLevel · current
Representation An agency may act for a candidate. Agency → Candidate profile · Active / Ended · proposed
Referral Who brought the candidate in. Invite candidates link → Profile · no rights · current
Recommendations — naming, boundaries and pilot scope
The Use / Avoid guidance is our recommended domain language, not a claim that these names are already implemented. Solid relationships describe current code; dashed relationships describe the Confluence pilot.
Use
Self-managed candidate / Agency-managed candidate / Representation ended
Agency candidates as the domain term; External sourcing is only the feature label
Applicant = a candidate in the context of one job
Hiring company = the role a Company plays for a job
Agency member = person acting via an ordinary CompanyMembership
Avoid
“Open candidate” meaning “no active representation”
“Lead Recruiter” (outdated; roles are Hiring Manager, Recruiter, Senior Recruiter, Manager)
“Hired” as a person type or as a JobApplication status
Calling a JobProposal an offer, or a match consent
Agency as a third account type next to candidate and recruiter
Reading profileType COMPANY_OWNER as company permissions
Later / out of pilot scope
Agency contracts, fees and agency-specific billing (ordinary company subscriptions already exist)
Several agencies per profile
Candidate logins for agency-managed profiles
Scope and open decisions
R3 stores the batch salary range as candidate expected salary. Agency client rates are a separate concept and remain outside this pilot.
End then Delete is in the pilot: End stops representation; Delete erases the profile separately. Retention and deletion wording still need agreement.
R19 suggests disclosure after approval, but R8/R20 retain masking. This view follows R8/R20 pending clarification.
R18 broadly removes visibility after End, while R13 preserves existing applicants. This view follows R13’s explicit exception pending clarification.
Sources and confidence
Agency pilot (proposal)
Engineering plan : original model based on v29; implementation details must be reconciled with the business requirements below
Business requirements v18 , checked 5 November 2026: basis for this updated pilot view, including R20 Partner API delivery. Candidate notice, email-based reactivation and CV production differ from earlier engineering assumptions and remain reconciliation questions.
Person and Account are concepts: today one UserProfile record mixes account and profile concerns.
Cardinalities appear only where verified. Who owns a saved-candidate list is not drawn.