Migration Behavior

Matching

The migration function creates, updates and deletes configuration. To do this, the function needs to recognize the same configuration item across environments. Finding the existing counterpart of a configuration item in the migration payload is called matching.

Matching top level items is a two-pass process. The first pass attempts to match the universally unique identifier (UUID) of the item in the migration set to an existing item on the target environment. The UUID is a system generated key, that is assigned to each configuration item upon creation, unless created through a migration. If the item is created through a migration the UUID of the item in the migration payload is adopted. This ensures that the UUID for the same configuration item is the same across all environments, as long as the migration function is the only means of creating new configuration items on target environments. If the function succeeds in finding an existing configuration item with the same UUID, then that item is updated.

If the UUID match fails, the second pass attempts to match on a functional key, that is a user defined key. For most configuration items the "Code" field is the functional key. This means that if the item in the migration payload has the same code as an item in the target environment then it is considered a match. Some configuration items have a more elaborate functional key, because they do not have a code, for example, a provider pricing clause. For these items the secondary match is based on a combination of functional attributes.

Top Level Authorization

The reason for the two-pass approach is that neither UUID matching, nor functional key matching is foolproof; matching exclusively on UUID fails if the same configuration already exists on the target environment (inserted by means other than migration), matching exclusively on the functional key fails when (part of) the key is updated on either environment. The two-pass approach counters these drawbacks - it gives robustness against updates of key fields and the ability to identify the same configuration items across environments.

Some functional keys comprise language dependent fields. The functional keys in the migration set are the keys in context of the default language on the source environment. Upon import, language dependent functional keys are interpreted in context of the default language of the target environment.

If neither the UUID nor the functional key matches, the migration import function inserts the configuration item on the target environment. If matched successfully, then all functional attributes of the existing item are updated with the value provided in the migration payload. Any existing detail matched with a detail in the migration set is updated. Details in the migration payload that do not exist on the target environment are inserted.

If the migration set does not specify an inclusion date, then any existing detail that is not matched, is deleted.

Because details are matched on UUID alone, updates to details that have not been created by a prior migration follow a replacement pattern (that is as opposed to an 'update' pattern). This is illustrated in scenario 1; the rule step referring to RULE 3 has been keyed in on both the source and target environment.

If an item (top level or detail) is matched on functional key then the existing item adopts the UUID in the migration payload.

Items Matched on UUID and Functional Key

The following items are matched on both UUID and functional key.

Access restriction

Access role

Address type

Authorization form

Basket

Boilerplate text

Brand

Callout rule

Country

Country region

Currency

Data access group

Diagnosis group

Dynamic logic

Event rule

Field

Flex code group

Flex code system

Funding arrangement

HTTP link

Insurable entity type

Line of business

Message

Message group

Pend reason

Pend rule

Prefix

Procedure group

Process step

Product

Product family

Product line

Reference sheet

Service type

Specialty

Title

Unfinalize reason

Validation rule

Most top level items have a single attribute that is the designated functional key, i.e. the "Code" of the item.

The following items are matched on both their UUID and functional key as well, but are exceptional in that they use a set of attributes serving as a composite functional key, rather than a single field.

Item Functional Key

Diagnosis

Code, flex code definition

Diagnosis group detail

Diagnosis group, diagnosis, start range, flex code definition (range), start date

Dynamic field usage

Usage name, table

Flex code

Key value, start date, flex code definition

Flex code field usage

Usage name, flex code definition

Flex code set detail

Flex code set, flex code definition

HTTP link

Page, display name

Procedure

Code, flex code definition

Procedure group detail

Procedure group, procedure, start range, flex code definition (range), start date

Provider

Code, flex code definition

Reference sheet line [1]

Reference sheet, key, start date

Items Matched on UUID Alone

The following objects are always integral to another object and cannot exist standalone. These are typically intersection objects without a functional key - they are matched only on UUID.

Access restriction grant

Basket detail

Diagnosis setting

Dynamic logic reference sheet

Line of business insurable entity type

Message group detail

Procedure setting

Provider specialty

Provider title

Rendering address

Rule step

Service address

Items Matched on Functional Key Alone

The following items cannot be added to a migration set but may be referenced by items that can be. These items never match on UUID because they are seeded or because they are not considered configuration.

Language

Signature

Delete by Omission

