Configuration
Breadcrumbs

Platform Notifications and Workflows

The next step in configuring the governance operating model in Anjana Data is to define the notifications that inform users about events, validation workflows, or incidents on the platform.

Notifications are a key mechanism to ensure traceability and communication within data governance, as they alert users or entire roles about actions such as the expiration of an object, the creation of a workflow, an adherence failure, the modification of policies, or the expiration of a license.

In Anjana Data, notifications are configured in the Notifications table of the configuration panel and will subsequently be available in the data portal for the affected users.


Notifications Table in the Configuration Panel (Administrator View)

Notifications are configured in the Notifications table of the configuration panel. Defining notifications is an indispensable step to configure workflows in the BPM and to ensure that key users receive notifications of interest.

image-20250820-112212.png
Notifications table for configuring platform and workflow notifications

Structure of the Notifications Table

Each notification registered in the table is characterized by the following fields:

  • id: unique identifier of the notification (PK).

  • moduleType: module to which the notification applies. Currently an informational (legacy) field inherited from older versions. Possible values:

    • "BG" → Business Glossary

    • "DC" → Data Catalog

    • "ALL" → applies to the entire platform (recommended option).

  • notificationCode: alphanumeric code that identifies the notification and allows it to be invoked from platform features.

  • notificationReceiverType: defines the type of recipient. Possible values:

    • "USER" → the notification is sent to a specific user.

    • "ROLE" → the notification is sent to all users assigned the indicated role.

  • traslationKey: translation key that links to the message text in the Translations table. The text may contain variables that will be substituted at the time the notification is issued.

  • notificationType: type of notification. Possible values:

    • "ALERT" → alert

    • "NOTICE" → notice

    • "ADMIN_ALERT" → alert directed to administrators

  • receiverRole: recipient role of the notification (if the notification_receiver_type is ROLE). Must match the name in the Roles table.

  • severity: criticality level of the notification.

  • subject: translation key that links to the message text in the Translations table containing the subject of the notification.


Notification Codes (notificationCode)

For the application to function correctly, the Notifications table must contain records corresponding to a set of predefined notificationCode values.

Notification code

Purpose

ADHERENCE_FAIL                      

Indicates the reason why adherence failed.

CHECK_CONFIGURATION_IN_PROVIDER     

Error retrieving user information from the indicated provider.

COMPLETED_AUTOMATIC_METADATA        

Indicates that the automatic metadata import has completed.

DATASET_EXPIRATION_TOT_FAIL         

Failure to delete permissions when a dataset expires.

DATASET_FAIL                        

Failure to create a dataset in third-party systems.

DEACTIVATION

Notice of deactivation to the corresponding roles and user.

DELETE_ENTITY                       

Notifies of the deletion of an entity.

DELETE_RELATIONSHIP                 

Notifies of the deletion of a relationship.

DEPRECATION                         

Notifies all users of a role that the object is going to be deprecated.

DEPRECATION_ADHERED                 

Notifies the user that the object they were adhered to (dataset or DSA) is going to be deprecated.

DISADHERENCE                        

Indicates that the de-adherence was successfully completed.

DISADHERENCE_FAIL                   

De-adherence failure indicating the reason.

DISADHERENCE_LIST                   

Reports the details of the result of the de-adherence process.

DISADHERENCE_LIST_OK                

Indicates the list of objects for which de-adherence was successful.

DSA_FAIL                            

DSA creation failed, indicating the reason.

DSA_TRANSFER_FAIL                   

Informs the administrator that the DSA organizational unit change could not be performed.

ERROR_AUTOMATIC_METADATA            

A failure occurred during metadata import.

EXCEL_IMPORT

Notification with an error notice during an Excel create/edit operation.

EXCEL_PREPROCESSING

Notice of completion of preprocessing for an edit Excel file.

EXPIRATION                          

The object is expiring.

EXPIRATION_OBJECT_FAIL              

