This is an old revision of the document!


Synchronization - time slices of contractual relationship

Time slices of identity (contractual) relationship synchronization work according to the same rules as identity synchronization. In this page we will describe only behavior different from standard synchronization.
Sync of contract slice uses the same configuration as the sync of contract. Valid till date is set only if the slice is last (in sync)!
Typically one contractual relationship is equal to one contract in company for the identity. One slice of the contractual relationship describes the state of the contract in a specific time slot. Sync of slices persists slices to the entity `IdmContractSlice` and creates relation with the account with entity `AccContractSliceAccount`. If more slices exist for the same contract, then only one is used as source at one time.
Actions executed after the end of sync are not executed if user canceled sync!

Before HR process the long running task "select current contract slice" is executed. This options is controlled by checkbox *After end, start HR process*. LRT is started synchronously and complete log will contain information about it.

HR processes basically ensure the correct state of identity depending on the state of their contractual relationships. Because we need to evaluate the status of contractual relationships as a whole (to a given identity), it is not possible to trigger HR processes during the synchronization of each contractual relationship. Therefore, no HR processes are executed during this synchronization.

HR processes can be (should be) correctly started after the end of the sync. This can be ensured by the property `After end, start the HR processes` on the detail of sync configuration. If this property is ticked, then HR processes 'Enabled contract', 'End of contract', 'Contract exclusion' (in this order) will be automatically started after correctly end of contract relationships sync.

Recalculation of automatic roles is skipped during sync. Recalculation of automatic roles can be (should be) correctly started after the end of the sync. This can be ensured by the property 'After end, start the automatic role recalculation' on the detail of sync configuration.

Bellow is an example of contractual relationship mapping using slices. This is only an example; in general, slices must be mapped in the same way that contracts are but must have two extra attributes: "Valid from of slice" and some sort of "Slice ID".

* Contract code - Code of the parent contract. This `String` value represents relation between all slices for the same contract. * Valid from of slice - Defines time from that is slice valid. Valid till of slice is computes automatically (by validity of next slice) after save. Output value from attribute transformation must be 'org.joda.time.LocalDate' (or String in the format `yyyy-MM-dd`). * Slice ID - ID of the time slice, it is often transformed by combining "Contract code" and "Valid from of slice", e. g., "000054-24-07-2019". * Owner - Relation owner. Must be identity in IdM. This field is required for every relation. Output from attribute transformation can be:

  • ID of IdM identity in String or UUID format.
  • Username of IdM identity in String.

* Main - Defines if is the contract main (between all contracts of the identity). Output from attribute transformation must be Boolean. * State - State of contract. Output from attribute transformation must be enumeration ContractState or String representation for this enumeration (DISABLED, EXCLUDED) (see below for more details). * Position - String representation of contract. Typically name of contract. * Guarantees - List of superiors, directly linked to the contractual relationship (see below for more details). * Work position - Defines link to some tree node. Generally defines a place in an organization structure (see below for more details). * Valid from of contract - Validity for the contractual relationship. Output value from attribute transformation must be 'org.joda.time.LocalDate' (or String in the format `yyyy-MM-dd`). * Valid till of contract - Validity for the contractual relationship. Output value from attribute transformation must be 'org.joda.time.LocalDate' (or String in the format `yyyy-MM-dd`). * Externe - If the contractual relationship for identity is set as extern, then the output value is (boolean true). * Description - String for description the relation.

List of superiors, directly linked to the contractual relation. Linked leader must exists in IdM. Output from attribute transformation can be:

  • Username of superior (String).
  • Id of superior (UUID or String).
  • List of usernames of superiors (List<String>).
  • List of Ids of superiors (List<String> or List<UUID>).
  • Null value. If the value is not defined and in sync the configuration is set to 'Default leader', then this leader will be set to relation.

If some leader is not found the synchronization item will be marked as 'warning' (relation will be created/saved). Detailed information will be saved in item log:

.........................
Finding guarantee [temslie7].
.........................
Warning! - Identity [temslie7] was not found for [temslie7]!
.........................

Defines a link to some tree node. Generally defines place in an organization structure. Output from attribute transformation can be:

  • Id of a tree node (UUID or String).
  • Code of a tree node. Node by code will be searched in default tree (define in sync configuration 'Default type of structure').
  • Null value. If the value is not defined and in sync the configuration is set to 'Default position in structure', then this node will be set to relation.

If a node is not found the synchronization item will be marked as 'warning' (relation will be created/saved). Detailed information will be saved in item log:

........................
Work position - try find directly by transformed value [Divanoodle]!
........................
Work position - was not not found directly from transformed value [Divanoodle]!
........................
Work position - try find in default tree type [DEFAULT_ORG] with code [Divanoodle]!
........................
Warning - Work position - none node found for code [Divanoodle]!
If a work-position attribute is not defined in the mapping, then no default position will be set.

State of contract. Output from the attribute transformation must be enumeration ContractState or String representation for this enumeration.

ContractState has these values:

  • by doischert