# Mexus App - Sistema de Gestión de Obras de Construcción Sistema integral para la gestión de obras de construcción, desarrollado con Next.js 14+, diseñado para empresas constructoras que necesitan administrar proyectos, finanzas, recursos e inventario. ## Características Principales ### Módulos del Sistema | Módulo | Descripción | |--------|-------------| | **Dashboard** | Panel principal con KPIs, gráficos de avance y resumen financiero | | **Obras** | Gestión completa de proyectos de construcción con fases y tareas | | **Finanzas** | Control de gastos, presupuestos y flujo de caja | | **Recursos** | Administración de personal y subcontratistas | | **Inventario** | Control de materiales con alertas de stock bajo | | **Reportes** | Generación de reportes con exportación a CSV | ### Funcionalidades Destacadas - **Autenticación segura** con NextAuth.js v5 - **Control de acceso por roles** (Admin, Gerente, Supervisor, Contador, Empleado) - **Multi-empresa** - Cada usuario pertenece a una empresa - **Dashboard interactivo** con gráficos Recharts - **Alertas automáticas** de stock bajo en inventario - **Registro de movimientos** de inventario (entradas/salidas) - **Responsive design** con Tailwind CSS y shadcn/ui ## Stack Tecnológico | Tecnología | Versión | Uso | |------------|---------|-----| | Next.js | 14.2.x | Framework React con App Router | | TypeScript | 5.x | Tipado estático | | Tailwind CSS | 3.4.x | Estilos utilitarios | | shadcn/ui | - | Componentes UI | | Prisma | 5.22.x | ORM para PostgreSQL | | PostgreSQL | 15+ | Base de datos | | NextAuth.js | 5.x (beta) | Autenticación | | Recharts | 2.x | Gráficos y visualizaciones | | Zod | 3.x | Validación de esquemas | ## Requisitos Previos - Node.js 20.x o superior - PostgreSQL 15 o superior - npm o yarn ## Instalación ### 1. Clonar el repositorio ```bash git clone https://git.consultoria-as.com/tu-usuario/mexus-app.git cd mexus-app ``` ### 2. Instalar dependencias ```bash npm install ``` ### 3. Configurar variables de entorno Crear archivo `.env` en la raíz del proyecto: ```env # Base de Datos DATABASE_URL="postgresql://usuario:password@localhost:5432/construccion_db?schema=public" # NextAuth.js NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="tu-secret-key-segura-aqui" # Node Environment NODE_ENV="development" ``` ### 4. Configurar base de datos ```bash # Crear las tablas npx prisma migrate dev # Poblar con datos de ejemplo (opcional) npx prisma db seed ``` ### 5. Iniciar el servidor de desarrollo ```bash npm run dev ``` La aplicación estará disponible en `http://localhost:3000` ## Credenciales de Prueba Si ejecutaste el seed, puedes usar estas credenciales: | Email | Contraseña | Rol | |-------|------------|-----| | admin@demo.com | admin123 | ADMIN | ## Estructura del Proyecto ``` construccion-app/ ├── prisma/ │ ├── schema.prisma # Modelos de datos │ └── seed.ts # Datos de ejemplo ├── src/ │ ├── app/ │ │ ├── (auth)/ # Páginas de autenticación │ │ │ ├── login/ │ │ │ └── registro/ │ │ ├── (dashboard)/ # Área principal protegida │ │ │ ├── dashboard/ # Panel principal │ │ │ ├── obras/ # Gestión de obras │ │ │ ├── finanzas/ # Control financiero │ │ │ ├── recursos/ # Personal y recursos │ │ │ │ ├── materiales/ # Inventario │ │ │ │ └── personal/ # Empleados │ │ │ └── reportes/ # Reportes │ │ └── api/ # API Routes │ │ ├── auth/ # NextAuth endpoints │ │ ├── obras/ # CRUD obras │ │ ├── gastos/ # CRUD gastos │ │ └── materiales/ # CRUD materiales │ ├── components/ │ │ ├── ui/ # Componentes shadcn/ui │ │ └── layout/ # Sidebar, Header │ ├── lib/ │ │ ├── auth.ts # Configuración NextAuth │ │ ├── prisma.ts # Cliente Prisma │ │ ├── utils.ts # Utilidades │ │ └── validations.ts # Esquemas Zod │ ├── hooks/ # Custom React hooks │ └── types/ # TypeScript types ├── docker-compose.yml # Configuración Docker ├── Dockerfile # Build de producción └── nginx.conf # Configuración Nginx ``` ## Comandos Disponibles ```bash # Desarrollo npm run dev # Inicia servidor de desarrollo npm run build # Compila para producción npm run start # Inicia servidor de producción npm run lint # Ejecuta ESLint # Base de datos npx prisma migrate dev # Ejecuta migraciones en desarrollo npx prisma migrate deploy # Ejecuta migraciones en producción npx prisma db seed # Ejecuta el seed npx prisma studio # Abre el explorador de BD npx prisma generate # Regenera el cliente Prisma ``` ## Despliegue con Docker ### Desarrollo ```bash docker-compose up -d ``` ### Producción ```bash docker-compose -f docker-compose.prod.yml up -d ``` ## API Endpoints ### Autenticación - `POST /api/auth/callback/credentials` - Login - `GET /api/auth/session` - Obtener sesión actual - `POST /api/auth/signout` - Cerrar sesión ### Obras - `GET /api/obras` - Listar obras - `POST /api/obras` - Crear obra - `GET /api/obras/[id]` - Obtener obra - `PUT /api/obras/[id]` - Actualizar obra - `DELETE /api/obras/[id]` - Eliminar obra ### Gastos - `GET /api/gastos` - Listar gastos - `POST /api/gastos` - Crear gasto - `PUT /api/gastos/[id]` - Actualizar gasto - `DELETE /api/gastos/[id]` - Eliminar gasto - `PATCH /api/gastos/[id]/aprobar` - Aprobar gasto ### Materiales - `GET /api/materiales` - Listar materiales - `POST /api/materiales` - Crear material - `PUT /api/materiales/[id]` - Actualizar material - `DELETE /api/materiales/[id]` - Eliminar material - `POST /api/materiales/movimiento` - Registrar movimiento de inventario ## Roles y Permisos | Rol | Descripción | Permisos | |-----|-------------|----------| | ADMIN | Administrador | Acceso completo | | GERENTE | Gerente de proyectos | Gestión de obras y finanzas | | SUPERVISOR | Supervisor de obra | Registro de avances y gastos | | CONTADOR | Contador | Gestión financiera | | EMPLEADO | Empleado general | Solo lectura | ## Seguridad - Autenticación mediante JWT con NextAuth.js - Middleware de protección de rutas - Validación de datos con Zod en cliente y servidor - Filtrado de datos por empresa (multi-tenant) - Contraseñas hasheadas con bcrypt - Headers de seguridad configurados ## Contribuir 1. Fork el repositorio 2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`) 3. Commit tus cambios (`git commit -m 'Agrega nueva funcionalidad'`) 4. Push a la rama (`git push origin feature/nueva-funcionalidad`) 5. Abre un Pull Request ## Licencia Este proyecto es privado y de uso interno. ## Soporte Para soporte técnico, contactar al equipo de desarrollo. --- Desarrollado con Next.js y TypeScript