# Методика расчёта скора

Этот текст описывает, как сервис получает число в AML-заключении. Версия правил
печатается в шапке каждого заключения и в поле `provenance.rules_version` ответа API;
когда меняются категории, веса, пороги или детекторы, меняется и она. Заключение
носит информационный характер: уровень риска операции присваивает клиент по своей
политике, сервис решения не принимает.

## Что проверяется

Сети: TRON (переводы TRC20), BNB Smart Chain и Ethereum (стейблкоины USDT и USDC).

1. **Прямое попадание в список.** Адрес ищется в открытых списках: санкционный список
   OFAC SDN, заморозки эмитентов стейблкоинов (события чёрного списка Tether и Circle
   прямо в контрактах), адреса из списков ЕС, Швейцарии и Великобритании, приказы NBCTF
   (Израиль), судебные дела о конфискации в США (CourtListener). У записи хранятся
   источник, тяжесть (severity), дата назначения и дата публикации адреса.
2. **Происхождение средств.** От проверяемого адреса граф переводов обходится вверх по
   цепочке источников: сначала самые весомые, в пределах бюджета узлов и времени.
   Каждый найденный источник относится к классу: адрес из списка, биржа или сервис,
   собственное происхождение, «не прослежено». Для проверки транзакции долю считают
   не от всего оборота адреса, а от суммы конкретного перевода: FIFO по входам
   отправителя или пропорционально (haircut).
3. **Поведение.** Двенадцать детекторов описывают форму движения средств: транзит,
   массовые рассылки и сборы, автоматические пачки, круглые расчёты, признаки
   депозитного адреса и другие. Детекторы не требуют покупной разметки и описывают
   форму, а не вину.

## Как считается скор

* **Прямое попадание в список** бывает двух видов:
  * **жёсткое** — есть хотя бы одна запись с тяжестью 90 и выше: санкции (OFAC, ЕС,
    Швейцария, Великобритания), финансирование терроризма (NBCTF), блокировка или изъятие
    Tether. Скор 100, полоса «запрещён», решение «отказ» (правило `DIRECT_LISTING`) при
    любой политике. Других способов получить 100 нет: без жёсткого попадания скор не
    выше 95;
  * **мягкое** — у всех записей тяжесть ниже 90: судебное дело о конфискации (70),
    временная заморозка Circle (80). Это факт публикации, а не приговор адресу. Скор —
    наибольшее из потолка категории попадания и тяжести записи (дело — 85, Circle — 80)
    или скор экспозиции, если он выше. Полоса — по обычной шкале, «запрещён» не
    ставится. Решение принимает политика клиента: если в ней есть правило на категорию
    попадания (у `ru_exchanger` — `enforcement_action` ≥ 5 % → ручная проверка), решает
    оно, а общий скор судит только экспозицию; если правила нет — решает общий скор
    (у `ru_exchanger` 80 ≥ 75 → отказ, у `ru_soft` → ручная проверка).
  Если у адреса есть и жёсткая, и мягкая запись, побеждает жёсткая.
* **Категории риска.** Справочник из 42 категорий хранится как данные
  (`aml/resources/risk_categories.csv`). У каждой категории есть база B, потолок C,
  затухание по хопам и пол при прямом контакте. Вклад категории растёт по логарифму
  доли средств: `вклад = B + s · log10(эффективная доля / 1 %)`, но не выше C.
  Наклон s — 18 баллов на порядок доли; у меток эмитента Tether/Circle он, как и B и
  затухание по хопам, калиброван на исходах заморозок (7,11; отчёт
  `docs/benchmarks/calibration_report_2026-09-28.md`).
  Эффективная доля учитывает удалённость источника (хопы) и время контакта.
  Контакт до назначения субъекта весит 0,35, контакт между назначением и публикацией
  адреса — 0,85, контакт после публикации — 1.
* **Свёртка категорий.** Вклады сортируются по убыванию и складываются с весами
  1; 0,3; 0,09… Скор определяет самая тяжёлая категория, остальные его уточняют.
* **Поведение** ограничено потолком 55 (65, если сработали три разных семейства
  признаков). Вклад поведения гасится, если оборот адреса меньше 50 000 $ или если
  адрес распознан как сервис (касса, биржевой хаб): у таких адресов эта форма
  расчётов нормальна. То же — если собственная кластеризация относит сам адрес к бирже
  (депозитный адрес, коллектор, горячий кошелёк).
* **Итог** = максимум из происхождения и поведения плюс не больше 10 за вторую линию.
  Ноль не выдаётся никогда: минимальный скор 3, потому что ноль читался бы как
  гарантия чистоты.

Полосы скора: 0–9 «чисто», 10–30 «низкий», 31–69 «средний», 70–89 «высокий»,
90–100 «очень высокий», жёсткое прямое попадание в список — «запрещён».

## Неизвестность

Доля средств, происхождение которых установить не удалось (обход упёрся в бюджет,
источник не размечен, данные недоступны), показывается отдельной строкой и никогда
не засчитывается как чистая. В нативный скор она не входит. Рядом со скором
печатается `score_upper`: каким был бы скор, если бы всё непрослеженное оказалось
худшей из сработавших категорий.

Если источник данных недоступен, ответ получает статус `degraded`, а скор не ниже 75:
клиент не должен пропустить платёж только потому, что проверку не удалось провести.

## Решение

Решение (пропустить, пропустить с пометкой, ручная проверка, отказ, заморозка)
считается по политике клиента. Политика — отдельный набор порогов по категориям и
суммам, её хэш печатается в заключении. Одно и то же число при разных политиках
может дать разные решения.

## Режим совместимости с AMLBot

Для обменников, настроенных под AMLBot, число отдаётся в поле `riskscore` в долях от
0 до 1. Считается линейная взвешенная доля оборота по категориям (веса `w_compat` в
справочнике), затем число приводится в полосу нашего решения: пропуск 0–0,25,
пометка 0,26–0,50, ручная проверка 0,51–0,75, отказ 0,76–1. Жёсткое прямое попадание
в список даёт 1; мягкое (суд, Circle) приводится в полосу решения, как любой вердикт. Все расхождения с нативным скором перечисляются в заголовке
`X-Compat-Divergence`.

## Ограничения

* Сервис не знает, какой именно бирже принадлежит адрес, если это не следует из
  открытых данных или из собственной кластеризации графа.
* Финансовая пирамида, криптопроцессинг и обменник выглядят в цепочке одинаково:
  поведенческие признаки их не различают.
* Полнота обхода зависит от бюджета узлов и времени и от окна локального графа;
  степень покрытия печатается в заключении.
* Весовые коэффициенты заданы экспертно, кроме меток эмитента: они калиброваны на
  исходах заморозок (чужие скоры не использовались). При каждом изменении меняется
  версия правил.
* Заключение не является юридической квалификацией и не утверждает, что средства
  получены преступным путём.
