Migration notes 6.0

This page explains the changes required to migrate to the stated version of Atoti Sign-Off.

Migrate to 6.0.1

Upgrading from version 6.0.0 See Atoti Sign-Off 6.0.1 Release Notes.

Headline announcement

  • Persisting full scope paths: Full scope paths are persisted to the JPA layer to allow handling of scopes with slicing and non-slicing hierarchies.
  • Customized sign-off status feed: The sign-off status feed member for “in review” representation can be customized on the application server.

Using full scope paths in persisted data

Older versions of Atoti Sign-Off did not include the full scope path for definitions that were saved to the JPA layer. As of this version, full scope paths will be used. For example, if you have a definition on the slicing Book level, the old path would look like:

[Booking].[Books].[Book]=[BS_MGT_FX]

The new path will look like:

[Booking].[Books].[Book]=[AllMember].[BS_MGT_FX]

To migrate scope paths created before Atoti Sign-Off 6.1.0, we have added a migration endpoint. The reason for adding an endpoint rather than a script is that we need to connect with the application server to get the full scope path.

info

You only need to run the migration if you are using persisted data as your golden source of Atoti Sign-Off data. If you are using files as your golden source of data then you do not need to run the migration.

To run the migration, do the following:

  1. Start your application server.
  2. Start Atoti Sign-Off with the 6.0.1-migration Spring profile to include the endpoint and override default validation.
  3. Run the migration endpoint. You can do this via Swagger by executing the POST request at <base URL>/sign-off/rest/v2/migrate/sign-off-definition-scopes.
    The migration endpoint retrieves the full scope paths from the application server and updates the definitions if necessary.
  4. Restart the application server and Atoti Sign-Off as normal (without the 6.0.1-migration profile) to view your updated definitions and proceed as normal.

Configuration properties

Properties added

signoff-activeviam
Property Name Comment Value
sign-off.application.settings.feed-member-coordinate.member Defines the members for the Sign-Off hierarchy. [TOTAL REVIEWABLE]

Properties modified

signoff-activeviam
Property name Comment
sign-off.application.settings.feed-level-coordinate.* Renamed to sign-off.application.settings.feed-member-coordinate.*

Migrate to 6.0.0

Upgrading from version 5.3.0 See Atoti Sign-Off 6.0.0 Release Notes.

Atoti Sign-Off is using Atoti Server 6.1.4, Atoti UI ~5.2.6, and Sign-Off API 4.2.0 .

For new features and fixes included in these releases, please see:

Headline announcement

  • Interactions with Sign-Off workflows: The way workflows change state (APPROVED, PENDING, and so on) has been updated to make customization easier. For more details, see Workflow task actions.
  • Workflow services moved: Both SignOffProcessInstanceWorkflowService.java and SignOffProcessDefinitionWorkflowService.java have been migrated from signoff-starter to signoff-activeviam module along with their dependency classes.
  • Additional field for Definitions: A linkedDashboardId field has been added to the SignOffProcessDefinitionEntity. This field lets you link a dashboard to the definition in the UI.
  • Artifact relocation: The released artifacts are now released under the group id com.activeviam.solutions.signoff. See updated locations.
  • Adjustment upload/download: Adjustments can now be created by uploading CSV files. Please see the Upload Adjustments section. In addition, you can export adjustments into a CSV file.
  • Definition upload/download: Definitions can now be created by uploading CSV files. In addition, you can export definitions into a CSV file. See Upload tasks.
  • Restart tasks with adjustments: Tasks can now be restarted while maintaining adjustments that were previously executed.
  • Simplified UI settings: The UI settings have been simplified. Settings that were previously duplicated in both the UI and server can now be set only on the server.
  • Removal of dashboard widgets: The Atoti Sign-Off dashboard widgets have been replaced with dedicated screens.

Breaking changes

Database changes

The following changes have been made to the database schema and require manual migrations:

Default schema change

The default schema for all tables has been changed to sign-off. This is to facilitate using the same database for multiple ActiveViam products. For example, if you use Atoti FRTB, Atoti Sign-Off, and Atoti Limits, you can use the same database for all three products, and specify a different schema for each.This will result in a database structure as follows:

