# PLAN TÉCNICO Y ESTRATÉGICO ## Camino A: Offline-First → Camino B: Plataforma Viva **Proyecto:** EMERGES TES - Protocolo Rápido **Versión del Plan:** 1.0 **Fecha:** 2024 **Arquitecto:** Senior Software Architect --- ## TABLA DE CONTENIDOS 1. [Definición de Caminos](#1-definición-de-caminos) 2. [Arquitectura Base](#2-arquitectura-base) 3. [Fases del Camino A](#3-fases-del-camino-a) 4. [Decisiones Arquitectónicas Clave](#4-decisiones-arquitectónicas-clave) 5. [Protocolos Transtelefónicos Específicos – Camino A](#5-protocolos-transtelefónicos-específicos--camino-a) 6. [Requisitos para Camino B](#6-requisitos-para-camino-b) 7. [Plan de Acción Priorizado](#7-plan-de-acción-priorizado) 8. [Checklist Final](#8-checklist-final) --- ## 1. DEFINICIÓN DE CAMINOS ### 1.1 CAMINO A: Aplicación Offline-First #### Qué ES el Camino A **Definición:** Aplicación web PWA (Progressive Web App) completamente autónoma, diseñada para funcionar **100% offline** desde la primera carga. Todos los datos médicos están embebidos en el bundle de la aplicación, permitiendo consulta instantánea sin dependencia de conectividad. **Características principales:** - ✅ **Funciona sin internet** después de la primera instalación - ✅ **Datos embebidos** en el bundle (JSON estático) - ✅ **Sin backend** ni llamadas a API - ✅ **Persistencia local** (localStorage/IndexedDB) para preferencias de usuario - ✅ **Service Worker** para cache agresivo y actualizaciones controladas - ✅ **PWA instalable** en dispositivos móviles - ✅ **Rápida y fiable** - sin latencia de red - ✅ **Responsable médicamente** - contenido validado y versionado #### Qué NO incluye el Camino A **Excluido explícitamente:** - ❌ **Backend/API** - No hay servidor, no hay llamadas HTTP - ❌ **Autenticación de usuarios** - Aplicación pública - ❌ **Sincronización entre dispositivos** - Cada dispositivo es independiente - ❌ **Actualizaciones en tiempo real** - Contenido estático por versión - ❌ **Chat con IA** - No hay procesamiento en servidor - ❌ **Búsqueda semántica con embeddings** - Solo búsqueda local por texto - ❌ **Analytics remotos** - Solo métricas locales opcionales - ❌ **Contenido dinámico** - Todo el contenido viene en el bundle **Razón de exclusión:** El Camino A prioriza **fiabilidad absoluta** y **funcionamiento garantizado** en situaciones críticas (ambulancias sin cobertura, zonas rurales). Cualquier dependencia externa es un punto de fallo inaceptable. --- ### 1.2 CAMINO B: Plataforma Viva con Backend #### Qué implica el Camino B **Definición:** Evolución del Camino A hacia una plataforma completa con backend, manteniendo la capacidad offline como base, pero añadiendo capacidades de sincronización, actualizaciones dinámicas y funcionalidades avanzadas. **Características adicionales:** - ✅ **Backend API** para gestión de contenido - ✅ **Sincronización** de favoritos/historial entre dispositivos - ✅ **Actualizaciones incrementales** de contenido médico - ✅ **Autenticación de usuarios** (opcional, para sincronización) - ✅ **Chat con IA** para consultas avanzadas - ✅ **Búsqueda semántica** con embeddings - ✅ **Analytics** de uso (anónimo, con consentimiento) - ✅ **Versionado de contenido** con historial de cambios - ✅ **Validación médica** centralizada y auditada **Principio fundamental:** El Camino B **extiende** el Camino A, no lo reemplaza. La aplicación debe seguir funcionando **completamente offline** incluso con backend disponible. --- ### 1.3 Qué decisiones actuales facilitan el Camino B **Decisiones arquitectónicas que ya preparan la evolución:** 1. **Separación de datos y lógica** - Datos en archivos separados (`src/data/`) - Interfaces TypeScript bien definidas - ✅ **Facilita:** Migración a API sin cambiar componentes 2. **Identificadores estables** - IDs semánticos (`'rcp-adulto-svb'`, `'adrenalina'`) - ✅ **Facilita:** Sincronización y versionado futuro 3. **Componentes desacoplados** - Componentes no conocen el origen de datos - ✅ **Facilita:** Intercambiar fuente de datos (local → API) 4. **TypeScript estricto** - Interfaces bien definidas - ✅ **Facilita:** Contratos API consistentes 5. **React Query ya instalado** - Aunque no se usa, está listo - ✅ **Facilita:** Integración de API sin cambios arquitectónicos --- ## 2. ARQUITECTURA BASE ### 2.1 Principios Arquitectónicos #### 2.1.1 Offline-First **Principio:** La aplicación debe funcionar completamente sin conexión. Cualquier funcionalidad online es **opcional y mejorativa**, nunca requerida. **Implementación:** - Service Worker cachea todos los assets y datos - IndexedDB para almacenamiento local robusto - Estrategia "Cache First" para todos los recursos #### 2.1.2 Separación de Concerns **Principio:** Separar claramente: - **Datos** (qué información se muestra) - **Lógica de negocio** (cómo se procesa) - **Presentación** (cómo se muestra) **Implementación:** ``` src/ ├── data/ # Fuente de datos (ahora: archivos TS, futuro: API client) ├── services/ # Lógica de negocio (búsqueda, filtrado, cálculos) ├── stores/ # Estado global (favoritos, historial) └── components/ # Presentación pura ``` #### 2.1.3 Abstracción de Acceso a Datos **Principio:** Los componentes **nunca** acceden directamente a arrays de datos. Siempre a través de una capa de abstracción. **Implementación:** ```typescript // ❌ MAL (actual) import { procedures } from '@/data/procedures'; const filtered = procedures.filter(...); // ✅ BIEN (Camino A preparado para B) import { dataService } from '@/services/data'; const filtered = await dataService.getProcedures({ category: 'rcp' }); ``` **Beneficio:** En Camino B, `dataService` puede cambiar de local a API sin tocar componentes. #### 2.1.4 Versionado de Contenido **Principio:** Todo contenido médico debe tener versión y fecha de validación. **Implementación:** ```typescript interface ContentMetadata { version: string; // "1.2.3" lastValidated: string; // ISO date validatedBy?: string; // ID del profesional médico source?: string; // Guía oficial de referencia } ``` --- ### 2.2 Estructura de Carpetas Propuesta ``` src/ ├── data/ # Datos estáticos (Camino A) │ ├── procedures.json # Migrado desde .ts │ ├── drugs.json │ ├── pathologies.json │ └── metadata.json # Versión, fecha validación │ ├── services/ # Capa de servicios (NUEVO) │ ├── data/ # Acceso a datos (abstracción) │ │ ├── localDataService.ts # Camino A: lee JSON │ │ ├── apiDataService.ts # Camino B: llama API │ │ └── dataService.ts # Factory/Adapter │ ├── search/ # Lógica de búsqueda │ ├── storage/ # Persistencia local │ └── sync/ # Sincronización (Camino B) │ ├── stores/ # Estado global (NUEVO) │ ├── favorites.ts # Favoritos (localStorage) │ ├── history.ts # Historial de búsquedas │ └── settings.ts # Configuración usuario │ ├── hooks/ # Custom hooks │ ├── useData.ts # Hook para acceder a datos (abstracción) │ └── useStorage.ts # Hook para persistencia │ ├── components/ # Componentes UI (sin cambios) ├── pages/ # Páginas (sin cambios) └── lib/ # Utilidades ``` --- ## 3. FASES DEL CAMINO A ### FASE 1: Arquitectura y Abstracción de Datos #### Objetivo Crear la capa de abstracción que permita cambiar de datos locales a API sin reescribir componentes. #### Qué se implementa AHORA 1. **Servicio de Datos Abstracto** ```typescript // src/services/data/dataService.ts interface DataService { getProcedures(filters?: ProcedureFilters): Promise; getProcedureById(id: string): Promise; getDrugs(filters?: DrugFilters): Promise; getDrugById(id: string): Promise; // ... otros métodos } ``` 2. **Implementación Local (Camino A)** ```typescript // src/services/data/localDataService.ts class LocalDataService implements DataService { // Lee de JSON estático // Retorna Promise para mantener misma interfaz que API } ``` 3. **Factory Pattern** ```typescript // src/services/data/dataService.ts export const dataService: DataService = new LocalDataService(); // En Camino B: cambiar a new ApiDataService() ``` 4. **Migración de Datos a JSON** - Convertir `procedures.ts` → `procedures.json` - Convertir `drugs.ts` → `drugs.json` - Mantener tipos TypeScript en archivos separados #### Qué se deja PREPARADO para el futuro - ✅ Interfaz `DataService` lista para implementación con API - ✅ Todos los componentes usan `dataService`, no arrays directos - ✅ Estructura de datos compatible con formato API futuro #### Qué NO se implementa todavía - ❌ Llamadas HTTP reales - ❌ Manejo de errores de red - ❌ Cache de respuestas API - ❌ Sincronización **Esfuerzo estimado:** 3-5 días **Prioridad:** 🔴 ALTA (base para todo lo demás) --- ### FASE 2: Gestión de Datos y Versionado #### Objetivo Estructurar datos médicos con versionado, validación y metadata para responsabilidad médica. #### Qué se implementa AHORA 1. **Metadata de Contenido** ```typescript // src/data/metadata.json { "version": "1.0.0", "lastValidated": "2024-01-15", "validatedBy": "Dr. [Nombre]", "source": "Guías ERC 2021, SEMES 2023", "procedures": { "count": 5, "lastUpdated": "2024-01-10" }, "drugs": { "count": 5, "lastUpdated": "2024-01-10" } } ``` 2. **Versionado por Entidad** ```typescript interface Procedure { id: string; version: string; // Versión de este protocolo específico lastValidated: string; // Fecha última validación // ... resto de campos } ``` 3. **Sistema de Identificadores Estables** - IDs semánticos e inmutables - No usar IDs numéricos auto-incrementales - Formato: `{categoria}-{nombre}-{variante}` 4. **Validación de Datos en Build** - Script que valida estructura de JSON - Verifica que todos los IDs sean únicos - Valida tipos TypeScript #### Qué se deja PREPARADO para el futuro - ✅ Estructura de versionado compatible con sistema de actualizaciones - ✅ Metadata lista para sincronización - ✅ IDs estables para merge de cambios #### Qué NO se implementa todavía - ❌ Sistema de actualizaciones incrementales - ❌ Comparación de versiones - ❌ Merge de cambios **Esfuerzo estimado:** 2-3 días **Prioridad:** 🔴 ALTA (responsabilidad médica) --- ### FASE 3: Persistencia Local y Estado de Usuario #### Objetivo Implementar almacenamiento local robusto para favoritos, historial y preferencias, preparado para sincronización futura. #### Qué se implementa AHORA 1. **Capa de Abstracción de Storage** ```typescript // src/services/storage/storageService.ts interface StorageService { saveFavorites(favorites: string[]): Promise; getFavorites(): Promise; saveHistory(history: HistoryEntry[]): Promise; getHistory(): Promise; } ``` 2. **Implementación con IndexedDB** - Usar librería `idb` (IndexedDB wrapper) - Más robusto que localStorage - Permite estructuras complejas - Preparado para sincronización 3. **Store de Estado Global** ```typescript // src/stores/favorites.ts // Zustand o Context API simple // Gestiona estado reactivo de favoritos ``` 4. **Funcionalidad Completa de Favoritos** - Persistencia real (no solo UI) - Página de favoritos - Sincronización entre tabs (BroadcastChannel) 5. **Historial de Búsquedas Real** - Almacena búsquedas reales del usuario - Limpieza automática (últimos 50) - Timestamps para ordenamiento #### Qué se deja PREPARADO para el futuro - ✅ Estructura de datos compatible con formato de sincronización - ✅ Timestamps y metadata para merge - ✅ IDs de usuario (placeholder) para multi-dispositivo #### Qué NO se implementa todavía - ❌ Sincronización con servidor - ❌ Autenticación de usuarios - ❌ Resolución de conflictos **Esfuerzo estimado:** 4-5 días **Prioridad:** 🟡 MEDIA (mejora UX significativa) --- ### FASE 4: Offline y PWA #### Objetivo Garantizar funcionamiento 100% offline y hacer la app instalable como PWA. #### Qué se implementa AHORA 1. **Service Worker Completo** ```typescript // public/sw.js // Estrategia: Cache First para todo // Cache de assets, JSON de datos, HTML ``` 2. **Manifest PWA** ```json // public/manifest.json { "name": "EMERGES TES", "short_name": "EMERGES", "start_url": "/", "display": "standalone", "theme_color": "#1a1f2e", "background_color": "#1a1f2e", "icons": [...] } ``` 3. **Cache Strategy** - **Assets estáticos:** Cache permanente - **Datos JSON:** Cache con versionado - **HTML:** Network First, fallback a cache - **Actualizaciones:** Check en background, notificar usuario 4. **Offline Detection** - Detectar estado de conexión - Mostrar indicador visual - Mensaje informativo (no bloqueante) 5. **Actualización de Contenido** - Version check en startup - Descargar nuevo bundle si hay actualización - Actualizar cache automáticamente #### Qué se deja PREPARADO para el futuro - ✅ Service Worker preparado para cache de respuestas API - ✅ Estrategia de actualización compatible con actualizaciones incrementales - ✅ Sistema de versionado para detectar cambios #### Qué NO se implementa todavía - ❌ Actualizaciones incrementales de contenido - ❌ Sincronización de cache con servidor - ❌ Push notifications **Esfuerzo estimado:** 5-7 días **Prioridad:** 🔴 ALTA (core del Camino A) --- ### FASE 5: Seguridad y Estabilidad #### Objetivo Garantizar que la aplicación no falle en situaciones críticas y maneje errores gracefully. #### Qué se implementa AHORA 1. **Error Boundaries** ```typescript // src/components/ErrorBoundary.tsx // Captura errores de React // Muestra pantalla de error amigable // Permite recuperación ``` 2. **Manejo de Errores en Servicios** ```typescript // Try/catch en todas las operaciones críticas // Logging local (no remoto) // Fallbacks cuando sea posible ``` 3. **Validación de Datos en Runtime** - Validar estructura de JSON al cargar - Validar tipos con Zod (ya instalado) - Fallback a versión anterior si datos corruptos 4. **Testing Básico** - Tests unitarios de servicios críticos - Tests de componentes de calculadoras - Tests de búsqueda y filtrado 5. **Performance Monitoring** - Métricas locales de rendimiento - Detección de memory leaks - Optimización de bundle size #### Qué se deja PREPARADO para el futuro - ✅ Estructura de logging compatible con envío remoto (opcional) - ✅ Error tracking preparado para integración con servicio externo #### Qué NO se implementa todavía - ❌ Analytics remotos - ❌ Error tracking en servidor - ❌ Performance monitoring remoto **Esfuerzo estimado:** 4-5 días **Prioridad:** 🔴 ALTA (crítico para producción) --- ### FASE 6: Aspectos Legales y Responsabilidad Médica #### Objetivo Proteger legalmente el proyecto y asegurar que los usuarios entienden las limitaciones. #### Qué se implementa AHORA 1. **Disclaimer Médico Prominente** ```typescript // src/pages/Legal.tsx // Página completa de términos y condiciones // Disclaimer de responsabilidad médica // Aviso de que es herramienta de apoyo, no reemplaza criterio profesional ``` 2. **Aviso de Versión y Validación** - Mostrar versión de contenido en UI - Mostrar fecha de última validación - Link a fuentes oficiales 3. **Términos de Uso** - Uso responsable - Limitación de responsabilidad - Propiedad intelectual 4. **Consentimiento Inicial (si necesario)** - Modal de aceptación en primer uso - Almacenar consentimiento localmente #### Qué se deja PREPARADO para el futuro - ✅ Estructura legal compatible con términos de servicio online - ✅ Sistema de consentimiento preparado para GDPR (si aplica) #### Qué NO se implementa todavía - ❌ Sistema de usuarios y aceptación de términos por usuario - ❌ Tracking de consentimientos **Esfuerzo estimado:** 2-3 días (incluye revisión legal) **Prioridad:** 🔴 CRÍTICA (protección legal) --- ### FASE 7: Contenido Médico Expandido #### Objetivo Expandir la base de datos de protocolos y fármacos a un nivel útil para producción. #### Qué se implementa AHORA 1. **Expansión de Protocolos** - Mínimo 20-25 protocolos de soporte vital - Cobertura de situaciones comunes de emergencia - Protocolos pediátricos completos 2. **Expansión de Fármacos** - Mínimo 30-40 fármacos de emergencia - Cobertura de categorías principales - Dosis pediátricas completas 3. **Expansión de Patologías** - Mínimo 5-7 patologías por categoría - Total: 25-35 patologías 4. **Validación Médica** - Revisión por profesional médico - Referencias a guías oficiales - Documentación de fuentes #### Qué se deja PREPARADO para el futuro - ✅ Estructura de datos compatible con importación masiva - ✅ Sistema de versionado para actualizaciones de contenido #### Qué NO se implementa todavía - ❌ CMS para gestión de contenido - ❌ Sistema de contribuciones - ❌ Workflow de validación automatizado **Esfuerzo estimado:** 2-4 semanas (depende de fuente de datos) **Prioridad:** 🔴 CRÍTICA (hace la app útil) --- ## 4. DECISIONES ARQUITECTÓNICAS CLAVE ### 4.1 Abstracción de Acceso a Datos **Decisión:** Crear capa de servicio que abstrae el origen de datos. **Implementación:** ```typescript // Interfaz común interface DataService { getProcedures(filters?: Filters): Promise; } // Camino A: Implementación local class LocalDataService implements DataService { async getProcedures() { const data = await import('@/data/procedures.json'); return data.default; } } // Camino B: Implementación API (futuro) class ApiDataService implements DataService { async getProcedures(filters) { const response = await fetch('/api/procedures', { body: filters }); return response.json(); } } // Factory export const dataService: DataService = import.meta.env.VITE_USE_API === 'true' ? new ApiDataService() : new LocalDataService(); ``` **Beneficio:** Cambio de local a API sin tocar componentes. --- ### 4.2 Separación de Contenido y Lógica **Decisión:** Separar completamente datos (JSON) de código (TypeScript). **Estructura:** ``` src/data/ ├── procedures.json # Datos puros ├── drugs.json ├── types.ts # Interfaces TypeScript └── metadata.json # Versionado y validación ``` **Beneficio:** - Contenido editable sin tocar código - Preparado para CMS futuro - Validación independiente --- ### 4.3 Versionado de Contenido Médico **Decisión:** Todo contenido médico tiene versión y metadata de validación. **Estructura:** ```typescript interface ContentItem { id: string; version: string; // "1.2.3" lastValidated: string; // ISO date validatedBy?: string; // ID profesional source: string; // Guía de referencia createdAt: string; updatedAt: string; } ``` **Beneficio:** - Trazabilidad de cambios - Responsabilidad médica - Preparado para actualizaciones incrementales --- ### 4.4 Identificadores Estables **Decisión:** Usar IDs semánticos e inmutables, nunca numéricos auto-incrementales. **Formato:** - Protocolos: `{categoria}-{nombre}-{variante}` - Ejemplo: `rcp-adulto-svb`, `shock-hemorragico` - Fármacos: `{nombre-generico}` - Ejemplo: `adrenalina`, `midazolam` **Beneficio:** - IDs no cambian entre versiones - Compatible con sincronización - URLs estables para compartir --- ### 4.5 Persistencia Local Preparada para Sincronización **Decisión:** Estructurar datos locales con metadata para sincronización futura. **Estructura:** ```typescript interface Favorite { itemId: string; // ID del protocolo/fármaco itemType: 'procedure' | 'drug'; addedAt: string; // Timestamp syncedAt?: string; // Timestamp última sincronización (Camino B) deviceId?: string; // ID dispositivo (Camino B) } ``` **Beneficio:** - Estructura compatible con sync - Timestamps para resolución de conflictos - Preparado para multi-dispositivo --- ## 5. PROTOCOLOS TRANSTELEFÓNICOS ESPECÍFICOS – CAMINO A ### 5.1 Introducción y Alcance Esta sección documenta protocolos específicos para **soporte transtelefónico** en situaciones de emergencia. Estos protocolos están diseñados para ser consultados rápidamente durante una llamada de emergencia, proporcionando guías estructuradas para el operador que asiste al ciudadano. **Características del Camino A:** - ✅ Protocolos estáticos embebidos en la aplicación - ✅ Consulta rápida sin dependencia de conectividad - ✅ Estructura clara y secuencial - ✅ Preparado para evolución a flujos interactivos (Camino B) **Nota Importante:** Estos protocolos son **procedimentales** y están pensados para **uso profesional** por operadores de emergencias sanitarias. **No sustituyen la formación reglada** ni el criterio clínico del profesional. El contenido debe ser validado por profesionales médicos antes de su implementación. --- ### 5.2 Sospecha de Parada Cardiorrespiratoria (PCR) #### 5.2.1 Protocolo de Identificación **Objetivo:** Identificar rápidamente si se trata de una parada cardiorrespiratoria real. **Pasos de Identificación:** 1. **Verificar consciencia** - Preguntar: "¿Se encuentra bien?" o "¿Me oye?" - Si no responde: considerar inconsciencia 2. **Verificar respiración** - Instruir al testigo: "Acérquese y compruebe si respira normalmente" - Tiempo máximo de verificación: 10 segundos - Si no respira o respiración agónica: considerar PCR 3. **Confirmar situación** - Si inconsciente y no respira normalmente: **ACTIVAR PROTOCOLO RCP** **Criterios de Activación:** - ✅ Inconsciencia confirmada - ✅ Ausencia de respiración normal o respiración agónica - ✅ Testigo presente y colaborador --- #### 5.2.2 RCP Transtelefónica - Adultos **Objetivo:** Guiar al testigo para realizar RCP básico mientras llegan los servicios de emergencia. **Secuencia de Instrucciones:** **FASE 1: Preparación (30 segundos)** 1. Confirmar que la víctima está en el suelo (superficie firme) 2. Pedir al testigo que se coloque de rodillas junto a la víctima 3. Instruir: "Coloque el talón de una mano en el centro del pecho, entre los pezones" 4. Instruir: "Coloque la otra mano encima, entrelazando los dedos" 5. Instruir: "Mantenga los brazos rectos, con los hombros sobre las manos" **FASE 2: Compresiones Torácicas** 6. Instruir: "Empiece a comprimir fuerte y rápido" 7. Indicar ritmo: "Aproximadamente 2 compresiones por segundo" 8. Indicar profundidad: "Comprima unos 5-6 centímetros" 9. Instruir: "Permita que el pecho se recupere completamente entre compresiones" 10. Continuar: "No pare hasta que le diga" **FASE 3: Ventilaciones (si testigo entrenado)** 11. Después de 30 compresiones, instruir: "Incline la cabeza hacia atrás" 12. Instruir: "Cierre la nariz con los dedos" 13. Instruir: "Haga un sello con su boca sobre la boca de la víctima" 14. Instruir: "Sople durante 1 segundo, observando que el pecho se eleva" 15. Repetir: "Dé otra respiración" 16. Continuar: "Vuelva a las compresiones: 30 compresiones, luego 2 respiraciones" **FASE 4: Continuidad** 17. Instruir: "Continúe con ciclos de 30 compresiones y 2 respiraciones" 18. Indicar: "No pare hasta que lleguen los servicios de emergencia o la víctima muestre signos de vida" 19. Reforzar: "Las compresiones son lo más importante. Si duda, priorice las compresiones" **Puntos Críticos:** - ⚠️ **Profundidad:** 5-6 cm (no menos, no más) - ⚠️ **Frecuencia:** 100-120 compresiones/minuto - ⚠️ **Descompresión completa:** Permitir que el pecho vuelva a su posición - ⚠️ **Minimizar interrupciones:** Máximo 10 segundos entre ciclos - ⚠️ **Cambio de reanimador:** Si hay más de una persona, cambiar cada 2 minutos **Indicadores de Eficacia:** - Testigo reporta que "siente que algo pasa" - Posible movimiento o sonido de la víctima - Llegada de servicios de emergencia **Cuándo Detener:** - Llegada de servicios de emergencia - Signos claros de vida (respiración, movimiento) - Agotamiento extremo del reanimador (buscar relevo) --- #### 5.2.3 RCP Transtelefónica - Niños (1 año - pubertad) **Objetivo:** Adaptar RCP para población pediátrica con técnicas específicas. **Diferencias Clave con Adultos:** - **Compresiones:** Una mano o dos manos según tamaño del niño - **Profundidad:** 1/3 del diámetro anteroposterior del tórax (aproximadamente 5 cm) - **Frecuencia:** 100-120 compresiones/minuto (igual que adultos) - **Ratio:** 30:2 (igual que adultos) o 15:2 si hay dos reanimadores **Secuencia de Instrucciones:** **FASE 1: Preparación** 1. Confirmar que el niño está en superficie firme 2. Instruir: "Coloque el talón de una mano (o dos si el niño es grande) en el centro del pecho" 3. Instruir: "Mantenga los brazos rectos" **FASE 2: Compresiones** 4. Instruir: "Comprima fuerte y rápido, aproximadamente 1/3 del grosor del pecho" 5. Indicar: "Unas 2 compresiones por segundo" 6. Continuar: "30 compresiones" **FASE 3: Ventilaciones** 7. Instruir: "Incline la cabeza hacia atrás (menos que en adulto)" 8. Instruir: "Cierre la nariz y sople suavemente en la boca" 9. Instruir: "Solo lo suficiente para ver que el pecho se eleva" 10. Repetir: "Otra respiración" **FASE 4: Continuidad** 11. Continuar ciclos 30:2 12. Reforzar: "En niños, la causa más frecuente es respiratoria, las ventilaciones son muy importantes" **Puntos Críticos Específicos:** - ⚠️ **Profundidad adaptada:** 1/3 del tórax (no usar profundidad de adulto) - ⚠️ **Ventilaciones suaves:** No forzar, solo ver elevación del pecho - ⚠️ **Causa más frecuente:** Respiratoria, no cardíaca (diferente a adultos) --- #### 5.2.4 RCP Transtelefónica - Lactantes (<1 año) **Objetivo:** RCP específica para lactantes con técnicas adaptadas. **Diferencias Clave:** - **Compresiones:** Dos dedos (índice y medio) o dos pulgares con manos rodeando el tórax - **Profundidad:** 1/3 del diámetro anteroposterior (aproximadamente 4 cm) - **Frecuencia:** 100-120 compresiones/minuto - **Ratio:** 30:2 o 15:2 si hay dos reanimadores **Secuencia de Instrucciones:** **FASE 1: Preparación** 1. Confirmar que el lactante está en superficie firme 2. Instruir: "Coloque al bebé boca arriba" 3. Instruir: "Localice el centro del pecho, justo debajo de la línea de los pezones" **FASE 2: Compresiones** 4. Instruir: "Use dos dedos (índice y medio) o dos pulgares" 5. Instruir: "Comprima aproximadamente 1/3 del grosor del pecho" 6. Indicar: "Unas 2 compresiones por segundo" 7. Continuar: "30 compresiones" **FASE 3: Ventilaciones** 8. Instruir: "Cubra la boca y la nariz del bebé con su boca" 9. Instruir: "Sople suavemente, solo lo suficiente para ver que el pecho se eleva" 10. Advertir: "No sople fuerte, los pulmones del bebé son pequeños" 11. Repetir: "Otra respiración suave" **FASE 4: Continuidad** 12. Continuar ciclos 30:2 13. Reforzar: "En bebés, la causa es casi siempre respiratoria. Las ventilaciones son críticas" **Puntos Críticos Específicos:** - ⚠️ **Profundidad muy controlada:** Solo 1/3 del tórax (aproximadamente 4 cm) - ⚠️ **Ventilaciones muy suaves:** Solo ver elevación mínima del pecho - ⚠️ **Técnica de dos pulgares:** Preferible si hay dos personas (mejor calidad) - ⚠️ **Causa casi siempre respiratoria:** Priorizar ventilaciones --- #### 5.2.5 Uso de DESA Guiado por Teléfono **Objetivo:** Guiar al testigo en el uso de un Desfibrilador Externo Semiautomático (DESA) si está disponible. **Prerequisitos:** - DESA disponible en el lugar - Testigo colaborador y capaz de seguir instrucciones - Víctima en parada cardiorrespiratoria confirmada **Secuencia de Instrucciones:** **FASE 1: Obtención del DESA** 1. Preguntar: "¿Hay un desfibrilador cerca? Busque señales o pregunte a alguien" 2. Si hay DESA: "Tráigalo aquí. No pare las compresiones mientras tanto" 3. Si no hay DESA: "Continúe con las compresiones. Le avisaré si encuentra uno" **FASE 2: Preparación del DESA** 4. Instruir: "Abra el DESA. Siga las instrucciones que oiga" 5. Instruir: "Conecte los parches al DESA si no están conectados" 6. Instruir: "Retire la ropa del pecho de la víctima. Si está mojado, séquelo" **FASE 3: Colocación de Parches** 7. Instruir: "Coloque un parche en el lado derecho, debajo de la clavícula" 8. Instruir: "Coloque el otro parche en el lado izquierdo, debajo de la axila" 9. Advertir: "Asegúrese de que los parches estén bien pegados a la piel" 10. Instruir: "Conecte los cables a los parches si no están conectados" **FASE 4: Análisis y Descarga** 11. Instruir: "El DESA analizará el ritmo. NO toque a la víctima durante el análisis" 12. Instruir: "Siga las instrucciones del DESA" 13. Si el DESA indica descarga: - Instruir: "Asegúrese de que nadie toque a la víctima" - Instruir: "Presione el botón de descarga cuando el DESA lo indique" 14. Después de la descarga: - Instruir: "Inmediatamente, reinicie las compresiones" - Instruir: "Continúe 30 compresiones y 2 respiraciones" - Instruir: "El DESA le indicará cuándo parar para otro análisis" **FASE 5: Continuidad** 15. Seguir instrucciones del DESA 16. Continuar RCP entre análisis 17. No quitar los parches hasta que lleguen los servicios de emergencia **Puntos Críticos:** - ⚠️ **No tocar durante análisis:** Puede interferir con el análisis - ⚠️ **Parches bien colocados:** Piel seca, sin joyas, sin medicamentos transdérmicos - ⚠️ **Reiniciar RCP inmediatamente:** Después de cada descarga - ⚠️ **Seguir instrucciones del DESA:** El dispositivo guía el proceso **Contraindicaciones:** - Víctima con marcapasos visible (evitar colocar parche directamente sobre él) - Víctima mojada (secar antes) - Ambiente explosivo (extremar precauciones) --- #### 5.2.6 Preparación para Camino B **Evoluciones Futuras Posibles:** 1. **Árbol de Decisión Interactivo** - Flujo guiado paso a paso con confirmaciones - Adaptación dinámica según respuestas del testigo - Validación de comprensión en cada paso 2. **Simulación y Práctica** - Modo de práctica sin emergencia real - Feedback sobre técnica de compresiones (si hay sensores) - Métricas de calidad de RCP 3. **IA de Apoyo (No Diagnóstico)** - Análisis de audio para detectar ritmo de compresiones - Sugerencias de ajuste en tiempo real - Validación de comprensión del testigo 4. **Integración con Servicios de Emergencia** - Notificación automática a servicios de emergencia - Compartir ubicación GPS - Transmisión de estado en tiempo real 5. **Grabación y Análisis Post-Emergencia** - Registro de la secuencia seguida (para formación) - Análisis de tiempos y calidad - Mejora continua de protocolos --- ### 5.3 Obstrucción de Vía Aérea por Cuerpo Extraño (OVACE) #### 5.3.1 OVACE en Adultos **Objetivo:** Guiar al testigo para resolver una obstrucción de vía aérea en adulto. **FASE 1: Identificación** 1. Preguntar: "¿Puede toser, hablar o respirar?" 2. Si puede toser: "Anímele a toser fuerte. Si puede toser, no haga nada más" 3. Si NO puede toser, hablar ni respirar: **OBSTRUCCIÓN GRAVE - ACTIVAR PROTOCOLO** **FASE 2: Maniobras de Desobstrucción (Consciente)** 4. Instruir: "Colóquese detrás de la persona" 5. Instruir: "Ponga sus brazos alrededor de su cintura" 6. Instruir: "Haga un puño con una mano, colóquelo justo encima del ombligo" 7. Instruir: "Agárrelo con la otra mano" 8. Instruir: "Empuje fuerte hacia adentro y hacia arriba, como si quisiera levantarla" 9. Repetir: "Hágalo 5 veces, fuerte y rápido" 10. Evaluar: "¿Salió el objeto o puede respirar ahora?" **FASE 3: Alternancia con Golpes** 11. Si no se resuelve: "Dé 5 golpes fuertes en la espalda, entre los omóplatos" 12. Alternar: "5 golpes en la espalda, luego 5 compresiones abdominales" 13. Continuar: "Siga alternando hasta que salga el objeto o la persona pierda el conocimiento" **FASE 4: Si Pierde el Conocimiento** 14. Instruir: "Bájela al suelo con cuidado" 15. Instruir: "Inicie RCP. Las compresiones pueden expulsar el objeto" 16. Antes de ventilar: "Revise la boca. Si ve el objeto, sáquelo con los dedos" 17. Continuar: "30 compresiones, luego intente ventilar" **Puntos Críticos:** - ⚠️ **No interferir si tose:** La tos es el mecanismo más efectivo - ⚠️ **Compresiones abdominales:** Hacia adentro y arriba, no lateral - ⚠️ **Embarazadas/obesos:** Usar compresiones torácicas en lugar de abdominales - ⚠️ **No barrido digital a ciegas:** Solo si ve el objeto --- #### 5.3.2 OVACE en Niños (1 año - pubertad) **Objetivo:** Adaptar maniobras de desobstrucción para población pediátrica. **Diferencias Clave:** - Técnica similar a adultos pero con menos fuerza - Posición arrodillada si el niño es pequeño - Compresiones más suaves pero igualmente efectivas **Secuencia de Instrucciones:** **FASE 1: Identificación** 1. Preguntar: "¿Puede toser o hablar?" 2. Si puede toser: "Anímele a toser. No haga nada más" 3. Si NO puede: **ACTIVAR PROTOCOLO** **FASE 2: Maniobras (Consciente)** 4. Instruir: "Si el niño es pequeño, arrodíllese detrás de él" 5. Instruir: "Coloque sus brazos alrededor de su cintura" 6. Instruir: "Haga un puño, colóquelo justo encima del ombligo" 7. Instruir: "Empuje hacia adentro y arriba, 5 veces" 8. Alternar: "5 golpes en la espalda, luego 5 compresiones" **FASE 3: Si Pierde el Conocimiento** 9. Instruir: "Bájelo al suelo" 10. Instruir: "Inicie RCP pediátrico" 11. Antes de ventilar: "Revise la boca, retire objeto si lo ve" **Puntos Críticos Específicos:** - ⚠️ **Fuerza adaptada:** Menor que en adulto pero suficiente - ⚠️ **Posición:** Arrodillarse si necesario para estar a la altura correcta --- #### 5.3.3 OVACE en Lactantes (<1 año) **Objetivo:** Maniobras específicas para lactantes. **Técnica Específica:** - NO usar compresiones abdominales (riesgo de lesión) - Usar golpes en espalda + compresiones torácicas **Secuencia de Instrucciones:** **FASE 1: Identificación** 1. Observar: "¿El bebé puede toser o hacer ruidos?" 2. Si puede toser: "Déjelo toser. No haga nada más" 3. Si NO puede: **ACTIVAR PROTOCOLO** **FASE 2: Maniobras (Consciente)** 4. Instruir: "Siente al bebé boca abajo sobre su antebrazo" 5. Instruir: "Sujete la cabeza y el cuello con su mano" 6. Instruir: "Mantenga la cabeza más baja que el cuerpo" 7. Instruir: "Dé 5 golpes fuertes en la espalda, entre los omóplatos" 8. Giro: "Voltee al bebé boca arriba, manteniendo la cabeza baja" 9. Instruir: "Dé 5 compresiones torácicas con dos dedos en el centro del pecho" 10. Alternar: "5 golpes en la espalda, luego 5 compresiones torácicas" **FASE 3: Si Pierde el Conocimiento** 11. Instruir: "Inicie RCP de lactante" 12. Antes de ventilar: "Revise la boca, retire objeto si lo ve" **Puntos Críticos Específicos:** - ⚠️ **NUNCA compresiones abdominales:** Solo torácicas - ⚠️ **Sujetar cabeza:** Siempre mantener cabeza y cuello sujetos - ⚠️ **Posición inclinada:** Cabeza más baja que el cuerpo --- #### 5.3.4 Preparación para Camino B **Evoluciones Futuras Posibles:** 1. **Árbol de Decisión por Edad** - Selección automática de protocolo según edad - Adaptación de instrucciones según tamaño físico - Validación de técnica específica por grupo etario 2. **Guía Visual Interactiva** - Animaciones mostrando posición correcta - Feedback sobre fuerza aplicada (si hay sensores) - Indicadores de eficacia 3. **IA de Apoyo** - Análisis de sonidos para detectar tos efectiva - Sugerencias de ajuste de técnica - Detección de resolución de obstrucción 4. **Integración con RCP** - Transición automática si pierde conocimiento - Guía unificada RCP + OVACE - Optimización de secuencia --- ### 5.4 Sospecha de Síndrome Coronario Agudo (SCA) #### 5.4.1 Protocolo de Identificación **Objetivo:** Identificar síntomas sugestivos de SCA para activar protocolo de atención precoz. **Criterios de Activación:** - Dolor torácico opresivo - Dolor irradiado (brazo, mandíbula, espalda) - Disnea asociada - Sudoración, náuseas, mareo - Factores de riesgo cardiovascular **Secuencia de Identificación:** **FASE 1: Evaluación de Síntomas** 1. Preguntar: "¿Dónde le duele exactamente?" 2. Preguntar: "¿Cómo es el dolor? ¿Opresivo, como una presión?" 3. Preguntar: "¿Le duele en otro lugar? ¿Brazo, mandíbula, espalda?" 4. Preguntar: "¿Tiene dificultad para respirar?" 5. Preguntar: "¿Está sudando o tiene náuseas?" **FASE 2: Evaluación de Factores de Riesgo** 6. Preguntar: "¿Tiene antecedentes de problemas de corazón?" 7. Preguntar: "¿Tiene diabetes, hipertensión o colesterol alto?" 8. Preguntar: "¿Fuma?" 9. Preguntar: "¿Cuántos años tiene?" **FASE 3: Decisión de Activación** 10. Si síntomas sugestivos: **ACTIVAR PROTOCOLO SCA** 11. Si dudoso pero factores de riesgo: **ACTIVAR PROTOCOLO SCA** (mejor sobre-activar) --- #### 5.4.2 Protocolo de Atención Precoz **Objetivo:** Estabilizar y preparar al paciente mientras llegan los servicios de emergencia. **Secuencia de Instrucciones:** **FASE 1: Posicionamiento y Comodidad** 1. Instruir: "Siéntese o acuéstese en una posición cómoda" 2. Instruir: "No se mueva innecesariamente" 3. Instruir: "Afloje la ropa ajustada, especialmente alrededor del cuello y cintura" **FASE 2: Medicación (si disponible y no contraindicada)** 4. Preguntar: "¿Tiene aspirina en casa?" 5. Si tiene aspirina y no es alérgico: - Instruir: "Tome una aspirina (300 mg si es posible)" - Instruir: "Mástiquela o tráguela con agua" 6. Advertir: "NO tome aspirina si es alérgico o tiene úlcera activa" **FASE 3: Monitorización** 7. Instruir: "Respire lenta y profundamente" 8. Instruir: "Manténgase tranquilo. La ayuda está en camino" 9. Preguntar periódicamente: "¿Cómo se siente? ¿El dolor ha cambiado?" **FASE 4: Preparación para Llegada de Servicios** 10. Instruir: "Cuando lleguen, dígales exactamente qué le pasa" 11. Instruir: "Mencione si tomó alguna medicación" 12. Instruir: "Tenga a mano su documentación médica si la tiene" **Puntos Críticos:** - ⚠️ **NO dar nitroglicerina:** Solo si el paciente ya la tiene prescrita y la toma habitualmente - ⚠️ **NO forzar actividad:** Reposo relativo - ⚠️ **Aspirina:** Solo si no hay contraindicaciones - ⚠️ **Tiempo es músculo:** Activar servicios de emergencia inmediatamente **Contraindicaciones para Aspirina:** - Alergia conocida a aspirina - Úlcera péptica activa - Hemorragia activa - Anticoagulantes (consultar, pero generalmente se puede dar) --- #### 5.4.3 Signos de Alarma - Cuándo Activar RCP **Objetivo:** Identificar cuando un SCA evoluciona a parada cardiorrespiratoria. **Signos de Alarma:** - Pérdida súbita de consciencia - Ausencia de respiración - Ausencia de pulso (si testigo puede comprobarlo) - Convulsiones - Cianosis (color azulado) **Acción Inmediata:** - Si aparece cualquiera de estos signos: **ACTIVAR PROTOCOLO RCP INMEDIATAMENTE** - No esperar confirmación adicional - Iniciar compresiones mientras se verifica --- #### 5.4.4 Preparación para Camino B **Evoluciones Futuras Posibles:** 1. **Árbol de Decisión Completo** - Evaluación estructurada de síntomas - Scoring de riesgo (TIMI, GRACE) - Recomendaciones personalizadas según perfil 2. **Guía de Medicación Interactiva** - Verificación de contraindicaciones - Cálculo de dosis según peso/edad - Interacciones medicamentosas 3. **IA de Apoyo** - Análisis de descripción de síntomas - Sugerencias de preguntas adicionales - Priorización de casos según gravedad 4. **Integración con ECG Remoto** - Transmisión de ECG si hay dispositivo disponible - Análisis automático de ritmo - Activación automática de código IAM si aplica 5. **Seguimiento Post-Emergencia** - Recordatorios de medicación - Guía de rehabilitación cardíaca - Prevención secundaria --- ### 5.5 Nota Global sobre Uso Profesional **Importante - Uso Responsable:** Estos protocolos transtelefónicos están diseñados para ser utilizados por **operadores de emergencias sanitarias** con formación adecuada. Son herramientas de **apoyo procedimental** que: - ✅ Proporcionan estructura en situaciones de alta presión - ✅ Reducen variabilidad en la atención - ✅ Facilitan la comunicación efectiva con testigos - ✅ Aseguran que no se olviden pasos críticos **Limitaciones:** - ❌ **No sustituyen la formación reglada** del profesional - ❌ **No reemplazan el criterio clínico** del operador - ❌ **No son algoritmos de diagnóstico** automático - ❌ **Requieren adaptación** a cada situación específica **Responsabilidad:** El operador que utiliza estos protocolos mantiene la **responsabilidad profesional** de: - Adaptar las instrucciones a la situación real - Interpretar las respuestas del testigo correctamente - Tomar decisiones clínicas cuando el protocolo no cubre la situación - Priorizar la seguridad del paciente sobre el seguimiento estricto del protocolo **Validación Médica:** Antes de implementar estos protocolos en producción, deben ser: - ✅ Revisados por profesionales médicos especializados - ✅ Validados contra guías oficiales (ERC, AHA, SEMES, etc.) - ✅ Probados en situaciones simuladas - ✅ Actualizados según evidencia científica más reciente --- ### 5.6 Integración en la Aplicación (Camino A) **Estructura de Datos Propuesta:** ```typescript interface TelephonicProtocol { id: string; // Ej: "pcr-adulto-transtelefonico" title: string; // "RCP Transtelefónica - Adultos" category: 'pcr' | 'ovace' | 'sca'; ageGroup: 'adulto' | 'pediatrico' | 'lactante' | 'todos'; phases: ProtocolPhase[]; // Secuencia de fases criticalPoints: string[]; // Puntos críticos a recordar contraindications?: string[]; // Si aplica version: string; // Versión del protocolo lastValidated: string; // Fecha validación source: string; // Guía de referencia } interface ProtocolPhase { id: string; // "fase-1-preparacion" title: string; // "FASE 1: Preparación" steps: ProtocolStep[]; // Pasos secuenciales estimatedTime?: number; // Tiempo estimado en segundos } interface ProtocolStep { id: string; // "paso-1-confirmar-suelo" instruction: string; // Texto de la instrucción type: 'question' | 'instruction' | 'confirmation' | 'warning'; requiresResponse?: boolean; // Si necesita respuesta del testigo nextStepId?: string; // Siguiente paso (para flujos interactivos futuro) } ``` **Implementación en Camino A:** - Protocolos como datos estáticos en JSON - Visualización secuencial paso a paso - Navegación manual entre fases - Búsqueda rápida por situación **Preparación para Camino B:** - Estructura de datos compatible con árboles de decisión - IDs de pasos preparados para navegación condicional - Campos para respuestas del usuario (futuro) - Metadata para flujos interactivos --- ## 6. REQUISITOS PARA CAMINO B ### 5.1 Qué partes ya estarán listas **Arquitectura:** - ✅ Capa de abstracción `DataService` - Solo cambiar implementación - ✅ Componentes desacoplados - No necesitan cambios - ✅ Estructura de datos compatible - Mismo formato JSON - ✅ Identificadores estables - Compatibles con BD - ✅ Versionado de contenido - Sistema ya implementado **Persistencia:** - ✅ Estructura de favoritos/historial - Compatible con formato API - ✅ Timestamps y metadata - Listos para sincronización - ✅ IndexedDB - Puede coexistir con sync **Infraestructura:** - ✅ Service Worker - Preparado para cache de API - ✅ Error handling - Estructura lista para errores de red - ✅ TypeScript - Contratos listos para API --- ### 5.2 Qué nuevas piezas habría que añadir **Backend:** - ❌ API REST (FastAPI/Express) - ❌ Base de datos (PostgreSQL/MongoDB) - ❌ Sistema de autenticación (JWT/OAuth) - ❌ Endpoints de sincronización - ❌ Sistema de actualizaciones incrementales **Frontend:** - ❌ Implementación `ApiDataService` - ❌ Sistema de sincronización (conflict resolution) - ❌ UI de autenticación (opcional) - ❌ Indicadores de sincronización - ❌ Manejo de conflictos de datos **Nuevas Funcionalidades:** - ❌ Chat con IA (backend) - ❌ Búsqueda semántica (backend con embeddings) - ❌ Analytics (opcional, con consentimiento) - ❌ Push notifications --- ### 5.3 Qué NO habrá que reescribir **Garantizado:** - ✅ **Componentes UI** - Cero cambios - ✅ **Páginas** - Cero cambios - ✅ **Lógica de búsqueda/filtrado** - Cero cambios - ✅ **Calculadoras** - Cero cambios - ✅ **Estructura de datos** - Compatible - ✅ **Service Worker** - Solo añadir estrategias de API - ✅ **Persistencia local** - Coexiste con sync **Principio:** El Camino B **extiende** el Camino A. La app offline sigue funcionando igual. Las funcionalidades online son **adicionales**, no reemplazan las offline. --- ## 7. PLAN DE ACCIÓN PRIORIZADO ### 6.1 CORTO PLAZO (Semanas 1-4) #### Semana 1-2: Fundación Arquitectónica **FASE 1: Arquitectura y Abstracción de Datos** - [ ] Crear interfaz `DataService` - [ ] Implementar `LocalDataService` - [ ] Migrar datos de `.ts` a `.json` - [ ] Refactorizar componentes para usar `dataService` - [ ] Crear factory pattern para selección de servicio **FASE 2: Gestión de Datos y Versionado** - [ ] Crear estructura de metadata - [ ] Añadir versionado a entidades - [ ] Crear script de validación de datos - [ ] Documentar sistema de IDs **Esfuerzo:** 1-2 semanas **Bloqueante:** Sí (base para todo) --- #### Semana 3: Persistencia y Estado **FASE 3: Persistencia Local** - [ ] Crear `StorageService` abstracto - [ ] Implementar con IndexedDB - [ ] Crear stores de estado (Zustand/Context) - [ ] Implementar favoritos funcionales - [ ] Implementar historial real **Esfuerzo:** 1 semana **Bloqueante:** No (mejora UX) --- #### Semana 4: Offline y PWA **FASE 4: Offline y PWA** - [ ] Implementar Service Worker completo - [ ] Crear manifest PWA - [ ] Configurar cache strategies - [ ] Implementar detección offline - [ ] Sistema de actualización de contenido **Esfuerzo:** 1 semana **Bloqueante:** Sí (core del Camino A) --- ### 6.2 MEDIO PLAZO (Semanas 5-8) #### Semana 5-6: Seguridad y Estabilidad **FASE 5: Seguridad y Estabilidad** - [ ] Implementar Error Boundaries - [ ] Añadir manejo de errores en servicios - [ ] Validación de datos en runtime - [ ] Tests básicos de componentes críticos - [ ] Optimización de bundle **Esfuerzo:** 2 semanas **Bloqueante:** Sí (producción) --- #### Semana 7: Aspectos Legales **FASE 6: Aspectos Legales** - [ ] Crear página de términos y condiciones - [ ] Disclaimer médico prominente - [ ] Aviso de versión y validación - [ ] Revisión legal (abogado) - [ ] Consentimiento inicial (si necesario) **Esfuerzo:** 1 semana (incluye revisión) **Bloqueante:** Sí (protección legal) --- #### Semana 8: Contenido Médico (Paralelo) **FASE 7: Contenido Médico Expandido** - [ ] Expandir protocolos (20-25 mínimo) - [ ] Expandir fármacos (30-40 mínimo) - [ ] Expandir patologías (25-35 mínimo) - [ ] Validación médica profesional - [ ] Documentación de fuentes **Esfuerzo:** 2-4 semanas (puede ser paralelo) **Bloqueante:** Sí (hace la app útil) --- ### 6.3 LARGO PLAZO (Post-Camino A) #### Preparación para Camino B **Cuando se decida evolucionar:** 1. **Backend API** - Diseñar endpoints REST - Implementar base de datos - Sistema de autenticación 2. **Implementación `ApiDataService`** - Reutilizar interfaz existente - Añadir manejo de errores de red - Cache híbrido (local + API) 3. **Sincronización** - Sistema de conflict resolution - Merge de cambios - Indicadores de sync 4. **Nuevas Funcionalidades** - Chat con IA - Búsqueda semántica - Analytics (opcional) **Principio:** Todo se añade sin romper funcionalidad offline existente. --- ## 8. CHECKLIST FINAL ### 7.1 Checklist: Camino A Completado #### Arquitectura - [ ] Capa de abstracción `DataService` implementada - [ ] Todos los componentes usan `dataService`, no arrays directos - [ ] Datos migrados a JSON con tipos TypeScript separados - [ ] Factory pattern para selección de servicio #### Versionado y Validación - [ ] Sistema de metadata implementado - [ ] Cada entidad tiene versión y fecha de validación - [ ] Script de validación de datos en build - [ ] IDs estables y documentados #### Persistencia - [ ] `StorageService` abstracto implementado - [ ] IndexedDB funcionando - [ ] Favoritos funcionales y persistentes - [ ] Historial de búsquedas real - [ ] Stores de estado global funcionando #### Offline y PWA - [ ] Service Worker completo y funcionando - [ ] Manifest PWA configurado - [ ] App instalable en móviles - [ ] Funciona 100% offline después de primera carga - [ ] Sistema de actualización de contenido #### Seguridad y Estabilidad - [ ] Error Boundaries en todas las rutas - [ ] Manejo de errores en servicios críticos - [ ] Validación de datos en runtime - [ ] Tests básicos de componentes críticos - [ ] Bundle optimizado #### Aspectos Legales - [ ] Página de términos y condiciones - [ ] Disclaimer médico prominente - [ ] Aviso de versión visible en UI - [ ] Revisión legal completada - [ ] Consentimiento implementado (si necesario) #### Contenido Médico - [ ] Mínimo 20 protocolos implementados - [ ] Mínimo 30 fármacos implementados - [ ] Mínimo 25 patologías implementadas - [ ] Contenido validado por profesional médico - [ ] Fuentes documentadas #### UX/UI - [ ] Todas las funcionalidades core funcionando - [ ] Búsqueda rápida y efectiva - [ ] Navegación intuitiva - [ ] Diseño responsive en todos los dispositivos - [ ] Performance aceptable (<3s carga inicial) --- ### 7.2 Checklist: Condiciones para Iniciar Camino B #### Prerequisitos Técnicos - [ ] Camino A 100% completado y estable - [ ] Arquitectura de abstracción funcionando - [ ] Sistema de versionado implementado - [ ] Persistencia local robusta #### Prerequisitos de Negocio - [ ] Decisión estratégica de evolucionar a backend - [ ] Recursos para desarrollo y mantenimiento de backend - [ ] Plan de infraestructura (hosting, BD, etc.) - [ ] Consideraciones de privacidad y GDPR (si aplica) #### Preparación Técnica - [ ] Diseño de API REST completado - [ ] Esquema de base de datos diseñado - [ ] Plan de migración de datos local → BD - [ ] Estrategia de sincronización definida - [ ] Plan de rollback si algo falla --- ## 8. CONSIDERACIONES FINALES ### 8.1 Principios No Negociables 1. **Offline First Siempre** - Incluso con backend, la app debe funcionar offline - Funcionalidades online son opcionales, no requeridas 2. **Responsabilidad Médica** - Todo contenido debe estar validado - Versionado y trazabilidad obligatorios - Disclaimer médico siempre visible 3. **Fiabilidad sobre Complejidad** - Preferir soluciones simples y robustas - Evitar dependencias innecesarias - Testing crítico para funcionalidades médicas 4. **Preparación sin Sobre-ingeniería** - Preparar para futuro sin implementar futuro - Abstracciones útiles, no teóricas - Refactor cuando sea necesario, no prematuramente --- ### 8.2 Métricas de Éxito del Camino A **Técnicas:** - ✅ App funciona 100% offline - ✅ Tiempo de carga <3 segundos - ✅ Sin crashes en uso normal - ✅ Bundle size <2MB (comprimido) **Funcionales:** - ✅ Contenido médico suficiente para uso real - ✅ Búsqueda rápida y efectiva - ✅ Favoritos e historial funcionando - ✅ PWA instalable y estable **Responsabilidad:** - ✅ Disclaimer médico visible - ✅ Versión de contenido accesible - ✅ Términos de uso completos - ✅ Contenido validado profesionalmente --- ### 8.3 Riesgos y Mitigaciones **Riesgo: Sobre-ingeniería de abstracciones** - **Mitigación:** Implementar solo lo necesario para Camino A, preparar interfaces simples **Riesgo: Contenido médico insuficiente** - **Mitigación:** Priorizar expansión de contenido como tarea crítica **Riesgo: Service Worker complejo** - **Mitigación:** Empezar con estrategia simple (Cache First), evolucionar gradualmente **Riesgo: Cambios de requisitos para Camino B** - **Mitigación:** Abstracciones flexibles, no asumir detalles específicos del futuro --- ## FIN DEL DOCUMENTO **Este plan es un documento vivo.** Debe actualizarse cuando: - Se completen fases - Cambien requisitos - Se descubran nuevas necesidades - Se decida evolucionar a Camino B **Mantener este documento sincronizado con el estado real del proyecto.** --- **Versión:** 1.1 **Última actualización:** 2024 **Cambios en esta versión:** - Añadida sección 5: Protocolos Transtelefónicos Específicos (Camino A) - Incluye: PCR (adultos, niños, lactantes), OVACE (adultos, niños, lactantes), SCA - Preparación para evolución a flujos interactivos (Camino B) - Nota global sobre uso profesional y responsabilidad médica **Próxima revisión:** Al completar Fase 1