Проект хакатона IT_ONE от МГУ: от операторского интерфейса и бизнес-правил до очередей обработки, уведомлений и инфраструктуры мониторинга.
Проект разработан для хакатона IT_ONE от МГУ. Система принимает поток финансовых транзакций, проверяет их по настраиваемым антифрод-правилам и помогает оператору находить подозрительные операции.
Вместо набора изолированных скриптов проект объединяет в одном решении:
- интерфейс оператора на Django;
- API для приёма и управления транзакциями;
- асинхронную очередь обработки;
- три типа антифрод-правил;
- аудит изменений и журнал обработки;
- уведомления через Redis Streams, Telegram и email;
- метрики и инфраструктурный мониторинг.
В проекте я занимался full-stack разработкой на Django и участвовал в создании продукта на всех основных уровнях.
- спроектировал модели транзакций, правил, метрик и журналов;
- реализовал API приёма, просмотра, импорта и экспорта транзакций;
- работал над очередью и статусной моделью обработки операций;
- реализовал применение threshold, pattern и composite правил;
- связал обработку транзакций с Redis и сервисом уведомлений;
- добавил историю изменений правил и технические логи по correlation ID.
- разработал операторскую панель на Django Admin;
- настроил таблицы, фильтрацию, поиск и детальные представления;
- добавил формы управления антифрод-правилами;
- реализовал страницы метрик и визуализацию данных с Chart.js;
- добавил сценарии JSON-импорта, CSV-экспорта и просмотра состояния очереди.
- собрал сервисы в 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"]
- Клиент отправляет транзакцию или пакет данных в API.
- Входные поля проходят валидацию.
- Транзакция получает
correlation_idи попадает в очередь. - Один из обработчиков проверяет её по активным правилам.
- Результат, статус и время обработки сохраняются в PostgreSQL.
- При срабатывании правила создаётся уведомление в Redis Stream.
- Оператор анализирует результат в Django-интерфейсе.
Основной 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
cp .env.example .envДля Telegram-уведомлений укажите TOKEN_BOT и TELEGRAM_ADMIN_IDS.
Без них основной интерфейс и обработка транзакций продолжат работать, но
Telegram-канал будет отключён.
docker compose up --build -ddocker compose exec web python djangoAdmin/manage.py migratedocker compose exec web python djangoAdmin/manage.py createsuperuserПосле запуска:
- Django Admin — http://localhost:8000/admin/
- Transaction API — http://localhost:3000
- Prometheus — http://localhost:9090
- Grafana — http://localhost:3001
| Переменная | Назначение |
|---|---|
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 на безопасный интерпретатор выражений.