To define a rule for the real-time system, you must open the Go!KYT rules page.
enc_U2FsdGVkX18ZWeFj6u4wYPuqPPWc3ZCMT0SXDcY0eGc=_enc
Each rule is defined by the following fields, in addition to the decision tree that we will present later:
Field name | Description |
---|
name | The name of the rule. |
code | A computer friendly code of the rule. |
description | The description of the rule. |
weight | If not null, the rule will participate to the score average computation, if null the max score will be used (see final scoring) |
active | If false, the rule will be processed but the score will be ignored, it can be use to dry run a rule |
enc_U2FsdGVkX1+vTLMF2T0mboIfCrEAFaYImozUYM3cWcCxg0i6HA6eLk3qCElmQPeo_enc
enc_U2FsdGVkX1/KEqu9fCyRrPm3WeN49BqAF9pqTPGRuYFFk07xIAhkdoJdWSj/D+JanIBeaUo/6K1XpGxJRnzG+P4+N4ovP+ObBfnThiYI3LZv+4KzBg1TfgvGgJ6a+43TakPZehFd+NIya4eJ1KI0FLm+IDMlYIEAIVd9t6SPN16GhLkADhEEwQm7D5s0rO1kkaw+JDgNwPtLWKqeE8qgiQ==_enc
Using this set of rules applied to a transaction:
Code | Description | Weight | Resulting score |
---|
amount_threshold | Transaction amount is more than 100 000 € | null | 80 |
is_pep | Customer is PEP | 1 | 80 |
is_high_risk | Customer is high risk | 2 | 100 |
incoming_payment_wrong_name | Transaction defined recipient name doesn’t match real recipient name | 1 | 0 |
Here first we compute the weighted average which is (80 + 0 + 2 * 100) / 4 = 70
.
Then we take the max of the rules without weight and this average which leads to max(70, 80) = 80
.
The final score for the transaction will be 80 and the transaction will be delayed (if transactions are delayed for score between 70 and 90, see review page).
enc_U2FsdGVkX1/ZlTU/eWrYF9fD/ESGvqcLSXEHDMygXoA=_enc
enc_U2FsdGVkX188Rg+HeMZwaI0pN8bIegFL6UkTTFEubZTvy6cgS+GIOYtb7HCb0SEjhPn/eAWWTZRMA3oZOpJiu57VLd5tcKfhRnG+uJ5i9rreO8ZIUWb6kFN6NtFMfAuVVE2/LKrVlqYS3d9o8YnW1OVKHSBfHzeXzF3MXjgapsYiIlV3U2FeJPmAy/uwgcTU_enc
Example of a rule decision tree (Go!Risk)
enc_U2FsdGVkX18emSOuXN9ONWfm/Xxa+72fFGXMHJW55xM=_enc
A matrix node will compare a variable with a set of values, and output one of four values: “high”, “medium”, “low” or “undefined”.
The matrix node works on strings
, numbers
and booleans
.
It has the following options:
Option name | Description |
---|
variable | The variable to compare. |
matrix_id | The matrix to use. |
use_regex | If true, the matrix will use regex to match the variable. |
enc_U2FsdGVkX18zq3EHIHtfPl36+SjIzDZ2yzU26rmvXyU=_enc
The comparison node will compare two variables, and output one of three values: “yes”, “no” or “undefined”.
The comparison node works on strings
, numbers
and booleans
.
It has the following options:
Option name | Description | Example |
---|
variables | The variables code (aggregated to a single value). It can also be a static arbitrary value. | payment_method.code |
comparator | One of the following values: = , != , > , >= , < , <= , regex . | regex |
value | An arbitrary value used for the final comparison. | /^FR.*$/ |
enc_U2FsdGVkX18T4gVcJR7uUVqGQ4G/RS6iwgX8xL+ZePs=_enc
The formula node will compute a number result from multiple variables, compare it to a value and output one of three values: “yes”, “no” or “undefined”.
The formula node works on numbers
and booleans
. Booleans are converted to 0
or 1
.
It has the following options:
Option name | Description | Example |
---|
variables | A map of named variables. | converted_amount and 30d_average_amount |
formula | A formula using the variables, the formula must return a boolean value and use valid math function defined here. | (converted_amount - 30d_average_amount) / 30d_average_amount |
comparator | One of the following values: = , != , > , >= , < , <= . | > |
value | An arbitrary value used for the final comparison. | 1 |
enc_U2FsdGVkX1+r9/bxVcEtijYbPZ0cW5hKaCdZalQ8yP4=_enc
The API node will call an external API, and output one of three values: “yes”, “no” or “undefined”.
It has the following options:
Option name | Description |
---|
endpoint | The URL of the API to call, we will send a JSON object containing the transaction details using POST. The reply must be a TEXT of the format yes or no or a number starting from 0. Any other reply means “undefined”. |
timeout | The timeout in milliseconds, max timeout is 5 seconds. |
enc_U2FsdGVkX18sESb/2sb4Z7HAW0br0dB2cp4JMXScV4zrYJ2f5SZyGLle4puGk/GTWlr7Ycs9Lfx5PG7PDy7CAr/HhamnYnkL3owgEuDbdhSvY5yXXPoIz/f/2sneOIr4_enc
enc_U2FsdGVkX19+4zjsVV3cAhd+SZF4GNjLH6hiCLf5UwG6crkq0SIY8qsmHrgKhcShNxwJngGU6C5lEpYHd6ov1DeOenTNzp6u/PBNUSXYRlxOfd7VrKQeKwP+Lbzwx48ShFNp/c85oFeE8MlQRcer9A==_enc
enc_U2FsdGVkX18ssM4kxSDUAMWnhCPOihKM1qpRaN3jbzLA/vOmxFCBzYjrPVoMXmnew7fDbz5UnMA5QMEG3MkPuU8/cjONWfm8p1e1s1HK2UVq6vevHeKDIXhmI/rBcX8m_enc
enc_U2FsdGVkX1+4vAFy0ofZ2uoAq6fo2Vlwe93vgxT4CNM=_enc
Leaf nodes must define the following parameters:
Option name | Description |
---|
score | The score to output for the rule if the node is reached, between 0 and 100. |
enc_U2FsdGVkX1+P/OvWDAAoLNFBsZPbCPai8vCy/gwYJ7xkRHj3nGj6Q4lfT7tsqoue_enc
enc_U2FsdGVkX1/9iXSOqoLgL41IVBbVsg7ne7oSu7uS5PdUAq6F8mNDSpSWVng00M+a/xRkcKTuGBM+cCo+fM76lA==_enc
Everything defined in the transaction and its participants is available for the rule engine.
If the participants, or institutions matches a known customer in Algoreg, the customer data (participant or institution of participant) will be available too as well as:
Product origin | Variables |
---|
Go!Scan | maybe_san , is_san , maybe_pep , is_pep . |
Go!Risk | current value of a risk factor from Go!Risk using the risk_factor.[risk_factor_code] computed variables, or the risk_factor.overall variable (contains UNDEFINED , LOW , MEDIUM , or HIGH values). |
Go!Vid | is_kyc_complete , a boolean. |
Go!Press | press_score , a number between -10 and 10. |
Go!Chat | active_threads_tags , a string containing a list of tags for all non-closed threads. |
enc_U2FsdGVkX1/ZDHCQxpkrCCbqxgqSiisekD9LvjV39AE=_enc
In addition to this variables, the following variables are available on the transaction object:
Variable name | Description |
---|
converted_amount | The transaction amount converted in EUR, better suited for comparison and threshold. |
name_match_score | If an external_id was provided, we return a matching score between the customer and the name defined by the emiter of the transaction, 0% for no match, and 100% for exact match. The comparison uses the same algorithms as Go!Scan |
[edge|from|to].[in|out|all].[1|3|7|15|30|60|90|120|180|270|365|all].[max|min|sum|count] | Amount on a rolling window of the from, to or the relation between both participants. Note: in edge mode, out means from->to |