El objetivo de esta prueba técnica es evaluar tus habilidades en el desarrollo de una aplicación fullstack. Deberás implementar un sistema de gestión de ingresos y egresos, la gestión de usuarios y la generación de reportes. El proyecto cuenta con wireframes que pueden servir de guía para el candidato. Sin embargo, el diseño de la interfaz de usuario es libre.
-
Roles y Permisos
- Roles:
- Usuario: Solo puede acceder a la gestión de movimientos.
- Administrador: Puede ver los reportes, editar usuarios y agregar movimientos.
- Roles:
-
Home
- Página de inicio con un menú principal que permite la navegación a tres secciones:
- Sistema de gestión de ingresos y gastos (disponible para todos los roles)
- Gestión de usuarios (solo para administradores)
- Reportes (solo para administradores)
- Página de inicio con un menú principal que permite la navegación a tres secciones:
-
Sistema de Gestión de Ingresos y Gastos
- Vista de Ingresos y Egresos
- Implementar una tabla que muestre los ingresos y egresos registrados con las siguientes columnas:
- Concepto
- Monto
- Fecha
- Usuario
- Botón "Nuevo" para agregar un nuevo ingreso o egreso (solo para administradores).
- Implementar una tabla que muestre los ingresos y egresos registrados con las siguientes columnas:
- Formulario de Nuevo Ingreso/Egreso
- Formulario con los campos:
- Monto
- Concepto
- Fecha
- Botón para guardar el nuevo movimiento.
- Formulario con los campos:
- Vista de Ingresos y Egresos
-
Gestión de Usuarios (solo para administradores)
- Vista de Usuarios
- Tabla que muestre la lista de usuarios con las siguientes columnas:
- Nombre
- Correo
- Teléfono
- Acciones (editar usuario)
- Tabla que muestre la lista de usuarios con las siguientes columnas:
- Formulario de Edición de Usuario
- Formulario con los campos:
- Nombre
- Rol
- Botón para guardar los cambios.
- Formulario con los campos:
- Vista de Usuarios
-
Reportes (solo para administradores)
- Mostrar un gráfico de movimientos financieros.
- Mostrar el saldo actual.
- Botón para descargar el reporte en formato CSV.
- Tecnologías y Herramientas:
- Frontend:
- Next.js utilizando
pages
router. - TypeScript.
- Tailwind CSS.
- Shadcn para componentes de la interfaz de usuario.
- GraphQL con Apollo Client para queries y mutaciones.
- Next.js utilizando
- Backend:
- API GraphQL con Apollo Server implementada en una ruta de API de Next.js.
- Base de datos de Postgres en Supabase.
- Protección de Datos:
- Implementar control de acceso basado en roles (RBAC) para asegurar que solo los usuarios autorizados puedan acceder a ciertas funcionalidades y datos.
- Proteger el backend para que rechace conexiones no autenticadas.
- Autenticación:
- Pruebas unitarias
- El candidato debe agregar al menos 3 pruebas unitarias donde considere necesario.
- Despliegue:
- Desplegar el proyecto en Vercel.
- Frontend:
-
Código Fuente:
- Repositorio en GitHub con el código fuente del proyecto.
- Incluir un archivo README con instrucciones claras sobre cómo ejecutar el proyecto localmente y cómo desplegarlo en Vercel.
-
Despliegue:
- Proyecto desplegado en Vercel con la URL proporcionada.
-
Funcionalidad:
- Cumplimiento de todos los requisitos funcionales.
- Correcta implementación del CRUD para ingresos, egresos y usuarios.
- Generación y descarga de reportes en formato CSV.
-
Calidad del Código:
- Calidad y claridad del código.
- Uso adecuado de las mejores prácticas de desarrollo.
- Estructura del proyecto.
-
Diseño y UX:
- Usabilidad de la interfaz.
- Implementación de un diseño atractivo.
-
Pruebas y Documentación:
- Cobertura de pruebas unitarias.
- Calidad de los comentarios dentro del proyecto.
-
Seguridad:
- Implementación efectiva de control de acceso basado en roles (RBAC).
- Protección adecuada de los datos sensibles.
-
Notas:
- El aplicativo no debe contener diseño responsivo.
- El candidato puede utilizar el código cargado en este repositorio. Sin embargo, esta no es una condición necesaria y el candidato puede iniciar el proyecto de 0 si lo desea.
- El candidato puede cambiar las versiones de las librerías si lo considera necesario.
- El candidato debe compartir el acceso al repositorio de GitHub y el .env a los correos [email protected], [email protected] y [email protected]