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 CandidateClosed 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. CandidatesClosed 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 APIClosed 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:

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:

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 Bullhorn for Salesforce 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 Bullhorn for Salesforce 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

Field Name API Name Field Type Description
Off Limit Policy TR1__Off_Limit_Policy__c Lookup to Policy (required) Defines which policy the behavior’s extension configured against this object applies to.
Job Status TR1__Job_Status_Picklist__c Picklist

The values come from Job object > TR1__Status__c

  • Open
  • Hold
  • Closed
Job Closed Reason TR1__Job_Closed_Reason_Picklist__c Picklist

The values come from Job object > TR1__Closed_Reason__c:

ATS Stage TR1__ATS_Stage__c Multi-select Picklist

The values come from Application V2Closed A BH4SF custom object introduced when new data model ATSv2 was added to the core product object > TR1__Stage__c :

Behavior on Job Change TR1__Behavior_on_Job_changes__c Picklist

Behavior of Off Limit Line Item when Job Status or Job Closed Reason changes:

  • Do Nothing
  • Disable
  • Update
Additional Days TR1__Additional_Days__c Number (18,0)

When Behavior on Job Change is set to Update, the additional days are added to the existing end date of all candidates’ related Policy generated badges (which may have been populated by duration).

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 Bullhorn for Salesforce recognizes non-Executive Search jobs and ignores any Off Limits constraints for ContactsClosed 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.

Additional Information

Use Case Examples

Conditions Met Situation Outcome
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Disable".
  • Duration is "N".
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.
  • Active ATS stage policy for ATS Stage X .
  • Behavior on Stage Change is "Disable".
  • Duration is "N".
  • Candidate C is Off Limits because of the policy with Duration "N".
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".
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Update".
  • Durationis "N".
  • Additional Days on Stage Update is "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.

  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Update".
  • Durationis "N".
  • Additional Days on Stage Update is "N1".
  • Candidate C is Off Limits because of this policy with Duration "N".
Candidate C is moved from Stage X to Stage Y of same Job. Candidate C remains Off Limits and the Duration becomes "N1".
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Do Nothing".
  • Duration is "N".
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.
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Do Nothing"
  • Duration is "N".
  • Candidate C is Off Limits because of this policy with Duration "N".
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".
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Disable/Do Nothing/Update".
  • Duration is 20.
  • Additional Days on Stage Update is 30.
  • Candidate C is Off Limits because of this policy with Duration equaling 20 and a Line Item L1 is created for the Policy for Duration equals 20.
Candidate "C" is moved from Stage "X" to Stage "Y" (of same Job) after five days.
  • If Behavior on Stage Change is" Disable" then L1 is disabled. Candidate C is no longer Off Limits.
  • If Behavior on Stage Change is "Do Nothing" then L1 Duration is 15. Candidate C is Off Limits for 15 more days.
  • If Behavior on Stage Change is "Update" then L1 Duration is 30 days. Candidate C is Off Limits for 30 more days
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Disable/Do Nothing/Update".
  • Duration is 20.
  • Additional Days on Stage Update is 30.
  • Candidate C is Off Limits because of this policy with Duration equaling 20 and a Line Item L1 is created for the Policy for Duration equals 20.
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.
  • New Line Item L2 is created with Duration 20 days for the Policy.
  • Line Item L1 is disabled.
  • Candidate C is Off Limits due to L2.
  • Active ATS stage policy for ATS Stage X.
  • Behavior on Stage Change is "Disable/Do Nothing/Update".
  • Duration is 20.
  • Additional Days on Stage Update is 30.
  • Candidate C is Off Limits because of this policy with Duration equaling 20 and a Line Item L1 is created for the Policy for Duration equals 20.
Candidate C is moved from Stage "X" to Stage "Z" (of same Job) after five days.
  • If Behavior on Stage Change is "Disable" then L2 is disabled. Candidate C is no longer Off Limits.
  • If Behavior on Stage Change is "Do Nothing" then L2 Durationis 15. Candidate C is Off Limits for 15 more days.
  • If Behavior on Stage Change is "Update" then L2 Duration is 30 days. Candidate C is Off Limits for 30 more 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 RoleClosed 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 RolesClosed 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.

    Copy

    Off 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.

    Copy

    Off Limit recalculation for a Off Limit Policy record script:

    TR1.OffLimitRecalculator.recalculateATSOrJobRolePolicy('a2OOx000000FsBNMA0');