# Arquitectura para Guías de Refuerzo - EMERGES TES
**Diseño de Sistema Paralelo para Modo Formativo**
---
## 1️⃣ DIAGNÓSTICO TÉCNICO (Solo Lectura)
### 1.1 Partes REUTILIZABLES Sin Cambios
**✅ Componentes UI Base (shadcn/ui)**
- **Ubicación:** `src/components/ui/` (51 componentes)
- **Razón:** Componentes modulares, bien diseñados, independientes
- **Uso:** Todos los componentes (Button, Card, Badge, Tabs, etc.)
- **Riesgo:** ⚠️ Ninguno - Son componentes base
**✅ Sistema de Variables CSS**
- **Ubicación:** `src/index.css`
- **Razón:** Centralizado, permite cambios globales sin tocar componentes
- **Uso:** Variables de color, espaciado, tipografía
- **Riesgo:** ⚠️ Ninguno - Sistema de diseño base
**✅ Hooks Personalizados**
- **Ubicación:** `src/hooks/`
- **Componentes:**
- `useFavorites.ts` - Gestión de favoritos
- `useSearchHistory.ts` - Historial de búsquedas
- `usePWAInstall.ts` - Instalación PWA
- `useServiceWorker.ts` - Service Worker
- **Razón:** Lógica reutilizable, bien implementada
- **Uso:** Favoritos y historial para guías de refuerzo
- **Riesgo:** ⚠️ Ninguno - Hooks independientes
**✅ Utilidades**
- **Ubicación:** `src/lib/utils.ts`, `src/utils/markdownUtils.ts`
- **Razón:** Funciones puras, sin dependencias de UI
- **Uso:** `cn()` para clases, procesamiento de Markdown
- **Riesgo:** ⚠️ Ninguno - Utilidades puras
**✅ Componentes Compartidos**
- **Ubicación:** `src/components/shared/`
- **Componentes:**
- `Badge.tsx` - Badges con variantes
- `EmergencyButton.tsx` - Botones de emergencia
- **Razón:** Componentes específicos del dominio, bien diseñados
- **Uso:** Badges para identificar tipo de guía, botones de navegación
- **Riesgo:** ⚠️ Ninguno - Componentes independientes
**✅ Sistema PWA**
- **Ubicación:** `public/sw.js`, `public/manifest.json`
- **Razón:** Sistema completo, funcional
- **Uso:** Guías de refuerzo funcionarán offline automáticamente
- **Riesgo:** ⚠️ Ninguno - Sistema independiente
### 1.2 Partes a ENVOLVER o EXTENDER (No Modificar)
**🔶 MarkdownViewer**
- **Ubicación:** `src/components/content/MarkdownViewer.tsx`
- **Estado Actual:** Carga archivos desde `public/`, renderiza Markdown
- **Estrategia:** Crear `GuideMarkdownViewer.tsx` que envuelva/extienda MarkdownViewer
- **Razón:** No modificar el existente, crear variante específica para guías
- **Extensión:**
- Cargar desde `docs/consolidado/` (no `public/`)
- Estilos específicos para guías (más espaciado, tipografía diferente)
- Navegación entre secciones
- Badges de "Modo Formación"
- **Riesgo:** ⚠️ Bajo - Nuevo componente, no toca el existente
**🔶 Layout Actual (App.tsx)**
- **Ubicación:** `src/App.tsx`
- **Estado Actual:** Layout único hardcodeado
- **Estrategia:** Crear `GuideLayout.tsx` nuevo, usar condicionalmente en App.tsx
- **Razón:** No modificar layout actual, agregar layout alternativo
- **Extensión:**
- Layout específico para guías (más espaciado, sin BottomNav opcional)
- Badge de "Modo Formación" visible
- Navegación entre secciones de guía
- **Riesgo:** ⚠️ Medio - Requiere cambio mínimo en App.tsx (condicional)
**🔶 Sistema de Rutas**
- **Ubicación:** `src/App.tsx` (líneas 71-99)
- **Estado Actual:** Rutas hardcodeadas
- **Estrategia:** Agregar rutas nuevas sin modificar las existentes
- **Razón:** Rutas nuevas no afectan rutas existentes
- **Extensión:**
- `/guia-refuerzo/:guia` - Índice de guía
- `/guia-refuerzo/:guia/seccion/:numero` - Sección específica
- **Riesgo:** ⚠️ Bajo - Solo agregar, no modificar
**🔶 Header y BottomNav**
- **Ubicación:** `src/components/layout/Header.tsx`, `BottomNav.tsx`
- **Estado Actual:** Funcionales, visibles en todas las páginas
- **Estrategia:** Usar condicionalmente, ocultar BottomNav en guías si es necesario
- **Razón:** No modificar componentes, solo controlar visibilidad
- **Extensión:**
- Badge de modo en Header (opcional)
- Ocultar BottomNav en guías (opcional, según diseño)
- **Riesgo:** ⚠️ Bajo - Solo control de visibilidad
### 1.3 Partes NO Deben Tocarse
**🔴 App.tsx - Estructura Principal**
- **Razón:** Componente raíz, cualquier cambio puede romper toda la app
- **Estrategia:** Cambios mínimos y reversibles (condicionales)
- **Riesgo:** 🔴 Alto - Solo cambios condicionales seguros
**🔴 Componentes de Layout Actuales**
- **Componentes:** Header.tsx, BottomNav.tsx, Footer.tsx
- **Razón:** Usados en toda la app, cambios afectan todas las páginas
- **Estrategia:** No modificar, solo usar condicionalmente
- **Riesgo:** 🔴 Alto - No modificar directamente
**🔴 Páginas Existentes**
- **Ubicación:** `src/pages/`
- **Razón:** Funcionales, no deben romperse
- **Estrategia:** No tocar, crear páginas nuevas
- **Riesgo:** 🔴 Alto - No modificar
**🔴 Estructura de Datos Existente**
- **Ubicación:** `src/data/procedures.ts`, `drugs.ts`, `manual-index.ts`
- **Razón:** Usados por páginas existentes
- **Estrategia:** Crear nuevos archivos de datos para guías
- **Riesgo:** 🔴 Alto - No modificar
**🔴 Sistema de Búsqueda Actual**
- **Ubicación:** `src/components/layout/SearchModal.tsx`
- **Razón:** Funcional, usado en toda la app
- **Estrategia:** No modificar, extender después si es necesario
- **Riesgo:** 🔴 Alto - No modificar inicialmente
### 1.4 Patrones Visuales Reutilizables
**✅ Patrón: Card Expandible**
- **Componente:** ProcedureCard, DrugCard
- **Aplicación:** Cards de guías de refuerzo con secciones expandibles
- **Ventaja:** Patrón conocido, consistente con app actual
**✅ Patrón: Tabs Horizontales**
- **Componente:** RCP.tsx, Farmacos.tsx, Herramientas.tsx
- **Aplicación:** Tabs para navegar entre secciones de guía (1-8)
- **Ventaja:** Patrón conocido, mobile-friendly
**✅ Patrón: Header de Página**
- **Componente:** RCP.tsx, Ictus.tsx
- **Aplicación:** Header con icono, título, subtítulo para guías
- **Ventaja:** Consistente con páginas existentes
**✅ Patrón: Navegación Anterior/Siguiente**
- **Componente:** ManualViewer.tsx
- **Aplicación:** Navegación entre secciones de guía
- **Ventaja:** Patrón conocido, útil para contenido largo
**✅ Patrón: Badge de Prioridad**
- **Componente:** Badge.tsx
- **Aplicación:** Badge "Modo Formación" para diferenciar de operativo
- **Ventaja:** Consistente con sistema de badges existente
**✅ Patrón: Empty State**
- **Componente:** SearchModal.tsx, Farmacos.tsx
- **Aplicación:** Estados vacíos en búsqueda de guías
- **Ventaja:** Consistente con UX actual
---
## 2️⃣ ARQUITECTURA PARALELA PROPUESTA
### 2.1 Estructura de Carpetas Nueva
```
src/
├── layouts/ # NUEVO: Layouts alternativos
│ ├── DefaultLayout.tsx # Layout actual (wrapper)
│ └── GuideLayout.tsx # Layout específico para guías
│
├── views/ # NUEVO: Vistas por modo
│ ├── formativo/ # Vistas de modo formativo
│ │ ├── GuideIndex.tsx # Índice de guías disponibles
│ │ ├── GuideViewer.tsx # Visualizador de guía completa
│ │ └── GuideSectionViewer.tsx # Visualizador de sección individual
│ │
│ └── operativo/ # Vistas de modo operativo (actual)
│ └── [mantener estructura actual]
│
├── components/
│ ├── guide/ # NUEVO: Componentes específicos de guías
│ │ ├── GuideCard.tsx # Card de guía en lista
│ │ ├── GuideSectionCard.tsx # Card de sección expandible
│ │ ├── GuideNavigation.tsx # Navegación entre secciones
│ │ ├── GuideHeader.tsx # Header específico de guía
│ │ ├── GuideMarkdownViewer.tsx # Viewer de Markdown para guías
│ │ └── GuideModeBadge.tsx # Badge "Modo Formación"
│ │
│ └── [mantener estructura actual]
│
├── data/
│ ├── guides-index.ts # NUEVO: Índice de guías de refuerzo
│ └── [mantener estructura actual]
│
└── [resto de estructura actual]
```
### 2.2 Componentes Nuevos Necesarios
**1. GuideLayout.tsx**
- **Propósito:** Layout específico para guías de refuerzo
- **Características:**
- Header con badge "Modo Formación"
- Sin BottomNav (o opcional)
- Más espaciado vertical
- Navegación entre secciones visible
- **Dependencias:** Header (reutilizado), Footer (reutilizado)
**2. GuideIndex.tsx**
- **Propósito:** Lista de guías de refuerzo disponibles
- **Características:**
- Cards de guías con iconos
- Búsqueda/filtrado
- Badge "Modo Formación"
- **Dependencias:** GuideCard, Badge, SearchModal (reutilizado)
**3. GuideViewer.tsx**
- **Propósito:** Visualizador de guía completa con navegación
- **Características:**
- Tabs para secciones (1-8)
- Navegación anterior/siguiente
- Breadcrumbs opcionales
- Enlace a protocolo operativo
- **Dependencias:** GuideMarkdownViewer, GuideNavigation, Tabs (reutilizado)
**4. GuideSectionViewer.tsx**
- **Propósito:** Visualizador de sección individual
- **Características:**
- Carga sección específica
- Navegación anterior/siguiente
- Enlace a protocolo operativo
- **Dependencias:** GuideMarkdownViewer, GuideNavigation
**5. GuideMarkdownViewer.tsx**
- **Propósito:** Viewer de Markdown específico para guías
- **Características:**
- Extiende MarkdownViewer
- Carga desde `docs/consolidado/`
- Estilos específicos (más espaciado, tipografía)
- Badges de "Modo Formación"
- **Dependencias:** MarkdownViewer (envuelto)
**6. GuideCard.tsx**
- **Propósito:** Card de guía en lista
- **Características:**
- Icono, título, descripción
- Badge "Modo Formación"
- Enlace a guía
- **Dependencias:** Badge, Card (reutilizado)
**7. GuideNavigation.tsx**
- **Propósito:** Navegación entre secciones
- **Características:**
- Botones anterior/siguiente
- Indicador de sección actual
- Enlace a protocolo operativo
- **Dependencias:** Button, ChevronLeft, ChevronRight (reutilizado)
**8. GuideModeBadge.tsx**
- **Propósito:** Badge distintivo "Modo Formación"
- **Características:**
- Color distintivo (azul/verde, diferente de emergencia)
- Texto claro
- Visible en Header y páginas
- **Dependencias:** Badge (reutilizado)
### 2.3 Componentes Actuales Reutilizados
**✅ Componentes UI Base:**
- Button, Card, Badge, Tabs, Separator
- Todos los componentes de `src/components/ui/`
**✅ Componentes de Layout:**
- Header (con badge opcional)
- Footer (reutilizado)
- SearchModal (reutilizado, extender después)
**✅ Componentes Compartidos:**
- Badge (reutilizado, nueva variante "formativo")
- BackButton (reutilizado)
**✅ Hooks:**
- useFavorites (para favoritar guías)
- useSearchHistory (para historial de guías)
### 2.4 Conexión con Archivos Markdown
**Estructura de Archivos:**
```
docs/consolidado/
├── SECCION_01_ABCDE_OPERATIVO.md
├── SECCION_02_ABCDE_OPERATIVO.md
├── ...
├── SECCION_08_ABCDE_OPERATIVO.md
├── SECCION_01_RCP_ADULTO_SVB.md
├── ...
```
**Estrategia de Carga:**
1. **Índice de Guías:** `src/data/guides-index.ts`
- Define guías disponibles
- Mapea guía → archivos de secciones
- Metadatos (título, descripción, icono)
2. **Carga Dinámica:**
- GuideMarkdownViewer carga desde `docs/consolidado/`
- Ruta: `/docs/consolidado/SECCION_XX_NOMBRE.md`
- Fetch en runtime (igual que MarkdownViewer actual)
3. **Navegación:**
- GuideNavigation maneja navegación entre secciones
- URLs: `/guia-refuerzo/:guia/seccion/:numero`
### 2.5 Rutas Nuevas Propuestas
**Rutas para Guías de Refuerzo:**
```typescript
/guia-refuerzo → GuideIndex (lista de guías)
/guia-refuerzo/:guia → GuideViewer (guía completa con tabs)
/guia-refuerzo/:guia/seccion/:numero → GuideSectionViewer (sección individual)
```
**Ejemplos:**
- `/guia-refuerzo/abcde-operativo` → Guía ABCDE completa
- `/guia-refuerzo/abcde-operativo/seccion/1` → Sección 1 de ABCDE
- `/guia-refuerzo/rcp-adulto-svb` → Guía RCP Adulto SVB completa
**Integración en App.tsx:**
```typescript
// Agregar después de rutas existentes, sin modificar las actuales
{guide.descripcion}
Contenido formativo para comprensión profunda de protocolos