Notifies of a failure in the expiration of an object and the reason.

EXPIRATION_ADHERED                  

The object the user was adhered to has expired.

EXPIRATION_WARNING                  

Warning sent to the owners of the object because its expiration is approaching.

EXPIRATION_WARNING_ADHERED          

Warning sent to users adhered to the object indicating that its expiration is approaching.

FORM_FAIL                           

Errors found in the object's form.

INDEX_FAIL                          

An error occurred during indexing.

INDEX_RELATIONSHIP_FAIL             

Indexing error in relationships.

LICENSE_EXPIRED                     

The license has expired.

LICENSE_EXPIRING                    

Warning that the license, although still valid, is close to expiring.

MUST_DELETE_RELATIONSHIPS_FIRST

Warning about the need to delete relationships first before deleting an entity.

MUST_DELETE_RELATIONSHIPS_STRUCTURE_FIRST

Warning about the need to delete the field relationships of a dataset before deleting it.

NEW_DSA                             

When the user requests the creation of a new DSA.

PENDING_WF_FAIL_ADHERENCE           

Indicates the failure in creating a workflow.

POLICY_MODIFICATION                 

Notifies of the modification of policies on an object.

REQUIRED_FIELDS                     

Notifies of errors in the template configuration.

TAXONOMY_BAD_CONFIGURED             

Notifies of an error in the taxonomy configuration of an object subtype.

TRANSLATION_FILE_UPLOAD_FAIL        

Notifies that an error occurred while uploading the translations file to Minio or S3.

USER_CROSS_ROLE_FAIL                

Indicates the users that have not been configured as cross.

WORKFLOW_DELETE_FAIL                

A workflow could not be deleted.

WORKFLOW_INFO_FAIL                  

Error in the workflow because it did not have an associated workflow info. Using the administrative API, the last steps of the workflow can be executed so that it does not remain in a bad state if this error occurs.

WORKFLOW_OK                         

The workflow has been created.

WORKFLOW_FAIL                       

Indicates the reason why the creation of a workflow failed.

WORKFLOW_TASK_FAIL

Failure in the validation of a workflow step.

 Variables for Key in Translations as Part of the Notification Body

Additionally, notification message bodies defined through translation keys (the Key field in the Translations table) may contain dynamic variables delimited by ##. These variables will be automatically replaced by the corresponding values at the time the notification is generated and sent.

For example:

"Ocurrió un error en el borrado del workflow con id #OBJECT_ID#".

If a variable is included in a message where it has no applicable value, it will be replaced by N/A.

The following details the various variables that Anjana Data supports for use in notifications:

Variable

Purpose

ACTION                         

Action performed.

EXPIRATION_DAYS                

Days until an object expires (it is a negative number if the date is in the past). Only allowed in near-expiration warning and deprecation notifications.

OBJECT_ID                      

Object identifier.

OBJECT_LIST                    

List of objects; used in notifications such as those for requesting the creation of a new DSA.

OBJECT_NAME                    

Object name.

OBJECT_SUB_TYPE                

Object subtype.

ORGANIZATIONAL_UNIT            

Organizational unit of the object.

ORGANIZATIONAL_UNIT_CHANGED    

Destination unit of the object in an OU transfer.

REASON                         

Reason for workflow approval/rejection.

REQUEST_REASON                 

Reason for the action request (for DSA creation request or adherence request notifications, for example). 

RESULT                         

Result of the action.

ROLE                           

Role of the user who must perform the action or receives the notification.

TYPE_OBJECT                    

Object type.

USER_NAME                      

User who performed the action.

VERSION                        

Version number of the object.

WORKFLOW_TYPE                  

Type of workflow launched.

 Native Notifications

Anjana Data natively incorporates a large number of ROLE-based notifications to cover the main data governance events (creation, deletion, expiration, workflows, errors, etc.).

