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

389 lines
14 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔍 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`
```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.