Project Story — Bankurity (Polihacks 2025)
About the project
Bankurity (Polihacks 2025) nace como una herramienta para ayudar a identificar llamadas y patrones de fraude bancario, con especial foco en la protección de personas de la tercera edad. El sistema combina un backend en Node.js que expone endpoints para clasificación y detección, con una app iOS llamada Bankurity desarrollada en Swift/SwiftUI que actúa como interfaz para usuarios y operadores.
Inspiration
La idea surgió al ver la persistente problemática de estafas telefónicas dirigidas a personas mayores: con frecuencia los fraudes son sociales (ingeniería social), rápidos y difíciles de verificar en el momento. Queríamos construir una solución práctica que:
- Ayude a clasificar conversaciones o fragmentos de audio/texto como sospechosos.
- Brinde una interfaz accesible para reportes y apoyo humano.
- Use modelos de lenguaje y análisis semántico para asistir, sin suplantar la revisión humana.
What we learned
Durante el desarrollo aprendimos tanto en lo técnico como en lo de producto:
- Integración con APIs generativas para análisis semántico y explicación de decisiones.
- Diseño de una API REST modular en Express con rutas separadas para clasificación, chat y detección.
- Implementación de buenas prácticas para manejo de errores y autenticación en middleware.
- Cuestiones de privacidad y ética: minimizar la retención de datos, permitir transparencia y consentimiento.
- La importancia del feedback humano: los operadores deben poder revisar y corregir decisiones del modelo.
How we built it
Estructura y decisiones principales:
- Backend: Node.js + Express. Endpoints agrupados bajo
/api/v1como/clasificar,/chat,/detection,/chat-stream.- Servicios (
algoritmo.service.js,chat.service.js,gemini.service.js) encapsulan la lógica de clasificación y llamadas a APIs externas. - Middlewares para autenticación y manejo de errores.
- Servicios (
- App iOS: proyecto en
estafas-bancarias/cuyo producto es la app Bankurity, hecha en Swift/SwiftUI para reportes, visualización de alertas y comunicación con operadores. - Integración con servicios de modelos (p. ej. a través de
gemini.service.js) para obtener puntuaciones de riesgo y explicaciones tersas.
Proceso resumido:
- Prototipo de la API y endpoints básicos.
- Servicio de clasificación que acepta texto y devuelve etiqueta + score.
- Conectar la app iOS (Bankurity) con la API para reportes y revisión.
- Añadir middlewares de seguridad y validaciones.
Challenges
- Falta de dataset etiquetado: sin datos reales es difícil medir y entrenar modelos robustos.
- Trade-off entre falsos positivos y falsos negativos: salvar a usuarios vulnerables puede requerir priorizar recall, pero eso genera más alertas que deben revisarse.
- Privacidad y cumplimiento: diseñar para minimizar datos sensibles y proteger la información en tránsito y en reposo.
- Consistencia de configuración: asegurar que la documentación (README) y los valores por defecto del servidor estén sincronizados.
Ethics and privacy
- Minimizar recolección: guardar sólo lo necesario para trazabilidad y mejora.
- Consentimiento: las llamadas/reportes deben indicarse como analizados por IA y los usuarios deben poder gestionar permisos.
- Transparencia: proveer score y explicación breve de la alerta para revisión humana.
- Sesgo: evaluar posibles sesgos del modelo y mitigarlos con datos y reglas.
Current results & assumptions
- Prototipo funcional con endpoints para clasificación y chat.
- Integración inicial con servicios generativos para análisis semántico.
- App Bankurity: interfaz mínima viable para reportes y revisión.
Nota: para obtener validación cuantitativa necesitamos un dataset etiquetado; el sistema actual es base para iterar con datos reales.
Next steps / Roadmap
- Recopilar y anonimizar datos reales con consentimiento para entrenar y validar modelos.
- Pipeline de reentrenamiento con etiquetado humano.
- Pruebas automáticas y monitorización por endpoint.
- Despliegue controlado y pruebas A/B para seleccionar umbrales operativos.
- Mejoras UX en Bankurity: notificaciones, flujos de escalado y accesibilidad.
How to run locally (quick)
cd backend
npm install
npm run dev
Por defecto el README contiene PORT=3000 en el .env de ejemplo; el servidor lee la variable PORT del entorno para arrancar en otro puerto si se prefiere.
Closing
Bankurity es una mezcla de tecnología y propósito social: el alcance real depende de colaborar con expertos, iterar con datos y priorizar la privacidad y la seguridad de las personas.
Log in or sign up for Devpost to join the conversation.