- Database
      - frtb 
         - frtb-datasource-1
         - frtb-datasource-2
      - sign-off
         - signoff-datasource-1
         - signoff-datasource-2
      - limits
         - limits-datasource-1
         - limits-datasource-2

This helps manage the database structure and allows for easier maintenance.

warning

If you use two products that use the Activiti workflow engine, for example Atoti Sign-Off and Atoti Limits, you will need to use different schemas for each of those products and verify that the spring.activiti.database-schema property is set for each product. This is because the Activiti workflow engine does not support multiple products using the same schema. This property is set to the product name in our default application.yml files.

Our reference implementation uses a H2 database as a sample, but in production we recommend using a production-grade database. If you don’t already, you should migrate your data away from H2 towards a production-grade database.

If you use a production-grade database and have already defined a schema for your database, you only need to migrate the following properties to your schema:

spring.activiti.database-schema=your_schema
activiti.datasource.properties.hibernate.default_schema=your_schema
application.datasource.properties.hibernate.default_schema=your_schema
audit-log.datasource.properties.hibernate.default_schema=your_schema

If you use a production-grade database, have not yet defined a schema and you don’t want to use the product-default schema, you can remove these properties from your application.yml. This will result in the database using the default schema of the database provider.

If you use a production-grade database, have not yet defined a schema and you want to use the default schema sign-off, create the schema in your database. How this is done depends on the database. See the following links for popular implementations:

linkedDashboardId field

A linkedDashboardId field has been added to the SignOffProcessDefinitionEntity. This field is used to link a dashboard to the definition in the UI. You will need to add this column to the processDefinition table in your database. This can be done by executing the following SQL statement:

ALTER TABLE "sign-off"."processDefinition" ADD COLUMN "linkedDashboardId" VARCHAR(255);
Removal of measures field

The measures field has been removed from the AWorkflowProcessDefinitionEntity class as it is not used. You should remove this column from the processDefinition table in your database. This can be done by executing the following SQL statement:

ALTER TABLE "sign-off"."processDefinition" DROP COLUMN "measures";

This is not required to start Atoti Sign-Off but is recommended to keep your database schema clean.

Restarting tasks with adjustments

The UI will now prompt users if they want “Retain existing adjustments” when restarting a task. The default behavior is to retain adjustments, but this can be changed by setting the sign-off.workflow.keep-adjustments-when-restarting-task property to false. If users elect not to retain adjustments, the task will be restarted and the adjustments will be deleted. This is the same as the previous behavior.

Artifact changes

The signoff-activeviam and signoff-starter artifacts are now released under a new group ID:

<dependency>
    <groupId>com.activeviam.solutions.signoff</groupId>
    <artifactId>signoff-activeviam</artifactId>
</dependency>
<dependency>
    <groupId>com.activeviam.solutions.signoff</groupId>
    <artifactId>signoff-starter</artifactId>
</dependency>

JPA entity changes

The SignOffProcessInstanceEntity and SignOffProcessDefinitionEntity classes are now updated to their current version in their respective JPA repositories. This differs from the previous behavior where the repositories were append-only.

Default workflow changes

The following changes have been made to the default workflows:

  1. In order for a user to view tasks in the new Atoti Sign-Off screens, the task workflows must have the same user access as their parent definition. We have updated our default workflows to reflect this requirement.
  2. If you have custom workflows with statuses and actions different to the defaults, then you must expose an implementation of ISignOffWorkflowStatusActionManager. This allows Atoti Sign-Off to understand the statuses and actions of your custom workflows and thus apply application logic.
  3. Task approvals for the default workflows cannot be approved by the previous user in the workflow. This can be changed by setting sign-off.workflow.approver-can-be-same-as-previous-user=true.
Sign Off Process Definition

The following changes have been made in the sign-off-process-definition workflow:

  • A new service task CREATING has been added at the start of the workflow. This task persists JPA entities on creation of the workflow. Previously, the entities were persisted during the PUBLISHING task.
  • This workflow is visible to users with the ROLE_USERS once created. Previously, SAVED or PUBLISHED definitions were only visible to users with the ROLE_MANAGERS.

