Skip to content

Repository files navigation

Anti-Fraud Transaction Monitoring

Full-stack платформа мониторинга транзакций и выявления подозрительной активности

Проект хакатона IT_ONE от МГУ: от операторского интерфейса и бизнес-правил до очередей обработки, уведомлений и инфраструктуры мониторинга.

Python Django PostgreSQL Redis Docker Prometheus Grafana


О проекте

Проект разработан для хакатона IT_ONE от МГУ. Система принимает поток финансовых транзакций, проверяет их по настраиваемым антифрод-правилам и помогает оператору находить подозрительные операции.

Вместо набора изолированных скриптов проект объединяет в одном решении:

  • интерфейс оператора на Django;
  • API для приёма и управления транзакциями;
  • асинхронную очередь обработки;
  • три типа антифрод-правил;
  • аудит изменений и журнал обработки;
  • уведомления через Redis Streams, Telegram и email;
  • метрики и инфраструктурный мониторинг.

Моя роль

В проекте я занимался full-stack разработкой на Django и участвовал в создании продукта на всех основных уровнях.

Backend

  • спроектировал модели транзакций, правил, метрик и журналов;
  • реализовал API приёма, просмотра, импорта и экспорта транзакций;
  • работал над очередью и статусной моделью обработки операций;
  • реализовал применение threshold, pattern и composite правил;
  • связал обработку транзакций с Redis и сервисом уведомлений;
  • добавил историю изменений правил и технические логи по correlation ID.

Frontend

  • разработал операторскую панель на Django Admin;
  • настроил таблицы, фильтрацию, поиск и детальные представления;
  • добавил формы управления антифрод-правилами;
  • реализовал страницы метрик и визуализацию данных с Chart.js;
  • добавил сценарии JSON-импорта, CSV-экспорта и просмотра состояния очереди.

Infrastructure

  • собрал сервисы в Docker Compose;
  • подключил PostgreSQL и Redis;
  • добавил сбор метрик через Prometheus;
  • подготовил Grafana для наблюдения за состоянием системы.

Возможности

Работа с транзакциями

  • приём одной транзакции через API;
  • пакетная загрузка данных из JSON;
  • асинхронный импорт с отслеживанием прогресса;
  • полнотекстовый поиск, фильтры и сортировка в интерфейсе оператора;
  • выгрузка данных в CSV;
  • статусы new, processing, processed, failed;
  • замер времени обработки;
  • технические логи и сквозной correlation_id.

Конструктор антифрод-правил

Система поддерживает три типа правил:

Тип Назначение Пример
threshold Проверка одного числового порога Сумма операции больше заданного значения
pattern Поиск повторяющихся действий за временное окно Несколько переводов одному получателю за короткое время
composite Объединение нескольких условий Крупная операция, совершённая ночью

Правила создаются и редактируются из панели оператора. Для каждого типа можно активировать нужную конфигурацию, а история изменений сохраняется для аудита.

Уведомления

При обнаружении подозрительной операции формируется событие, которое публикуется в Redis Stream. Из него уведомление может быть отправлено:

  • в Telegram ответственным сотрудникам;
  • по email через SMTP;
  • во внутренний журнал системы.

Архитектура

flowchart LR
    Client["Внешняя система"] --> API["Transaction API"]
    Operator["Оператор"] --> Admin["Django Admin UI"]

    API --> Queue["Очередь транзакций"]
    Queue --> Workers["Пул обработчиков"]
    Workers --> Rules["Anti-Fraud Rules Engine"]

    Admin --> DB[("PostgreSQL")]
    API --> DB
    Rules --> DB

    Rules --> Stream["Redis Streams"]
    Stream --> TG["Telegram"]
    Stream --> Mail["Email"]

    Django["Django metrics"] --> Prometheus["Prometheus"]
    Prometheus --> Grafana["Grafana"]
Loading

Поток обработки

  1. Клиент отправляет транзакцию или пакет данных в API.
  2. Входные поля проходят валидацию.
  3. Транзакция получает correlation_id и попадает в очередь.
  4. Один из обработчиков проверяет её по активным правилам.
  5. Результат, статус и время обработки сохраняются в PostgreSQL.
  6. При срабатывании правила создаётся уведомление в Redis Stream.
  7. Оператор анализирует результат в Django-интерфейсе.

