# 🔍 ANÁLISIS DE LIMPIEZA PROFUNDA - ARQUITECTURA SENIOR **Fecha:** 2026-01-25 **Arquitecto:** Sistema de Análisis Automatizado **Objetivo:** Transformar prototipo no-code/IA en sistema profesional, mantenible y seguro --- ## 📋 RESUMEN EJECUTIVO ### Estado Actual - **Frontend:** React 19 + TypeScript + Vite - **Backend:** Node.js + Express + PostgreSQL - **Admin Panel:** React separado - **Problemas identificados:** 127 archivos/documentos obsoletos, dependencias no utilizadas, problemas de seguridad, violaciones arquitectónicas ### Impacto Esperado - **Reducción de código:** ~15-20% eliminando archivos muertos - **Mejora de seguridad:** Eliminación de secrets hardcodeados, validación con Zod - **Arquitectura:** Separación clara de responsabilidades (Clean Architecture) - **Mantenibilidad:** Código más simple, menos duplicación, mejor organización --- ## 🗑️ TAREA 1: ARCHIVOS A ELIMINAR ### 1.1 Documentación de Instrucciones de IA (47 archivos) **Categoría: Documentos de progreso temporal** - `docs/5_PROTOCOLOS_CRITICOS_AÑADIDOS.md` - `docs/5_PROTOCOLOS_CRITICOS_AÑADIDOS_25_ENE.md` - `docs/10_PROTOCOLOS_PRIORIDAD_ALTA_AÑADIDOS.md` - `docs/40_PROTOCOLOS_COMPLETADOS.md` - `docs/60_PROTOCOLOS_COMPLETADOS.md` - `docs/VADEMECUM_10_FARMACOS_AÑADIDOS.md` - `docs/VADEMECUM_COMPLETO_35_FARMACOS.md` - `docs/VADEMECUM_LOGRO_FINAL.md` - `docs/IMAGENES_TOP5_CREADAS.md` - `docs/TOP_20_IMAGENES_PRIORITARIAS.md` - `docs/LOGROS_HOY_VISUAL.md` - `docs/ESTADO_FINAL_HOY.md` - `docs/RESUMEN_FINAL_COMPLETO_25_ENE.md` - `docs/RESUMEN_FINAL_24_ENE_2026.md` - `docs/RESUMEN_SESION_24_ENE.md` - `docs/RESUMEN_SESION_ACTUAL.md` - `docs/SESION_COMPLETA_24_ENE_FINAL.md` - `docs/SESION_2026_01_24_HISTORIAL_Y_ERRORES.md` - `docs/SESION_2026_01_24_PLACEHOLDERS_Y_DISCLAIMER.md` - `docs/QUE_FALTA_ACTUALIZADO_25_ENE.md` - `docs/QUE_FALTA_RESUMEN.md` - `docs/SIGUIENTES_TAREAS_PRIORIZADAS.md` - `docs/PLAN_CRITICO_EJECUTABLE.md` - `docs/PLAN_ACCION_EJECUTABLE.md` - `docs/RESUMEN_EJECUTIVO_CRITICO.md` - `docs/RESUMEN_COMPLETO_FALTANTE_PLAN.md` - `docs/RESUMEN_MEDIOS_FALTANTES.md` - `docs/REPORTE_MEDIOS_REFERENCIADOS.md` - `docs/INDICE_MAESTRO_COMPLETO.md` - `docs/INDICE_VISUAL_COMPLETO.md` - `docs/PROTOCOLOS_CRITICOS_AÑADIDOS.md` - `docs/PLANTILLA_PROTOCOLO.md` - `docs/ANALISIS_READMES_TECNICOS.md` - `docs/VALIDACION_MEDICA.md` - `docs/MEJORAS_FUTURAS_CHECKLIST_RCP.md` **Razón:** Documentos temporales de progreso de desarrollo, no documentación técnica permanente. ### 1.2 Scripts Duplicados o Obsoletos (12 archivos) **Categoría: Scripts de desarrollo temporal** - `scripts/diagnostico_errores.md` - Documentación de debugging temporal - `scripts/mapeo_react.csv` - Mapeo temporal de migración - `scripts/limpiar_manual.py` - Script de limpieza puntual - `scripts/anadir_enlaces_referencia.py` - Script de migración puntual - `scripts/anadir_todos_enlaces.py` - Script de migración puntual - `scripts/actualizar_rutas_indice.py` - Script de migración puntual - `scripts/integrate-assets.py` - Script de integración puntual - `scripts/normalize-media-filenames.py` - Script de normalización puntual - `scripts/generate-docs.py` - Generador de docs temporal - `scripts/actualizar_documentacion_fase4.sh` - Script de actualización puntual - `scripts/actualizar_react_fase3.sh` - Script de actualización puntual - `scripts/reorganizar-proyecto.sh` - Script de reorganización puntual **Razón:** Scripts de migración/transformación puntuales que ya cumplieron su función. ### 1.3 Archivos de Prueba/Testing Temporal (3 archivos) **Categoría: Utilidades de desarrollo** - `src/utils/test-error-handling.ts` - Utilidad de testing temporal - `src/pages/TestingPage.tsx` - Página de testing (mantener solo si es necesaria para producción) - `public/assets/README_UBICACION_IMAGENES.md.backup_20260120` - Backup temporal **Razón:** Archivos de prueba que no deberían estar en producción. ### 1.4 Documentación Técnica Redundante (15 archivos) **Categoría: Documentos técnicos duplicados o superados** - `docs/AUDITORIA_LIMPIEZA_PROYECTO.md` - Auditoría temporal - `docs/REFACTORING_PLAN.md` - Plan temporal de refactorización - `docs/REFACTORING_COMPLETED.md` - Documento temporal de refactorización - `docs/FASE_2_RESULTADOS.md` - Resultados temporales - `docs/FASE_2_PRUEBA_FALLBACK.md` - Prueba temporal - `docs/FASE_2_INTEGRACION_FRONTEND.md` - Integración temporal - `docs/FASE_2_ESTADO_ACTUAL.md` - Estado temporal - `docs/FASE_2_PLAN_COMPLETAR.md` - Plan temporal - `docs/FASE_2_COMPLETADA.md` - Documento temporal - `docs/FASE_3_RESPONSIVE_IMPLEMENTADA.md` - Documento temporal - `docs/FASE_2_RESPONSIVE_IMPLEMENTADA.md` - Documento temporal - `docs/DIAGNOSTICO_UX_RESPONSIVE.md` - Diagnóstico temporal - `docs/RESUMEN_MEJORAS_RESPONSIVE.md` - Resumen temporal - `docs/ESTRUCTURA.md` - Estructura temporal (ya existe ESTRUCTURA.md en raíz) - `docs/consolidado/CHECKLIST_PWA_COMPLETA.md` - Checklist temporal **Razón:** Documentos de fases temporales ya completadas. ### 1.5 Archivos de Configuración Duplicados **Categoría: Configuración** - `backend/config/database.js` - Duplicado de `backend/config/database.ts` - `backend/src/index.js` - Duplicado de `backend/src/index.ts` **Razón:** Archivos JavaScript duplicados cuando existe versión TypeScript. --- ## 🔧 TAREA 2: MÓDULOS A REFACTORIZAR ### 2.1 Violaciones de Clean Architecture #### 🔴 CRÍTICO: Lógica de Negocio en Componentes UI **Archivos afectados:** - `src/pages/Farmacos.tsx` - Filtrado y búsqueda directamente en componente - `src/pages/SoporteVital.tsx` - Filtrado directamente en componente - `src/pages/Patologias.tsx` - Filtrado directamente en componente - `src/pages/Escena.tsx` - Filtrado directamente en componente - `src/components/layout/SearchModal.tsx` - Lógica de búsqueda compleja en componente **Solución propuesta:** - Crear hooks personalizados: `useDrugFilter`, `useProcedureFilter`, `useSearch` - Extraer lógica a servicios: `src/services/filter.service.ts`, `src/services/search.service.ts` - Mover lógica de negocio a capa de dominio: `src/domain/` #### 🟡 MEDIO: Queries Directas a Datos sin Capa de Servicio **Archivos afectados:** - `src/pages/*.tsx` - Importan directamente desde `src/data/` - `src/components/drugs/DrugCard.tsx` - Acceso directo a datos - `src/components/content/procedures/ProcedureCard.tsx` - Acceso directo a datos **Solución propuesta:** - Crear capa de repositorio: `src/repositories/` - Implementar interfaces: `IProcedureRepository`, `IDrugRepository` - Usar ContentAdapter existente de forma consistente #### 🟡 MEDIO: Dependencias Apuntando Hacia Afuera **Problema:** Componentes importan directamente desde `src/data/` en lugar de usar servicios. **Solución:** - Invertir dependencias usando Dependency Injection - Crear interfaces en `src/domain/interfaces/` - Implementar servicios que implementen estas interfaces ### 2.2 Separación de Responsabilidades #### 🔴 CRÍTICO: Componentes con Múltiples Responsabilidades **Archivos a refactorizar:** - `src/components/layout/SearchModal.tsx` (250+ líneas) - Responsabilidades: UI, búsqueda, filtrado, navegación - Dividir en: `SearchModal.tsx`, `SearchService.ts`, `SearchFilters.tsx` - `src/pages/Farmacos.tsx` (250+ líneas) - Responsabilidades: UI, filtrado, búsqueda, categorización - Dividir en: `FarmacosPage.tsx`, `useDrugFilters.ts`, `DrugCategoryFilter.tsx` - `src/services/content-adapter.ts` (697 líneas) - Responsabilidades: Adapter, Factory, Conversión, Cache - Dividir en: `adapters/`, `factories/`, `converters/`, `cache/` #### 🟡 MEDIO: Funciones Muy Largas (>100 líneas) **Archivos afectados:** - `src/services/content-adapter.ts` - Múltiples funciones >100 líneas - `src/components/content/MarkdownViewer.tsx` - Función principal muy larga - `src/pages/ManualViewer.tsx` - Lógica compleja en componente **Solución:** Aplicar "Regla de los 15 minutos" - dividir funciones hasta que sean comprensibles en <15 min. ### 2.3 Duplicación de Código (DRY) #### 🔴 CRÍTICO: Lógica de Filtrado Duplicada **Ubicaciones:** - `src/pages/Farmacos.tsx` - Filtrado de fármacos - `src/pages/SoporteVital.tsx` - Filtrado de procedimientos - `src/pages/Patologias.tsx` - Filtrado de patologías - `src/pages/Escena.tsx` - Filtrado de escena **Solución:** Crear hook genérico `useFilter` y servicio `FilterService`. #### 🟡 MEDIO: Lógica de Búsqueda Duplicada **Ubicaciones:** - `src/components/layout/SearchModal.tsx` - Búsqueda completa - `src/services/content-search.ts` - Búsqueda de contenido - Múltiples componentes con lógica de búsqueda similar **Solución:** Unificar en `SearchService` con diferentes estrategias. #### 🟡 MEDIO: Validación Duplicada **Ubicaciones:** - Validaciones inline en múltiples componentes - Validaciones en `backend/src/validators/` (parcial) **Solución:** Usar Zod de forma consistente en frontend y backend. --- ## 📦 TAREA 3: DEPENDENCIAS NO UTILIZADAS ### 3.1 Frontend (`package.json`) #### Dependencias Instaladas pero No Usadas: - ✅ `@tanstack/react-query` - **Instalado pero NO usado** (solo QueryClient configurado, sin useQuery/useMutation) - ⚠️ `date-fns` - Verificar uso real - ⚠️ `highlight.js` - Verificar uso real - ⚠️ `rehype-highlight` - Verificar uso real **Acción:** Eliminar `@tanstack/react-query` si no se va a usar, o implementarlo correctamente. ### 3.2 Backend (`backend/package.json`) #### Dependencias a Verificar: - ⚠️ `ioredis` - Verificar si Redis está realmente configurado - ⚠️ `winston-daily-rotate-file` - Verificar si logging rotativo está activo --- ## 🔒 TAREA 4: SEGURIDAD Y ESTÁNDARES ### 4.1 Secrets Hardcodeados #### 🔴 CRÍTICO: Password en Documentación **Archivo:** `ESTADO_ACTUAL.md` ```markdown - Password: `Monforte.1977` ``` **Acción:** Eliminar inmediatamente y mover a `.env.example` sin valores reales. #### ✅ CORRECTO: JWT Secret Validation **Archivo:** `backend/src/config/security.ts` - ✅ Validación correcta implementada - ✅ Fail-fast si JWT_SECRET no está configurado - ✅ Rechaza valores por defecto inseguros **Mejora sugerida:** Añadir validación de longitud mínima más estricta. ### 4.2 Validación de Entradas #### 🔴 CRÍTICO: Falta Validación con Zod en Frontend **Problema:** No hay validación consistente de entradas de usuario en frontend. **Archivos afectados:** - Todos los formularios y inputs de usuario - Búsquedas sin sanitización - Parámetros de URL sin validación **Solución:** - Instalar `zod` en frontend (ya está en backend) - Crear schemas de validación: `src/validators/` - Validar todas las entradas de usuario #### 🟡 MEDIO: Validación Parcial en Backend **Estado actual:** - ✅ Validación con Zod en `backend/src/validators/` - ⚠️ No todos los endpoints tienen validación **Solución:** Asegurar que TODOS los endpoints tengan validación Zod. ### 4.3 Inyección SQL #### ✅ CORRECTO: Uso de Parámetros Preparados **Archivo:** `backend/src/routes/*.ts` - ✅ Uso de parámetros preparados en queries PostgreSQL - ✅ Sin concatenación de strings en SQL **Estado:** Correcto, mantener así. ### 4.4 Naming Conventions #### 🟡 MEDIO: Inconsistencias en Nombres **Problemas encontrados:** - Mezcla de camelCase y kebab-case en archivos - Algunos componentes con nombres inconsistentes **Solución:** - **Archivos:** kebab-case (ej: `drug-card.tsx`) - **Componentes:** PascalCase (ej: `DrugCard`) - **Funciones/Variables:** camelCase (ej: `getDrugById`) - **Constantes:** UPPER_SNAKE_CASE (ej: `API_BASE_URL`) --- ## 📊 RESUMEN DE IMPACTO ### Archivos a Eliminar: ~80 archivos - Documentación temporal: 47 archivos - Scripts obsoletos: 12 archivos - Archivos de prueba: 3 archivos - Documentación redundante: 15 archivos - Configuración duplicada: 2 archivos - Backups temporales: 1 archivo ### Módulos a Refactorizar: ~15 módulos principales - Componentes con múltiples responsabilidades: 5 archivos - Lógica de negocio en UI: 8 archivos - Funciones muy largas: 3 archivos - Duplicación de código: Múltiples ubicaciones ### Dependencias a Eliminar: 1-3 paquetes - `@tanstack/react-query` (si no se usa) - Verificar uso de `date-fns`, `highlight.js` ### Problemas de Seguridad: 2 críticos - Password hardcodeado en documentación - Falta validación Zod en frontend --- ## 🎯 PRIORIZACIÓN DE TAREAS ### Fase 1: Seguridad Crítica (1-2 horas) 1. ✅ Eliminar password de `ESTADO_ACTUAL.md` 2. ✅ Añadir validación Zod en frontend para entradas críticas 3. ✅ Verificar que no hay más secrets hardcodeados ### Fase 2: Limpieza de Archivos (2-3 horas) 1. ✅ Eliminar documentación temporal (47 archivos) 2. ✅ Eliminar scripts obsoletos (12 archivos) 3. ✅ Eliminar archivos de prueba (3 archivos) 4. ✅ Eliminar configuración duplicada (2 archivos) ### Fase 3: Refactorización Arquitectónica (8-12 horas) 1. ✅ Extraer lógica de negocio de componentes UI 2. ✅ Crear hooks personalizados para filtrado/búsqueda 3. ✅ Implementar capa de servicios/repositorios 4. ✅ Dividir componentes grandes (>200 líneas) ### Fase 4: Eliminación de Duplicación (4-6 horas) 1. ✅ Crear hooks genéricos para filtrado 2. ✅ Unificar lógica de búsqueda 3. ✅ Extraer validaciones comunes ### Fase 5: Optimización de Dependencias (1 hora) 1. ✅ Eliminar `@tanstack/react-query` si no se usa 2. ✅ Verificar y eliminar dependencias no utilizadas 3. ✅ Actualizar `package.json` --- ## ✅ CHECKLIST DE VALIDACIÓN Antes de considerar completada la limpieza: - [ ] No hay secrets hardcodeados en el código - [ ] Todas las entradas de usuario tienen validación Zod - [ ] No hay archivos temporales/documentación de IA - [ ] No hay scripts de migración obsoletos - [ ] Componentes siguen Single Responsibility Principle - [ ] No hay funciones >100 líneas sin justificación - [ ] No hay duplicación de código significativa - [ ] Dependencias no utilizadas eliminadas - [ ] Naming conventions consistentes - [ ] Arquitectura sigue Dependency Inversion Principle --- **Próximo paso:** Revisar este análisis y aprobar para ejecutar cambios.