> ## Documentation Index
> Fetch the complete documentation index at: https://wallet-docs.iexexchanger.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AML: уровни риска и статусы

> Как трактовать status, riskLevel, riskScore, decision и signals в ответах AML

Эта страница объясняет, как читать поля AML-результата — и в [скрине по требованию](/aml/overview),
и в [AML по депозиту](/aml/deposit-checks). Сами числовые пороги настраивает оператор; ниже приведены
значения по умолчанию платформы.

## Статус проверки (`status` / `checkState`)

Жизненный цикл запроса к AML-провайдеру. В скрине по требованию это поле называется `status`, в данных
по депозиту — `checkState`. Значения одинаковы:

| Значение  | Что значит                                     | Действие                                               |
| --------- | ---------------------------------------------- | ------------------------------------------------------ |
| `pending` | Запущена, провайдер ещё считает                | Опросите `GET /v1/public/aml/checks/{uuid}` чуть позже |
| `success` | Готова — есть `riskScore`/`riskLevel`          | Принимайте решение по `riskLevel`/`decision`           |
| `failed`  | Провайдер вернул ошибку по конкретной проверке | Смотрите `reason`; можно повторить                     |
| `error`   | Сбой обращения к провайдеру                    | Смотрите `reason`; повторите позже                     |
| `skipped` | Валюта/сеть вне allowlist провайдера           | Смотрите `reason`; трактуйте как «не проверено»        |

Терминальные статусы: `success`, `failed`, `error`, `skipped`. Риск-оценку (`riskScore`, `riskLevel`,
`decision`, `signals`) несёт **только** `success`. У остальных терминальных статусов эти поля `null`.

<Warning>
  `skipped` — это **не** «адрес чистый». Это «провайдер не умеет скринить эту валюту/сеть, оценки нет».
  Не принимайте `skipped` за прохождение проверки.
</Warning>

## Уровень риска (`riskLevel`)

Производный показатель — основной для автоматических решений. Платформа вычисляет его из числового
`riskScore` и наличия критичных сигналов, по порогам политики (по умолчанию: warn = 50, block = 80):

| `riskLevel` | Когда (по умолчанию)                                                                         | Рекомендация интегратору                            |
| ----------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| `low`       | `riskScore` \< 50                                                                            | Низкий риск — обычно пропускают                     |
| `medium`    | 50 ≤ `riskScore` \< 80                                                                       | Пограничный — ручная проверка или доп. вопросы      |
| `high`      | `riskScore` ≥ 80                                                                             | Высокий риск — задержать или отклонить              |
| `severe`    | Сработал критичный сигнал (санкции, финансирование терроризма, краденое, эксплуатация детей) | Блокировать **независимо** от числового `riskScore` |

`severe` присваивается при наличии критичного сигнала — даже если числовой `riskScore` невысок.
Поэтому ориентируйтесь на `riskLevel`/`decision`, а не только на `riskScore`.

<Note>
  Пороги `warn` и `block` настраиваются оператором глобально и могут переопределяться индивидуально по
  валюте. Значения 50 и 80 — дефолты платформы; на вашем инстансе они могут отличаться.
</Note>

## Решение скрина (`decision`)

В данных по депозиту присутствует поле `decision` — нормализованное решение скрина, на основе которого
платформа выставляет итоговый `amlStatus` депозита:

| `decision` | Когда                                                          | `amlStatus` депозита                     |
| ---------- | -------------------------------------------------------------- | ---------------------------------------- |
| `pass`     | `riskScore` \< warn-порога и нет критичных сигналов            | `passed`                                 |
| `flag`     | warn-порог ≤ `riskScore` \< block-порога                       | `flagged`                                |
| `block`    | `riskScore` ≥ block-порога **или** критичный (`severe`) сигнал | `hold` (по политике может быть карантин) |

Подробнее про поведение блокировки (hold/release/quarantine) — [AML по депозиту](/aml/deposit-checks).

## Числовой скор (`riskScore`)

Строка `"0.00"`–`"100.00"`. `null`, если `status`/`checkState` ≠ `success`. Передаётся **строкой** —
не приводите к `float` без необходимости, чтобы не терять точность.

## Сигналы (`signals` и `topSignal`)

`signals` — карта `категория → вес` в диапазоне `0..1`, например:

```json theme={null}
{ "exchange": 0.8, "darknet": 0.05 }
```

`topSignal` — самая весомая **не благонадёжная** категория (благонадёжные источники вроде лицензированных
бирж, майнеров, платёжных сервисов в `topSignal` не попадают). Это поле удобно показывать в вашей
админке как «почему» сработала оценка.

### Критичные (severe) категории

Наличие сигнала из этих групп переводит результат в `riskLevel: "severe"` и решение `block`
**независимо** от числового скора:

* санкционные списки;
* финансирование терроризма;
* краденые средства;
* эксплуатация детей.

Совпадение определяется по подстроке в ключе сигнала, поэтому составные категории провайдера
(например `sanctions_ofac`, `exchange_sanctioned_*`, `terrorist_financing`, `child_abuse_material`)
тоже распознаются как `severe`.

## Сводка: на что смотреть интегратору

<Steps>
  <Step title="Дождитесь терминального статуса">
    Пока `status`/`checkState` = `pending`, оценки ещё нет. Опрашивайте результат.
  </Step>

  <Step title="Проверьте, что это success">
    Только `success` несёт оценку. `skipped`/`error`/`failed` означают «оценки нет» — не «чисто».
  </Step>

  <Step title="Принимайте решение по riskLevel (и decision)">
    `low`/`medium` обычно пропускают; `high`/`severe` — задерживают или отклоняют. Для депозита итог уже
    отражён в `amlStatus` и `decision`.
  </Step>
</Steps>

## Ссылки на отчёт

* `reportUrl` — полный отчёт провайдера (если доступен).
* `shareUrl` — публичная share-ссылка отчёта (если доступна).

<Note>
  Платформа возвращает только безопасные поля — без сырого ответа провайдера, его внутреннего кода и
  служебных идентификаторов проверки. Финальное решение «пропустить / задержать / отклонить» остаётся за
  вашей CMS и настройками оператора.
</Note>