Workflow Service changes

The following changes have been made to the workflow services:

  • The signature of the ISignOffProcessInstanceWorkflowService:initiate method has been updated from AHistoryRecordDTO initiate(SignOffProcessInstanceDTO object, String comment) to AHistoryRecordDTO initiate(SignOffProcessInstanceDTO object, Map<String, Object> variables) to pass optional variables to the worklfow. If you have a custom implementation of this workflow you will need to update the method signature.

REST method changes

  • The endpoint POST /sign-off-process-instance which initiates a task now accepts an optional boolean keepAdjustments query parameter. If not provided, this value defaults to the value of the sign-off.workflow.keep-adjustments-when-restarting-task property, which out of the box defaults to true;

JPA changes

Atoti Sign-Off now relies on the JPA layer as the true source of data, rather than the workflow. As such, the JPA entities are now updated to their current version in their respective JPA repositories. This differs from the previous behavior where the repositories were append-only. To do this, the updatable = false annotation value that was previously present has been removed from the following entities:

  • SignOffProcessInstanceEntity
  • SignOffProcessDefinitionEntity
  • AWorkflowProcessDefinitionEntity
  • ABitemporalObjectEntity

Workflow object changes

The SignOffProcessDefinitionDTO::measures field has been removed as it is not used.

Definitions on overlapping scopes

Users are now prevented by default from creating Atoti Sign-Off definitions on overlapping scopes. For more information please see the section on Overlapping Scopes.

Dashboard widgets

Dashboard widgets have been replaced with dedicated screens for the task and definition management. Dashboards can be migrated using the migration script provided here.

UI settings

Settings that were previously hardcoded in the UI are now fetched from the server. These properties are configurable. For example, if you are connecting with Atoti Market Risk we recommend you use a profile like the MR profile to set the required properties. That could look as follows:

sign-off:
  application:
    settings:
      adjustment-reasons:
        - Wrong Market Data
        - Missing Trade
        - Wrong Input Data
        - Unknown
      as-of-date-dimensions:
        MR:
          cube-dimension:
            "[*]":
              as-of-date:
                dimension-name: Dates
                hierarchy-name: Date
                level-name: AsOfDate
      restricted-cubes:
        MR:
          - VaR-ES Summary Cube
          - Sensitivity Summary Cube
          - PL Summary Cube
          - Market Data Cube
          - MRCombinedCube
      available-scope-levels:
        MR:
          available-levels-by-cube:
            "[*]":
              - dimension-name: Organization
                hierarchy-name: BookHierarchy
                level-name: Level 5
              - dimension-name: Booking
                hierarchy-name: Books
                level-name: Book
              - dimension-name: Booking
                hierarchy-name: Desks
                level-name: Desk
      adjustment-level-coordinate:
        dimension-name: Sign-Off
        hierarchy-name: Adjustment
        level-name: Source
      feed-level-coordinate:
        dimension-name: Sign-off
        hierarchy-name: Sign-off Status
        level-name: Feed

Note that it is your responsibility to configure the required fields. The class SignOffApplicationUISettings provides more details on the properties that can be set.

Input files

Added

File Details
adjustments.csv Adjustments can now be created by uploading CSV files

Modified

Modification File Description
Changed format sign-off-task-definitions.csv The format of this CSV file has been updated to reflect the columns in the new screens.

Configuration

Configuration properties

Properties added

signoff-activeviam module

Property Default value Description
sign-off.workflow.approver-can-be-same-as-previous-user false When enabled, the approving user can be the same as the previous user in the workflow.
sign-off.application.overlapping-scopes.allowed false True if users are allowed to create definitions on overlapping scopes, false otherwise.

Configuration files

Files Modified
RestApiProperties.java

Updated properties:

Key Comment New Value Old Value
statusEndpoint Updated the default value. /activeviam/pivot/rest/v9/ping /sign-off/enabled
UI settings

Updated properties:

Key Comment New Value Old Value
availableApplicationServers Cube-specific module settings are no longer needed. string[] {[serverName: string]: {[cubeName: string ]: {// Cube-specific module settings go here}}}

Deleted properties:

Key Comment
filteredApplicationCubes This is fetched from the server and set in application.yml.
adjustmentCommentLevel Used by dashboard widgets that have been removed.
adjustmentFiltersLevel Used by dashboard widgets that have been removed.
adjustmentIdLevel Used by dashboard widgets that have been removed.
adjustmentInputLevel Used by dashboard widgets that have been removed.
adjustmentLiveFromLevel Used by dashboard widgets that have been removed.
adjustmentLiveToLevel Used by dashboard widgets that have been removed.
adjustmentReasonLevel Used by dashboard widgets that have been removed.
adjustmentsServerNameLevel Used by dashboard widgets that have been removed.
adjustmentStatusLevel Used by dashboard widgets that have been removed.
adjustmentsWorkflowStatusLevel Used by dashboard widgets that have been removed.
adjustmentTypeLevel Used by dashboard widgets that have been removed.
adjustmentUserLevel Used by dashboard widgets that have been removed.
adjustmentValidFromLevel Used by dashboard widgets that have been removed.
adjustmentValidToLevel Used by dashboard widgets that have been removed.
adjustmentCubeSettings Used by dashboard widgets that have been removed.
allowedStatusForArchive Allowed actions are now fetched dynamically from the server.
allowedStatusForDelete Allowed actions are now fetched dynamically from the server.
allowedStatusForEdit Allowed actions are now fetched dynamically from the server.
allowedStatusForPublish Allowed actions are now fetched dynamically from the server.
areWorkflowButtonsHidden Allowed actions are now fetched dynamically from the server.
availableRoles This is fetched from the server and set in application.yml. See sign-off.workflow.roles.
failedStatuses Used by dashboard widgets that have been removed.
fields This is fetched from the server and set in application.yml.
isValidFromFieldDisabledForAdjustments This is always disabled.
signOffButtonInformation This is fetched from the server and set in application.yml. See workflow.configuration.
signOffInstanceAsOfDateDimensionName Used by dashboard widgets that have been removed.
signOffInstanceAsOfDateHierarchyName Used by dashboard widgets that have been removed.
signOffInstanceAsOfDateLevelName Used by dashboard widgets that have been removed.
signOffInstanceKeyDimensionName Used by dashboard widgets that have been removed.
signOffInstanceKeyHierarchyName Used by dashboard widgets that have been removed.
signOffInstanceStatusDimensionName Used by dashboard widgets that have been removed.
signOffInstanceStatusHierarchyName Used by dashboard widgets that have been removed.
signOffInstanceStatusLevelName Used by dashboard widgets that have been removed.
signOffRoleActionMap Allowed actions are now fetched dynamically from the server.
signOffStatusProgress Used by dashboard widgets that have been removed.
signOffWorkFlowMap This is fetched from the server and set in application.yml. See workflow.configuration.
startDailyProgressStatus Used by dashboard widgets that have been removed.
taskDefinitionCategoryDimensionName Used by dashboard widgets that have been removed.
taskDefinitionCategoryHierarchyName Used by dashboard widgets that have been removed.
taskDefinitionCubeName Used by dashboard widgets that have been removed.
taskDefinitionNameDimensionName Used by dashboard widgets that have been removed.
taskDefinitionNameHierarchyName Used by dashboard widgets that have been removed.
taskDefinitionWorkflowStatusDimensionName Used by dashboard widgets that have been removed.
taskDefinitionWorkflowStatusHierarchyName Used by dashboard widgets that have been removed.
taskInstanceCubeName Used by dashboard widgets that have been removed.
application.yml

New properties:

Property Name Comment Value
activiti.datasource.properties.hibernate.default_schema The default schema used by the Activiti datasource. sign-off
application.datasource.properties.hibernate.default_schema The default schema used by the Application datasource. sign-off
application.rest-apis.MR.mdx-endpoint A rest endpoint that can be called to execute MDX queries on the server. (MR) /activeviam/pivot/rest/v9/cube/query/mdx
application.rest-apis.MR.cubes.Var-ES Cube.as-of-date-level The full level used to determine the As-Of-Date of the VAR-ES Cube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.VaR-ES Summary Cube.as-of-date-level The full level used to determine the As-Of-Date of the VaR-ES Summary Cube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.Sensitivity Cube.as-of-date-level The full level used to determine the As-Of-Date of the Sensitivity Cube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.Sensitivity Summary Cube.as-of-date-level The full level used to determine the As-Of-Date of the Sensitivity Summary Cube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.PLCube.as-of-date-level The full level used to determine the As-Of-Date of the PLCube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.PL Summary Cube.as-of-date-level The full level used to determine the As-Of-Date of the PL Summary Cube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.MR.cubes.MRCombinedCube.as-of-date-level The full level used to determine the As-Of-Date of the MRCombinedCube on the server. (MR). [Dates].[Date].[AsOfDate]
application.rest-apis.FRTB.mdx-endpoint A rest endpoint that can be called to execute MDX queries on the server. (FRTB) /activeviam/pivot/rest/v9/cube/query/mdx
audit-log.datasource.properties.hibernate.default_schema The default schema used by the Activiti History datasource. sign-off
spring.h2.console.enabled When set to true, the H2 console is available. This is useful for investigating JDBC connections. Disabled by default. false
spring.application.name Spring property for the application name. Used by the notification service to identify the source server for each notification. Atoti Sign-Off
spring.activiti.database-schema The schema used by the Activiti databases. sign-off
sign-off.workflow.roles The list of roles for workflow participants USERS,MANAGERS

Updated properties:

Old Property Name New Property Name Comment New Value Old Value
activiti.datasource.url activiti.datasource.url The URL of the Activiti datasource. jdbc:h2:file:./sign-off-activiti;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS "sign-off"; jdbc:h2:file:./sign-off-activiti;DB_CLOSE_DELAY=-1
application.datasource.url application.datasource.url The URL of the Application datasource. jdbc:h2:file:./application-sign-off;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS "sign-off"; jdbc:h2:file:./application-sign-off;DB_CLOSE_DELAY=-1
audit-log.datasource.url audit-log.datasource.url The URL of the Audit Log datasource. jdbc:h2:file:./audit-log;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS "sign-off"; jdbc:h2:file:./audit-log;DB_CLOSE_DELAY=-1
workflow-types sign-off.workflow.configuration Describes the workflows as a pair of key and approvers e.g. [{"dummy-workflow": {"key": "sign-off-process-instance.dummy-workflow", "participants": "approvers"}}] e.g. [{"dummy-workflow": "sign-off-process-instance.dummy-workflow"}]

Datastores

Modified stores

Modification Store Field Type Description
Deleted [SignOffProcessDefinition](/user-ref/datastore/signoff-process-definition.html) MEASURES list of string This column has been removed because it is not used.

Other changes

Spring Boot compliance

Atoti Sign-Off now aligns more closely with Spring Boot best practices in our aim to move towards using Spring Boot Starters to ease migrations.

Configuration Properties

Atoti Sign-Off now uses Spring Configuration Properties to help externalize configurations for users. You can see a full list of the provided properties in the Configuration Properties section.

Adjustments locations and input fields

These two adjustment fields are now Lists instead of Sets. This impacts the following classes and services that may affect your implementation:

Workflow-related:

  • SignOffProcessInstanceWorkflowService.java
  • AuditableAdjustmentDefinitionDTO.java
  • AdjustmentExecutionDTO.java

JPA-related:

  • AdjustmentsDefinitionEntity.java
  • AdjustmentsFiltersConverter.java
  • AdjustmentsInputConverter.java
  • IAdjustmentDefinition.java
  • AdjustmentExecutionEntity.java
  • IAdjustmentExecution.java

Status manager service

The ISignOffWorkflowStatusManager lets you implement a service to define the statuses that relate to specific categories. Current methods with a default implementation in DefaultSignOffWorkflowStatusManager are:

  • getLiveDefinitionStatuses(): returns a list of definition status considered live.
  • getPendingApprovalTaskStatuses(): returns a list of task status considered pending.

Workflow task actions

A unique way is now used to execute common workflow task actions (e.g. approve, reject, request approval …) and custom actions. It allows greater flexibility and easier extension of current set of actions. To extend the task actions, see Adding Custom Workflow Tasks.