The following configuration items depend on top level items - they cannot exist by themselves. The configuration import function treats these just like other attributes on the top level item; if not present in the payload, that means these items have been removed on the source environment and therefore can be deleted in the target environment as well.

Note that the 'High Volume' configuration items (see Building a Migration Set) are not deleted on the target environment if the configuration set specifies an inclusion date. The reason is that the target environment is not able to distinguish between records that are omitted from the set because they are deleted or because they have not been updated since the inclusion date.

Access restriction grant

Basket detail

Diagnosis group detail

Diagnosis setting

Flex code

Flex code field usage

Message group detail

Procedure group detail

Procedure setting

Provider specialty

Provider title

Reference sheet line

Rendering address

Rule step

Service address

Switching Off Delete by Omission

In some cases this functionality 'Delete by Omission' may be needed to be switched off, like there can be a case where the necessary parent configuration is part of source and target environment but children are only part of target environment. In this case while transporting configuration from source to target with 'Delete by Omission' functionality will delete the children in the target environment which were missing in the source environment under the matched parent configuration.

Example: If messages linked to a dynamic logic are on a target environment and these messages are not available in the source environment for the same dynamic logic. So, when transporting the configuration from source to target, these message codes will be deleted in the target environment after migration.

In example mentioned above it is needed to avoided 'Delete by Omission' functionality so that the messages on the target environment are not lost when performing configuration migration from a different source environment. So, a flag is available on the data sets at the time of export enabling which will switch off this functionality at the application level. This value is stored in technical/about/readme file. At the time of import there will an attribute in the 'data set operations' integration point payload which will override the value and the missing children configurations from source are not deleted in target environment. This is explained in the figure below:

Switching off Delete by Ommission

Exclude Options

These are the check boxes on the 'Exclude' section of page FN0056 Configuration Migration Sets. They allow the user to carve out a specific group of dependent items within the context of the top level item. This carve out applies to the top level item itself as well as all dependent items, dependents of those dependent items and so on.

For example, if the user chooses to exclude dynamic logic (check box checked) within the context of the top level item 'process steps' then the payload will not contain the dynamic logic records referenced by the event rules included as dependent items of the process step.

Exclude options apply only within the top level object that they belong to. To clarify, consider a scenario where the payload contains two dynamic logic items. The first dynamic logic item (D1) has not been excluded as a dependent of a process step and is therefore subject to all other exclude options specified for process steps. So if dynamic logic is excluded within the context of process steps, the message record used by D1 is not in the payload. The second dynamic logic item (D2) was selected as a top level item with none of the exclude options checked. Therefore the payload includes the message that is used by D2.

Multiple Languages

It is possible to install an Oracle Health Insurance application with multiple languages. A configuration item will have a representation for each of the installed languages. When creating a migration set, each of those representations is automatically included; there are no options to exclude a particular language.

In the scenario where the source and target environment do not have the same languages installed, the following happens upon importing the migration set: the configuration item representations of any language that is not installed on the target environment are ignored; the existing configuration items representations of a language that is not in the migration set is left untouched.

For example, suppose the target environment supports both Spanish and English and the source environment supports only English. In this scenario,only the English language specific fields will be updated on the target environment.

Business Rules

Business rules protect the configuration consistency and remain active during migration. When a piece of configuration is updated, it will automatically be re-validated against its business rules. Because some business rules are controlled by set-up, it is possible for configuration to be out of sync with its governing business rules. In other words, changing a business rule does not automatically re-validate existing data. If a source environment has such inconsistencies, a migration may lead to unexpected business rule violations.

For example, consider the scenario where - on the source environment - a new mandatory dynamic text field is added to the messages table (OHI_MESSAGES). When this new field is set up, none of the existing messages will have a value; the existing messages are in conflict with the new set-up. It is only when you update an existing message or add a new message that the system requires the user to enter a value for the mandatory dynamic field. When the existing messages are migrated, they will run into that same violation on the target environment.

System Specific Configuration

System specific configuration is seeded configuration that cannot be removed or inserted by the users of the application. It is possible to update specific fields on system specific configuration, so for that reason system specific configuration can be included in the migration payload. The migration import function never inserts or deletes system specific configuration. Messages are the primary example of system specific configuration.


1. If the reference sheet record definition does not specify any key fields, the reference sheet lines belonging to that reference sheet are not matched on composite functional key, but only on UUID.