Proyecto de portafolio · IA aplicada a cumplimiento
Triage de alertas AML con agentes de IA, decisión humana y auditoría inmutable
Hace el primer análisis de las alertas de lavado de dinero: evalúa el riesgo, un agente redacta el borrador con citas a los datos y solo descarta lo claramente benigno. Todo lo dudoso lo decide un analista.

- falsos negativos
- 0
- ningún caso sospechoso descartado (gate bloqueante)
- falsos positivos descartados
- 90,9 %
- con evidencia, en 56 casos etiquetados
- alucinaciones
- 0 %
- cada afirmación verificada contra los datos
- robustez a prompt injection
- 100 %
- en 6 casos adversarios
El problema
Muchas alertas, pocos casos reales y un costo enorme si se escapa uno
Cumplimiento revisa a mano cientos de alertas al mes; la mayoría son falsos positivos. Pero omitir un caso real tiene un costo regulatorio y reputacional que no se compensa con velocidad.
Volumen
Horas de analista en alertas que terminan descartadas, en lugar de en los casos que importan.
Costo asimétrico
Un falso negativo vale mucho más que un falso positivo: por eso "cero falsos negativos" es un gate que bloquea, no una métrica más.
Regulación
Cada decisión tiene que poder explicarse y probarse ante un auditor, años después.
Cómo funciona
Una saga de seis pasos, con compensación si algo falla
Cada alerta recorre cuatro servicios en segundos. Si un paso falla, los anteriores se compensan y el caso va a investigación manual.
- 01
Ingesta
La alerta del monitoreo entra por el gateway, con idempotencia.
- 02
Normalización
Se completan cliente y transacciones desde el core bancario.
- 03
Riesgo
Reglas deterministas y un grafo de tipologías dan un puntaje explicable.
- 04
Agente
Redacta el borrador de investigación citando cada dato que usa.
- 05
Cumplimiento
Guardrails y política: lo claro se descarta, lo dudoso va al analista.
- 06
Cierre
La decisión queda registrada y auditada de punta a punta.
Principios
Diseñada para un proceso regulado
La IA asiste, no decide
Solo se descarta sola una alerta de riesgo bajo, sin PEP y con todos los controles en verde. Un reporte a la UIF siempre lo decide una persona, con justificación.
Una falla nunca descarta
Si un servicio o el modelo falla, la saga compensa y deriva el caso a investigación manual. Un error técnico no hace menos sospechosa una alerta.
Todo es trazable
El agente solo ve una hoja de hechos y debe citarla. Un control determinista verifica cada cita, monto e identificador antes de mostrar el borrador.
La bandeja del analista
Hecha para usarse toda la jornada
React 19 con shadcn/ui: evidencia y decisión lado a lado, tema claro y oscuro, y vista móvil.

Bandeja. Filtros rápidos, pendientes marcadas y SLA en rojo si venció.

Saga en vivo. Cada paso con su estado y sus compensaciones.

Auditoría. La cadena de hashes de cada alerta, verificada por el servidor.
Auditoría inmutable
Tres capas, pensadas contra el administrador, no solo contra un bug
En auditoría regulatoria, el actor del que hay que proteger la evidencia es quien tiene acceso privilegiado.
Hash-chain por alerta
Cada evento se encadena con SHA-256 al anterior: alterar, insertar o borrar uno rompe la cadena.
Anclas en almacenamiento WORM
Cada 5 minutos se sella la cabeza de todas las cadenas en S3 Object Lock (modo COMPLIANCE): ni el root lo puede borrar.
Sello de tiempo RFC 3161
Una autoridad externa certifica cuándo existía cada ancla: un sello retrofechado se detecta.
Arquitectura
Microservicios hexagonales con patrones distribuidos
En un banco empezaría con un monolito modular sobre un solo PostgreSQL; aquí se demuestran los patrones a propósito, y cada ADR dice cuál sería la opción pragmática.
Servicios
alert-ingestionIngesta e inicio de la saga
risk-assessmentReglas + grafo Neo4j
investigationAgentes LangGraph
complianceGuardrails, HITL y CQRS
auditEvent store inmutable
saga-orchestratorMáquina de estados
api-gatewayAuth, roles y agregación
Patrones
- Saga (coreografía y orquestación)
- Transactional Outbox
- CQRS
- Arquitectura hexagonal
- DDD
- Human-in-the-loop
- Circuit breaker
Stack
- Python 3.12
- FastAPI
- LangGraph
- PostgreSQL
- MongoDB
- Elasticsearch
- Neo4j
- RabbitMQ
- React 19
- shadcn/ui
- Docker
- GitHub Actions
Calidad
Verificado contra el sistema real, no solo con tests unitarios
Cada criterio de aceptación se probó contra la plataforma levantada, y esa verificación encontró bugs que ningún test unitario veía.
- 26
- jobs de CI en verde
- lint, mypy strict, fronteras, tests, imágenes, E2E
- 8/8
- escenarios de falla
- en coreografía y en orquestación
- 21
- decisiones de arquitectura
- documentadas como ADR, con alternativas
- 0
- vulnerabilidades HIGH/CRITICAL
- trivy sobre código e imágenes
Con honestidad
Lo que este proyecto no es
- Datos sintéticos: los parámetros de detección no están calibrados con casos reales; es lo primero que mediría.
- No presenta reportes a la UIF: prepara el caso y deja la decisión a cumplimiento.
- Autenticación de desarrollo (JWT de prueba); en producción sería el proveedor de identidad del banco.
- La autoridad de sellado de la demo la genera la propia plataforma: prueba el mecanismo, no la independencia.