# Overview

This document provides a high-level overview of the functionalities offered by the AML Transaction Monitoring service.  
AML Transaction Monitoring allows you to define rulesets that process transactions in real time.  
This document explains in detail how to construct AML rulesets and describes the available conditions that can be used within those rulesets.  
Other configurable system elements required for a complete AML Transaction Monitoring setup are also described.

## Architecture

### C4 Context diagram

[![12.png](https://developer.verestro.com/uploads/images/gallery/2025-11/scaled-1680-/12.png)](https://developer.verestro.com/uploads/images/gallery/2025-11/12.png)

## Ruleset configuration elements

Elements used to configure the logic for transaction processing are:

<table border="1" id="bkmrk-element-name-element" style="border-collapse: collapse; width: 100%; height: 249.193px;"><tbody><tr style="height: 49.1927px;"><td bgcolor="#1C1E3F" style="width: 20%; height: 49.1927px;"><span style="color: #ecf0f1;">**Element name**</span></td><td bgcolor="#1C1E3F" style="width: 80%; height: 49.1927px;"><span style="color: #ecf0f1;">**Element description**</span></td></tr><tr style="height: 40px;"><td style="width: 20%; height: 40px;"><span style="color: rgb(68, 68, 68);">**Ruleset**</span></td><td style="width: 80%; height: 40px;"><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);"><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">A set of conditions evaluated during transaction processing, and instructions that the system considers when returning the transaction outcome.</span></span></td></tr><tr style="height: 60px;"><td style="width: 20%; height: 60px;"><span style="color: rgb(68, 68, 68);">**Action**</span></td><td style="width: 80%; height: 60px;"><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">Returned by the engine when processing a transaction; actions are interpreted and handled by the service requesting AML verification.</span></td></tr><tr style="height: 40px;"><td style="width: 20%; height: 40px;"><span style="color: rgb(68, 68, 68);">**Value set**</span></td><td style="width: 80%; height: 40px;"><span style="color: rgb(68, 68, 68); background-color: rgb(255, 255, 255);">Helper variables that let you define sets of data, such as a list of high-risk countries.</span></td></tr></tbody></table>

The following sections describe each of these elements in detail.

### Ruleset

A ruleset defines a set of conditions to check during transaction monitoring and the outcomes to apply when a transaction matches those conditions.  
When a transaction is processed, all enabled rulesets are applied to see if the transaction matches their criteria.

Each ruleset consists of:

- a ruleset name,
- logic conditions checked by the processing engine,
- a trigger that defines the outcome when the ruleset is matched.

#### Condition types

Conditions define what the ruleset checks when the AML engine processes a transaction. Each ruleset can contain one or more conditions, combined with logical operators (`AND` / `OR`). The engine evaluates these conditions and returns a single decision for the transaction. The following types of conditions are supported:

<table border="1" id="bkmrk-condition-name-condi" style="border-collapse: collapse; width: 100%;"><tbody><tr><td bgcolor="#1C1E3F" style="width: 26.9338%;"><span style="color: #ecf0f1;">**Condition name**</span></td><td bgcolor="#1C1E3F" style="width: 73.0662%;"><span style="color: #ecf0f1;">**Condition description**</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**AND / OR**</span></td><td><span style="color: rgb(68, 68, 68);">Group multiple conditions:  
`AND` means all conditions must be true,   
`OR` means at least one must be true.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**request\_property\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Compares a specific field from the transaction request (for example, amount, currency or transaction country) to a value or list of values.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**kyc\_property\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Compares a property from the end user’s KYC record, such as risk level or nationality, to a value or list of values.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**transaction\_volume\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Evaluates the cumulative transaction volume over a defined period and scope (e.g. by end user, card, balance or corporation) and can be grouped by merchant or country.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**transaction\_quantity\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Evaluates the number of transactions over a defined period and scope, also grouped by merchant or country.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**blacklist\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Checks whether certain end user or transaction values (e.g. PESEL, IBAN, name) match entries in a predefined blacklist.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**greylist\_check**</span></td><td><span style="color: rgb(68, 68, 68);">Similar to `blacklist_check`, but matches data against a greylist of entities that are considered suspicious but not definitively fraudulent.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**compare\_with\_last\_transaction**</span></td><td><span style="color: rgb(68, 68, 68);">Compares fields from the current transaction with those from the last transaction within a specified time window (e.g. 5 minutes) and context (card, balance or balance owner).</span></td></tr></tbody></table>

Each condition uses comparators (e.g. `=`, `!=`, `>`, `>=`, `<`, `<=`, `IN`, `NIN`, `CONTAINS`) to compare values. You can also refer to predefined *value sets* when supplying a list of values (for example, a set of high‑risk countries).

<p class="callout info">**Info:** We continuously develop new condition types to address all business needs related to AML transaction monitoring.</p>

<p class="callout success">**Tip:** In order to set up AML rulesets, check out **[Technical Documentation – AML Ruleset Definition Language](https://developer.verestro.com/books/aml-transaction-monitoring/page/technical-documentation-aml-ruleset-definition-language "Technical documentation - DSL schema documentation for transaction rules")**</p>

#### Trigger types

A trigger defines the outcome when a ruleset is matched during transaction processing.  
You can combine actions and alerts with a decision in a single trigger block.  
There are three trigger types:

<table border="1" id="bkmrk-trigger-type-trigger" style="border-collapse: collapse; width: 100%; height: 186.375px;"><tbody><tr style="height: 29.7969px;"><td bgcolor="#1C1E3F" style="width: 18.631%; height: 29.7969px;"><span style="color: #ecf0f1;">**Trigger type**</span></td><td bgcolor="#1C1E3F" style="width: 81.4882%; height: 29.7969px;"><span style="color: #ecf0f1;">**Trigger description**</span></td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;"><span style="color: rgb(68, 68, 68);">**Decision (required)**</span></td><td style="height: 46.5938px;"><span style="color: rgb(68, 68, 68);">The main result of single ruleset processing. You set it to one of: `APPROVED`, `DECLINED`, or `ON_HOLD`. Only one decision is returned for the whole transaction, even if multiple rulesets match.</span></td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;"><span style="color: rgb(68, 68, 68);">**Actions (optional)**</span></td><td style="height: 63.3906px;"><span style="color: rgb(68, 68, 68);">Actions are instructions returned by the engine and executed by the requesting system. Example action: block an end user.  
Actions must be defined in advance in your system or via API.</span></td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;"><span style="color: rgb(68, 68, 68);">**Alert (optional)**</span></td><td style="height: 46.5938px;"><span style="color: rgb(68, 68, 68);">Alerts are notifications sent to selected channels (for example: `YouTrack ticket`) when a ruleset is matched. You can use alerts to inform AML officers about suspicious activity.</span></td></tr></tbody></table>

### Action

An action is an instruction returned by the AML engine when a ruleset is triggered.  
Actions define additional operations that should be performed by the system requesting AML verification.

Examples of actions:

- Block an end user
- Block an account

Actions are optional and must be defined in advance via GUI or via API.

<p class="callout warning">**Warning:** The AML system only allows you to define and return actions when processing a transaction. The logic for executing each action is the responsibility of the system that receives the action from the AML engine. </p>

<p class="callout warning">**Warning:** Before using actions in AML rulesets, make sure they are defined in the system.</p>

### Value set

A value set is a helper list you can use in AML rulesets to simplify configuration and maintenance.  
Value sets let you store reusable sets of values, such as lists of high-risk countries, transaction types, or merchants.  
You can reference a value set in any ruleset condition, instead of listing all the values every time.

Examples of value sets:

- List of high-risk countries
- List of blocked merchants
- List of suspicious transaction types

Value sets are optional. You define them in the [administration panel](https://developer.verestro.com/books/administration-panel) or via API, and update them as your risk policies change.

<p class="callout warning">**Warning:** Before using value set in AML rulesets, make sure they are defined in the system.</p>

## Watchlist management

The AML system supports two types of watchlists for identifying suspicious end users.

1. **Blacklist** – designed to store end users confirmed or proven to be involved in fraudulent activity.
2. **Greylist** – designed to store end users suspected of fraudulent behavior but not yet confirmed.

Managing watchlists involves adding end users by their personal and address data. End users can also be removed from a list at any time.  
Entries on these lists are automatically verified when the `blacklist_check` or `greylist_check` condition is used in AML rulesets.

#### Purpose and benefits

1. **Cross-instance fraud detection** - with properly defined AML rulesets, the system can identify and block a known fraudulent end user across all BIN sponsor instances. This is possible because verification relies on personal and address data instead of instance-specific end user identifiers.
2. **Monitoring suspicious end users** - using greylists, AML operators can add end users suspected of fraudulent activity and monitor their presence across different instances. Configured AML rulesets can trigger an alert when a transaction involves an end user found on the greylist.

## Alerts

When defining an AML ruleset, the operator configures how alerts related to that ruleset should be sent. The system sends an alert according to the defined alert configuration when a transaction matches the AML ruleset.

#### Alert configuration

Each AML ruleset can define how alerts are sent when triggered.  
The alert configuration includes following key parameters:

<table border="1" id="bkmrk-alert-parameters" style="border-collapse: collapse; width: 100%;"><tbody><tr><td bgcolor="#1C1E3F" style="width: 25%;"><span style="color: #ecf0f1;">**Alert parameter**</span></td><td bgcolor="#1C1E3F" style="width: 75%;"><span style="color: #ecf0f1;">**Alert parameter description**</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**channel**</span></td><td><span style="color: rgb(68, 68, 68);">Defines where the alert should be sent. Currently, the supported channel is `YOUTRACK_TICKET`, which creates a new issue in the predefined YouTrack project.</span></td></tr><tr><td><span style="color: rgb(68, 68, 68);">**cooldown\_period**</span></td><td><span style="color: rgb(68, 68, 68);">Defines the minimum time (in seconds) between two identical alerts generated by the same ruleset for the same end user or corporation. This prevents multiple alerts of the same type from being created within a short time window.</span></td></tr></tbody></table>

These parameters are defined inside the `alert` block of the AML ruleset configuration.

<p class="callout info">**Info:** We plan to extend the alerting mechanism in the future by adding new alert channels, such as <span style="text-decoration: underline;">email notifications</span> sent to the person/people responsible for manual AML case review when required.</p>

## AI risk scoring

Each verified transaction is also analyzed by a machine learning–based system that calculates the probability of fraud.  
The result is a numerical score ranging from **0 to 100.**

- 0 means the transaction is considered completely safe
- **100** represents the highest possible fraud probability assigned by the system

<p class="callout warning">**Warning:** At this stage, the AI score is not used in any way when making AML decisions about a transaction.  
All decisions are made solely based on the outcomes of individual AML rulesets that process the transaction.</p>

## Transaction evaluation process

<article class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto [content-visibility:auto] supports-[content-visibility:auto]:[contain-intrinsic-size:auto_100lvh] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-48" data-turn="assistant" data-turn-id="request-WEB:184a7657-2740-4a97-9982-07b6b86720dd-76" dir="auto" id="bkmrk-to-enable-the-system" tabindex="-1">To enable the system to check transactions against AML rulesets, the rulesets must first be defined.  
This can be done through the graphical interface available in the [**Administration Panel**](https://developer.verestro.com/books/administration-panel).

Once the rulesets are configured, the transaction processing system must start calling the AML service using the `aml-verify` endpoint.  
When the AML system receives a request on this endpoint, it begins evaluating the transaction against all rulesets defined in the system.

As a result of this evaluation, the system returns:

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="94640577-56b3-4bf4-b64f-e0ff4c76c083" data-message-model-slug="gpt-5" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full break-words dark markdown-new-styling">- **verificationId** – a unique identifier of the verification entity,
- **result** – a single decision for the transaction,
- **actions** – an array of actions returned by the matching rulesets.

</div></div></div></div></div></div>The AML system always returns all actions triggered by the rulesets, but only one final decision.

<p class="callout warning">**Warning: decision return logic** If all rulesets return `APPROVED`, the final result is `APPROVED`.  
If at least one ruleset returns `DECLINED`, the final result is `DECLINED`.  
If no ruleset returns `DECLINED` but at least one returns `ON_HOLD`, the final result is `ON_HOLD`.</p>

</article>