API

Основной API доступен на http://localhost:3000.

Метод Endpoint Назначение
POST /transactions Создать и отправить транзакцию на обработку
GET /transactions Получить список транзакций
GET /transactions/{id} Получить одну транзакцию
GET /transactions/count Получить количество транзакций
POST /transactions/import-json Импортировать пакет транзакций
GET /transactions/export-csv Экспортировать транзакции в CSV
POST /threshold Проверить threshold-правило
POST /pattern Проверить pattern-правило
POST /composite Проверить composite-правило
POST /notifications/create Создать уведомление

Django также предоставляет endpoints для фонового импорта:

Метод Endpoint Назначение
POST /api/import/start/ Запустить импорт
GET /api/import/progress/{task_id}/ Получить прогресс задачи

Пример запроса

curl -X POST http://localhost:3000/transactions \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "TX_000001",
    "timestamp": "2025-10-18T18:45:00Z",
    "sender_account": "ACC_SENDER_01",
    "receiver_account": "ACC_RECEIVER_02",
    "amount": 175000,
    "transaction_type": "transfer"
  }'

Сервисы

Сервис Порт Назначение
Django 8000 Панель оператора, импорт и метрики приложения
Transaction API 3000 Приём и обработка транзакций
PostgreSQL внутренний Основное хранилище
Redis 6379 Кэш и поток уведомлений
Prometheus 9090 Сбор метрик
Grafana 3001 Дашборды мониторинга

Стек

  • Backend: Python, Django, REST API;
  • Frontend: Django Templates, HTML, CSS, JavaScript, Chart.js;
  • Data: PostgreSQL, Redis, Redis Streams;
  • Integrations: Telegram Bot API, SMTP;
  • Monitoring: django-prometheus, Prometheus, Grafana;
  • Infrastructure: Docker, Docker Compose.

Структура проекта

.
├── api/                    # API транзакций и пул обработчиков
├── djangoAdmin/
│   ├── djangoAdmin/        # конфигурация Django
│   └── posts/              # модели, admin UI, импорт и очередь
├── methods/                # threshold, pattern и composite правила
├── notifications/          # Redis, Telegram и email-уведомления
├── monitoring/             # конфигурация Prometheus
├── docker-compose.yml
├── Dockerfile
└── Dockerfile.api

Локальный запуск

1. Подготовить окружение

cp .env.example .env

Для Telegram-уведомлений укажите TOKEN_BOT и TELEGRAM_ADMIN_IDS. Без них основной интерфейс и обработка транзакций продолжат работать, но Telegram-канал будет отключён.

2. Запустить инфраструктуру

docker compose up --build -d

3. Применить миграции

docker compose exec web python djangoAdmin/manage.py migrate

4. Создать оператора

docker compose exec web python djangoAdmin/manage.py createsuperuser

После запуска:

Переменные окружения

Переменная Назначение
DJANGO_SECRET_KEY Секретный ключ Django
DJANGO_DEBUG Режим отладки
DJANGO_ALLOWED_HOSTS Разрешённые хосты через запятую
POSTGRES_NAME Название базы данных
POSTGRES_USER Пользователь PostgreSQL
POSTGRES_PASSWORD Пароль PostgreSQL
TOKEN_BOT Токен Telegram-бота
TELEGRAM_ADMIN_IDS ID получателей уведомлений через запятую
SMTP_SERVER SMTP-сервер
SMTP_PORT Порт SMTP
SENDER_EMAIL Email отправителя
SENDER_PASSWORD Пароль приложения
ADMIN_EMAILS Получатели email-уведомлений

Статус

Проект разработан в ограниченные сроки хакатона IT_ONE от МГУ и является функциональным прототипом. Перед промышленным использованием потребуются усиление безопасности, нагрузочное тестирование и замена прототипного rules engine на безопасный интерпретатор выражений.

About

Full-stack антифрод-платформа на Django для хакатона IT_ONE от МГУ: правила, очереди транзакций, уведомления и мониторинг

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages