# Descripción del Proyecto Duxiter ## 1. Resumen del Proyecto Duxiter es una aplicación web diseñada como una Plataforma de Evaluación de Proveedores. Permite a los usuarios registrarse, iniciar sesión y realizar evaluaciones de proveedores. El sistema parece soportar diferentes roles de usuario (ej. admin, admin de tenant, evaluador) y gestiona tenants, que representan diferentes organizaciones cliente que utilizan la plataforma. Las funcionalidades clave incluyen evaluaciones individuales y masivas, búsquedas de empresas, y visualización de resultados y resúmenes de evaluaciones. El proyecto también incluye características administrativas para gestionar usuarios y ver registros (ej. registros Sheriff). El proyecto está estructurado como una aplicación full-stack con un frontend separado (React/TypeScript) y backend (Node.js/Express/TypeScript). ## 2. Tecnologías Utilizadas * **Frontend:** * React ( con Vite como herramienta de construcción, inferido de `vite.config.ts` y estructura de `index.html`) * TypeScript * Tailwind CSS (inferido de `tailwind.config.js`, `postcss.config.js`) * Axios (para comunicación con API, visto en `src/services/api.ts`) * React Router (inferido de la estructura típica de proyectos React y necesidades de navegación) * **Backend:** * Node.js * Express.js * TypeScript * MongoDB (base de datos, inferido de `VITE_MONGODB_URI` en `.env` y `server/src/config/db.ts`) * Mongoose (ODM para MongoDB, inferido de archivos de modelo como `server/src/models/User.ts`) * JWT (para autenticación, inferido de `VITE_JWT_SECRET` en `.env` y middleware de auth) * Swagger/OpenAPI (para documentación de API, visto en `server/src/config/swagger.ts` y `server/src/index.ts`) * Helmet (para headers de seguridad) * Express-rate-limit (para limitación de velocidad de API) * Cors (para Cross-Origin Resource Sharing) * **Herramientas de Desarrollo y Construcción:** * ESLint (inferido de `eslint.config.js`) * Jest (para testing, inferido de `jest.config.js` y `rut.test.ts`) * npm o yarn (gestión de paquetes, inferido de `package.json`) * **Despliegue:** * Nginx (como proxy reverso, basado en interacciones previas) * Docker (potencialmente, aunque no directamente visible en los listados de archivos) ## 3. Frontend (`src/`) La aplicación frontend está construida con React y TypeScript, ubicada en el directorio [`src`](src/). ### 3.1. Estructura * **[`src/assets`](src/assets/)**: Recursos estáticos como imágenes (ej. `duxiter_logo.png`). * **[`src/components`](src/components/)**: Componentes de UI reutilizables. * **[`src/components/auth`](src/components/auth/)**: Componentes relacionados con autenticación (ej. `ProtectedRoute.tsx`, `RoleProtectedRoute.tsx`). * **[`src/components/common`](src/components/common/)**: Componentes comunes de propósito general (ej. `PageLoader.tsx`). * **[`src/components/layouts`](src/components/layouts/)**: Componentes de layout (ej. `DashboardLayout.tsx`). * **[`src/components/modals`](src/components/modals/)**: Componentes de diálogo modal (ej. `UserModal.tsx`). * **[`src/contexts`](src/contexts/)**: Proveedores de React Context API para gestión de estado global (ej. `AuthContext.tsx`, `TenantContext.tsx`). * **[`src/models`](src/models/)**: Modelos/tipos de datos del frontend, reflejando estructuras del backend (ej. `evaluation.ts`). * **[`src/pages`](src/pages/)**: Componentes de página de nivel superior representando diferentes vistas/rutas. * **[`src/pages/admin`](src/pages/admin/)**: Páginas para usuarios administrativos (ej. `AdminDashboard.tsx`, `SheriffLogDetailPage.tsx`). * **[`src/pages/auth`](src/pages/auth/)**: Páginas de autenticación (ej. `Login.tsx`, `Register.tsx`). * **[`src/pages/dashboard`](src/pages/dashboard/)**: Página principal del dashboard. * **[`src/pages/evaluations`](src/pages/evaluations/)**: Páginas relacionadas con evaluaciones (ej. `SingleEvaluation.tsx`, `BulkEvaluation.tsx`, `EvaluationsSummaryPage.tsx`). * **[`src/pages/tenant`](src/pages/tenant/)**: Páginas para gestión de tenants (ej. `TenantSettings.tsx`, `TenantUsers.tsx`). * Otras páginas como `CompanyLookup.tsx`, `LandingPage.tsx`, `NotFound.tsx`. * **[`src/services`](src/services/)**: Módulos para interactuar con la API del backend (ej. `api.ts`, `companyService.ts`, `evaluationService.ts`). * **[`src/types`](src/types/)**: Definiciones de tipos TypeScript para varias estructuras de datos (ej. `auth.ts`, `evaluation.ts`, `sheriff.ts`, `tenant.ts`). * **[`src/utils`](src/utils/)**: Funciones de utilidad (ej. `rut.test.ts` sugiere utilidades de validación de RUT). * **Puntos de entrada principales**: [`main.tsx`](src/main.tsx), [`App.tsx`](src/App.tsx), [`index.html`](index.html). * **Configuración**: `vite.config.ts`, `tsconfig.json`, `tailwind.config.js`. ### 3.2. Características y Componentes Clave * Autenticación de Usuario (Login, Registro) * Rutas Protegidas basadas en estado de autenticación y roles de usuario. * Dashboard para usuarios autenticados. * Evaluación de Proveedores (individual y masiva). * Visualización de Resultados y Resúmenes de Evaluaciones. * Búsqueda de Empresas. * Gestión de Tenants (configuraciones, usuarios). * Funcionalidades de Admin (dashboard, visualización de registros). * Gestión de estado global para información de Auth y Tenant. ## 4. Backend (`server/src/`) La API del backend está construida con Node.js, Express y TypeScript, ubicada en el directorio [`server/src`](server/src/). ### 4.1. Estructura * **[`server/src/config`](server/src/config/)**: Archivos de configuración para base de datos (`db.ts`, `database.ts`), Swagger (`swagger.ts`). * **[`server/src/controllers`](server/src/controllers/)**: Manejadores de solicitudes que interactúan con servicios y modelos (ej. `auth.controller.ts`, `evaluation.controller.ts` - asumido, `user.controller.ts`, `tenant.controller.ts`). * **[`server/src/middleware`](server/src/middleware/)**: Funciones de middleware de Express (ej. `auth.middleware.ts` para autenticación, `role.middleware.ts` para control de acceso basado en roles). * **[`server/src/models`](server/src/models/)**: Modelos de Mongoose definiendo el esquema de base de datos (ej. `User.ts`, `Company.ts`, `Evaluation.ts`, `Tenant.model.ts`, `SheriffDataLog.ts`). * **[`server/src/routes`](server/src/routes/)**: Módulos de router de Express definiendo endpoints de API (ej. `auth.routes.ts`, `user.routes.ts`, `evaluation.routes.ts`, `tenant.routes.ts`). El router principal es [`server/src/routes/index.ts`](server/src/routes/index.ts). * **[`server/src/scripts`](server/src/scripts/)**: Scripts de utilidad (ej. `migrate-tenant-usage.ts`). * **[`server/src/services`](server/src/services/)**: Módulos de lógica de negocio que interactúan con modelos y servicios externos (ej. `auth.service.ts`, `evaluationService.ts`, `userService.ts`, `OpenAIService.ts`, `siiService.ts`, `sheriffService.ts`). * **[`server/src/types`](server/src/types/)**: Definiciones de tipos TypeScript específicas del backend. * **Punto de entrada principal**: [`server/src/index.ts`](server/src/index.ts) que configura la aplicación Express, middleware, rutas y arranca el servidor. * **Configuración de Entorno**: [`server/.env`](server/.env) (aunque también se usa el `.env` principal en la raíz). ### 4.2. Características y Componentes Clave * API RESTful para interacción con el frontend. * Autenticación y autorización de usuarios (basada en JWT). * Operaciones CRUD para Usuarios, Tenants, Evaluaciones, Empresas. * Servicios para manejar lógica de negocio compleja relacionada con evaluaciones, gestión de usuarios, etc. * Integración con servicios externos (OpenAI, SII, Sheriff). * Documentación de API vía Swagger. * Medidas de seguridad (Helmet, limitación de velocidad). * Interacción con base de datos vía Mongoose. ## 5. Base de Datos * El proyecto utiliza **MongoDB** como su base de datos principal. * La configuración se gestiona en [`server/src/config/db.ts`](server/src/config/db.ts) y la URI de conexión se especifica en el archivo `.env` (`VITE_MONGODB_URI`). * **Mongoose** se utiliza como el Object Data Mapper (ODM) para interactuar con MongoDB, con esquemas definidos en [`server/src/models`](server/src/models/). ## 6. Despliegue y Entorno * La aplicación se sirve vía **Nginx**, que actúa como un proxy reverso tanto para el frontend (aplicación React) como para la API del backend. * Nginx maneja la terminación SSL y redirección de HTTP a HTTPS. * Las variables de entorno se gestionan a través de archivos `.env` en la raíz del proyecto y dentro del directorio `server/`. Estas variables configuran conexiones de base de datos, claves de API (secreto JWT, token de API Sheriff), puertos del servidor y URLs base de API. * El backend incluye limitación de velocidad y headers de seguridad (Helmet) para preparación de producción. ## 7. Resumen de Funcionalidades Principales * **Gestión de Usuarios:** Registro, login, roles de usuario, gestión de contraseñas. * **Gestión de Tenants:** Instancias específicas de organización de la plataforma, gestión de usuarios dentro de tenants. * **Evaluación de Proveedores:** * Realizar evaluaciones individuales y masivas de proveedores. * Procesar y almacenar datos de evaluación. * Mostrar resultados y resúmenes de evaluaciones. * **Información de Empresas:** Búsqueda y visualización de detalles de empresas. * **Scraping/Integración de Datos:** Servicios como `scraperService.ts`, `siiService.ts`, `sheriffService.ts` sugieren integración con fuentes de datos externas o web scraping para enriquecer datos de proveedores. * **Integración con IA:** `OpenAIService.ts` sugiere el uso de OpenAI para algunas características, posiblemente relacionadas con análisis de datos o procesamiento en evaluaciones. * **Administración:** Dashboard para admins, logging (registros de datos Sheriff). Este documento proporciona una visión general de alto nivel basada en la estructura de archivos del proyecto e interacciones previas. Se requeriría una inmersión más profunda en archivos específicos para una comprensión más granular de la implementación de cada componente.