Sistema de control de riesgos para operaciones financieras que evalúa trades en tiempo real utilizando un enfoque basado en eventos. El sistema detecta patrones de riesgo y ejecuta acciones configurables cuando se violan las reglas establecidas.
- Backend: Laravel 12.x con PHP 8.2
- Frontend: Next.js 16 con React 19 y Tailwind CSS 4
- Base de datos: MySQL 8.0
- Contenedores: Docker Compose
Se implementó evaluación por evento con las siguientes características:
- Al cerrar un trade (cambio de status a 'closed'), se dispara el evento
TradeClosed - El listener
EvaluateRiskOnTradeClosedevalúa todas las reglas activas contra el trade - Ventajas:
- Evaluación en tiempo real
- Bajo overhead computacional
- Respuesta inmediata a violaciones
- Short Trade Duration: Detecta trades cerrados demasiado rápido (parámetro:
min_duration_seconds) - Volume Consistency: Detecta volúmenes anómalos comparados con el historial (parámetro:
deviation_threshold)
- Docker Desktop instalado y ejecutándose
- PowerShell 7 (recomendado para Windows)
- Asegurar que Docker Desktop esté ejecutándose
- Ejecutar
.\start.ps1en PowerShell - Acceder a los servicios:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000/api
- phpMyAdmin: http://localhost:8080
risk-control-system/
├── backend/ # API Laravel
│ ├── app/
│ │ ├── Events/ # Eventos del sistema (TradeClosed)
│ │ ├── Http/Controllers/ # Controladores API
│ │ ├── Listeners/ # Listeners de eventos
│ │ ├── Models/ # Modelos Eloquent (6 entidades)
│ │ ├── Providers/ # Proveedores de servicios
│ │ ├── Rules/ # Reglas de riesgo
│ │ └── Services/ # Servicios de negocio
│ ├── database/
│ │ ├── factories/ # Factories para testing
│ │ ├── migrations/ # Migraciones de BD
│ │ └── seeders/ # Seeders de datos
│ ├── routes/ # Rutas API
│ └── tests/ # Pruebas automatizadas
├── frontend/ # Aplicación Next.js
│ ├── components/ui/ # 16 componentes UI reutilizables
│ ├── lib/ # Cliente API (Axios)
│ ├── pages/ # Páginas de la aplicación
│ │ ├── incidents/ # Gestión de incidencias
│ │ ├── risk-rules/ # CRUD de reglas de riesgo
│ │ └── trades/ # Listado de operaciones
│ └── styles/ # Estilos globales
├── docker-compose.yml # Configuración Docker
├── Dockerfile.backend # Imagen Docker backend
├── Dockerfile.frontend # Imagen Docker frontend
├── MANUAL_DE_USUARIO.md # Manual de usuario
└── start.ps1 # Script de inicio
- Account: Cuentas de trading (status, trading_status)
- Trade: Operaciones financieras (tipo, volumen, precios, tiempos)
- RiskRule: Reglas de riesgo configurables (tipo, severidad, parámetros)
- RuleExecution: Ejecuciones/incidencias de reglas violadas
- Action: Acciones a ejecutar cuando se violan reglas
- User: Usuarios del sistema
El proyecto utiliza variables de entorno centralizadas en:
backend/.env- Configuración del backend (base de datos, aplicación)- Los servicios Docker (mysql, phpmyadmin, backend) comparten estas variables
Las reglas de riesgo se pueden configurar a través de la interfaz web en:
GET /api/risk-rules- Listado de reglasPOST /api/risk-rules- Crear nueva reglaGET /api/risk-rules/{id}- Obtener regla específicaPUT /api/risk-rules/{id}- Actualizar reglaDELETE /api/risk-rules/{id}- Eliminar reglaPOST /api/risk-rules/{id}/actions- Asociar acción a reglaDELETE /api/risk-rules/{id}/actions/{actionId}- Desasociar acción
GET /api/actions- Listado de acciones disponiblesGET /api/actions/{id}- Obtener acción específica
GET /api/rule-executions- Listado de incidenciasPOST /api/rule-executions/{id}/resolve- Resolver incidencia
GET /api/trades- Listado de trades (con filtros)GET /api/accounts/{id}/trades- Trades por cuenta
GET /api/accounts/{id}/risk-status- Estado de riesgo de una cuenta
- Hard: Violaciones críticas que ejecutan acciones inmediatamente
- Soft: Advertencias que acumulan incidentes antes de ejecutar acciones (configurable con
incidents_before_action)
El sistema soporta 4 tipos de acciones:
| Acción | Descripción |
|---|---|
email_notification |
Enviar notificación por correo electrónico al usuario afectado |
slack_notification |
Enviar alerta al canal de Slack del equipo de riesgos |
disable_account |
Deshabilitar completamente la cuenta del usuario |
disable_trading |
Suspender la capacidad de operar (trading) de la cuenta |
- Vista general del sistema
- Métricas de riesgo
- Accesos rápidos a todas las secciones
- Listado: Ver todas las reglas con su estado y acciones
- Crear: Formulario para nuevas reglas con parámetros dinámicos
- Editar: Modificar reglas existentes
- Eliminar: Remover reglas del sistema
- Listado de violaciones de reglas
- Filtros por cuenta y regla
- Vista detallada de cada incidencia
- Función de resolución de incidentes
- Listado completo de todas las operaciones
- Filtros por cuenta, tipo y estado
- Vista detallada con duración y ganancia/pérdida
- Cálculo automático de métricas
El frontend incluye 16 componentes UI:
- Alert, Badge, Button, Card
- Form, Input, Select
- LoadingContext, Modal, Navbar
- ProgressBar, Skeleton, Spinner
- Table, Tooltip
El proyecto incluye pruebas automatizadas:
- Tests de Servicios:
RiskEvaluationServiceTest.php - Tests de Features: Pruebas de integración
- Tests Unitarios: Pruebas de modelos y componentes
Ejecución:
# Backend
cd backend
php artisan test- Autenticación: Implementar Laravel Sanctum para autenticación JWT
- Procesamiento Asíncrono: Agregar colas para acciones asíncronas
- Notificaciones Reales: Integración con Email, Slack, Webhooks
- Dashboard Avanzado: Métricas en tiempo real con gráficos
- Escalabilidad: Configuración de balanceo de carga y caché
- Seguridad: Implementación de rate limiting y protección CSRF
- ✅ Modelo de dominio completo (6 entidades)
- ✅ Dos reglas de riesgo configurables con parámetros
- ✅ Tipos de severidad (Hard/Soft) con umbrales configurables
- ✅ 4 acciones mockeables asociables a reglas
- ✅ Evaluación por evento (al cerrar trade)
- ✅ API RESTful completa con todos los endpoints
- ✅ Frontend completo (CRUD reglas, gestión de incidencias, listado de trades)
- ✅ Entorno Docker funcional con script de inicio
- Arquitectura basada en eventos (Event Sourcing)
- Evaluación en tiempo real
- Bajo acoplamiento entre componentes
- Fácil extensibilidad para nuevas reglas
- Interfaz de usuario responsive con Tailwind CSS 4
- Sistema de componentes UI reutilizables
- Animaciones con Framer Motion
- Manual de usuario incluido
- Manual de Usuario - Guía completa para usuarios finales
- Documentación de Laravel
- Documentación de Next.js
- Documentación de Docker
Este proyecto sigue las mejores prácticas de desarrollo:
- Code style con ESLint y Prettier
- Patrones de diseño modernos (Events, Services, Repositories)
- Separación de responsabilidades (Controllers, Services, Models)
- Código limpio y mantenible
- Componentes UI reutilizables
- El sistema está diseñado para ser fácilmente extensible
- Las reglas de riesgo pueden ser añadidas sin modificar el núcleo (implementar
RiskRuleInterface) - La arquitectura permite escalabilidad horizontal
- Los parámetros de reglas se almacenan como JSON para flexibilidad
- Las acciones son mockeables y pueden implementarse realmente sin cambios estructurales