Aplicación web desarrollada en Angular para analizar y visualizar la variación mensual de los fondos de inversión de Fintual.
- Consumo de API pública de Fintual
- Cálculo de variación mensual de fondos
- Visualización interactiva con gráficos (Línea, Barras, Radar)
- Filtros por tipo de fondo y rango de fechas
- Modo comparación para analizar hasta 4 fondos simultáneamente
- Estadísticas detalladas (promedio, mejor/peor mes, volatilidad)
- Tabla interactiva con búsqueda y ordenamiento
- Diseño responsive y moderno
- Selector de tipo de gráfico (Línea, Barras, Radar)
- Modo comparación múltiple de fondos
- Panel de estadísticas con métricas clave
- Búsqueda en tiempo real en tabla de datos
- Ordenamiento por mes o variación
- Diseño totalmente responsive
- Frontend: Angular 17
- Lenguaje: TypeScript
- Gráficos: Chart.js
- Estilos: CSS3 con diseño moderno y gradientes
- API: API pública de Fintual
Antes de comenzar, asegúrate de tener instalado:
- Node.js (versión 18 o superior)
- npm (viene con Node.js)
- Angular CLI (se instalará globalmente)
git clone https://github.com/jhanp12/fintual-challenge.git
cd fintual-challengenpm installnpm install -g @angular/cling serveLa aplicación estará disponible en http://localhost:4200
ng build --configuration productionLos archivos compilados estarán en el directorio dist/
- Seleccionar tipo de fondo (opcional): Filtra fondos por categoría
- Seleccionar un fondo: Elige el fondo que deseas analizar
- Configurar fechas (opcional): Define un rango de fechas específico
- Ver resultados:
- Gráfico interactivo de variación mensual
- Panel de estadísticas con métricas clave
- Tabla detallada con todos los datos
- Activar modo comparación: Click en el botón "Activar Modo Comparación"
- Seleccionar fondos: Haz click en hasta 4 fondos para comparar
- Configurar fechas (opcional): Define el período de análisis
- Analizar: Visualiza todos los fondos en un mismo gráfico
- Línea : Ideal para ver tendencias
- Barras : Mejor para comparar valores específicos
- Radar : Vista alternativa de datos
fintual-challenge/
├── src/
│ ├── app/
│ │ ├── components/
│ │ │ └── funds-chart/ # Componente principal
│ │ ├── services/
│ │ │ └── fintual.service.ts # Servicio API
│ │ ├── models/
│ │ │ ├── fund.ts # Interface Fund
│ │ │ └── real-asset.ts # Interfaces de datos
│ │ └── app.component.ts
│ └── styles.css # Estilos globales
├── queries.sql # Consultas SQL del desafío
├── package.json
└── README.md
El proyecto incluye consultas SQL para análisis de datos de inversiones:
SELECT movement_type, SUM(amount) as total_amount
FROM user_movements
WHERE DATE_TRUNC('month', date) = '2021-12-01'
GROUP BY movement_type;SELECT date, movement_type, COUNT(*), AVG(amount)
FROM user_movements
GROUP BY date, movement_type;SELECT ud.name, ud.last_name, COUNT(*) as total_aportes
FROM user_data ud
JOIN user_movements um ON ud.user_id = um.user_id
WHERE um.movement_type = 'subscription'
GROUP BY ud.user_id, ud.name, ud.last_name
ORDER BY total_aportes DESC
LIMIT 1;- Componentes standalone: Uso de la nueva sintaxis de Angular 17
- Servicios inyectables: Separación de lógica de negocio
- Interfaces TypeScript: Tipado fuerte para mayor seguridad
- Fondos hardcodeados: La API de Fintual no tiene endpoint de listado, por lo que se definen los 4 fondos según documentación oficial
- Manejo de fechas: Filtrado flexible con parámetros opcionales
- Estructura de respuesta: Manejo de diferentes formatos (
datao array directo)
variación = ((precio_final - precio_inicial) / precio_inicial) * 100- Se toma el primer y último precio de cada mes
- Los datos se agrupan por año-mes (
YYYY-MM) - Ordenamiento cronológico automático
- Promedio: Media aritmética de todas las variaciones
- Volatilidad: Desviación estándar de las variaciones
- Mejor/Peor mes: Máximo y mínimo del período
- Chart.js: Librería robusta y flexible para gráficos
- Múltiples tipos: Soporte para línea, barras y radar
- Comparación: Hasta 4 fondos con colores diferenciados
- Design System: Gradientes morados consistentes
- Feedback visual: Loading spinners y mensajes de error
- Responsive: Grid CSS y media queries
- Accesibilidad: Labels claros y contraste adecuado
La aplicación maneja:
- Errores de conexión a la API
- Datos vacíos o inválidos
- Fechas sin información
- Límite de fondos en comparación (máximo 4)
- Chrome, Firefox, Safari, Edge (últimas versiones)
- Responsive: Desktop, Tablet, Mobile
- Resoluciones desde 320px hasta 4K
[JHAN PIERRE BECERRA HUAYTALLA]
- GitHub: @tu-usuario