Off Limits Policies: ATS Stage
Overview
When Off Limits ATS Stage Policies are created, a certain ATS Stage becomes Off Limits. This means that if a Candidate A person looking for a job. A candidate can also be referred to as a Job Seeker, Applicant, or Provider. is moved to that stage, an Off Limit Line Item (or badge) is created and the Candidate is tagged as Off Limits. This article covers general information regarding Off Limits ATS Stage Policies and how to enable this type of policy.
When an ATS Stage Policy is created and marked active only future stage changes will be considered for Off Limit Line Item creation. Candidates A person looking for a job. A candidate can also be referred to as a Job Seeker, Applicant, or Provider. already in the ATS Stage designated by the policy when the policy is activated are not considered. See Appendix 2: Off Limit Recalculation global class for details on how to bypass this logic using an API API, or Application Programming Interface, is used by customers to create custom career portals or to take advantage of Data Mirror/DataMart. Bullhorn prefers to use REST API..
Creating an Off Limit ATS Stage Policy
There are three scenarios where Candidates are not considered Off Limits even if they meet the criteria of an Off Limit ATS Stage Policy:
- When candidates become Off Limits because of an ATS Stage Policy, they become Off Limits for all jobs A job (vacancy, position, role) is an opening for which a customer's client needs a placement. except the current Job A job (vacancy, position, role) is an opening for which a customer's client needs a placement. they are applied to.
- If a candidate is already Off Limits for an Account and reaches an Off Limits ATS Stage for a job with that Account, the ATS Stage Policy is not applied.
- Jobs marked as "Non-Executive Search Jobs" are excluded from Off Limits logic.
Narrowing Down the ATS Stage Policy Criteria
You can narrow down the ATS Stage policy criteria by also configuring a Job Status and a Job Record Type in the policy. For example, the following ATS Stage Policy configurations narrow down the criteria in different ways:
- ATS Stage = Submittal The Second Stage of Job application flow. This is when the recruiter sends the Candidate CV to the client, a sort of first introduction.: Any Candidate on any Job moved to Submittal will become Off Limits.
- ATS Stage = Submittal and Job Status = Open: Any Candidate on any Open Job moved to Submittal will become Off Limits.
- ATS Stage = Submittal, Job Status = Open and Job Record Type = Permanent: Any Candidate on any open permanent Job moved to Submittal will become Off Limits.
The Job Status field and Job Record Type field on an ATS Stage Policy record functions like filters for the policy that is being configured. Changing the value of these fields does not trigger any recalculation.
Choosing the Duration
The Duration field on an ATS Stage Policy determines the period of time that a Candidate remains Off Limits because of the policy.
Leaving Duration blank is not supported.
The Duration (expressed in number of days) entered on the policy record is used by
to determine the Off Limit Line Item’s Duration (how long the Candidate will be Off Limits):- The Start Date is the date when the candidate is moved to the relevant stage and the Off Limit Line Item is created.
- The End Date is calculated by adding Start Date + Duration.
There are a number of events that can take place before the Duration expires that can affect the enforcement of the Off Limits attribute:
- The Candidate is moved to a different ATS Stage.
- The Job is closed.
- The Job is closed for a specific Closed Reason.
For those scenarios options can be configured at policy level to let the user decide on the Duration Behavior when a Candidate is moved to a different ATS Stage before the Duration is expired. A second layer of configuration can be added to control what happens to the Off Limits constraint when the Job is closed or closed with a specific Closed Reason before the Duration has expired.
A Candidate is Moved Off the ATS Stage before Duration Expires
To decide what happens to the Off Limit Line Item in this scenario, you can choose one of the following options when creating the policy:
- Do Nothing: Off Limits duration runs its course not withstanding the change of Stage.
- Disable: Off Limit Line Item is disabled the moment the Candidate is moved. The Off Limit Line Item’s end date is populated with the date of stage change.
- Update: An extension (a set amount of days) is added to the Duration on the policy. After selecting this option, enter a value in the Additional Days on Stage Update field. This is effectively the new duration.
- Start Date is the day when the Candidate has been moved to a different stage, End Date is the new Start Date plus the value entered in Additional Days on Stage Update field.
Changes are Made to a Job Before the Duration Expires
For this scenario, we use a custom object - Off Limit Policy Extension - and the "Duration Behavior" configured by creating records against this object applies to the ATS Stage Policy related to the record.
If nothing is configured for this scenario, the Duration of the Off Limit ATS Stage Policy and related Line Items is decided exclusively by what’s configured on the policy.
The configuration of an Off Limit Policy Extension record determines the following:
- What Job Changes (Job Field updates) can trigger a change of Duration:
- ATS Stage change.
- Job Status change.
- Closed Reason change.
- What happens to Off Limit Line Items Duration when we register such a change:
- Do Nothing: Off Limits Duration runs its course regardless of the change of Stage/Job Status/Closed Reason.
- Disable: Off Limit Line Items are disabled the moment registers a change of Stage/Job Status/Closed Reason.
- Update: An extension (a set amount of days) is added to the Duration set for the Off Limit Line Item. If selecting this option, enter a value in the Additional Days field. This is effectively the new Duration.
- Start Date is the day when the change is registered (today). And the End Date is the new Start Date plus the value entered in the Additional Days field.
The configuration can be for only one, two or all three of the fields (Job Status, Job Closed Reason, ATS Stage).
The above configuration options were implemented for these common use cases:
- Regardless of what is configured at policy level, when a Job is closed (for any reason) all Off Limits should be lifted.
- Regardless of what is configured at policy level, if a Job is closed because it was filled (a suitable Candidate was found), all Off Limit Line Items remain active until Duration expires for all Candidates applied except the one that was Placed.
- Regardless of what is configured at policy level if a Job is closed because it was canceled (for example, if no suitable Candidate were found), then all Off Limits are lifted immediately.
Configuring the General Off Limits ATS Stage Policy
Choose from the following ATS Stage Policy configuration options:
Field Name | API Name | Field Type | Description | Supports Updates |
---|---|---|---|---|
Description | TR1__Description__c | Text(255) | General description of the policy. | Yes |
Reason | TR1__Reason__c | Text(255) |
The name / short description of this policy. The value in this field is shown in the Off Limits warning/block popup to inform users why the Contact they selected is Off Limit. This field is required at database level and must always be populated. If not, even when removed from the layout, users will not be able to save the policy. |
Yes |
Legal Reason | TR1__Legal_Reason__c | Text(255) | Legal reason for enforcing this policy, if relevant. | Yes |
Type | TR1__Type__c |
Picklist |
The behavior enforced at checkpoints when an Off Limits Contact is selected for some actions. The options are Block or Warning. | Yes. If the value is changed on an existing policy, the change is only propagated to Line Items created afterwards. |
Active | TR1__Active__c | Checkbox | Flag that shows if this policy is active or not. If unchecked, the policy and all related Off Limits Line Items are disabled. | Yes |
ATS Stage | TR1__ATS_Stage__c | Text(255) | ATS Stage that makes Candidates Off Limits when reached. | No |
Job Record Type | TR1__Job_Record_Type__c | Text(255) | Job Record Type that the ATS Stage policy applies to. | No |
Job Status | TR1__Job_Status__c | Text(255) | Job Status Type that the ATS Stage policy applies to. | No |
Duration | TR1__Duration__c | Number (18, 0) | The period of time that Candidates remain Off Limits when a policy is applied to them. | Yes |
Behavior on Stage Change | TR1__Behavior_on_Stage_change__c | Picklist | For ATS Stage Policies only. The value chosen in the picklist determines what happens to the Line Item Duration when a Candidate is moved to a different stage. The out of the box values are Do Nothing, Disable, and Update. | No |
Additional Days on Stage Update | TR1__Additional_Days_on_Stage_Update__c | Number (18, 0) | Days added to Off Limit Duration after triggering the update behavior on Stage Change. The clock starts on the stage change date, so effectively the value in this field is the new Duration. | Yes |
Disable Off Limits On Policy Disable | TR1__Disable_Off_Limits_On_Policy_Diable__c | Checkbox | Unselected out of the box. The default behavior is that if an ATS Stage Policy is disabled all active related Off Limit Line Items remain enabled until their Duration is expired. Select this checkbox if you want all active Off Limit Line Items to be disabled when the related ATS Stage Policy is disabled. | Yes |
Off Limit Policy Extensions Object
Executive Jobs and Non-Executive Jobs
Recruiting agencies specialized in Executive Searches may also routinely deal with non-Executive jobs. Both types of Job records can be present in the same Org.
The Off Limits logic does not apply to non-Executive jobs: actions performed with Candidates applied to a non-Executive job will not trigger any Off Limits functionality: ATS Stage policies are not enforced for Candidates applied to non-executive jobs.
Through configuration, it is possible to ensure that Contacts A contact (or client contact) is the person who the recruiter is working with at a Company. In Talent Rover a Contact can be either a Client Contact or a Candidate Contact. Both types of Contacts are stored in the same object (Contact). and Candidates associated with such jobs.
recognizes non-Executive Search jobs and ignores any Off Limits constraints forAdditional Information
Use Case Examples
Conditions Met | Situation | Outcome |
---|---|---|
|
Candidate C is added to a Job at Stage X. | Candidate C becomes Off Limits for "N" Days starting from when they are moved to Stage X. |
|
Candidate C is moved from Stage X to Stage Y of same Job. | Candidate C is no longer Off Limits because Behavior on Stage Change is "Disable". |
|
Candidate C is added to a Job at Stage X. |
Candidate C becomes Off Limit for "N" Days starting from when they are moved to Stage X. |
|
Candidate C is moved from Stage X to Stage Y of same Job. | Candidate C remains Off Limits and the Duration becomes "N1". |
|
Candidate C is added to a Job at Stage X. | Candidate C becomes Off Limit for "N" Days starting from when they are moved to Stage X. |
|
Candidate C is moved from Stage X to Stage Y of same Job. | Candidate C remains Off Limits till Duration ends. |
|
Candidate C is moved from SendOut to Offer of same Job. | Candidate C remains Off Limits due to Policy1 but the Duration changes to "N1" due to the Stage Change. A new Off Limits Line Item is generated for Policy2 with Duration equaling "N". |
|
Candidate "C" is moved from Stage "X" to Stage "Y" (of same Job) after five days. |
|
|
Candidate C is moved back from Stage "Y" to Stage "X" after 5 days and now is again affected by the ATS Stage Policy for Stage X. |
|
|
Candidate C is moved from Stage "X" to Stage "Z" (of same Job) after five days. |
|
Off Limit Recalculation Global Class
OffLimitRecalculator is a global apex class with a global method which makes it possible to run Off Limit recalculations for Contact records or for Off Limit ATS Stage Policy records/Off Limit Job Role A job (vacancy, position, role) is an opening for which a customer's client needs a placement. Policy records.
There are two main reasons for adding this API:
- New Off Limit ATS Stage/ Job Role Policy is created: When an ATS Stage Policy is created and marked active or deactivated, only future stage changes are considered for Line Items creation. However, an API call can trigger recalculations and generate Line Items for candidates in the associated stages or Job Roles A job (vacancy, position, role) is an opening for which a customer's client needs a placement..
- Data migration: When triggers are disabled, Off Limit Line Items will not be created, so this API will allow the Data Migration Team/Professional Services Team to generate them without hitting governor limits.
Off Limit Recalculation Global Methods
About | Method |
---|---|
Method runs Off Limit recalculation for Contact records based on the Contact Ids provided in contactIds attribute. Method recalculates all Policy types: Contact Policy, Account Policy, ATS Stage Policy, Job Role Policy. This method executes recalculation in asynchronous transactions. |
TR1.OffLimitRecalculator.recalculatePoliciesForContact(Set<Id> contactIds); |
Method runs Off Limit recalculation for a Off Limit Policy record based on the Off Limit Policy Id provided in policyId attribute. Method supports only Off Limit Policy records with ATS Stage or Job Role. |
TR1.OffLimitRecalculator.recalculateATSOrJobRolePolicy(Id policyId); |
Examples
Use Developer Console to Open Execute Anonymous Window for the following scenarios:
-
In this scenario, "003Ox000002chwOIAQ" is a Contact Id.
CopyOff Limit recalculation for Contact records script:
Set<Id> contactIds = new Set<Id>();
contactIds.add('003Ox000002chwOIAQ');
TR1.OffLimitRecalculator.recalculatePoliciesForContacts(contactIds); -
In this scenario, "a2OOx000000FsBNMA0" is an ATS Stage or Job Role Off limit Policy Id.
CopyOff Limit recalculation for a Off Limit Policy record script:
TR1.OffLimitRecalculator.recalculateATSOrJobRolePolicy('a2OOx000000FsBNMA0');