# Training Recurrence

In many cases, a training matrix may require that Learners perform some training courses on a recurring basis in order to refresh knowledge and maintain compliance. In Veeva Training, each _Training Requirement_ in your training matrix can have individual recurrence options to suit your organization's needs.

Training Admins can typically find the recurrence options for a given _Training Requirement_ in the _Recurrence_ section of the object record details page. This article describes each recurrence option in detail.

## Setting Up Recurrence for a Training Requirement

To enable recurrence and define recurrence options for a _Training Requirement_:

  1. Navigate to a _Training Requirement_ object record, either in **Business Admin** or a custom object tab.
  2. Click **Edit**.
  3. In the _Recurrence_ section, select the _Yes_ value for the **Does this Training Requirement recur?** field.
  4. Select a [**Recurrence Type**][1], either _Relative_ or _Absolute_.
  5. Select a value for the **Recurrence Based On** field. The selected date will be the basis for Vault's calculation.
  6. Enter values for the **Recurrence** and **Recurrence Unit** fields. These values are the unit of time and the number of those units between assignments. For example, _Recurrence = 1_ and _Recurrence Unit = Years_ would result in a new training assignment one (1) calendar year from the chosen basis date.
  7. If you selected the _Absolute_ recurrence type, select a date and time in the **Next Training Date (Recurrence)** fields.
  8. Optional: If you selected the _Relative_ recurrence type, select [**Next Training Date (Recurrence) Formula** options][4]. Vault treats a blank value as the "_Default…_" value. If the _Recurrence Date = Recurrence Date - Assign Recurrence Before/Unit_ value is selected, _Assign Recurrence Before_ and _Assign Recurrence Before Unit_ are required.
  9. Click **Save**.

## Recurrence Type {#recurrence-type}

Veeva Training provides two options for scheduling recurring issuance of _Training Assignments_ using the _Recurrence Type_ field. When _Recurrence Type_ is left blank, Vault defaults to the **Relative** picklist value upon saving. Vault evaluates recurrence updates via the _Update Training Assignments_ job.

### Relative Recurrence {#relative-recurrence}

Vault issues a _Training Requirement_ using this recurrence option at different times for different Learners. Vault calculates a relative recurrence from when the Learner was either assigned or completed a training, according to the assignment’s _Assigned Date_ (`assigned_date__v`) or _Completion Date_ (`completion_date__v`) values..

For example, if a Learner was assigned training on 01-Aug-2024, the _Recurrence_ is set to _1_, the _Recurrence Based On_ is set to _Assigned Date_, and the _Recurrence Unit_ is set to _Year_, Vault will assign the next training for that Learner on 01-Aug-2025.

### Absolute Recurrence {#absolute-recurrence}

Vault issues a _Training Requirement_ using this recurrence option at the same time for all applicable Learners. At the _Next Training Date (Recurrence)_, Vault issues training records to Learners. Vault then automatically increments the _Next Training Date (Recurrence)_ value based on the _Recurrence_ and _Recurrence Unit_ field values. If you select _Absolute Recurrence_, you cannot use the [_Next Training Date Formula_ option][4].

## Next Training Date Formula {#next-training-date-formula}

By default, Vault determines the date on which to assign the recurring Training Assignment by the following formula: `Recurrence Based On (Date) value + Recurrence (Months/Years) value`.

Your organization may require that a given training course is assigned in advance of the end of a recurrence period. For example, a training which Learners must complete every two years, but since it must be completed prior to the two-year recurrence date, your training matrix requires that it is assigned early, perhaps by 90 days. Using the _Next Training Date Formula_ option, you can determine how far ahead to assign the recurrence-based _Training Assignment_. The _Latest Automation Update_ field on the _Training Assignment_ object contains the formula used to set the _Next Training Date (Recurrence)_ field.

### Assigning Training in Advance

To adjust the assignment date to accommodate the need for training in advance:

  1. Navigate to the _Recurrence_ section of a _Training Requirement_ object record details page.
  2. Select the _Recurrence Date = Recurrence Date - Assign Recurrence Before/Unit_ value in the **Next Training Date (Recurrence) Formula** field.
  3. Enter values for the _Assign Recurrence Before_ and _Assign Recurrence Before Unit_ fields. These values are the unit of time and the number of those units between assignments. For example, _Assign Recurrence Before_ = _90_ and _Assign Recurrence Before Unit_ = _Days_ would result in a new training assignment 90 days before the [relative recurrence date][2].
  4. Click **Save**.

### Limitations on Training in Advance

`Assign Recurrence Before * Assign Recurrence Before Unit` cannot be greater or equal to `Recurrence * Recurrence Unit`. Since different years and months have different number of days, Vault conservatively converts _Recurrence_ and _Assign Recurrence Before_ into days using the following conversion:

  * 1 month = 28 days
  * 1 year = 365 days
  * 1 week = 7 days

For example, _Recurrence_ = _1 Year_ and _Assign Recurrence Before_ = _360 days_ are allowed since 360 days is less than 365 days (365 days for 1 year). _Assign Recurrence Before_ = _365 days_ would not be allowed since 365 days is greater or equal to 365 days.

### Best Practices for Training in Advance

Following these guidelines to ensure that training in advance of a recurrence date behaves as expected:

  * If either _Does this Training Requirement recur?_ = _No_ or _Is A Substitute Training Requirement_ = _Yes_, Vault does not automatically clear the values for _Assign Recurrence Before_, _Assign Recurrence Before Unit_, and _Next Training Date (Recurrence) Formula_. Ensure that you manually clear these values. Vault will still automatically clear other recurrence field values.
  * For requirements with a _Does this Training Requirement recur?_ value of _Yes_, Vault automatically updates _Recurrence Based On_ and _Recurrence Type_ to _Assigned Date_ and _Relative_, respectively, if those field values are blank when Vault updates the _Training Requirement_. However, this automatic update does not apply to the _Next Training Date (Recurrence) Formula_ field value, for which a default picklist value and a blank value are treated as the same.
  * If you want default values to be populated for recurrence fields, we recommend adding a condition which checks whether _Does this Training Requirement recur? = Yes_ and that the _Training Requirement_ is not a substitute requirement to the default expression. For example, if you want _Recurrence Type_ to be populated with _Relative_ value, then the formula would be: `if(is_recurring__v=true && is_a_substitute_tr__v!=true, Picklist.recurrence_type__v.relative__v, null)`

## Related Permissions

In order to add or change recurrence options for a _Training Requirement_ you must have a security profile or role with the following permissions:

|Type|Permissions|Controls|
|--- |--- |--- |
|Security Profile|Object: Training Requirement: Create, Read, Edit, Delete|Ability to create, view, edit, and delete _Training Requirement_ object records, including recurrence field options.|

  [1]: #recurrence-type
  [2]: #relative-recurrence
  [3]: #absolute-recurrence
  [4]: #next-training-date-formula
