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 nameDescription
nameThe name of the rule.
codeA computer friendly code of the rule.
descriptionThe description of the rule.
weightIf not null, the rule will participate to the score average computation, if null the max score will be used (see final scoring)
activeIf 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:

CodeDescriptionWeightResulting score
amount_thresholdTransaction amount is more than 100 000 €null80
is_pepCustomer is PEP180
is_high_riskCustomer is high risk2100
incoming_payment_wrong_nameTransaction defined recipient name doesn’t match real recipient name10

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 nameDescription
variableThe variable to compare.
matrix_idThe matrix to use.
use_regexIf 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 nameDescriptionExample
variablesThe variables code (aggregated to a single value). It can also be a static arbitrary value.payment_method.code
comparatorOne of the following values: =, !=, >, >=, <, <=, regex.regex
valueAn 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 nameDescriptionExample
variablesA map of named variables.converted_amount and 30d_average_amount
formulaA 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
comparatorOne of the following values: =, !=, >, >=, <, <=.>
valueAn 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 nameDescription
endpointThe 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”.
timeoutThe 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 nameDescription
scoreThe 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 originVariables
Go!Scanmaybe_san, is_san, maybe_pep, is_pep.
Go!Riskcurrent 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!Vidis_kyc_complete, a boolean.
Go!Presspress_score, a number between -10 and 10.
Go!Chatactive_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 nameDescription
converted_amountThe transaction amount converted in EUR, better suited for comparison and threshold.
name_match_scoreIf 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