Rules
Configure scoring rules for the transactions
To define a rule for the real-time system, you must open the Go!KYT rules page.
Rule definition
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 |
Final scoring computation
To get the final scoring, we first compute the average of the rules with a weight, then we take the max of the rules without weight.
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).
Decision tree
The rest of the rule is defined by a decision tree, which is a tree of nodes, each node has a type and a set of children nodes.
Example of a rule decision tree (Go!Risk)
Matrix node
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. |
Comparison node
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.*$/ |
Formula node
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 |
API node
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. |
The API node can highly slow down your transactions, do not use it at the beggining of the decision tree, or do not use it at all when you can avoid it. Instead, use a matrix and update it with the corresponding public API.
Leaf node
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. |
Available variables
Customer, participant OR institution
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. |
Transaction
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 |