It is the responsibility of the functional administrator to correctly configure the receiver_role field in each notification, so that messages reach the appropriate stakeholders according to the governance operating model defined by the organization.

An incorrect or incomplete assignment may cause users not to receive critical alerts or, conversely, to be overloaded with notifications that do not concern them.

image-20250820-144320.png
Example of modifying the notification that warns of the imminent expiration of the license.

Adding a New Notification to the Notifications Table

Adding a new notification (for example, an alert to validate a workflow step) involves:

  1. Adding a record to the Notifications table with the basic notification data.

  2. Configuring the translation keys associated with the notification (translationKey and subject) in the Translations table, for all languages used by the organization in Anjana Data (Languages table).

To add the record to the Notifications table and register a new notification:

  1. Click the New button in the upper right corner. This will open a wizard with the fields defined in the Table Structure section of Notifications.

  2. Fill in the notification fields according to the structure described in the previous section.

  3. Click Save to save the role or Cancel to discard.

image-20250820-115828.png
Example of adding an alert for a validation workflow.

Translation Configuration for Notifications

Once the notification has been created in the Notifications table, it is necessary to add records to the Translations table for the message body (translationKey) and the subject (subject) in the different languages configured in the application.

The procedure is as follows:

  1. Notification body (translationKey)

    • For each notification and for each language registered in the Languages table, a record must be created in the Translations table.

    • In the key field, the translationKey defined in the notification will be used.

    • In the value field, the body text of the message in the corresponding language (the language field) will be included.

    • The message body may include dynamic variables delimited by ## (example: #OBJECT_ID#).

image-20250820-140012.png
Translations table for configuring translations.
  1. Notification subject (subject)

    • For each notification and for each language registered in the Languages table, an additional record must be created in the Translations table.

    • In the key field, the subject key defined in the notification will be used.

    • In the value field, the subject text in the corresponding language (the language field) will be included.

image-20250820-141046.png
Translations table for configuring translations.

Important:

  • After adding the translations, it is mandatory to upload the updated translations file via the configuration panel actions menu (Actions > Upload translation files).

  • Additionally, it is recommended to clear caches from the configuration panel (Actions > Clear cache).

Modifying a Notification

Modifying the subject or body of a notification has no impact on the configuration, as long as the translation keys are not altered, i.e., the translationKey or the subject. In this case, only the content of the value field in the corresponding records of the Translations table needs to be modified.

Conversely, if it is necessary to modify the translation keys (translationKey or subject), changes must be applied in both the Notifications table and the Translations table.

Important:

  • Modifications to the body or subject apply retroactively, also affecting notifications that have already been received.

  • After applying changes to translations, it is mandatory to upload the updated translations file via the configuration panel actions menu (Actions > Upload translation files).

  • Additionally, it is recommended to clear caches from the configuration panel (Actions > Clear cache).

Configuring Notifications via Direct Database Access (Developer View)

The database (DB) table containing the notifications parameters has the following structure:

Field

Data type

Required

Description / Purpose

id_notification

int4 (INTEGER)

✔️

Unique identifier of the notification. Primary key (PRIMARY KEY).

module_type

varchar(255)

✔️

Module to which the notification applies. Possible values: BG (Business Glossary), DC (Data Catalog), ALL (entire platform).

notification_code

varchar(255)

Optional

Alphanumeric code that allows invoking/sending the notification from Anjana features.

notification_receiver_type

varchar(255)

✔️

Defines the recipient: USER (a named user) or ROLE (all users with a specific role).

translation_key

varchar(255)

Optional

Translation key for the message body in the Translations table. Supports multi-language and use of dynamic variables.

notification_type

varchar(255)

✔️

Type of notification. Possible values: ALERT (alert), NOTICE (notice), ADMIN_ALERT (administrative alert).

receiver_role

varchar(255)

Optional

Role that will receive the notification, if the notification_receiver_type field = ROLE.

severity

varchar(255)




Below is an example query to configure the notifications associated with the DPO role:

