codigo0/docs/ANALISIS_LIMPIEZA_PROFUNDA.md
planetazuzu 5d7a6500fe refactor: Fase 1 - Clean Architecture, refactorización modular y eliminación de duplicidades
-  Ticket 1.1: Estructura Clean Architecture en backend
-  Ticket 1.2: Schemas Zod compartidos
-  Ticket 1.3: Refactorización drugs.ts (1362 → 8 archivos modulares)
-  Ticket 1.4: Refactorización procedures.ts (3583 → 6 archivos modulares)
-  Ticket 1.5: Eliminación de duplicidades (~50 líneas)

Cambios principales:
- Creada estructura Clean Architecture en backend/src/
- Schemas Zod compartidos en backend/src/shared/schemas/
- Refactorización modular de drugs y procedures
- Utilidades genéricas en src/utils/ (filter, validation)
- Eliminados scripts obsoletos y documentación antigua
- Corregidos errores: QueryClient, import test-error-handling
- Build verificado y funcionando correctamente
2026-01-25 21:09:47 +01:00

14 KiB

🔍 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<T> 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

- 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.