SQL
INSERT INTO hermes.notification
(id_notification, module_type, notification_code, notification_receiver_type, translation_key, notification_type, receiver_role, severity, subject)
VALUES
(1,  'BG', NULL, 'ROLE', 'NOTIFICATION.1.BG.ROLE', 'ALERT', NULL, 'HIGH', 'NOTIFICATION.SUBJECT.ACTION.MUST.BE.VALIDATED'),
(3,  'BG', NULL, 'ROLE', 'NOTIFICATION.3.BG.ROLE', 'NOTICE', NULL, 'LOW',  'NOTIFICATION.SUBJECT.ACTION.PERFORMED'),
(5,  'BG', NULL, 'USER', 'NOTIFICATION.5.BG.USER', 'NOTICE', NULL, 'LOW',  'NOTIFICATION.SUBJECT.ACTION.PERFORMED'),
(6,  'BG', NULL, 'ROLE', 'NOTIFICATION.1.BG.ROLE', 'ALERT', NULL, 'HIGH',  'NOTIFICATION.SUBJECT.ACTION.MUST.BE.VALIDATED'),
(7,  'DC', NULL, 'ROLE', 'NOTIFICATION.7.DC.USER', 'ALERT', NULL, 'HIGH',  'NOTIFICATION.SUBJECT.ACTION.MUST.BE.VALIDATED'),
(8,  'DC', NULL, 'USER', 'NOTIFICATION.8.DC.USER', 'NOTICE', NULL, 'LOW',  'NOTIFICATION.SUBJECT.ACTION.PERFORMED'),
(9,  'DC', NULL, 'USER', 'NOTIFICATION.ACTION.REJECTED.WITH.REASON', 'NOTICE', NULL, 'LOW', 'NOTIFICATION.SUBJECT.ACTION.REJECTED.WITH.REASON'),
(10, 'DC', NULL, 'ROLE', 'NOTIFICATION.10.DC.ROLE', 'NOTICE', NULL, 'LOW',  'NOTIFICATION.SUBJECT.ACTION.APPROVED'),
(11, 'DC', NULL, 'ROLE', 'NOTIFICATION.11.DC.ROLE', 'NOTICE', NULL, 'LOW',  'NOTIFICATION.SUBJECT.ACTION.REJECTED'),
(12, 'BG', 'NEW_DSA', 'ROLE', 'NOTIFICATION.NEW_DSA', 'NOTICE', 'data_architect', 'LOW', 'NOTIFICATION.SUBJECT.NEW.DSA'),
(13, 'BG', 'EXPIRATION', 'USER', 'NOTIFICATION.EXPIRATION', 'NOTICE', NULL, 'LOW', 'NOTIFICATION.SUBJECT.EXPIRATION'),
(14, 'DC', 'ERROR_AUTOMATIC_METADATA', 'ROLE', 'NOTIFICATION.AUTOMATIC_METADATA', 'NOTICE', 'DataSteward', 'LOW', 'NOTIFICATION.SUBJECT.METADATA'),
(15, 'DC', 'DATASET_FAIL', 'ROLE', 'NOTIFICATION.DATASET_FAIL', 'ADMIN_ALERT', 'DataOwner', 'HIGH', 'NOTIFICATION.SUBJECT.CREATION.FAIL.DATASET'),
(16, 'DC', 'DSA_FAIL', 'ROLE', 'NOTIFICATION.DSA_FAIL', 'ADMIN_ALERT', 'DataOwner', 'HIGH', 'NOTIFICATION.SUBJECT.CREATION.FAIL.DSA');

Important:

  • Once the insert has been executed, run the sequence update for the table. (From the Configuration Panel under Actions > Reset DQ sequences, the sequences for all tables, including this one, can be updated.)

  • All the weight of the configuration logic falls on the developer executing the SQL queries directly on the tables. It is recommended to carefully review the Table Structure section.