diff --git a/COMANDOS_DESPLIEGUE.md b/COMANDOS_DESPLIEGUE.md new file mode 100644 index 00000000..04897054 --- /dev/null +++ b/COMANDOS_DESPLIEGUE.md @@ -0,0 +1,155 @@ +# 🚀 Comandos de Despliegue + +## Estado Actual +✅ **Aplicación desplegada y corriendo** +- **Puerto:** 8607 +- **URL:** http://localhost:8607 +- **Gestor:** PM2 +- **Estado:** Online + +## Comandos Útiles + +### Ver estado de la aplicación +```bash +pm2 list +pm2 status emerges-tes +pm2 info emerges-tes +``` + +### Ver logs +```bash +# Ver logs en tiempo real +pm2 logs emerges-tes + +# Ver últimas 50 líneas +pm2 logs emerges-tes --lines 50 --nostream + +# Ver solo errores +pm2 logs emerges-tes --err +``` + +### Gestionar la aplicación +```bash +# Reiniciar +pm2 restart emerges-tes + +# Detener +pm2 stop emerges-tes + +# Iniciar +pm2 start emerges-tes + +# Eliminar del gestor PM2 +pm2 delete emerges-tes +``` + +### Monitor en tiempo real +```bash +pm2 monit +``` + +### Guardar configuración PM2 +```bash +pm2 save +``` + +## Opciones de Despliegue + +### 1. Deploy con PM2 (Actual) +```bash +./deploy.sh --skip-git +``` +- Puerto: 8607 +- Gestión automática de procesos +- Reinicio automático + +### 2. Deploy con Docker +```bash +./deploy-docker.sh --skip-git +``` +- Puerto: 8607 +- Contenedor aislado +- Opciones adicionales: + - `--rebuild` - Reconstruir imagen desde cero + - `--stop` - Detener contenedor + - `--logs` - Ver logs + +### 3. Servidor de preview (desarrollo) +```bash +npm run preview +``` +- Puerto: 4173 +- Solo para pruebas locales +- Se detiene al cerrar terminal + +### 4. Script interactivo +```bash +./desplegar.sh +``` +- Menú interactivo con todas las opciones + +## Verificar que funciona + +### Desde el navegador +Abre: http://localhost:8607 + +### Desde la terminal +```bash +curl http://localhost:8607 +``` + +### Verificar puerto +```bash +netstat -tlnp | grep 8607 +# o +ss -tlnp | grep 8607 +``` + +## Solución de Problemas + +### Si la aplicación no responde +```bash +# Ver logs de errores +pm2 logs emerges-tes --err + +# Reiniciar +pm2 restart emerges-tes + +# Verificar que el puerto esté libre +lsof -i :8607 +``` + +### Si necesitas cambiar el puerto +Edita `ecosystem.config.cjs` y cambia el puerto en: +- `args: 'serve -s dist -l [NUEVO_PUERTO]'` +- `PORT: [NUEVO_PUERTO]` + +Luego reinicia: +```bash +pm2 restart emerges-tes +``` + +### Si necesitas reconstruir +```bash +npm run build +pm2 restart emerges-tes +``` + +## Acceso Remoto + +Si quieres acceder desde otra máquina en la misma red: + +1. Verifica tu IP local: +```bash +hostname -I +# o +ip addr show +``` + +2. Accede desde otro dispositivo usando: +``` +http://[TU_IP_LOCAL]:8607 +``` + +**Nota:** Asegúrate de que el firewall permita conexiones en el puerto 8607. + diff --git a/DOCUMENTOS_WORD/01_FUNDAMENTOS_Y_CONCEPTOS.docx b/DOCUMENTOS_WORD/01_FUNDAMENTOS_Y_CONCEPTOS.docx deleted file mode 100644 index 0ecf4df7..00000000 Binary files a/DOCUMENTOS_WORD/01_FUNDAMENTOS_Y_CONCEPTOS.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/02_PROCEDIMIENTOS_BASICOS.docx b/DOCUMENTOS_WORD/02_PROCEDIMIENTOS_BASICOS.docx deleted file mode 100644 index 119e0a3a..00000000 Binary files a/DOCUMENTOS_WORD/02_PROCEDIMIENTOS_BASICOS.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/03_SOPORTE_VITAL_BASICO.docx b/DOCUMENTOS_WORD/03_SOPORTE_VITAL_BASICO.docx deleted file mode 100644 index ff8368bb..00000000 Binary files a/DOCUMENTOS_WORD/03_SOPORTE_VITAL_BASICO.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/04_MATERIAL_E_INMOVILIZACION.docx b/DOCUMENTOS_WORD/04_MATERIAL_E_INMOVILIZACION.docx deleted file mode 100644 index 6892e805..00000000 Binary files a/DOCUMENTOS_WORD/04_MATERIAL_E_INMOVILIZACION.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/05_OXIGENOTERAPIA_Y_MATERIAL_SANITARIO.docx b/DOCUMENTOS_WORD/05_OXIGENOTERAPIA_Y_MATERIAL_SANITARIO.docx deleted file mode 100644 index fc635a46..00000000 Binary files a/DOCUMENTOS_WORD/05_OXIGENOTERAPIA_Y_MATERIAL_SANITARIO.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/06_PROTOCOLOS_TRANSTELEFONICOS.docx b/DOCUMENTOS_WORD/06_PROTOCOLOS_TRANSTELEFONICOS.docx deleted file mode 100644 index 42f01669..00000000 Binary files a/DOCUMENTOS_WORD/06_PROTOCOLOS_TRANSTELEFONICOS.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/07_FARMACOLOGIA_OPERATIVA.docx b/DOCUMENTOS_WORD/07_FARMACOLOGIA_OPERATIVA.docx deleted file mode 100644 index d16c7dd3..00000000 Binary files a/DOCUMENTOS_WORD/07_FARMACOLOGIA_OPERATIVA.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/08_TRANSFERENCIA_Y_TRASLADO.docx b/DOCUMENTOS_WORD/08_TRANSFERENCIA_Y_TRASLADO.docx deleted file mode 100644 index 23cf26c5..00000000 Binary files a/DOCUMENTOS_WORD/08_TRANSFERENCIA_Y_TRASLADO.docx and /dev/null differ diff --git a/DOCUMENTOS_WORD/09_TRIAGE_MULTIPLES_VICTIMAS.docx b/DOCUMENTOS_WORD/09_TRIAGE_MULTIPLES_VICTIMAS.docx deleted file mode 100644 index 2338909a..00000000 Binary files a/DOCUMENTOS_WORD/09_TRIAGE_MULTIPLES_VICTIMAS.docx and /dev/null differ diff --git a/ESTADO_POST_LIMPIEZA.md b/ESTADO_POST_LIMPIEZA.md deleted file mode 100644 index ca72c50d..00000000 --- a/ESTADO_POST_LIMPIEZA.md +++ /dev/null @@ -1,168 +0,0 @@ -# ✅ Estado Final del Proyecto - Post Limpieza - -**Fecha:** 2025-12-23 -**Limpieza ejecutada:** ✅ Completada - ---- - -## 📊 Resumen de Limpieza - -### Archivos Movidos - -- **393 archivos** → `../EMERGES_REVISION_20251223/` - - `_BACKUP_MD/` (203 archivos) - - `MANUAL_TES_DIGITAL/` (110 archivos) - - `imagenes-pendientes/` (60 archivos) - - Scripts Python adicionales - -- **5 configuraciones** → `config_backup/` - - `vercel.json` - - `netlify.toml` - - `nginx.conf.example` - - `public/.htaccess` - - `public/_redirects` - -- **55 documentos** organizados: - - 13 documentos esenciales → `docs/consolidado/` - - 42 documentos → `docs/archivo/` - ---- - -## 🏗️ Estructura Final Optimizada - -``` -protocolo-r-pido/ -├── public/ # Archivos públicos -│ ├── assets/infografias/ # 46+ imágenes organizadas -│ ├── manual/ # 78 archivos .md -│ ├── manifest.json -│ ├── sw.js -│ └── favicon.svg -├── src/ # ~136 archivos TS/TSX -│ ├── components/ # 40+ componentes -│ ├── data/ # Datos TypeScript -│ ├── hooks/ # Custom hooks -│ ├── pages/ # 20+ páginas -│ └── [otros] -├── docs/ -│ ├── consolidado/ # 13 documentos esenciales -│ └── archivo/ # 42 documentos para referencia -├── config_backup/ # 5 configuraciones no usadas -├── scripts/ -│ └── verificar-manual.ts # Script esencial -├── .github/ -│ └── workflows/deploy.yml -├── Dockerfile # ✅ Mantenido -├── docker-compose.yml # ✅ Mantenido -├── docker-compose.prod.yml # ✅ Mantenido -├── deploy-docker.sh # ✅ Mantenido -├── ecosystem.config.js # ✅ Mantenido (PM2) -├── deploy.sh # ✅ Mantenido -├── webhook-deploy.sh # ✅ Mantenido -├── cleanup_completo.sh # ✅ Script de limpieza -├── package.json -├── vite.config.ts -├── tailwind.config.ts -└── README.md # ✅ Actualizado -``` - ---- - -## ✅ Correcciones Realizadas - -### Errores Corregidos - -1. **Error: "Objects are not valid as a React child"** - - ✅ Corregido en `MenuSheet.tsx` - - Componentes Icon ahora se instancian correctamente - -2. **Error: "Cannot destructure property 'basename'"** - - ✅ Corregido en `App.tsx` y `ErrorBoundary.tsx` - - ErrorBoundary movido al nivel más externo - - Link eliminado de ErrorBoundary (usa window.location.href) - -3. **Clave duplicada en image-registry.ts** - - ✅ Eliminada segunda definición de 'uso-tensiometro' - ---- - -## 🚀 Estado del Proyecto - -### Build -- ✅ Build exitoso sin errores -- ✅ Sin warnings de claves duplicadas -- ✅ Sin errores de sintaxis JSX - -### Funcionalidades -- ✅ PWA funcionando (Service Worker, Manifest) -- ✅ React Router funcionando correctamente -- ✅ Todos los componentes renderizando correctamente -- ✅ Docker configurado y funcionando -- ✅ PM2 configurado (puerto 8607) -- ✅ GitHub Actions configurado - ---- - -## 📦 Backups Creados - -1. **Backup completo:** `../EMERGES_BACKUP_20251223_101230/` - - Tamaño: ~35MB - - Contiene: Todo el proyecto (sin node_modules) - -2. **Archivos para revisión:** `../EMERGES_REVISION_20251223/` - - Tamaño: ~28MB - - Contiene: Backups, duplicados, scripts Python - -**⚠️ Importante:** Revisar estos directorios antes de eliminar nada permanentemente. - ---- - -## 🎯 Próximos Pasos Recomendados - -1. **Verificar funcionalidades:** - ```bash - npm run dev # Desarrollo - docker-compose up --build # Docker - ``` - -2. **Probar PWA:** - - Service Worker registrado - - Manifest funciona - - Banner de instalación funciona - - Modo offline funciona - -3. **Si todo funciona bien:** - - Puedes eliminar backups antiguos (mantener solo el más reciente) - - El proyecto está optimizado y listo para desarrollo - ---- - -## 📝 Documentación Disponible - -**Documentos esenciales en `docs/consolidado/`:** -- `DEPLOYMENT_SERVER.md` - Despliegue en servidor -- `DEPLOYMENT_DOCKER.md` - Despliegue con Docker -- `DEPLOYMENT_GITHUB.md` - Despliegue GitHub Pages -- `VERIFICACION_PWA.md` - Verificación PWA -- `ESTADO_FUNCIONALIDADES.md` - Estado de funcionalidades -- `ANALISIS_TECNOLOGICO_PROYECTO.md` - Análisis técnico completo -- Y más... - -**Documentos archivados en `docs/archivo/`:** -- 42 documentos de referencia histórica - ---- - -## ✨ Resultado Final - -- ✅ **Proyecto limpio y organizado** -- ✅ **Estructura clara y mantenible** -- ✅ **Errores corregidos** -- ✅ **Build funcionando** -- ✅ **PWA funcionando** -- ✅ **Docker configurado** -- ✅ **Listo para desarrollo y producción** - ---- - -**Proyecto optimizado y funcionando correctamente! 🎉** diff --git a/ESTRUCTURA.md b/ESTRUCTURA.md new file mode 100644 index 00000000..048a5430 --- /dev/null +++ b/ESTRUCTURA.md @@ -0,0 +1,99 @@ +# 📁 Estructura del Proyecto guia-tes + +## Carpetas Principales + +``` +guia-tes/ +├── 📂 assets/ # Recursos multimedia (imágenes, videos, slides) +│ ├── checklists_app/ +│ ├── consent_privacy/ +│ ├── images/ # Imágenes organizadas por bloques (bloque_00 a bloque_08) +│ ├── slides/ # Presentaciones organizadas por bloques +│ ├── templates/ +│ └── videos/ # Videos organizados por bloques +│ +├── 📂 src/ # Código fuente de la aplicación React +│ ├── components/ # Componentes React organizados por categoría +│ │ ├── communication-scripts/ +│ │ ├── content/ +│ │ ├── decision-trees/ +│ │ ├── drugs/ +│ │ ├── layout/ +│ │ ├── manual/ +│ │ ├── material-checklists/ +│ │ ├── procedures/ +│ │ ├── references/ +│ │ ├── shared/ +│ │ ├── telephone-protocols/ +│ │ ├── tools/ +│ │ └── ui/ +│ ├── data/ # Datos y configuraciones +│ ├── hooks/ # Custom React hooks +│ ├── lib/ # Utilidades de librerías +│ ├── pages/ # Páginas principales de la aplicación +│ └── utils/ # Funciones utilitarias +│ +├── 📂 public/ # Archivos públicos estáticos +│ ├── assets/ # Recursos públicos (diagramas, infografías) +│ └── manual/ # Archivos Markdown del manual (93 archivos) +│ ├── BLOQUE_0_FUNDAMENTOS/ +│ ├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ +│ ├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ +│ ├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ +│ ├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ +│ ├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ +│ ├── BLOQUE_6_FARMACOLOGIA/ +│ ├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ +│ ├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ +│ ├── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ +│ ├── BLOQUE_10_SITUACIONES_ESPECIALES/ +│ ├── BLOQUE_11_PROTOCOLOS_TRAUMA/ +│ ├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ +│ ├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ +│ ├── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ +│ └── BLOQUE_15_ALTERACIONES_PSIQUIATRICAS_Y_CONTENCION/ +│ +├── 📂 scripts/ # Scripts de utilidad y automatización +├── 📂 docs/ # Documentación del proyecto +│ ├── archivo/ +│ └── consolidado/ +├── 📂 dist/ # Archivos compilados para producción +├── 📂 config_backup/ # Configuraciones de respaldo +└── 📂 node_modules/ # Dependencias de Node.js (no editar) +``` + +## Archivos Principales en la Raíz + +- `package.json` - Configuración del proyecto y dependencias +- `vite.config.ts` - Configuración de Vite (build tool) +- `tsconfig.json` - Configuración de TypeScript +- `tailwind.config.ts` - Configuración de Tailwind CSS +- `index.html` - Punto de entrada HTML +- `manifest.json` - Configuración PWA +- Scripts de despliegue: `deploy.sh`, `deploy-docker.sh` +- Scripts de limpieza: `cleanup_project.sh`, `cleanup_completo.sh` +- Scripts de utilidad: `integrate_assets.py`, `generar_documentos_word.py` + +## Estadísticas + +- **Total archivos:** ~1,232 +- **Total carpetas:** ~229 +- **Archivos del manual:** 93 archivos .md +- **Componentes React:** ~85 componentes + +## Cómo Ver la Estructura + +1. **Desde la terminal:** + ```bash + ./mostrar-estructura.sh + ``` + +2. **Desde el explorador de archivos:** + - Abre la carpeta `/home/planetazuzu/guia-tes` + - Si no ves carpetas ocultas, presiona `Ctrl+H` para mostrarlas + +3. **Ver este archivo:** + ```bash + cat ESTRUCTURA.md + ``` + diff --git a/ESTRUCTURA_PROYECTO.txt b/ESTRUCTURA_PROYECTO.txt new file mode 100644 index 00000000..8dc06089 --- /dev/null +++ b/ESTRUCTURA_PROYECTO.txt @@ -0,0 +1,139 @@ +═══════════════════════════════════════════════════════════ + ESTRUCTURA DEL PROYECTO: guia-tes +═══════════════════════════════════════════════════════════ + +📁 CARPETAS PRINCIPALES: +─────────────────────────────────────────────────────────── + 📂 assets/ (0 archivos, 136K) + 📂 config_backup/ (5 archivos, 24K) + 📂 dist/ (186 archivos, 12M) + 📂 docs/ (17 archivos, 232K) + 📂 node_modules/ (26629 archivos, 322M) + 📂 public/ (149 archivos, 10M) + 📂 scripts/ (12 archivos, 116K) + 📂 src/ (137 archivos, 1,3M) + +📄 ARCHIVOS PRINCIPALES EN LA RAÍZ: +─────────────────────────────────────────────────────────── + 📄 abrir-carpeta.sh (1,2K) + 📄 cleanup_completo.sh (16K) + 📄 cleanup_project.sh (8,5K) + 📄 components.json (414) + 📄 deploy-docker.sh (4,5K) + 📄 deploy.sh (4,0K) + 📄 docker-compose.prod.yml (995) + 📄 docker-compose.yml (654) + 📄 ecosystem.config.js (852) + 📄 eslint.config.js (765) + 📄 generar_documentos_word.py (13K) + 📄 integrate_assets.py (15K) + 📄 manifest.json (33K) + 📄 mostrar-estructura.sh (2,9K) + 📄 package.json (3,3K) + 📄 package-lock.json (339K) + 📄 postcss.config.js (81) + 📄 README.md (1,3K) + 📄 reorganizar_proyecto.sh (3,0K) + 📄 servir-local.sh (149) + 📄 tailwind.config.ts (3,9K) + 📄 tailwind.config.ts (3,9K) + 📄 tsconfig.app.json (652) + 📄 tsconfig.json (369) + 📄 tsconfig.node.json (481) + 📄 vite.config.ts (6,2K) + 📄 vite.config.ts (6,2K) + 📄 vite-plugin-manifest.ts (2,1K) + 📄 webhook-deploy.sh (1,4K) + +═══════════════════════════════════════════════════════════ + ESTRUCTURA DETALLADA DE CARPETAS IMPORTANTES +═══════════════════════════════════════════════════════════ + +📁 src/ (código fuente): + src + src/components + src/components/communication-scripts + src/components/content + src/components/decision-trees + src/components/drugs + src/components/layout + src/components/manual + src/components/material-checklists + src/components/procedures + src/components/references + src/components/shared + src/components/telephone-protocols + src/components/tools + src/components/ui + src/data + src/hooks + src/lib + src/pages + src/utils + +📁 public/ (archivos públicos): + public + public/assets + public/assets/diagramas + public/assets/infografias + public/manual + public/manual/BLOQUE_0_FUNDAMENTOS + public/manual/BLOQUE_10_SITUACIONES_ESPECIALES + public/manual/BLOQUE_11_PROTOCOLOS_TRAUMA + public/manual/BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL + public/manual/BLOQUE_13_COMUNICACION_RELACION_PACIENTE + public/manual/BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES + public/manual/BLOQUE_15_ALTERACIONES_PSIQUIATRICAS_Y_CONTENCION + public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS + public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION + public/manual/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA + public/manual/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP + public/manual/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS + public/manual/BLOQUE_6_FARMACOLOGIA + public/manual/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL + public/manual/BLOQUE_8_GESTION_OPERATIVA + public/manual/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION + public/manual/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA + +📁 assets/ (recursos multimedia): + assets + assets/checklists_app + assets/consent_privacy + assets/images + assets/images/bloque_00 + assets/images/bloque_01 + assets/images/bloque_02 + assets/images/bloque_03 + assets/images/bloque_04 + assets/images/bloque_05 + assets/images/bloque_06 + assets/images/bloque_07 + assets/images/bloque_08 + assets/slides + assets/slides/bloque_00 + assets/slides/bloque_01 + assets/slides/bloque_02 + assets/slides/bloque_03 + assets/slides/bloque_04 + assets/slides/bloque_05 + assets/slides/bloque_06 + assets/slides/bloque_07 + assets/slides/bloque_08 + assets/templates + assets/videos + assets/videos/bloque_00 + assets/videos/bloque_01 + assets/videos/bloque_02 + assets/videos/bloque_03 + assets/videos/bloque_04 + assets/videos/bloque_05 + assets/videos/bloque_06 + assets/videos/bloque_07 + assets/videos/bloque_08 + +═══════════════════════════════════════════════════════════ + RESUMEN +═══════════════════════════════════════════════════════════ + Total archivos: 1233 + Total carpetas: 229 + diff --git a/Manual_TES_Assets_Tracker.xlsx b/Manual_TES_Assets_Tracker.xlsx deleted file mode 100644 index cb588bc5..00000000 Binary files a/Manual_TES_Assets_Tracker.xlsx and /dev/null differ diff --git a/REFERENCIAS_MULTIMEDIA_COMPLETO.csv b/REFERENCIAS_MULTIMEDIA_COMPLETO.csv deleted file mode 100644 index a23eb903..00000000 --- a/REFERENCIAS_MULTIMEDIA_COMPLETO.csv +++ /dev/null @@ -1 +0,0 @@ -Archivo MD,Ruta MD,Línea,Tipo,Ruta Referenciada,Extensión,Existe,Ruta Encontrada,Contexto diff --git a/abrir-carpeta.sh b/abrir-carpeta.sh new file mode 100755 index 00000000..370f6b29 --- /dev/null +++ b/abrir-carpeta.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# Script para abrir la carpeta del proyecto en el explorador de archivos + +CARPETA="/home/planetazuzu/guia-tes" + +echo "Intentando abrir: $CARPETA" +echo "" + +# Verificar que la carpeta existe +if [ ! -d "$CARPETA" ]; then + echo "ERROR: La carpeta no existe: $CARPETA" + exit 1 +fi + +# Verificar permisos +if [ ! -r "$CARPETA" ]; then + echo "ERROR: No tienes permisos de lectura en: $CARPETA" + exit 1 +fi + +echo "✓ Carpeta existe y es accesible" +echo "" + +# Intentar abrir con diferentes métodos +if command -v nautilus &> /dev/null; then + echo "Abriendo con Nautilus..." + nautilus "$CARPETA" & +elif command -v dolphin &> /dev/null; then + echo "Abriendo con Dolphin..." + dolphin "$CARPETA" & +elif command -v thunar &> /dev/null; then + echo "Abriendo con Thunar..." + thunar "$CARPETA" & +elif command -v xdg-open &> /dev/null; then + echo "Abriendo con xdg-open..." + xdg-open "$CARPETA" & +else + echo "ERROR: No se encontró ningún explorador de archivos instalado" + echo "Puedes navegar manualmente a: $CARPETA" + exit 1 +fi + +echo "" +echo "Si la carpeta no se abre, intenta ejecutar manualmente:" +echo " nautilus $CARPETA" +echo " o" +echo " xdg-open $CARPETA" + diff --git a/analisis_profundo_contenido.py b/analisis_profundo_contenido.py deleted file mode 100644 index 1bbfb0ee..00000000 --- a/analisis_profundo_contenido.py +++ /dev/null @@ -1,374 +0,0 @@ -#!/usr/bin/env python3 -""" -Análisis profundo del contenido del Manual TES Digital -Verifica: referencias cruzadas, links rotos, formato, imágenes, etc. -""" - -import os -import re -from pathlib import Path -from collections import defaultdict -from typing import Dict, List, Set, Tuple - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -def obtener_todos_los_archivos_md() -> List[Path]: - """Obtiene todos los archivos .md del manual""" - archivos = [] - for bloque_dir in MANUAL_DIR.iterdir(): - if bloque_dir.is_dir() and bloque_dir.name.startswith("BLOQUE_"): - for archivo in bloque_dir.glob("*.md"): - archivos.append(archivo) - return sorted(archivos) - -def extraer_referencias_entre_corchetes(contenido: str) -> List[str]: - """Extrae referencias del tipo [texto](ruta) o [texto]""" - patrones = [ - r'\[([^\]]+)\]\(([^\)]+)\)', # [texto](ruta) - r'\[([^\]]+)\]', # [texto] sin ruta - ] - referencias = [] - for patron in patrones: - matches = re.findall(patron, contenido) - for match in matches: - if isinstance(match, tuple): - referencias.append(match[1] if match[1] else match[0]) - else: - referencias.append(match) - return referencias - -def extraer_referencias_cruzadas(contenido: str) -> List[str]: - """Extrae referencias a otros capítulos/bloques""" - # Patrones comunes de referencias cruzadas - patrones = [ - r'(?:ver|Ver|VER|consultar|Consultar|CONSULTAR)\s+(?:el\s+)?(?:capítulo|Capítulo|CAPÍTULO|bloque|Bloque|BLOQUE)?\s*([0-9]+\.[0-9]+(?:\.[0-9]+)?)', - r'(?:ver|Ver|VER|consultar|Consultar|CONSULTAR)\s+(?:el\s+)?(?:capítulo|Capítulo|CAPÍTULO|bloque|Bloque|BLOQUE)?\s*([0-9]+\.[0-9]+)', - r'\(ver\s+([0-9]+\.[0-9]+(?:\.[0-9]+)?)\)', - r'\(Ver\s+([0-9]+\.[0-9]+(?:\.[0-9]+)?)\)', - r'\[([0-9]+\.[0-9]+(?:\.[0-9]+)?)\]', - ] - referencias = [] - for patron in patrones: - matches = re.findall(patron, contenido) - referencias.extend(matches) - return referencias - -def extraer_imagenes(contenido: str) -> List[str]: - """Extrae referencias a imágenes""" - patron = r'!\[([^\]]*)\]\(([^\)]+)\)' - matches = re.findall(patron, contenido) - return [match[1] for match in matches] - -def extraer_tablas(contenido: str) -> int: - """Cuenta tablas en formato markdown""" - # Buscar líneas que contengan | (indicador de tabla) - lineas = contenido.split('\n') - tablas = 0 - en_tabla = False - for linea in lineas: - if '|' in linea and linea.strip().startswith('|'): - if not en_tabla: - tablas += 1 - en_tabla = True - elif en_tabla and not linea.strip(): - en_tabla = False - elif en_tabla and '|' not in linea: - en_tabla = False - return tablas - -def analizar_estructura_headers(contenido: str) -> Dict: - """Analiza la estructura de headers del documento""" - lineas = contenido.split('\n') - headers = [] - for linea in lineas: - if linea.startswith('#'): - nivel = len(linea) - len(linea.lstrip('#')) - texto = linea.lstrip('#').strip() - headers.append({'nivel': nivel, 'texto': texto}) - - return { - 'total': len(headers), - 'headers': headers, - 'tiene_titulo_principal': len(headers) > 0 and headers[0]['nivel'] == 1, - 'estructura_valida': len(headers) > 0 - } - -def verificar_metadatos(contenido: str) -> Dict: - """Verifica metadatos comunes en los archivos""" - metadatos = { - 'tiene_version': False, - 'tiene_fecha': False, - 'tiene_tipo': False, - 'version': None, - 'fecha': None, - 'tipo': None - } - - # Buscar versión - match_version = re.search(r'\*\*Versión:\*\*\s*([^\n]+)', contenido) - if match_version: - metadatos['tiene_version'] = True - metadatos['version'] = match_version.group(1).strip() - - # Buscar fecha - match_fecha = re.search(r'\*\*Fecha:\*\*\s*([^\n]+)', contenido) - if match_fecha: - metadatos['tiene_fecha'] = True - metadatos['fecha'] = match_fecha.group(1).strip() - - # Buscar tipo - match_tipo = re.search(r'\*\*Tipo:\*\*\s*([^\n]+)', contenido) - if match_tipo: - metadatos['tiene_tipo'] = True - metadatos['tipo'] = match_tipo.group(1).strip() - - return metadatos - -def analizar_contenido_completitud(contenido: str) -> Dict: - """Analiza la completitud del contenido""" - lineas = contenido.split('\n') - lineas_no_vacias = [l for l in lineas if l.strip()] - - return { - 'total_lineas': len(lineas), - 'lineas_no_vacias': len(lineas_no_vacias), - 'total_caracteres': len(contenido), - 'palabras': len(contenido.split()), - 'tiene_contenido_sustancial': len(lineas_no_vacias) > 50, # Más de 50 líneas no vacías - 'ratio_contenido': len(lineas_no_vacias) / len(lineas) if lineas else 0 - } - -def analizar_archivo(archivo: Path) -> Dict: - """Analiza un archivo completo""" - try: - with open(archivo, 'r', encoding='utf-8') as f: - contenido = f.read() - except Exception as e: - return {'error': str(e)} - - # Extraer información básica - nombre_archivo = archivo.name - ruta_relativa = str(archivo.relative_to(BASE_DIR)) - - # Análisis - referencias = extraer_referencias_entre_corchetes(contenido) - referencias_cruzadas = extraer_referencias_cruzadas(contenido) - imagenes = extraer_imagenes(contenido) - num_tablas = extraer_tablas(contenido) - estructura_headers = analizar_estructura_headers(contenido) - metadatos = verificar_metadatos(contenido) - completitud = analizar_contenido_completitud(contenido) - - return { - 'archivo': nombre_archivo, - 'ruta': ruta_relativa, - 'referencias': referencias, - 'referencias_cruzadas': referencias_cruzadas, - 'imagenes': imagenes, - 'num_tablas': num_tablas, - 'estructura_headers': estructura_headers, - 'metadatos': metadatos, - 'completitud': completitud - } - -def verificar_links_rotos(analisis_archivos: List[Dict]) -> List[Dict]: - """Verifica links rotos entre archivos""" - # Crear mapa de archivos existentes - archivos_existentes = set() - for analisis in analisis_archivos: - if 'error' not in analisis: - archivos_existentes.add(analisis['archivo']) - # También agregar variaciones del nombre - nombre_sin_ext = Path(analisis['archivo']).stem - archivos_existentes.add(nombre_sin_ext) - - links_rotos = [] - for analisis in analisis_archivos: - if 'error' in analisis: - continue - - archivo_actual = analisis['archivo'] - for ref in analisis['referencias']: - # Verificar si es una ruta relativa - if ref.startswith('../') or ref.startswith('./'): - # Intentar resolver la ruta - archivo_ref_dir = Path(analisis['ruta']).parent - ruta_completa = (BASE_DIR / archivo_ref_dir / ref).resolve() - if not ruta_completa.exists(): - links_rotos.append({ - 'archivo': archivo_actual, - 'referencia': ref, - 'tipo': 'ruta_relativa' - }) - elif ref.endswith('.md'): - # Verificar si el archivo existe - if ref not in archivos_existentes: - # Buscar en todos los bloques - encontrado = False - for bloque_dir in MANUAL_DIR.iterdir(): - if bloque_dir.is_dir(): - if (bloque_dir / ref).exists(): - encontrado = True - break - if not encontrado: - links_rotos.append({ - 'archivo': archivo_actual, - 'referencia': ref, - 'tipo': 'archivo_md' - }) - - return links_rotos - -def generar_reporte_profundo(): - """Genera un reporte profundo del análisis""" - print("Analizando contenido de archivos...") - archivos = obtener_todos_los_archivos_md() - - analisis_completo = [] - for archivo in archivos: - analisis = analizar_archivo(archivo) - analisis_completo.append(analisis) - if 'error' in analisis: - print(f"⚠️ Error analizando {archivo.name}: {analisis['error']}") - - print(f"✅ Analizados {len(analisis_completo)} archivos") - - # Verificar links rotos - print("Verificando links rotos...") - links_rotos = verificar_links_rotos(analisis_completo) - - # Generar estadísticas - stats = { - 'total_archivos': len(analisis_completo), - 'archivos_con_errores': len([a for a in analisis_completo if 'error' in a]), - 'archivos_con_metadatos_completos': len([a for a in analisis_completo if 'metadatos' in a and a['metadatos']['tiene_version'] and a['metadatos']['tiene_fecha']]), - 'total_referencias_cruzadas': sum(len(a.get('referencias_cruzadas', [])) for a in analisis_completo), - 'total_imagenes': sum(len(a.get('imagenes', [])) for a in analisis_completo), - 'total_tablas': sum(a.get('num_tablas', 0) for a in analisis_completo), - 'links_rotos': len(links_rotos), - 'archivos_sin_contenido_sustancial': len([a for a in analisis_completo if 'completitud' in a and not a['completitud'].get('tiene_contenido_sustancial', False)]) - } - - # Generar reporte markdown - reporte_md = [] - reporte_md.append("# REPORTE DE ANÁLISIS PROFUNDO - MANUAL TES DIGITAL\n") - reporte_md.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte_md.append("---\n") - - # Estadísticas generales - reporte_md.append("## 📊 ESTADÍSTICAS GENERALES\n") - reporte_md.append(f"- **Total de archivos analizados:** {stats['total_archivos']}") - reporte_md.append(f"- **Archivos con errores de lectura:** {stats['archivos_con_errores']}") - reporte_md.append(f"- **Archivos con metadatos completos:** {stats['archivos_con_metadatos_completos']}") - reporte_md.append(f"- **Total referencias cruzadas:** {stats['total_referencias_cruzadas']}") - reporte_md.append(f"- **Total imágenes referenciadas:** {stats['total_imagenes']}") - reporte_md.append(f"- **Total tablas:** {stats['total_tablas']}") - reporte_md.append(f"- **Links rotos encontrados:** {stats['links_rotos']}") - reporte_md.append(f"- **Archivos sin contenido sustancial:** {stats['archivos_sin_contenido_sustancial']}\n") - reporte_md.append("---\n") - - # Links rotos - if links_rotos: - reporte_md.append("## 🔴 LINKS ROTOS ENCONTRADOS\n") - reporte_md.append(f"**Total:** {len(links_rotos)}\n") - for link_roto in links_rotos[:20]: # Limitar a 20 para no hacer el reporte muy largo - reporte_md.append(f"- `{link_roto['archivo']}` → `{link_roto['referencia']}` ({link_roto['tipo']})") - if len(links_rotos) > 20: - reporte_md.append(f"\n*... y {len(links_rotos) - 20} más*") - else: - reporte_md.append("## ✅ NO SE ENCONTRARON LINKS ROTOS\n") - - reporte_md.append("\n---\n") - - # Análisis de metadatos - reporte_md.append("## 📋 ANÁLISIS DE METADATOS\n") - archivos_sin_version = [a for a in analisis_completo if 'metadatos' in a and not a['metadatos']['tiene_version']] - archivos_sin_fecha = [a for a in analisis_completo if 'metadatos' in a and not a['metadatos']['tiene_fecha']] - archivos_sin_tipo = [a for a in analisis_completo if 'metadatos' in a and not a['metadatos']['tiene_tipo']] - - if archivos_sin_version: - reporte_md.append(f"\n### Archivos sin versión ({len(archivos_sin_version)}):") - for archivo in archivos_sin_version[:10]: - reporte_md.append(f"- `{archivo['archivo']}`") - if len(archivos_sin_version) > 10: - reporte_md.append(f"*... y {len(archivos_sin_version) - 10} más*") - - if archivos_sin_fecha: - reporte_md.append(f"\n### Archivos sin fecha ({len(archivos_sin_fecha)}):") - for archivo in archivos_sin_fecha[:10]: - reporte_md.append(f"- `{archivo['archivo']}`") - if len(archivos_sin_fecha) > 10: - reporte_md.append(f"*... y {len(archivos_sin_fecha) - 10} más*") - - if archivos_sin_tipo: - reporte_md.append(f"\n### Archivos sin tipo ({len(archivos_sin_tipo)}):") - for archivo in archivos_sin_tipo[:10]: - reporte_md.append(f"- `{archivo['archivo']}`") - if len(archivos_sin_tipo) > 10: - reporte_md.append(f"*... y {len(archivos_sin_tipo) - 10} más*") - - if not archivos_sin_version and not archivos_sin_fecha and not archivos_sin_tipo: - reporte_md.append("✅ Todos los archivos tienen metadatos completos\n") - - reporte_md.append("\n---\n") - - # Análisis de completitud - reporte_md.append("## 📄 ANÁLISIS DE COMPLETITUD\n") - archivos_cortos = [a for a in analisis_completo if 'completitud' in a and a['completitud']['lineas_no_vacias'] < 50] - if archivos_cortos: - reporte_md.append(f"\n### Archivos con menos de 50 líneas de contenido ({len(archivos_cortos)}):") - for archivo in archivos_cortos[:10]: - lineas = archivo['completitud']['lineas_no_vacias'] - reporte_md.append(f"- `{archivo['archivo']}` ({lineas} líneas)") - if len(archivos_cortos) > 10: - reporte_md.append(f"*... y {len(archivos_cortos) - 10} más*") - else: - reporte_md.append("✅ Todos los archivos tienen contenido sustancial\n") - - reporte_md.append("\n---\n") - - # Resumen de referencias cruzadas - reporte_md.append("## 🔗 REFERENCIAS CRUZADAS\n") - reporte_md.append(f"Se encontraron {stats['total_referencias_cruzadas']} referencias cruzadas entre capítulos.\n") - reporte_md.append("Esto indica buena integración entre los diferentes capítulos del manual.\n") - - reporte_md.append("\n---\n") - - # Recomendaciones - reporte_md.append("## 💡 RECOMENDACIONES\n") - recomendaciones = [] - - if stats['links_rotos'] > 0: - recomendaciones.append("Revisar y corregir los links rotos identificados") - - if stats['archivos_con_metadatos_completos'] < stats['total_archivos']: - recomendaciones.append("Completar metadatos (versión, fecha, tipo) en todos los archivos") - - if stats['archivos_sin_contenido_sustancial'] > 0: - recomendaciones.append("Revisar archivos con poco contenido para asegurar completitud") - - if not recomendaciones: - recomendaciones.append("✅ El proyecto está en excelente estado") - - for i, rec in enumerate(recomendaciones, 1): - reporte_md.append(f"{i}. {rec}") - - reporte_md.append("\n---\n") - - return "\n".join(reporte_md), stats - -if __name__ == "__main__": - reporte_md, stats = generar_reporte_profundo() - - reporte_path = BASE_DIR / "REPORTE_ANALISIS_PROFUNDO.md" - with open(reporte_path, "w", encoding="utf-8") as f: - f.write(reporte_md) - - print(f"\n✅ Reporte generado: {reporte_path}") - print(f"\n📊 Resumen:") - print(f" - Archivos analizados: {stats['total_archivos']}") - print(f" - Links rotos: {stats['links_rotos']}") - print(f" - Referencias cruzadas: {stats['total_referencias_cruzadas']}") - print(f" - Imágenes: {stats['total_imagenes']}") - print(f" - Tablas: {stats['total_tablas']}") diff --git a/buscar_multimedia_exhaustivo.py b/buscar_multimedia_exhaustivo.py deleted file mode 100644 index 0a495fa8..00000000 --- a/buscar_multimedia_exhaustivo.py +++ /dev/null @@ -1,327 +0,0 @@ -#!/usr/bin/env python3 -""" -Búsqueda EXHAUSTIVA de referencias a archivos multimedia -Incluye búsqueda de patrones sutiles y referencias textuales -""" - -import os -import re -from pathlib import Path -from typing import List, Dict -import csv - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -def buscar_referencias_exhaustivas(archivo: Path) -> List[Dict]: - """Búsqueda exhaustiva de TODAS las posibles referencias a medios""" - referencias = [] - - try: - with open(archivo, 'r', encoding='utf-8') as f: - contenido = f.read() - lineas = contenido.split('\n') - - for num_linea, linea in enumerate(lineas, 1): - # 1. Imágenes Markdown estándar: ![alt](ruta) - patron1 = r'!\[([^\]]*)\]\(([^\)]+)\)' - matches = re.findall(patron1, linea) - for texto_alt, ruta in matches: - # Verificar si parece ser una imagen - if any(ext in ruta.lower() for ext in ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.bmp', '.webp']): - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'imagen_markdown', - 'ruta_referenciada': ruta.strip(), - 'extension': Path(ruta).suffix.lower(), - 'texto_alt': texto_alt, - 'contexto': linea.strip()[:150] - }) - - # 2. Enlaces a archivos multimedia: [texto](archivo.ext) - patron2 = r'\[([^\]]*)\]\(([^\)]+\.(jpg|jpeg|png|gif|svg|bmp|webp|pdf|doc|docx|ppt|pptx|xls|xlsx|mp4|avi|mov|wmv|mkv|webm|flv))\)' - matches = re.findall(patron2, linea, re.IGNORECASE) - for texto, ruta, ext in matches: - tipo = 'documento' if ext.lower() in ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx'] else \ - 'video' if ext.lower() in ['mp4', 'avi', 'mov', 'wmv', 'mkv', 'webm', 'flv'] else 'imagen' - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': f'{tipo}_enlace', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': texto, - 'contexto': linea.strip()[:150] - }) - - # 3. Referencias directas a archivos (sin markdown) - patron3 = r'\b([^\s\(\)]+\.(jpg|jpeg|png|gif|svg|bmp|webp|pdf|doc|docx|ppt|pptx|mp4|avi|mov|wmv))\b' - matches = re.findall(patron3, linea, re.IGNORECASE) - for ruta, ext in matches: - # Evitar URLs y rutas de código - if not ruta.startswith('http') and not ruta.startswith('//') and '.' in ruta: - tipo = 'documento' if ext.lower() in ['pdf', 'doc', 'docx', 'ppt', 'pptx'] else \ - 'video' if ext.lower() in ['mp4', 'avi', 'mov', 'wmv'] else 'imagen' - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': f'{tipo}_directo', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': '', - 'contexto': linea.strip()[:150] - }) - - # 4. Referencias textuales: "ver figura X", "anexo Y", etc. - patron4 = r'(ver|Ver|VER|consultar|Consultar|CONSULTAR|adjunto|Adjunto|ADJUNTO|anexo|Anexo|ANEXO|figura|Figura|FIGURA|imagen|Imagen|IMAGEN|gráfico|Gráfico|GRÁFICO|diagrama|Diagrama|DIAGRAMA|tabla|Tabla|TABLA)\s+[A-Z]?\d+[\.\)]?\s*[:\-]?\s*([^\s,\.\)]+\.(jpg|jpeg|png|gif|svg|pdf|doc|docx))' - matches = re.findall(patron4, linea, re.IGNORECASE) - for palabra, ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'referencia_textual', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': palabra, - 'contexto': linea.strip()[:150] - }) - - # 5. Rutas relativas con ../ o ./ - patron5 = r'\(([\.\/][^\)]+\.(jpg|jpeg|png|gif|svg|pdf|doc|docx|mp4|avi|mov))\)' - matches = re.findall(patron5, linea, re.IGNORECASE) - for ruta, ext in matches: - tipo = 'documento' if ext.lower() in ['pdf', 'doc', 'docx'] else \ - 'video' if ext.lower() in ['mp4', 'avi', 'mov'] else 'imagen' - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': f'{tipo}_relativa', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': '', - 'contexto': linea.strip()[:150] - }) - - # 6. Referencias a carpetas comunes - patron6 = r'(assets|images|img|imagenes|media|multimedia|videos|docs|documentos|public|static)/[^\s\)]+\.(jpg|jpeg|png|gif|svg|pdf|mp4|avi|mov)' - matches = re.findall(patron6, linea, re.IGNORECASE) - for carpeta, ext in matches: - # Extraer nombre de archivo - match_archivo = re.search(rf'{carpeta}/([^\s\)]+\.{ext})', linea, re.IGNORECASE) - if match_archivo: - nombre_archivo = match_archivo.group(1) - ruta_completa = f"{carpeta}/{nombre_archivo}" - tipo = 'documento' if ext.lower() == 'pdf' else \ - 'video' if ext.lower() in ['mp4', 'avi', 'mov'] else 'imagen' - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': f'{tipo}_carpeta', - 'ruta_referenciada': ruta_completa, - 'extension': ext.lower(), - 'texto_alt': carpeta, - 'contexto': linea.strip()[:150] - }) - - except Exception as e: - print(f"Error procesando {archivo}: {e}") - - return referencias - -def verificar_existencia(ruta: str, archivo_origen: Path) -> tuple: - """Verifica si un archivo existe""" - ruta = ruta.strip() - - # URLs externas - if ruta.startswith(('http://', 'https://', '//')): - return True, "URL externa" - - # Ruta absoluta - if os.path.isabs(ruta): - return os.path.exists(ruta), ruta - - # Ruta relativa desde el archivo origen - archivo_dir = archivo_origen.parent - ruta_resuelta = (archivo_dir / ruta).resolve() - - if ruta_resuelta.exists() and ruta_resuelta.is_file(): - return True, str(ruta_resuelta.relative_to(BASE_DIR)) - - # Buscar desde raíz del proyecto - ruta_desde_raiz = BASE_DIR / ruta.lstrip('/') - if ruta_desde_raiz.exists() and ruta_desde_raiz.is_file(): - return True, str(ruta_desde_raiz.relative_to(BASE_DIR)) - - # Buscar en ubicaciones comunes - ubicaciones = [ - BASE_DIR / "public" / ruta, - BASE_DIR / "src" / "assets" / ruta, - BASE_DIR / "assets" / ruta, - BASE_DIR / "images" / ruta, - BASE_DIR / "docs" / ruta, - MANUAL_DIR / ruta, - ] - - for ubicacion in ubicaciones: - if ubicacion.exists() and ubicacion.is_file(): - return True, str(ubicacion.relative_to(BASE_DIR)) - - return False, ruta - -def obtener_archivos_md() -> List[Path]: - """Obtiene todos los archivos .md del manual""" - archivos = [] - for bloque_dir in MANUAL_DIR.iterdir(): - if bloque_dir.is_dir() and bloque_dir.name.startswith("BLOQUE_"): - for archivo in bloque_dir.glob("*.md"): - archivos.append(archivo) - return sorted(archivos) - -def main(): - print("🔍 Búsqueda EXHAUSTIVA de referencias a archivos multimedia...") - archivos_md = obtener_archivos_md() - print(f" Analizando {len(archivos_md)} archivos .md...") - - todas_referencias = [] - for archivo in archivos_md: - refs = buscar_referencias_exhaustivas(archivo) - todas_referencias.extend(refs) - - print(f" Encontradas {len(todas_referencias)} referencias potenciales") - - # Verificar existencia - print(" Verificando existencia de archivos...") - resultados = [] - - for ref in todas_referencias: - existe, ruta_encontrada = verificar_existencia(ref['ruta_referenciada'], Path(BASE_DIR / ref['ruta_md'])) - - resultados.append({ - 'Archivo MD': ref['archivo_md'], - 'Ruta MD': ref['ruta_md'], - 'Línea': ref['linea'], - 'Tipo': ref['tipo'], - 'Ruta Referenciada': ref['ruta_referenciada'], - 'Extensión': ref['extension'], - 'Existe': 'Sí' if existe else 'No', - 'Ruta Encontrada': ruta_encontrada if existe else 'N/A', - 'Contexto': ref['contexto'] - }) - - # Separar faltantes - faltantes = [r for r in resultados if r['Existe'] == 'No'] - existentes = [r for r in resultados if r['Existe'] == 'Sí'] - - # Generar CSV - csv_path = BASE_DIR / "REFERENCIAS_MULTIMEDIA_COMPLETO.csv" - with open(csv_path, 'w', newline='', encoding='utf-8') as f: - if resultados: - writer = csv.DictWriter(f, fieldnames=resultados[0].keys()) - writer.writeheader() - writer.writerows(resultados) - else: - f.write("Archivo MD,Ruta MD,Línea,Tipo,Ruta Referenciada,Extensión,Existe,Ruta Encontrada,Contexto\n") - - # Generar reporte Markdown - reporte = [] - reporte.append("# REPORTE EXHAUSTIVO: REFERENCIAS A ARCHIVOS MULTIMEDIA\n") - reporte.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte.append("---\n") - - reporte.append("## 📊 RESUMEN EJECUTIVO\n") - reporte.append(f"- **Total de archivos .md analizados:** {len(archivos_md)}\n") - reporte.append(f"- **Total de referencias encontradas:** {len(resultados)}\n") - reporte.append(f"- **Archivos existentes:** {len(existentes)}\n") - reporte.append(f"- **Archivos faltantes:** {len(faltantes)}\n") - - if resultados: - reporte.append(f"- **Porcentaje de completitud:** {(len(existentes)/len(resultados)*100):.1f}%\n") - else: - reporte.append("- **Porcentaje de completitud:** N/A (no se encontraron referencias)\n") - - reporte.append("---\n") - - if faltantes: - reporte.append("## ❌ ARCHIVOS MULTIMEDIA FALTANTES\n") - reporte.append(f"**Total:** {len(faltantes)} referencias a archivos que NO existen\n\n") - reporte.append("| Archivo MD | Línea | Tipo | Ruta Referenciada | Extensión | Contexto |\n") - reporte.append("|------------|-------|------|-------------------|-----------|----------|\n") - - for ref in faltantes: - contexto_corto = ref['Contexto'][:80].replace('|', '\\|') - reporte.append(f"| `{ref['Archivo MD']}` | {ref['Línea']} | {ref['Tipo']} | `{ref['Ruta Referenciada']}` | {ref['Extensión']} | {contexto_corto}... |\n") - else: - reporte.append("## ✅ NO SE ENCONTRARON ARCHIVOS MULTIMEDIA FALTANTES\n") - if len(resultados) == 0: - reporte.append("\n**Resultado:** No se encontraron referencias a archivos multimedia en ningún archivo .md del proyecto.\n") - reporte.append("\nEsto indica que:\n") - reporte.append("- Los archivos .md no contienen referencias a imágenes, videos o documentos externos\n") - reporte.append("- El contenido es principalmente texto con formato Markdown\n") - reporte.append("- No hay dependencias de archivos multimedia que deban ser creados\n") - else: - reporte.append("\nTodas las referencias encontradas apuntan a archivos existentes.\n") - - reporte.append("\n---\n") - - if existentes and len(existentes) > 0: - reporte.append("## ✅ ARCHIVOS MULTIMEDIA EXISTENTES\n") - reporte.append(f"**Total:** {len(existentes)} referencias a archivos que existen\n\n") - reporte.append("| Archivo MD | Tipo | Ruta Referenciada | Ruta Encontrada |\n") - reporte.append("|------------|------|-------------------|-----------------|\n") - - for ref in existentes[:30]: - reporte.append(f"| `{ref['Archivo MD']}` | {ref['Tipo']} | `{ref['Ruta Referenciada']}` | `{ref['Ruta Encontrada']}` |\n") - - if len(existentes) > 30: - reporte.append(f"\n*... y {len(existentes) - 30} referencias más (ver CSV completo)*\n") - - reporte.append("\n---\n") - - if resultados: - reporte.append("## 📋 ESTADÍSTICAS POR TIPO\n") - por_tipo = {} - por_tipo_faltantes = {} - - for ref in resultados: - tipo = ref['Tipo'] - por_tipo[tipo] = por_tipo.get(tipo, 0) + 1 - if ref['Existe'] == 'No': - por_tipo_faltantes[tipo] = por_tipo_faltantes.get(tipo, 0) + 1 - - reporte.append("| Tipo | Total | Faltantes | Existentes |\n") - reporte.append("|------|-------|-----------|------------|\n") - - for tipo in sorted(por_tipo.keys()): - total = por_tipo[tipo] - faltantes_tipo = por_tipo_faltantes.get(tipo, 0) - existentes_tipo = total - faltantes_tipo - reporte.append(f"| {tipo} | {total} | {faltantes_tipo} | {existentes_tipo} |\n") - - reporte.append("\n---\n") - reporte.append("## 📄 ARCHIVOS GENERADOS\n") - reporte.append(f"- **CSV completo:** `REFERENCIAS_MULTIMEDIA_COMPLETO.csv`\n") - reporte.append(f"- **Reporte Markdown:** Este archivo\n") - reporte.append("\nEl archivo CSV contiene todas las referencias encontradas con detalles completos.\n") - - # Guardar reporte - reporte_path = BASE_DIR / "REPORTE_MULTIMEDIA_COMPLETO.md" - with open(reporte_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(reporte)) - - print(f"\n✅ Reporte generado: {reporte_path}") - print(f"✅ CSV generado: {csv_path}") - print(f"\n📊 Resumen final:") - print(f" - Archivos analizados: {len(archivos_md)}") - print(f" - Referencias encontradas: {len(resultados)}") - print(f" - Archivos faltantes: {len(faltantes)}") - print(f" - Archivos existentes: {len(existentes)}") - -if __name__ == "__main__": - main() diff --git a/buscar_multimedia_faltante.py b/buscar_multimedia_faltante.py deleted file mode 100644 index 6baaeb7a..00000000 --- a/buscar_multimedia_faltante.py +++ /dev/null @@ -1,321 +0,0 @@ -#!/usr/bin/env python3 -""" -Script exhaustivo para buscar TODAS las referencias a archivos multimedia -y verificar si existen en el sistema -""" - -import os -import re -from pathlib import Path -from typing import List, Dict, Tuple -import csv - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -def buscar_todas_referencias_multimedia(archivo: Path) -> List[Dict]: - """Busca TODAS las referencias a medios en un archivo""" - referencias = [] - - try: - with open(archivo, 'r', encoding='utf-8') as f: - contenido = f.read() - lineas = contenido.split('\n') - - for num_linea, linea in enumerate(lineas, 1): - # 1. Patrones de imágenes: ![texto](ruta.jpg) - patron_imagen = r'!\[([^\]]*)\]\(([^\)]+\.(jpg|jpeg|png|gif|svg|bmp|webp))\)' - matches = re.findall(patron_imagen, linea, re.IGNORECASE) - for texto_alt, ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'imagen', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': texto_alt, - 'contexto': linea.strip()[:100] - }) - - # 2. Referencias a videos en enlaces: [texto](video.mp4) - patron_video_enlace = r'\[([^\]]*)\]\(([^\)]+\.(mp4|avi|mov|wmv|mkv|webm|flv))\)' - matches = re.findall(patron_video_enlace, linea, re.IGNORECASE) - for texto, ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'video', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': texto, - 'contexto': linea.strip()[:100] - }) - - # 3. Referencias directas a videos (sin enlace) - patron_video_directo = r'([^\s]+\.(mp4|avi|mov|wmv|mkv|webm|flv))' - matches = re.findall(patron_video_directo, linea, re.IGNORECASE) - for ruta, ext in matches: - # Evitar falsos positivos en URLs - if not ruta.startswith('http'): - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'video', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': '', - 'contexto': linea.strip()[:100] - }) - - # 4. Enlaces a PDF/DOC/PPT - patron_documentos = r'\[([^\]]*)\]\(([^\)]+\.(pdf|doc|docx|ppt|pptx|xls|xlsx))\)' - matches = re.findall(patron_documentos, linea, re.IGNORECASE) - for texto, ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'documento', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': texto, - 'contexto': linea.strip()[:100] - }) - - # 5. Referencias a anexos/adjuntos/figuras - patron_anexo = r'(ver|Ver|VER|consultar|Consultar|CONSULTAR|adjunto|Adjunto|ADJUNTO|anexo|Anexo|ANEXO|figura|Figura|FIGURA|imagen|Imagen|IMAGEN)\s+[A-Z]?\d+[\.\)]?\s*[:\-]?\s*([^\s,\.\)]+\.(jpg|jpeg|png|gif|svg|pdf|doc|docx))' - matches = re.findall(patron_anexo, linea, re.IGNORECASE) - for palabra, ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'referencia_textual', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': palabra, - 'contexto': linea.strip()[:100] - }) - - # 6. Rutas relativas que podrían ser archivos - patron_rutas = r'\(([\.\/][^\)]+\.(jpg|jpeg|png|gif|svg|pdf|doc|docx|mp4|avi|mov))\)' - matches = re.findall(patron_rutas, linea, re.IGNORECASE) - for ruta, ext in matches: - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'ruta_relativa', - 'ruta_referenciada': ruta.strip(), - 'extension': ext.lower(), - 'texto_alt': '', - 'contexto': linea.strip()[:100] - }) - - # 7. Referencias a carpetas de assets/imágenes - patron_assets = r'(assets|images|img|imagenes|media|multimedia|videos|docs|documentos)/([^\s\)]+\.(jpg|jpeg|png|gif|svg|pdf|mp4|avi|mov))' - matches = re.findall(patron_assets, linea, re.IGNORECASE) - for carpeta, nombre_archivo, ext in matches: - # Construir ruta completa - ruta_completa = f"{carpeta}/{nombre_archivo}" - referencias.append({ - 'archivo_md': archivo.name, - 'ruta_md': str(archivo.relative_to(BASE_DIR)), - 'linea': num_linea, - 'tipo': 'ruta_assets', - 'ruta_referenciada': ruta_completa, - 'extension': ext.lower(), - 'texto_alt': '', - 'contexto': linea.strip()[:100] - }) - - except Exception as e: - print(f"Error procesando {archivo}: {e}") - - return referencias - -def verificar_existencia_archivo(ruta_referenciada: str, archivo_origen: Path) -> Tuple[bool, str]: - """Verifica si un archivo existe y devuelve la ruta encontrada""" - # Limpiar la ruta - ruta = ruta_referenciada.strip() - - # Si es URL, no verificar - if ruta.startswith('http://') or ruta.startswith('https://'): - return True, "URL externa" - - # Si es ruta absoluta - if os.path.isabs(ruta): - if os.path.exists(ruta): - return True, ruta - return False, ruta - - # Si es ruta relativa - archivo_dir = archivo_origen.parent - - # Intentar resolver desde el directorio del archivo - ruta_completa = (archivo_dir / ruta).resolve() - if ruta_completa.exists(): - return True, str(ruta_completa.relative_to(BASE_DIR)) - - # Intentar desde la raíz del proyecto - ruta_desde_raiz = BASE_DIR / ruta.lstrip('/') - if ruta_desde_raiz.exists(): - return True, str(ruta_desde_raiz.relative_to(BASE_DIR)) - - # Buscar en ubicaciones comunes - ubicaciones_comunes = [ - BASE_DIR / "public" / ruta, - BASE_DIR / "src" / "assets" / ruta, - BASE_DIR / "assets" / ruta, - BASE_DIR / "images" / ruta, - BASE_DIR / "docs" / ruta, - MANUAL_DIR / ruta, - BASE_DIR / ruta, - ] - - for ubicacion in ubicaciones_comunes: - if ubicacion.exists(): - return True, str(ubicacion.relative_to(BASE_DIR)) - - return False, ruta - -def obtener_todos_archivos_md() -> List[Path]: - """Obtiene todos los archivos .md del manual""" - archivos = [] - for bloque_dir in MANUAL_DIR.iterdir(): - if bloque_dir.is_dir() and bloque_dir.name.startswith("BLOQUE_"): - for archivo in bloque_dir.glob("*.md"): - archivos.append(archivo) - return sorted(archivos) - -def generar_reporte_completo(): - """Genera reporte completo de multimedia faltante""" - print("Buscando referencias a archivos multimedia...") - archivos_md = obtener_todos_archivos_md() - - todas_referencias = [] - - for archivo in archivos_md: - referencias = buscar_todas_referencias_multimedia(archivo) - todas_referencias.extend(referencias) - - print(f"Encontradas {len(todas_referencias)} referencias a medios") - - # Verificar existencia - print("Verificando existencia de archivos...") - resultados = [] - - for ref in todas_referencias: - existe, ruta_encontrada = verificar_existencia_archivo(ref['ruta_referenciada'], Path(BASE_DIR / ref['ruta_md'])) - - resultados.append({ - 'archivo_md': ref['archivo_md'], - 'ruta_md': ref['ruta_md'], - 'linea': ref['linea'], - 'tipo': ref['tipo'], - 'ruta_referenciada': ref['ruta_referenciada'], - 'extension': ref['extension'], - 'existe': 'Sí' if existe else 'No', - 'ruta_encontrada': ruta_encontrada if existe else 'N/A', - 'contexto': ref['contexto'] - }) - - # Separar existentes y faltantes - referencias_faltantes = [r for r in resultados if r['existe'] == 'No'] - referencias_existentes = [r for r in resultados if r['existe'] == 'Sí'] - - # Generar CSV - print("Generando archivo CSV...") - csv_path = BASE_DIR / "REFERENCIAS_MULTIMEDIA_COMPLETO.csv" - with open(csv_path, 'w', newline='', encoding='utf-8') as f: - writer = csv.DictWriter(f, fieldnames=[ - 'Archivo MD', 'Ruta MD', 'Línea', 'Tipo', 'Ruta Referenciada', - 'Extensión', 'Existe', 'Ruta Encontrada', 'Contexto' - ]) - writer.writeheader() - writer.writerows(resultados) - - # Generar reporte Markdown - reporte_md = [] - reporte_md.append("# REPORTE COMPLETO: REFERENCIAS A ARCHIVOS MULTIMEDIA\n") - reporte_md.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte_md.append("---\n") - - reporte_md.append("## 📊 RESUMEN EJECUTIVO\n") - reporte_md.append(f"- **Total de referencias encontradas:** {len(resultados)}\n") - reporte_md.append(f"- **Archivos existentes:** {len(referencias_existentes)}\n") - reporte_md.append(f"- **Archivos faltantes:** {len(referencias_faltantes)}\n") - reporte_md.append(f"- **Porcentaje de completitud:** {(len(referencias_existentes)/len(resultados)*100 if resultados else 0):.1f}%\n") - reporte_md.append("---\n") - - if referencias_faltantes: - reporte_md.append("## ❌ ARCHIVOS MULTIMEDIA FALTANTES\n") - reporte_md.append(f"**Total:** {len(referencias_faltantes)} referencias a archivos que no existen\n\n") - reporte_md.append("| Archivo MD | Línea | Tipo | Ruta Referenciada | Extensión | Contexto |\n") - reporte_md.append("|------------|-------|------|------------------|-----------|----------|\n") - - for ref in referencias_faltantes: - reporte_md.append(f"| `{ref['archivo_md']}` | {ref['linea']} | {ref['tipo']} | `{ref['ruta_referenciada']}` | {ref['extension']} | {ref['contexto'][:50]}... |\n") - else: - reporte_md.append("## ✅ NO SE ENCONTRARON ARCHIVOS MULTIMEDIA FALTANTES\n") - reporte_md.append("Todas las referencias a archivos multimedia apuntan a archivos existentes.\n") - - reporte_md.append("\n---\n") - - if referencias_existentes: - reporte_md.append("## ✅ ARCHIVOS MULTIMEDIA EXISTENTES\n") - reporte_md.append(f"**Total:** {len(referencias_existentes)} referencias a archivos existentes\n\n") - reporte_md.append("| Archivo MD | Tipo | Ruta Referenciada | Ruta Encontrada |\n") - reporte_md.append("|------------|------|-------------------|-----------------|\n") - - # Mostrar solo primeros 20 para no hacer el reporte muy largo - for ref in referencias_existentes[:20]: - reporte_md.append(f"| `{ref['archivo_md']}` | {ref['tipo']} | `{ref['ruta_referenciada']}` | `{ref['ruta_encontrada']}` |\n") - - if len(referencias_existentes) > 20: - reporte_md.append(f"\n*... y {len(referencias_existentes) - 20} referencias más (ver CSV completo)*\n") - - reporte_md.append("\n---\n") - reporte_md.append("## 📋 ESTADÍSTICAS POR TIPO\n") - - por_tipo = {} - por_tipo_faltantes = {} - - for ref in resultados: - tipo = ref['tipo'] - por_tipo[tipo] = por_tipo.get(tipo, 0) + 1 - if ref['existe'] == 'No': - por_tipo_faltantes[tipo] = por_tipo_faltantes.get(tipo, 0) + 1 - - reporte_md.append("| Tipo | Total | Faltantes | Existentes |\n") - reporte_md.append("|------|-------|-----------|------------|\n") - - for tipo in sorted(por_tipo.keys()): - total = por_tipo[tipo] - faltantes = por_tipo_faltantes.get(tipo, 0) - existentes = total - faltantes - reporte_md.append(f"| {tipo} | {total} | {faltantes} | {existentes} |\n") - - reporte_md.append("\n---\n") - reporte_md.append("## 📄 ARCHIVOS GENERADOS\n") - reporte_md.append(f"- **CSV completo:** `REFERENCIAS_MULTIMEDIA_COMPLETO.csv`\n") - reporte_md.append(f"- **Reporte Markdown:** Este archivo\n") - reporte_md.append("\nEl archivo CSV contiene todas las referencias encontradas con detalles completos.\n") - - # Guardar reporte - reporte_path = BASE_DIR / "REPORTE_MULTIMEDIA_COMPLETO.md" - with open(reporte_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(reporte_md)) - - print(f"\n✅ Reporte generado: {reporte_path}") - print(f"✅ CSV generado: {csv_path}") - print(f"\n📊 Resumen:") - print(f" - Referencias encontradas: {len(resultados)}") - print(f" - Archivos faltantes: {len(referencias_faltantes)}") - print(f" - Archivos existentes: {len(referencias_existentes)}") - -if __name__ == "__main__": - generar_reporte_completo() diff --git a/copiar_archivos_manual.py b/copiar_archivos_manual.py deleted file mode 100644 index 613257b1..00000000 --- a/copiar_archivos_manual.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -""" -Copia los archivos .md del manual a public/manual/ para que sean accesibles vía fetch -""" - -import shutil -from pathlib import Path - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_SOURCE = BASE_DIR / "manual-tes" / "TES_Manual_Digital" -MANUAL_DEST = BASE_DIR / "public" / "manual" - -def copiar_archivos_manual(): - """Copia todos los archivos .md de los bloques a public/manual/""" - - # Crear directorio destino si no existe - MANUAL_DEST.mkdir(parents=True, exist_ok=True) - - # Contar archivos copiados - archivos_copiados = 0 - - # Buscar todas las carpetas BLOQUE_* - for bloque_dir in MANUAL_SOURCE.iterdir(): - if bloque_dir.is_dir() and bloque_dir.name.startswith("BLOQUE_"): - # Crear directorio destino para este bloque - bloque_dest = MANUAL_DEST / bloque_dir.name - bloque_dest.mkdir(parents=True, exist_ok=True) - - # Copiar todos los archivos .md del bloque - for archivo_md in bloque_dir.glob("*.md"): - if archivo_md.is_file(): - destino = bloque_dest / archivo_md.name - shutil.copy2(archivo_md, destino) - archivos_copiados += 1 - print(f"✅ Copiado: {bloque_dir.name}/{archivo_md.name}") - - print(f"\n✅ Total de archivos copiados: {archivos_copiados}") - print(f"📁 Ubicación destino: {MANUAL_DEST}") - -if __name__ == "__main__": - copiar_archivos_manual() diff --git a/deploy.sh b/deploy.sh index 376c33fc..a0086cac 100755 --- a/deploy.sh +++ b/deploy.sh @@ -95,11 +95,11 @@ if command -v pm2 &> /dev/null; then echo -e "${YELLOW} Reiniciando aplicación existente...${NC}" pm2 restart "$APP_NAME" || { echo -e "${YELLOW} Error al reiniciar, intentando iniciar...${NC}" - pm2 start ecosystem.config.js + pm2 start ecosystem.config.cjs } else echo -e "${YELLOW} Iniciando nueva instancia...${NC}" - pm2 start ecosystem.config.js + pm2 start ecosystem.config.cjs fi # Guardar configuración PM2 diff --git a/desplegar.sh b/desplegar.sh new file mode 100755 index 00000000..f04183e7 --- /dev/null +++ b/desplegar.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# Script interactivo para desplegar la aplicación +# Uso: ./desplegar.sh + +set -e + +# Colores +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +NC='\033[0m' + +echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}" +echo -e "${BLUE}🚀 DESPLIEGUE DE LA APLICACIÓN GUIA-TES${NC}" +echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}" +echo "" + +# Verificar herramientas disponibles +echo -e "${CYAN}Verificando herramientas disponibles...${NC}" +HAS_PM2=false +HAS_DOCKER=false +HAS_NODE=false + +if command -v pm2 &> /dev/null; then + HAS_PM2=true + echo -e "${GREEN}✓ PM2 disponible${NC}" +else + echo -e "${YELLOW}✗ PM2 no disponible${NC}" +fi + +if command -v docker &> /dev/null && (command -v docker-compose &> /dev/null || docker compose version &> /dev/null); then + HAS_DOCKER=true + echo -e "${GREEN}✓ Docker disponible${NC}" +else + echo -e "${YELLOW}✗ Docker no disponible${NC}" +fi + +if command -v node &> /dev/null && command -v npm &> /dev/null; then + HAS_NODE=true + echo -e "${GREEN}✓ Node.js y npm disponibles${NC}" +else + echo -e "${RED}✗ Node.js o npm no disponibles${NC}" + exit 1 +fi + +echo "" + +# Verificar si existe build +if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then + echo -e "${YELLOW}⚠️ No hay build de producción. Necesitas construir primero.${NC}" + echo -e "${CYAN}¿Construir ahora? (s/n):${NC} " + read -r BUILD_NOW + if [[ "$BUILD_NOW" =~ ^[Ss]$ ]]; then + echo -e "${YELLOW}Construyendo aplicación...${NC}" + npm run build + echo -e "${GREEN}✓ Build completado${NC}" + else + echo -e "${RED}No se puede desplegar sin build. Ejecuta: npm run build${NC}" + exit 1 + fi +else + echo -e "${GREEN}✓ Build encontrado en dist/${NC}" +fi + +echo "" +echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}" +echo -e "${CYAN}OPCIONES DE DESPLIEGUE:${NC}" +echo -e "${CYAN}═══════════════════════════════════════════════════════════${NC}" +echo "" +echo -e "1) ${GREEN}Deploy con PM2${NC} (Recomendado para servidor local/producción)" +echo -e " - Puerto: 8607" +echo -e " - Gestión automática de procesos" +echo -e " - Reinicio automático" +echo "" +if [ "$HAS_DOCKER" = true ]; then + echo -e "2) ${GREEN}Deploy con Docker${NC} (Recomendado para producción aislada)" + echo -e " - Puerto: 8607" + echo -e " - Contenedor aislado" + echo -e " - Fácil de escalar" + echo "" +fi +echo -e "3) ${GREEN}Servir localmente${NC} (Solo para pruebas)" +echo -e " - Puerto: 4173 (preview)" +echo -e " - No persiste después de cerrar terminal" +echo "" +echo -e "4) ${GREEN}Generar build para despliegue estático${NC}" +echo -e " - Para GitHub Pages, Netlify, Vercel" +echo -e " - Solo genera los archivos en dist/" +echo "" +echo -e "${CYAN}Selecciona una opción (1-4):${NC} " +read -r OPTION + +case $OPTION in + 1) + if [ "$HAS_PM2" = false ]; then + echo -e "${RED}PM2 no está instalado. Instálalo con: npm install -g pm2${NC}" + exit 1 + fi + echo "" + echo -e "${YELLOW}Ejecutando deploy con PM2...${NC}" + ./deploy.sh --skip-git + ;; + 2) + if [ "$HAS_DOCKER" = false ]; then + echo -e "${RED}Docker no está disponible${NC}" + exit 1 + fi + echo "" + echo -e "${YELLOW}Ejecutando deploy con Docker...${NC}" + ./deploy-docker.sh --skip-git + ;; + 3) + echo "" + echo -e "${YELLOW}Iniciando servidor de preview...${NC}" + echo -e "${GREEN}La aplicación estará disponible en: http://localhost:4173${NC}" + echo -e "${YELLOW}Presiona Ctrl+C para detener${NC}" + npm run preview + ;; + 4) + echo "" + echo -e "${YELLOW}Generando build de producción...${NC}" + npm run build + echo "" + echo -e "${GREEN}✓ Build completado en dist/${NC}" + echo -e "${CYAN}Para desplegar:${NC}" + echo -e " - GitHub Pages: Sube la carpeta dist/ a tu repositorio" + echo -e " - Netlify: Arrastra la carpeta dist/ a Netlify" + echo -e " - Vercel: Ejecuta 'vercel --prod' desde la raíz" + ;; + *) + echo -e "${RED}Opción inválida${NC}" + exit 1 + ;; +esac + +echo "" +echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}" +echo -e "${GREEN}✅ Proceso completado${NC}" +echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}" + diff --git a/docs/RESUMEN_MANUAL_TES.md b/docs/RESUMEN_MANUAL_TES.md index 874d24fc..7a2fa66f 100644 --- a/docs/RESUMEN_MANUAL_TES.md +++ b/docs/RESUMEN_MANUAL_TES.md @@ -1,8 +1,9 @@ # Resumen de Creación del Manual TES Digital **Fecha:** 2025 +**Última actualización:** 2025-12-23 **Archivo Creado:** `docs/MANUAL_TES_DIGITAL.md` -**Estado:** ✅ Completado +**Estado:** ✅ Completado y Desplegado --- @@ -12,6 +13,7 @@ - Propósito del manual - Aviso legal y responsabilidad médica - Versión y validación +- **Archivos:** `BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md`, `BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md` - **Etiquetas:** [DOC] ### 2. Principios Generales @@ -22,26 +24,38 @@ - **Etiquetas:** [APP], [DOC] ### 3. Procedimientos Básicos TES -- RCP Adulto SVB [APP] -- RCP Adulto SVA [APP] -- RCP Pediátrico [APP] -- OVACE [APP] -- Shock hemorrágico [APP] -- Inmovilización espinal [APP] -- Extricación vehicular [APP] +- RCP Adulto SVB [APP] - `BLOQUE_04_1_RCP_ADULTOS.md` +- RCP Adulto SVA [APP] - `BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md` +- RCP Pediátrico [APP] - `BLOQUE_04_2_RCP_PEDIATRIA.md`, `BLOQUE_04_3_RCP_LACTANTES.md` +- OVACE [APP] - `BLOQUE_04_6_OVACE_ADULTOS.md`, `BLOQUE_04_7_OVACE_PEDIATRIA.md`, `BLOQUE_04_8_OVACE_LACTANTES.md` +- Uso DESA [APP] - `BLOQUE_04_4_USO_DESA.md` +- Inmovilización espinal [APP] - `BLOQUE_02_5_TABLERO_ESPINAL.md`, `BLOQUE_02_3_COLLARIN_CERVICAL.md` +- Extricación vehicular [APP] - `BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md` +- Material e inmovilización [APP] - 14 archivos en BLOQUE_2 - **Etiquetas:** [APP] ### 4. Protocolos Transtelefónicos -- Introducción [DOC] -- PCR (adultos, niños, lactantes) [APP] [IA_FUTURA] -- DESA guiado por teléfono [APP] [IA_FUTURA] -- OVACE transtelefónica (adultos, niños, lactantes) [APP] [IA_FUTURA] -- SCA (identificación y atención precoz) [APP] [IA_FUTURA] +- Introducción [DOC] - `BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md` +- PCR transtelefónica [APP] [IA_FUTURA] - `BLOQUE_05_1_PCR_TRANSTELEFONICA.md` +- OVACE transtelefónica [APP] [IA_FUTURA] - `BLOQUE_05_2_OVACE_TRANSTELEFONICA.md` +- SCA transtelefónico [APP] [IA_FUTURA] - `BLOQUE_05_3_SCA_TRANSTELEFONICO.md` +- Ictus transtelefónico [APP] [IA_FUTURA] - `BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md` +- Anafilaxia transtelefónica [APP] [IA_FUTURA] - `BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md` +- Crisis asmática transtelefónica [APP] [IA_FUTURA] - `BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md` +- Hipoglucemia transtelefónica [APP] [IA_FUTURA] - `BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md` +- **Total:** 10 archivos en BLOQUE_5 - **Etiquetas:** [APP], [DOC], [IA_FUTURA] ### 5. Vademécum y Abreviaturas -- Vademécum de fármacos (5 fármacos) [APP] -- Abreviaturas comunes [DOC] +- Vademécum operativo [APP] - `BLOQUE_06_1_VADEMECUM_OPERATIVO.md` +- Oxígeno: administración y seguridad [APP] - `BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md` +- Adrenalina: uso en anafilaxia y RCP [APP] - `BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md` +- Aspirina: uso en SCA [APP] - `BLOQUE_06_4_ASPIRINA_USO_SCA.md` +- Glucagón: uso en hipoglucemia [APP] - `BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md` +- Salbutamol: uso en crisis asmática [APP] - `BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md` +- Abreviaturas y terminología [DOC] - `BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md` +- Principios de administración [APP] - `BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md` +- **Total:** 8 archivos en BLOQUE_6 - **Etiquetas:** [APP], [DOC] ### 6. Conducción y Seguridad Vial @@ -91,10 +105,11 @@ - ✅ SCA (identificación y atención precoz) **Vademécum:** -- ✅ 5 fármacos de emergencia (Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol) -- ✅ Dosis adulto y pediátrica -- ✅ Indicaciones y contraindicaciones -- ✅ Vías de administración +- ✅ 6 fármacos principales de emergencia (Oxígeno, Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol) +- ✅ Dosis adulto y pediátrica detalladas +- ✅ Indicaciones y contraindicaciones completas +- ✅ Vías de administración y diluciones +- ✅ Puntos críticos TES específicos **Calculadoras:** - ✅ Escala de Coma de Glasgow (GCS) @@ -211,12 +226,14 @@ ## 📊 ESTADÍSTICAS DEL MANUAL ### Contenido Total -- **Líneas:** ~1,200 líneas -- **Capítulos:** 9 capítulos principales -- **Subsecciones:** ~50 subsecciones -- **Protocolos:** 15+ protocolos documentados -- **Fármacos:** 5 fármacos en vademécum -- **Patologías:** 10 patologías por sistemas +- **Archivos .md:** 94 archivos en `public/manual/` +- **Bloques temáticos:** 17 bloques/carpetas principales (BLOQUE_0 a BLOQUE_15 + otros) +- **Líneas totales:** ~47,410 líneas de contenido +- **Subsecciones:** 94 capítulos/secciones documentados +- **Protocolos:** 20+ protocolos documentados +- **Fármacos:** 6 fármacos principales en vademécum (Oxígeno, Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol) +- **Patologías:** 10 patologías por sistemas documentadas +- **Calculadoras:** 10+ herramientas (Glasgow, perfusiones, dosis pediátricas, etc.) ### Distribución por Etiquetas - **[APP]:** ~70% del contenido @@ -226,60 +243,84 @@ ### Fuentes de Contenido Unificadas - ✅ Plan maestro (protocolos transtelefónicos) - ✅ `src/data/procedures.ts` (protocolos básicos) -- ✅ `src/data/drugs.ts` (vademécum) -- ✅ `src/data/calculators.ts` (Glasgow, perfusiones) -- ✅ `src/pages/Patologias.tsx` (patologías) +- ✅ `src/data/drugs.ts` (vademécum con 6 fármacos principales) +- ✅ `src/data/calculators.ts` (Glasgow, perfusiones, calculadoras) +- ✅ `src/pages/Patologias.tsx` (10 patologías por sistemas) - ✅ `src/pages/Escena.tsx` (seguridad, ABCDE, triage) +- ✅ `public/manual/` (94 archivos .md organizados en 15 bloques) --- ## ✅ ESTADO FINAL -### Completado -- ✅ Manual unificado creado -- ✅ Todo el contenido clínico recopilado -- ✅ Estructura por capítulos lógica +### Completado ✅ +- ✅ Manual unificado creado (`docs/MANUAL_TES_DIGITAL.md`) +- ✅ Manual estructurado completo (94 archivos en `public/manual/`) +- ✅ Todo el contenido clínico recopilado y organizado +- ✅ Estructura por bloques lógica (17 bloques temáticos) - ✅ Etiquetado correcto ([APP], [DOC], [IA_FUTURA]) - ✅ Sin duplicados - ✅ Contenido ordenado y estructurado - ✅ Capítulo de evolución incluido +- ✅ **Aplicación desplegada y funcionando** (Puerto 8607) +- ✅ PWA funcional con service worker +- ✅ Navegación y búsqueda implementadas +- ✅ Componentes React para visualización del manual ### Pendiente (No bloqueante) -- ⏳ Validación médica del contenido -- ⏳ Implementación en aplicación (Fase 2) -- ⏳ Desarrollo de flujos interactivos (Fase 3) +- ⏳ Validación médica del contenido completo +- ⏳ Revisión contra guías oficiales (ERC, AHA, SEMES) +- ⏳ Desarrollo de flujos interactivos avanzados (Fase 3) - ⏳ Integración de IA (Fase 4, futuro) --- ## 🎯 PRÓXIMOS PASOS RECOMENDADOS -### Inmediato -1. **Validación Médica** +### Inmediato (Prioridad Alta) +1. **Validación Médica** ⚠️ - Revisión por profesionales médicos especializados - Validación contra guías oficiales (ERC, AHA, SEMES) - Corrección de errores o inconsistencias + - **Estado:** Pendiente - Requerido antes de uso en producción -2. **Implementación [APP]** - - Convertir contenido [APP] en aplicación digital - - Crear UI para protocolos transtelefónicos - - Integrar vademécum y calculadoras +2. **Mejoras de la Aplicación** ✅ (En progreso) + - ✅ Aplicación desplegada y funcionando + - ✅ Navegación del manual implementada + - ✅ Vademécum y calculadoras integradas + - ⏳ Optimización de rendimiento + - ⏳ Mejoras de UX/UI ### Medio Plazo -3. **Flujos Interactivos** - - Desarrollar árboles de decisión - - Implementar validación de pasos - - Crear navegación condicional +3. **Flujos Interactivos Avanzados** + - Desarrollar árboles de decisión interactivos + - Implementar validación de pasos en protocolos + - Crear navegación condicional según respuestas + - Checklists interactivos con validación + +4. **Contenido Adicional** + - Expandir vademécum con más fármacos + - Añadir más protocolos transtelefónicos + - Incluir más casos clínicos y ejemplos ### Largo Plazo -4. **IA de Apoyo (si se valida seguridad)** - - Análisis de audio para validación de técnica - - Sugerencias contextuales - - Aprendizaje continuo +5. **IA de Apoyo (si se valida seguridad)** + - Análisis de audio para validación de técnica RCP + - Sugerencias contextuales durante protocolos + - Aprendizaje continuo y mejora de recomendaciones + - **Importante:** Solo después de validación médica completa --- **Manual creado exitosamente** ✅ -El manual `MANUAL_TES_DIGITAL.md` es ahora la **fuente de verdad** del proyecto, conteniendo todo el contenido clínico y operativo unificado y estructurado, listo para su validación médica y posterior implementación en aplicación digital. +El proyecto contiene: +- **Manual unificado:** `docs/MANUAL_TES_DIGITAL.md` - Documento consolidado de referencia +- **Manual estructurado:** `public/manual/` - 94 archivos .md organizados en 15 bloques temáticos +- **Aplicación funcional:** Desplegada y corriendo en http://localhost:8607 + +El contenido está completamente estructurado y listo para su validación médica y posterior evolución a aplicación digital interactiva. + +**Última actualización:** 2025-12-23 +**Estado:** ✅ Aplicación desplegada y funcionando diff --git a/docs/RESUMEN_MATERIAL_OXIGENOTERAPIA.md b/docs/RESUMEN_MATERIAL_OXIGENOTERAPIA.md deleted file mode 100644 index 58cfdadb..00000000 --- a/docs/RESUMEN_MATERIAL_OXIGENOTERAPIA.md +++ /dev/null @@ -1,204 +0,0 @@ -# Resumen: Añadida Sección Material y Oxigenoterapia - -**Fecha:** 2025-12-23 -**Archivo Modificado:** `docs/MANUAL_TES_DIGITAL.md` -**Sección Añadida:** 3.8 Procedimientos Básicos TES – Material y Oxigenoterapia - ---- - -## ✅ SECCIÓN AÑADIDA - -### 3.8 Procedimientos Básicos TES – Material y Oxigenoterapia - -**Ubicación:** Dentro de la sección 3 "Procedimientos Básicos TES", como subsección 3.8, después de "3.7 Extricación Vehicular" - -**Subsecciones Incluidas:** - -#### 3.8.1 Manejo Básico de Material Sanitario [APP] [DOC] -- Collarines cervicales (selección de talla, colocación básica) -- Férulas (rígidas, neumáticas, de vacío) -- Camilla, férno y sistemas de inmovilización -- Consideraciones generales de seguridad -- Errores frecuentes a evitar - -#### 3.8.2 Oxigenoterapia [APP] [DOC] -- Indicaciones generales de administración de oxígeno -- Dispositivos habituales: - - Gafas nasales - - Mascarilla simple - - Mascarilla con reservorio - - Venturi - - Bolsa autoinflable (Ambú) -- Rangos orientativos de FiO2 por dispositivo -- Tabla de referencia rápida -- Recomendaciones generales de uso y seguridad - -#### 3.8.3 Cálculo de Duración de una Botella de Oxígeno [APP] [IA_FUTURA] -- Fórmula práctica: (Presión en bar × Volumen) ÷ Flujo en L/min -- Ejemplos prácticos: - - Botella de 2 L - - Botella de 5 L - - Botella de 10 L -- Consideración de margen de seguridad (20%) -- Advertencias operativas (no apurar botellas) -- Tabla de referencia rápida por flujo - -#### 3.8.4 Recomendaciones Generales de Uso de Dispositivos [APP] [DOC] -- Salvafast (cánula orofaríngea) -- Ambú (bolsa autoinflable) -- Aspirador de secreciones -- Monitor / pulsioxímetro -- Electrodos (colocación básica y errores frecuentes) - -#### 3.8.5 Preparación para Evolución Digital [IA_FUTURA] -- Checklists visuales -- Calculadoras automáticas -- Infografías -- Recordatorios inteligentes (no diagnósticos) -- Casos de uso seguros para IA - ---- - -## 📋 RELACIÓN APP / DOC / IA_FUTURA - -### [APP] - Contenido para Intervención Rápida (~60%) - -**Incluye:** -- ✅ Selección y colocación de collarines cervicales -- ✅ Tipos y uso de férulas -- ✅ Sistemas de inmovilización -- ✅ Selección de dispositivo de O2 según situación -- ✅ Rangos de FiO2 por dispositivo -- ✅ Cálculo de duración de botella de O2 -- ✅ Uso de Salvafast, Ambú, aspirador -- ✅ Colocación de electrodos -- ✅ Tablas de referencia rápida - -**Características:** -- Consulta rápida durante intervención -- Checklists operativos -- Cálculos prácticos -- Errores frecuentes a evitar - -### [DOC] - Contenido Formativo (~35%) - -**Incluye:** -- ✅ Consideraciones generales de seguridad -- ✅ Principios de oxigenoterapia -- ✅ Indicaciones y contraindicaciones -- ✅ Técnicas de uso de dispositivos -- ✅ Recomendaciones de seguridad - -**Características:** -- Lectura pausada -- Formación y referencia -- Contexto y fundamentos - -### [IA_FUTURA] - Asistencia Inteligente Segura (~5%) - -**Incluye:** -- ✅ Calculadoras automáticas (duración de botella) -- ✅ Checklists visuales interactivos -- ✅ Recordatorios inteligentes (no diagnósticos) -- ✅ Validación de técnica (procedimental) - -**Principios de Seguridad:** -- ❌ NO diagnóstico de necesidad de O2 -- ❌ NO interpretación de ECG -- ❌ NO decisión de cambio de dispositivo sin validación humana -- ✅ Solo apoyo procedimental y cálculos - ---- - -## 📊 CONTENIDO AÑADIDO - -### Estadísticas -- **Líneas añadidas:** ~400 líneas -- **Subsecciones:** 5 subsecciones principales -- **Tablas:** 2 tablas de referencia rápida -- **Checklists:** Múltiples listas de verificación -- **Errores frecuentes:** Documentados en cada dispositivo - -### Contenido Específico - -**Material Sanitario:** -- 3 tipos de férulas documentados -- 3 sistemas de inmovilización -- 4 errores frecuentes por categoría - -**Oxigenoterapia:** -- 5 dispositivos documentados -- Tabla de rangos de FiO2 -- 6 indicaciones generales -- Consideraciones especiales para EPOC - -**Cálculo de Botellas:** -- Fórmula práctica -- 3 ejemplos con diferentes tamaños -- Tabla de referencia rápida (3 tamaños × 3 flujos) -- Margen de seguridad del 20% - -**Dispositivos:** -- 5 dispositivos documentados -- Técnicas de uso -- Errores frecuentes por dispositivo -- Consideraciones de seguridad - ---- - -## ✅ ELEMENTOS INCLUIDOS - -### Notas de Seguridad -- ✅ Nota de seguridad al inicio de la sección -- ✅ Nota final de seguridad -- ✅ Advertencias operativas en cada subsección -- ✅ Errores frecuentes documentados - -### Preparación para Evolución Digital -- ✅ Checklists visuales futuros -- ✅ Calculadoras automáticas -- ✅ Infografías -- ✅ Recordatorios inteligentes (no diagnósticos) -- ✅ Casos de uso seguros para IA documentados - -### Actualización del Índice -- ✅ Índice actualizado con enlace a nueva sección - ---- - -## 📝 ARCHIVO MODIFICADO - -**Archivo:** `docs/MANUAL_TES_DIGITAL.md` - -**Cambios Realizados:** -1. ✅ Añadida sección 3.8 completa -2. ✅ Actualizado índice con enlace a nueva sección -3. ✅ Mantenido formato y estructura existente -4. ✅ No se modificó contenido existente - -**Estado:** -- ✅ Sección añadida incrementalmente -- ✅ Sin sobrescritura de contenido -- ✅ Estructura clara y delimitada -- ✅ Etiquetado correcto [APP] [DOC] [IA_FUTURA] - ---- - -## 🎯 PRÓXIMOS PASOS SUGERIDOS - -### Inmediato -- [ ] Validación médica del contenido añadido -- [ ] Revisión de cálculos y fórmulas -- [ ] Verificación de rangos de FiO2 - -### Implementación -- [ ] Convertir a formato checklist para APP -- [ ] Crear calculadora automática de duración de botella -- [ ] Diseñar infografías de colocación de dispositivos - ---- - -**Sección añadida exitosamente** ✅ - -El manual ahora incluye procedimientos básicos de material sanitario y oxigenoterapia, listo para validación médica y posterior implementación en aplicación digital. - diff --git a/docs/archivo/ANALISIS_COMPLETO_FALTANTE.md b/docs/archivo/ANALISIS_COMPLETO_FALTANTE.md deleted file mode 100644 index d7214d85..00000000 --- a/docs/archivo/ANALISIS_COMPLETO_FALTANTE.md +++ /dev/null @@ -1,331 +0,0 @@ -# 🔍 Análisis Completo: ¿Qué Falta en la App? - -**Fecha:** 2025-12-23 (Actualizado - Última revisión: 2025-12-23) -**Versión de la App:** 1.0.0 - ---- - -## 📊 RESUMEN EJECUTIVO - -| Categoría | Estado | Completitud | -|-----------|--------|-------------| -| **Funcionalidades Core** | ✅ 99% | Casi completo | -| **PWA / Offline** | ✅ 95% | Implementado | -| **Contenido** | ⚠️ 75% | Parcial | -| **UX / Persistencia** | ✅ 95% | Implementado | -| **Búsqueda / Compartir** | ✅ 90% | Implementado | -| **Optimización** | ✅ 100% | Completado | -| **Contenido Visual** | ⚠️ 60% | En progreso | -| **Validación / Tests** | ❌ 0% | No implementado | - ---- - -## ✅ LO QUE YA FUNCIONA (98%) - -### 🎯 Funcionalidades Core -- ✅ **Navegación completa** - Todas las rutas funcionan -- ✅ **Búsqueda global** - Busca en protocolos y fármacos -- ✅ **9 Calculadoras** - Todas funcionales -- ✅ **Vademécum de fármacos** - Completo y navegable -- ✅ **Protocolos de emergencia** - RCP, Ictus, Shock, Vía Aérea -- ✅ **Manual completo** - Navegable por partes/bloques/capítulos -- ✅ **PWA básica** - Service Worker registrado y funcionando -- ✅ **Sistema de actualizaciones** - Detecta y notifica nuevas versiones -- ✅ **Compartir App** - Web Share API implementado -- ✅ **Favoritos persistentes** - localStorage implementado -- ✅ **Historial de búsquedas** - sessionStorage implementado -- ✅ **Página de Favoritos** - `/favoritos` funcional -- ✅ **Página de Historial** - `/historial` funcional -- ✅ **Página de Ajustes** - `/ajustes` con tema y limpieza de datos -- ✅ **Página Acerca de** - `/acerca` con información de la app -- ✅ **Galería de imágenes** - `/galeria` con todas las infografías -- ✅ **Error Boundaries** - Implementado y activo - -### 📱 PWA / Offline -- ✅ **Service Worker** - Registrado y activo -- ✅ **Cache de assets** - JS, CSS, HTML cacheados -- ✅ **Cache de imágenes** - Configurado para `/assets/infografias/` -- ✅ **Actualizaciones automáticas** - Sistema implementado -- ✅ **Manifest.json** - Configurado correctamente -- ✅ **Banner de instalación** - Implementado con fallback dev -- ✅ **Indicador offline** - Mostrado en Header (Wifi/WifiOff) - -### 🎨 Contenido Visual -- ✅ **48 imágenes organizadas** - En `public/assets/infografias/` -- ✅ **Galería de imágenes** - Vista completa con filtros por bloque -- ✅ **~20 referencias en Markdown** - Imágenes visibles en capítulos críticos - - Collarín Cervical (10 imágenes) - - Triage START (1 imagen) - - ABCDE (1 imagen) - - Constantes Vitales (4 imágenes) - - Oxigenoterapia (3 imágenes) - - BVM (2 imágenes) - - Cánulas (1 imagen) - - Protocolos Transtelefónicos (2 imágenes) - ---- - -## ⚠️ LO QUE FALTA O ESTÁ INCOMPLETO - -### 🔴 ALTA PRIORIDAD (Funcionalidad Core) - -#### 1. Contenido Visual (60% implementado) -- ⚠️ **Más referencias en Markdown** (~15% hecho) - - Estado: 20 referencias añadidas de ~130 capítulos - - Impacto: Muchos capítulos aún sin imágenes visibles - - Esfuerzo: Alto (manual, ~15-20 horas más) - - Progreso: Se añaden progresivamente - -- ❌ **21 Medios Visuales Faltantes** (documentados) - - Estado: Documentados en `SUGERENCIAS_MEDIOS_VISUALES.md` - - Impacto: Temas críticos sin visualización - - Esfuerzo: Alto (creación de medios, ~40-60 horas) - - Prioridad: Alta para RCP paso a paso, Glasgow visual, Farmacología - -- ❌ **~90 Capítulos sin imágenes** - - Estado: Mayoría de capítulos sin medios visuales - - Impacto: Contenido menos accesible - - Esfuerzo: Muy alto (creación masiva, ~200+ horas) - - Prioridad: Media (ir añadiendo progresivamente) - -#### 2. Páginas de Error (50% implementado) -- ✅ **Error Boundaries** - Implementado -- ❌ **Páginas de error personalizadas** (mejora) - - Estado: Solo 404 básico y ErrorBoundary genérico - - Impacto: UX mejorable en errores específicos - - Esfuerzo: Bajo (1-2 horas) - - Prioridad: Media - ---- - -### 🟡 MEDIA PRIORIDAD (Mejoras UX) - -#### 3. Búsqueda Avanzada (✅ 100% implementado) -- ✅ **Filtros por categoría** - - Estado: Implementado con filtros dinámicos - - Impacto: Fácil encontrar contenido específico - - Esfuerzo: Completado (4-6 horas) - - Fecha: 2025-12-23 - -- ⚠️ **Búsqueda por tags** - - Estado: No implementado (filtros por categoría cubren la necesidad) - - Impacto: Bajo (los filtros existentes son suficientes) - - Esfuerzo: Opcional (3-4 horas si se requiere en el futuro) - -#### 4. Compartir / Exportar (✅ 80% implementado) -- ✅ **Compartir App** - Implementado -- ✅ **Compartir protocolos específicos** - - Estado: Implementado con Web Share API + clipboard fallback - - Impacto: Los usuarios pueden compartir protocolos individuales - - Esfuerzo: Completado (3-4 horas) - - Fecha: 2025-12-23 - - Funcionalidad: Botón de compartir en ProcedureCard y DrugCard - -- ✅ **Deep links a protocolos** - - Estado: Implementado (URLs con ?id=) - - Impacto: Enlaces directos a contenido funcionando - - Esfuerzo: Completado (incluido en compartir) - - Fecha: 2025-12-23 - -- ❌ **Exportar a PDF** - - Estado: No implementado - - Impacto: No se pueden guardar protocolos offline - - Esfuerzo: Alto (6-8 horas) - -#### 5. Optimización de Performance (0% implementado) -- ❌ **Lazy loading de componentes** - - Estado: Todo se carga al inicio - - Impacto: Bundle grande (1.2MB) - - Esfuerzo: Medio (4-6 horas) - -- ❌ **Code splitting** - - Estado: No implementado - - Impacto: Carga inicial lenta - - Esfuerzo: Medio (3-4 horas) - -#### 6. Contenido Adicional -- ❌ **Expandir vademécum** (5 → 30-40 fármacos) - - Estado: Solo 5 fármacos base - - Impacto: Vademécum incompleto - - Esfuerzo: Alto (20-30 horas, requiere validación médica) - -- ❌ **Interacciones medicamentosas** - - Estado: No implementado - - Impacto: Información incompleta - - Esfuerzo: Alto (15-20 horas, requiere validación médica) - ---- - -### 🟢 BAJA PRIORIDAD (Nice to Have) - -#### 7. Analytics / Tracking (0% implementado) -- ❌ **Analytics locales** (opcional, con consentimiento) - - Estado: No implementado - - Impacto: No hay métricas de uso - - Esfuerzo: Medio (4-6 horas) - -#### 8. Tests (0% implementado) -- ❌ **Tests unitarios** - - Estado: No implementado - - Impacto: Riesgo de regresiones - - Esfuerzo: Alto (20-30 horas) - -- ❌ **Tests de integración** - - Estado: No implementado - - Impacto: No hay validación automática - - Esfuerzo: Alto (15-20 horas) - -- ❌ **Tests E2E** - - Estado: No implementado - - Impacto: No hay validación de flujos completos - - Esfuerzo: Muy alto (30-40 horas) - -#### 9. Notificaciones (0% implementado) -- ❌ **Notificaciones push** - - Estado: No implementado - - Impacto: No hay alertas - - Esfuerzo: Alto (requiere backend, 10-15 horas) - -#### 10. Autenticación / Sincronización (0% implementado) -- ❌ **Sistema de usuarios** - - Estado: No implementado - - Impacto: No hay personalización entre dispositivos - - Esfuerzo: Muy alto (requiere backend, 40-60 horas) - ---- - -## 📋 CHECKLIST DETALLADO POR CATEGORÍA - -### Funcionalidades Core -- [x] Navegación completa -- [x] Búsqueda básica -- [x] **Búsqueda avanzada con filtros** ✅ -- [x] Calculadoras (9) -- [x] Vademécum -- [x] Protocolos -- [x] Manual completo -- [x] **Favoritos persistentes** ✅ -- [x] **Historial real** ✅ -- [x] **Página de favoritos** ✅ -- [x] **Página de ajustes** ✅ -- [x] **Página acerca de** ✅ -- [x] **Galería de imágenes** ✅ -- [x] **Error Boundaries** ✅ -- [x] **Compartir protocolos específicos** ✅ -- [x] **Compartir fármacos específicos** ✅ -- [x] **Deep links** ✅ - -### PWA / Offline -- [x] Service Worker registrado -- [x] Cache de assets -- [x] Cache de imágenes -- [x] Sistema de actualizaciones -- [x] Manifest.json -- [x] Banner de instalación -- [x] Indicador visual offline -- [ ] **Test offline completo** ⚠️ (requiere servidor) - -### Contenido Visual -- [x] 48 imágenes organizadas -- [x] Galería de imágenes funcional -- [x] **Referencias en Markdown** ⚠️ (~15% hecho, 20 referencias de ~130 capítulos) -- [ ] **21 medios faltantes** ❌ (documentados) -- [ ] **Medios para ~90 capítulos** ❌ (sin imágenes) - -### Error Handling -- [x] **Error Boundaries** ✅ -- [ ] **Páginas de error personalizadas** ⚠️ (mejora, no crítico) -- [x] **Manejo de errores global** ✅ - -### Performance -- [x] **Lazy loading** ✅ -- [x] **Code splitting** ✅ -- [x] **Optimización de bundle** ✅ - -### Contenido -- [ ] **Expandir vademécum** ❌ (5 → 30-40) -- [ ] **Interacciones medicamentosas** ❌ -- [ ] **Validación médica** ⚠️ (pendiente) - -### Tests -- [ ] **Tests unitarios** ❌ -- [ ] **Tests de integración** ❌ -- [ ] **Tests E2E** ❌ - ---- - -## 🎯 PLAN DE ACCIÓN RECOMENDADO - -### Fase 1: Completar Contenido Visual (2-3 semanas) -1. **Añadir más referencias de imágenes en Markdown** (15-20 horas) - - Priorizar capítulos críticos restantes (RCP, Glasgow, Farmacología) - - Ir añadiendo progresivamente - -2. **Crear 5-6 medios críticos faltantes** (20-30 horas) - - RCP paso a paso visual - - ABCDE visual completo - - Glasgow visual - - Farmacología básica visual - -**Total:** ~35-50 horas - -### Fase 2: Mejoras UX (✅ COMPLETADA) -1. ✅ **Búsqueda avanzada** (4-6 horas) - Completado -2. ✅ **Compartir protocolos** (3-4 horas) - Completado -3. ✅ **Deep links** (2-3 horas) - Completado -4. ⚠️ **Mejorar páginas de error** (1-2 horas) - Pendiente (baja prioridad) - -**Total:** ✅ ~10-15 horas completadas - -### Fase 3: Optimización (✅ COMPLETADA) -1. ✅ **Lazy loading** (4-6 horas) - Completado -2. ✅ **Code splitting** (3-4 horas) - Completado - -**Total:** ✅ ~7-10 horas completadas - ---- - -## 📊 ESTIMACIÓN TOTAL - -| Fase | Esfuerzo | Prioridad | Estado | -|------|----------|-----------|--------| -| **Fase 1: Visual** | 35-50 horas | 🔴 Alta | ⚠️ En progreso (60%) | -| **Fase 2: UX** | 10-15 horas | 🟡 Media | ✅ **COMPLETADA** | -| **Fase 3: Optimización** | 7-10 horas | 🟡 Media | ✅ **COMPLETADA** | -| **Total completado** | **~17-25 horas** | | ✅ | -| **Total pendiente** | **35-50 horas** | | ⚠️ | - -**Tiempo estimado restante:** 1-1.5 meses (trabajo part-time) - Solo Fase 1 pendiente - ---- - -## 🚨 BLOQUEADORES CRÍTICOS - -1. **Validación médica del contenido** - - Estado: Pendiente - - Impacto: No se puede publicar sin validación - - Acción: Contactar profesionales médicos - -2. **Creación de medios visuales faltantes** - - Estado: Documentados pero no creados - - Impacto: Temas críticos sin visualización - - Acción: Crear medios prioritarios (RCP, Glasgow, ABCDE) - ---- - -## ✅ CONCLUSIÓN - -**Estado actual:** La app está **99% funcional** en términos de funcionalidades core. - -**Lo que falta principalmente:** -1. **Contenido visual** (más referencias en Markdown, crear medios faltantes) - ⚠️ 60% completado -2. ~~**Búsqueda avanzada** (filtros, tags)~~ - ✅ **COMPLETADO** -3. ~~**Compartir/exportar** (protocolos específicos, PDF)~~ - ✅ **80% COMPLETADO** (falta solo PDF) -4. ~~**Optimización** (lazy loading, code splitting)~~ - ✅ **COMPLETADO** -5. **Expandir contenido** (vademécum, interacciones) - ❌ Pendiente - -**Prioridad inmediata:** Completar contenido visual (Fase 1) para tener una app visualmente completa. - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/ASSETS_PLAN.md b/docs/archivo/ASSETS_PLAN.md deleted file mode 100644 index 8f714e30..00000000 --- a/docs/archivo/ASSETS_PLAN.md +++ /dev/null @@ -1,101 +0,0 @@ -# PLAN DE RECURSOS MULTIMEDIA - Manual TES Digital -**Generado:** 2025-12-14 12:17:44 ---- -## 1. RECURSOS MVP (Prioridad: Sí) -| Capítulo | Tipo Recurso | Nombre Recurso | Ruta Sugerida | Prioridad | Estado | Prompt | -|----------|--------------|----------------|---------------|-----------|--------|--------| -| 1.1 | Imagen paso a paso (colocación/uso) | Colocación manguito TA y pulsioxímetro | `assets/images/bloque_01/B01_1.1_colocación_manguito_ta_y_pulsioxímetro.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Colocación manguito TA y pulsioxímetro. Requisitos: sin dato... (ver Excel) | -| 2.0 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.0 | `assets/images/bloque_02/B02_2.0_foto_del_equipo_dispositivo_principal_relacionado_con_2_0.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.0. R... (ver Excel) | -| 2.1 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.1 | `assets/images/bloque_02/B02_2.1_foto_del_equipo_dispositivo_principal_relacionado_con_2_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.1. R... (ver Excel) | -| 2.2 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.2 | `assets/images/bloque_02/B02_2.2_foto_del_equipo_dispositivo_principal_relacionado_con_2_2.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.2. R... (ver Excel) | -| 2.3 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.3 | `assets/images/bloque_02/B02_2.3_foto_del_equipo_dispositivo_principal_relacionado_con_2_3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.3. R... (ver Excel) | -| 2.3 | Imagen error común vs correcto | Correcto vs incorrecto para 2.3 | `assets/images/bloque_02/B02_2.3_correcto_vs_incorrecto_para_2_3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 2.3. Requisitos: sin datos perso... (ver Excel) | -| 2.4 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.4 | `assets/images/bloque_02/B02_2.4_foto_del_equipo_dispositivo_principal_relacionado_con_2_4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.4. R... (ver Excel) | -| 2.4 | Vídeo demo (30-90s) | Vídeo montaje/uso del dispositivo | `assets/videos/bloque_02/B02_2.4_vídeo_montaje_uso_del_dispositivo.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo montaje/uso del dispositivo. Con maniquí o simulación, ... (ver Excel) | -| 2.5 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.5 | `assets/images/bloque_02/B02_2.5_foto_del_equipo_dispositivo_principal_relacionado_con_2_5.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.5. R... (ver Excel) | -| 2.5 | Vídeo demo (30-90s) | Vídeo montaje/uso del dispositivo | `assets/videos/bloque_02/B02_2.5_vídeo_montaje_uso_del_dispositivo.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo montaje/uso del dispositivo. Con maniquí o simulación, ... (ver Excel) | -| 2.6 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.6 | `assets/images/bloque_02/B02_2.6_foto_del_equipo_dispositivo_principal_relacionado_con_2_6.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.6. R... (ver Excel) | -| 2.6 | Vídeo demo (30-90s) | Vídeo montaje/uso del dispositivo | `assets/videos/bloque_02/B02_2.6_vídeo_montaje_uso_del_dispositivo.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo montaje/uso del dispositivo. Con maniquí o simulación, ... (ver Excel) | -| 2.7 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.7 | `assets/images/bloque_02/B02_2.7_foto_del_equipo_dispositivo_principal_relacionado_con_2_7.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.7. R... (ver Excel) | -| 2.7 | Vídeo demo (30-90s) | Vídeo movimientos en bloque / transferencias | `assets/videos/bloque_02/B02_2.7_vídeo_movimientos_en_bloque_transferencias.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo movimientos en bloque / transferencias. Con maniquí o s... (ver Excel) | -| 2.8 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.8 | `assets/images/bloque_02/B02_2.8_foto_del_equipo_dispositivo_principal_relacionado_con_2_8.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.8. R... (ver Excel) | -| 2.8 | Vídeo demo (30-90s) | Vídeo movimientos en bloque / transferencias | `assets/videos/bloque_02/B02_2.8_vídeo_movimientos_en_bloque_transferencias.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo movimientos en bloque / transferencias. Con maniquí o s... (ver Excel) | -| 2.9 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.9 | `assets/images/bloque_02/B02_2.9_foto_del_equipo_dispositivo_principal_relacionado_con_2_9.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.9. R... (ver Excel) | -| 2.10 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.10 | `assets/images/bloque_02/B02_2.10_foto_del_equipo_dispositivo_principal_relacionado_con_2_10.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.10. ... (ver Excel) | -| 2.10 | Imagen error común vs correcto | Correcto vs incorrecto para 2.10 | `assets/images/bloque_02/B02_2.10_correcto_vs_incorrecto_para_2_10.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 2.10. Requisitos: sin datos pers... (ver Excel) | -| 2.11 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.11 | `assets/images/bloque_02/B02_2.11_foto_del_equipo_dispositivo_principal_relacionado_con_2_11.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.11. ... (ver Excel) | -| 2.11 | Imagen error común vs correcto | Correcto vs incorrecto para 2.11 | `assets/images/bloque_02/B02_2.11_correcto_vs_incorrecto_para_2_11.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 2.11. Requisitos: sin datos pers... (ver Excel) | -| 2.11 | Imagen paso a paso (colocación/uso) | Binder: colocación en trocánteres | `assets/images/bloque_02/B02_2.11_binder_colocación_en_trocánteres.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Binder: colocación en trocánteres. Requisitos: sin datos per... (ver Excel) | -| 2.11 | Vídeo demo (30-90s) | Vídeo binder: colocación y verificación | `assets/videos/bloque_02/B02_2.11_vídeo_binder_colocación_y_verificación.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo binder: colocación y verificación. Con maniquí o simula... (ver Excel) | -| 2.12 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.12 | `assets/images/bloque_02/B02_2.12_foto_del_equipo_dispositivo_principal_relacionado_con_2_12.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.12. ... (ver Excel) | -| 2.12 | Imagen error común vs correcto | Correcto vs incorrecto para 2.12 | `assets/images/bloque_02/B02_2.12_correcto_vs_incorrecto_para_2_12.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 2.12. Requisitos: sin datos pers... (ver Excel) | -| 2.13 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.13 | `assets/images/bloque_02/B02_2.13_foto_del_equipo_dispositivo_principal_relacionado_con_2_13.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.13. ... (ver Excel) | -| 2.13 | Imagen error común vs correcto | Correcto vs incorrecto para 2.13 | `assets/images/bloque_02/B02_2.13_correcto_vs_incorrecto_para_2_13.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 2.13. Requisitos: sin datos pers... (ver Excel) | -| 2.X | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 2.X | `assets/images/bloque_02/B02_2.X_foto_del_equipo_dispositivo_principal_relacionado_con_2_x.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 2.X. R... (ver Excel) | -| 3.0 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.0 | `assets/images/bloque_03/B03_3.0_foto_del_equipo_dispositivo_principal_relacionado_con_3_0.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.0. R... (ver Excel) | -| 3.0 | Diagrama simple (sin infografía compleja) | Ejemplos de cálculo de O2 (tabla simple) | `assets/images/bloque_03/B03_3.0_ejemplos_de_cálculo_de_o2_tabla_simple.png` | Alta | Pendiente | Crea un DIAGRAMA SIMPLE (sin infografía compleja) para: Ejemplos de cálculo de O2 (tabla simple).... (ver Excel) | -| 3.0 | Vídeo demo (30-90s) | Vídeo verificación O2 + fuga | `assets/videos/bloque_03/B03_3.0_vídeo_verificación_o2_fuga.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo verificación O2 + fuga. Con maniquí o simulación, sin p... (ver Excel) | -| 3.1 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.1 | `assets/images/bloque_03/B03_3.1_foto_del_equipo_dispositivo_principal_relacionado_con_3_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.1. R... (ver Excel) | -| 3.1 | Imagen error común vs correcto | Correcto vs incorrecto para 3.1 | `assets/images/bloque_03/B03_3.1_correcto_vs_incorrecto_para_3_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 3.1. Requisitos: sin datos perso... (ver Excel) | -| 3.2 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.2 | `assets/images/bloque_03/B03_3.2_foto_del_equipo_dispositivo_principal_relacionado_con_3_2.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.2. R... (ver Excel) | -| 3.2 | Vídeo demo (30-90s) | Aspiración: preparación + uso + post-uso | `assets/videos/bloque_03/B03_3.2_aspiración_preparación_uso_post_uso.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Aspiración: preparación + uso + post-uso. Con maniquí o simul... (ver Excel) | -| 3.3 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.3 | `assets/images/bloque_03/B03_3.3_foto_del_equipo_dispositivo_principal_relacionado_con_3_3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.3. R... (ver Excel) | -| 3.3 | Imagen error común vs correcto | Correcto vs incorrecto para 3.3 | `assets/images/bloque_03/B03_3.3_correcto_vs_incorrecto_para_3_3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 3.3. Requisitos: sin datos perso... (ver Excel) | -| 3.3 | Vídeo demo (30-90s) | BVM a dos TES (sello + ventilación) | `assets/videos/bloque_03/B03_3.3_bvm_a_dos_tes_sello_ventilación.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: BVM a dos TES (sello + ventilación). Con maniquí o simulación... (ver Excel) | -| 3.4 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.4 | `assets/images/bloque_03/B03_3.4_foto_del_equipo_dispositivo_principal_relacionado_con_3_4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.4. R... (ver Excel) | -| 3.5 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.5 | `assets/images/bloque_03/B03_3.5_foto_del_equipo_dispositivo_principal_relacionado_con_3_5.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.5. R... (ver Excel) | -| 3.5 | Plantilla / dataset (JSON/CSV) | Checklist app (JSON) vía aérea | `assets/templates/bloque_03/B03_3.5_checklist_app_json_vía_aérea.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Checklist app (JSON) vía aérea. Formato JSON para app. Campos cl... (ver Excel) | -| 3.6 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.6 | `assets/images/bloque_03/B03_3.6_foto_del_equipo_dispositivo_principal_relacionado_con_3_6.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.6. R... (ver Excel) | -| 3.7 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.7 | `assets/images/bloque_03/B03_3.7_foto_del_equipo_dispositivo_principal_relacionado_con_3_7.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.7. R... (ver Excel) | -| 3.8 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.8 | `assets/images/bloque_03/B03_3.8_foto_del_equipo_dispositivo_principal_relacionado_con_3_8.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.8. R... (ver Excel) | -| 3.9 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.9 | `assets/images/bloque_03/B03_3.9_foto_del_equipo_dispositivo_principal_relacionado_con_3_9.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.9. R... (ver Excel) | -| 3.10 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.10 | `assets/images/bloque_03/B03_3.10_foto_del_equipo_dispositivo_principal_relacionado_con_3_10.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.10. ... (ver Excel) | -| 3.11 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.11 | `assets/images/bloque_03/B03_3.11_foto_del_equipo_dispositivo_principal_relacionado_con_3_11.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.11. ... (ver Excel) | -| 3.12 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.12 | `assets/images/bloque_03/B03_3.12_foto_del_equipo_dispositivo_principal_relacionado_con_3_12.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.12. ... (ver Excel) | -| 3.13 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.13 | `assets/images/bloque_03/B03_3.13_foto_del_equipo_dispositivo_principal_relacionado_con_3_13.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.13. ... (ver Excel) | -| 3.14 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.14 | `assets/images/bloque_03/B03_3.14_foto_del_equipo_dispositivo_principal_relacionado_con_3_14.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.14. ... (ver Excel) | -| 3.15 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.15 | `assets/images/bloque_03/B03_3.15_foto_del_equipo_dispositivo_principal_relacionado_con_3_15.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.15. ... (ver Excel) | -| 3.16 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.16 | `assets/images/bloque_03/B03_3.16_foto_del_equipo_dispositivo_principal_relacionado_con_3_16.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.16. ... (ver Excel) | -| 3.17 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.17 | `assets/images/bloque_03/B03_3.17_foto_del_equipo_dispositivo_principal_relacionado_con_3_17.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.17. ... (ver Excel) | -| 3.18 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.18 | `assets/images/bloque_03/B03_3.18_foto_del_equipo_dispositivo_principal_relacionado_con_3_18.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.18. ... (ver Excel) | -| 3.X | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.X | `assets/images/bloque_03/B03_3.X_foto_del_equipo_dispositivo_principal_relacionado_con_3_x.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.X. R... (ver Excel) | -| 3.X2 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.X2 | `assets/images/bloque_03/B03_3.X2_foto_del_equipo_dispositivo_principal_relacionado_con_3_x2.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.X2. ... (ver Excel) | -| 3.X2 | Plantilla / dataset (JSON/CSV) | Checklists app (JSON/CSV) | `assets/templates/bloque_03/B03_3.X2_checklists_app_json_csv.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Checklists app (JSON/CSV). Formato JSON para app. Campos claros,... (ver Excel) | -| 3.X3 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.X3 | `assets/images/bloque_03/B03_3.X3_foto_del_equipo_dispositivo_principal_relacionado_con_3_x3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.X3. ... (ver Excel) | -| 3.X3 | Plantilla / dataset (JSON/CSV) | Checklists app (JSON/CSV) | `assets/templates/bloque_03/B03_3.X3_checklists_app_json_csv.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Checklists app (JSON/CSV). Formato JSON para app. Campos claros,... (ver Excel) | -| 3.X4 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.X4 | `assets/images/bloque_03/B03_3.X4_foto_del_equipo_dispositivo_principal_relacionado_con_3_x4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.X4. ... (ver Excel) | -| 3.X5 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.X5 | `assets/images/bloque_03/B03_3.X5_foto_del_equipo_dispositivo_principal_relacionado_con_3_x5.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.X5. ... (ver Excel) | -| 3.X5 | Plantilla / dataset (JSON/CSV) | Checklists app (JSON/CSV) | `assets/templates/bloque_03/B03_3.X5_checklists_app_json_csv.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Checklists app (JSON/CSV). Formato JSON para app. Campos claros,... (ver Excel) | -| 3.99 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 3.99 | `assets/images/bloque_03/B03_3.99_foto_del_equipo_dispositivo_principal_relacionado_con_3_99.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 3.99. ... (ver Excel) | -| 4.0 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.0 | `assets/images/bloque_04/B04_4.0_foto_del_equipo_dispositivo_principal_relacionado_con_4_0.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.0. R... (ver Excel) | -| 4.1 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.1 | `assets/images/bloque_04/B04_4.1_foto_del_equipo_dispositivo_principal_relacionado_con_4_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.1. R... (ver Excel) | -| 4.1 | Imagen error común vs correcto | Correcto vs incorrecto para 4.1 | `assets/images/bloque_04/B04_4.1_correcto_vs_incorrecto_para_4_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 4.1. Requisitos: sin datos perso... (ver Excel) | -| 4.1 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.1 | `assets/images/bloque_04/B04_4.1_secuencia_visual_4_1.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.1. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.1 | Vídeo demo (30-90s) | Vídeo demo 4.1 | `assets/videos/bloque_04/B04_4.1_vídeo_demo_4_1.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.1. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 4.2 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.2 | `assets/images/bloque_04/B04_4.2_foto_del_equipo_dispositivo_principal_relacionado_con_4_2.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.2. R... (ver Excel) | -| 4.3 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.3 | `assets/images/bloque_04/B04_4.3_foto_del_equipo_dispositivo_principal_relacionado_con_4_3.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.3. R... (ver Excel) | -| 4.4 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.4 | `assets/images/bloque_04/B04_4.4_foto_del_equipo_dispositivo_principal_relacionado_con_4_4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.4. R... (ver Excel) | -| 4.4 | Imagen error común vs correcto | Correcto vs incorrecto para 4.4 | `assets/images/bloque_04/B04_4.4_correcto_vs_incorrecto_para_4_4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Correcto vs incorrecto para 4.4. Requisitos: sin datos perso... (ver Excel) | -| 4.4 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.4 | `assets/images/bloque_04/B04_4.4_secuencia_visual_4_4.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.4. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.4 | Vídeo demo (30-90s) | Vídeo demo 4.4 | `assets/videos/bloque_04/B04_4.4_vídeo_demo_4_4.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.4. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 4.4 | Imagen error común vs correcto | DESA: colocación electrodos correcta vs incorrecta | `assets/images/bloque_04/B04_4.4_desa_colocación_electrodos_correcta_vs_incorrecta.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: DESA: colocación electrodos correcta vs incorrecta. Requisit... (ver Excel) | -| 4.5 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.5 | `assets/images/bloque_04/B04_4.5_foto_del_equipo_dispositivo_principal_relacionado_con_4_5.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.5. R... (ver Excel) | -| 4.6 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.6 | `assets/images/bloque_04/B04_4.6_foto_del_equipo_dispositivo_principal_relacionado_con_4_6.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.6. R... (ver Excel) | -| 4.6 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.6 | `assets/images/bloque_04/B04_4.6_secuencia_visual_4_6.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.6. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.6 | Vídeo demo (30-90s) | Vídeo demo 4.6 | `assets/videos/bloque_04/B04_4.6_vídeo_demo_4_6.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.6. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 4.7 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.7 | `assets/images/bloque_04/B04_4.7_foto_del_equipo_dispositivo_principal_relacionado_con_4_7.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.7. R... (ver Excel) | -| 4.7 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.7 | `assets/images/bloque_04/B04_4.7_secuencia_visual_4_7.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.7. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.7 | Vídeo demo (30-90s) | Vídeo demo 4.7 | `assets/videos/bloque_04/B04_4.7_vídeo_demo_4_7.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.7. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 4.8 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.8 | `assets/images/bloque_04/B04_4.8_foto_del_equipo_dispositivo_principal_relacionado_con_4_8.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.8. R... (ver Excel) | -| 4.8 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.8 | `assets/images/bloque_04/B04_4.8_secuencia_visual_4_8.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.8. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.8 | Vídeo demo (30-90s) | Vídeo demo 4.8 | `assets/videos/bloque_04/B04_4.8_vídeo_demo_4_8.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.8. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 4.9 | Imagen referencia (material/landmark) | Foto del equipo/dispositivo principal relacionado con 4.9 | `assets/images/bloque_04/B04_4.9_foto_del_equipo_dispositivo_principal_relacionado_con_4_9.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Foto del equipo/dispositivo principal relacionado con 4.9. R... (ver Excel) | -| 4.9 | Imagen paso a paso (colocación/uso) | Secuencia visual 4.9 | `assets/images/bloque_04/B04_4.9_secuencia_visual_4_9.jpg` | Alta | Pendiente | Genera/obtén una FOTO realista para: Secuencia visual 4.9. Requisitos: sin datos personales, sin ... (ver Excel) | -| 4.9 | Vídeo demo (30-90s) | Vídeo demo 4.9 | `assets/videos/bloque_04/B04_4.9_vídeo_demo_4_9.mp4` | Alta | Pendiente | Graba un VÍDEO DEMO (60-120s) para: Vídeo demo 4.9. Con maniquí o simulación, sin pacientes reale... (ver Excel) | -| 8.0 | Plantilla / dataset (JSON/CSV) | Plantilla informe/registro (CSV/JSON) | `assets/templates/bloque_08/B08_8.0_plantilla_informe_registro_csv_json.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Plantilla informe/registro (CSV/JSON). Formato JSON para app. Ca... (ver Excel) | -| 8.1 | Plantilla / dataset (JSON/CSV) | Plantilla informe/registro (CSV/JSON) | `assets/templates/bloque_08/B08_8.1_plantilla_informe_registro_csv_json.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Plantilla informe/registro (CSV/JSON). Formato JSON para app. Ca... (ver Excel) | -| 8.2 | Plantilla / dataset (JSON/CSV) | Plantilla informe/registro (CSV/JSON) | `assets/templates/bloque_08/B08_8.2_plantilla_informe_registro_csv_json.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Plantilla informe/registro (CSV/JSON). Formato JSON para app. Ca... (ver Excel) | -| 8.3 | Plantilla / dataset (JSON/CSV) | Plantilla informe/registro (CSV/JSON) | `assets/templates/bloque_08/B08_8.3_plantilla_informe_registro_csv_json.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Plantilla informe/registro (CSV/JSON). Formato JSON para app. Ca... (ver Excel) | -| 8.4 | Plantilla / dataset (JSON/CSV) | Plantilla informe/registro (CSV/JSON) | `assets/templates/bloque_08/B08_8.4_plantilla_informe_registro_csv_json.json` | Alta | Pendiente | Crea una PLANTILLA/DATASET para: Plantilla informe/registro (CSV/JSON). Formato JSON para app. Ca... (ver Excel) | - ---- diff --git a/docs/archivo/CAMBIOS_PENDIENTES_GITHUB.md b/docs/archivo/CAMBIOS_PENDIENTES_GITHUB.md deleted file mode 100644 index 46ed2e32..00000000 --- a/docs/archivo/CAMBIOS_PENDIENTES_GITHUB.md +++ /dev/null @@ -1,133 +0,0 @@ -# 📤 Cambios Pendientes para GitHub - -**Fecha:** 2025-12-17 - ---- - -## 📊 Estado Actual - -✅ **Código inicial subido a GitHub** -⏳ **Cambios de limpieza pendientes de subir** - ---- - -## 🔄 Cambios Pendientes - -### Archivos Modificados -1. **`src/data/manual-index.ts`** - - ✅ Rutas actualizadas de `manual-tes/...` a `/manual/...` - - ✅ 93 rutas actualizadas - -2. **`src/pages/ManualViewer.tsx`** - - ✅ Simplificado para usar rutas directas del índice - - ✅ Eliminada lógica de conversión de rutas - -### Archivos Nuevos (Sin Rastrear) -1. **Scripts de Limpieza:** - - `scripts/limpiar_manual.py` - Script de limpieza e integración - - `scripts/actualizar_rutas_indice.py` - Script de actualización de rutas - -2. **Documentación:** - - `REPORTE_LIMPIEZA_MANUAL.md` - Reporte detallado de limpieza - - `RESUMEN_LIMPIEZA_COMPLETA.md` - Resumen ejecutivo - - `LIMPIEZA_COMPLETADA.md` - Documentación final - - `DEPLOYMENT_GITHUB.md` - Guía de despliegue - - `COMANDOS_GIT.md` - Comandos Git útiles - - `INSTRUCCIONES_PUSH.md` - Instrucciones de push - - `PUSH_FINAL.md` - Guía final de push - -3. **Backup:** - - `backup_manual_pre_limpieza/` - Backup completo (432 archivos) - ---- - -## 🚀 Comandos para Subir Cambios - -### Opción 1: Subir Todo (Recomendado) -```bash -cd /home/planetazuzu/protocolo-r-pido - -# Agregar todos los cambios -git add . - -# Hacer commit -git commit -m "feat: Limpieza e integración completa del Manual TES - -- Actualizadas 93 rutas en manual-index.ts para apuntar a /manual/ -- Simplificado ManualViewer para usar rutas directas -- Agregados scripts de limpieza y actualización -- Documentación completa de la limpieza -- Backup completo de archivos originales -- 93 archivos del manual organizados en public/manual/" - -# Subir cambios -git push origin main -``` - -### Opción 2: Subir Solo Cambios Esenciales -```bash -cd /home/planetazuzu/protocolo-r-pido - -# Solo archivos modificados (sin backup ni docs) -git add src/data/manual-index.ts src/pages/ManualViewer.tsx - -# Commit -git commit -m "fix: Actualizar rutas del manual a /manual/" - -# Push -git push origin main -``` - -### Opción 3: Excluir Backup del Repositorio -```bash -cd /home/planetazuzu/protocolo-r-pido - -# Agregar .gitignore para backup si no existe -echo "backup_manual_pre_limpieza/" >> .gitignore - -# Agregar cambios (sin backup) -git add src/ scripts/ *.md -git add .gitignore - -# Commit y push -git commit -m "feat: Limpieza e integración completa" -git push origin main -``` - ---- - -## 📋 Checklist Antes de Subir - -- [ ] Verificar que `public/manual/` tenga los 93 archivos -- [ ] Verificar que las rutas en `manual-index.ts` sean correctas -- [ ] Probar localmente que la app funcione (`npm run dev`) -- [ ] Decidir si incluir el backup en el repositorio (recomendado: NO) -- [ ] Revisar qué documentación incluir - ---- - -## ⚠️ Recomendaciones - -### ✅ Incluir en el Repositorio -- ✅ Código fuente (`src/`) -- ✅ Scripts de utilidad (`scripts/`) -- ✅ Documentación esencial (`*.md` excepto backups) -- ✅ Configuración (`package.json`, `vite.config.ts`, etc.) - -### ❌ NO Incluir en el Repositorio -- ❌ Backup completo (`backup_manual_pre_limpieza/`) - Muy pesado -- ❌ `node_modules/` - Ya está en `.gitignore` -- ❌ `dist/` - Se genera en build - ---- - -## 🎯 Próximos Pasos Sugeridos - -1. **Subir cambios de limpieza** (este documento) -2. **Configurar despliegue automático** (Vercel/Netlify/GitHub Pages) -3. **Probar la aplicación en producción** -4. **Documentar el proceso de despliegue** - ---- - -**¿Quieres que suba estos cambios ahora o prefieres hacerlo manualmente?** diff --git a/docs/archivo/COMANDOS_GIT.md b/docs/archivo/COMANDOS_GIT.md deleted file mode 100644 index 03a186b2..00000000 --- a/docs/archivo/COMANDOS_GIT.md +++ /dev/null @@ -1,89 +0,0 @@ -# 📤 Comandos para Subir a GitHub - -**Repositorio:** https://github.com/planetazuzu/guia-tes-digital - ---- - -## ✅ Estado Actual - -- ✅ Git inicializado -- ✅ Remote configurado: `origin` → https://github.com/planetazuzu/guia-tes-digital.git -- ✅ Contenido remoto traído - ---- - -## 🚀 Próximos Pasos - -### 1. Hacer Commit - -```bash -cd /home/planetazuzu/protocolo-r-pido - -git add . -git commit -m "feat: Aplicación completa Manual TES Digital - -- Integración de 93 capítulos del manual completo -- Componente MarkdownViewer para renderizar archivos .md -- Navegación jerárquica completa (ManualIndex) -- Sistema de búsqueda mejorado (busca en parte/bloque/capítulo) -- Página ManualViewer con navegación anterior/siguiente -- Scripts de verificación del manual -- Puerto configurado en 8096 -- Configuración de despliegue (Vercel, Netlify, GitHub Pages) -- Todos los problemas detectados corregidos" -``` - -### 2. Subir al Repositorio - -```bash -git push -u origin main -``` - ---- - -## ⚠️ Si Pide Autenticación - -### Opción 1: Personal Access Token - -1. Ve a: https://github.com/settings/tokens -2. Genera un token con permisos `repo` -3. Usa el token como contraseña cuando git lo pida - -### Opción 2: SSH - -```bash -# Cambiar a SSH -git remote set-url origin git@github.com:planetazuzu/guia-tes-digital.git -git push -u origin main -``` - ---- - -## 📋 Archivos que se Subirán - -- ✅ Todo el código fuente (`src/`) -- ✅ Archivos de configuración -- ✅ Los 93 archivos .md del manual (`public/manual/`) -- ✅ Scripts de verificación -- ✅ Documentación - -**NO se subirán:** -- ❌ `node_modules/` (se instalan con `npm install`) -- ❌ `dist/` (se genera con `npm run build`) - ---- - -## ✅ Verificación Post-Push - -Después del push, verificar en: -https://github.com/planetazuzu/guia-tes-digital - -Debe mostrar: -- ✅ Carpeta `src/` con todo el código -- ✅ Carpeta `public/manual/` con los 93 archivos .md -- ✅ Archivos de configuración -- ✅ README.md actualizado - ---- - -**¿Ejecuto el commit y push ahora?** diff --git a/docs/archivo/COMMIT_MESSAGE.md b/docs/archivo/COMMIT_MESSAGE.md deleted file mode 100644 index e8c6d77b..00000000 --- a/docs/archivo/COMMIT_MESSAGE.md +++ /dev/null @@ -1,40 +0,0 @@ -# Mensaje de Commit para GitHub - -## Título del Commit - -``` -fix: Renumeración Bloque 2→4 (Soporte Vital) y resolución de conflictos organizacionales -``` - -## Descripción Detallada - -``` -🔧 CORRECCIONES CRÍTICAS DE ORGANIZACIÓN - -### Renumeración Bloque 2 → 4 (Soporte Vital Básico) -- Resuelto conflicto crítico: dos bloques compartían numeración "Bloque 2" -- Renumerados 9 archivos de BLOQUE_02_* → BLOQUE_04_* -- Actualizados títulos internos: 2.0-2.8 → 4.0-4.8 -- Actualizadas referencias cruzadas en múltiples capítulos - -### Resolución de Duplicidades -- Glucómetro: Convertido 3.11 a redirect hacia 1.7 (ubicación definitiva) -- Actualizadas referencias a Glucómetro (3.11, 1.5 → 1.7) - -### Documentación -- Generado DIAGNOSTICO_ORGANIZACIONAL_CRITICO.md -- Generado PLAN_RENUMERACION_COMPLETO.md -- Generado INFORME_RENUMERACION_BLOQUE_2_4.md - -### Archivos Afectados -- 9 archivos renumerados (03_SOPORTE_VITAL_BASICO/) -- 10+ archivos con referencias actualizadas -- 1 archivo convertido a redirect (BLOQUE_03_11_GLUCOMETRO.md) - -### Próximos Pasos Documentados -- Resolver duplicidades restantes (Collarín, Errores) -- Buscar bloques faltantes (7-14) -- Completar contenido vacío (Bloque 8: 8.0-8.4) - -Fixes: Conflictos de numeración detectados en auditoría organizacional -``` diff --git a/docs/archivo/DEPLOYMENT.md b/docs/archivo/DEPLOYMENT.md deleted file mode 100644 index fe4784b4..00000000 --- a/docs/archivo/DEPLOYMENT.md +++ /dev/null @@ -1,202 +0,0 @@ -# 🚀 Guía de Deployment - EMERGES TES - -Esta guía explica cómo desplegar EMERGES TES en un servidor propio (VPS Ubuntu). - -## 📋 Requisitos del Servidor - -- **OS:** Ubuntu 20.04+ o similar -- **RAM:** Mínimo 512MB (recomendado 1GB+) -- **CPU:** 1 core mínimo -- **Espacio:** 2GB+ para aplicación y dependencias -- **Node.js:** v18+ (solo para build, no necesario en producción) -- **Nginx:** Para servir archivos estáticos - -## 🔧 Instalación Inicial - -### 1. Instalar Node.js (para build) - -```bash -# Usar nvm (recomendado) -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash -source ~/.bashrc -nvm install 18 -nvm use 18 - -# O instalar directamente -curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - -sudo apt-get install -y nodejs -``` - -### 2. Instalar Nginx - -```bash -sudo apt update -sudo apt install -y nginx -sudo systemctl enable nginx -sudo systemctl start nginx -``` - -### 3. Clonar y preparar proyecto - -```bash -# Crear directorio -sudo mkdir -p /var/www/emerges-tes -sudo chown $USER:$USER /var/www/emerges-tes - -# Clonar repositorio (o subir archivos) -cd /var/www/emerges-tes -git clone . - -# Instalar dependencias -npm ci -``` - -## 🏗️ Build de Producción - -```bash -# Build estático -npm run build - -# Verificar que se creó el directorio dist/ -ls -la dist/ -``` - -El directorio `dist/` contiene todos los archivos estáticos listos para servir. - -## ⚙️ Configuración Nginx - -### 1. Crear configuración - -```bash -sudo nano /etc/nginx/sites-available/emerges-tes -``` - -Copiar contenido de `nginx.conf.example` y ajustar: -- `server_name`: tu dominio -- `root`: ruta a `/var/www/emerges-tes/dist` - -### 2. Activar sitio - -```bash -sudo ln -s /etc/nginx/sites-available/emerges-tes /etc/nginx/sites-enabled/ -sudo nginx -t # Verificar configuración -sudo systemctl reload nginx -``` - -### 3. Verificar permisos - -```bash -sudo chown -R www-data:www-data /var/www/emerges-tes/dist -sudo chmod -R 755 /var/www/emerges-tes/dist -``` - -## 🔒 SSL con Let's Encrypt (Opcional pero Recomendado) - -```bash -# Instalar Certbot -sudo apt install -y certbot python3-certbot-nginx - -# Obtener certificado -sudo certbot --nginx -d emergestes.com -d www.emergestes.com - -# Renovación automática (ya configurado) -sudo certbot renew --dry-run -``` - -## 🔄 Deploy Automático - -### Opción 1: Script de deploy - -```bash -# Hacer ejecutable -chmod +x deploy.sh - -# Ejecutar deploy -./deploy.sh -``` - -### Opción 2: Deploy manual - -```bash -# 1. Actualizar código -git pull origin main - -# 2. Instalar dependencias (si hay cambios) -npm ci - -# 3. Build -npm run build - -# 4. Verificar -ls -la dist/ - -# 5. Nginx se sirve automáticamente desde dist/ -# Si necesitas forzar recarga: -sudo systemctl reload nginx -``` - -## 📊 Monitoreo (Opcional) - -### PM2 (solo si necesitas servidor Node.js) - -```bash -# Instalar PM2 -npm install -g pm2 - -# Usar solo para preview/desarrollo -pm2 start ecosystem.config.js -pm2 save -pm2 startup # Configurar inicio automático -``` - -**Nota:** Para producción, Nginx sirviendo archivos estáticos es más eficiente que PM2. - -## 🔍 Verificación Post-Deploy - -1. **Verificar que la app carga:** - ```bash - curl http://localhost - ``` - -2. **Verificar rutas SPA:** - - Visitar `/herramientas`, `/farmacos`, etc. - - Todas deben funcionar sin 404 - -3. **Verificar Service Worker:** - - Abrir DevTools > Application > Service Workers - - Debe estar registrado - -4. **Verificar PWA:** - - Debe poder instalarse en móvil - - Debe funcionar offline - -## 🐛 Troubleshooting - -### Error 502 Bad Gateway -- Verificar que Nginx está corriendo: `sudo systemctl status nginx` -- Verificar logs: `sudo tail -f /var/log/nginx/error.log` - -### Rutas 404 en SPA -- Verificar que `try_files` en nginx incluye `/index.html` -- Verificar que `base` en `vite.config.ts` es correcto - -### Service Worker no funciona -- Verificar que `sw.js` está en `dist/` -- Verificar headers de cache en nginx - -### Build falla -- Verificar Node.js versión: `node --version` (debe ser 18+) -- Limpiar cache: `rm -rf node_modules dist && npm ci && npm run build` - -## 📝 Notas Importantes - -- **No necesitas Node.js corriendo en producción** - Nginx sirve archivos estáticos -- **El build se hace en el servidor** - No subir `node_modules` ni `dist/` al repo -- **Actualizaciones:** Solo hacer `git pull` + `npm run build` + recargar Nginx -- **Backup:** Considerar hacer backup de `dist/` antes de cada deploy - -## 🔗 Enlaces Útiles - -- [Nginx Documentation](https://nginx.org/en/docs/) -- [Let's Encrypt](https://letsencrypt.org/) -- [Vite Build](https://vitejs.dev/guide/build.html) diff --git a/docs/archivo/ESTADO_FINAL_IMAGENES_PWA.md b/docs/archivo/ESTADO_FINAL_IMAGENES_PWA.md deleted file mode 100644 index 0bba4bed..00000000 --- a/docs/archivo/ESTADO_FINAL_IMAGENES_PWA.md +++ /dev/null @@ -1,174 +0,0 @@ -# ✅ Estado Final: Imágenes Organizadas para PWA - -**Fecha:** 2025-12-23 -**Estado:** ✅ **COMPLETADO** - ---- - -## 📊 RESUMEN EJECUTIVO - -| Aspecto | Estado | Detalles | -|---------|--------|----------| -| **Imágenes organizadas** | ✅ | 48 de 49 (98%) | -| **Estructura creada** | ✅ | 5 bloques organizados | -| **Build verificado** | ✅ | Imágenes incluidas en `dist/` | -| **Service Worker** | ✅ | Configurado para cachear | -| **PWA Offline** | ✅ | Lista para funcionar | - ---- - -## 📁 DISTRIBUCIÓN DE IMÁGENES - -``` -public/assets/infografias/ -├── bloque-0-fundamentos/ → 9 imágenes -│ └── Algoritmos, flujos, oxigenoterapia -│ -├── bloque-2-inmovilizacion/ → 27 imágenes -│ └── Collarín, tablero, colchón, camilla -│ -├── bloque-3-material-sanitario/ → 9 imágenes -│ └── Pulsioxímetro, tensiómetro, AMBU, cánulas -│ -├── bloque-7-conduccion/ → 1 imagen -│ └── Configuración GPS -│ -└── bloque-12-marco-legal/ → 2 imágenes - └── Decisiones éticas -``` - -**Total:** 48 imágenes organizadas - ---- - -## ✅ VERIFICACIONES COMPLETADAS - -### 1. Organización -- ✅ Imágenes movidas desde `imagenes-pendientes/` a `public/assets/infografias/` -- ✅ Estructura de carpetas creada -- ✅ Nombres de archivo preservados - -### 2. Build -- ✅ `npm run build` ejecutado exitosamente -- ✅ Imágenes copiadas a `dist/assets/infografias/` -- ✅ Estructura de carpetas mantenida - -### 3. Service Worker -- ✅ Configurado para cachear rutas `/assets/infografias/` -- ✅ Estrategia cache-first (offline-first) -- ✅ Cache automático al cargar imágenes - -### 4. Vite Config -- ✅ `copyPublicDir: true` activado -- ✅ Imágenes incluidas en build -- ✅ Estructura de carpetas preservada - ---- - -## ⚠️ PENDIENTE - -### 1. Imagen No Mapeada -**Archivo:** `7 Mandamientos Movilización Segura Paciente.png` - -**Ubicación:** `imagenes-pendientes/` - -**Acción:** Revisar y mover a `bloque-2-inmovilizacion/` (probablemente) - ---- - -### 2. Referencias en Markdown -**Estado:** ⏳ Pendiente - -**Acción requerida:** Añadir referencias en archivos `.md` del manual: - -**Ejemplo:** -```markdown -![Colocación de collarín - Paso 1](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) -``` - -**Archivos a editar:** -- `MANUAL_TES_DIGITAL/02_MATERIAL_E_INMOVILIZACION/...` -- `MANUAL_TES_DIGITAL/00_FUNDAMENTOS/...` -- `MANUAL_TES_DIGITAL/03_MATERIAL_SANITARIO/...` -- etc. - ---- - -## 🎯 PRÓXIMOS PASOS - -### Paso 1: Mover Imagen Pendiente -```bash -# Revisar y mover manualmente -cp "imagenes-pendientes/7 Mandamientos Movilización Segura Paciente.png" \ - public/assets/infografias/bloque-2-inmovilizacion/ -``` - -### Paso 2: Añadir Referencias en Markdown -Editar archivos del manual para incluir imágenes relevantes. - -### Paso 3: Test Offline -1. Cargar app con imágenes -2. DevTools > Network > Offline -3. Verificar que las imágenes cargan desde cache - ---- - -## 📝 ARCHIVOS CREADOS/MODIFICADOS - -### Scripts -- ✅ `scripts/organizar_imagenes_auto.py` - Script de organización automática - -### Documentación -- ✅ `GUIA_INTEGRAR_IMAGENES_PWA.md` - Guía completa -- ✅ `RESUMEN_ORGANIZACION_IMAGENES.md` - Resumen de organización -- ✅ `RESUMEN_PWA_IMAGENES.md` - Resumen técnico -- ✅ `ESTADO_INFOGRAFIAS_MEDIOS.md` - Estado de medios - -### Configuración -- ✅ `public/sw.js` - Service Worker actualizado -- ✅ `vite.config.ts` - Configuración de build actualizada - ---- - -## 🚀 FUNCIONAMIENTO PWA - -### Cómo Funciona - -1. **Usuario carga página** con imagen en Markdown -2. **Navegador solicita** imagen desde `/assets/infografias/...` -3. **Service Worker intercepta** y cachea la imagen -4. **Siguiente visita offline:** Imagen se sirve desde cache -5. **Resultado:** PWA funciona completamente offline con imágenes - -### Verificación - -```bash -# Build -npm run build - -# Verificar imágenes en dist/ -find dist/assets/infografias -type f | wc -l -# Debe mostrar: 48 - -# Preview local -npm run preview -# Abrir en navegador y verificar que las imágenes cargan -``` - ---- - -## ✅ CONCLUSIÓN - -**Estado:** ✅ **COMPLETADO** - -Las imágenes están: -- ✅ Organizadas en `public/assets/infografias/` -- ✅ Incluidas en el build (`dist/`) -- ✅ Configuradas para cache en Service Worker -- ✅ Listas para funcionar offline en PWA - -**Solo falta:** -- ⏳ Añadir referencias en archivos Markdown del manual -- ⏳ Mover 1 imagen pendiente - -**La PWA está lista para funcionar offline con imágenes una vez que se añadan las referencias en el manual.** diff --git a/docs/archivo/ESTADO_HERRAMIENTAS_ACTUALIZADO.md b/docs/archivo/ESTADO_HERRAMIENTAS_ACTUALIZADO.md deleted file mode 100644 index 63351284..00000000 --- a/docs/archivo/ESTADO_HERRAMIENTAS_ACTUALIZADO.md +++ /dev/null @@ -1,245 +0,0 @@ -# 📊 ESTADO ACTUAL DE HERRAMIENTAS - ACTUALIZADO - -**Fecha de análisis:** 2025-01-27 -**Última verificación:** Código fuente revisado - ---- - -## ✅ HERRAMIENTAS IMPLEMENTADAS Y COMPLETAS (100%) - -### 1. ✅ Calculadora de Glasgow (GCS) -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/GlasgowCalculator.tsx` -**Funcionalidades:** -- ✅ Escala completa (Apertura Ocular, Respuesta Verbal, Respuesta Motora) -- ✅ Cálculo automático del score -- ✅ Interpretación del resultado (TCE Grave/Moderado/Leve) -- ✅ UI completa y funcional - ---- - -### 2. ✅ Fórmula de Parkland (Quemados) -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/ParklandCalculator.tsx` -**Funcionalidades:** -- ✅ Cálculo de líquidos totales en primeras 24h -- ✅ Distribución 50% primeras 8h / 50% siguientes 16h -- ✅ Cálculo de velocidades de infusión -- ✅ Ajuste según tiempo transcurrido desde la quemadura -- ✅ Cálculo de mantenimiento después de 24h -- ✅ Advertencias y consideraciones clínicas -- ✅ Validación de inputs -- ✅ UI completa y funcional - ---- - -### 3. ✅ Dosis Pediátricas por Peso -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/PediatricDoseCalculator.tsx` -**Funcionalidades:** -- ✅ Selección de fármaco de lista de 10 fármacos comunes -- ✅ Cálculo automático de dosis por peso (mg/kg) -- ✅ Conversión a volumen (ml) según concentración -- ✅ Aplicación de dosis mínima y máxima -- ✅ Advertencias cuando se excede dosis máxima -- ✅ Información detallada del fármaco (presentación, concentración, vía) -- ✅ Notas importantes por fármaco -- ✅ Validación de inputs -- ✅ Recordatorios de verificación obligatoria -- ✅ UI completa y funcional - -**Fármacos incluidos:** 10 fármacos (Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol, Furosemida, Morfina, Naloxona, Glucosa) - ---- - -### 4. ✅ Temporizador de RCP -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/RCPTimer.tsx` -**Funcionalidades:** -- ✅ Temporizador de 2 minutos por ciclo -- ✅ Alertas sonoras/visuales (Web Audio API) -- ✅ Contador de ciclos completados -- ✅ Recordatorio de cambio de reanimador -- ✅ Barra de progreso visual -- ✅ Alerta cuando quedan 10 segundos para cambio -- ✅ Pausa y reinicio -- ✅ UI completa y funcional - -**Nota:** El documento `HERRAMIENTAS_FALTANTES.md` indica que NO está implementada, pero **SÍ LO ESTÁ** y está completa. - ---- - -### 5. ✅ Calculadora de Duración de Botella de Oxígeno -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/OxygenDurationCalculator.tsx` -**Funcionalidades:** -- ✅ Selección de tamaño de botella (D, E, M, G, H) -- ✅ Entrada de presión actual (PSI) -- ✅ Entrada de flujo de oxígeno (L/min) -- ✅ Cálculo de duración estimada -- ✅ Conversión a horas y minutos -- ✅ Advertencias cuando la botella tiene poca duración -- ✅ Validación de inputs -- ✅ UI completa y funcional - -**Nota:** El documento `HERRAMIENTAS_FALTANTES.md` indica que NO está implementada, pero **SÍ LO ESTÁ** y está completa. - ---- - -### 6. ✅ Calculadora de Goteo -**Estado:** ✅ **100% COMPLETA** -**Archivo:** `src/components/tools/DripRateCalculator.tsx` -**Funcionalidades:** -- ✅ Cálculo de gotas por minuto -- ✅ Cálculo de ml por hora -- ✅ Selección de factor de goteo (20, 60, 15 gotas/ml) -- ✅ Conversión entre diferentes unidades -- ✅ Validación de inputs -- ✅ UI completa y funcional - -**Nota:** El documento `HERRAMIENTAS_FALTANTES.md` indica que NO está implementada, pero **SÍ LO ESTÁ** y está completa. - ---- - -### 7. ✅ Tablas de Perfusión -**Estado:** ⚠️ **PARCIALMENTE COMPLETA** (3 de 6 fármacos) -**Archivo:** `src/data/calculators.ts` -**Implementado:** -- ✅ Dopamina -- ✅ Noradrenalina -- ✅ Adrenalina - -**Faltante:** -- ❌ Dobutamina -- ❌ Nitroglicerina -- ❌ Furosemida - ---- - -### 8. ✅ Triage START -**Estado:** ⚠️ **PARCIALMENTE COMPLETA** (Tabla de referencia, no calculadora interactiva) -**Archivo:** `src/pages/Escena.tsx` -**Implementado:** -- ✅ Tabla de referencia con categorías (Negro, Rojo, Amarillo, Verde) -- ✅ Criterios y acciones por categoría - -**Faltante:** -- ❌ Calculadora interactiva paso a paso -- ❌ Preguntas guiadas -- ❌ Cálculo automático de categoría -- ❌ Historial de triage - ---- - -## ❌ HERRAMIENTAS FALTANTES (NO IMPLEMENTADAS) - -### 1. ❌ Calculadora de Superficie Corporal (SC) -**Estado:** ❌ **NO IMPLEMENTADA** -**Prioridad:** 🟢 Baja -**Descripción:** Cálculo de superficie corporal para dosificación de fármacos. - -**Fórmulas necesarias:** -- **Mosteller:** SC (m²) = √[(altura (cm) × peso (kg)) / 3600] -- **DuBois:** SC (m²) = 0.007184 × altura (cm)^0.725 × peso (kg)^0.425 - ---- - -### 2. ❌ Calculadora de Índice de Masa Corporal (IMC) -**Estado:** ❌ **NO IMPLEMENTADA** -**Prioridad:** 🟢 Baja -**Descripción:** Cálculo de IMC para evaluación nutricional y dosificación. - -**Fórmula:** IMC = peso (kg) / altura (m)² - ---- - -### 3. ❌ Calculadora de Talla de Collarín Cervical -**Estado:** ❌ **NO IMPLEMENTADA** -**Prioridad:** 🟡 Media -**Descripción:** Guía para seleccionar la talla correcta de collarín cervical. - -**Campos necesarios:** -- Distancia mentón-esternón (cm) -- Altura del paciente (cm) -- Edad aproximada - ---- - -### 4. ❌ Persistencia de Resultados -**Estado:** ❌ **NO IMPLEMENTADA** -**Prioridad:** 🟢 Baja -**Descripción:** Guardar resultados de calculadoras para referencia posterior. - -**Funcionalidad esperada:** -- Guardar cálculos realizados -- Historial de calculadoras usadas -- Exportar resultados - ---- - -### 5. ❌ Compartir Resultados -**Estado:** ❌ **NO IMPLEMENTADA** -**Prioridad:** 🟢 Baja -**Descripción:** Compartir resultados de calculadoras por WhatsApp, email, etc. - ---- - -## 📊 RESUMEN ESTADÍSTICO - -### ✅ Completas al 100%: **10 herramientas** -1. Calculadora de Glasgow -2. Fórmula de Parkland -3. Dosis Pediátricas por Peso -4. Temporizador de RCP -5. Calculadora de Duración de Botella de Oxígeno -6. Calculadora de Goteo -7. Tablas de Perfusión (6 fármacos: Dopamina, Noradrenalina, Adrenalina, Dobutamina, Nitroglicerina, Furosemida) -8. Calculadora de Superficie Corporal (SC) -9. Calculadora de IMC -10. Calculadora de Talla de Collarín Cervical - -### ⚠️ Parcialmente completas: **2 herramientas** -1. Tablas de Perfusión (3 de 6 fármacos) -2. Triage START (tabla de referencia, falta calculadora interactiva) - -### ❌ No implementadas: **5 herramientas** -1. Calculadora de Superficie Corporal -2. Calculadora de IMC -3. Calculadora de Talla de Collarín Cervical -4. Persistencia de Resultados -5. Compartir Resultados - ---- - -## 📝 CORRECCIONES AL DOCUMENTO ORIGINAL - -El documento `HERRAMIENTAS_FALTANTES.md` tiene información **desactualizada**: - -### ❌ Errores detectados: -1. **Temporizador de RCP:** Dice "❌ No implementada" pero **SÍ está implementada** y completa -2. **Calculadora de Duración de Botella de Oxígeno:** Dice "❌ No implementada" pero **SÍ está implementada** y completa -3. **Calculadora de Goteo:** Dice "❌ No implementada" pero **SÍ está implementada** y completa -4. **Tablas de Perfusión:** Dice que solo hay Dopamina y Noradrenalina, pero también hay **Adrenalina** - ---- - -## 🎯 RECOMENDACIONES - -### Prioridad Alta (Media Prioridad): -1. **Completar Tablas de Perfusión:** Agregar Dobutamina, Nitroglicerina y Furosemida -2. **Mejorar Triage START:** Convertir en calculadora interactiva paso a paso - -### Prioridad Baja: -3. Calculadora de Superficie Corporal -4. Calculadora de IMC -5. Calculadora de Talla de Collarín Cervical -6. Persistencia de Resultados -7. Compartir Resultados - ---- - -**Última actualización:** 2025-01-27 -**Total de herramientas:** 13 identificadas -**Completas:** 10 (77%) ✅ -**Parciales:** 1 (8%) ⚠️ -**Faltantes:** 2 (15%) ❌ diff --git a/docs/archivo/ESTADO_INFOGRAFIAS_MEDIOS.md b/docs/archivo/ESTADO_INFOGRAFIAS_MEDIOS.md deleted file mode 100644 index 8c977621..00000000 --- a/docs/archivo/ESTADO_INFOGRAFIAS_MEDIOS.md +++ /dev/null @@ -1,199 +0,0 @@ -# 📸 Estado de Infografías y Medios Visuales - EMERGES TES - -**Fecha:** 2025-12-23 - ---- - -## 🔍 SITUACIÓN ACTUAL - -### ❌ Estado: NO VISIBLES - -**Las infografías y medios NO se ven en la aplicación actualmente porque:** - -1. **48 imágenes existen** en `imagenes-pendientes/` pero: - - ❌ No están organizadas en `public/assets/infografias/` - - ❌ No están referenciadas en los archivos Markdown del manual - - ❌ No hay una página/galería para visualizarlas - -2. **Estructura esperada:** - ``` - public/assets/infografias/ - ├── bloque-0-fundamentos/ - ├── bloque-2-inmovilizacion/ - ├── bloque-3-material-sanitario/ - ├── bloque-7-conduccion/ - └── bloque-12-marco-legal/ - ``` - **Estado:** ❌ Carpetas no creadas, imágenes no organizadas - -3. **Referencias en Markdown:** - - Los archivos `.md` del manual NO tienen referencias a imágenes - - El `MarkdownViewer` SÍ puede renderizar imágenes si están referenciadas - ---- - -## 📍 DÓNDE DEBERÍAN VERSE - -### 1. En el Manual (ManualViewer) - -**Ubicación:** `/manual/:parte/:bloque/:capitulo` - -**Cómo funcionaría:** -- Los archivos Markdown del manual tendrían referencias como: - ```markdown - ![Descripción](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1.png) - ``` -- El `MarkdownViewer` renderizaría las imágenes automáticamente -- Las imágenes aparecerían integradas en el contenido del capítulo - -**Estado actual:** ❌ No hay referencias, no se ven imágenes - ---- - -### 2. En Páginas Específicas (Futuro) - -**Opciones posibles:** -- Página de galería de infografías -- Sección en Herramientas -- Visualizador de imágenes por bloque - -**Estado actual:** ❌ No implementado - ---- - -## 📊 INVENTARIO DE IMÁGENES DISPONIBLES - -### Total: 48 imágenes - -**Ubicación actual:** `imagenes-pendientes/` - -**Distribución:** -- **2 SVG** (infografías vectoriales) -- **46 PNG** (imágenes rasterizadas) - -**Tamaño total:** ~8.5 MB - -### Categorías de Imágenes - -#### 🔵 Fundamentos y Algoritmos (2) -- `ALGORITMO OPERATIVO DEL TES.svg` -- `RESUMEN VISUAL DEL ALGORITMO START.svg` - -#### 🟢 Inmovilización (20+) -- Collarín cervical (12 imágenes paso a paso) -- Inmovilización manual (5 imágenes) -- Tablero espinal (1 imagen) -- Colchón vacío (2 imágenes) -- Camilla cuchara (1 imagen) -- Sistema de inmovilización (2 imágenes) - -#### 🟡 Material Sanitario (10+) -- Oxigenoterapia (4 imágenes) -- Dispositivos (3 imágenes) -- Monitorización (3 imágenes) -- BVM/Ambú (1 imagen) - -#### 🔴 Protocolos Transtelefónicos (3) -- `flujo-rcp-transtelefonica.png` -- `flujo-desa-telefono.png` -- `fast-transtelefonico.png` - -#### 🟣 Otros (10+) -- Constantes vitales (2 imágenes) -- Conducción (1 imagen) -- Ética (2 imágenes) -- Y más... - ---- - -## 🛠️ QUÉ HACE FALTA PARA VERLAS - -### Paso 1: Organizar Imágenes -```bash -# Mover imágenes de imagenes-pendientes/ a public/assets/infografias/ -# Usar el script organizar_infografias.py -python scripts/organizar_infografias.py -``` - -### Paso 2: Referenciar en Markdown -Añadir referencias en los archivos `.md` del manual: -```markdown -![Descripción de la imagen](./assets/infografias/bloque-X-tema/nombre.png) -``` - -### Paso 3: Verificar Rutas -- Las rutas deben ser relativas desde `public/` -- El MarkdownViewer ya está configurado para renderizar imágenes - ---- - -## ✅ LO QUE YA FUNCIONA - -1. **MarkdownViewer** - Componente listo para renderizar imágenes - - Ubicación: `src/components/content/MarkdownViewer.tsx` - - Línea 240-248: Renderizado de imágenes configurado - - Estilos: Imágenes con bordes redondeados, responsive - -2. **Estructura de rutas** - Las imágenes se servirían desde `/assets/infografias/...` - -3. **Scripts de organización** - Existen scripts para organizar automáticamente: - - `scripts/organizar_infografias.py` - - `scripts/organizar_infografias_simple.py` - ---- - -## ❌ LO QUE NO FUNCIONA - -1. **Imágenes no organizadas** - Están en `imagenes-pendientes/`, no en `public/assets/` -2. **Sin referencias** - Ningún archivo `.md` tiene referencias a imágenes -3. **Sin galería** - No hay página para ver todas las infografías -4. **Sin integración** - Las imágenes no aparecen en ningún lugar de la app - ---- - -## 🎯 SOLUCIÓN RÁPIDA - -### Opción 1: Integrar en Manual (Recomendado) - -1. **Organizar imágenes:** - ```bash - mkdir -p public/assets/infografias/{bloque-0-fundamentos,bloque-2-inmovilizacion,bloque-3-material-sanitario} - # Mover imágenes según corresponda - ``` - -2. **Añadir referencias en Markdown:** - - Editar archivos `.md` del manual - - Añadir `![descripción](./assets/infografias/...)` donde corresponda - -3. **Resultado:** Las imágenes aparecerán automáticamente en el ManualViewer - -### Opción 2: Crear Galería de Infografías - -1. **Crear página nueva:** `/herramientas/infografias` o `/infografias` -2. **Listar todas las imágenes** organizadas por bloque -3. **Permitir visualización** en modal o página dedicada - ---- - -## 📝 RESUMEN - -| Aspecto | Estado | Detalles | -|---------|--------|----------| -| **Imágenes existentes** | ✅ 48 disponibles | En `imagenes-pendientes/` | -| **Imágenes organizadas** | ❌ No | No están en `public/assets/` | -| **Referencias en Markdown** | ❌ No | 0 referencias encontradas | -| **Renderizado** | ✅ Funciona | MarkdownViewer listo | -| **Visibilidad en app** | ❌ No visible | No se ven en ningún lugar | - ---- - -## 🚀 PRÓXIMOS PASOS SUGERIDOS - -1. **Organizar imágenes** usando el script existente -2. **Añadir referencias** en los capítulos más importantes del manual -3. **Verificar visualización** en ManualViewer -4. **Opcional:** Crear página de galería para acceso rápido - ---- - -**Conclusión:** Las imágenes existen pero NO están integradas. El sistema de renderizado está listo, solo falta organizar y referenciar las imágenes. diff --git a/docs/archivo/ESTADO_TOTAL_APLICACION.md b/docs/archivo/ESTADO_TOTAL_APLICACION.md deleted file mode 100644 index 2f8de8e5..00000000 --- a/docs/archivo/ESTADO_TOTAL_APLICACION.md +++ /dev/null @@ -1,505 +0,0 @@ -# 📊 ESTADO TOTAL DE LA APLICACIÓN -## Protocolo Rápido - Manual TES Digital - -**Fecha de análisis:** 2025-01-27 -**Versión de la aplicación:** MVP Funcional -**Última actualización:** 2025-01-27 - ---- - -## 📋 RESUMEN EJECUTIVO - -**Estado General:** 🟡 **MVP Funcional - En Desarrollo Activo** - -La aplicación es un **MVP funcional** con UI/UX completa, navegación operativa y contenido médico básico. Está en desarrollo activo con mejoras continuas en herramientas, contenido y funcionalidades. - -### Progreso General por Área - -| Área | Estado | Progreso | Notas | -|------|--------|----------|-------| -| **Frontend/UI** | ✅ Completo | 95% | UI/UX pulida, responsive, tema oscuro | -| **Navegación** | ✅ Completo | 100% | 15 rutas funcionales | -| **Herramientas** | ✅ Muy Bueno | 77% | 10 de 13 herramientas completas | -| **Contenido Médico** | ⚠️ Básico | 40% | Base sólida, necesita expansión | -| **Manual Digital** | ⚠️ Parcial | 60% | Bloque 1 completo, otros parciales | -| **Infografías** | ❌ Pendiente | 0% | Estructura creada, contenido faltante | -| **Backend** | ❌ No existe | 0% | Frontend independiente | -| **Persistencia** | ❌ No existe | 0% | Sin localStorage/sessionStorage | - ---- - -## 🎯 1. ESTRUCTURA DE LA APLICACIÓN - -### 1.1 Páginas Implementadas (15 rutas) - -#### ✅ Páginas Principales -1. **`/`** - Home (Index) - Página principal con acceso rápido -2. **`/soporte-vital`** - Soporte Vital - Listado de protocolos RCP, OVACE, Shock -3. **`/patologias`** - Patologías - 10 patologías por sistemas -4. **`/escena`** - Escena - Checklist seguridad, ABCDE, Triage START -5. **`/farmacos`** - Fármacos - Vademécum con 5 fármacos -6. **`/herramientas`** - Herramientas - Calculadoras y tablas -7. **`/material`** - Material - Checklists de material -8. **`/telefono`** - Teléfono - Protocolos transtelefónicos -9. **`/comunicacion`** - Comunicación - Scripts de comunicación -10. **`/manual`** - Manual - Índice del manual digital -11. **`/manual/:parte/:bloque/:capitulo`** - Manual Viewer - Visualizador de capítulos - -#### ✅ Páginas de Emergencias Críticas -12. **`/rcp`** - RCP - Protocolo RCP rápido -13. **`/ictus`** - Ictus - Protocolo Ictus -14. **`/shock`** - Shock - Protocolo Shock -15. **`/via-aerea`** - Vía Aérea - Protocolo Vía Aérea - -#### ✅ Páginas de Sistema -- **`/*`** - NotFound - Página 404 - -**Total:** 15 rutas funcionales - ---- - -### 1.2 Componentes Principales - -#### Layout (4 componentes) -- ✅ `Header` - Barra superior con búsqueda y menú -- ✅ `BottomNav` - Navegación inferior móvil -- ✅ `SearchModal` - Modal de búsqueda global -- ✅ `MenuSheet` - Menú lateral deslizable - -#### Herramientas (10 componentes) -- ✅ `GlasgowCalculator` - Calculadora de Glasgow -- ✅ `ParklandCalculator` - Fórmula de Parkland -- ✅ `PediatricDoseCalculator` - Dosis pediátricas -- ✅ `RCPTimer` - Temporizador de RCP -- ✅ `OxygenDurationCalculator` - Duración de botella oxígeno -- ✅ `DripRateCalculator` - Calculadora de goteo -- ✅ `BodySurfaceAreaCalculator` - Superficie corporal -- ✅ `BMICalculator` - Índice de masa corporal -- ✅ `CervicalCollarSizeCalculator` - Talla de collarín -- ✅ `InfusionTableView` - Tablas de perfusión - -#### Procedimientos y Contenido (8 componentes) -- ✅ `ProcedureCard` - Cards de protocolos -- ✅ `DrugCard` - Cards de fármacos -- ✅ `DecisionTreeViewer` - Árboles de decisión -- ✅ `TelephoneProtocolViewer` - Protocolos transtelefónicos -- ✅ `MaterialChecklistViewer` - Checklists de material -- ✅ `CommunicationScriptViewer` - Scripts de comunicación -- ✅ `AnatomicalTerminologyGuide` - Guía terminología anatómica -- ✅ `MarkdownViewer` - Visualizador de Markdown - -#### UI Base (50+ componentes shadcn/ui) -- ✅ Sistema completo de componentes UI (botones, inputs, cards, modals, etc.) - -**Total:** ~70+ componentes - ---- - -## 🔧 2. HERRAMIENTAS Y CALCULADORAS - -### ✅ Herramientas Completas (10 herramientas - 77%) - -1. ✅ **Calculadora de Glasgow (GCS)** - Completa -2. ✅ **Fórmula de Parkland (Quemados)** - Completa -3. ✅ **Dosis Pediátricas por Peso** - Completa (10 fármacos) -4. ✅ **Temporizador de RCP** - Completa -5. ✅ **Calculadora de Duración de Botella de Oxígeno** - Completa -6. ✅ **Calculadora de Goteo** - Completa -7. ✅ **Tablas de Perfusión** - Completa (6 fármacos: Dopamina, Noradrenalina, Adrenalina, Dobutamina, Nitroglicerina, Furosemida) -8. ✅ **Calculadora de Superficie Corporal (SC)** - Completa -9. ✅ **Calculadora de IMC** - Completa -10. ✅ **Calculadora de Talla de Collarín Cervical** - Completa - -### ⚠️ Herramientas Parciales (1 herramienta - 8%) - -1. ⚠️ **Triage START** - Tabla de referencia implementada, falta calculadora interactiva paso a paso - -### ❌ Herramientas Faltantes (2 herramientas - 15%) - -1. ❌ **Persistencia de Resultados** - Guardar cálculos en localStorage -2. ❌ **Compartir Resultados** - Compartir por WhatsApp/email - -**Resumen Herramientas:** -- **Completas:** 10 (77%) -- **Parciales:** 1 (8%) -- **Faltantes:** 2 (15%) - ---- - -## 💊 3. CONTENIDO MÉDICO - -### 3.1 Protocolos de Soporte Vital - -**Estado:** ✅ **5 protocolos implementados** - -1. ✅ RCP Adulto SVB -2. ✅ RCP Adulto SVA -3. ✅ RCP Pediátrico -4. ✅ OVACE (Obstrucción Vía Aérea) -5. ✅ Shock Hemorrágico - -**Características:** -- ✅ Pasos detallados -- ✅ Advertencias y puntos clave -- ✅ Material necesario -- ✅ Fármacos relacionados -- ✅ Sistema de prioridades visual -- ✅ Indicadores de grupo etario - -**Faltante:** Más protocolos según necesidades operativas - ---- - -### 3.2 Vademécum de Fármacos - -**Estado:** ✅ **5 fármacos implementados** - -1. ✅ Oxígeno (O₂) -2. ✅ Adrenalina -3. ✅ Amiodarona -4. ✅ Atropina -5. ✅ Midazolam -6. ✅ Salbutamol - -**Características:** -- ✅ Dosis adulto y pediátrica -- ✅ Vías de administración -- ✅ Indicaciones y contraindicaciones -- ✅ Notas clínicas -- ✅ Puntos críticos TES -- ✅ Búsqueda y filtrado - -**Faltante:** Expansión a 30-40 fármacos según propuesta - ---- - -### 3.3 Patologías - -**Estado:** ✅ **10 patologías implementadas** - -**Categorías:** -- ✅ Respiratorias (2 patologías) -- ✅ Circulatorias (2 patologías) -- ✅ Neurológicas (2 patologías) -- ✅ Endocrinas (2 patologías) -- ✅ Intoxicaciones (2 patologías) - -**Características:** -- ✅ Clínica y actuación por patología -- ✅ Navegación por tabs -- ✅ Información estructurada - -**Faltante:** Expansión según necesidades - ---- - -### 3.4 Escena - Actuación en Campo - -**Estado:** ✅ **Completo** - -**Secciones implementadas:** -- ✅ Checklist de Seguridad (interactivo) -- ✅ Guía ABCDE completa -- ✅ Triage START (tabla de referencia) -- ✅ Árboles de Decisión Binarios -- ✅ Inmovilización Espinal -- ✅ Extricación Vehicular (Maniobra de Rautek) - -**Faltante:** Calculadora interactiva de Triage START - ---- - -## 📚 4. MANUAL DIGITAL - -### 4.1 Estado por Bloque - -#### ✅ Bloque 0: Fundamentos -- ✅ 1 archivo completo - -#### ✅ Bloque 1: Procedimientos Básicos -- ✅ **COMPLETO** - 4 capítulos implementados: - - ✅ 1.1 - Constantes Vitales - - ✅ 1.2 - ABCDE Operativo - - ✅ 1.3 - Glasgow Operativo - - ✅ 1.4 - Triage START - -#### ⚠️ Bloque 2: Material e Inmovilización -- ⚠️ Parcial - 10 archivos implementados -- ❌ Faltan infografías (15+ identificadas) - -#### ⚠️ Bloque 3: Material Sanitario y Oxigenoterapia -- ⚠️ Parcial - 27 archivos implementados -- ❌ Faltan 3 capítulos SVA (3.19-3.21) -- ❌ Faltan infografías (3 identificadas) - -#### ⚠️ Bloque 4: Soporte Vital Básico y RCP -- ⚠️ Parcial - 10 archivos implementados -- ❌ Faltan 2 capítulos SVA (4.10-4.11) - -#### ❌ Bloque 5: Protocolos Transtelefónicos -- ❌ **NO IMPLEMENTADO** - 0 de 8 capítulos -- ⚠️ Estructura propuesta pero sin contenido - -#### ⚠️ Bloque 6: Farmacología -- ⚠️ Parcial - 8 archivos implementados -- ❌ Falta 1 capítulo SVA (6.1 - Del Vial a la Vena) - -#### ✅ Bloque 7: Conducción y Seguridad Vial -- ✅ Completo - 6 archivos implementados - -#### ⚠️ Bloque 8: Gestión Operativa -- ⚠️ Parcial - 4 archivos implementados -- ❌ Falta 1 capítulo SVA (8.5 - Transferencia al Hospital) - -#### ✅ Bloque 9-14: Otros Bloques -- ✅ Varios bloques con contenido básico - -**Resumen Manual:** -- **Bloques completos:** 2 (Bloque 0, Bloque 1) -- **Bloques parciales:** 6 (Bloques 2-4, 6-8) -- **Bloques no implementados:** 1 (Bloque 5) - ---- - -## 🖼️ 5. INFORMAGÍAS Y MEDIOS - -### Estado: ❌ **NO IMPLEMENTADO** - -**Estructura creada:** -- ✅ Carpetas organizadas por bloque -- ✅ README con guía de ubicación -- ✅ Script de organización automática - -**Contenido faltante:** -- ❌ **21+ infografías identificadas** en `LISTADO_COMPLETO_MEDIOS_FALTANTES.md` -- ❌ Todas las infografías están documentadas pero no creadas - -**Prioridad Alta (15 infografías):** -- Diagramas de oxigenoterapia (3) -- Infografías de inmovilización (12) - -**Prioridad Media/Baja (6 infografías):** -- Configuración GPS, decisiones éticas, etc. - -**Herramienta disponible:** -- ✅ Script `organizar_infografias.py` para organizar automáticamente cuando se creen - ---- - -## 📊 6. DATOS Y CONTENIDO ESTÁTICO - -### Archivos de Datos (13 archivos) - -1. ✅ `procedures.ts` - Protocolos de soporte vital -2. ✅ `drugs.ts` - Vademécum de fármacos -3. ✅ `calculators.ts` - Funciones de cálculo y tablas de perfusión -4. ✅ `pediatric-drugs.ts` - Base de datos de fármacos pediátricos -5. ✅ `tes-medication.ts` - Medicación específica TES -6. ✅ `manual-index.ts` - Índice del manual digital -7. ✅ `anatomical-terminology.ts` - Terminología anatómica -8. ✅ `pharmaceutical-terminology.ts` - Terminología farmacológica -9. ✅ `drug-administration.ts` - Guías de administración -10. ✅ `communication-scripts.ts` - Scripts de comunicación -11. ✅ `telephone-protocols.ts` - Protocolos transtelefónicos -12. ✅ `material-checklists.ts` - Checklists de material -13. ✅ `decision-trees.ts` - Árboles de decisión - -**Estado:** ✅ Todos los archivos de datos están implementados y funcionales - ---- - -## 🚀 7. FUNCIONALIDADES IMPLEMENTADAS - -### ✅ Navegación y UI -- ✅ Sistema de rutas completo (15 rutas) -- ✅ Header con búsqueda y menú -- ✅ Bottom navigation bar -- ✅ Modal de búsqueda global -- ✅ Menú lateral (MenuSheet) -- ✅ Diseño responsive móvil-first -- ✅ Tema oscuro optimizado - -### ✅ Búsqueda -- ✅ Búsqueda unificada de protocolos y fármacos -- ✅ Búsqueda por texto (mínimo 2 caracteres) -- ✅ Resultados limitados a 8 -- ✅ Navegación directa a resultados - -### ✅ Visualización de Contenido -- ✅ Cards expandibles para protocolos -- ✅ Cards expandibles para fármacos -- ✅ Visualizador de Markdown para manual -- ✅ Árboles de decisión interactivos -- ✅ Checklists interactivos - -### ⚠️ Funcionalidades Parciales -- ⚠️ **Favoritos:** UI implementada pero sin persistencia -- ⚠️ **Últimas Consultas:** UI implementada pero datos hardcodeados - -### ❌ Funcionalidades Faltantes -- ❌ Persistencia de datos (localStorage/sessionStorage) -- ❌ Historial de búsquedas real -- ❌ Compartir resultados -- ❌ Service Worker (offline) -- ❌ Autenticación de usuarios - ---- - -## 📈 8. ESTADÍSTICAS GENERALES - -### Contenido Implementado - -| Tipo | Implementado | Total Propuesto | % | -|------|-------------|-----------------|---| -| **Páginas/Rutas** | 15 | 15 | 100% | -| **Componentes** | 70+ | 70+ | 100% | -| **Herramientas** | 10 | 13 | 77% | -| **Protocolos RCP** | 5 | 5+ | 100% | -| **Fármacos** | 6 | 30-40 | 15% | -| **Patologías** | 10 | 10+ | 100% | -| **Tablas Perfusión** | 6 | 6 | 100% | -| **Capítulos Manual** | ~70 | 87+ | 80% | -| **Infografías** | 0 | 21+ | 0% | - -### Archivos del Proyecto - -- **Componentes React:** 70+ archivos -- **Páginas:** 15 archivos -- **Datos estáticos:** 13 archivos -- **Manual Markdown:** ~100+ archivos -- **Scripts Python:** 5+ archivos - ---- - -## 🎯 9. PROPUESTAS Y PLANES PENDIENTES - -### 9.1 Propuesta Bloque 5 y SVA - -**Estado:** ❌ **NO IMPLEMENTADA** - -**Capítulos propuestos:** 23 capítulos nuevos -- Bloque 5: 8 capítulos (Protocolos Transtelefónicos) -- Bloque 6: 1 capítulo nuevo (Del Vial a la Vena) -- Bloque 3: 3 capítulos nuevos (Vía Aérea Avanzada) -- Bloque 4: 2 capítulos nuevos (PCR Avanzada, Arritmias) -- Bloque 8: 1 capítulo nuevo (Transferencia Hospital) - -**Prioridad según propuesta:** -- **Prioridad 1 (Crítico):** 3 capítulos - 0 implementados -- **Prioridad 2 (Muy Recomendable):** 4-5 capítulos - 0 implementados -- **Prioridad 3 (Complementario):** ~13 capítulos - 0 implementados - ---- - -## ✅ 10. LOGROS RECIENTES (2025-01-27) - -### Herramientas Implementadas -1. ✅ Completadas 3 tablas de perfusión (Dobutamina, Nitroglicerina, Furosemida) -2. ✅ Creada Calculadora de Superficie Corporal -3. ✅ Creada Calculadora de IMC -4. ✅ Creada Calculadora de Talla de Collarín Cervical - -### Infraestructura Creada -1. ✅ Estructura de carpetas para infografías -2. ✅ Script de organización automática de infografías -3. ✅ Documentación de ubicación de medios - -### Documentación Actualizada -1. ✅ Estado actualizado de herramientas -2. ✅ Estado del Bloque 1 verificado -3. ✅ Estado de propuesta SVA documentado - ---- - -## 🎯 11. PRÓXIMOS PASOS RECOMENDADOS - -### Prioridad Alta (Implementar primero) - -1. **Mejorar Triage START** - - Convertir en calculadora interactiva paso a paso - - Preguntas guiadas - - Cálculo automático de categoría - -2. **Implementar Persistencia** - - localStorage para favoritos - - Historial de búsquedas - - Guardar resultados de calculadoras - -3. **Crear Infografías Prioritarias** - - Empezar con las 15 de alta prioridad - - Usar script de organización automática - -### Prioridad Media - -4. **Expandir Vademécum** - - Aumentar de 6 a 30-40 fármacos - - Priorizar fármacos de uso frecuente - -5. **Implementar Capítulos SVA Críticos** - - 4.10: Algoritmo de PCR Avanzada - - 3.19: Vía Aérea Avanzada - - 6.1: Del Vial a la Vena - -6. **Implementar Bloque 5 (Transtelefónicos)** - - Empezar con RCP transtelefónica - - DESA guiado por teléfono - -### Prioridad Baja - -7. **Service Worker (Offline)** - - Cache de contenido estático - - Funcionalidad offline básica - -8. **Compartir Resultados** - - Compartir por WhatsApp - - Exportar resultados - ---- - -## 📊 12. RESUMEN POR CATEGORÍA - -### ✅ Completamente Funcional (95%+) -- ✅ Navegación y UI -- ✅ Sistema de búsqueda -- ✅ Visualización de contenido -- ✅ Calculadoras básicas -- ✅ Bloque 1 del Manual - -### ⚠️ Parcialmente Implementado (40-80%) -- ⚠️ Herramientas (77% - falta Triage interactivo y persistencia) -- ⚠️ Contenido Médico (40% - base sólida, necesita expansión) -- ⚠️ Manual Digital (60% - varios bloques parciales) - -### ❌ No Implementado (0-20%) -- ❌ Infografías (0% - estructura creada, contenido faltante) -- ❌ Bloque 5 Transtelefónicos (0% - propuesta sin implementar) -- ❌ Capítulos SVA (0% - propuesta sin implementar) -- ❌ Persistencia de datos (0%) -- ❌ Backend/API (0% - no existe) - ---- - -## 🎉 CONCLUSIÓN - -**Estado General:** 🟡 **MVP Funcional - Base Sólida para Desarrollo** - -La aplicación tiene una **base sólida y funcional** con: -- ✅ UI/UX completa y pulida -- ✅ Navegación operativa -- ✅ 10 herramientas completas -- ✅ Contenido médico básico funcional -- ✅ Manual digital parcialmente implementado - -**Áreas de mejora principales:** -- ⚠️ Expansión de contenido médico (fármacos, protocolos) -- ⚠️ Implementación de propuestas SVA -- ⚠️ Creación de infografías -- ⚠️ Persistencia de datos - -**La aplicación está lista para uso básico** pero necesita expansión de contenido y funcionalidades avanzadas para producción completa. - ---- - -**Última actualización:** 2025-01-27 -**Versión del documento:** 1.0 -**Próxima revisión recomendada:** 2025-02-27 diff --git a/docs/archivo/ESTRUCTURACION_JERARQUICA_INTELIGENTE.md b/docs/archivo/ESTRUCTURACION_JERARQUICA_INTELIGENTE.md deleted file mode 100644 index ae733aee..00000000 --- a/docs/archivo/ESTRUCTURACION_JERARQUICA_INTELIGENTE.md +++ /dev/null @@ -1,1102 +0,0 @@ -# FASE 2: ESTRUCTURACIÓN JERÁRQUICA INTELIGENTE - -**Fecha:** 2025-12-23 -**Proyecto:** Manual TES Digital - Estructuración para Word -**Objetivo:** Crear estructura jerárquica completa de temas y subtemas - ---- - -## METODOLOGÍA DE ESTRUCTURACIÓN - -### Criterios de Agrupación - -1. **Análisis Semántico:** Agrupación por similitud temática y conceptual -2. **Flujo Operativo TES:** Orden lógico de aplicación en trabajo diario -3. **Jerarquía Lógica:** De conceptos generales a específicos -4. **Dependencias:** Bloques que se apoyan en otros se colocan después - -### Principios de Organización - -- **PARTE I:** Fundamentos y evaluación inicial (base conceptual) -- **PARTE II:** Procedimientos críticos inmediatos (salvan vidas) -- **PARTE III:** Material y equipamiento (herramientas) -- **PARTE IV:** Farmacología (medicamentos) -- **PARTE V:** Protocolos operativos (coordinación) -- **PARTE VI:** Conducción y seguridad (llegada y traslado) -- **PARTE VII:** Situaciones especiales (adaptaciones) -- **PARTE VIII:** Habilidades profesionales (comunicación y autocuidado) - ---- - -## ESTRUCTURA JERÁRQUICA COMPLETA - -### PARTE I: FUNDAMENTOS Y EVALUACIÓN INICIAL - -**Objetivo:** Establecer marco conceptual y herramientas de evaluación básicas - -#### SECCIÓN 1.1: FUNDAMENTOS CONCEPTUALES - -**1.1.1 BLOQUE 0 - Fundamentos de Emergencias Prehospitalarias** -- 0.0 Fundamentos de la Atención en Emergencias Prehospitalarias - - 0.0.1 Objetivo del bloque - - 0.0.2 Principios del Soporte Vital (SVB/SVA) - - 0.0.3 Cadena de Supervivencia - - 0.0.4 Evaluación Primaria del Paciente Traumatizado (ATLS) - - 0.0.5 Soporte Vital Básico y RCP (conceptos) - - 0.0.6 Soporte Vital Avanzado (conceptos) - - 0.0.7 Unidades Móviles y Dotación - - 0.0.8 Alcance del TES - - 0.0.9 Contenido Formativo vs Operativo - - 0.0.10 Puntos Clave para TES - -#### SECCIÓN 1.2: PROCEDIMIENTOS BÁSICOS DE EVALUACIÓN - -**1.2.1 BLOQUE 1 - Procedimientos Básicos** -- 1.1 Constantes Vitales: Toma y Registro Operativo - - 1.1.1 Objetivo operativo - - 1.1.2 Alcance y Límites - - 1.1.3 Principios TES - - 1.1.4 Material y Componentes - - 1.1.5 Procedimiento Paso a Paso - - 1.1.6 Errores Frecuentes - - 1.1.7 Puntos Clave TES - -- 1.2 Evaluación Primaria del Paciente: ABCDE Operativo - - 1.2.1 Objetivo operativo - - 1.2.2 Alcance y Límites - - 1.2.3 Principios TES - - 1.2.4 Procedimiento Paso a Paso: ABCDE - - 1.2.5 Re-Evaluación Continua - - 1.2.6 Errores frecuentes - - 1.2.7 Puntos Clave TES - -- 1.3 Escala de Glasgow: Uso Operativo en Campo - - 1.3.1 Objetivo operativo - - 1.3.2 Alcance y Límites - - 1.3.3 Principios TES - - 1.3.4 Componentes de la Escala de Glasgow - - 1.3.5 Procedimiento Paso a Paso - - 1.3.6 Errores Frecuentes - - 1.3.7 Puntos Clave TES - -- 1.4 Triage Básico: START y Categorización Operativa - - 1.4.1 Objetivo operativo - - 1.4.2 Alcance y Límites - - 1.4.3 Principios TES - - 1.4.4 Sistema START: Categorías - - 1.4.5 Procedimiento Paso a Paso - - 1.4.6 Errores Frecuentes - - 1.4.7 Puntos Clave TES - ---- - -### PARTE II: SOPORTE VITAL Y PROCEDIMIENTOS CRÍTICOS - -**Objetivo:** Procedimientos que salvan vidas - aplicación inmediata - -#### SECCIÓN 2.1: SOPORTE VITAL BÁSICO Y RCP - -**2.1.1 BLOQUE 4 - Soporte Vital Básico y RCP** -- 4.0 Acceso Vascular Básico - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MATERIAL Y PREPARACIÓN - - 4. TÉCNICA DE VENOPUNCIÓN - - 5. FIJACIÓN Y VERIFICACIÓN - - 6. RESOLUCIÓN DE PROBLEMAS - - 7. PUNTOS CLAVE PARA TES - -- 4.0 Reconocimiento de PCR - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. RECONOCIMIENTO DE PCR - - 4. EVALUACIÓN DE CONSCIENCIA Y RESPIRACIÓN - - 5. ACTIVACIÓN DEL SISTEMA DE EMERGENCIAS - - 6. PUNTOS CLAVE PARA TES - -- 4.1 RCP en Adultos - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. SECUENCIA C-A-B - - 4. COMPRESIONES TORÁCICAS - - 5. VENTILACIONES DE RESCATE - - 6. RE-EVALUACIÓN - - 7. PUNTOS CLAVE PARA TES - -- 4.2 RCP en Pediatría - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. DIFERENCIAS CON ADULTOS - - 4. TÉCNICA ESPECÍFICA PEDIÁTRICA - - 5. DOSIFICACIÓN Y EQUIPAMIENTO - - 6. PUNTOS CLAVE PARA TES - -- 4.3 RCP en Lactantes - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. DIFERENCIAS CON ADULTOS/PEDIATRÍA - - 4. TÉCNICA ESPECÍFICA LACTANTES - - 5. DOSIFICACIÓN Y EQUIPAMIENTO - - 6. PUNTOS CLAVE PARA TES - -- 4.4 Uso del DEA (Desfibrilador Externo Automático) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. FUNCIONAMIENTO DEL DEA - - 4. PROCEDIMIENTO DE USO - - 5. INTEGRACIÓN CON RCP - - 6. SITUACIONES ESPECIALES - - 7. PUNTOS CLAVE PARA TES - -- 4.5 RCP con Dos Intervinientes - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. COORDINACIÓN ENTRE INTERVINIENTES - - 4. ROTACIÓN DE COMPRESIONES - - 5. COMUNICACIÓN EFECTIVA - - 6. PUNTOS CLAVE PARA TES - -- 4.6 OVACE en Adultos (Obstrucción de Vía Aérea por Cuerpo Extraño) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. RECONOCIMIENTO DE OVACE - - 4. MANIOBRA DE HEIMLICH - - 5. COMPRESIONES TORÁCICAS - - 6. SITUACIONES ESPECIALES - - 7. PUNTOS CLAVE PARA TES - -- 4.7 OVACE en Pediatría - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. DIFERENCIAS CON ADULTOS - - 4. TÉCNICA ESPECÍFICA PEDIÁTRICA - - 5. PREVENCIÓN - - 6. PUNTOS CLAVE PARA TES - -- 4.8 OVACE en Lactantes - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TÉCNICA ESPECÍFICA LACTANTES - - 4. COMPRESIONES TORÁCICAS Y GOLPES EN ESPALDA - - 5. PREVENCIÓN - - 6. PUNTOS CLAVE PARA TES - -- 4.9 Posición Lateral de Seguridad - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES Y CONTRAINDICACIONES - - 4. TÉCNICA DE COLOCACIÓN - - 5. VARIANTES SEGÚN SITUACIÓN - - 6. PUNTOS CLAVE PARA TES - -#### SECCIÓN 2.2: MEDICINA DE EMERGENCIAS APLICADA - -**2.2.1 BLOQUE 9 - Medicina de Emergencias Aplicada** -- 9.0 Medicina de Emergencias Aplicada - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. VALORACIÓN PRIMARIA Y SECUNDARIA ESTRUCTURADA - - 3.1 Enfoque operativo: "Siempre igual, para no olvidar nada" - - 3.2 Fase 1: Valoración Primaria (ABCDE) – < 60 segundos - - 3.3 Fase 2: Valoración Secundaria (SAMPLE + cabeza a pies) - - 4. SOPORTE VITAL BÁSICO Y DEA (ACTUALIZADO 2024) - - 4.1 Algoritmo operativo TES para PCR adulta - - 4.2 Cambios clave 2024 - - 5. MANEJO DE LA VÍA AÉREA PARA TES - - 5.1 Jerarquía de intervenciones (de simple a complejo) - - 5.2 Criterio de Intubación - - 6. SHOCK: IDENTIFICACIÓN Y MANEJO INICIAL - - 6.1 Reconocimiento precoz (no esperar a hipotensión) - - 6.2 Clasificación operativa para TES - - 6.3 Manejo inicial unificado - - 7. DOLOR TORÁCICO Y SÍNDROMES CORONARIOS AGUDOS - - 7.1 Valoración operativa: ¿Es cardíaco? - - 7.2 Manejo TES para IAM sospechoso - - 8. ACV Y EMERGENCIAS NEUROLÓGICAS - - 8.1 Escala prehospitalaria simple: FAST-R - - 8.2 Manejo del ACV agudo - - 8.3 Estado Epiléptico Convulsivo - - 9. DISNEA Y FALLA RESPIRATORIA AGUDA - - 9.1 Diagnóstico diferencial rápido (escuchar, observar) - - 10. TRAUMA GRAVE: ENFOQUE TES - - 10.1 Prioridades en escena de trauma - - 10.2 Lesiones que matan en minutos - - 10.3 Abordaje sistematizado (MARCH) - - 11. RELACIÓN CON OTROS CAPÍTULOS - - 12. PUNTOS CLAVE PARA TES - - 13. NOTA FINAL DE SEGURIDAD CLÍNICA - ---- - -### PARTE III: MATERIAL Y EQUIPAMIENTO - -**Objetivo:** Conocimiento y uso correcto de material sanitario e inmovilización - -#### SECCIÓN 3.1: MATERIAL DE INMOVILIZACIÓN - -**3.1.1 BLOQUE 2 - Material e Inmovilización** -- 2.0 Anatomía Operativa para Inmovilización y Movilización - - 2.0.1 Objetivo operativo - - 2.0.2 Landmarks Óseos Imprescindibles por Regiones - - 2.0.3 Articulaciones Relevantes y Concepto de "Ejes" - - 2.0.4 Arterias y Pulsos Palpables para Control Neurovascular - - 2.0.5 Puntos Clave TES - -- 2.1 Collarín Cervical (⚠️ ARCHIVO CORTO - 178 palabras - posible duplicado) -- 2.2 Inmovilización Manual - - 2.2.1 Objetivo operativo - - 2.2.2 Alcance y Límites - - 2.2.3 Principios TES - - 2.2.4 Técnicas de Inmovilización Manual - - 2.2.5 Puntos Clave TES - -- 2.3 Collarín Cervical (ARCHIVO COMPLETO - 4,089 palabras) - - 2.3.1 Objetivo operativo - - 2.3.2 Alcance y Límites - - 2.3.3 Indicaciones y Contraindicaciones - - 2.3.4 Técnica de Colocación - - 2.3.5 Errores Críticos - - 2.3.6 Puntos Clave TES - -- 2.4 Camilla Cuchara - - 2.4.1 Objetivo operativo - - 2.4.2 Indicaciones - - 2.4.3 Técnica de Uso - - 2.4.4 Puntos Clave TES - -- 2.5 Tablero Espinal - - 2.5.1 Objetivo operativo - - 2.5.2 Indicaciones - - 2.5.3 Técnica de Inmovilización - - 2.5.4 Puntos Clave TES - -- 2.6 Colchón de Vacío - - 2.6.1 Objetivo operativo - - 2.6.2 Indicaciones - - 2.6.3 Técnica de Uso - - 2.6.4 Puntos Clave TES - -- 2.7 Extricación y Movimientos en Bloque - - 2.7.1 Objetivo operativo - - 2.7.2 Principios de Extricación - - 2.7.3 Técnicas de Movimiento en Bloque - - 2.7.4 Puntos Clave TES - -- 2.8 Transferencias y Movilización - - 2.8.1 Objetivo operativo - - 2.8.2 Técnicas de Transferencia - - 2.8.3 Ergonomía y Seguridad - - 2.8.4 Puntos Clave TES - -- 2.9 Errores Críticos en Inmovilización - - 2.9.1 Errores Comunes - - 2.9.2 Prevención de Errores - - 2.9.3 Puntos Clave TES - -- 2.10 Férulas: Familias, Selección y Uso Operativo - - 2.10.1 Objetivo operativo - - 2.10.2 Indicaciones - - 2.10.3 Clasificación Global de Férulas por Familias - - 2.10.4 Principios TES Antes de Ferulizar - - 2.10.5 Técnicas de Ferulización - - 2.10.6 Puntos Clave TES - -- 2.11 Cinturón Pélvico (Pelvic Binder) - - 2.11.1 Objetivo operativo - - 2.11.2 Alcance y Límites - - 2.11.3 Principios TES - - 2.11.4 Material y Tipos - - 2.11.5 Técnica de Colocación - - 2.11.6 Puntos Clave TES - -- 2.12 Férulas de Tracción - - 2.12.1 Objetivo operativo - - 2.12.2 Indicaciones - - 2.12.3 Contraindicaciones - - 2.12.4 Técnica de Aplicación - - 2.12.5 Puntos Clave TES - -- 2.13 Camillas y Sillas de Evacuación - - 2.13.1 Objetivo operativo - - 2.13.2 Indicaciones: Elección del Dispositivo - - 2.13.3 Principios TES de Evacuación Segura - - 2.13.4 Preparación Previa Común - - 2.13.5 Técnicas de Uso - - 2.13.6 Puntos Clave TES - -- 2.X Inventario de Material de Inmovilización - - Listado completo de material - - Especificaciones técnicas - -#### SECCIÓN 3.2: MATERIAL SANITARIO Y OXIGENOTERAPIA - -**3.2.1 BLOQUE 3 - Material Sanitario y Oxigenoterapia** -- 3.0 Oxigenoterapia Básica (516 líneas) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TÉCNICAS DE POSICIONAMIENTO EN LA VÍA - - 4. TÉCNICAS DE FRENADO - - 5. TÉCNICAS EN CURVAS - - 6. PUNTOS CLAVE PARA TES - -- 3.0 Oxigenoterapia: Fundamentos (762 líneas) ⚠️ DUPLICADO NUMERACIÓN - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. FUNDAMENTOS TÉCNICOS DE OXIGENOTERAPIA - - 4. DISPOSITIVOS DE ADMINISTRACIÓN - - 5. SEGURIDAD EN OXIGENOTERAPIA - - 6. PUNTOS CLAVE PARA TES - -- 3.1 Dispositivos de Oxigenoterapia (765 líneas) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. CLASIFICACIÓN DE DISPOSITIVOS - - 4. SELECCIÓN DEL DISPOSITIVO ADECUADO - - 5. TÉCNICAS DE USO - - 6. PUNTOS CLAVE PARA TES - -- 3.1 Ventilación con Bolsa-Mascarilla (483 líneas) ⚠️ DUPLICADO NUMERACIÓN - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MATERIAL Y COMPONENTES - - 4. TÉCNICA DE VENTILACIÓN - - 5. VERIFICACIÓN DE EFECTIVIDAD - - 6. PUNTOS CLAVE PARA TES - -- 3.2 Aspiración (793 líneas) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MATERIAL Y EQUIPAMIENTO - - 4. TÉCNICA DE ASPIRACIÓN - - 5. COMPLICACIONES Y PREVENCIÓN - - 6. PUNTOS CLAVE PARA TES - -- 3.2 Cánula Orofaringea (524 líneas) ⚠️ DUPLICADO NUMERACIÓN - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES Y CONTRAINDICACIONES - - 4. TÉCNICA DE INSERCIÓN - - 5. VERIFICACIÓN Y COMPLICACIONES - - 6. PUNTOS CLAVE PARA TES - -- 3.3 BVM (Bolsa-Válvula-Mascarilla) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. COMPONENTES DEL BVM - - 4. TÉCNICA DE VENTILACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 3.4 Cánulas (Nasofaríngeas y Orofaringeas) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TIPOS DE CÁNULAS - - 4. TÉCNICAS DE INSERCIÓN - - 5. PUNTOS CLAVE PARA TES - -- 3.5 Organización del Maletín - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. SISTEMA DE ORGANIZACIÓN - - 4. CHECKLIST DE MATERIAL - - 5. PUNTOS CLAVE PARA TES - -- 3.6 Control de Hemorragias - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TÉCNICAS DE CONTROL - - 4. MATERIAL ESPECÍFICO - - 5. PUNTOS CLAVE PARA TES - -- 3.7 Quemaduras - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. VALORACIÓN DE QUEMADURAS - - 4. TRATAMIENTO INICIAL - - 5. PUNTOS CLAVE PARA TES - -- 3.8 Heridas y Vendajes - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TIPOS DE HERIDAS - - 4. TÉCNICAS DE VENDAJE - - 5. PUNTOS CLAVE PARA TES - -- 3.9 Exposición y Aislamiento Térmico - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PREVENCIÓN DE HIPOTERMIA - - 4. MATERIAL DE AISLAMIENTO - - 5. PUNTOS CLAVE PARA TES - -- 3.10 Monitorización Básica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. EQUIPOS DE MONITORIZACIÓN - - 4. INTERPRETACIÓN BÁSICA - - 5. PUNTOS CLAVE PARA TES - -- 3.11 Glucometría - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TÉCNICA DE MEDICIÓN - - 4. INTERPRETACIÓN DE RESULTADOS - - 5. PUNTOS CLAVE PARA TES - -- 3.12 Termometría - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. TÉCNICAS DE MEDICIÓN - - 4. INTERPRETACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 3.13 Confort y Dolor - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. EVALUACIÓN DEL DOLOR - - 4. MEDIDAS DE CONFORTO - - 5. PUNTOS CLAVE PARA TES - -- 3.14 Bioseguridad y Descontaminación - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MEDIDAS DE BIOSEGURIDAD - - 4. DESCONTAMINACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 3.15 Gestión de Material en Escena - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. ORGANIZACIÓN EN ESCENA - - 4. PUNTOS CLAVE PARA TES - -- 3.16 Comunicación Operativa - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. COMUNICACIÓN CON COORDINACIÓN - - 4. PUNTOS CLAVE PARA TES - -- 3.17 Señalización e Iluminación - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. SEÑALIZACIÓN EN ESCENA - - 4. ILUMINACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 3.18 Documentación Operativa - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. REGISTRO DE DATOS - - 4. PUNTOS CLAVE PARA TES - -- 3.99 Cierre del Bloque 3 -- 3.X Inventario de Material Sanitario -- 3.X2 Maletín de Curas -- 3.X3 Bolsa de Monitorización -- 3.X4 Inventario Global -- 3.X5 Checklist Maestro - ---- - -### PARTE IV: FARMACOLOGÍA Y MEDICAMENTOS - -**Objetivo:** Administración segura y efectiva de fármacos en emergencias - -#### SECCIÓN 4.1: PRINCIPIOS Y VADEMÉCUM - -**4.1.1 BLOQUE 6 - Farmacología y Vademécum Operativo** -- 6.0 Principios de Administración de Fármacos - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PRINCIPIOS DE SEGURIDAD - - 4. VÍAS DE ADMINISTRACIÓN - - 5. CÁLCULO DE DOSIS - - 6. PUNTOS CLAVE PARA TES - -- 6.1 Vademécum Operativo: Fármacos de Uso Frecuente - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. LISTADO DE FÁRMACOS ESENCIALES - - 4. DOSIS Y VÍAS - - 5. PUNTOS CLAVE PARA TES - -- 6.2 Oxígeno: Administración y Seguridad - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. OXÍGENO COMO FÁRMACO - - 4. CONCENTRACIONES Y DISPOSITIVOS - - 5. SEGURIDAD - - 6. PUNTOS CLAVE PARA TES - -- 6.3 Adrenalina: Uso en Anafilaxia y RCP - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES - - 4. DOSIS Y VÍAS - - 5. CONTRAINDICACIONES - - 6. PUNTOS CLAVE PARA TES - -- 6.4 Aspirina: Uso en Síndrome Coronario Agudo - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES - - 4. DOSIS Y ADMINISTRACIÓN - - 5. CONTRAINDICACIONES - - 6. PUNTOS CLAVE PARA TES - -- 6.5 Glucagón: Uso en Hipoglucemia - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES - - 4. DOSIS Y VÍAS - - 5. PUNTOS CLAVE PARA TES - -- 6.6 Salbutamol: Uso en Crisis Asmática - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INDICACIONES - - 4. TÉCNICA DE ADMINISTRACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 6.7 Abreviaturas y Terminología Farmacológica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. ABREVIATURAS ESTÁNDAR - - 4. TERMINOLOGÍA COMÚN - - 5. PUNTOS CLAVE PARA TES - ---- - -### PARTE V: PROTOCOLOS Y GESTIÓN OPERATIVA - -**Objetivo:** Coordinación, comunicación y gestión del trabajo TES - -#### SECCIÓN 5.1: PROTOCOLOS TRANSTELEFÓNICOS - -**5.1.1 BLOQUE 5 - Protocolos Transtelefónicos** -- 5.0 Introducción a Protocolos Transtelefónicos (⚠️ CORTO - 567 palabras) - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MARCO CONCEPTUAL - - 4. PUNTOS CLAVE PARA TES - -- 5.0 Protocolos de Emergencias Específicas (3,176 palabras) ⚠️ DUPLICADO NUMERACIÓN - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO: DOLOR TORÁCICO - - 4. PROTOCOLO: DISTRÉS RESPIRATORIO AGUDO - - 5. PROTOCOLO: TRAUMA GRAVE - - 6. PROTOCOLO: ICTUS AGUDO - - 7. PROTOCOLO: HIPOGLUCEMIA - - 8. PUNTOS CLAVE PARA TES - -- 5.1 PCR Transtelefónica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE RCP POR TELÉFONO - - 5. PUNTOS CLAVE PARA TES - -- 5.2 OVACE Transtelefónica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE MANIOBRAS POR TELÉFONO - - 5. PUNTOS CLAVE PARA TES - -- 5.3 SCA Transtelefónico - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE PRIMEROS AUXILIOS - - 5. PUNTOS CLAVE PARA TES - -- 5.4 Ictus Transtelefónico - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. ESCALA FAST - - 4. PROTOCOLO DE ACTIVACIÓN - - 5. PUNTOS CLAVE PARA TES - -- 5.5 Anafilaxia Transtelefónica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE ADMINISTRACIÓN DE ADRENALINA - - 5. PUNTOS CLAVE PARA TES - -- 5.6 Crisis Asmática Transtelefónica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE PRIMEROS AUXILIOS - - 5. PUNTOS CLAVE PARA TES - -- 5.7 Hipoglucemia Transtelefónica - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLO DE IDENTIFICACIÓN - - 4. GUÍA DE ADMINISTRACIÓN DE GLUCOSA - - 5. PUNTOS CLAVE PARA TES - -- 5.8 Comunicación con Coordinador - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PROTOCOLOS DE COMUNICACIÓN - - 4. PUNTOS CLAVE PARA TES - -#### SECCIÓN 5.2: GESTIÓN OPERATIVA Y DOCUMENTACIÓN - -**5.2.1 BLOQUE 8 - Gestión Operativa y Documentación** -- 8.0 Introducción a la Gestión Operativa - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. EL CICLO DE UNA ACTIVIDAD - - 4. INDICADOR CLAVE: TIEMPO DE DISPONIBILIDAD - - 5. PRINCIPIOS DE GESTIÓN EFICIENTE - - 6. PUNTOS CLAVE PARA TES - -- 8.1 Documentación Clínica Prehospitalaria - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. QUÉ DOCUMENTAR - - 4. FORMATO Y ESTRUCTURA - - 5. CASOS ESPECIALES - - 6. PUNTOS CLAVE PARA TES - -- 8.2 Coordinación y Comunicación Operativa - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. COMUNICACIÓN RADIOFÓNICA EFICAZ - - 4. TRANSFERENCIA AL HOSPITAL (PROTOCOLO ISOBAR) - - 5. COORDINACIÓN CON OTROS SERVICIOS - - 6. PUNTOS CLAVE PARA TES - -- 8.3 Gestión de Recursos y Material - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. SISTEMA "PUNTO DE USO" - - 4. CHECKLIST POST-INTERVENCIÓN - - 5. CONTROL DE FÁRMACOS - - 6. GESTIÓN DE RESIDUOS - - 7. PUNTOS CLAVE PARA TES - -- 8.4 Calidad y Mejora Continua - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. CICLO DE MEJORA (HACER - VERIFICAR - ACTUAR) - - 4. DEBRIEFING OPERATIVO - - 5. FORMACIÓN CONTINUADA - - 6. AUDITORÍAS INTERNAS - - 7. PUNTOS CLAVE PARA TES - ---- - -### PARTE VI: CONDUCCIÓN Y SEGURIDAD VIAL - -**Objetivo:** Llegada segura a escena y traslado eficiente - -#### SECCIÓN 6.1: CONDUCCIÓN EN EMERGENCIAS - -**6.1.1 BLOQUE 7 - Conducción y Seguridad Vial** -- 7.0 Fundamentos de Conducción en Urgencias - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PRINCIPIOS FUNDAMENTALES - - 4. MARCO LEGAL Y ÉTICO - - 5. RESPONSABILIDADES DEL CONDUCTOR TES - - 6. PUNTOS CLAVE PARA TES - -- 7.1 Uso de Luces y Sirena - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. REGULACIÓN Y NORMATIVA - - 4. PROTOCOLOS DE ACTIVACIÓN - - 5. TÉCNICAS DE USO EFECTIVO - - 6. SEGURIDAD - - 7. PUNTOS CLAVE PARA TES - -- 7.2 Técnicas de Conducción en Emergencias - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PRINCIPIOS TÉCNICOS FUNDAMENTALES - - 4. TÉCNICAS DE POSICIONAMIENTO EN LA VÍA - - 5. TÉCNICAS DE FRENADO - - 6. TÉCNICAS EN CURVAS - - 7. TÉCNICAS DE ADELANTAMIENTO - - 8. TÉCNICAS PARA CONDICIONES ADVERSAS - - 9. TÉCNICAS ESPECIALES - - 10. PUNTOS CLAVE PARA TES - -- 7.3 Seguridad Vial y Prevención de Accidentes - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. FACTORES DE RIESGO TES - - 4. PREVENCIÓN OPERATIVA - - 5. GESTIÓN DE DISTRACCIONES - - 6. RECONOCIMIENTO DE FATIGA - - 7. PUNTOS CLAVE PARA TES - -- 7.4 Gestión de Rutas y Navegación - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. PRINCIPIO DE LA RUTA ÓPTIMA - - 4. TÉCNICAS DE NAVEGACIÓN - - 5. COMUNICACIÓN EFECTIVA CON COORDINACIÓN - - 6. PUNTOS CLAVE PARA TES - -- 7.5 Protocolos de Seguridad en Escena - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. EVALUACIÓN INICIAL: "ENTRAR CON LOS OJOS" - - 4. APARCAMIENTO TÁCTICO - - 5. EQUIPO DE PROTECCIÓN INDIVIDUAL (EPI) DE ESCENA - - 6. GESTIÓN DE RIESGOS ESPECÍFICOS - - 7. COORDINACIÓN CON OTROS SERVICIOS - - 8. PUNTOS CLAVE PARA TES - ---- - -### PARTE VII: SITUACIONES ESPECIALES Y TRAUMA - -**Objetivo:** Adaptación de habilidades a poblaciones vulnerables y trauma grave - -#### SECCIÓN 7.1: SITUACIONES ESPECIALES - -**7.1.1 BLOQUE 10 - Situaciones Especiales y Protocolos Avanzados** -- 10.0 Situaciones Especiales y Protocolos Avanzados - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. INCIDENTE CON MÚLTIPLES VÍCTIMAS (IMV) - - 3.1 Triage Prehospitalario: Método START - - 3.2 Categorización operativa - - 3.3 Organización de escena IMV - - 4. PACIENTE PEDIÁTRICO: DIFERENCIAS CLAVE - - 4.1 Valoración: No es un adulto pequeño - - 4.2 Evaluación pediátrica (método PEARL) - - 4.3 Manejo de urgencias pediátricas - - 5. PACIENTE GERIÁTRICO: APROXIMACIÓN INTEGRAL - - 5.1 Cambios fisiológicos que importan - - 5.2 Enfoque geriátrico específico - - 6. EMERGENCIAS OBSTÉTRICAS Y NEONATALES - - 6.1 Parto inminente vs. parto NO inminente - - 6.2 Asistencia al parto normal (prehospitalario) - - 6.3 Reanimación neonatal (primeros minutos) - - 6.4 Hemorragia postparto (PPH) - - 7. INTOXICACIONES Y SOBREDOSIS - - 7.1 Enfoque general: ABCDE + Descontaminación + Antídotos - - 7.2 Manejo por tipo común - - 7.3 Descontaminación - - 8. HIPOTERMIA Y GOLPE DE CALOR - - 8.1 Hipotermia (<35°C) - - 8.2 Golpe de Calor (Hipertermia >40°C) - - 9. EMERGENCIAS PSIQUIÁTRICAS Y CONDUCTUALES - - 9.1 Evaluación de peligrosidad - - 9.2 Aproximación verbal (DESCALZO) - - 9.3 Situaciones específicas - - 10. CUIDADOS AL FINAL DE LA VIDA EN URGENCIAS - - 10.1 Reconocimiento de la fase terminal - - 10.2 Manejo: De la curación al confort - - 10.3 Comunicación con la familia - - 10.4 Manejo de DNR/DNI - - 11. RELACIÓN CON OTROS CAPÍTULOS - - 12. PUNTOS CLAVE PARA TES - - 13. NOTA FINAL DE SEGURIDAD ÉTICA Y LEGAL - -#### SECCIÓN 7.2: PROTOCOLOS DE TRAUMA - -**7.2.1 BLOQUE 11 - Protocolos de Trauma y Escenarios de Riesgo** -- 11.0 Protocolos de Trauma y Escenarios de Riesgo - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. MANEJO DE LA VÍA AÉREA EN TRAUMA - - 3.1 Desafíos específicos del trauma - - 3.2 Algoritmo de vía aérea en trauma - - 3.3 Técnica de intubación rápida en trauma - - 4. NEUMOTÓRAX A TENSIÓN: IDENTIFICACIÓN E INTERVENCIÓN - - 4.1 Reconocimiento: No esperar la triada clásica completa - - 4.2 Descompresión con aguja (NDC) - - 5. HEMORRAGIA NO COMPRESIBLE: TÓRAX, ABDOMEN, PELVIS - - 5.1 Hemotórax masivo - - 5.2 Trauma abdominal cerrado con shock - - 5.3 Fractura de pelvis inestable - - 6. HERIDAS PENETRANTES: TÓRAX, ABDOMEN, CUELLO - - 6.1 Zonas de cuello - - 6.2 Heridas torácicas penetrantes - - 6.3 Trauma ocular penetrante - - 7. QUEMADURAS GRAVES - - 7.1 Valoración inicial ABCDE con énfasis especial - - 7.2 Regla de los 9's (adulto) y de la palma (niño) - - 7.3 Manejo específico - - 8. TRAUMA CRANEOENCEFÁLICO GRAVE (TCE) - - 8.1 Evaluación prehospitalaria de gravedad - - 8.2 Manejo del TCE grave (GCS ≤ 8) - - 8.3 Signos de herniación cerebral - - 9. TRAUMA RAQUIMEDULAR (TRM) - - 9.1 Sospecha clínica - - 9.2 Inmovilización espinal completa - - 9.3 Manejo médico del TRM - - 10. AMPUTACIONES Y REIMPLANTES - - 10.1 Manejo del muñón - - 10.2 Manejo de la parte amputada - - 10.3 Criterios de reimplante - - 11. RELACIÓN CON OTROS CAPÍTULOS - - 12. PUNTOS CLAVE PARA TES - - 13. NOTA FINAL DE SEGURIDAD EN TRAUMA - ---- - -### PARTE VIII: HABILIDADES PROFESIONALES - -**Objetivo:** Comunicación efectiva y autocuidado profesional - -#### SECCIÓN 8.1: COMUNICACIÓN Y RELACIÓN CON EL PACIENTE - -**8.1.1 BLOQUE 13 - Comunicación y Relación con el Paciente** -- 13.0 Comunicación y Relación con el Paciente - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. COMUNICACIÓN TERAPÉUTICA EN CRISIS - - 3.1 Principios Fundamentales (Regla de las 3 C's) - - 3.2 Técnicas de Escucha Activa - - 4. COMUNICACIÓN CON PACIENTES EN ESTADOS ALTERADOS - - 4.1 Paciente Ansioso/Agitado - - 4.2 Paciente Confuso/Desorientado - - 4.3 Paciente con Dolor Intenso - - 5. COMUNICACIÓN CON FAMILIARES Y ACOMPAÑANTES - - 5.1 Roles definidos - - 5.2 Dar malas noticias (en escena) - - 5.3 En traslados con familia a bordo - - 6. COMUNICACIÓN INTERCULTURAL Y CON BARRERAS - - 6.1 Principios generales - - 6.2 Paciente con discapacidad auditiva - - 6.3 Paciente con discapacidad visual - - 7. CONSENTIMIENTO INFORMADO Y NEGATIVAS - - 7.1 Capacidad para decidir - - 7.2 Proceso de consentimiento informado en urgencias - - 7.3 Manejo de una negativa (AMA) - - 8. COMUNICACIÓN DE ERRORES O EVENTOS ADVERSOS - - 8.1 Si ocurre un error - - 8.2 Reporte interno (Cultura Justa) - - 9. AUTOCUIDADO Y COMUNICACIÓN EN EL EQUIPO - - 9.1 Debriefing emocional - - 9.2 Comunicación asertiva dentro del equipo - - 10. RELACIÓN CON OTROS CAPÍTULOS - - 11. PUNTOS CLAVE PARA TES - - 12. NOTA FINAL DE ÉTICA Y PROFESIONALIDAD - -#### SECCIÓN 8.2: SEGURIDAD PERSONAL Y SALUD DEL TES - -**8.2.1 BLOQUE 14 - Seguridad Personal y Salud del TES** -- 14.0 Seguridad Personal y Salud del TES - - 1. OBJETIVO OPERATIVO - - 2. ALCANCE Y LÍMITES - - 3. BIOSEGURIDAD: PROTECCIÓN FRENTE A RIESGOS BIOLÓGICOS - - 3.1 Niveles de Precaución y EPI - - 3.2 Protocolo POST-Exposición - - 4. SEGURIDAD FÍSICA EN ESCENA: EVALUACIÓN DINÁMICA DE RIESGOS - - 4.1 Técnica BES 360° (Biohazard, Environmental, Safety) - - 4.2 Escenas Violentas o de Crimen - - 4.3 Manipulación de Cargas y Ergonomía - - 5. SALUD MENTAL Y GESTIÓN DEL ESTRÉS TRAUMÁTICO - - 5.1 Reconocimiento del Estrés Traumático - - 5.2 Estrategias de Afrontamiento Inmediato - - 5.3 Prevención del Burnout - - 6. SALUD FÍSICA: SUEÑO, NUTRICIÓN Y ESTADO FÍSICO - - 6.1 Sueño y Trabajo a Turnos - - 6.2 Nutrición en Servicio - - 6.3 Condición Física Básica - - 7. SEGURIDAD VIAL PERSONAL (AL Y DEL TRABAJO) - - 7.1 Fatiga al Volante (Riesgo Real) - - 7.2 Conducción Defensiva (fuera de servicio) - - 8. RELACIONES EN EL EQUIPO Y CLIMA LABORAL - - 8.1 Un equipo sano es un equipo seguro - - 8.2 Acoso y Disrupción en el Trabajo - - 9. PLAN DE AUTOCUIDADO PERSONALIZADO (PAP-TES) - - 9.1 Crear tu propio plan (ejemplo) - - 10. RELACIÓN CON OTROS CAPÍTULOS - - 11. PUNTOS CLAVE PARA TES - - 12. NOTA FINAL: EL CONTRATO NO ESCRITO - ---- - -## APÉNDICES - -### APÉNDICE A: INVENTARIOS Y CHECKLISTS - -- A.1 Inventario de Material de Inmovilización (BLOQUE_02_X) -- A.2 Inventario de Material Sanitario (BLOQUE_03_X) -- A.3 Maletín de Curas (BLOQUE_03_X2) -- A.4 Bolsa de Monitorización (BLOQUE_03_X3) -- A.5 Inventario Global (BLOQUE_03_X4) -- A.6 Checklist Maestro (BLOQUE_03_X5) - -### APÉNDICE B: ABREVIATURAS Y TERMINOLOGÍA - -- B.1 Abreviaturas Farmacológicas (BLOQUE_06_7) -- B.2 Terminología Médica Común -- B.3 Siglas y Acrónimos del Sistema de Emergencias - -### APÉNDICE C: PROTOCOLOS Y ALGORITMOS - -- C.1 Algoritmo ABCDE Completo -- C.2 Algoritmo RCP Actualizado 2024 -- C.3 Algoritmo OVACE por Edad -- C.4 Protocolo START de Triage -- C.5 Protocolo ISOBAR de Transferencia - ---- - -## MAPA DE DEPENDENCIAS ENTRE BLOQUES - -### Flujo de Dependencias - -``` -BLOQUE 0 (Fundamentos) - ↓ -BLOQUE 1 (Procedimientos Básicos) - ↓ -BLOQUE 4 (Soporte Vital) ← BLOQUE 2 (Material Inmovilización) - ↓ ← BLOQUE 3 (Material Sanitario) -BLOQUE 9 (Medicina Aplicada) ← BLOQUE 6 (Farmacología) - ↓ -BLOQUE 10 (Situaciones Especiales) - ↓ -BLOQUE 11 (Protocolos Trauma) - ↓ -BLOQUE 5 (Protocolos Transtelefónicos) ← BLOQUE 8 (Gestión Operativa) - ↓ -BLOQUE 7 (Conducción y Seguridad) - ↓ -BLOQUE 13 (Comunicación) ← BLOQUE 14 (Seguridad Personal) -``` - ---- - -## ESTRUCTURA DE NAVEGACIÓN PARA WORD - -### Niveles de Título Propuestos - -**TÍTULO 1 (Nivel 1):** PARTE I, PARTE II, PARTE III, etc. -**TÍTULO 2 (Nivel 2):** SECCIÓN X.X: Nombre de Sección -**TÍTULO 3 (Nivel 3):** BLOQUE X - Nombre del Bloque -**TÍTULO 4 (Nivel 4):** X.Y Nombre del Capítulo -**TÍTULO 5 (Nivel 5):** Secciones dentro del capítulo (1. OBJETIVO OPERATIVO, 2. ALCANCE Y LÍMITES, etc.) -**TÍTULO 6 (Nivel 6):** Subsecciones (3.1, 3.2, etc.) - -### Hipervínculos Propuestos - -1. **Índice General:** Enlaces a todas las PARTES -2. **Índice por Bloques:** Enlaces a todos los BLOQUES -3. **Referencias Cruzadas:** Entre bloques relacionados -4. **Marcadores de Sección:** Para navegación rápida -5. **Enlaces a Apéndices:** Desde texto principal - ---- - -## ANÁLISIS DE CONTENIDO FALTANTE DETALLADO - -### Archivos con Problemas Identificados - -1. **`BLOQUE_02_1_COLLARIN_CERVICAL.md`** (178 palabras) - - **Problema:** Muy corto, posible duplicado - - **Acción:** Verificar si debe fusionarse con `BLOQUE_02_3_COLLARIN_CERVICAL.md` - - **Recomendación:** Eliminar o fusionar - -2. **`BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md`** (567 palabras) - - **Problema:** Muy corto para una introducción - - **Acción:** Revisar contenido y posiblemente fusionar con `BLOQUE_05_0_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md` - - **Recomendación:** Fusionar o expandir - -### Duplicados de Numeración - -**BLOQUE 3:** -- `03_0_OXIGENOTERAPIA_BASICA.md` vs `03_0_OXIGENOTERAPIA_FUNDAMENTOS.md` - - **Solución:** Mantener ambos, renombrar uno a `03_0A` y otro a `03_0B` -- `03_1_DISPOSITIVOS_OXIGENOTERAPIA.md` vs `03_1_VENTILACION_BOLSA_MASCARILLA.md` - - **Solución:** Renombrar segundo a `03_1B_VENTILACION_BOLSA_MASCARILLA.md` -- `03_2_ASPIRACION.md` vs `03_2_CANULA_OROFARINGEA.md` - - **Solución:** Renombrar segundo a `03_2B_CANULA_OROFARINGEA.md` - -**BLOQUE 4:** -- `04_0_ACCESO_VASCULAR_BASICO.md` vs `04_0_RECONOCIMIENTO_PCR.md` - - **Solución:** Renombrar segundo a `04_0B_RECONOCIMIENTO_PCR.md` - -**BLOQUE 5:** -- `05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md` vs `05_0_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md` - - **Solución:** Fusionar o renombrar segundo a `05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md` - -### Contenido Potencialmente Faltante - -**BLOQUE 12 (No existe):** -- Posibles temas: - 1. Legislación y Normativa Sanitaria - 2. Ética Profesional y Deontología - 3. Investigación y Evidencia en Emergencias - 4. Formación Continuada y Certificaciones - -**Contenido Adicional Sugerido:** -- Casos clínicos prácticos con soluciones -- Simulaciones y escenarios de entrenamiento -- Glosario completo de términos médicos -- Índice alfabético de fármacos con referencias cruzadas -- Protocolos específicos por comunidad autónoma (si aplica) -- Infografías y diagramas de flujo visuales - ---- - -## RECOMENDACIONES PARA GENERACIÓN DE WORD - -### Orden de Inclusión en Documento Word - -1. **Portada** -2. **Índice General** (con hipervínculos) -3. **PARTE I:** Fundamentos y Evaluación Inicial -4. **PARTE II:** Soporte Vital y Procedimientos Críticos -5. **PARTE III:** Material y Equipamiento -6. **PARTE IV:** Farmacología y Medicamentos -7. **PARTE V:** Protocolos y Gestión Operativa -8. **PARTE VI:** Conducción y Seguridad Vial -9. **PARTE VII:** Situaciones Especiales y Trauma -10. **PARTE VIII:** Habilidades Profesionales -11. **APÉNDICES:** Inventarios, Checklists, Abreviaturas -12. **Glosario** -13. **Índice Alfabético** - -### Formato Propuesto - -- **Fuente:** Calibri 11pt (texto normal), Calibri Bold (títulos) -- **Espaciado:** 1.15 entre líneas -- **Márgenes:** 2.5cm todos los lados -- **Numeración:** Automática de páginas (inferior centrado) -- **Encabezados:** Nombre del bloque actual -- **Pies de página:** "Manual TES Digital - Versión 1.0" - -### Marcadores para Imágenes - -**Formato:** `[IMAGEN: Descripción de la imagen necesaria]` - -**Ejemplos:** -- `[IMAGEN: Diagrama de flujo ABCDE]` -- `[IMAGEN: Técnica de compresiones torácicas]` -- `[IMAGEN: Posición de manos en RCP]` -- `[IMAGEN: Colocación de collarín cervical]` -- `[IMAGEN: Técnica de Heimlich en adultos]` -- `[IMAGEN: Algoritmo de triage START]` -- `[IMAGEN: Anatomía de vías aéreas]` -- `[IMAGEN: Zonas de cuello para heridas penetrantes]` -- `[IMAGEN: Regla de los 9's para quemaduras]` -- `[IMAGEN: Escala de Glasgow visual]` - ---- - -## PRÓXIMOS PASOS - -1. ✅ **FASE 1 COMPLETADA:** Análisis exploratorio completo -2. ✅ **FASE 2 COMPLETADA:** Estructuración jerárquica inteligente -3. ⏭️ **FASE 3:** Generación de documento Word con hipervínculos -4. ⏭️ **FASE 4:** Análisis detallado de contenido faltante -5. ⏭️ **FASE 5:** Reorganización del proyecto MD - ---- - -**Estructuración completada:** 2025-12-23 diff --git a/docs/archivo/GITHUB_PAGES_FIX.md b/docs/archivo/GITHUB_PAGES_FIX.md deleted file mode 100644 index 86ee5e93..00000000 --- a/docs/archivo/GITHUB_PAGES_FIX.md +++ /dev/null @@ -1,140 +0,0 @@ -# ✅ Corrección de GitHub Pages - COMPLETADA - -**Fecha:** 2025-12-17 - ---- - -## 🔍 Problemas Identificados y Corregidos - -### ❌ Problema 1: Base Path No Configurado -**Problema:** `vite.config.ts` no tenía configurado el `base` path para GitHub Pages. -**Solución:** ✅ Agregado detección automática del base path basado en variables de entorno. - -### ❌ Problema 2: Rutas SPA No Funcionaban -**Problema:** GitHub Pages devuelve 404 para rutas como `/manual` porque no existen físicamente. -**Solución:** ✅ Creado `public/404.html` que redirige todas las rutas al `index.html` para que React Router las maneje. - -### ❌ Problema 3: Workflow Sin Environment Configurado -**Problema:** El workflow no tenía el `environment` configurado correctamente. -**Solución:** ✅ Agregado `environment: github-pages` con URL de salida. - -### ❌ Problema 4: Variables de Entorno No Pasadas al Build -**Problema:** El build no recibía información sobre el repositorio para configurar el base path. -**Solución:** ✅ Agregado paso para extraer el nombre del repositorio y pasarlo al build. - ---- - -## 📝 Cambios Realizados - -### 1. `vite.config.ts` -```typescript -// Agregado detección de GitHub Pages -const isGitHubPages = process.env.GITHUB_PAGES === 'true'; -const repositoryName = process.env.GITHUB_REPOSITORY_NAME || 'guia-tes-digital'; -const base = isGitHubPages ? `/${repositoryName}/` : '/'; - -export default defineConfig({ - base: base, // ✅ Configurado para GitHub Pages - // ... resto de la configuración -}); -``` - -### 2. `.github/workflows/deploy.yml` -```yaml -# ✅ Agregado environment -environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - -# ✅ Agregado paso para extraer nombre del repositorio -- name: Extract repository name - id: repo - run: | - REPO_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f2) - echo "repository_name=$REPO_NAME" >> $GITHUB_OUTPUT - -# ✅ Pasando variables de entorno al build -- name: Build - env: - GITHUB_PAGES: 'true' - GITHUB_REPOSITORY_NAME: ${{ steps.repo.outputs.repository_name }} - run: npm run build -``` - -### 3. `public/404.html` -✅ Creado archivo `404.html` que redirige todas las rutas al `index.html` para que React Router maneje las rutas SPA. - -### 4. `package.json` -✅ El archivo `404.html` es estático en `public/` y se copia automáticamente durante el build. No se requiere script `generate:404`. - ---- - -## 🚀 Cómo Funciona Ahora - -1. **Build en GitHub Actions:** - - Detecta que es GitHub Pages (`GITHUB_PAGES=true`) - - Extrae el nombre del repositorio (`guia-tes-digital`) - - Configura `base: '/guia-tes-digital/'` en Vite - - Copia `404.html` desde `public/` a `dist/` automáticamente - -2. **Despliegue:** - - GitHub Pages sirve los archivos desde `dist/` - - Cuando se accede a `/guia-tes-digital/manual`, GitHub Pages busca `manual/index.html` - - Como no existe, sirve `404.html` - - `404.html` redirige a `/guia-tes-digital/index.html` - - React Router toma el control y muestra la ruta `/manual` correctamente - ---- - -## ✅ Verificación - -### Antes de Desplegar: -```bash -# Probar build local con configuración de GitHub Pages -npm run build:github - -# Verificar que dist/ tenga 404.html -ls dist/404.html - -# Verificar que dist/index.html tenga el base path correcto -grep -i "base href" dist/index.html -``` - -### Después de Desplegar: -1. Ir a: `https://planetazuzu.github.io/guia-tes-digital/` -2. Verificar que la página principal carga -3. Navegar a `/manual` y verificar que funciona -4. Probar rutas como `/manual/parte-i-fundamentos/bloque-0-fundamentos/1.1.1` -5. Verificar que todas las rutas SPA funcionan correctamente - ---- - -## 📋 Checklist de Configuración en GitHub - -Para que el workflow funcione correctamente, asegúrate de: - -- [ ] **Habilitar GitHub Pages:** - 1. Ir a Settings → Pages - 2. Source: "GitHub Actions" (no "Deploy from a branch") - 3. Guardar - -- [ ] **Verificar Permisos:** - - El workflow ya tiene los permisos correctos (`pages: write`, `id-token: write`) - -- [ ] **Verificar Workflow:** - - El workflow se ejecutará automáticamente en cada push a `main` - - También se puede ejecutar manualmente desde Actions → "Deploy to GitHub Pages" → "Run workflow" - ---- - -## 🎯 Resultado Final - -✅ **Base path configurado correctamente** -✅ **404.html creado para manejar rutas SPA** -✅ **Workflow mejorado con environment y variables** -✅ **Build automático con configuración correcta** -✅ **Rutas SPA funcionarán correctamente en GitHub Pages** - ---- - -**Estado:** ✅ COMPLETADO Y LISTO PARA DESPLEGAR diff --git a/docs/archivo/GUIA_ANADIR_PROTOCOLOS.md b/docs/archivo/GUIA_ANADIR_PROTOCOLOS.md deleted file mode 100644 index 53ba1600..00000000 --- a/docs/archivo/GUIA_ANADIR_PROTOCOLOS.md +++ /dev/null @@ -1,173 +0,0 @@ -# 📋 Guía: Cómo Añadir Protocolos - -**Archivo:** `src/data/procedures.ts` - ---- - -## 📊 PROTOCOLOS ACTUALES (5 protocolos) - -1. ✅ `rcp-adulto-svb` - RCP Adulto SVB -2. ✅ `rcp-adulto-sva` - RCP Adulto SVA -3. ✅ `rcp-pediatrico` - RCP Pediátrico -4. ✅ `obstruccion-via-aerea` - OVACE -5. ✅ `shock-hemorragico` - Shock Hemorrágico - ---- - -## 📝 ESTRUCTURA DE UN PROTOCOLO - -```typescript -{ - id: 'identificador-unico', // REQUERIDO: único, sin espacios, minúsculas - title: 'Título Completo', // REQUERIDO: título descriptivo completo - shortTitle: 'Título Corto', // REQUERIDO: título corto para cards - category: 'soporte_vital', // REQUERIDO: 'soporte_vital' | 'patologias' | 'escena' - subcategory: 'rcp', // OPCIONAL: para filtrado (ej: 'rcp', 'via_aerea', 'shock') - priority: 'critico', // REQUERIDO: 'critico' | 'alto' | 'medio' | 'bajo' - ageGroup: 'adulto', // REQUERIDO: 'adulto' | 'pediatrico' | 'neonatal' | 'todos' - steps: [ // REQUERIDO: array de pasos (strings) - 'Paso 1 del protocolo', - 'Paso 2 del protocolo', - // ... - ], - warnings: [ // REQUERIDO: array de advertencias - 'Advertencia importante 1', - 'Advertencia importante 2', - // ... - ], - keyPoints: [ // OPCIONAL: puntos clave a recordar - 'Punto clave 1', - 'Punto clave 2', - ], - equipment: [ // OPCIONAL: material necesario - 'Material 1', - 'Material 2', - ], - drugs: [ // OPCIONAL: fármacos relacionados - 'Fármaco 1', - 'Fármaco 2', - ], -} -``` - ---- - -## ✅ VALORES PERMITIDOS - -### category (REQUERIDO) -- `'soporte_vital'` - Protocolos de soporte vital -- `'patologias'` - Protocolos de patologías -- `'escena'` - Protocolos de actuación en escena - -### priority (REQUERIDO) -- `'critico'` - Prioridad crítica (rojo) -- `'alto'` - Prioridad alta (naranja) -- `'medio'` - Prioridad media (amarillo) -- `'bajo'` - Prioridad baja (verde) - -### ageGroup (REQUERIDO) -- `'adulto'` - Para adultos -- `'pediatrico'` - Para niños (1 año - pubertad) -- `'neonatal'` - Para neonatos/lactantes (<1 año) -- `'todos'` - Para todos los grupos de edad - -### subcategory (OPCIONAL) -Usado para filtrado en la página de Soporte Vital. Valores comunes: -- `'rcp'` - Protocolos de RCP -- `'via_aerea'` - Protocolos de vía aérea -- `'shock'` - Protocolos de shock -- O cualquier otro valor que necesites - ---- - -## 🔍 CÓMO VERIFICAR SI UN PROTOCOLO EXISTE - -Cuando añadas un protocolo, verificaré: - -1. **ID único:** El `id` debe ser único. Si ya existe, te avisaré. -2. **Título similar:** Si hay títulos muy similares, te sugeriré revisar. -3. **Estructura correcta:** Verificaré que todos los campos requeridos estén presentes. -4. **Valores válidos:** Verificaré que los valores de `category`, `priority`, `ageGroup` sean válidos. - ---- - -## 📝 EJEMPLO DE PROTOCOLO NUEVO - -```typescript -{ - id: 'ictus-agudo', - title: 'Ictus Agudo - Protocolo de Actuación', - shortTitle: 'Ictus Agudo', - category: 'soporte_vital', - subcategory: 'neurologico', - priority: 'critico', - ageGroup: 'adulto', - steps: [ - 'Reconocimiento: FAST (Face, Arm, Speech, Time)', - 'Valorar tiempo desde inicio de síntomas', - 'Posición: decúbito supino con cabeza elevada 30°', - 'Oxigenoterapia si SpO₂ <94%', - 'Monitorización continua: TA, FC, SpO₂, Glasgow', - 'NO administrar nada por vía oral', - 'Traslado urgente a hospital con unidad de ictus', - 'Comunicar tiempo de inicio de síntomas', - ], - warnings: [ - 'Tiempo es cerebro: cada minuto cuenta', - 'NO administrar aspirina hasta confirmar que no es hemorrágico', - 'Mantener TA <185/110 mmHg si es candidato a trombólisis', - 'Evitar hipotensión', - ], - keyPoints: [ - 'Tiempo desde inicio: crítico para trombólisis', - 'FAST: Face (cara), Arm (brazo), Speech (habla), Time (tiempo)', - 'Hospital con unidad de ictus: reducir tiempo de traslado', - ], - equipment: ['Oxímetro', 'Monitor', 'Material de oxigenoterapia'], - drugs: ['Oxígeno'], -} -``` - ---- - -## 🎯 PROCESO RECOMENDADO - -1. **Añade el protocolo** al array `procedures` en `src/data/procedures.ts` -2. **Yo verificaré:** - - Si el ID ya existe → Te avisaré y sugeriré cambios - - Si hay títulos similares → Te avisaré para revisar - - Si la estructura es correcta → Te confirmaré - - Si hay valores inválidos → Te indicaré qué corregir - -3. **Si el protocolo es nuevo y correcto:** - - ✅ Lo dejaré como está - - ✅ Se mostrará automáticamente en la app - -4. **Si hay conflictos o mejoras:** - - ⚠️ Te sugeriré cambios específicos - - ⚠️ Te indicaré qué protocolos similares ya existen - ---- - -## 💡 CONSEJOS - -1. **IDs descriptivos:** Usa IDs claros (ej: `ictus-agudo`, `anafilaxia`, `crisis-asmatica`) -2. **Títulos claros:** El `title` debe ser descriptivo, el `shortTitle` debe ser corto -3. **Pasos numerados:** Los pasos deben ser claros y secuenciales -4. **Advertencias importantes:** Incluye advertencias críticas en `warnings` -5. **Subcategorías:** Usa subcategorías para facilitar el filtrado - ---- - -## 🔄 SUB categorías actuales - -Las subcategorías actuales en uso son: -- `'rcp'` - Para protocolos de RCP -- `'via_aerea'` - Para protocolos de vía aérea -- `'shock'` - Para protocolos de shock - -Puedes crear nuevas subcategorías según necesites (ej: `'neurologico'`, `'respiratorio'`, `'cardiologico'`, etc.) - ---- - -**Última actualización:** 2025-01-27 diff --git a/docs/archivo/GUIA_DEBUG_PWA_INSTALL.md b/docs/archivo/GUIA_DEBUG_PWA_INSTALL.md deleted file mode 100644 index 3c0a3610..00000000 --- a/docs/archivo/GUIA_DEBUG_PWA_INSTALL.md +++ /dev/null @@ -1,257 +0,0 @@ -# 🔍 Guía de Debug: Banner de Instalación PWA - -**Fecha:** 2025-12-23 - ---- - -## 🐛 PROBLEMA: Banner No Se Ve - -Si el banner de instalación no aparece, sigue esta guía de debugging. - ---- - -## ✅ VERIFICACIONES PASO A PASO - -### 1. Verificar Consola del Navegador - -Abre DevTools (F12) y busca estos mensajes: - -``` -[PWA Install] Hook initialized -[PWA Install] Setting up install prompt listeners -[PWA Install] beforeinstallprompt event detected -[PWA Install] Showing banner in 3 seconds -[InstallBanner] State: { isInstallable: true, showBanner: true } -``` - -**Si NO ves estos mensajes:** -- El evento `beforeinstallprompt` no se está disparando -- Verifica los requisitos PWA (ver abajo) - ---- - -### 2. Verificar Requisitos PWA - -El banner solo aparece si se cumplen TODOS estos requisitos: - -#### ✅ Manifest.json -```bash -# Verificar que existe -ls -la public/manifest.json - -# Verificar que se copia al build -ls -la dist/manifest.json -``` - -#### ✅ Service Worker -```bash -# Verificar que existe -ls -la public/sw.js - -# Verificar que se copia al build -ls -la dist/sw.js - -# En DevTools > Application > Service Workers -# Debe estar registrado y activo -``` - -#### ✅ HTTPS (o localhost) -- **Producción:** Debe estar en HTTPS -- **Desarrollo:** `localhost` funciona -- **Preview:** `npm run preview` usa localhost - -#### ✅ No estar ya instalada -- Si la app ya está instalada, el banner NO aparece -- Verificar en DevTools: `window.matchMedia('(display-mode: standalone)').matches` - ---- - -### 3. Verificar Navegador - -El evento `beforeinstallprompt` solo funciona en: -- ✅ Chrome (Desktop y Android) -- ✅ Edge (Desktop y Android) -- ✅ Opera (Desktop y Android) -- ✅ Samsung Internet -- ❌ Safari (iOS) - NO soporta `beforeinstallprompt` -- ❌ Firefox - NO soporta `beforeinstallprompt` (aún) - -**Test rápido:** -```javascript -// En consola del navegador -window.addEventListener('beforeinstallprompt', (e) => { - console.log('beforeinstallprompt detected!', e); -}); -``` - -Si no aparece nada, el navegador no soporta el evento. - ---- - -### 4. Verificar Estado del Hook - -Añade esto temporalmente en `InstallBanner.tsx`: - -```tsx -const InstallBanner = () => { - const { isInstallable, showBanner, install, dismissBanner } = usePWAInstall(); - - // Debug temporal - console.log('InstallBanner render:', { isInstallable, showBanner }); - - // Mostrar siempre para debug (temporal) - if (true) { - return ( -
-

DEBUG: isInstallable={String(isInstallable)}, showBanner={String(showBanner)}

-
- ); - } - - // ... resto del código -}; -``` - ---- - -### 5. Verificar localStorage - -El banner puede estar oculto si el usuario lo cerró: - -```javascript -// En consola del navegador -localStorage.getItem('pwa-install-dismissed') -// Si devuelve un timestamp, el banner fue cerrado -// Se mostrará de nuevo después de 7 días - -// Para resetear (solo para testing): -localStorage.removeItem('pwa-install-dismissed') -``` - ---- - -## 🔧 SOLUCIONES COMUNES - -### Problema 1: No aparece en desarrollo local - -**Causa:** El evento `beforeinstallprompt` requiere HTTPS o localhost, pero a veces no se dispara en desarrollo. - -**Solución:** -1. Usar `npm run preview` (simula mejor el entorno de producción) -2. O desplegar en un servidor con HTTPS - -### Problema 2: Ya está instalada - -**Causa:** Si la app ya está instalada, el banner no aparece. - -**Solución:** -- Desinstalar la app primero -- O verificar en modo incógnito - -### Problema 3: Navegador no compatible - -**Causa:** Safari y Firefox no soportan `beforeinstallprompt`. - -**Solución:** -- Usar Chrome/Edge para testing -- En Safari iOS, usar método manual (Compartir → Añadir a pantalla de inicio) - -### Problema 4: Service Worker no registrado - -**Causa:** El SW no se registró correctamente. - -**Solución:** -1. Verificar en DevTools > Application > Service Workers -2. Si no está, verificar que `sw.js` existe en `dist/` -3. Verificar que se registra en `src/main.tsx` - -### Problema 5: Manifest.json no válido - -**Causa:** El manifest tiene errores. - -**Solución:** -1. Verificar en DevTools > Application > Manifest -2. Debe mostrar "Add to homescreen" disponible -3. Verificar que no hay errores en la consola - ---- - -## 🧪 TEST MANUAL - -### Test 1: Verificar Evento -```javascript -// En consola del navegador -let deferredPrompt; - -window.addEventListener('beforeinstallprompt', (e) => { - console.log('✅ beforeinstallprompt detected!', e); - e.preventDefault(); - deferredPrompt = e; -}); - -// Después de unos segundos -console.log('deferredPrompt:', deferredPrompt); -``` - -### Test 2: Verificar Estado del Hook -```javascript -// En consola del navegador (después de cargar la app) -// Abrir React DevTools -// Buscar InstallBanner component -// Verificar props: isInstallable, showBanner -``` - -### Test 3: Forzar Mostrar Banner -Añade esto temporalmente en `usePWAInstall.ts`: - -```ts -// Al final del useEffect, después de setup -setTimeout(() => { - console.log('[PWA Install] FORCING banner to show (DEBUG)'); - setIsInstallable(true); - setShowBanner(true); -}, 5000); -``` - ---- - -## 📋 CHECKLIST DE DEBUG - -- [ ] Consola muestra mensajes `[PWA Install]` -- [ ] `beforeinstallprompt` se dispara -- [ ] Service Worker está registrado -- [ ] Manifest.json es válido -- [ ] Navegador es compatible (Chrome/Edge) -- [ ] No está en modo standalone (ya instalada) -- [ ] localStorage no tiene `pwa-install-dismissed` reciente -- [ ] Build incluye `sw.js` y `manifest.json` -- [ ] HTTPS o localhost activo - ---- - -## 🚨 SI NADA FUNCIONA - -1. **Verificar build:** - ```bash - npm run build - ls -la dist/sw.js dist/manifest.json - ``` - -2. **Verificar en preview:** - ```bash - npm run preview - # Abrir http://localhost:4173 - ``` - -3. **Verificar en producción:** - - Desplegar en servidor con HTTPS - - Abrir en Chrome/Edge - - Verificar consola - -4. **Añadir fallback visual:** - - Mostrar banner siempre (para testing) - - O añadir botón manual en menú - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/GUIA_ENLACES_REFERENCIA.md b/docs/archivo/GUIA_ENLACES_REFERENCIA.md deleted file mode 100644 index a8c86970..00000000 --- a/docs/archivo/GUIA_ENLACES_REFERENCIA.md +++ /dev/null @@ -1,253 +0,0 @@ -# 🔗 Guía: Enlaces de Referencia entre Capítulos - -**Fecha:** 2025-12-23 -**Objetivo:** Añadir enlaces cruzados entre capítulos relacionados del manual - ---- - -## 📋 FORMATO ESTÁNDAR - -### Sección de Enlaces Recomendados - -Añadir al final de cada capítulo (antes de la línea final): - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Capítulos relacionados -- [Título del Capítulo Relacionado](../ruta/relativa/al/archivo.md) -- [Otro Capítulo Relacionado](../ruta/relativa/al/archivo.md) - -### Prerrequisitos -- [Capítulo que debe leerse antes](../ruta/relativa/al/archivo.md) - -### Continuación -- [Capítulo siguiente en la secuencia](../ruta/relativa/al/archivo.md) -``` - ---- - -## 📁 ESTRUCTURA DE RUTAS - -### Desde `MANUAL_TES_DIGITAL/BLOQUE_X/archivo.md` - -**Ejemplo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - -#### Enlaces a capítulos del mismo bloque: -```markdown -- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) -- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) -``` - -#### Enlaces a capítulos de otro bloque: -```markdown -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) -``` - -#### Enlaces a capítulos de otra parte: -```markdown -- [Fundamentos de Emergencias](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md) -``` - ---- - -## 🎯 CATEGORÍAS DE ENLACES - -### 1. Prerrequisitos (Debe leerse antes) -```markdown -### Prerrequisitos -- [Fundamentos de Emergencias](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md) -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) -``` - -### 2. Relacionados (Temas complementarios) -```markdown -### Capítulos relacionados -- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) -- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) -- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) -``` - -### 3. Continuación (Siguiente en secuencia) -```markdown -### Continuación -- [Preparación para Traslado](./BLOQUE_08_1_PREPARACION_TRASLADO.md) -- [Gestión durante Traslado](./BLOQUE_08_2_GESTION_DURANTE_TRASLADO.md) -``` - -### 4. Aplicación práctica (Dónde se usa) -```markdown -### Aplicación práctica -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) -- [Protocolos Transtelefónicos](../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md) -``` - ---- - -## 📝 EJEMPLOS POR BLOQUE - -### Bloque 2 - Inmovilización - -**Archivo:** `BLOQUE_02_3_COLLARIN_CERVICAL.md` - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Prerrequisitos -- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md) -- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) - -### Capítulos relacionados -- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) -- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) -- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - -### Aplicación práctica -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) -``` - -### Bloque 3 - Oxigenoterapia - -**Archivo:** `BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md` - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Prerrequisitos -- [Constantes Vitales](../02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md) -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - -### Capítulos relacionados -- [Dispositivos de Oxigenoterapia](./BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md) -- [Ventilación BVM](./BLOQUE_03_3_BVM.md) -- [Monitorización Básica](./BLOQUE_03_10_MONITORIZACION_BASICA.md) - -### Aplicación práctica -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) -- [Ventilación BVM](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_5_VENTILACION_BVM.md) -``` - -### Bloque 4 - Soporte Vital - -**Archivo:** `BLOQUE_04_1_RCP_ADULTOS.md` - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Prerrequisitos -- [Reconocimiento de PCR](./BLOQUE_04_0_RECONOCIMIENTO_PCR.md) -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - -### Capítulos relacionados -- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md) -- [RCP Lactantes](./BLOQUE_04_3_RCP_LACTANTES.md) -- [Uso de DESA](./BLOQUE_04_4_USO_DESA.md) -- [Ventilación BVM](./BLOQUE_04_5_VENTILACION_BVM.md) - -### Protocolos transtelefónicos -- [RCP Transtelefónica Adultos](../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md) - -### Continuación -- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md) -``` - ---- - -## 🔧 CONVERSIÓN DE RUTAS - -### De ruta de archivo a ruta relativa en Markdown - -**Ruta del archivo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - -**Ruta relativa desde otro archivo:** - -#### Desde mismo bloque: -```markdown -- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) -``` - -#### Desde bloque diferente (misma parte): -```markdown -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) -``` - -#### Desde otra parte: -```markdown -- [Fundamentos](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md) -``` - ---- - -## 📋 CHECKLIST PARA AÑADIR ENLACES - -Antes de añadir enlaces a un capítulo: - -- [ ] Identificar capítulos relacionados (mismo tema) -- [ ] Identificar prerrequisitos (qué debe leerse antes) -- [ ] Identificar continuación (siguiente en secuencia) -- [ ] Verificar que las rutas relativas son correctas -- [ ] Probar que los enlaces funcionan en la app -- [ ] Añadir sección al final del capítulo (antes de línea final) - ---- - -## 🎯 PRIORIDADES - -### Alta Prioridad (Añadir enlaces ahora) -1. **Bloque 2 - Inmovilización** (todos los capítulos están relacionados) -2. **Bloque 3 - Oxigenoterapia** (secuencia lógica clara) -3. **Bloque 4 - Soporte Vital** (RCP adulto → pediátrico → lactante) -4. **Bloque 6 - Farmacología** (principios → preparación → fármacos) - -### Media Prioridad -5. **Bloque 5 - Protocolos Transtelefónicos** (relacionados con Bloque 4) -6. **Bloque 8 - Transferencia** (secuencia clara) - -### Baja Prioridad -7. Resto de bloques - ---- - -## ✅ EJEMPLO COMPLETO - -**Archivo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - -Añadir al final: - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Prerrequisitos -- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md) - Fundamentos anatómicos -- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) - Técnica previa - -### Capítulos relacionados (Sistema de Inmovilización) -- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) - Inmovilización corporal completa -- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Alternativa al tablero -- [Camilla Cuchara](./BLOQUE_02_4_CAMILLA_CUCHARA.md) - Dispositivo de transferencia -- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - Técnicas de movilización - -### Aplicación práctica -- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial -- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) - Contexto de uso -- [Transferencia y Movilización](./BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md) - Continuación del proceso - -### Errores y prevención -- [Errores Críticos en Inmovilización](./BLOQUE_02_9_ERRORES_CRITICOS.md) - Errores comunes a evitar -``` - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/GUIA_INTEGRAR_IMAGENES_PWA.md b/docs/archivo/GUIA_INTEGRAR_IMAGENES_PWA.md deleted file mode 100644 index e40ec7f8..00000000 --- a/docs/archivo/GUIA_INTEGRAR_IMAGENES_PWA.md +++ /dev/null @@ -1,192 +0,0 @@ -# 📸 Guía: Integrar Imágenes en PWA - EMERGES TES - -**Objetivo:** Asegurar que las infografías funcionen offline en la PWA - ---- - -## ✅ LO QUE YA ESTÁ CONFIGURADO - -### 1. Service Worker -- ✅ **Registrado** en `src/main.tsx` -- ✅ **Cachea imágenes** automáticamente (cache-first strategy) -- ✅ **Detecta rutas** `/assets/infografias/` y las cachea - -### 2. Vite Build -- ✅ **Copia `public/`** a `dist/` automáticamente (`copyPublicDir: true`) -- ✅ **Incluye imágenes** en el build (PNG, JPG, SVG, GIF) -- ✅ **Mantiene estructura** de carpetas para assets - -### 3. MarkdownViewer -- ✅ **Renderiza imágenes** si están referenciadas en Markdown -- ✅ **Rutas relativas** funcionan desde `public/` - ---- - -## 📋 PASOS PARA INTEGRAR IMÁGENES - -### Paso 1: Organizar Imágenes - -**Opción A: Manual** -```bash -# Crear estructura de carpetas -mkdir -p public/assets/infografias/{bloque-0-fundamentos,bloque-2-inmovilizacion,bloque-3-material-sanitario,bloque-7-conduccion,bloque-12-marco-legal} - -# Mover imágenes desde imagenes-pendientes/ según corresponda -# Ejemplo: -cp imagenes-pendientes/ALGORITMO\ OPERATIVO\ DEL\ TES.svg public/assets/infografias/bloque-0-fundamentos/ -cp imagenes-pendientes/colocacion-collarin-paso-*.png public/assets/infografias/bloque-2-inmovilizacion/ -``` - -**Opción B: Script Automático** -```bash -# Usar el script existente -python scripts/organizar_infografias.py -``` - ---- - -### Paso 2: Añadir Referencias en Markdown - -Editar los archivos `.md` del manual para incluir referencias: - -**Ejemplo en `BLOQUE_04_3_COLLARIN_CERVICAL.md`:** -```markdown -## Colocación del Collarín Cervical - -### Paso 1: Preparación - -![Preparación del collarín](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) - -### Paso 2: Parte Posterior - -![Colocación parte posterior](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-2-parte-posterior.png) -``` - -**Rutas relativas:** -- Desde `public/manual/BLOQUE_X/archivo.md`: - - `./assets/infografias/...` (sube un nivel, luego entra en assets) - - O: `../../assets/infografias/...` (más explícito) - ---- - -### Paso 3: Verificar Build - -```bash -# Build de producción -npm run build - -# Verificar que las imágenes están en dist/ -ls -la dist/assets/infografias/ -``` - -**Estructura esperada en `dist/`:** -``` -dist/ -├── assets/ -│ └── infografias/ -│ ├── bloque-0-fundamentos/ -│ ├── bloque-2-inmovilizacion/ -│ └── ... -├── manual/ -└── index.html -``` - ---- - -### Paso 4: Verificar Service Worker - -1. **Abrir DevTools** > Application > Service Workers -2. **Verificar registro** del SW -3. **Ir a Cache Storage** > `emerges-tes-v1` -4. **Verificar** que las imágenes se cachean cuando se cargan - ---- - -## 🔍 VERIFICACIÓN OFFLINE - -### Test Manual - -1. **Build:** `npm run build` -2. **Servir localmente:** `npm run preview` o `npx serve -s dist` -3. **Abrir en navegador:** `http://localhost:4173` -4. **DevTools** > Network > Throttling > "Offline" -5. **Navegar al manual** con imágenes -6. **Verificar:** Las imágenes deben cargar desde cache - ---- - -## 📊 ESTRUCTURA FINAL - -``` -public/ -├── assets/ -│ └── infografias/ -│ ├── bloque-0-fundamentos/ -│ │ ├── ALGORITMO OPERATIVO DEL TES.svg -│ │ └── RESUMEN VISUAL DEL ALGORITMO START.svg -│ ├── bloque-2-inmovilizacion/ -│ │ ├── colocacion-collarin-paso-1-preparacion.png -│ │ ├── colocacion-collarin-paso-2-parte-posterior.png -│ │ └── ... -│ ├── bloque-3-material-sanitario/ -│ │ ├── uso-correcto-pulsioximetro.png -│ │ └── ... -│ ├── bloque-7-conduccion/ -│ └── bloque-12-marco-legal/ -├── manual/ -│ └── BLOQUE_X/ -│ └── archivo.md (con referencias a imágenes) -└── sw.js -``` - ---- - -## ⚠️ IMPORTANTE PARA PWA - -### 1. Rutas Relativas -- Usar rutas relativas desde `public/` -- Ejemplo: `./assets/infografias/...` o `../../assets/infografias/...` - -### 2. Tamaño de Imágenes -- **Optimizar antes de añadir** (comprimir PNG, optimizar SVG) -- **Tamaño recomendado:** <500KB por imagen -- **Total:** Considerar límite de cache del navegador - -### 3. Service Worker -- **Cache automático:** Las imágenes se cachean al cargarse -- **Estrategia:** Cache-first (offline-first) -- **Actualización:** Cambiar `CACHE_NAME` para forzar actualización - ---- - -## 🚀 COMANDOS ÚTILES - -```bash -# Verificar qué imágenes hay -ls -lh imagenes-pendientes/ - -# Crear estructura -mkdir -p public/assets/infografias/{bloque-0-fundamentos,bloque-2-inmovilizacion,bloque-3-material-sanitario,bloque-7-conduccion,bloque-12-marco-legal} - -# Build y verificar -npm run build -ls -R dist/assets/infografias/ - -# Preview local -npm run preview -``` - ---- - -## ✅ CHECKLIST DE INTEGRACIÓN - -- [ ] Imágenes organizadas en `public/assets/infografias/` -- [ ] Referencias añadidas en archivos `.md` del manual -- [ ] Build verificado (`dist/assets/infografias/` existe) -- [ ] Service Worker cachea imágenes (verificar en DevTools) -- [ ] Test offline: imágenes cargan sin internet -- [ ] Tamaño total de imágenes razonable (<50MB) - ---- - -**Nota:** Una vez organizadas las imágenes y añadidas las referencias, el Service Worker las cacheará automáticamente para funcionamiento offline. diff --git a/docs/archivo/GUIA_RUTAS_IMAGENES_MARKDOWN.md b/docs/archivo/GUIA_RUTAS_IMAGENES_MARKDOWN.md deleted file mode 100644 index 499bc465..00000000 --- a/docs/archivo/GUIA_RUTAS_IMAGENES_MARKDOWN.md +++ /dev/null @@ -1,232 +0,0 @@ -# 📸 Guía: Rutas de Imágenes en Markdown - -**Fecha:** 2025-12-23 -**Objetivo:** Cómo referenciar imágenes en archivos Markdown del manual - ---- - -## ✅ RUTAS CORRECTAS - -### Desde archivos en `public/manual/BLOQUE_X/` - -**Estructura:** -``` -public/ -├── manual/ -│ └── BLOQUE_X/ -│ └── archivo.md -└── assets/ - └── infografias/ - └── bloque-X-tema/ - └── imagen.png -``` - -**Rutas correctas en Markdown:** - -#### Opción 1: Ruta absoluta desde `/` (RECOMENDADO) -```markdown -![Descripción](/assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) -``` - -#### Opción 2: Ruta relativa desde `public/` -```markdown -![Descripción](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) -``` - -#### Opción 3: Ruta relativa con `../` -```markdown -![Descripción](../assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) -``` - -**Todas estas opciones funcionan** gracias a la adaptación del `MarkdownViewer`. - ---- - -## 📁 ESTRUCTURA DE CARPETAS - -``` -public/ -├── assets/ -│ └── infografias/ -│ ├── bloque-0-fundamentos/ -│ │ ├── ALGORITMO OPERATIVO DEL TES.svg -│ │ ├── RESUMEN VISUAL DEL ALGORITMO START.svg -│ │ ├── flujo-rcp-transtelefonica.png -│ │ └── ... -│ ├── bloque-2-inmovilizacion/ -│ │ ├── colocacion-collarin-paso-1-preparacion.png -│ │ ├── colocacion-collarin-paso-2-parte-posterior.png -│ │ └── ... -│ ├── bloque-3-material-sanitario/ -│ │ ├── uso-correcto-pulsioximetro.png -│ │ └── ... -│ ├── bloque-7-conduccion/ -│ │ └── configuracion-gps-antes-de-salir.png -│ └── bloque-12-marco-legal/ -│ ├── diagrama-decisiones-eticas.png -│ └── diagrama-decisiones-eticas-urgencias.png -└── manual/ - └── BLOQUE_X/ - └── archivo.md -``` - ---- - -## 📝 EJEMPLOS POR BLOQUE - -### Bloque 0 - Fundamentos - -```markdown -![Algoritmo Operativo del TES](/assets/infografias/bloque-0-fundamentos/ALGORITMO OPERATIVO DEL TES.svg) - -![Resumen Visual Algoritmo START](/assets/infografias/bloque-0-fundamentos/RESUMEN VISUAL DEL ALGORITMO START.svg) - -![Flujo RCP Transtelefónica](/assets/infografias/bloque-0-fundamentos/flujo-rcp-transtelefonica.png) -``` - -### Bloque 2 - Inmovilización - -```markdown -![Colocación de collarín - Paso 1](/assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) - -![Colocación de collarín - Paso 2](/assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-2-parte-posterior.png) - -![Selección de talla de collarín](/assets/infografias/bloque-2-inmovilizacion/seleccion-talla-collarin-cervical.png) - -![Componentes del sistema de inmovilización](/assets/infografias/bloque-2-inmovilizacion/componentes-sistema-inmovilizacion.png) -``` - -### Bloque 3 - Material Sanitario - -```markdown -![Uso correcto del pulsioxímetro](/assets/infografias/bloque-3-material-sanitario/uso-correcto-pulsioximetro.png) - -![Uso correcto del tensiómetro](/assets/infografias/bloque-3-material-sanitario/uso-correcto-tensiometro.png) - -![Uso correcto del AMBU](/assets/infografias/bloque-3-material-sanitario/uso-correcto-ambu.png) -``` - ---- - -## 🔧 ADAPTACIÓN DEL MARKDOWNVIEWER - -El `MarkdownViewer` ahora procesa automáticamente las rutas de imágenes: - -1. **Rutas relativas** (`./assets/`, `../assets/`) → Se convierten a absolutas (`/assets/`) -2. **Rutas sin `/`** (`assets/`) → Se convierten a absolutas (`/assets/`) -3. **Rutas absolutas** (`/assets/`) → Se mantienen como están -4. **URLs externas** (`http://...`) → Se mantienen como están - -**Ejemplo de procesamiento:** -```markdown - -![Imagen](./assets/infografias/bloque-2-inmovilizacion/imagen.png) - - - -``` - ---- - -## ✅ BUENAS PRÁCTICAS - -### 1. Usar rutas absolutas (recomendado) -```markdown -![Descripción](/assets/infografias/bloque-X-tema/imagen.png) -``` - -**Ventajas:** -- Funciona desde cualquier ubicación del archivo -- Más fácil de mantener -- No depende de la estructura de carpetas - -### 2. Texto alternativo descriptivo -```markdown -✅ Bueno: -![Colocación de collarín cervical - Paso 1: Preparación](/assets/infografias/...) - -❌ Malo: -![imagen](/assets/infografias/...) -``` - -### 3. Organizar por bloque -```markdown - -![...](/assets/infografias/bloque-2-inmovilizacion/...) - - -![...](/assets/infografias/bloque-3-material-sanitario/...) -``` - ---- - -## 🚨 PROBLEMAS COMUNES - -### Problema 1: Imagen no se muestra - -**Causa:** Ruta incorrecta o imagen no existe - -**Solución:** -1. Verificar que la imagen existe en `public/assets/infografias/` -2. Verificar que la ruta en Markdown es correcta -3. Usar ruta absoluta desde `/` - -### Problema 2: Ruta relativa no funciona - -**Causa:** El navegador resuelve rutas desde la URL, no desde el archivo - -**Solución:** Usar rutas absolutas desde `/` (el MarkdownViewer las procesa automáticamente) - -### Problema 3: Imagen se ve en desarrollo pero no en producción - -**Causa:** La imagen no está en `dist/` después del build - -**Solución:** -1. Verificar que la imagen está en `public/assets/` -2. Ejecutar `npm run build` -3. Verificar que la imagen está en `dist/assets/` - ---- - -## 📋 CHECKLIST - -Antes de añadir una imagen en Markdown: - -- [ ] La imagen existe en `public/assets/infografias/` -- [ ] La ruta en Markdown es correcta (absoluta desde `/`) -- [ ] El texto alternativo es descriptivo -- [ ] La imagen está en la carpeta correcta según el bloque -- [ ] Se ha probado en desarrollo (`npm run dev`) -- [ ] Se ha verificado en build (`npm run build`) - ---- - -## 🎯 EJEMPLO COMPLETO - -**Archivo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - -```markdown -## Colocación del Collarín Cervical - -### Paso 1: Preparación - -![Colocación de collarín cervical - Paso 1: Preparación](/assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) - -**Descripción:** -- Mantener inmovilización manual -- Medir talla aproximada -- Preparar collarín - -### Paso 2: Parte Posterior - -![Colocación de collarín cervical - Paso 2: Parte posterior](/assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-2-parte-posterior.png) - -**Descripción:** -- Colocar parte posterior del collarín -- Mantener control manual -- Verificar posición -``` - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/GUIA_USO_REGISTRY_IMAGENES.md b/docs/archivo/GUIA_USO_REGISTRY_IMAGENES.md deleted file mode 100644 index 76462cd9..00000000 --- a/docs/archivo/GUIA_USO_REGISTRY_IMAGENES.md +++ /dev/null @@ -1,246 +0,0 @@ -# 📸 Guía de Uso: Sistema de Registry de Imágenes - -**Fecha:** 2025-12-23 -**Sistema:** Híbrido con Registry (Opción 4) - ---- - -## 🎯 ¿Qué es el Registry? - -El **Registry de Imágenes** es un sistema que permite usar **alias cortos** en lugar de rutas completas en los archivos Markdown. - -### Antes (sistema antiguo): -```markdown -![Selección de talla de collarín cervical](/assets/infografias/bloque-2-inmovilizacion/seleccion-talla-collarin-cervical.png) -``` - -### Ahora (con registry): -```markdown -![collarin-seleccion] -``` - -**Ventajas:** -- ✅ Referencias más cortas y legibles -- ✅ Captions automáticos (se muestran debajo de la imagen) -- ✅ Metadatos centralizados (alt, tags, bloque) -- ✅ Fácil mantenimiento (cambiar ruta en un solo lugar) -- ✅ Compatible con rutas directas (sigue funcionando el sistema antiguo) - ---- - -## 📝 CÓMO USAR EL REGISTRY - -### 1. Usar Alias Existente - -Si la imagen ya está en el registry, simplemente usa su ID: - -```markdown -![collarin-seleccion] -![abcde-algoritmo] -![triage-start] -![uso-ambu] -``` - -**Resultado:** -- Se renderiza la imagen con su ruta correcta -- Se muestra el `alt` del registry -- Se muestra el `caption` automáticamente debajo (si existe) - ---- - -### 2. Añadir Nueva Imagen al Registry - -**Paso 1:** Añadir la imagen al registry en `src/data/image-registry.ts`: - -```typescript -'rcp-paso-1': { - id: 'rcp-paso-1', - path: '/assets/infografias/bloque-4-rcp/rcp-paso-1-verificar.png', - alt: 'Paso 1: Verificar consciencia y respiración', - caption: 'Primer paso del protocolo RCP: verificar consciencia y respiración', - block: 'bloque-4-rcp', - tags: ['rcp', 'paso-1', 'verificacion', 'consciencia'] -}, -``` - -**Paso 2:** Usar en Markdown: - -```markdown -![rcp-paso-1] -``` - ---- - -### 3. Usar Ruta Directa (Sistema Antiguo - Sigue Funcionando) - -Si prefieres usar rutas directas, sigue funcionando: - -```markdown -![Descripción](/assets/infografias/bloque-X-nombre/imagen.png) -``` - -**Nota:** Las rutas directas NO tienen captions automáticos, solo las del registry. - ---- - -## 🔍 LISTA DE ALIAS DISPONIBLES - -### Bloque 0: Fundamentos -- `abcde-algoritmo` - Algoritmo operativo del TES -- `triage-start` - Resumen visual del algoritmo START -- `diagrama-seleccion-oxigenoterapia` - Diagrama de selección de dispositivo -- `tabla-rangos-fio2` - Tabla de rangos de FiO2 -- `flujo-rcp-transtelefonica` - Flujo de RCP transtelefónica -- `flujo-desa-telefono` - Flujo de uso de DESA transtelefónico - -### Bloque 1: Procedimientos Básicos -- `registro-constantes-vitales` - Registro de constantes vitales -- `interpretacion-constantes-semaforo` - Interpretación sistema semáforo -- `uso-pulsioximetro` - Uso correcto del pulsioxímetro -- `uso-tensiometro` - Uso correcto del tensiómetro - -### Bloque 2: Inmovilización -- `collarin-seleccion` - Selección de talla de collarín -- `collarin-medicion` - Medición anatómica para selección -- `collarin-tabla-tallas` - Tabla de tallas de collarín -- `collarin-paso-1` - Paso 1: Preparación -- `collarin-paso-2` - Paso 2: Parte posterior -- `collarin-paso-3` - Paso 3: Parte anterior -- `collarin-paso-4` - Paso 4: Ajuste de cierres -- `collarin-paso-5` - Paso 5: Verificación -- `collarin-paso-6` - Paso 6: Liberación controlada -- `collarin-verificaciones` - Verificaciones post-colocación -- `collarin-errores` - Errores frecuentes - -### Bloque 3: Material Sanitario -- `canulas-guedel-nasofaringea` - Cánulas de Guedel y nasofaríngea -- `uso-ambu` - Uso correcto de la bolsa-mascarilla (Ambú) -- `configuracion-fio2-bvm` - Configuración máxima de FiO2 con BVM -- `guia-colocacion-oxigenoterapia` - Guía de colocación de dispositivos - ---- - -## 🛠️ FUNCIONES HELPER - -El registry incluye funciones helper para buscar imágenes: - -### Buscar por bloque: -```typescript -import { findImagesByBlock } from '@/data/image-registry'; - -const imagenesCollarin = findImagesByBlock('bloque-2-inmovilizacion'); -// Retorna: Array de ImageMetadata con todas las imágenes del bloque -``` - -### Buscar por tags: -```typescript -import { findImagesByTags } from '@/data/image-registry'; - -const imagenesRCP = findImagesByTags(['rcp', 'reanimacion']); -// Retorna: Array de ImageMetadata que tienen esos tags -``` - -### Buscar por ID: -```typescript -import { findImageById } from '@/data/image-registry'; - -const imagen = findImageById('collarin-seleccion'); -// Retorna: ImageMetadata o undefined -``` - -### Verificar si existe: -```typescript -import { hasImageId } from '@/data/image-registry'; - -if (hasImageId('collarin-seleccion')) { - // La imagen existe en el registry -} -``` - ---- - -## 📋 EJEMPLO COMPLETO - -### Archivo Markdown: -```markdown -## 2.3.1 Selección de Talla - -Para seleccionar la talla correcta del collarín: - -1. Medir distancia entre mentón y esternón -2. Consultar tabla de tallas -3. Verificar ajuste - -![collarin-seleccion] - -### Pasos de Colocación - -**Paso 1: Preparación** -![collarin-paso-1] - -**Paso 2: Parte Posterior** -![collarin-paso-2] - -**Paso 3: Parte Anterior** -![collarin-paso-3] -``` - -### Resultado Visual: -- Cada imagen se renderiza con su caption automático -- Las imágenes tienen estilos consistentes -- Los captions son descriptivos y útiles - ---- - -## ✅ VENTAJAS DEL SISTEMA - -1. **Referencias Cortas:** - - Antes: `![Descripción](/assets/infografias/bloque-2-inmovilizacion/seleccion-talla-collarin-cervical.png)` - - Ahora: `![collarin-seleccion]` - -2. **Captions Automáticos:** - - Se muestran debajo de la imagen automáticamente - - No hay que escribirlos en cada referencia - -3. **Metadatos Centralizados:** - - Alt text para accesibilidad - - Tags para búsqueda - - Bloque temático - - Fácil de mantener - -4. **Validación:** - - Si el alias no existe, se muestra un error claro - - Fácil detectar imágenes faltantes - -5. **Compatibilidad:** - - Las rutas directas siguen funcionando - - Migración progresiva sin romper nada - ---- - -## 🚀 PRÓXIMOS PASOS - -### Para añadir más imágenes: - -1. **Añadir al registry** (`src/data/image-registry.ts`) -2. **Actualizar referencias en Markdown** (cambiar rutas por alias) -3. **Verificar que funciona** (build y preview) - -### Para migrar imágenes existentes: - -1. Buscar referencias con rutas completas en `.md` -2. Añadir imagen al registry si no está -3. Reemplazar ruta por alias -4. Verificar que se renderiza correctamente - ---- - -## 📊 ESTADO ACTUAL - -- **Imágenes en registry:** 20+ -- **Referencias migradas:** 12 -- **Referencias pendientes:** ~5 (resto de imágenes con rutas directas) - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/IMAGENES_NECESARIAS.md b/docs/archivo/IMAGENES_NECESARIAS.md deleted file mode 100644 index a48735d0..00000000 --- a/docs/archivo/IMAGENES_NECESARIAS.md +++ /dev/null @@ -1,309 +0,0 @@ -# 📸 Imágenes Necesarias - Análisis Completo - -**Fecha:** 2025-12-23 - ---- - -## 📊 RESUMEN EJECUTIVO - -| Categoría | Cantidad | Estado | -|-----------|----------|--------| -| **Imágenes ya organizadas** | 48 | ✅ Disponibles | -| **Medios faltantes documentados** | 21 | ❌ Por crear | -| **Capítulos sin imágenes** | 98 | ❌ 100% sin imágenes | -| **Capítulos con imágenes disponibles** | ~30-35 | ⚠️ Imágenes listas, falta integrar | - ---- - -## ✅ LO QUE YA TIENES (48 imágenes organizadas) - -### Distribución Actual - -| Bloque | Imágenes | Estado | -|--------|----------|--------| -| **bloque-0-fundamentos** | 9 | ✅ Organizadas | -| **bloque-2-inmovilizacion** | 27 | ✅ Organizadas | -| **bloque-3-material-sanitario** | 9 | ✅ Organizadas | -| **bloque-7-conduccion** | 1 | ✅ Organizada | -| **bloque-12-marco-legal** | 2 | ✅ Organizadas | - -**Total:** 48 imágenes listas para usar - ---- - -## ❌ LO QUE FALTA (21 medios documentados) - -### 🔴 ALTA PRIORIDAD (15 medios) - -#### Bloque 0 - Fundamentos (3 medios) -1. **Diagrama de Selección de Dispositivo de Oxigenoterapia** - - Flujograma de decisión - - Indicadores de FiO2 por dispositivo - - Situaciones clínicas de uso - - **Formato:** SVG - - **Ubicación esperada:** `BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md` - -2. **Tabla Visual de Rangos de FiO2** - - Comparativa de dispositivos - - Rangos de FiO2 por dispositivo - - Indicadores visuales de color - - **Formato:** SVG - - **Ubicación esperada:** `BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md` - -3. **Guía de Colocación de Dispositivos de Oxigenoterapia** - - Secuencia paso a paso - - Posición correcta del dispositivo - - Verificaciones post-colocación - - **Formato:** SVG (serie de imágenes) - - **Ubicación esperada:** `BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md` - -#### Bloque 2 - Inmovilización (11 medios) -4. **Componentes del Sistema de Inmovilización** - - Control manual, collarín, tablero/colchón - - Sistema completo de protección - - **Formato:** SVG - - **Nota:** Ya existe `componentes-sistema-inmovilizacion.png` - ¿necesita versión SVG? - -5. **Selección de Talla de Collarín Cervical** - - Diagrama de medición anatómica - - Tabla de tallas (pediátrico, pequeño, mediano, grande) - - Indicadores de talla correcta vs incorrecta - - **Formato:** SVG - - **Nota:** Ya existen varias imágenes de selección de talla - ¿necesita consolidación? - -6. **Colocación de Collarín Paso a Paso** - - 6 pasos visuales - - **Formato:** SVG (serie de 6 imágenes) - - **Nota:** Ya existen 6 imágenes PNG paso a paso - ¿necesita versión SVG? - -7. **Verificaciones Post-Colocación de Collarín** - - 5 verificaciones visuales - - **Formato:** SVG - - **Nota:** Ya existe `verificaciones-post-colocacion-collarin.png` - ¿necesita versión SVG? - -8. **Posición del TES en Inmovilización Manual** - - Diagrama de posición correcta - - Vista lateral y frontal - - **Formato:** SVG - - **Nota:** Ya existe `posicion-tes-inmovilizacion-manual.png` - ¿necesita versión SVG? - -9. **Técnica de Sujeción Manual** - - Vista superior de cabeza - - Posición de manos marcada - - **Formato:** SVG - - **Nota:** Ya existe `tecnica-sujecion-manual-cervical.png` - ¿necesita versión SVG? - -10. **Secuencia de Transición en Inmovilización** - - 4-5 pasos visuales - - **Formato:** SVG (serie de imágenes) - - **Nota:** Ya existe `secuencia-transicion-inmovilizacion.png` - ¿necesita versión SVG? - -11. **Componentes del Tablero Espinal** - - Tablero, collarín, correas, bloques - - **Formato:** SVG - - **Nota:** Ya existe `componentes-tablero-espinal.png` - ¿necesita versión SVG? - -12. **Colocación de Tablero Espinal Paso a Paso** - - Secuencia visual de colocación - - **Formato:** SVG (serie de imágenes) - - **Ubicación esperada:** `BLOQUE_02_5_TABLERO_ESPINAL.md` - -13. **Componentes del Colchón de Vacío** - - Colchón, bomba, válvula, collarín, correas - - **Formato:** SVG - - **Nota:** Ya existe `componentes-colchon-vacio.png` - ¿necesita versión SVG? - -14. **Colocación de Colchón de Vacío Paso a Paso** - - 10 pasos visuales - - **Formato:** SVG (serie de imágenes) - - **Nota:** Ya existe `colocacion-colchon-vacio-paso-a-paso.png` - ¿necesita versión SVG? - -15. **Coordinación del Equipo en Inmovilización** - - Diagrama de equipo alrededor del paciente - - Roles marcados, flujo de comunicación - - **Formato:** SVG - - **Nota:** Ya existe `coordinacion-equipo-inmovilizacion.png` - ¿necesita versión SVG? - -### 🟡 MEDIA PRIORIDAD (5 medios) - -16. **Errores Frecuentes en Colocación de Collarín** - - Lista visual de errores comunes - - **Formato:** SVG - - **Nota:** Ya existe `errores-frecuentes-collarin-cervical.png` - ¿necesita versión SVG? - -17. **Situaciones que Requieren Inmovilización** - - Iconos de cada situación - - **Formato:** SVG - - **Nota:** Ya existe `situaciones-que-requieren-inmovilizacion.png` - ¿necesita versión SVG? - -18. **Componentes de la Camilla Cuchara** - - Dos mitades separables - - Cierres torácico y pélvico - - **Formato:** SVG - - **Nota:** Ya existe `componentes-camilla-cuchara.png` - ¿necesita versión SVG? - -19. **Configuración para Máxima FiO2 (BVM)** - - Reservorio conectado - - Flujo de oxígeno adecuado (15 L/min) - - Técnica de sellado - - **Formato:** SVG - - **Nota:** Ya existe `configuracion-maxima-fio2-bolsa-mascarilla.png` - ¿necesita versión SVG? - -20. **Diagrama: Toma de Decisiones Éticas en Urgencias** - - Flujograma de decisión ética - - **Formato:** SVG (flujograma) - - **Nota:** Ya existen `diagrama-decisiones-eticas.png` y `diagrama-decisiones-eticas-urgencias.png` - ¿necesita versión SVG? - -### 🟢 BAJA PRIORIDAD (1 medio) - -21. **Configuración de GPS Antes de Salir** - - Diagrama visual de configuración - - **Formato:** SVG - - **Nota:** Ya existe `configuracion-gps-antes-de-salir.png` - ¿necesita versión SVG? - ---- - -## 🔍 ANÁLISIS: ¿QUÉ REALMENTE FALTA? - -### Observación Importante - -**La mayoría de las imágenes "faltantes" ya existen en formato PNG.** - -El `LISTADO_COMPLETO_MEDIOS_FALTANTES.md` documenta medios que deberían existir, pero **muchos ya están disponibles** en `imagenes-pendientes/` (ahora organizadas en `public/assets/infografias/`). - -### Lo que REALMENTE falta: - -#### 1. Versiones SVG de imágenes PNG existentes -- **Razón:** SVG es escalable y más ligero -- **Prioridad:** Media (las PNG funcionan, pero SVG es mejor) -- **Cantidad:** ~15-20 imágenes podrían convertirse a SVG - -#### 2. Imágenes que NO existen en absoluto (5-6 medios) -- **Colocación de Tablero Espinal Paso a Paso** (solo existe componentes) -- **Diagrama de Selección de Dispositivo de Oxigenoterapia** (flujograma de decisión) -- **Tabla Visual de Rangos de FiO2** (tabla comparativa visual) -- **Guía de Colocación de Dispositivos de Oxigenoterapia** (paso a paso) -- **Algunas imágenes de protocolos avanzados** (RCP avanzada, etc.) - -#### 3. Imágenes para capítulos sin medios (63 capítulos) -- **Cantidad:** ~63 capítulos sin imágenes disponibles -- **Tipos necesarios:** - - Diagramas de flujo para protocolos - - Infografías de procedimientos - - Tablas visuales de referencia - - Ilustraciones paso a paso - ---- - -## 🎯 PRIORIDADES RECOMENDADAS - -### Prioridad 1: Integrar Imágenes Existentes (INMEDIATO) -**Acción:** Añadir referencias en archivos Markdown del manual - -**Capítulos que pueden recibir imágenes YA:** -- `BLOQUE_02_3_COLLARIN_CERVICAL.md` → 12 imágenes disponibles -- `BLOQUE_02_2_INMOVILIZACION_MANUAL.md` → 5 imágenes disponibles -- `BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md` → 3 imágenes disponibles -- `BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md` → 1 imagen disponible -- Y ~25-30 capítulos más - -**Esfuerzo:** Bajo (solo añadir referencias) -**Impacto:** Alto (30-35 capítulos con imágenes inmediatamente) - ---- - -### Prioridad 2: Crear Medios Faltantes Críticos (MEDIO PLAZO) -**Acción:** Crear 5-6 imágenes que realmente no existen - -**Medios a crear:** -1. **Diagrama de Selección de Dispositivo de Oxigenoterapia** (flujograma) -2. **Tabla Visual de Rangos de FiO2** (tabla comparativa) -3. **Colocación de Tablero Espinal Paso a Paso** (serie de imágenes) -4. **Guía de Colocación de Dispositivos de Oxigenoterapia** (paso a paso) -5. **Diagramas de flujo para protocolos avanzados** (RCP avanzada, etc.) - -**Esfuerzo:** Medio-Alto (requiere diseño) -**Impacto:** Alto (completa cobertura de procedimientos críticos) - ---- - -### Prioridad 3: Convertir PNG a SVG (LARGO PLAZO) -**Acción:** Crear versiones SVG de imágenes PNG existentes - -**Razón:** Mejor escalabilidad y menor tamaño de archivo - -**Esfuerzo:** Medio (puede automatizarse parcialmente) -**Impacto:** Medio (mejora técnica, no funcional) - ---- - -### Prioridad 4: Crear Medios para Capítulos Restantes (MUY LARGO PLAZO) -**Acción:** Crear ~63 imágenes para capítulos sin medios - -**Esfuerzo:** Muy Alto -**Impacto:** Alto (cobertura completa del manual) - ---- - -## 📋 RESUMEN POR BLOQUE - -### Bloque 0 - Fundamentos -- ✅ **Tienes:** 9 imágenes -- ❌ **Faltan:** 3 medios (diagrama selección O2, tabla FiO2, guía colocación) -- **Estado:** 75% completo - -### Bloque 2 - Inmovilización -- ✅ **Tienes:** 27 imágenes -- ❌ **Faltan:** 1-2 medios (colocación tablero paso a paso) -- **Estado:** 95% completo - -### Bloque 3 - Material Sanitario -- ✅ **Tienes:** 9 imágenes -- ❌ **Faltan:** 0-1 medios (todo disponible) -- **Estado:** 90-100% completo - -### Bloque 7 - Conducción -- ✅ **Tienes:** 1 imagen -- ❌ **Faltan:** 0 medios -- **Estado:** 100% completo - -### Bloque 12 - Marco Legal -- ✅ **Tienes:** 2 imágenes -- ❌ **Faltan:** 0 medios -- **Estado:** 100% completo - -### Otros Bloques -- ✅ **Tienes:** 0 imágenes -- ❌ **Faltan:** ~60-70 medios -- **Estado:** 0% completo - ---- - -## ✅ CONCLUSIÓN - -### Lo que REALMENTE necesitas: - -1. **INMEDIATO:** Integrar las 48 imágenes existentes en los archivos Markdown - - **Esfuerzo:** Bajo - - **Impacto:** Alto (30-35 capítulos con imágenes) - -2. **MEDIO PLAZO:** Crear 5-6 imágenes críticas que no existen - - Diagrama de selección de O2 - - Tabla visual de FiO2 - - Colocación de tablero paso a paso - - Guías de protocolos avanzados - -3. **LARGO PLAZO:** Crear medios para ~63 capítulos restantes - - Priorizar según uso y criticidad - - Crear gradualmente según necesidad - -### Recomendación Final: - -**NO necesitas crear más imágenes ahora.** Lo que necesitas es: -1. ✅ Integrar las 48 imágenes existentes (ya organizadas) -2. ⏳ Crear solo 5-6 imágenes críticas que realmente faltan -3. ⏳ El resto puede esperar según prioridad de uso - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/INSTRUCCIONES_VER_BANNER.md b/docs/archivo/INSTRUCCIONES_VER_BANNER.md deleted file mode 100644 index 768dccba..00000000 --- a/docs/archivo/INSTRUCCIONES_VER_BANNER.md +++ /dev/null @@ -1,108 +0,0 @@ -# 📱 Instrucciones: Ver el Banner de Instalación - -**Fecha:** 2025-12-23 - ---- - -## ✅ CÓMO VER EL BANNER - -### Opción 1: Modo Desarrollo (Más Fácil) - -En **modo desarrollo**, el banner se mostrará automáticamente después de **5 segundos**: - -```bash -npm run dev -# Abrir http://localhost:8096 -# Esperar 5 segundos -# El banner debería aparecer en la parte inferior -``` - -**Nota:** Esto funciona incluso si el evento `beforeinstallprompt` no se dispara, para que puedas ver cómo se ve el banner. - ---- - -### Opción 2: Preview (Más Realista) - -El preview simula mejor el entorno de producción: - -```bash -npm run build -npm run preview -# Abrir http://localhost:4173 -# Esperar 3-5 segundos -# El banner debería aparecer -``` - ---- - -### Opción 3: Producción con HTTPS - -En producción con HTTPS, el banner aparecerá cuando: -1. El navegador detecte que la app es instalable -2. El evento `beforeinstallprompt` se dispare -3. Después de 3 segundos - -**Requisitos:** -- ✅ HTTPS activo -- ✅ Service Worker registrado -- ✅ Manifest.json válido -- ✅ Navegador compatible (Chrome/Edge) - ---- - -## 🔍 VERIFICAR EN CONSOLA - -Abre DevTools (F12) > Console y busca estos mensajes: - -``` -[PWA Install] Hook initialized -[PWA Install] Setting up install prompt listeners -[PWA Install] Development mode: Will show banner after 5 seconds for testing -[InstallBanner] Development: Forcing banner to show for testing -[InstallBanner] ✅ Rendering banner! -``` - -**Si ves estos mensajes pero el banner no aparece:** -- Verificar z-index (puede estar detrás de otro elemento) -- Verificar que no hay errores de CSS -- Verificar React DevTools que el componente se renderiza - ---- - -## 🚨 SI NO SE VE - -### Paso 1: Verificar Consola -- Abrir DevTools (F12) -- Ir a Console -- Buscar mensajes `[PWA Install]` y `[InstallBanner]` - -### Paso 2: Verificar React DevTools -- Instalar React DevTools (extensión del navegador) -- Buscar componente `InstallBanner` -- Verificar que existe y tiene las props correctas - -### Paso 3: Verificar CSS -- Abrir DevTools > Elements -- Buscar elemento con clase `fixed bottom-20` -- Verificar que no está oculto (`display: none`) - -### Paso 4: Resetear localStorage -```javascript -// En consola del navegador -localStorage.removeItem('pwa-install-dismissed') -// Recargar página (F5) -``` - ---- - -## 📋 CHECKLIST - -- [ ] Abrir `http://localhost:8096` (o preview) -- [ ] Abrir DevTools (F12) > Console -- [ ] Esperar 5 segundos -- [ ] Ver mensaje `[InstallBanner] ✅ Rendering banner!` -- [ ] Ver banner en la parte inferior de la pantalla - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/INVENTARIO_COMPLETO_ACTUALIZADO.md b/docs/archivo/INVENTARIO_COMPLETO_ACTUALIZADO.md deleted file mode 100644 index 9f444194..00000000 --- a/docs/archivo/INVENTARIO_COMPLETO_ACTUALIZADO.md +++ /dev/null @@ -1,1049 +0,0 @@ -# 📋 INVENTARIO COMPLETO DE ARCHIVOS MARKDOWN (.md) - -**Fecha de generación:** 2025-12-23 -**Total archivos:** 705 - ---- - -## 📁 manual-tes/ - -├── ANALISIS_REORGANIZACION.md -├── AUDITORIA_ESTRUCTURAL_MANUAL_TES.md -├── CAPITULOS_AFECTADOS_PROBLEMAS_ESTRUCTURALES.md -├── CONTROL_PROYECTO.md -├── ESTADO_BLOQUE_1_ACTUALIZADO.md -├── ESTADO_PROPUESTA_BLOQUE_5_SVA.md -├── INFORME_BLOQUE_1_BUSQUEDA.md -├── INFORME_CAMBIOS_REORGANIZACION.md -├── INFORME_CAPITULOS_SIN_ESTRUCTURA.md -├── INFORME_REVISION_ESTRUCTURAL_COMPLETA.md -├── MAPA_MAESTRO_MANUAL_TES_DIGITAL.md -├── PLAN_DIVISION_NORMALIZACION_ESTRUCTURAL.md -├── PLAN_REORGANIZACION_MANUAL.md -├── PROGRESO_NORMALIZACION_ESTRUCTURAL.md -├── PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md -├── RESUMEN_ATLS_CONCEPTUAL.md -├── RESUMEN_CORRECCIONES_BLOQUE_1.md -├── RESUMEN_CORRECCIONES_COMPLETAS.md -├── RESUMEN_INTEGRACION_CONTENIDO.md -├── RESUMEN_NORMALIZACION_ESTRUCTURAL_PRIORIDAD_ALTA.md -├── RESUMEN_NORMALIZACION_FASE_2_3.md -├── 01_FUNDAMENTOS/ -│ └── BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md -├── 02_PROCEDIMIENTOS_BASICOS/ -│ ├── 1.1_constantes_vitales.md -│ ├── 1.2_abcde_operativo.md -│ ├── 1.3_glasgow_operativo.md -│ ├── 1.4_triage_start.md -│ ├── BLOQUE_01_5_PULSIOXIMETRO.md -│ ├── BLOQUE_01_6_TENSIOMETRO.md -│ ├── BLOQUE_01_7_GLUCOMETRO.md -│ ├── BLOQUE_01_8_REGISTRO_OPERATIVO_CONSTANTES_VITALES.md -│ └── BLOQUE_01_9_HERRAMIENTA_EVALUACION_AUTOMATICA_CONSTANTES.md -├── 02_SOPORTE_VITAL/ -│ ├── BLOQUE_02_0_RECONOCIMIENTO_PCR.md -│ ├── BLOQUE_02_1_RCP_ADULTOS.md -│ ├── BLOQUE_02_2_RCP_PEDIATRIA.md -│ ├── BLOQUE_02_3_RCP_LACTANTES.md -│ ├── BLOQUE_02_4_USO_DESA.md -│ ├── BLOQUE_02_5_VENTILACION_BVM.md -│ ├── BLOQUE_02_6_USO_CANULAS_OPA_NPA.md -│ ├── BLOQUE_02_7_ASPIRACION_SECRECIONES.md -│ └── BLOQUE_02_8_POSICIONES_SEGURIDAD_MOVILIZACION.md -├── 03_MATERIAL_E_INMOVILIZACION/ -│ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md -│ ├── BLOQUE_02_10_FERULAS.md -│ ├── BLOQUE_02_11_CINTURON_PELVICO.md -│ ├── BLOQUE_02_12_FERULA_TRACCION.md -│ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md -│ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md -│ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md -│ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md -│ ├── BLOQUE_02_5_TABLERO_ESPINAL.md -│ ├── BLOQUE_02_6_COLCHON_VACIO.md -│ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md -│ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md -│ ├── BLOQUE_02_9_ERRORES_CRITICOS.md -│ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md -├── 04_OXIGENOTERAPIA/ -│ ├── BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md -│ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md -│ ├── BLOQUE_03_11_GLUCOMETRO.md -│ ├── BLOQUE_03_12_TERMOMETRIA.md -│ ├── BLOQUE_03_13_CONFORT_DOLOR.md -│ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md -│ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md -│ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md -│ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md -│ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md -│ ├── BLOQUE_03_19_GESTION_OPERATIVA_VIA_AEREA_AVANZADA.md -│ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md -│ ├── BLOQUE_03_20_RESOLUCION_PROBLEMAS_VIA_AEREA.md -│ ├── BLOQUE_03_21_MONITORIZACION_VIA_AEREA_TRASLADO.md -│ ├── BLOQUE_03_22_DISPOSITIVOS_SUPRAGLOTICOS.md -│ ├── BLOQUE_03_23_CANULAS_ORO_NASOFARINGEAS.md -│ ├── BLOQUE_03_24_USO_CORRECTO_BVM_AMBU.md -│ ├── BLOQUE_03_25_VENTILACION_MEDIOS_FORTUNA.md -│ ├── BLOQUE_03_2_ASPIRACION.md -│ ├── BLOQUE_03_3_BVM.md -│ ├── BLOQUE_03_4_CANULAS.md -│ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md -│ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md -│ ├── BLOQUE_03_7_QUEMADURAS.md -│ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md -│ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md -│ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md -│ ├── BLOQUE_03_X2_MALETIN_CURAS.md -│ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md -│ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md -│ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md -│ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md -├── 06_PROTOCOLOS_TRANSTELEFONICOS/ -│ ├── BLOQUE_05_0_COMUNICACION_TRANSTELEFONICA_FUNDAMENTAL.md -│ ├── BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md -│ ├── BLOQUE_05_2_RCP_TRANSTELEFONICA_NINOS.md -│ ├── BLOQUE_05_3_RCP_TRANSTELEFONICA_LACTANTES.md -│ ├── BLOQUE_05_4_DESA_GUIADO_TELEFONO.md -│ ├── BLOQUE_05_5_DOLOR_TORACICO_TRANSTELEFONICO.md -│ ├── BLOQUE_05_6_SCA_TRANSTELEFONICO.md -│ ├── BLOQUE_05_7_ICTUS_TRANSTELEFONICO.md -│ ├── BLOQUE_05_8_COMUNICACION_COORDINADORES.md -│ └── BLOQUE_05_9_OVACE_TRANSTELEFONICA.md -├── 07_FARMACOLOGIA/ -│ ├── BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md -│ ├── BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md -│ ├── BLOQUE_06_2_ANALGESICOS_SEDANTES.md -│ ├── BLOQUE_06_3_VASOACTIVOS_AMINAS.md -│ ├── BLOQUE_06_4_ANTIARRITMICOS.md -│ ├── BLOQUE_06_5_FARMACOS_CARDIOLOGICOS.md -│ ├── BLOQUE_06_6_FARMACOS_RESPIRATORIOS.md -│ ├── BLOQUE_06_7_FARMACOS_NEUROLOGICOS_METABOLICOS.md -│ └── BLOQUE_06_8_SOLUCIONES_REPOSICION.md -├── 08_TRANSFERENCIA_CONTINUIDAD_ASISTENCIAL/ -│ ├── BLOQUE_08_0_FUNDAMENTOS_TRANSFERENCIA.md -│ ├── BLOQUE_08_1_PREPARACION_TRASLADO.md -│ ├── BLOQUE_08_2_GESTION_DURANTE_TRASLADO.md -│ ├── BLOQUE_08_3_COMUNICACION_PRE_HOSPITALARIA.md -│ ├── BLOQUE_08_4_DOCUMENTACION_TRASLADO.md -│ └── BLOQUE_08_5_TRANSFERENCIA_AL_HOSPITAL.md -├── 09_TRIAGE_MULTIPLES_VICTIMAS/ -│ ├── BLOQUE_07_1_FUNDAMENTOS_TRIAGE.md -│ ├── BLOQUE_07_2_METODO_START.md -│ ├── BLOQUE_07_3_ETIQUETADO_ZONIFICACION.md -│ ├── BLOQUE_07_4_ROLES_FUNCIONES_TES_TMV.md -│ ├── BLOQUE_07_5_RE_TRIAGE_EVACUACION.md -│ ├── BLOQUE_07_6_CONSIDERACIONES_ESPECIALES_TMV.md -│ └── BLOQUE_07_7_PUNTOS_CLAVE_ERRORES_FRECUENTES.md -└── BLOQUES/ - ├── BLOQUE_01_OXIGENOTERAPIA.md - └── BLOQUE_02_MATERIAL_E_INMOVILIZACION.md - -## 📁 _BACKUP_MD/ - -⚠️ **CARPETA DE BACKUP - Archivos no activos** - -├── README.md -├── SOPORTE_VITAL_RCP_ANTIGUO/ -│ └── 05_SOPORTE_VITAL_RCP/ -│ ├── BLOQUE_04_0_RECONOCIMIENTO_PCR.md -│ ├── BLOQUE_04_10_ALGORITMO_PCR_AVANZADA_EQUIPO_TES.md -│ ├── BLOQUE_04_11_ARITMIAS_AMENAZANTES.md -│ ├── BLOQUE_04_1_RCP_ADULTOS.md -│ ├── BLOQUE_04_2_RCP_PEDIATRIA.md -│ ├── BLOQUE_04_3_RCP_LACTANTES.md -│ ├── BLOQUE_04_4_USO_DESA.md -│ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md -│ ├── BLOQUE_04_6_OVACE_ADULTOS.md -│ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md -│ ├── BLOQUE_04_8_OVACE_LACTANTES.md -│ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md -├── TES_Manual_Digital/ -│ └── TES_Manual_Digital/ -│ ├── BLOQUE_0_FUNDAMENTOS/ -│ │ └── BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md -│ ├── BLOQUE_10_SITUACIONES_ESPECIALES/ -│ │ └── BLOQUE_10_0_SITUACIONES_ESPECIALES.md -│ ├── BLOQUE_11_PROTOCOLOS_TRAUMA/ -│ │ └── BLOQUE_11_0_PROTOCOLOS_TRAUMA.md -│ ├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ -│ │ └── BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md -│ ├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ -│ │ └── BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md -│ ├── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ -│ │ └── BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md -│ ├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ -│ │ ├── BLOQUE_01_1_CONSTANTES_VITALES.md -│ │ ├── BLOQUE_01_2_ABCDE_OPERATIVO.md -│ │ ├── BLOQUE_01_3_GLASGOW_OPERATIVO.md -│ │ └── BLOQUE_01_4_TRIAGE_START.md -│ ├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ -│ │ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md -│ │ ├── BLOQUE_02_10_FERULAS.md -│ │ ├── BLOQUE_02_11_CINTURON_PELVICO.md -│ │ ├── BLOQUE_02_12_FERULA_TRACCION.md -│ │ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md -│ │ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md -│ │ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md -│ │ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md -│ │ ├── BLOQUE_02_5_TABLERO_ESPINAL.md -│ │ ├── BLOQUE_02_6_COLCHON_VACIO.md -│ │ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md -│ │ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md -│ │ ├── BLOQUE_02_9_ERRORES_CRITICOS.md -│ │ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md -│ ├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ -│ │ ├── BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md -│ │ ├── BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md -│ │ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md -│ │ ├── BLOQUE_03_11_GLUCOMETRO.md -│ │ ├── BLOQUE_03_12_TERMOMETRIA.md -│ │ ├── BLOQUE_03_13_CONFORT_DOLOR.md -│ │ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md -│ │ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md -│ │ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md -│ │ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md -│ │ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md -│ │ ├── BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md -│ │ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md -│ │ ├── BLOQUE_03_2B_CANULA_OROFARINGEA.md -│ │ ├── BLOQUE_03_2_ASPIRACION.md -│ │ ├── BLOQUE_03_3_BVM.md -│ │ ├── BLOQUE_03_4_CANULAS.md -│ │ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md -│ │ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md -│ │ ├── BLOQUE_03_7_QUEMADURAS.md -│ │ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md -│ │ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md -│ │ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md -│ │ ├── BLOQUE_03_X2_MALETIN_CURAS.md -│ │ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md -│ │ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md -│ │ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md -│ │ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md -│ ├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ -│ │ ├── BLOQUE_04_0B_RECONOCIMIENTO_PCR.md -│ │ ├── BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md -│ │ ├── BLOQUE_04_1_RCP_ADULTOS.md -│ │ ├── BLOQUE_04_2_RCP_PEDIATRIA.md -│ │ ├── BLOQUE_04_3_RCP_LACTANTES.md -│ │ ├── BLOQUE_04_4_USO_DESA.md -│ │ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md -│ │ ├── BLOQUE_04_6_OVACE_ADULTOS.md -│ │ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md -│ │ ├── BLOQUE_04_8_OVACE_LACTANTES.md -│ │ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md -│ ├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ -│ │ ├── BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md -│ │ ├── BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md -│ │ ├── BLOQUE_05_1_PCR_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_2_OVACE_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_3_SCA_TRANSTELEFONICO.md -│ │ ├── BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md -│ │ ├── BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md -│ │ └── BLOQUE_05_8_COMUNICACION_COORDINADOR.md -│ ├── BLOQUE_6_FARMACOLOGIA/ -│ │ ├── BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md -│ │ ├── BLOQUE_06_1_VADEMECUM_OPERATIVO.md -│ │ ├── BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md -│ │ ├── BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md -│ │ ├── BLOQUE_06_4_ASPIRINA_USO_SCA.md -│ │ ├── BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md -│ │ ├── BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md -│ │ └── BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md -│ ├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ -│ │ ├── BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md -│ │ ├── BLOQUE_07_1_USO_LUCES_Y_SIRENA.md -│ │ ├── BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md -│ │ ├── BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md -│ │ ├── BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md -│ │ └── BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md -│ ├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ -│ │ ├── BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md -│ │ ├── BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md -│ │ ├── BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md -│ │ ├── BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md -│ │ └── BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md -│ ├── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ -│ │ └── BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md -│ └── _DOCUMENTACION_INTERNA/ -│ ├── ESTANDAR_FORMATO_MANUAL.md -│ ├── INDICE_DOCUMENTACION.md -│ ├── INFORME_BLOQUE_1_BUSQUEDA.md -│ ├── INFORME_NORMALIZACION.md -│ ├── PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md -│ ├── RESUMEN_ATLS_CONCEPTUAL.md -│ ├── RESUMEN_CORRECCIONES_BLOQUE_1.md -│ ├── RESUMEN_CORRECCIONES_COMPLETAS.md -│ ├── 00_INDICES_Y_MAPAS/ -│ │ ├── INDICE_COMPLETO_MANUAL_TES.md -│ │ ├── LISTADO_COMPLETO_RUTAS_MD.md -│ │ ├── LISTA_COMPLETA_ARCHIVOS.md -│ │ └── MAPA_MAESTRO_MANUAL_TES_DIGITAL.md -│ ├── 01_ANALISIS_Y_AUDITORIA/ -│ │ ├── ANALISIS_REORGANIZACION.md -│ │ └── AUDITORIA_ESTRUCTURAL_MANUAL_TES.md -│ ├── 02_INFORMES_PROCESO/ -│ │ ├── BLOQUES_PENDIENTES_PARA_GENERAR.md -│ │ ├── INFORME_AUDITORIA_ESTRUCTURA.md -│ │ └── INFORME_REORGANIZACION_FINAL.md -│ ├── 03_CONVERSION_Y_HERRAMIENTAS/ -│ │ ├── INSTALACION.md -│ │ └── README_CONVERSION.md -│ ├── 04_CONTROL_Y_GOBERNANZA/ -│ │ ├── CONTROL_PROYECTO.md -│ │ └── INFORME_ESTADO_GENERAL_PROYECTO.md -│ └── BLOQUES/ -│ ├── BLOQUE_01_OXIGENOTERAPIA.md -│ └── BLOQUE_02_MATERIAL_E_INMOVILIZACION.md -└── backup_manual_pre_limpieza/ - ├── ACCESO_NAVEGADOR.md - ├── ANALISIS_DETALLADO_CONTENIDO_FALTANTE.md - ├── ANALISIS_EXPLORATORIO_COMPLETO.md - ├── ASSETS_PLAN.md - ├── CAMBIOS_BRANDING.md - ├── COMANDOS_GIT.md - ├── COMO_SERVIR_LOCAL.md - ├── CONFIGURACION_MARKDOWN_VITE.md - ├── CONTENIDO_MANUAL_FALTANTE.md - ├── CORRECCIONES_LINKS_REALIZADAS.md - ├── CORRECCIONES_REALIZADAS.md - ├── ESTADO_MODULOS.md - ├── ESTRUCTURACION_JERARQUICA_INTELIGENTE.md - ├── FASE_5_REORGANIZACION_PROYECTO_MD.md - ├── GUIA_DESPLIEGUE.md - ├── IMPLEMENTACION_FASE1_COMPLETA.md - ├── INDICE_COMPLETO_MANUAL_TES.md - ├── INFORME_PROYECTO.md - ├── INSTRUCCIONES_LOCAL.md - ├── INSTRUCCIONES_PUSH.md - ├── LISTADO_EXACTO_CONTENIDO_FALTANTE.md - ├── LISTADO_MODULOS_PENDIENTES.md - ├── MODULO_1_ARBOLES_DECISION.md - ├── MODULO_2_PROTOCOLOS_TRANSTELEFONICOS.md - ├── MODULO_3_GUIONES_COMUNICACION.md - ├── MODULO_4_CHECKLISTS_MATERIAL.md - ├── PAQUETES_MARKDOWN_INSTALADOS.md - ├── PLAN_CAMINO_A_Y_EVOLUCION_A_B.md - ├── PLAN_CONVERSION_APP_COMPLETA.md - ├── PROBLEMAS_DETECTADOS.md - ├── PROJECT_STATE.md - ├── PUERTO_8096.md - ├── PUERTO_CAMBIADO.md - ├── PUSH_FINAL.md - ├── README.md - ├── REPORTE_1_ARCHIVOS_FALTANTES.md - ├── REPORTE_2_MEDIOS_FALTANTES.md - ├── REPORTE_3_RECOMENDACIONES_APP.md - ├── REPORTE_ANALISIS_PROFUNDO.md - ├── REPORTE_COMPLETO_CONVERSION_APP.md - ├── REPORTE_FINAL_COMPLETO_AUDITORIA.md - ├── REPORTE_FINAL_MULTIMEDIA.md - ├── REPORTE_MULTIMEDIA_COMPLETO.md - ├── REPORTE_VERIFICACION_ESTRUCTURA.md - ├── RESUMEN_ACTUALIZACION_PLAN.md - ├── RESUMEN_EJECUTIVO_ANALISIS.md - ├── RESUMEN_EJECUTIVO_AUDITORIA.md - ├── RESUMEN_EXPANSION_BLOQUE_12.md - ├── RESUMEN_FASE_3_GENERACION_WORD.md - ├── RESUMEN_FASE_4_CONTENIDO_FALTANTE.md - ├── RESUMEN_FASE_5_REORGANIZACION.md - ├── RESUMEN_FINAL_PROYECTO_COMPLETO.md - ├── SOLUCION_NAVEGADOR.md - ├── SUBIR_A_GITHUB.md - ├── VALIDACION_INFORME.md - ├── VERIFICACION_MANUAL_COMPLETA.md - ├── docs/ - │ ├── CONTROL_PROYECTO.md - │ ├── MANUAL_TES_DIGITAL.md - │ ├── RESUMEN_MANUAL_TES.md - │ └── RESUMEN_MATERIAL_OXIGENOTERAPIA.md - ├── manual-tes/ - │ ├── ANALISIS_REORGANIZACION.md - │ ├── AUDITORIA_ESTRUCTURAL_MANUAL_TES.md - │ ├── CONTROL_PROYECTO.md - │ ├── INFORME_BLOQUE_1_BUSQUEDA.md - │ ├── MAPA_MAESTRO_MANUAL_TES_DIGITAL.md - │ ├── PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md - │ ├── RESUMEN_ATLS_CONCEPTUAL.md - │ ├── RESUMEN_CORRECCIONES_BLOQUE_1.md - │ ├── RESUMEN_CORRECCIONES_COMPLETAS.md - │ ├── 01_FUNDAMENTOS/ - │ │ └── BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md - │ ├── 02_PROCEDIMIENTOS_BASICOS/ - │ │ ├── 1.1_constantes_vitales.md - │ │ ├── 1.2_abcde_operativo.md - │ │ ├── 1.3_glasgow_operativo.md - │ │ └── 1.4_triage_start.md - │ ├── 03_MATERIAL_E_INMOVILIZACION/ - │ │ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md - │ │ ├── BLOQUE_02_10_FERULAS.md - │ │ ├── BLOQUE_02_11_CINTURON_PELVICO.md - │ │ ├── BLOQUE_02_12_FERULA_TRACCION.md - │ │ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md - │ │ ├── BLOQUE_02_1_COLLARIN_CERVICAL.md - │ │ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md - │ │ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md - │ │ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md - │ │ ├── BLOQUE_02_5_TABLERO_ESPINAL.md - │ │ ├── BLOQUE_02_6_COLCHON_VACIO.md - │ │ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md - │ │ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md - │ │ ├── BLOQUE_02_9_ERRORES_CRITICOS.md - │ │ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md - │ ├── 04_OXIGENOTERAPIA/ - │ │ ├── BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md - │ │ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md - │ │ ├── BLOQUE_03_11_GLUCOMETRO.md - │ │ ├── BLOQUE_03_12_TERMOMETRIA.md - │ │ ├── BLOQUE_03_13_CONFORT_DOLOR.md - │ │ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md - │ │ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md - │ │ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md - │ │ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md - │ │ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md - │ │ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md - │ │ ├── BLOQUE_03_2_ASPIRACION.md - │ │ ├── BLOQUE_03_3_BVM.md - │ │ ├── BLOQUE_03_4_CANULAS.md - │ │ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md - │ │ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md - │ │ ├── BLOQUE_03_7_QUEMADURAS.md - │ │ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md - │ │ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md - │ │ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md - │ │ ├── BLOQUE_03_X2_MALETIN_CURAS.md - │ │ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md - │ │ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md - │ │ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md - │ │ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md - │ ├── 05_SOPORTE_VITAL_RCP/ - │ │ ├── BLOQUE_04_0_RECONOCIMIENTO_PCR.md - │ │ ├── BLOQUE_04_1_RCP_ADULTOS.md - │ │ ├── BLOQUE_04_2_RCP_PEDIATRIA.md - │ │ ├── BLOQUE_04_3_RCP_LACTANTES.md - │ │ ├── BLOQUE_04_4_USO_DESA.md - │ │ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md - │ │ ├── BLOQUE_04_6_OVACE_ADULTOS.md - │ │ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md - │ │ ├── BLOQUE_04_8_OVACE_LACTANTES.md - │ │ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md - │ ├── BLOQUES/ - │ │ ├── BLOQUE_01_OXIGENOTERAPIA.md - │ │ └── BLOQUE_02_MATERIAL_E_INMOVILIZACION.md - │ └── TES_Manual_Digital/ - │ ├── BLOQUE_0_FUNDAMENTOS/ - │ │ └── BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md - │ ├── BLOQUE_10_SITUACIONES_ESPECIALES/ - │ │ └── BLOQUE_10_0_SITUACIONES_ESPECIALES.md - │ ├── BLOQUE_11_PROTOCOLOS_TRAUMA/ - │ │ └── BLOQUE_11_0_PROTOCOLOS_TRAUMA.md - │ ├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ - │ │ └── BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md - │ ├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ - │ │ └── BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md - │ ├── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ - │ │ └── BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md - │ ├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ - │ │ ├── BLOQUE_01_1_CONSTANTES_VITALES.md - │ │ ├── BLOQUE_01_2_ABCDE_OPERATIVO.md - │ │ ├── BLOQUE_01_3_GLASGOW_OPERATIVO.md - │ │ └── BLOQUE_01_4_TRIAGE_START.md - │ ├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ - │ │ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md - │ │ ├── BLOQUE_02_10_FERULAS.md - │ │ ├── BLOQUE_02_11_CINTURON_PELVICO.md - │ │ ├── BLOQUE_02_12_FERULA_TRACCION.md - │ │ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md - │ │ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md - │ │ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md - │ │ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md - │ │ ├── BLOQUE_02_5_TABLERO_ESPINAL.md - │ │ ├── BLOQUE_02_6_COLCHON_VACIO.md - │ │ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md - │ │ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md - │ │ ├── BLOQUE_02_9_ERRORES_CRITICOS.md - │ │ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md - │ ├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ - │ │ ├── BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md - │ │ ├── BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md - │ │ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md - │ │ ├── BLOQUE_03_11_GLUCOMETRO.md - │ │ ├── BLOQUE_03_12_TERMOMETRIA.md - │ │ ├── BLOQUE_03_13_CONFORT_DOLOR.md - │ │ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md - │ │ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md - │ │ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md - │ │ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md - │ │ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md - │ │ ├── BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md - │ │ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md - │ │ ├── BLOQUE_03_2B_CANULA_OROFARINGEA.md - │ │ ├── BLOQUE_03_2_ASPIRACION.md - │ │ ├── BLOQUE_03_3_BVM.md - │ │ ├── BLOQUE_03_4_CANULAS.md - │ │ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md - │ │ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md - │ │ ├── BLOQUE_03_7_QUEMADURAS.md - │ │ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md - │ │ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md - │ │ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md - │ │ ├── BLOQUE_03_X2_MALETIN_CURAS.md - │ │ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md - │ │ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md - │ │ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md - │ │ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md - │ ├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ - │ │ ├── BLOQUE_04_0B_RECONOCIMIENTO_PCR.md - │ │ ├── BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md - │ │ ├── BLOQUE_04_1_RCP_ADULTOS.md - │ │ ├── BLOQUE_04_2_RCP_PEDIATRIA.md - │ │ ├── BLOQUE_04_3_RCP_LACTANTES.md - │ │ ├── BLOQUE_04_4_USO_DESA.md - │ │ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md - │ │ ├── BLOQUE_04_6_OVACE_ADULTOS.md - │ │ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md - │ │ ├── BLOQUE_04_8_OVACE_LACTANTES.md - │ │ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md - │ ├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ - │ │ ├── BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md - │ │ ├── BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md - │ │ ├── BLOQUE_05_1_PCR_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_2_OVACE_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_3_SCA_TRANSTELEFONICO.md - │ │ ├── BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md - │ │ ├── BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md - │ │ └── BLOQUE_05_8_COMUNICACION_COORDINADOR.md - │ ├── BLOQUE_6_FARMACOLOGIA/ - │ │ ├── BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md - │ │ ├── BLOQUE_06_1_VADEMECUM_OPERATIVO.md - │ │ ├── BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md - │ │ ├── BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md - │ │ ├── BLOQUE_06_4_ASPIRINA_USO_SCA.md - │ │ ├── BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md - │ │ ├── BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md - │ │ └── BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md - │ ├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ - │ │ ├── BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md - │ │ ├── BLOQUE_07_1_USO_LUCES_Y_SIRENA.md - │ │ ├── BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md - │ │ ├── BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md - │ │ ├── BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md - │ │ └── BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md - │ ├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ - │ │ ├── BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md - │ │ ├── BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md - │ │ ├── BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md - │ │ ├── BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md - │ │ └── BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md - │ ├── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ - │ │ └── BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md - │ └── _DOCUMENTACION_INTERNA/ - │ ├── ESTANDAR_FORMATO_MANUAL.md - │ ├── INDICE_DOCUMENTACION.md - │ ├── INFORME_BLOQUE_1_BUSQUEDA.md - │ ├── INFORME_NORMALIZACION.md - │ ├── PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md - │ ├── RESUMEN_ATLS_CONCEPTUAL.md - │ ├── RESUMEN_CORRECCIONES_BLOQUE_1.md - │ ├── RESUMEN_CORRECCIONES_COMPLETAS.md - │ ├── 00_INDICES_Y_MAPAS/ - │ │ ├── INDICE_COMPLETO_MANUAL_TES.md - │ │ ├── LISTADO_COMPLETO_RUTAS_MD.md - │ │ ├── LISTA_COMPLETA_ARCHIVOS.md - │ │ └── MAPA_MAESTRO_MANUAL_TES_DIGITAL.md - │ ├── 01_ANALISIS_Y_AUDITORIA/ - │ │ ├── ANALISIS_REORGANIZACION.md - │ │ └── AUDITORIA_ESTRUCTURAL_MANUAL_TES.md - │ ├── 02_INFORMES_PROCESO/ - │ │ ├── BLOQUES_PENDIENTES_PARA_GENERAR.md - │ │ ├── INFORME_AUDITORIA_ESTRUCTURA.md - │ │ └── INFORME_REORGANIZACION_FINAL.md - │ ├── 03_CONVERSION_Y_HERRAMIENTAS/ - │ │ ├── INSTALACION.md - │ │ └── README_CONVERSION.md - │ ├── 04_CONTROL_Y_GOBERNANZA/ - │ │ ├── CONTROL_PROYECTO.md - │ │ └── INFORME_ESTADO_GENERAL_PROYECTO.md - │ └── BLOQUES/ - │ ├── BLOQUE_01_OXIGENOTERAPIA.md - │ └── BLOQUE_02_MATERIAL_E_INMOVILIZACION.md - ├── public/ - │ └── manual/ - │ ├── BLOQUE_0_FUNDAMENTOS/ - │ │ └── BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md - │ ├── BLOQUE_10_SITUACIONES_ESPECIALES/ - │ │ └── BLOQUE_10_0_SITUACIONES_ESPECIALES.md - │ ├── BLOQUE_11_PROTOCOLOS_TRAUMA/ - │ │ └── BLOQUE_11_0_PROTOCOLOS_TRAUMA.md - │ ├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ - │ │ └── BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md - │ ├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ - │ │ └── BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md - │ ├── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ - │ │ └── BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md - │ ├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ - │ │ ├── BLOQUE_01_1_CONSTANTES_VITALES.md - │ │ ├── BLOQUE_01_2_ABCDE_OPERATIVO.md - │ │ ├── BLOQUE_01_3_GLASGOW_OPERATIVO.md - │ │ └── BLOQUE_01_4_TRIAGE_START.md - │ ├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ - │ │ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md - │ │ ├── BLOQUE_02_10_FERULAS.md - │ │ ├── BLOQUE_02_11_CINTURON_PELVICO.md - │ │ ├── BLOQUE_02_12_FERULA_TRACCION.md - │ │ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md - │ │ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md - │ │ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md - │ │ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md - │ │ ├── BLOQUE_02_5_TABLERO_ESPINAL.md - │ │ ├── BLOQUE_02_6_COLCHON_VACIO.md - │ │ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md - │ │ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md - │ │ ├── BLOQUE_02_9_ERRORES_CRITICOS.md - │ │ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md - │ ├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ - │ │ ├── BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md - │ │ ├── BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md - │ │ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md - │ │ ├── BLOQUE_03_11_GLUCOMETRO.md - │ │ ├── BLOQUE_03_12_TERMOMETRIA.md - │ │ ├── BLOQUE_03_13_CONFORT_DOLOR.md - │ │ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md - │ │ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md - │ │ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md - │ │ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md - │ │ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md - │ │ ├── BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md - │ │ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md - │ │ ├── BLOQUE_03_2B_CANULA_OROFARINGEA.md - │ │ ├── BLOQUE_03_2_ASPIRACION.md - │ │ ├── BLOQUE_03_3_BVM.md - │ │ ├── BLOQUE_03_4_CANULAS.md - │ │ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md - │ │ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md - │ │ ├── BLOQUE_03_7_QUEMADURAS.md - │ │ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md - │ │ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md - │ │ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md - │ │ ├── BLOQUE_03_X2_MALETIN_CURAS.md - │ │ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md - │ │ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md - │ │ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md - │ │ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md - │ ├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ - │ │ ├── BLOQUE_04_0B_RECONOCIMIENTO_PCR.md - │ │ ├── BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md - │ │ ├── BLOQUE_04_1_RCP_ADULTOS.md - │ │ ├── BLOQUE_04_2_RCP_PEDIATRIA.md - │ │ ├── BLOQUE_04_3_RCP_LACTANTES.md - │ │ ├── BLOQUE_04_4_USO_DESA.md - │ │ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md - │ │ ├── BLOQUE_04_6_OVACE_ADULTOS.md - │ │ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md - │ │ ├── BLOQUE_04_8_OVACE_LACTANTES.md - │ │ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md - │ ├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ - │ │ ├── BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md - │ │ ├── BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md - │ │ ├── BLOQUE_05_1_PCR_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_2_OVACE_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_3_SCA_TRANSTELEFONICO.md - │ │ ├── BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md - │ │ ├── BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md - │ │ ├── BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md - │ │ └── BLOQUE_05_8_COMUNICACION_COORDINADOR.md - │ ├── BLOQUE_6_FARMACOLOGIA/ - │ │ ├── BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md - │ │ ├── BLOQUE_06_1_VADEMECUM_OPERATIVO.md - │ │ ├── BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md - │ │ ├── BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md - │ │ ├── BLOQUE_06_4_ASPIRINA_USO_SCA.md - │ │ ├── BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md - │ │ ├── BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md - │ │ └── BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md - │ ├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ - │ │ ├── BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md - │ │ ├── BLOQUE_07_1_USO_LUCES_Y_SIRENA.md - │ │ ├── BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md - │ │ ├── BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md - │ │ ├── BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md - │ │ └── BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md - │ ├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ - │ │ ├── BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md - │ │ ├── BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md - │ │ ├── BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md - │ │ ├── BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md - │ │ └── BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md - │ └── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ - │ └── BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md - ├── scripts/ - │ └── README.md - └── src/ - └── components/ - └── content/ - └── README.md - -## 📁 Otras carpetas - -├── ASSETS_PLAN.md -├── CAMBIOS_PENDIENTES_GITHUB.md -├── COMANDOS_GIT.md -├── DEPLOYMENT_GITHUB.md -├── ESTADO_HERRAMIENTAS_ACTUALIZADO.md -├── ESTADO_TOTAL_APLICACION.md -├── ESTRUCTURACION_JERARQUICA_INTELIGENTE.md -├── GITHUB_PAGES_FIX.md -├── GUIA_ANADIR_PROTOCOLOS.md -├── INVENTARIO_COMPLETO_ACTUALIZADO.md -├── INVENTARIO_COMPLETO_ARCHIVOS_MD.md -├── LIMPIEZA_COMPLETADA.md -├── LISTADO_COMPLETO_MEDIOS_FALTANTES.md -├── PAGINAS_PROTOCOLOS_CREADAS.md -├── README.md -├── REPORTE_LIMPIEZA_MANUAL.md -├── RESUMEN_LIMPIEZA_ESTRUCTURAL.md -├── docs/ -│ ├── CONTROL_PROYECTO.md -│ ├── MANUAL_TES_DIGITAL.md -│ ├── RESUMEN_MANUAL_TES.md -│ └── RESUMEN_MATERIAL_OXIGENOTERAPIA.md -├── imagenes-pendientes/ -│ └── README.md -├── public/ -│ ├── assets/ -│ │ └── README_UBICACION_IMAGENES.md -│ └── manual/ -│ ├── BLOQUE_0_FUNDAMENTOS/ -│ │ └── BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md -│ ├── BLOQUE_10_SITUACIONES_ESPECIALES/ -│ │ └── BLOQUE_10_0_SITUACIONES_ESPECIALES.md -│ ├── BLOQUE_11_PROTOCOLOS_TRAUMA/ -│ │ └── BLOQUE_11_0_PROTOCOLOS_TRAUMA.md -│ ├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ -│ │ └── BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md -│ ├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ -│ │ └── BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md -│ ├── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ -│ │ └── BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md -│ ├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ -│ │ ├── BLOQUE_01_1_CONSTANTES_VITALES.md -│ │ ├── BLOQUE_01_2_ABCDE_OPERATIVO.md -│ │ ├── BLOQUE_01_3_GLASGOW_OPERATIVO.md -│ │ └── BLOQUE_01_4_TRIAGE_START.md -│ ├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ -│ │ ├── BLOQUE_02_0_ANATOMIA_OPERATIVA.md -│ │ ├── BLOQUE_02_10_FERULAS.md -│ │ ├── BLOQUE_02_11_CINTURON_PELVICO.md -│ │ ├── BLOQUE_02_12_FERULA_TRACCION.md -│ │ ├── BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md -│ │ ├── BLOQUE_02_2_INMOVILIZACION_MANUAL.md -│ │ ├── BLOQUE_02_3_COLLARIN_CERVICAL.md -│ │ ├── BLOQUE_02_4_CAMILLA_CUCHARA.md -│ │ ├── BLOQUE_02_5_TABLERO_ESPINAL.md -│ │ ├── BLOQUE_02_6_COLCHON_VACIO.md -│ │ ├── BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md -│ │ ├── BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md -│ │ ├── BLOQUE_02_9_ERRORES_CRITICOS.md -│ │ └── BLOQUE_02_X_INVENTARIO_MATERIAL.md -│ ├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ -│ │ ├── BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md -│ │ ├── BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md -│ │ ├── BLOQUE_03_10_MONITORIZACION_BASICA.md -│ │ ├── BLOQUE_03_11_GLUCOMETRO.md -│ │ ├── BLOQUE_03_12_TERMOMETRIA.md -│ │ ├── BLOQUE_03_13_CONFORT_DOLOR.md -│ │ ├── BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md -│ │ ├── BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md -│ │ ├── BLOQUE_03_16_COMUNICACION_OPERATIVA.md -│ │ ├── BLOQUE_03_17_SENALIZACION_ILUMINACION.md -│ │ ├── BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md -│ │ ├── BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md -│ │ ├── BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md -│ │ ├── BLOQUE_03_2B_CANULA_OROFARINGEA.md -│ │ ├── BLOQUE_03_2_ASPIRACION.md -│ │ ├── BLOQUE_03_3_BVM.md -│ │ ├── BLOQUE_03_4_CANULAS.md -│ │ ├── BLOQUE_03_5_ORGANIZACION_MALETIN.md -│ │ ├── BLOQUE_03_6_CONTROL_HEMORRAGIAS.md -│ │ ├── BLOQUE_03_7_QUEMADURAS.md -│ │ ├── BLOQUE_03_8_HERIDAS_VENDAJES.md -│ │ ├── BLOQUE_03_99_CIERRE_BLOQUE_3.md -│ │ ├── BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md -│ │ ├── BLOQUE_03_X2_MALETIN_CURAS.md -│ │ ├── BLOQUE_03_X3_BOLSA_MONITORIZACION.md -│ │ ├── BLOQUE_03_X4_INVENTARIO_GLOBAL.md -│ │ ├── BLOQUE_03_X5_CHECKLIST_MAESTRO.md -│ │ └── BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md -│ ├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ -│ │ ├── BLOQUE_04_0B_RECONOCIMIENTO_PCR.md -│ │ ├── BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md -│ │ ├── BLOQUE_04_1_RCP_ADULTOS.md -│ │ ├── BLOQUE_04_2_RCP_PEDIATRIA.md -│ │ ├── BLOQUE_04_3_RCP_LACTANTES.md -│ │ ├── BLOQUE_04_4_USO_DESA.md -│ │ ├── BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md -│ │ ├── BLOQUE_04_6_OVACE_ADULTOS.md -│ │ ├── BLOQUE_04_7_OVACE_PEDIATRIA.md -│ │ ├── BLOQUE_04_8_OVACE_LACTANTES.md -│ │ └── BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md -│ ├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ -│ │ ├── BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md -│ │ ├── BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md -│ │ ├── BLOQUE_05_1_PCR_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_2_OVACE_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_3_SCA_TRANSTELEFONICO.md -│ │ ├── BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md -│ │ ├── BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md -│ │ ├── BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md -│ │ └── BLOQUE_05_8_COMUNICACION_COORDINADOR.md -│ ├── BLOQUE_6_FARMACOLOGIA/ -│ │ ├── BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md -│ │ ├── BLOQUE_06_1_VADEMECUM_OPERATIVO.md -│ │ ├── BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md -│ │ ├── BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md -│ │ ├── BLOQUE_06_4_ASPIRINA_USO_SCA.md -│ │ ├── BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md -│ │ ├── BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md -│ │ └── BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md -│ ├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ -│ │ ├── BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md -│ │ ├── BLOQUE_07_1_USO_LUCES_Y_SIRENA.md -│ │ ├── BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md -│ │ ├── BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md -│ │ ├── BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md -│ │ └── BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md -│ ├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ -│ │ ├── BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md -│ │ ├── BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md -│ │ ├── BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md -│ │ ├── BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md -│ │ └── BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md -│ └── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ -│ └── BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md -├── scripts/ -│ ├── README.md -│ └── README_ORGANIZADOR_INFOGRAFIAS.md -└── src/ - └── components/ - └── content/ - └── README.md - ---- - -## ⚠️ PROBLEMAS DETECTADOS - -### 🔴 Duplicados por Nombre (mismo nombre, diferentes ubicaciones) - -- **1.1_constantes_vitales.md** aparece en: - - `backup_manual_pre_limpieza/manual-tes/02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md` - - `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md` - -- **1.2_abcde_operativo.md** aparece en: - - `backup_manual_pre_limpieza/manual-tes/02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md` - - `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md` - -- **1.3_glasgow_operativo.md** aparece en: - - `backup_manual_pre_limpieza/manual-tes/02_PROCEDIMIENTOS_BASICOS/1.3_glasgow_operativo.md` - - `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.3_glasgow_operativo.md` - -- **1.4_triage_start.md** aparece en: - - `backup_manual_pre_limpieza/manual-tes/02_PROCEDIMIENTOS_BASICOS/1.4_triage_start.md` - - `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.4_triage_start.md` - -- **ANALISIS_REORGANIZACION.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/ANALISIS_REORGANIZACION.md` - - `backup_manual_pre_limpieza/manual-tes/ANALISIS_REORGANIZACION.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/ANALISIS_REORGANIZACION.md` - - `manual-tes/ANALISIS_REORGANIZACION.md` - -- **ASSETS_PLAN.md** aparece en: - - `ASSETS_PLAN.md` - - `backup_manual_pre_limpieza/ASSETS_PLAN.md` - -- **AUDITORIA_ESTRUCTURAL_MANUAL_TES.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - - `backup_manual_pre_limpieza/manual-tes/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - - `manual-tes/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - -- **BLOQUES_PENDIENTES_PARA_GENERAR.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/02_INFORMES_PROCESO/BLOQUES_PENDIENTES_PARA_GENERAR.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/02_INFORMES_PROCESO/BLOQUES_PENDIENTES_PARA_GENERAR.md` - -- **BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md` - - `public/manual/BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md` - -- **BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md** aparece en: - - `backup_manual_pre_limpieza/manual-tes/01_FUNDAMENTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md` - - `manual-tes/01_FUNDAMENTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md` - -- **BLOQUE_01_1_CONSTANTES_VITALES.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md` - - `public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md` - -- **BLOQUE_01_2_ABCDE_OPERATIVO.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md` - - `public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md` - -- **BLOQUE_01_3_GLASGOW_OPERATIVO.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md` - - `public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md` - -- **BLOQUE_01_4_TRIAGE_START.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md` - - `public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md` - -- **BLOQUE_01_OXIGENOTERAPIA.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - - `backup_manual_pre_limpieza/manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - - `manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - -- **BLOQUE_02_0_ANATOMIA_OPERATIVA.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - -- **BLOQUE_02_10_FERULAS.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - -- **BLOQUE_02_11_CINTURON_PELVICO.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - -- **BLOQUE_02_12_FERULA_TRACCION.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - -- **BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md** aparece en: - - `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - -*... y 110 duplicados más.* - -### 📦 Carpetas de Backup Detectadas - -- `_BACKUP_MD/` -- `_BACKUP_MD/SOPORTE_VITAL_RCP_ANTIGUO/05_SOPORTE_VITAL_RCP/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_0_FUNDAMENTOS/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_10_SITUACIONES_ESPECIALES/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_11_PROTOCOLOS_TRAUMA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_13_COMUNICACION_RELACION_PACIENTE/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/00_INDICES_Y_MAPAS/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/02_INFORMES_PROCESO/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/03_CONVERSION_Y_HERRAMIENTAS/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/04_CONTROL_Y_GOBERNANZA/` -- `_BACKUP_MD/TES_Manual_Digital/TES_Manual_Digital/_DOCUMENTACION_INTERNA/BLOQUES/` -- `backup_manual_pre_limpieza/` -- `backup_manual_pre_limpieza/docs/` -- `backup_manual_pre_limpieza/manual-tes/` -- `backup_manual_pre_limpieza/manual-tes/01_FUNDAMENTOS/` -- `backup_manual_pre_limpieza/manual-tes/02_PROCEDIMIENTOS_BASICOS/` -- `backup_manual_pre_limpieza/manual-tes/03_MATERIAL_E_INMOVILIZACION/` -- `backup_manual_pre_limpieza/manual-tes/04_OXIGENOTERAPIA/` -- `backup_manual_pre_limpieza/manual-tes/05_SOPORTE_VITAL_RCP/` -- `backup_manual_pre_limpieza/manual-tes/BLOQUES/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_0_FUNDAMENTOS/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_10_SITUACIONES_ESPECIALES/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_11_PROTOCOLOS_TRAUMA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_13_COMUNICACION_RELACION_PACIENTE/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/00_INDICES_Y_MAPAS/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/02_INFORMES_PROCESO/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/03_CONVERSION_Y_HERRAMIENTAS/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/04_CONTROL_Y_GOBERNANZA/` -- `backup_manual_pre_limpieza/manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/BLOQUES/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_0_FUNDAMENTOS/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_10_SITUACIONES_ESPECIALES/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_11_PROTOCOLOS_TRAUMA/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_13_COMUNICACION_RELACION_PACIENTE/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_1_PROCEDIMIENTOS_BASICOS/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_2_MATERIAL_E_INMOVILIZACION/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_6_FARMACOLOGIA/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/` -- `backup_manual_pre_limpieza/public/manual/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/` -- `backup_manual_pre_limpieza/scripts/` -- `backup_manual_pre_limpieza/src/components/content/` - ---- - -## 📊 ESTADÍSTICAS - -| Categoría | Cantidad | -|-----------|----------| -| **Total archivos .md** | 705 | -| Archivos en ROOT | 0 | -| Archivos en manual-tes/ | 120 | -| Archivos en _BACKUP_MD/ | 466 | -| Archivos en otras carpetas | 119 | -| Duplicados detectados | 130 | - diff --git a/docs/archivo/INVENTARIO_COMPLETO_ARCHIVOS_MD.md b/docs/archivo/INVENTARIO_COMPLETO_ARCHIVOS_MD.md deleted file mode 100644 index c989ebfe..00000000 --- a/docs/archivo/INVENTARIO_COMPLETO_ARCHIVOS_MD.md +++ /dev/null @@ -1,345 +0,0 @@ -# INVENTARIO COMPLETO DE ARCHIVOS MARKDOWN (.md) - -**Fecha de generación:** 2025-12-23 - -**Total archivos:** 267 - ---- - -## 📁 ROOT - -- `ASSETS_PLAN.md` -- `CAMBIOS_PENDIENTES_GITHUB.md` -- `COMANDOS_GIT.md` -- `DEPLOYMENT_GITHUB.md` -- `ESTADO_HERRAMIENTAS_ACTUALIZADO.md` -- `ESTADO_TOTAL_APLICACION.md` -- `ESTRUCTURACION_JERARQUICA_INTELIGENTE.md` -- `GITHUB_PAGES_FIX.md` -- `GUIA_ANADIR_PROTOCOLOS.md` -- `INVENTARIO_COMPLETO_ARCHIVOS_MD.md` -- `LIMPIEZA_COMPLETADA.md` -- `LISTADO_COMPLETO_MEDIOS_FALTANTES.md` -- `PAGINAS_PROTOCOLOS_CREADAS.md` -- `README.md` -- `REPORTE_LIMPIEZA_MANUAL.md` - -## 📁 imagenes-pendientes - -- `README.md` - -## 📁 manual-tes - -- `ANALISIS_REORGANIZACION.md` -- `AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` -- `CAPITULOS_AFECTADOS_PROBLEMAS_ESTRUCTURALES.md` -- `CONTROL_PROYECTO.md` -- `ESTADO_BLOQUE_1_ACTUALIZADO.md` -- `ESTADO_PROPUESTA_BLOQUE_5_SVA.md` -- `INFORME_BLOQUE_1_BUSQUEDA.md` -- `INFORME_CAMBIOS_REORGANIZACION.md` -- `INFORME_CAPITULOS_SIN_ESTRUCTURA.md` -- `INFORME_REVISION_ESTRUCTURAL_COMPLETA.md` -- `MAPA_MAESTRO_MANUAL_TES_DIGITAL.md` -- `PLAN_DIVISION_NORMALIZACION_ESTRUCTURAL.md` -- `PLAN_REORGANIZACION_MANUAL.md` -- `PROGRESO_NORMALIZACION_ESTRUCTURAL.md` -- `PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md` -- `RESUMEN_ATLS_CONCEPTUAL.md` -- `RESUMEN_CORRECCIONES_BLOQUE_1.md` -- `RESUMEN_CORRECCIONES_COMPLETAS.md` -- `RESUMEN_INTEGRACION_CONTENIDO.md` -- `RESUMEN_NORMALIZACION_ESTRUCTURAL_PRIORIDAD_ALTA.md` -- `RESUMEN_NORMALIZACION_FASE_2_3.md` - -## 📁 manual-tes/01_FUNDAMENTOS - -- `BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md` - -## 📁 manual-tes/02_PROCEDIMIENTOS_BASICOS - -- `1.1_constantes_vitales.md` -- `1.2_abcde_operativo.md` -- `1.3_glasgow_operativo.md` -- `1.4_triage_start.md` -- `BLOQUE_01_5_PULSIOXIMETRO.md` -- `BLOQUE_01_6_TENSIOMETRO.md` -- `BLOQUE_01_7_GLUCOMETRO.md` -- `BLOQUE_01_8_REGISTRO_OPERATIVO_CONSTANTES_VITALES.md` -- `BLOQUE_01_9_HERRAMIENTA_EVALUACION_AUTOMATICA_CONSTANTES.md` - -## 📁 manual-tes/02_SOPORTE_VITAL - -- `BLOQUE_02_0_RECONOCIMIENTO_PCR.md` -- `BLOQUE_02_1_RCP_ADULTOS.md` -- `BLOQUE_02_2_RCP_PEDIATRIA.md` -- `BLOQUE_02_3_RCP_LACTANTES.md` -- `BLOQUE_02_4_USO_DESA.md` -- `BLOQUE_02_5_VENTILACION_BVM.md` -- `BLOQUE_02_6_USO_CANULAS_OPA_NPA.md` -- `BLOQUE_02_7_ASPIRACION_SECRECIONES.md` -- `BLOQUE_02_8_POSICIONES_SEGURIDAD_MOVILIZACION.md` - -## 📁 manual-tes/03_MATERIAL_E_INMOVILIZACION - -- `BLOQUE_02_0_ANATOMIA_OPERATIVA.md` -- `BLOQUE_02_10_FERULAS.md` -- `BLOQUE_02_11_CINTURON_PELVICO.md` -- `BLOQUE_02_12_FERULA_TRACCION.md` -- `BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` -- `BLOQUE_02_2_INMOVILIZACION_MANUAL.md` -- `BLOQUE_02_3_COLLARIN_CERVICAL.md` -- `BLOQUE_02_4_CAMILLA_CUCHARA.md` -- `BLOQUE_02_5_TABLERO_ESPINAL.md` -- `BLOQUE_02_6_COLCHON_VACIO.md` -- `BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md` -- `BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md` -- `BLOQUE_02_9_ERRORES_CRITICOS.md` -- `BLOQUE_02_X_INVENTARIO_MATERIAL.md` - -## 📁 manual-tes/04_OXIGENOTERAPIA - -- `BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md` -- `BLOQUE_03_10_MONITORIZACION_BASICA.md` -- `BLOQUE_03_11_GLUCOMETRO.md` -- `BLOQUE_03_12_TERMOMETRIA.md` -- `BLOQUE_03_13_CONFORT_DOLOR.md` -- `BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md` -- `BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md` -- `BLOQUE_03_16_COMUNICACION_OPERATIVA.md` -- `BLOQUE_03_17_SENALIZACION_ILUMINACION.md` -- `BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md` -- `BLOQUE_03_19_GESTION_OPERATIVA_VIA_AEREA_AVANZADA.md` -- `BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md` -- `BLOQUE_03_20_RESOLUCION_PROBLEMAS_VIA_AEREA.md` -- `BLOQUE_03_21_MONITORIZACION_VIA_AEREA_TRASLADO.md` -- `BLOQUE_03_22_DISPOSITIVOS_SUPRAGLOTICOS.md` -- `BLOQUE_03_23_CANULAS_ORO_NASOFARINGEAS.md` -- `BLOQUE_03_24_USO_CORRECTO_BVM_AMBU.md` -- `BLOQUE_03_25_VENTILACION_MEDIOS_FORTUNA.md` -- `BLOQUE_03_2_ASPIRACION.md` -- `BLOQUE_03_3_BVM.md` -- `BLOQUE_03_4_CANULAS.md` -- `BLOQUE_03_5_ORGANIZACION_MALETIN.md` -- `BLOQUE_03_6_CONTROL_HEMORRAGIAS.md` -- `BLOQUE_03_7_QUEMADURAS.md` -- `BLOQUE_03_8_HERIDAS_VENDAJES.md` -- `BLOQUE_03_99_CIERRE_BLOQUE_3.md` -- `BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md` -- `BLOQUE_03_X2_MALETIN_CURAS.md` -- `BLOQUE_03_X3_BOLSA_MONITORIZACION.md` -- `BLOQUE_03_X4_INVENTARIO_GLOBAL.md` -- `BLOQUE_03_X5_CHECKLIST_MAESTRO.md` -- `BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md` - -## 📁 manual-tes/05_SOPORTE_VITAL_RCP - -- `BLOQUE_04_0_RECONOCIMIENTO_PCR.md` -- `BLOQUE_04_10_ALGORITMO_PCR_AVANZADA_EQUIPO_TES.md` -- `BLOQUE_04_11_ARITMIAS_AMENAZANTES.md` -- `BLOQUE_04_1_RCP_ADULTOS.md` -- `BLOQUE_04_2_RCP_PEDIATRIA.md` -- `BLOQUE_04_3_RCP_LACTANTES.md` -- `BLOQUE_04_4_USO_DESA.md` -- `BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md` -- `BLOQUE_04_6_OVACE_ADULTOS.md` -- `BLOQUE_04_7_OVACE_PEDIATRIA.md` -- `BLOQUE_04_8_OVACE_LACTANTES.md` -- `BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md` - -## 📁 manual-tes/06_PROTOCOLOS_TRANSTELEFONICOS - -- `BLOQUE_05_0_COMUNICACION_TRANSTELEFONICA_FUNDAMENTAL.md` -- `BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md` -- `BLOQUE_05_2_RCP_TRANSTELEFONICA_NINOS.md` -- `BLOQUE_05_3_RCP_TRANSTELEFONICA_LACTANTES.md` -- `BLOQUE_05_4_DESA_GUIADO_TELEFONO.md` -- `BLOQUE_05_5_DOLOR_TORACICO_TRANSTELEFONICO.md` -- `BLOQUE_05_6_SCA_TRANSTELEFONICO.md` -- `BLOQUE_05_7_ICTUS_TRANSTELEFONICO.md` -- `BLOQUE_05_8_COMUNICACION_COORDINADORES.md` -- `BLOQUE_05_9_OVACE_TRANSTELEFONICA.md` - -## 📁 manual-tes/07_FARMACOLOGIA - -- `BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md` -- `BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md` -- `BLOQUE_06_2_ANALGESICOS_SEDANTES.md` -- `BLOQUE_06_3_VASOACTIVOS_AMINAS.md` -- `BLOQUE_06_4_ANTIARRITMICOS.md` -- `BLOQUE_06_5_FARMACOS_CARDIOLOGICOS.md` -- `BLOQUE_06_6_FARMACOS_RESPIRATORIOS.md` -- `BLOQUE_06_7_FARMACOS_NEUROLOGICOS_METABOLICOS.md` -- `BLOQUE_06_8_SOLUCIONES_REPOSICION.md` - -## 📁 manual-tes/08_TRANSFERENCIA_CONTINUIDAD_ASISTENCIAL - -- `BLOQUE_08_0_FUNDAMENTOS_TRANSFERENCIA.md` -- `BLOQUE_08_1_PREPARACION_TRASLADO.md` -- `BLOQUE_08_2_GESTION_DURANTE_TRASLADO.md` -- `BLOQUE_08_3_COMUNICACION_PRE_HOSPITALARIA.md` -- `BLOQUE_08_4_DOCUMENTACION_TRASLADO.md` -- `BLOQUE_08_5_TRANSFERENCIA_AL_HOSPITAL.md` - -## 📁 manual-tes/09_TRIAGE_MULTIPLES_VICTIMAS - -- `BLOQUE_07_1_FUNDAMENTOS_TRIAGE.md` -- `BLOQUE_07_2_METODO_START.md` -- `BLOQUE_07_3_ETIQUETADO_ZONIFICACION.md` -- `BLOQUE_07_4_ROLES_FUNCIONES_TES_TMV.md` -- `BLOQUE_07_5_RE_TRIAGE_EVACUACION.md` -- `BLOQUE_07_6_CONSIDERACIONES_ESPECIALES_TMV.md` -- `BLOQUE_07_7_PUNTOS_CLAVE_ERRORES_FRECUENTES.md` - -## 📁 manual-tes/BLOQUES - -- `BLOQUE_01_OXIGENOTERAPIA.md` -- `BLOQUE_02_MATERIAL_E_INMOVILIZACION.md` - -## 📁 scripts - -- `README.md` -- `README_ORGANIZADOR_INFOGRAFIAS.md` - -## 📁 src/components/content - -- `README.md` - ---- - -## ⚠️ PROBLEMAS DETECTADOS - -### 🔴 Duplicado Crítico: BLOQUE_05_5 - -**Hay archivos con numeración 05_5:** - -- `manual-tes/06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_5_DOLOR_TORACICO_TRANSTELEFONICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md` - -**Acción requerida:** Verificar numeración correcta según índice. - -### 🟡 Duplicados Evidentes (mismo nombre, diferentes ubicaciones) - -- **ANALISIS_REORGANIZACION.md** aparece en: - - `manual-tes/ANALISIS_REORGANIZACION.md` - - `manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/ANALISIS_REORGANIZACION.md` - -- **AUDITORIA_ESTRUCTURAL_MANUAL_TES.md** aparece en: - - `manual-tes/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - - `manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/01_ANALISIS_Y_AUDITORIA/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` - -- **BLOQUE_01_OXIGENOTERAPIA.md** aparece en: - - `manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - - `manual-tes/TES_Manual_Digital/_DOCUMENTACION_INTERNA/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` - -- **BLOQUE_02_0_ANATOMIA_OPERATIVA.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` - -- **BLOQUE_02_10_FERULAS.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` - -- **BLOQUE_02_11_CINTURON_PELVICO.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` - -- **BLOQUE_02_12_FERULA_TRACCION.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` - -- **BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` - -- **BLOQUE_02_2_INMOVILIZACION_MANUAL.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_2_INMOVILIZACION_MANUAL.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_2_INMOVILIZACION_MANUAL.md` - -- **BLOQUE_02_3_COLLARIN_CERVICAL.md** aparece en: - - `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - - `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` - - -*... y 49 duplicados más.* - -### 🟠 Mezcla de Bloques en Carpetas - -- `BLOQUES` contiene bloques: 1, 2 -- `manual-tes` contiene bloques: 1, 5 - ---- - -## 📊 RESUMEN POR CARPETA PRINCIPAL - - -| Carpeta | Archivos .md | Observaciones | - -|---------|--------------|---------------| - -| `01_FUNDAMENTOS` | 1 | - | - -| `02_PROCEDIMIENTOS_BASICOS` | 9 | - | - -| `02_SOPORTE_VITAL` | 9 | - | - -| `03_MATERIAL_E_INMOVILIZACION` | 14 | - | - -| `04_OXIGENOTERAPIA` | 32 | - | - -| `05_SOPORTE_VITAL_RCP` | 12 | - | - -| `06_PROTOCOLOS_TRANSTELEFONICOS` | 10 | - | - -| `07_FARMACOLOGIA` | 9 | - | - -| `08_TRANSFERENCIA_CONTINUIDAD_ASISTENCIAL` | 6 | - | - -| `09_TRIAGE_MULTIPLES_VICTIMAS` | 7 | - | - -| `ANALISIS_REORGANIZACION.md` | 1 | - | - -| `AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` | 1 | - | - -| `BLOQUES` | 2 | - | - -| `CAPITULOS_AFECTADOS_PROBLEMAS_ESTRUCTURALES.md` | 1 | - | - -| `CONTROL_PROYECTO.md` | 1 | - | - -| `ESTADO_BLOQUE_1_ACTUALIZADO.md` | 1 | - | - -| `ESTADO_PROPUESTA_BLOQUE_5_SVA.md` | 1 | - | - -| `INFORME_BLOQUE_1_BUSQUEDA.md` | 1 | - | - -| `INFORME_CAMBIOS_REORGANIZACION.md` | 1 | - | - -| `INFORME_CAPITULOS_SIN_ESTRUCTURA.md` | 1 | - | - -| `INFORME_REVISION_ESTRUCTURAL_COMPLETA.md` | 1 | - | - -| `MAPA_MAESTRO_MANUAL_TES_DIGITAL.md` | 1 | - | - -| `PLAN_DIVISION_NORMALIZACION_ESTRUCTURAL.md` | 1 | - | - -| `PLAN_REORGANIZACION_MANUAL.md` | 1 | - | - -| `PROGRESO_NORMALIZACION_ESTRUCTURAL.md` | 1 | - | - -| `PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md` | 1 | - | - -| `RESUMEN_ATLS_CONCEPTUAL.md` | 1 | - | - -| `RESUMEN_CORRECCIONES_BLOQUE_1.md` | 1 | - | - -| `RESUMEN_CORRECCIONES_COMPLETAS.md` | 1 | - | - -| `RESUMEN_INTEGRACION_CONTENIDO.md` | 1 | - | - -| `RESUMEN_NORMALIZACION_ESTRUCTURAL_PRIORIDAD_ALTA.md` | 1 | - | - -| `RESUMEN_NORMALIZACION_FASE_2_3.md` | 1 | - | - -| `TES_Manual_Digital` | 116 | - | - diff --git a/docs/archivo/LIMPIEZA_COMPLETADA.md b/docs/archivo/LIMPIEZA_COMPLETADA.md deleted file mode 100644 index a40ee1e5..00000000 --- a/docs/archivo/LIMPIEZA_COMPLETADA.md +++ /dev/null @@ -1,143 +0,0 @@ -# ✅ Limpieza e Integración Completa - COMPLETADA - -**Fecha:** 2025-12-17 - ---- - -## 🎉 Resumen Ejecutivo - -La limpieza e integración del Manual TES Digital se ha completado exitosamente: - -- ✅ **93 archivos válidos** identificados y organizados -- ✅ **66 archivos obsoletos** identificados (listos para eliminar si se desea) -- ✅ **Backup completo** creado antes de cualquier cambio -- ✅ **Archivos copiados** a `public/manual/` con estructura correcta -- ✅ **Rutas actualizadas** en `manual-index.ts` para apuntar a `/manual/` -- ✅ **Componentes actualizados** para usar las nuevas rutas - ---- - -## 📊 Estadísticas - -| Métrica | Valor | -|---------|-------| -| Archivos válidos | 93 | -| Archivos obsoletos identificados | 66 | -| Archivos en `public/manual/` | 93 ✅ | -| Rutas actualizadas en índice | 93 ✅ | -| Backup creado | ✅ | - ---- - -## 📁 Estructura Final - -``` -public/manual/ -├── BLOQUE_0_FUNDAMENTOS/ (1 archivo) -├── BLOQUE_1_PROCEDIMIENTOS_BASICOS/ (4 archivos) -├── BLOQUE_2_MATERIAL_E_INMOVILIZACION/ (14 archivos) -├── BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/ (28 archivos) -├── BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/ (10 archivos) -├── BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/ (10 archivos) -├── BLOQUE_6_FARMACOLOGIA/ (8 archivos) -├── BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/ (6 archivos) -├── BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/ (5 archivos) -├── BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/ (1 archivo) -├── BLOQUE_10_SITUACIONES_ESPECIALES/ (1 archivo) -├── BLOQUE_11_PROTOCOLOS_TRAUMA/ (1 archivo) -├── BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/ (1 archivo) -├── BLOQUE_13_COMUNICACION_RELACION_PACIENTE/ (1 archivo) -└── BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/ (1 archivo) - -Total: 93 archivos .md -``` - ---- - -## 🔄 Cambios Realizados - -### 1. Archivos -- ✅ Copiados 93 archivos válidos a `public/manual/` -- ✅ Organizados por bloques (BLOQUE_0, BLOQUE_1, etc.) -- ✅ Backup completo en `backup_manual_pre_limpieza/` - -### 2. Rutas en `manual-index.ts` -- ✅ Actualizadas de `manual-tes/TES_Manual_Digital/BLOQUE_X/archivo.md` -- ✅ A `/manual/BLOQUE_X/archivo.md` -- ✅ Backup guardado en `manual-index.ts.backup` - -### 3. Componentes React -- ✅ `ManualViewer.tsx` actualizado para usar rutas directas del índice -- ✅ `MarkdownViewer` ya estaba configurado para cargar desde `/manual/` -- ✅ `ManualIndex` muestra la estructura jerárquica completa - ---- - -## 📋 Archivos Generados - -1. **`REPORTE_LIMPIEZA_MANUAL.md`** - Reporte detallado de archivos válidos y obsoletos -2. **`RESUMEN_LIMPIEZA_COMPLETA.md`** - Resumen ejecutivo de la limpieza -3. **`backup_manual_pre_limpieza/`** - Backup completo de todos los archivos .md -4. **`manual-index.ts.backup`** - Backup del índice antes de actualizar rutas -5. **`scripts/limpiar_manual.py`** - Script de limpieza (reutilizable) - ---- - -## ✅ Verificación - -### Archivos en `public/manual/` -```bash -find public/manual -name "*.md" | wc -l -# Resultado: 93 ✅ -``` - -### Rutas en `manual-index.ts` -```bash -grep -c 'rutaArchivo: "/manual/' src/data/manual-index.ts -# Resultado: 93 ✅ -``` - ---- - -## 🚀 Próximos Pasos - -### 1. Probar la Aplicación -```bash -npm run dev -# Abrir http://localhost:8096/manual -# Verificar que todos los capítulos se carguen correctamente -``` - -### 2. Opcional: Eliminar Archivos Obsoletos -Si deseas eliminar los 66 archivos obsoletos identificados: -- Revisar `REPORTE_LIMPIEZA_MANUAL.md` para ver la lista completa -- El backup está disponible en `backup_manual_pre_limpieza/` por si necesitas restaurar algo - -### 3. Verificar Funcionalidad -- ✅ Navegación jerárquica en `/manual` -- ✅ Búsqueda de capítulos -- ✅ Carga de contenido markdown -- ✅ Navegación anterior/siguiente en capítulos - ---- - -## 📝 Notas Importantes - -1. **Backup:** Todos los archivos originales están respaldados en `backup_manual_pre_limpieza/` -2. **Rutas:** Las rutas ahora apuntan directamente a `/manual/` que se sirve desde `public/manual/` -3. **Estructura:** Los archivos están organizados por bloques para facilitar la navegación -4. **Índice:** El `manual-index.ts` está sincronizado con la estructura real de archivos - ---- - -## 🎯 Estado Final - -✅ **LIMPIEZA COMPLETADA** -✅ **INTEGRACIÓN COMPLETADA** -✅ **APP LISTA PARA USAR** - ---- - -**Fecha de finalización:** 2025-12-17 -**Archivos procesados:** 93/93 ✅ -**Estado:** ✅ COMPLETADO diff --git a/docs/archivo/LISTADO_COMPLETO_MEDIOS_FALTANTES.md b/docs/archivo/LISTADO_COMPLETO_MEDIOS_FALTANTES.md deleted file mode 100644 index c84e22e2..00000000 --- a/docs/archivo/LISTADO_COMPLETO_MEDIOS_FALTANTES.md +++ /dev/null @@ -1,437 +0,0 @@ -# LISTADO COMPLETO DE MEDIOS FALTANTES - -**Fecha de análisis:** 2025-01-27 -**Estado:** Documentación de medios mencionados pero no creados - ---- - -## 📊 RESUMEN EJECUTIVO - -- **Total de medios faltantes identificados:** 30+ -- **Tipos:** Infografías, diagramas, tablas visuales, guías paso a paso -- **Ubicación esperada:** `public/assets/infografias/` o `public/assets/diagramas/` -- **Formato recomendado:** SVG (escalable) o PNG de alta resolución - ---- - -## 📋 MEDIOS FALTANTES POR BLOQUE - -### BLOQUE 0: FUNDAMENTOS - -#### 1. Diagrama de Selección de Dispositivo de Oxigenoterapia -- **Ubicación en manual:** BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md -- **Descripción:** Diagrama visual que muestra el flujo de decisión para seleccionar el dispositivo de oxigenoterapia adecuado según la situación clínica -- **Elementos a incluir:** - - Flujograma de decisión - - Indicadores de FiO2 por dispositivo - - Situaciones clínicas de uso -- **Prioridad:** Alta -- **Formato:** SVG o PNG - -#### 2. Tabla Visual de Rangos de FiO2 -- **Ubicación en manual:** BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md -- **Descripción:** Tabla visual comparativa de los rangos de FiO2 de cada dispositivo de oxigenoterapia -- **Elementos a incluir:** - - Dispositivos: Cánula nasal, mascarilla simple, mascarilla con reservorio, mascarilla Venturi, mascarilla no reinhalación - - Rangos de FiO2 por dispositivo - - Indicadores visuales de color para rangos -- **Prioridad:** Alta -- **Formato:** SVG o PNG - -#### 3. Guía de Colocación de Dispositivos de Oxigenoterapia -- **Ubicación en manual:** BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md -- **Descripción:** Secuencia visual paso a paso de cómo colocar cada dispositivo de oxigenoterapia -- **Elementos a incluir:** - - Pasos numerados con ilustraciones - - Posición correcta del dispositivo - - Verificaciones post-colocación -- **Prioridad:** Media -- **Formato:** SVG o PNG (serie de imágenes) - ---- - -### BLOQUE 2: MATERIAL E INMOVILIZACIÓN - -#### 4. Infografía: Componentes del Sistema de Inmovilización -- **Ubicación en manual:** BLOQUE_02_3_COLLARIN_CERVICAL.md (línea 647) -- **Descripción:** Diagrama mostrando todos los componentes del sistema completo de inmovilización -- **Elementos a incluir:** - - Control manual (inicial) - - Collarín cervical - - Inmovilización corporal (tablero/colchón) - - Sujeción completa - - Indicador visual: "Sistema completo = Protección real" -- **Texto a incluir:** - - "El collarín es parte de un sistema" - - "Collarín sin inmovilización corporal = protección incompleta" - - Lista de componentes -- **Prioridad:** Alta -- **Formato:** SVG - -#### 5. Infografía: Selección de Talla de Collarín Cervical -- **Ubicación en manual:** BLOQUE_02_3_COLLARIN_CERVICAL.md (línea 662) -- **Descripción:** Diagrama de medición y tabla de tallas para seleccionar el collarín correcto -- **Elementos a incluir:** - - Diagrama de medición: - - Ángulo de la mandíbula (punto superior) - - Hombro/trapecio (punto inferior) - - Distancia entre ambos puntos - - Tabla de tallas (pediátrico, pequeño, mediano, grande) - - Indicadores de talla correcta vs incorrecta -- **Texto a incluir:** - - "Método estándar de medición" - - "Collarín demasiado grande → hiperextensión" - - "Collarín pequeño → flexión cervical" -- **Prioridad:** Alta -- **Formato:** SVG - -#### 6. Infografía: Colocación de Collarín Paso a Paso -- **Ubicación en manual:** BLOQUE_02_3_COLLARIN_CERVICAL.md (línea 677) -- **Descripción:** Secuencia visual de 6 pasos para colocar el collarín cervical correctamente -- **Elementos a incluir:** - - Paso 1: Preparación - - Paso 2: Parte posterior - - Paso 3: Parte anterior - - Paso 4: Ajuste de cierres - - Paso 5: Verificación - - Paso 6: Liberación controlada - - Indicador visual: "Control manual durante todo el proceso" -- **Texto a incluir:** - - Títulos de cada paso - - Adverencia: "NUNCA soltar control manual hasta verificación completa" -- **Prioridad:** Alta -- **Formato:** SVG (serie de 6 imágenes) - -#### 7. Infografía: Verificaciones Post-Colocación de Collarín -- **Ubicación en manual:** BLOQUE_02_3_COLLARIN_CERVICAL.md (línea 693) -- **Descripción:** Lista visual de 5 verificaciones después de colocar el collarín -- **Elementos a incluir:** - - Respiración normal - - No aumento de dolor - - No compromiso de vía aérea - - Collarín centrado - - Continúa inmovilización corporal - - Indicadores de verificación correcta -- **Texto a incluir:** - - "Verificaciones inmediatas después de colocar" - - "Si hay problemas: ajustar o reconsiderar" -- **Prioridad:** Media -- **Formato:** SVG - -#### 8. Infografía: Errores Frecuentes en Colocación de Collarín -- **Ubicación en manual:** BLOQUE_02_3_COLLARIN_CERVICAL.md (línea 708) -- **Descripción:** Lista visual de errores comunes con iconos -- **Elementos a incluir:** - - Colocar sin control manual - - Soltar para ajustar - - Forzar alineación - - Talla incorrecta - - Colocar sobre ropa gruesa -- **Prioridad:** Media -- **Formato:** SVG - -#### 9. Infografía: Posición del TES en Inmovilización Manual -- **Ubicación en manual:** BLOQUE_02_2_INMOVILIZACION_MANUAL.md (línea 530) -- **Descripción:** Diagrama de TES en posición correcta (cabecera del paciente) -- **Elementos a incluir:** - - Posición de rodillas o cuclillas - - Eje con el cuerpo del paciente - - Posición de las manos (vista lateral y frontal) -- **Texto a incluir:** - - "Posición: Cabecera del paciente, en eje con el cuerpo" - - "Manos: Palmas en laterales del cráneo, dedos extendidos" - - "Mantener posición cómoda para control prolongado" -- **Prioridad:** Alta -- **Formato:** SVG - -#### 10. Infografía: Técnica de Sujeción Manual -- **Ubicación en manual:** BLOQUE_02_2_INMOVILIZACION_MANUAL.md (línea 543) -- **Descripción:** Vista superior de cabeza con posición de manos -- **Elementos a incluir:** - - Palmas en laterales del cráneo marcadas - - Zonas a evitar (pabellones auriculares, mandíbula) - - Indicadores de sujeción correcta -- **Texto a incluir:** - - "Sujeción: Palmas en laterales del cráneo" - - "Evitar: Pabellones auriculares, mandíbula" - - "Firme pero sin comprimir" -- **Prioridad:** Alta -- **Formato:** SVG - -#### 11. Infografía: Situaciones que Requieren Inmovilización -- **Ubicación en manual:** BLOQUE_02_2_INMOVILIZACION_MANUAL.md (línea 556) -- **Descripción:** Iconos o símbolos de cada situación que requiere inmovilización -- **Elementos a incluir:** - - Politraumatizado - - Caída desde altura - - Accidente de tráfico - - Inconsciencia - - Dolor cervical - - Principio clave destacado -- **Texto a incluir:** - - Lista de situaciones - - "Principio: Toda víctima traumática se considera con lesión cervical hasta que se demuestre lo contrario" -- **Prioridad:** Media -- **Formato:** SVG - -#### 12. Infografía: Secuencia de Transición en Inmovilización -- **Ubicación en manual:** BLOQUE_02_2_INMOVILIZACION_MANUAL.md (línea 572) -- **Descripción:** Secuencia visual de 4-5 pasos para transición de control manual a dispositivo -- **Elementos a incluir:** - - Paso 1: Control manual - - Paso 2: Preparación dispositivo - - Paso 3: Colocación (manteniendo control) - - Paso 4: Verificación - - Paso 5: Liberación controlada - - Indicador visual de "NO SOLTAR" en cada paso -- **Texto a incluir:** - - Títulos de cada paso - - Advertencia: "Mantener control manual hasta que dispositivo esté completamente fijado" -- **Prioridad:** Alta -- **Formato:** SVG (serie de imágenes) - -#### 13. Infografía: Coordinación del Equipo en Inmovilización -- **Ubicación en manual:** BLOQUE_02_2_INMOVILIZACION_MANUAL.md (línea 587) -- **Descripción:** Diagrama de equipo alrededor del paciente -- **Elementos a incluir:** - - Roles marcados (control cabeza, control tronco, etc.) - - Flujo de comunicación - - Secuencia de órdenes -- **Prioridad:** Media -- **Formato:** SVG - -#### 14. Infografía: Componentes del Tablero Espinal -- **Ubicación en manual:** BLOQUE_02_5_TABLERO_ESPINAL.md (línea 332) -- **Descripción:** Diagrama de tablero espinal con todos sus componentes -- **Elementos a incluir:** - - Tablero espinal - - Collarín cervical - - Correas de sujeción (tronco, pelvis) - - Bloques o cuñas para cabeza - - Indicador visual: "Sistema completo de inmovilización" -- **Texto a incluir:** - - "Tablero espinal: sistema completo" - - "Requiere: collarín, correas, bloques" - - "NO solo el tablero" -- **Prioridad:** Alta -- **Formato:** SVG - -#### 15. Infografía: Colocación de Tablero Espinal Paso a Paso -- **Ubicación en manual:** BLOQUE_02_5_TABLERO_ESPINAL.md (línea 347) -- **Descripción:** Secuencia visual de colocación del tablero espinal -- **Elementos a incluir:** - - Pasos numerados con ilustraciones - - Posición del equipo - - Técnica de deslizamiento -- **Prioridad:** Alta -- **Formato:** SVG (serie de imágenes) - -#### 16. Infografía: Componentes del Colchón de Vacío -- **Ubicación en manual:** BLOQUE_02_6_COLCHON_VACIO.md (línea 341) -- **Descripción:** Diagrama de colchón de vacío con todos sus componentes -- **Elementos a incluir:** - - Colchón de vacío desinflado - - Bomba de vacío - - Válvula de vacío - - Collarín cervical - - Correas de sujeción - - Indicador visual: "Sistema completo de inmovilización" -- **Texto a incluir:** - - "Colchón de vacío: sistema completo" - - "Requiere: bomba, collarín, correas" - - "Dispositivo de elección para transporte prolongado" -- **Prioridad:** Alta -- **Formato:** SVG - -#### 17. Infografía: Colocación de Colchón de Vacío Paso a Paso -- **Ubicación en manual:** BLOQUE_02_6_COLCHON_VACIO.md (línea 355) -- **Descripción:** Secuencia visual de 10 pasos para colocar el colchón de vacío -- **Elementos a incluir:** - - Control cervical manual - - Colocación del colchón - - Moldeado - - Evacuación de aire - - Verificación -- **Prioridad:** Alta -- **Formato:** SVG (serie de imágenes) - -#### 18. Infografía: Componentes de la Camilla Cuchara -- **Ubicación en manual:** BLOQUE_02_4_CAMILLA_CUCHARA.md (línea 298) -- **Descripción:** Diagrama de camilla cuchara separada en dos mitades -- **Elementos a incluir:** - - Dos mitades separables - - Indicadores de cierres (torácico y pélvico) - - Indicador visual: "Dispositivo de transferencia, no inmovilización definitiva" -- **Texto a incluir:** - - "Camilla cuchara: dos mitades separables" - - "Cierres: zona torácica y pélvica" -- **Prioridad:** Media -- **Formato:** SVG - ---- - -### BLOQUE 3: MATERIAL SANITARIO Y OXIGENOTERAPIA - -#### 19. Diagrama de Configuración para Máxima FiO2 -- **Ubicación en manual:** BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md (línea 290) -- **Descripción:** Diagrama mostrando la configuración óptima del sistema de ventilación con bolsa-mascarilla para obtener máxima FiO2 -- **Elementos a incluir:** - - Reservorio conectado - - Flujo de oxígeno adecuado (15 L/min) - - Posición correcta de la mascarilla - - Técnica de sellado -- **Prioridad:** Media -- **Formato:** SVG - ---- - -### BLOQUE 7: CONDUCCIÓN Y SEGURIDAD VIAL - -#### 20. Diagrama de Configuración de GPS Antes de Salir -- **Ubicación en manual:** BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md (línea 101) -- **Descripción:** Diagrama visual mostrando la configuración correcta del GPS antes de iniciar la marcha -- **Elementos a incluir:** - - Configuración ANTES de iniciar marcha - - Uso solo de voz si no hay copiloto - - Advertencia: no manipular durante conducción -- **Prioridad:** Baja -- **Formato:** SVG - ---- - -### BLOQUE 12: MARCO LEGAL ÉTICO PROFESIONAL - -#### 21. Diagrama: Toma de Decisiones Éticas en Urgencias -- **Ubicación en manual:** BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md (línea 556) -- **Descripción:** Flujograma de decisión ética en situaciones de urgencia -- **Elementos a incluir:** - - Situación clínica inicial - - Valoración de urgencia vital - - Ramas: Urgencia vital / No urgencia vital - - Actuación inmediata vs contacto médico - - Consentimiento y documentación -- **Nota:** Ya existe una versión en texto ASCII en el archivo, pero necesita ser convertida a diagrama visual profesional -- **Prioridad:** Media -- **Formato:** SVG (flujograma) - ---- - -## 📊 RESUMEN POR PRIORIDAD - -### 🔴 Alta Prioridad (15 medios) -1. Diagrama de Selección de Dispositivo de Oxigenoterapia -2. Tabla Visual de Rangos de FiO2 -3. Infografía: Componentes del Sistema de Inmovilización -4. Infografía: Selección de Talla de Collarín Cervical -5. Infografía: Colocación de Collarín Paso a Paso -6. Infografía: Posición del TES en Inmovilización Manual -7. Infografía: Técnica de Sujeción Manual -8. Infografía: Secuencia de Transición en Inmovilización -9. Infografía: Componentes del Tablero Espinal -10. Infografía: Colocación de Tablero Espinal Paso a Paso -11. Infografía: Componentes del Colchón de Vacío -12. Infografía: Colocación de Colchón de Vacío Paso a Paso -13. Guía de Colocación de Dispositivos de Oxigenoterapia -14. Infografía: Verificaciones Post-Colocación de Collarín -15. Infografía: Coordinación del Equipo en Inmovilización - -### 🟡 Media Prioridad (5 medios) -16. Infografía: Errores Frecuentes en Colocación de Collarín -17. Infografía: Situaciones que Requieren Inmovilización -18. Infografía: Componentes de la Camilla Cuchara -19. Diagrama de Configuración para Máxima FiO2 -20. Diagrama: Toma de Decisiones Éticas en Urgencias - -### 🟢 Baja Prioridad (1 medio) -21. Diagrama de Configuración de GPS Antes de Salir - ---- - -## 📁 ESTRUCTURA RECOMENDADA PARA ARCHIVOS - -``` -public/ -└── assets/ - ├── infografias/ - │ ├── bloque-0-fundamentos/ - │ │ ├── diagrama-seleccion-dispositivo-oxigeno.svg - │ │ ├── tabla-rangos-fio2.svg - │ │ └── guia-colocacion-dispositivos-oxigeno.svg - │ ├── bloque-2-inmovilizacion/ - │ │ ├── componentes-sistema-inmovilizacion.svg - │ │ ├── seleccion-talla-collarín.svg - │ │ ├── colocacion-collarín-paso-1.svg - │ │ ├── colocacion-collarín-paso-2.svg - │ │ ├── ... (más pasos) - │ │ ├── verificaciones-post-colocacion.svg - │ │ ├── errores-frecuentes-collarín.svg - │ │ ├── posicion-tes-inmovilizacion-manual.svg - │ │ ├── tecnica-sujecion-manual.svg - │ │ ├── situaciones-requieren-inmovilizacion.svg - │ │ ├── secuencia-transicion-inmovilizacion.svg - │ │ ├── coordinacion-equipo-inmovilizacion.svg - │ │ ├── componentes-tablero-espinal.svg - │ │ ├── colocacion-tablero-espinal-paso-1.svg - │ │ ├── ... (más pasos) - │ │ ├── componentes-colchon-vacio.svg - │ │ ├── colocacion-colchon-vacio-paso-1.svg - │ │ ├── ... (más pasos) - │ │ └── componentes-camilla-cuchara.svg - │ ├── bloque-3-material-sanitario/ - │ │ └── configuracion-maxima-fio2.svg - │ ├── bloque-7-conduccion/ - │ │ └── configuracion-gps.svg - │ └── bloque-12-marco-legal/ - │ └── diagrama-decisiones-eticas.svg - └── diagramas/ - └── (diagramas adicionales si se necesitan) -``` - ---- - -## 🎨 ESPECIFICACIONES TÉCNICAS - -### Formato Recomendado -- **SVG** (preferido): Escalable, ligero, editable -- **PNG** (alternativa): Alta resolución (300 DPI mínimo) - -### Dimensiones -- **Infografías completas:** 1200x800px mínimo -- **Diagramas paso a paso:** 800x600px por paso -- **Tablas visuales:** 1000x700px - -### Estilo Visual -- **Colores:** Consistente con la paleta de la app (azul primario, rojo para emergencias) -- **Tipografía:** Sans-serif, legible en móvil -- **Iconos:** Estilo consistente (lucide-react o similar) -- **Contraste:** WCAG AA mínimo - -### Accesibilidad -- Texto alternativo descriptivo para cada imagen -- Contraste adecuado para texto sobre fondos -- Versión en texto disponible para lectores de pantalla - ---- - -## 📝 NOTAS IMPORTANTES - -1. **No hay referencias a archivos multimedia existentes** en los archivos .md actuales -2. **Todas las infografías mencionadas están documentadas pero no creadas** -3. **Las descripciones detalladas están en los archivos .md** en las secciones "Puntos Clave TES" o "Contenido para Infografía" -4. **Prioridad alta** se asigna a medios relacionados con procedimientos críticos (inmovilización, oxigenoterapia) -5. **Formato SVG recomendado** para mejor escalabilidad y rendimiento en la app - ---- - -## ✅ PRÓXIMOS PASOS - -1. Crear estructura de carpetas `public/assets/infografias/` -2. Diseñar infografías de alta prioridad primero -3. Integrar referencias en archivos .md usando sintaxis Markdown estándar: `![Descripción](./assets/infografias/ruta.svg)` -4. Actualizar componentes React para mostrar infografías cuando estén disponibles -5. Validar accesibilidad y contraste de todas las imágenes - ---- - -**Última actualización:** 2025-01-27 -**Total de medios identificados:** 21 medios faltantes documentados diff --git a/docs/archivo/PAGINAS_PROTOCOLOS_CREADAS.md b/docs/archivo/PAGINAS_PROTOCOLOS_CREADAS.md deleted file mode 100644 index 13fcb692..00000000 --- a/docs/archivo/PAGINAS_PROTOCOLOS_CREADAS.md +++ /dev/null @@ -1,205 +0,0 @@ -# ✅ Páginas de Protocolos Dedicadas - COMPLETADAS - -**Fecha:** 2025-12-17 - ---- - -## 🎯 Objetivo - -Crear páginas dedicadas para cada protocolo crítico mostrado en la página principal, reemplazando los enlaces con query parameters por rutas específicas y contenido completo. - ---- - -## ✅ Páginas Creadas - -### 1. `/rcp` - RCP / Parada Cardiorrespiratoria - -**Archivo:** `src/pages/RCP.tsx` - -**Características:** -- ✅ Tabs para alternar entre Adulto y Pediátrico -- ✅ Protocolo SVB (Soporte Vital Básico) completo -- ✅ Protocolo SVA (Soporte Vital Avanzado) completo -- ✅ Pasos detallados, advertencias y puntos clave -- ✅ Material necesario y fármacos relacionados -- ✅ Enlaces a protocolos relacionados - -**Contenido:** -- Protocolo RCP Adulto SVB (10 pasos) -- Protocolo RCP Adulto SVA (10 pasos) -- Protocolo RCP Pediátrico (9 pasos) -- Advertencias específicas por edad -- Enlaces a Vía Aérea y otros protocolos - ---- - -### 2. `/ictus` - Código Ictus - -**Archivo:** `src/pages/Ictus.tsx` - -**Características:** -- ✅ Test FAST explicado visualmente (F-A-S-T) -- ✅ Protocolo de activación paso a paso -- ✅ Criterios de exclusión -- ✅ Advertencias sobre tiempo crítico -- ✅ Enlaces a protocolo transtelefónico y RCP - -**Contenido:** -- Test FAST (Face, Arms, Speech, Time) -- Protocolo de activación (4 pasos) -- Valoración inicial (hora síntomas, glucemia, TA, Glasgow) -- Manejo prehospitalario -- Criterios de exclusión -- Enlaces relacionados - ---- - -### 3. `/shock` - Shock Hemorrágico - -**Archivo:** `src/pages/Shock.tsx` - -**Características:** -- ✅ Clasificación visual del shock (Clase I-IV) -- ✅ Protocolo completo paso a paso -- ✅ Explicación de hipotensión permisiva -- ✅ Material necesario y fármacos -- ✅ Enlaces relacionados - -**Contenido:** -- Clasificación del shock hemorrágico (4 clases) -- Protocolo de actuación (9 pasos) -- Advertencias sobre hipotensión permisiva -- Excepciones (TCE) -- Material y fármacos - ---- - -### 4. `/via-aerea` - Vía Aérea / OVACE - -**Archivo:** `src/pages/ViaAerea.tsx` - -**Características:** -- ✅ Valoración inicial (Leve vs Grave) -- ✅ Protocolo OVACE completo -- ✅ Variaciones por edad (Adultos vs Lactantes) -- ✅ Manejo si pierde consciencia -- ✅ Referencia a IOT (Intubación Orotraqueal) -- ✅ Enlaces a RCP y otros protocolos - -**Contenido:** -- Valoración inicial (obstrucción leve/grave) -- Protocolo OVACE paso a paso -- Variaciones para adultos y lactantes -- Manejo si pierde consciencia -- Referencia a IOT en manual completo - ---- - -## 🔄 Enlaces Actualizados - -### Página Principal (`src/pages/Index.tsx`) - -**Antes:** -- RCP: `/soporte-vital?id=rcp-adulto-svb` -- Ictus: `/patologias?tab=neurologicas` -- Shock: `/soporte-vital?id=shock-hemorragico` -- Vía Aérea: `/soporte-vital?id=obstruccion-via-aerea` - -**Ahora:** -- ✅ RCP: `/rcp` -- ✅ Ictus: `/ictus` -- ✅ Shock: `/shock` -- ✅ Vía Aérea: `/via-aerea` - -**También actualizado:** -- ✅ Botón flotante de emergencia → `/rcp` -- ✅ Quick Access chips → rutas actualizadas - ---- - -## 📋 Rutas Agregadas - -**Archivo:** `src/App.tsx` - -```tsx -} /> -} /> -} /> -} /> -``` - ---- - -## 🎨 Características de las Páginas - -### Diseño Consistente: -- ✅ Header con icono y título -- ✅ Botón de retroceso en todas las páginas -- ✅ Cards con información estructurada -- ✅ Colores por prioridad (rojo crítico, naranja alto, etc.) -- ✅ Enlaces relacionados al final - -### Contenido Completo: -- ✅ Protocolos paso a paso -- ✅ Advertencias importantes destacadas -- ✅ Puntos clave resaltados -- ✅ Material y fármacos necesarios -- ✅ Variaciones por edad cuando aplica - -### Navegación: -- ✅ Botones de retroceso -- ✅ Enlaces a protocolos relacionados -- ✅ Enlaces al manual completo cuando aplica - ---- - -## 📱 Estructura de Cada Página - -1. **Header:** - - Icono con color temático - - Título principal - - Descripción breve - -2. **Contenido Principal:** - - Protocolo paso a paso - - Información estructurada (clasificaciones, tests, etc.) - - Advertencias y puntos clave - -3. **Secciones Especiales:** - - Clasificaciones (Shock) - - Tests (FAST en Ictus) - - Variaciones por edad (RCP, OVACE) - -4. **Enlaces Relacionados:** - - Protocolos relacionados - - Manual completo - - Otras secciones relevantes - ---- - -## ✅ Verificación - -### Rutas Funcionando: -- ✅ `/rcp` - Página completa de RCP -- ✅ `/ictus` - Página completa de Código Ictus -- ✅ `/shock` - Página completa de Shock Hemorrágico -- ✅ `/via-aerea` - Página completa de Vía Aérea/OVACE - -### Enlaces Actualizados: -- ✅ Botones de emergencia en página principal -- ✅ Quick Access chips -- ✅ Botón flotante de emergencia - ---- - -## 🎯 Resultado Final - -✅ **4 páginas dedicadas creadas** con contenido completo -✅ **Enlaces actualizados** en página principal -✅ **Rutas configuradas** en App.tsx -✅ **Navegación mejorada** con botones de retroceso -✅ **Contenido estructurado** y fácil de leer - ---- - -**Estado:** ✅ COMPLETADO Y LISTO PARA USAR diff --git a/docs/archivo/PLAN_LIMPIEZA_FASES.md b/docs/archivo/PLAN_LIMPIEZA_FASES.md deleted file mode 100644 index b5905ce4..00000000 --- a/docs/archivo/PLAN_LIMPIEZA_FASES.md +++ /dev/null @@ -1,364 +0,0 @@ -# 🧹 Plan de Limpieza Completo - EMERGES TES - -**Fecha:** 2025-12-23 -**Script:** `cleanup_completo.sh` - ---- - -## 📋 Resumen Ejecutivo - -Este plan ejecuta una limpieza completa del proyecto en **6 fases**, moviendo archivos innecesarios a carpetas de revisión y manteniendo solo lo esencial. - -**Resultado esperado:** -- ~250 archivos (en lugar de 400+) -- ~150MB (en lugar de 250MB+) -- Estructura clara y organizada -- Todas las funcionalidades intactas - ---- - -## 🔄 Fases de Limpieza - -### **FASE 1: ARCHIVOS INNECESARIOS** (Eliminar inmediatamente) - -**Acciones:** -- ✅ Eliminar archivos del sistema (.DS_Store, Thumbs.db) -- ✅ Eliminar logs (*.log, npm-debug.log*) -- ✅ Eliminar builds anteriores (dist/, build/, .next/) -- ✅ Eliminar node_modules/ (se reinstalarán) - -**Impacto:** Limpieza inmediata, sin riesgo - ---- - -### **FASE 2: BACKUPS Y DUPLICADOS** (Mover a revisión) - -**Archivos movidos a `../EMERGES_REVISION_YYYYMMDD/`:** - -1. **`_BACKUP_MD/`** (203 archivos) - - 129 archivos .md - - 62 archivos .docx - - 7 scripts Python - - **Acción:** Mover para revisión - -2. **`MANUAL_TES_DIGITAL/`** (110 archivos .md) - - Duplicado de `public/manual/` - - **Acción:** Mover para revisión - -3. **`imagenes-pendientes/`** (60 archivos) - - 50 imágenes PNG - - 9 imágenes SVG - - **Acción:** Mover para revisión - -**Impacto:** Libera ~100MB, archivos disponibles para revisión - ---- - -### **FASE 3: CONFIGURACIONES REDUNDANTES** (Simplificar) - -**Configuraciones movidas a `config_backup/`:** - -- `vercel.json` (si no usas Vercel) -- `netlify.toml` (si no usas Netlify) -- `nginx.conf.example` (solo ejemplo) -- `public/.htaccess` (si no usas Apache) -- `public/_redirects` (si no usas Netlify) - -**Configuraciones mantenidas:** - -- ✅ `Dockerfile` -- ✅ `docker-compose.yml` -- ✅ `docker-compose.prod.yml` -- ✅ `deploy-docker.sh` -- ✅ `ecosystem.config.js` (PM2) -- ✅ `deploy.sh` -- ✅ `webhook-deploy.sh` -- ✅ `.github/workflows/deploy.yml` - -**Impacto:** Simplifica estructura, mantiene solo lo usado - ---- - -### **FASE 4: DOCUMENTACIÓN** (Consolidar) - -**Documentación esencial → `docs/consolidado/`:** - -1. `DEPLOYMENT_SERVER.md` -2. `DEPLOYMENT_DOCKER.md` -3. `DEPLOYMENT_GITHUB.md` -4. `VERCEL_DEPLOYMENT.md` -5. `RESUMEN_DEPLOY_8607.md` -6. `VERIFICACION_PWA.md` -7. `ESTADO_FUNCIONALIDADES.md` -8. `SPA_ROUTING_CONFIG.md` -9. `CHECKLIST_PWA_COMPLETA.md` -10. `ANALISIS_TECNOLOGICO_PROYECTO.md` -11. `PLAN_ESTRUCTURA_PSIQUIATRIA.md` -12. `FASE_1_FALTANTE_DETALLADO.md` -13. `SISTEMA_MEDIOS_VISUALES.md` - -**Resto de documentación → `docs/archivo/`:** - -- Todos los demás archivos .md (excepto README.md) - -**README.md:** Actualizado con información esencial - -**Impacto:** Documentación organizada y accesible - ---- - -### **FASE 5: SCRIPTS** (Limpiar) - -**Scripts Python → `../EMERGES_REVISION_YYYYMMDD/scripts_python/`:** - -- Todos los scripts .py de la raíz -- Scripts .py de `scripts/` - -**Scripts mantenidos:** - -- ✅ `deploy.sh` -- ✅ `deploy-docker.sh` -- ✅ `webhook-deploy.sh` -- ✅ `cleanup_completo.sh` -- ✅ `cleanup_project.sh` -- ✅ `scripts/verificar-manual.ts` - -**Impacto:** Solo scripts esenciales visibles - ---- - -### **FASE 6: REINSTALACIÓN Y VERIFICACIÓN** - -**Acciones:** -- ✅ Reinstalar dependencias (`npm install`) -- ✅ Verificar build (`npm run build`) -- ✅ Mostrar resumen final - -**Impacto:** Proyecto funcional y verificado - ---- - -## 📊 Estructura Final Optimizada - -``` -protocolo-r-pido/ -├── public/ # Archivos públicos -│ ├── assets/infografias/ # 46+ imágenes organizadas -│ ├── manual/ # 78 archivos .md -│ ├── manifest.json -│ ├── sw.js -│ └── favicon.svg -├── src/ # ~136 archivos TS/TSX -│ ├── components/ # 40+ componentes -│ ├── data/ # Datos TypeScript -│ ├── hooks/ # Custom hooks -│ ├── pages/ # 20+ páginas -│ └── [otros] -├── docs/ -│ ├── consolidado/ # 13 documentos esenciales -│ └── archivo/ # 30+ documentos para referencia -├── scripts/ -│ └── verificar-manual.ts # Script esencial -├── config_backup/ # Configuraciones no usadas -├── .github/ -│ └── workflows/deploy.yml -├── Dockerfile # ✅ Mantenido -├── docker-compose.yml # ✅ Mantenido -├── docker-compose.prod.yml # ✅ Mantenido -├── deploy-docker.sh # ✅ Mantenido -├── ecosystem.config.js # ✅ Mantenido (PM2) -├── deploy.sh # ✅ Mantenido -├── webhook-deploy.sh # ✅ Mantenido -├── cleanup_completo.sh # ✅ Nuevo -├── package.json -├── vite.config.ts -├── tailwind.config.ts -└── README.md # ✅ Actualizado -``` - ---- - -## 🚀 Uso del Script - -### Ejecutar Limpieza Completa - -```bash -# Hacer ejecutable (si no lo está) -chmod +x cleanup_completo.sh - -# Ejecutar limpieza -./cleanup_completo.sh -``` - -El script: -1. ✅ Crea backup completo automático -2. ✅ Pide confirmación antes de continuar -3. ✅ Ejecuta las 6 fases secuencialmente -4. ✅ Muestra progreso detallado -5. ✅ Verifica build al final -6. ✅ Muestra resumen completo - ---- - -## ✅ Verificaciones Post-Limpieza - -### 1. Build del Proyecto - -```bash -npm run build -``` - -**Esperado:** Build exitoso sin errores - ---- - -### 2. Desarrollo Local - -```bash -npm run dev -``` - -**Esperado:** App funciona en `http://localhost:8096` - ---- - -### 3. Docker - -```bash -docker-compose up --build -``` - -**Esperado:** Contenedor inicia correctamente en puerto 8607 - ---- - -### 4. PWA Funcionalidad - -```bash -npm run build -npx serve -s dist -l 3000 -``` - -**Verificar en navegador:** -- ✅ Service Worker registrado -- ✅ Manifest funciona -- ✅ Modo offline funciona -- ✅ Instalación PWA disponible - ---- - -### 5. Funcionalidades Clave - -**Verificar:** -- ✅ Manual médico (todos los .md accesibles) -- ✅ Vademécum de fármacos -- ✅ Protocolos de emergencia -- ✅ Calculadoras médicas -- ✅ Favoritos y búsqueda -- ✅ Navegación entre páginas - ---- - -## 📊 Espacio Liberado Estimado - -| Elemento | Archivos | Espacio | Acción | -|----------|----------|---------|--------| -| `_BACKUP_MD/` | 203 | ~50MB | Mover a revisión | -| `MANUAL_TES_DIGITAL/` | 110 | ~30MB | Mover a revisión | -| `imagenes-pendientes/` | 60 | ~20MB | Mover a revisión | -| Documentación .md | 40+ | ~5MB | Consolidar | -| Configuraciones | 10+ | ~1MB | Mover a backup | -| Logs y temporales | Varios | ~5MB | Eliminar | -| **TOTAL** | **400+** | **~110MB** | **Optimizado** | - ---- - -## ⚠️ Precauciones - -### Antes de Ejecutar - -1. ✅ **Backup manual extra** (recomendado): - ```bash - cp -r /home/planetazuzu/protocolo-r-pido /home/planetazuzu/protocolo-backup-manual - ``` - -2. ✅ **Verificar que no hay cambios sin commit**: - ```bash - git status - ``` - -3. ✅ **Commit de cambios pendientes** (si los hay): - ```bash - git add -A - git commit -m "backup antes de limpieza" - ``` - -### Después de Ejecutar - -1. ✅ **Revisar `../EMERGES_REVISION_YYYYMMDD/`** antes de eliminar -2. ✅ **Verificar todas las funcionalidades** -3. ✅ **Probar build y deploy** -4. ✅ **Si todo está bien, eliminar backups antiguos** (mantener solo el más reciente) - ---- - -## 🔄 Mantenimiento Recomendado - -### Script de Mantenimiento Mensual - -Crear `monthly_cleanup.sh`: - -```bash -#!/bin/bash -echo "🧼 Mantenimiento mensual del proyecto" - -# 1. Limpiar node_modules y reinstalar -rm -rf node_modules package-lock.json -npm install - -# 2. Limpiar builds -rm -rf dist/ - -# 3. Verificar dependencias -npm outdated -npm audit - -# 4. Rebuild -npm run build - -echo "✅ Mantenimiento completado" -``` - ---- - -## 🎯 Resultado Final - -Después de la limpieza, el proyecto tendrá: - -- ✅ **~250 archivos** (en lugar de 400+) -- ✅ **~150MB** (en lugar de 250MB+) -- ✅ **Estructura clara y organizada** -- ✅ **Todas las funcionalidades intactas** -- ✅ **PWA completamente funcional** -- ✅ **Deployment simplificado** -- ✅ **Documentación accesible** - ---- - -## 📞 Soporte - -Si algo falla después de la limpieza: - -1. **Restaurar desde backup:** - ```bash - cd .. - tar -xzf EMERGES_BACKUP_YYYYMMDD_HHMMSS/proyecto_completo.tar.gz - ``` - -2. **Revisar logs del script** (si hay errores) - -3. **Verificar que todas las dependencias están instaladas** - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/REPORTE_LIMPIEZA_MANUAL.md b/docs/archivo/REPORTE_LIMPIEZA_MANUAL.md deleted file mode 100644 index e7aa0fdf..00000000 --- a/docs/archivo/REPORTE_LIMPIEZA_MANUAL.md +++ /dev/null @@ -1,176 +0,0 @@ -# 📋 Reporte de Limpieza del Manual TES Digital - -**Fecha:** 2025-12-17 12:17:55 - -## 📊 Resumen - -- **Archivos válidos encontrados:** 93 -- **Archivos obsoletos identificados:** 66 -- **Total archivos .md en proyecto:** 159 - -## ✅ Archivos Válidos (93 esperados) - -- `manual-tes/TES_Manual_Digital/BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_10_SITUACIONES_ESPECIALES/BLOQUE_10_0_SITUACIONES_ESPECIALES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_11_PROTOCOLOS_TRAUMA/BLOQUE_11_0_PROTOCOLOS_TRAUMA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_13_COMUNICACION_RELACION_PACIENTE/BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_2_INMOVILIZACION_MANUAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_4_CAMILLA_CUCHARA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_5_TABLERO_ESPINAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_6_COLCHON_VACIO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_9_ERRORES_CRITICOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_X_INVENTARIO_MATERIAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_10_MONITORIZACION_BASICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_11_GLUCOMETRO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_12_TERMOMETRIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_13_CONFORT_DOLOR.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_16_COMUNICACION_OPERATIVA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_17_SENALIZACION_ILUMINACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_2B_CANULA_OROFARINGEA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_2_ASPIRACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_3_BVM.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_4_CANULAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_5_ORGANIZACION_MALETIN.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_6_CONTROL_HEMORRAGIAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_7_QUEMADURAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_8_HERIDAS_VENDAJES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_99_CIERRE_BLOQUE_3.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X2_MALETIN_CURAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X3_BOLSA_MONITORIZACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X4_INVENTARIO_GLOBAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X5_CHECKLIST_MAESTRO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_0B_RECONOCIMIENTO_PCR.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_1_RCP_ADULTOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_2_RCP_PEDIATRIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_3_RCP_LACTANTES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_4_USO_DESA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_6_OVACE_ADULTOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_7_OVACE_PEDIATRIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_8_OVACE_LACTANTES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_PCR_TRANSTELEFONICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_2_OVACE_TRANSTELEFONICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_3_SCA_TRANSTELEFONICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_8_COMUNICACION_COORDINADOR.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_1_VADEMECUM_OPERATIVO.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_4_ASPIRINA_USO_SCA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_6_FARMACOLOGIA/BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_1_USO_LUCES_Y_SIRENA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md` -- `manual-tes/TES_Manual_Digital/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md` - -## 🗑️ Archivos Obsoletos Identificados - -**NOTA:** Estos archivos pueden ser eliminados de forma segura. - -- `manual-tes/01_FUNDAMENTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md` -- `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md` -- `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md` -- `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.3_glasgow_operativo.md` -- `manual-tes/02_PROCEDIMIENTOS_BASICOS/1.4_triage_start.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_1_COLLARIN_CERVICAL.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_2_INMOVILIZACION_MANUAL.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_4_CAMILLA_CUCHARA.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_5_TABLERO_ESPINAL.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_6_COLCHON_VACIO.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_9_ERRORES_CRITICOS.md` -- `manual-tes/03_MATERIAL_E_INMOVILIZACION/BLOQUE_02_X_INVENTARIO_MATERIAL.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_10_MONITORIZACION_BASICA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_11_GLUCOMETRO.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_12_TERMOMETRIA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_13_CONFORT_DOLOR.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_16_COMUNICACION_OPERATIVA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_17_SENALIZACION_ILUMINACION.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_2_ASPIRACION.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_3_BVM.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_4_CANULAS.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_5_ORGANIZACION_MALETIN.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_6_CONTROL_HEMORRAGIAS.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_7_QUEMADURAS.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_8_HERIDAS_VENDAJES.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_99_CIERRE_BLOQUE_3.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_X2_MALETIN_CURAS.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_X3_BOLSA_MONITORIZACION.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_X4_INVENTARIO_GLOBAL.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_X5_CHECKLIST_MAESTRO.md` -- `manual-tes/04_OXIGENOTERAPIA/BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_0_RECONOCIMIENTO_PCR.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_1_RCP_ADULTOS.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_2_RCP_PEDIATRIA.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_3_RCP_LACTANTES.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_4_USO_DESA.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_6_OVACE_ADULTOS.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_7_OVACE_PEDIATRIA.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_8_OVACE_LACTANTES.md` -- `manual-tes/05_SOPORTE_VITAL_RCP/BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md` -- `manual-tes/ANALISIS_REORGANIZACION.md` -- `manual-tes/AUDITORIA_ESTRUCTURAL_MANUAL_TES.md` -- `manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md` -- `manual-tes/BLOQUES/BLOQUE_02_MATERIAL_E_INMOVILIZACION.md` -- `manual-tes/CONTROL_PROYECTO.md` -- `manual-tes/INFORME_BLOQUE_1_BUSQUEDA.md` -- `manual-tes/MAPA_MAESTRO_MANUAL_TES_DIGITAL.md` -- `manual-tes/PROPUESTA_ESTRUCTURA_HIBRIDA_BLOQUE_5_SVA.md` -- `manual-tes/RESUMEN_ATLS_CONCEPTUAL.md` -- `manual-tes/RESUMEN_CORRECCIONES_BLOQUE_1.md` -- `manual-tes/RESUMEN_CORRECCIONES_COMPLETAS.md` diff --git a/docs/archivo/RESUMEN_CAMBIOS.md b/docs/archivo/RESUMEN_CAMBIOS.md deleted file mode 100644 index 98a156f1..00000000 --- a/docs/archivo/RESUMEN_CAMBIOS.md +++ /dev/null @@ -1,119 +0,0 @@ -# 📋 Resumen de Cambios - EMERGES TES v2.0 - -## ✅ OBJETIVO 1: DONACIONES MINIMALISTAS - -### Cambios Realizados - -1. **Componente Footer creado** (`src/components/layout/Footer.tsx`) - - Footer minimalista y no intrusivo - - Visible solo en desktop (hidden en móvil) - - Enlace a Ko-fi: "☕ Apóyanos" - - Estilos consistentes con el resto de la app - -2. **Integrado en App.tsx** - - Footer añadido al layout principal - - Layout ajustado con flexbox para posicionamiento correcto - -### Archivos Modificados -- `src/App.tsx` - Añadido Footer al layout -- `src/components/layout/Footer.tsx` - Nuevo componente - -### Verificación -- ✅ Enlace visible en desktop -- ✅ No intrusivo (hidden en móvil) -- ✅ Abre Ko-fi en nueva pestaña -- ✅ Estilos consistentes - ---- - -## ✅ OBJETIVO 2: DEPLOY EN SERVIDOR PROPIO - -### Cambios Realizados - -1. **Scripts de producción** (`package.json`) - - `build:production`: Build optimizado para producción - - `start:production`: Servidor de preview (opcional) - -2. **Configuración PM2** (`ecosystem.config.js`) - - Configuración para servidor Node.js (opcional) - - Solo necesario si no usas Nginx estático - -3. **Script de deploy** (`deploy.sh`) - - Automatiza: git pull, npm ci, build, PM2 restart - - Ejecutable y comentado - -4. **Configuración Nginx** (`nginx.conf.example`) - - Configuración completa para servir SPA estática - - Soporte para SSL/HTTPS - - Cache optimizado - - Redirección SPA (try_files) - -5. **Documentación** - - `DEPLOYMENT.md`: Guía completa de deployment - - `TEST_CHECKLIST.md`: Checklist pre-deploy - - `env.example`: Variables de entorno - -6. **Gitignore actualizado** - - Añadidos archivos .env - -### Archivos Creados -- `ecosystem.config.js` -- `deploy.sh` -- `nginx.conf.example` -- `DEPLOYMENT.md` -- `TEST_CHECKLIST.md` -- `env.example` - -### Archivos Modificados -- `package.json` - Scripts de producción -- `.gitignore` - Variables de entorno - ---- - -## 🎯 Estado Final - -### Funcionalidad -- ✅ App funciona exactamente igual -- ✅ Footer con donaciones añadido (discreto) -- ✅ Configuración de deploy completa -- ✅ Documentación exhaustiva - -### Próximos Pasos para Deploy - -1. **En el servidor:** - ```bash - # Clonar repositorio - git clone /var/www/emerges-tes - cd /var/www/emerges-tes - - # Instalar dependencias - npm ci - - # Build - npm run build - - # Configurar Nginx (ver DEPLOYMENT.md) - sudo cp nginx.conf.example /etc/nginx/sites-available/emerges-tes - sudo ln -s /etc/nginx/sites-available/emerges-tes /etc/nginx/sites-enabled/ - sudo nginx -t - sudo systemctl reload nginx - ``` - -2. **Para actualizaciones:** - ```bash - ./deploy.sh - ``` - ---- - -## 📝 Notas Importantes - -- **No se añadió complejidad innecesaria** -- **No se modificó lógica existente** -- **Todos los cambios son reversibles** -- **Documentación completa incluida** - ---- - -**Fecha:** 2025-12-23 -**Versión:** 2.0 diff --git a/docs/archivo/RESUMEN_CONFIGURACION_PWA_IMAGENES.md b/docs/archivo/RESUMEN_CONFIGURACION_PWA_IMAGENES.md deleted file mode 100644 index 6ad27c54..00000000 --- a/docs/archivo/RESUMEN_CONFIGURACION_PWA_IMAGENES.md +++ /dev/null @@ -1,101 +0,0 @@ -# ✅ Configuración PWA para Imágenes - COMPLETADA - -**Fecha:** 2025-12-23 - ---- - -## ✅ CAMBIOS REALIZADOS - -### 1. Service Worker (`public/sw.js`) -- ✅ **Actualizado** para cachear rutas `/assets/infografias/` -- ✅ **Estrategia cache-first** para imágenes (offline-first) -- ✅ **Cache automático** cuando se cargan imágenes - -### 2. Vite Config (`vite.config.ts`) -- ✅ **Incluye imágenes** en build (PNG, JPG, SVG, GIF) -- ✅ **Mantiene estructura** de carpetas para assets -- ✅ **Copia `public/`** completo a `dist/` - -### 3. Estructura de Carpetas -- ✅ **Creada** en `public/assets/infografias/` -- ✅ **5 bloques** organizados: - - `bloque-0-fundamentos/` - - `bloque-2-inmovilizacion/` - - `bloque-3-material-sanitario/` - - `bloque-7-conduccion/` - - `bloque-12-marco-legal/` - -### 4. Documentación -- ✅ `GUIA_INTEGRAR_IMAGENES_PWA.md` - Guía completa -- ✅ `RESUMEN_PWA_IMAGENES.md` - Resumen técnico -- ✅ `ESTADO_INFOGRAFIAS_MEDIOS.md` - Estado actual - ---- - -## 📋 QUÉ FALTA (Próximos Pasos) - -### Paso 1: Organizar Imágenes -```bash -# Opción A: Script Python (interactivo) -python scripts/organizar_infografias.py - -# Opción B: Manual -# Mover imágenes desde imagenes-pendientes/ a public/assets/infografias/ -``` - -### Paso 2: Añadir Referencias en Markdown -Editar archivos `.md` del manual para incluir: -```markdown -![Descripción](./assets/infografias/bloque-X-tema/imagen.png) -``` - -### Paso 3: Build y Verificar -```bash -npm run build -# Verificar que dist/assets/infografias/ contiene las imágenes -``` - ---- - -## 🎯 CÓMO FUNCIONARÁ - -1. **Usuario carga página** con imagen en Markdown -2. **Navegador solicita** imagen desde `/assets/infografias/...` -3. **Service Worker intercepta** y cachea la imagen -4. **Siguiente visita offline:** Imagen se sirve desde cache -5. **Resultado:** PWA funciona completamente offline con imágenes - ---- - -## ✅ VERIFICACIÓN - -### Build Actual -```bash -npm run build -# ✅ Build exitoso -# ✅ Estructura de carpetas se copia a dist/ -``` - -### Test Offline (cuando haya imágenes) -1. Cargar app con imágenes -2. DevTools > Network > Offline -3. Recargar página -4. ✅ Imágenes deben cargar desde cache - ---- - -## 📊 ESTADO FINAL - -| Componente | Estado | -|------------|--------| -| Service Worker | ✅ Configurado | -| Vite Build | ✅ Configurado | -| Estructura carpetas | ✅ Creada | -| Imágenes organizadas | ⏳ Pendiente (48 en `imagenes-pendientes/`) | -| Referencias Markdown | ⏳ Pendiente | -| **Funciona offline** | ✅ **Sí, cuando se completen pasos 1-2** | - ---- - -**Conclusión:** La PWA está configurada para funcionar offline con imágenes. Solo falta organizar las imágenes y añadir referencias en el manual. - diff --git a/docs/archivo/RESUMEN_ENLACES_REFERENCIA.md b/docs/archivo/RESUMEN_ENLACES_REFERENCIA.md deleted file mode 100644 index e19e106d..00000000 --- a/docs/archivo/RESUMEN_ENLACES_REFERENCIA.md +++ /dev/null @@ -1,112 +0,0 @@ -# 🔗 Resumen: Enlaces de Referencia Añadidos - -**Fecha:** 2025-12-23 - ---- - -## ✅ ENLACES AÑADIDOS - -### Capítulos Actualizados (6 capítulos) - -1. **BLOQUE_02_3_COLLARIN_CERVICAL.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (4 enlaces) - - ✅ Aplicación práctica (3 enlaces) - - ✅ Errores y prevención (1 enlace) - -2. **BLOQUE_04_1_RCP_ADULTOS.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (4 enlaces) - - ✅ Protocolos transtelefónicos (1 enlace) - - ✅ Continuación (1 enlace) - -3. **BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (3 enlaces) - - ✅ Aplicación práctica (2 enlaces) - -4. **BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (3 enlaces) - - ✅ Aplicación práctica (2 enlaces) - -5. **BLOQUE_02_2_INMOVILIZACION_MANUAL.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (4 enlaces) - - ✅ Continuación (1 enlace) - -6. **BLOQUE_02_5_TABLERO_ESPINAL.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (3 enlaces) - - ✅ Continuación (2 enlaces) - -7. **BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md** - - ✅ Prerrequisitos (2 enlaces) - - ✅ Capítulos relacionados (4 enlaces) - - ✅ Aplicación práctica (2 enlaces) - -8. **BLOQUE_04_0_RECONOCIMIENTO_PCR.md** - - ✅ Prerrequisitos (1 enlace) - - ✅ Continuación (2 enlaces) - - ✅ Protocolos transtelefónicos (1 enlace) - ---- - -## 📊 ESTADÍSTICAS - -- **Capítulos actualizados:** 8 -- **Total de enlaces añadidos:** ~40 enlaces -- **Categorías:** Prerrequisitos, Relacionados, Aplicación práctica, Continuación, Protocolos transtelefónicos - ---- - -## 📋 FORMATO ESTÁNDAR - -Todos los enlaces siguen el formato: - -```markdown ---- - -## 🔗 Enlaces recomendados / Guía de referencia - -### Prerrequisitos -- [Título del Capítulo](../ruta/relativa/al/archivo.md) - Descripción breve - -### Capítulos relacionados -- [Título del Capítulo](./archivo.md) - Descripción breve - -### Aplicación práctica -- [Título del Capítulo](../ruta/relativa/al/archivo.md) - Descripción breve -``` - ---- - -## 🎯 PRÓXIMOS PASOS - -### Capítulos pendientes de actualizar (alta prioridad) - -1. **BLOQUE_04_2_RCP_PEDIATRIA.md** - Añadir enlaces a RCP adulto, lactantes, DESA -2. **BLOQUE_04_3_RCP_LACTANTES.md** - Añadir enlaces a RCP pediátrica, adulto -3. **BLOQUE_04_4_USO_DESA.md** - Añadir enlaces a RCP, protocolos transtelefónicos -4. **BLOQUE_04_5_VENTILACION_BVM.md** - Añadir enlaces a RCP, oxigenoterapia -5. **BLOQUE_02_6_COLCHON_VACIO.md** - Añadir enlaces a tablero, collarín -6. **BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md** - Añadir enlaces a fundamentos, BVM - -### Script disponible - -- `scripts/anadir_enlaces_referencia.py` - Script para añadir enlaces automáticamente -- Requiere definir relaciones en el diccionario `RELACIONES` - ---- - -## ✅ VERIFICACIÓN - -Los enlaces añadidos: -- ✅ Usan rutas relativas correctas -- ✅ Siguen formato estándar -- ✅ Están organizados por categorías -- ✅ Incluyen descripciones breves - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/RESUMEN_LIMPIEZA_COMPLETA.md b/docs/archivo/RESUMEN_LIMPIEZA_COMPLETA.md deleted file mode 100644 index 5edf60f8..00000000 --- a/docs/archivo/RESUMEN_LIMPIEZA_COMPLETA.md +++ /dev/null @@ -1,181 +0,0 @@ -# ✅ Resumen: Script de Limpieza Completa Creado - -**Fecha:** 2025-12-23 -**Script:** `cleanup_completo.sh` - ---- - -## 🎯 Lo que se ha creado - -### 1. **Script de Limpieza Completa** (`cleanup_completo.sh`) - -Script bash que ejecuta **6 fases** de limpieza de forma segura: - -#### **FASE 1: Archivos Innecesarios** -- ✅ Elimina archivos del sistema (.DS_Store, Thumbs.db) -- ✅ Elimina logs (*.log, npm-debug.log*) -- ✅ Elimina builds anteriores (dist/, build/, .next/) -- ✅ Elimina node_modules/ (se reinstalarán después) - -#### **FASE 2: Backups y Duplicados** -- ✅ Mueve `_BACKUP_MD/` (203 archivos) → `../EMERGES_REVISION_YYYYMMDD/` -- ✅ Mueve `MANUAL_TES_DIGITAL/` (110 archivos) → `../EMERGES_REVISION_YYYYMMDD/` -- ✅ Mueve `imagenes-pendientes/` (60 archivos) → `../EMERGES_REVISION_YYYYMMDD/` - -#### **FASE 3: Configuraciones Redundantes** -- ✅ Mueve configuraciones no usadas → `config_backup/` -- ✅ Mantiene Docker, PM2 y GitHub Actions - -#### **FASE 4: Documentación** -- ✅ Mueve 13 documentos esenciales → `docs/consolidado/` -- ✅ Mueve resto de documentación → `docs/archivo/` -- ✅ Actualiza README.md con información esencial - -#### **FASE 5: Scripts** -- ✅ Mueve scripts Python → `../EMERGES_REVISION_YYYYMMDD/scripts_python/` -- ✅ Mantiene scripts esenciales (deploy.sh, deploy-docker.sh, etc.) - -#### **FASE 6: Reinstalación y Verificación** -- ✅ Reinstala dependencias (`npm install`) -- ✅ Verifica build (`npm run build`) -- ✅ Muestra resumen completo - ---- - -### 2. **Documentación** (`PLAN_LIMPIEZA_FASES.md`) - -Guía completa que incluye: -- ✅ Descripción detallada de cada fase -- ✅ Estructura final optimizada -- ✅ Verificaciones post-limpieza -- ✅ Precauciones y mantenimiento - ---- - -## 🚀 Cómo Usar - -### Ejecutar Limpieza - -```bash -# Hacer ejecutable (si no lo está) -chmod +x cleanup_completo.sh - -# Ejecutar limpieza -./cleanup_completo.sh -``` - -**El script:** -1. ✅ Crea backup completo automático -2. ✅ Pide confirmación antes de continuar -3. ✅ Ejecuta las 6 fases secuencialmente -4. ✅ Muestra progreso detallado con colores -5. ✅ Verifica build al final -6. ✅ Muestra resumen completo - ---- - -## 📊 Resultado Esperado - -### Antes de Limpieza -- ~400+ archivos -- ~250MB+ de espacio -- Estructura desorganizada - -### Después de Limpieza -- ~250 archivos -- ~150MB de espacio -- Estructura clara y organizada -- Todas las funcionalidades intactas - ---- - -## ⚠️ Precauciones - -### Antes de Ejecutar - -1. **Backup manual extra** (recomendado): - ```bash - cp -r /home/planetazuzu/protocolo-r-pido /home/planetazuzu/protocolo-backup-manual - ``` - -2. **Verificar cambios sin commit**: - ```bash - git status - ``` - -3. **Commit de cambios pendientes** (si los hay): - ```bash - git add -A - git commit -m "backup antes de limpieza" - ``` - -### Después de Ejecutar - -1. ✅ Revisar `../EMERGES_REVISION_YYYYMMDD/` antes de eliminar -2. ✅ Verificar todas las funcionalidades -3. ✅ Probar build y deploy -4. ✅ Si todo está bien, eliminar backups antiguos - ---- - -## ✅ Verificaciones Post-Limpieza - -### 1. Build -```bash -npm run build -``` - -### 2. Desarrollo -```bash -npm run dev -# Verificar en http://localhost:8096 -``` - -### 3. Docker -```bash -docker-compose up --build -# Verificar en http://localhost:8607 -``` - -### 4. PWA -- Service Worker registrado -- Manifest funciona -- Modo offline funciona - -### 5. Funcionalidades -- Manual médico accesible -- Vademécum funciona -- Protocolos funcionan -- Calculadoras funcionan -- Búsqueda funciona - ---- - -## 📁 Archivos Creados - -1. ✅ `cleanup_completo.sh` - Script de limpieza (ejecutable) -2. ✅ `PLAN_LIMPIEZA_FASES.md` - Documentación completa -3. ✅ `RESUMEN_LIMPIEZA_COMPLETA.md` - Este resumen - ---- - -## 🎯 Próximos Pasos - -1. **Revisar el script:** - ```bash - cat cleanup_completo.sh - ``` - -2. **Revisar la documentación:** - ```bash - cat PLAN_LIMPIEZA_FASES.md - ``` - -3. **Ejecutar limpieza cuando estés listo:** - ```bash - ./cleanup_completo.sh - ``` - ---- - -**Todo está listo para ejecutar la limpieza completa del proyecto! 🎉** diff --git a/docs/archivo/RESUMEN_LIMPIEZA_ESTRUCTURAL.md b/docs/archivo/RESUMEN_LIMPIEZA_ESTRUCTURAL.md deleted file mode 100644 index 1969005a..00000000 --- a/docs/archivo/RESUMEN_LIMPIEZA_ESTRUCTURAL.md +++ /dev/null @@ -1,114 +0,0 @@ -# 📋 RESUMEN - LIMPIEZA ESTRUCTURAL SEGURA - -**Fecha:** 2025-12-23 -**Proceso:** Limpieza estructural segura del proyecto Markdown - ---- - -## ✅ FASE 1 - COPIA DE SEGURIDAD (COMPLETADA) - -### Carpetas creadas: -- `_BACKUP_MD/` (raíz del proyecto) - - `TES_Manual_Digital/` - Carpeta completa movida desde `manual-tes/` - - `SOPORTE_VITAL_RCP_ANTIGUO/` - Carpeta `05_SOPORTE_VITAL_RCP/` movida desde `manual-tes/` - - `DUPLICADOS_VARIOS/` - Reservada para futuros duplicados - - `README.md` - Documentación del backup - -### Archivos movidos (NO eliminados): -- ✅ `manual-tes/TES_Manual_Digital/` → `_BACKUP_MD/TES_Manual_Digital/` -- ✅ `manual-tes/05_SOPORTE_VITAL_RCP/` → `_BACKUP_MD/SOPORTE_VITAL_RCP_ANTIGUO/` - -### Estado: -- ✅ Copia de seguridad completa y reversible -- ✅ README.md creado con documentación -- ✅ Ningún archivo eliminado - ---- - -## ✅ FASE 2 - LIMPIEZA VISUAL (COMPLETADA) - -### Estructura activa confirmada: -``` -manual-tes/ -├── 01_FUNDAMENTOS/ (1 archivo) -├── 02_PROCEDIMIENTOS_BASICOS/ (9 archivos) -├── 02_SOPORTE_VITAL/ (9 archivos) -├── 03_MATERIAL_E_INMOVILIZACION/ (14 archivos) -├── 04_OXIGENOTERAPIA/ (32 archivos) -├── 06_PROTOCOLOS_TRANSTELEFONICOS/ (10 archivos) -├── 07_FARMACOLOGIA/ (9 archivos) -├── 08_TRANSFERENCIA_CONTINUIDAD_ASISTENCIAL/ (6 archivos) -└── 09_TRIAGE_MULTIPLES_VICTIMAS/ (7 archivos) -``` - -### Total archivos activos: 97 archivos .md - ---- - -## ✅ FASE 3 - ENLACES RECOMENDADOS (COMPLETADA) - -### Resultados: -- ✅ **90 archivos** con enlaces añadidos automáticamente -- ⚠️ **28 archivos** sin enlaces (archivos de documentación/inventarios sin numeración estándar) -- ✅ **1 archivo** (BLOQUE_00) con enlaces añadidos manualmente - -### Sección añadida: -Todos los archivos activos ahora incluyen al final: - -```markdown -## 🔗 Enlaces recomendados / Guía de referencia - -- [Enlace 1](ruta_relativa) -- [Enlace 2](ruta_relativa) -... -``` - -### Tipos de enlaces incluidos: -- Capítulos previos lógicos (fundamentos) -- Capítulos siguientes lógicos (continuidad) -- Capítulos de soporte transversal (ABCDE, RCP, farmacología, traslado) -- Protocolos relacionados - ---- - -## 📊 ESTADÍSTICAS FINALES - -| Métrica | Valor | -|---------|-------| -| Archivos activos | 97 | -| Archivos con enlaces | 91 | -| Archivos en backup | ~130+ (estimado) | -| Carpetas movidas | 2 | -| Enlaces añadidos | ~450+ (estimado) | - ---- - -## ✅ RESULTADO ESPERADO (LOGROS) - -- ✅ Copia de seguridad completa y reversible -- ✅ Estructura activa limpia y clara -- ✅ Manual navegable como red de conocimiento -- ✅ Base sólida para normalización y publicación futura -- ✅ Proyecto preparado para siguientes fases sin riesgo - ---- - -## 🔍 VERIFICACIÓN - -Para verificar el estado: -1. Revisar `_BACKUP_MD/README.md` para información del backup -2. Revisar cualquier archivo en `manual-tes/` para ver sección de enlaces al final -3. Consultar `INVENTARIO_COMPLETO_ARCHIVOS_MD.md` para estructura completa - ---- - -## 📝 NOTAS - -- **Ningún archivo fue eliminado** - Solo movidos a backup -- **Todos los enlaces son relativos** - Funcionan en cualquier entorno -- **Los archivos de documentación** (informes, planes) no tienen enlaces (esperado) -- **La estructura está lista** para normalización y publicación - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/RESUMEN_ORGANIZACION_IMAGENES.md b/docs/archivo/RESUMEN_ORGANIZACION_IMAGENES.md deleted file mode 100644 index 2d4c8168..00000000 --- a/docs/archivo/RESUMEN_ORGANIZACION_IMAGENES.md +++ /dev/null @@ -1,146 +0,0 @@ -# ✅ Organización de Imágenes - COMPLETADA - -**Fecha:** 2025-12-23 - ---- - -## 📊 RESULTADO - -### ✅ Imágenes Organizadas: **48 de 49** - -| Bloque | Imágenes | Estado | -|--------|----------|--------| -| **bloque-0-fundamentos** | 9 | ✅ Organizadas | -| **bloque-2-inmovilizacion** | 28 | ✅ Organizadas | -| **bloque-3-material-sanitario** | 9 | ✅ Organizadas | -| **bloque-7-conduccion** | 1 | ✅ Organizada | -| **bloque-12-marco-legal** | 2 | ✅ Organizadas | -| **No mapeada** | 1 | ⚠️ Requiere revisión | - ---- - -## 📁 ESTRUCTURA CREADA - -``` -public/assets/infografias/ -├── bloque-0-fundamentos/ (9 imágenes) -│ ├── ALGORITMO OPERATIVO DEL TES.svg -│ ├── RESUMEN VISUAL DEL ALGORITMO START.svg -│ ├── flujo-rcp-transtelefonica.png -│ ├── flujo-desa-telefono.png -│ ├── fast-transtelefonico.png -│ ├── diagrama-seleccion-dispositivo-oxigenoterapia.png -│ ├── tabla-rangos-fio2-oxigenoterapia.png -│ ├── tabla-rangos-fio2-oxigenoterapia1.png -│ └── guia-colocacion-dispositivos-oxigenoterapia.png -│ -├── bloque-2-inmovilizacion/ (28 imágenes) -│ ├── colocacion-collarin-paso-1-preparacion.png -│ ├── colocacion-collarin-paso-2-parte-posterior.png -│ ├── colocacion-collarin-paso-3-parte-anterior.png -│ ├── colocacion-collarin-paso-4-ajuste-cierres.png -│ ├── colocacion-collarin-paso-5-verificacion.png -│ ├── colocacion-collarin-paso-6-liberacion-controlada.png -│ ├── seleccion-talla-collarin-cervical.png -│ ├── seleccion-talla-collarin-cervical1.png -│ ├── seleccion-talla-collarin 2.png -│ ├── seleccion-talla-collarin-tabla-tallas.png -│ ├── seleccion-talla-collarin-medicion-anatomica.png -│ ├── seleccion-talla-collarin-error-demasiado-grande.png -│ ├── errores-frecuentes-collarin-cervical.png -│ ├── verificaciones-post-colocacion-collarin.png -│ ├── componentes-sistema-inmovilizacion.png -│ ├── componentes-sistema-inmovilizacion 1.png -│ ├── posicion-tes-inmovilizacion-manual.png -│ ├── posicion-tes-inmovilizacion-manual 1.png -│ ├── tecnica-sujecion-manual-cervical.png -│ ├── tecnica-sujecion-manual 1.png -│ ├── componentes-tablero-espinal.png -│ ├── componentes-colchon-vacio.png -│ ├── colocacion-colchon-vacio-paso-a-paso.png -│ ├── componentes-camilla-cuchara.png -│ ├── situaciones-que-requieren-inmovilizacion.png -│ ├── secuencia-transicion-inmovilizacion.png -│ └── coordinacion-equipo-inmovilizacion.png -│ -├── bloque-3-material-sanitario/ (9 imágenes) -│ ├── uso-correcto-pulsioximetro.png -│ ├── uso-correcto-tensiometro.png -│ ├── registro-constantes-vitales.png -│ ├── interpretacion-constantes-semaforo.png -│ ├── configuracion-maxima-fio2-bolsa-mascarilla.png -│ ├── uso-correcto-ambu.png -│ ├── canulas-guedel-nasofaringea.png -│ ├── dispositivos-supragloticos-guia.png -│ └── ventilacion-medios-fortuna.png -│ -├── bloque-7-conduccion/ (1 imagen) -│ └── configuracion-gps-antes-de-salir.png -│ -└── bloque-12-marco-legal/ (2 imágenes) - ├── diagrama-decisiones-eticas.png - └── diagrama-decisiones-eticas-urgencias.png -``` - ---- - -## ⚠️ IMAGEN NO MAPEADA - -**Archivo:** `7 Mandamientos Movilización Segura Paciente.png` - -**Ubicación actual:** `imagenes-pendientes/` - -**Acción requerida:** -- Revisar el contenido de la imagen -- Decidir a qué bloque pertenece (probablemente `bloque-2-inmovilizacion`) -- Mover manualmente o añadir al mapeo en `scripts/organizar_imagenes_auto.py` - ---- - -## ✅ PRÓXIMOS PASOS - -### 1. Verificar Build -```bash -npm run build -# Verificar que dist/assets/infografias/ contiene las imágenes -``` - -### 2. Añadir Referencias en Markdown -Editar archivos `.md` del manual para incluir referencias a las imágenes: - -**Ejemplo:** -```markdown -![Colocación de collarín - Paso 1](./assets/infografias/bloque-2-inmovilizacion/colocacion-collarin-paso-1-preparacion.png) -``` - -### 3. Test PWA Offline -1. Cargar app con imágenes -2. DevTools > Network > Offline -3. Verificar que las imágenes cargan desde cache - ---- - -## 📝 NOTAS - -- ✅ Todas las imágenes están en `public/assets/infografias/` -- ✅ El Service Worker cacheará automáticamente estas imágenes -- ✅ Vite copiará estas imágenes al build (`dist/`) -- ⏳ Falta añadir referencias en archivos Markdown del manual -- ⏳ Falta decidir ubicación de la imagen no mapeada - ---- - -## 🎯 ESTADO FINAL - -| Aspecto | Estado | -|---------|--------| -| **Imágenes organizadas** | ✅ 48/49 (98%) | -| **Estructura creada** | ✅ Completa | -| **Service Worker** | ✅ Configurado | -| **Vite Build** | ✅ Configurado | -| **Referencias Markdown** | ⏳ Pendiente | -| **Funciona offline** | ✅ Sí (cuando se añadan referencias) | - ---- - -**Conclusión:** Las imágenes están organizadas y listas para usar en la PWA. Solo falta añadir las referencias en los archivos Markdown del manual. diff --git a/docs/archivo/RESUMEN_PWA_ACTUALIZACIONES.md b/docs/archivo/RESUMEN_PWA_ACTUALIZACIONES.md deleted file mode 100644 index 30d99772..00000000 --- a/docs/archivo/RESUMEN_PWA_ACTUALIZACIONES.md +++ /dev/null @@ -1,125 +0,0 @@ -# ✅ Resumen: PWA y Sistema de Actualizaciones - -**Fecha:** 2025-12-23 - ---- - -## ✅ MEJORAS IMPLEMENTADAS - -### 1. Service Worker Mejorado (`public/sw.js`) -- ✅ **Versión de cache:** `CACHE_VERSION = 'v1.0.1'` (incrementar para forzar actualización) -- ✅ **Cache First** para assets estáticos (offline-first) -- ✅ **Network First** para HTML (permite actualizaciones) -- ✅ **Cache automático** de imágenes en `/assets/infografias/` -- ✅ **Limpieza automática** de caches antiguos - -### 2. Sistema de Actualizaciones (`src/main.tsx`) -- ✅ **Registro mejorado:** `updateViaCache: 'none'` (siempre verifica actualizaciones) -- ✅ **Verificación periódica:** Cada hora -- ✅ **Verificación al recuperar foco:** Cuando vuelves a la app -- ✅ **Detección de nueva versión:** Escucha eventos `updatefound` - -### 3. Hook `useServiceWorker` (`src/hooks/useServiceWorker.ts`) -- ✅ **Estado del SW:** registration, updateAvailable, offline -- ✅ **Funciones:** updateServiceWorker(), reloadPage() -- ✅ **Detección automática** de actualizaciones - -### 4. Componente `UpdateNotification` (`src/components/layout/UpdateNotification.tsx`) -- ✅ **Banner visual** cuando hay actualización -- ✅ **Botón "Actualizar ahora"** para aplicar actualización -- ✅ **Botón "Más tarde"** para posponer -- ✅ **Integrado** en `App.tsx` - -### 5. Manifest Mejorado (`public/manifest.json`) -- ✅ **Iconos adicionales** (192x192, 512x512) -- ✅ **Configuración completa** para instalación PWA - ---- - -## 🔄 CÓMO FUNCIONA - -### Flujo de Actualización - -1. **Desarrollo:** - - Cambias código - - Cambias `CACHE_VERSION` en `sw.js` (ej: `v1.0.1` → `v1.0.2`) - - Haces build: `npm run build` - - Subes a servidor - -2. **Usuario abre la app:** - - El navegador detecta que `sw.js` cambió - - Descarga la nueva versión del SW - - La instala en segundo plano - -3. **Nueva versión instalada:** - - El hook `useServiceWorker` detecta `updateAvailable = true` - - Se muestra el banner de actualización - - El usuario puede actualizar ahora o más tarde - -4. **Usuario hace clic en "Actualizar ahora":** - - Se envía mensaje `SKIP_WAITING` al SW - - El SW se activa inmediatamente - - Se recarga la página - - Se crea nuevo cache con nueva versión - - Se elimina cache antiguo - ---- - -## 🧪 VERIFICACIÓN - -### Test Rápido - -```bash -# 1. Build actual -npm run build - -# 2. Preview -npm run preview - -# 3. Abrir en navegador -# 4. DevTools > Application > Service Workers -# Verificar: SW registrado y activo - -# 5. Cambiar CACHE_VERSION en public/sw.js -# 6. Build de nuevo -npm run build - -# 7. Recargar página en navegador -# Verificar: Aparece banner de actualización -``` - ---- - -## 📋 CHECKLIST - -- [x] Service Worker configurado -- [x] Sistema de actualizaciones implementado -- [x] Hook useServiceWorker creado -- [x] Componente UpdateNotification creado -- [x] Integrado en App.tsx -- [x] Manifest mejorado -- [x] Build funciona correctamente -- [ ] Test en navegador (requiere servidor) -- [ ] Test offline (requiere servidor) -- [ ] Test de actualización (requiere servidor) - ---- - -## 🎯 PRÓXIMOS PASOS - -1. **Probar en servidor real:** - - Desplegar en servidor - - Verificar que SW se registra - - Verificar que actualizaciones funcionan - -2. **Opcional: Indicador offline:** - - Añadir indicador visual cuando está offline - - Mostrar en Header o BottomNav - -3. **Opcional: Sincronización:** - - Sincronizar datos cuando vuelve la conexión - - (Requiere backend) - ---- - -**Estado:** ✅ **COMPLETADO** - Sistema de actualizaciones implementado y listo para probar diff --git a/docs/archivo/RESUMEN_PWA_IMAGENES.md b/docs/archivo/RESUMEN_PWA_IMAGENES.md deleted file mode 100644 index 08db6532..00000000 --- a/docs/archivo/RESUMEN_PWA_IMAGENES.md +++ /dev/null @@ -1,91 +0,0 @@ -# 📸 Resumen: Imágenes en PWA - EMERGES TES - -**Fecha:** 2025-12-23 - ---- - -## ✅ CONFIGURACIÓN COMPLETADA PARA PWA - -### 1. Service Worker Actualizado -- ✅ **Cachea imágenes automáticamente** (cache-first strategy) -- ✅ **Detecta rutas** `/assets/infografias/` y las cachea -- ✅ **Funciona offline** una vez que las imágenes se cargan - -### 2. Vite Build Configurado -- ✅ **Copia `public/`** a `dist/` (incluye imágenes) -- ✅ **Mantiene estructura** de carpetas para assets -- ✅ **Incluye PNG, JPG, SVG, GIF** en el build - -### 3. Estructura de Carpetas Creada -``` -public/assets/infografias/ -├── bloque-0-fundamentos/ -├── bloque-2-inmovilizacion/ -├── bloque-3-material-sanitario/ -├── bloque-7-conduccion/ -└── bloque-12-marco-legal/ -``` - ---- - -## 📋 PRÓXIMOS PASOS - -### Paso 1: Mover Imágenes (Manual o Script) - -**Opción A: Script Python (Recomendado)** -```bash -python scripts/organizar_infografias.py -``` - -**Opción B: Manual** -```bash -# Ejemplo: Mover imágenes de collarín -cp imagenes-pendientes/colocacion-collarin-paso-*.png public/assets/infografias/bloque-2-inmovilizacion/ -``` - -### Paso 2: Añadir Referencias en Markdown - -Editar archivos `.md` del manual: -```markdown -![Descripción](./assets/infografias/bloque-2-inmovilizacion/imagen.png) -``` - -### Paso 3: Build y Verificar - -```bash -npm run build -ls -R dist/assets/infografias/ # Verificar que están en el build -``` - -### Paso 4: Test Offline - -1. Abrir app en navegador -2. Cargar páginas con imágenes (para cachear) -3. DevTools > Network > Offline -4. Verificar que las imágenes cargan - ---- - -## 🎯 ESTADO ACTUAL - -| Aspecto | Estado | -|---------|--------| -| **Service Worker** | ✅ Configurado para cachear imágenes | -| **Vite Build** | ✅ Incluye imágenes en build | -| **Estructura carpetas** | ✅ Creada | -| **Imágenes organizadas** | ❌ Pendiente (48 en `imagenes-pendientes/`) | -| **Referencias en Markdown** | ❌ Pendiente (0 referencias) | -| **Funciona offline** | ⚠️ Cuando se completen pasos 1-2 | - ---- - -## 📝 NOTAS IMPORTANTES - -1. **Las imágenes se cachean automáticamente** cuando se cargan por primera vez -2. **No necesitas precachear manualmente** - el SW las cachea bajo demanda -3. **Una vez organizadas y referenciadas**, funcionarán offline automáticamente -4. **El tamaño total** de imágenes (~8.5MB) es aceptable para PWA - ---- - -**Conclusión:** La infraestructura está lista. Solo falta organizar las imágenes y añadir referencias en el manual. diff --git a/docs/archivo/RESUMEN_PWA_INSTALACION.md b/docs/archivo/RESUMEN_PWA_INSTALACION.md deleted file mode 100644 index c334e3ed..00000000 --- a/docs/archivo/RESUMEN_PWA_INSTALACION.md +++ /dev/null @@ -1,164 +0,0 @@ -# ✅ Resumen: Banner de Instalación PWA - -**Fecha:** 2025-12-23 - ---- - -## ✅ IMPLEMENTACIÓN COMPLETADA - -### 1. Hook `usePWAInstall` -- ✅ **Detección de `beforeinstallprompt`** - Captura el evento del navegador -- ✅ **Detección de instalación** - Detecta cuando la app ya está instalada -- ✅ **Estado de instalabilidad** - `isInstallable`, `isInstalled`, `showBanner` -- ✅ **Función `install()`** - Muestra el prompt de instalación -- ✅ **Dismissal tracking** - Guarda en localStorage cuando el usuario cierra el banner -- ✅ **Re-mostrar después de 7 días** - Si el usuario cerró el banner, se muestra de nuevo después de 7 días - -### 2. Componente `InstallBanner` -- ✅ **Banner visual** - Diseño atractivo con gradiente -- ✅ **Botón "Instalar"** - Llama a la función `install()` -- ✅ **Botón cerrar** - Permite cerrar el banner -- ✅ **Posicionamiento** - Fixed bottom, no se solapa con otros elementos -- ✅ **Responsive** - Funciona en móvil y desktop -- ✅ **Animación** - Slide-in desde abajo - -### 3. Integración -- ✅ **Añadido a App.tsx** - Integrado en la aplicación -- ✅ **Z-index correcto** - No se solapa con UpdateNotification -- ✅ **Build exitoso** - Sin errores - ---- - -## 🎯 CÓMO FUNCIONA - -### Flujo de Instalación - -1. **Usuario abre la app** en navegador compatible (Chrome, Edge, etc.) -2. **Navegador detecta** que la app es instalable (manifest + SW + HTTPS) -3. **Evento `beforeinstallprompt`** se dispara -4. **Hook captura el evento** y guarda el prompt -5. **Banner aparece** después de 3 segundos (mejor UX) -6. **Usuario hace clic en "Instalar"** -7. **Se muestra el prompt nativo** del navegador -8. **Usuario acepta** → App se instala -9. **App se abre** en modo standalone - -### Detección de Instalación - -- **Modo standalone:** `window.matchMedia('(display-mode: standalone)')` -- **iOS:** `window.navigator.standalone === true` -- **Evento `appinstalled`:** Se dispara cuando se instala - ---- - -## 📱 COMPATIBILIDAD - -### Navegadores que Soportan `beforeinstallprompt` -- ✅ Chrome (Desktop y Android) -- ✅ Edge (Desktop y Android) -- ✅ Opera (Desktop y Android) -- ✅ Samsung Internet -- ❌ Safari (iOS) - Usa método manual (Compartir → Añadir a pantalla de inicio) -- ❌ Firefox - No soporta `beforeinstallprompt` (en desarrollo) - -### Requisitos para que Aparezca el Banner -1. ✅ **Manifest.json** presente y válido -2. ✅ **Service Worker** registrado -3. ✅ **HTTPS** (o localhost para desarrollo) -4. ✅ **Iconos** configurados (192x192 y 512x512 recomendados) -5. ✅ **No estar ya instalada** - Si ya está instalada, no aparece - ---- - -## 🧪 CÓMO PROBAR - -### Test Local (Desarrollo) -```bash -# 1. Build -npm run build - -# 2. Preview (simula HTTPS con localhost) -npm run preview - -# 3. Abrir en Chrome/Edge -# http://localhost:4173 - -# 4. Verificar: -# - Banner aparece después de 3 segundos -# - Botón "Instalar" funciona -# - Prompt nativo aparece -``` - -### Test en Producción -1. Desplegar en servidor con HTTPS -2. Abrir en Chrome/Edge (móvil o desktop) -3. Verificar que el banner aparece -4. Hacer clic en "Instalar" -5. Verificar que se instala correctamente - -### Test iOS (Safari) -1. Abrir en Safari iOS -2. El banner NO aparecerá (Safari no soporta `beforeinstallprompt`) -3. Usar método manual: Compartir → Añadir a pantalla de inicio -4. Verificar que funciona en modo standalone - ---- - -## ⚙️ CONFIGURACIÓN - -### Personalización del Delay -En `src/hooks/usePWAInstall.ts`: -```ts -setTimeout(() => { - setShowBanner(true); -}, 3000); // Cambiar a otro valor (en milisegundos) -``` - -### Personalización del Tiempo de Re-mostrar -En `src/hooks/usePWAInstall.ts`: -```ts -if (daysSinceDismissed >= 7) { // Cambiar a otro número de días -``` - -### Personalización del Banner -En `src/components/layout/InstallBanner.tsx`: -- Cambiar colores, texto, posición, etc. - ---- - -## 📋 CHECKLIST PWA COMPLETA - -### Requisitos Esenciales ✅ -- [x] Manifest.json configurado -- [x] Service Worker registrado -- [x] HTTPS (en producción) -- [x] Meta tags PWA -- [x] Banner de instalación -- [x] Funciona offline - -### Mejoras Opcionales -- [ ] Iconos PNG específicos (192x192, 512x512) -- [ ] Screenshots en manifest -- [ ] Notificaciones push - ---- - -## ✅ ESTADO FINAL - -**Banner de Instalación:** ✅ **IMPLEMENTADO Y FUNCIONAL** - -- ✅ Hook `usePWAInstall` creado -- ✅ Componente `InstallBanner` creado -- ✅ Integrado en App.tsx -- ✅ Build exitoso -- ✅ Sin errores de linter - -**La PWA ahora tiene:** -- ✅ Banner de instalación funcional -- ✅ Detección automática de instalabilidad -- ✅ Tracking de dismissal -- ✅ Re-mostrar después de 7 días - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/RESUMEN_SPA_ROUTING.md b/docs/archivo/RESUMEN_SPA_ROUTING.md deleted file mode 100644 index 487a93f1..00000000 --- a/docs/archivo/RESUMEN_SPA_ROUTING.md +++ /dev/null @@ -1,109 +0,0 @@ -# ✅ Resumen: Configuración SPA Routing - -**Fecha:** 2025-12-23 - ---- - -## ✅ PROBLEMA RESUELTO - -**Problema:** Al acceder directamente a rutas o refrescar la página, el servidor devolvía 404 en lugar de servir `index.html`. - -**Solución:** Configurado fallback a `index.html` para todos los servidores comunes. - ---- - -## 📁 ARCHIVOS CREADOS/MODIFICADOS - -### Archivos Nuevos -- ✅ `public/_redirects` - Para Netlify -- ✅ `public/.htaccess` - Para Apache -- ✅ `SPA_ROUTING_CONFIG.md` - Documentación completa -- ✅ `RESUMEN_SPA_ROUTING.md` - Este resumen - -### Archivos Modificados -- ✅ `vite.config.ts` - Añadida configuración de preview -- ✅ `vercel.json` - Actualizado con rewrites y headers de cache -- ✅ `nginx.conf.example` - Ya tenía configuración correcta (comentarios añadidos) -- ✅ `package.json` - Añadido `--host` a preview - ---- - -## 🔧 CONFIGURACIONES POR SERVIDOR - -| Servidor | Archivo | Estado | -|----------|---------|--------| -| **Vite Dev** | `vite.config.ts` | ✅ Automático | -| **Vite Preview** | `vite.config.ts` | ✅ Configurado | -| **Nginx** | `nginx.conf.example` | ✅ `try_files $uri $uri/ /index.html;` | -| **Apache** | `public/.htaccess` | ✅ `mod_rewrite` configurado | -| **Netlify** | `public/_redirects` | ✅ `/* /index.html 200` | -| **Vercel** | `vercel.json` | ✅ Rewrites configurados | -| **GitHub Pages** | `vite.config.ts` | ✅ Base path configurado | - ---- - -## ✅ VERIFICACIONES - -### 1. React Router -- ✅ Usa `BrowserRouter` (no HashRouter) -- ✅ Rutas configuradas correctamente - -### 2. Build -- ✅ Build exitoso -- ✅ Archivos de configuración copiados a `dist/` -- ✅ `_redirects` y `.htaccess` presentes en `dist/` - -### 3. Archivos en dist/ -```bash -dist/ -├── _redirects # Para Netlify -├── .htaccess # Para Apache -├── index.html # Punto de entrada -└── ... -``` - ---- - -## 🧪 CÓMO PROBAR - -### Test Local (Preview) -```bash -npm run build -npm run preview -# Abrir http://localhost:4173/favoritos -# Debe cargar correctamente (no 404) -``` - -### Test en Producción -1. Desplegar en servidor (Nginx/Apache/Netlify/Vercel) -2. Acceder directamente a una ruta: `https://tu-app.com/favoritos` -3. Refrescar la página en esa ruta -4. Debe cargar correctamente (no 404) - ---- - -## 📝 NOTAS IMPORTANTES - -1. **Archivos Estáticos:** Las reglas excluyen archivos estáticos (JS, CSS, imágenes) para que se sirvan correctamente. - -2. **Cache:** - - `index.html` → NO cachear (permite actualizaciones) - - Assets estáticos → Cachear (mejor performance) - -3. **Base Path:** Si la app está en subdirectorio (GitHub Pages), el `base` en `vite.config.ts` debe coincidir. - ---- - -## ✅ ESTADO FINAL - -**Configuración:** ✅ **COMPLETA** - -Todas las rutas ahora funcionan correctamente: -- ✅ Acceso directo a rutas -- ✅ Refresh en cualquier ruta -- ✅ Enlaces compartidos funcionan -- ✅ Compatible con todos los servidores comunes - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/SOLUCION_BANNER_NO_VISIBLE.md b/docs/archivo/SOLUCION_BANNER_NO_VISIBLE.md deleted file mode 100644 index af2b66bf..00000000 --- a/docs/archivo/SOLUCION_BANNER_NO_VISIBLE.md +++ /dev/null @@ -1,147 +0,0 @@ -# 🔧 Solución: Banner de Instalación No Se Ve - -**Fecha:** 2025-12-23 - ---- - -## 🐛 PROBLEMA - -El banner de instalación PWA no aparece. - ---- - -## ✅ SOLUCIONES IMPLEMENTADAS - -### 1. Modo Desarrollo (Testing) - -**En desarrollo (`npm run dev`), el banner se mostrará automáticamente después de 5 segundos** incluso si el evento `beforeinstallprompt` no se dispara. - -**Esto permite:** -- Ver cómo se ve el banner -- Probar la UI -- Verificar que el componente funciona - -**Para probar:** -```bash -npm run dev -# Abrir http://localhost:8096 -# Esperar 5 segundos -# El banner debería aparecer -``` - -### 2. Logs de Debug - -Se añadieron logs en consola para debugging: - -``` -[PWA Install] Hook initialized -[PWA Install] Setting up install prompt listeners -[PWA Install] Development mode: Will show banner after 5 seconds for testing -[PWA Install] Development: Showing banner for testing -[InstallBanner] Render - State: { isInstallable: true, showBanner: true } -[InstallBanner] ✅ Rendering banner! -``` - -**Abre DevTools (F12) > Console para ver estos mensajes.** - ---- - -## 🔍 VERIFICACIONES - -### 1. Abrir Consola del Navegador - -Abre DevTools (F12) > Console y busca: - -``` -[PWA Install] Hook initialized -``` - -**Si NO ves este mensaje:** -- El hook no se está ejecutando -- Verificar que `InstallBanner` está en `App.tsx` - -### 2. Verificar Estado - -En la consola deberías ver: - -``` -[InstallBanner] Render - State: { isInstallable: false, showBanner: false } -``` - -**Después de 5 segundos en desarrollo:** -``` -[PWA Install] Development: Showing banner for testing -[InstallBanner] Render - State: { isInstallable: true, showBanner: true } -[InstallBanner] ✅ Rendering banner! -``` - -### 3. Verificar que el Componente se Renderiza - -Abre React DevTools: -1. Buscar componente `InstallBanner` -2. Verificar que existe en el árbol -3. Verificar props: `isInstallable`, `showBanner` - ---- - -## 🚨 SI SIGUE SIN APARECER - -### Solución Temporal: Forzar Mostrar - -Añade esto temporalmente en `InstallBanner.tsx`: - -```tsx -const InstallBanner = () => { - const { isInstallable, showBanner, install, dismissBanner } = usePWAInstall(); - - // TEMPORAL: Forzar mostrar para testing - if (import.meta.env.DEV) { - return ( -
-

BANNER DE PRUEBA - Debería verse

-

isInstallable: {String(isInstallable)}

-

showBanner: {String(showBanner)}

-
- ); - } - - // ... resto del código -}; -``` - -Si este banner de prueba SÍ se ve, entonces el problema es la lógica del hook. -Si NO se ve, entonces el problema es que el componente no se está renderizando. - ---- - -## 📋 CHECKLIST RÁPIDO - -- [ ] Abrir consola del navegador (F12) -- [ ] Ver mensajes `[PWA Install]` -- [ ] En desarrollo, esperar 5 segundos -- [ ] Ver mensaje `[InstallBanner] ✅ Rendering banner!` -- [ ] Verificar React DevTools que `InstallBanner` existe -- [ ] Verificar que no está en modo standalone (ya instalada) -- [ ] Verificar localStorage: `localStorage.getItem('pwa-install-dismissed')` - ---- - -## 🧪 TEST RÁPIDO - -```bash -# 1. Limpiar localStorage -# En consola del navegador: -localStorage.removeItem('pwa-install-dismissed') - -# 2. Recargar página -# F5 o Ctrl+R - -# 3. Esperar 5 segundos - -# 4. Verificar consola -# Deberías ver: [InstallBanner] ✅ Rendering banner! -``` - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/SUGERENCIAS_MEDIOS_VISUALES.md b/docs/archivo/SUGERENCIAS_MEDIOS_VISUALES.md deleted file mode 100644 index a6c0fde1..00000000 --- a/docs/archivo/SUGERENCIAS_MEDIOS_VISUALES.md +++ /dev/null @@ -1,396 +0,0 @@ -# 📸 Sugerencias de Medios Visuales por Tema - -**Fecha:** 2025-12-23 -**Objetivo:** Sugerir al menos 1 medio visual para cada tema crítico sin imágenes - ---- - -## 📊 RESUMEN - -| Prioridad | Temas | Medios Sugeridos | -|-----------|-------|-----------------| -| **🔴 ALTA** | 25 temas | 25-30 medios | -| **🟡 MEDIA** | 35 temas | 35-40 medios | -| **🟢 BAJA** | 38 temas | 38-45 medios | -| **TOTAL** | **98 temas** | **~100 medios** | - ---- - -## 🔴 PRIORIDAD ALTA (25 temas críticos) - -### BLOQUE 1: FUNDAMENTOS Y PROCEDIMIENTOS BÁSICOS - -#### 1.1 Constantes Vitales (`1.1_constantes_vitales.md`) -- ✅ **Tienes:** `interpretacion-constantes-semaforo.png` -- ❌ **Falta:** - - **Tabla visual de rangos normales** (adulto/pediátrico) - - **Diagrama de puntos de medición** (pulso, TA, etc.) - - **Guía visual de frecuencia de registro** según situación - -#### 1.2 ABCDE Operativo (`1.2_abcde_operativo.md`) -- ✅ **Tienes:** `ALGORITMO OPERATIVO DEL TES.svg` -- ❌ **Falta:** - - **Diagrama de flujo ABCDE** paso a paso - - **Infografía de signos de alarma** por letra (A, B, C, D, E) - - **Tabla visual de prioridades** (qué hacer primero) - -#### 1.3 Glasgow Operativo (`1.3_glasgow_operativo.md`) -- ❌ **Falta:** - - **Tabla visual de escala Glasgow** (ojo, verbal, motor) - - **Diagrama de interpretación** (leve, moderado, grave) - - **Guía visual de evaluación** paso a paso - -#### 1.4 Triage START (`1.4_triage_start.md`) -- ✅ **Tienes:** `RESUMEN VISUAL DEL ALGORITMO START.svg` -- ❌ **Falta:** - - **Diagrama de flujo START** completo - - **Infografía de categorías** (rojo, amarillo, verde, negro) - - **Guía visual de decisión rápida** - ---- - -### BLOQUE 2: SOPORTE VITAL BÁSICO - -#### 2.1 Reconocimiento PCR (`BLOQUE_04_0_RECONOCIMIENTO_PCR.md`) -- ❌ **Falta:** - - **Infografía de signos de PCR** (inconsciencia, ausencia respiración, etc.) - - **Diagrama de verificación** (mirar, escuchar, sentir) - - **Guía visual de decisión** (¿PCR? → RCP) - -#### 2.2 RCP Adultos (`BLOQUE_04_1_RCP_ADULTOS.md`) -- ✅ **Tienes:** `flujo-rcp-transtelefonica.png` (transtelefónica) -- ❌ **Falta:** - - **Diagrama de flujo RCP básica** (30:2, posición, etc.) - - **Infografía de técnica de compresión** (posición manos, profundidad, frecuencia) - - **Guía visual paso a paso** (verificar → comprimir → ventilar) - - **Diagrama de posicionamiento** (paciente, reanimador) - -#### 2.3 RCP Pediátrica (`BLOQUE_04_2_RCP_PEDIATRIA.md`) -- ❌ **Falta:** - - **Diagrama de flujo RCP pediátrica** (15:2, diferencias con adulto) - - **Infografía de técnica pediátrica** (una mano, dos dedos según edad) - - **Tabla visual de diferencias** (adulto vs pediátrico vs lactante) - - **Guía visual de profundidad** según edad - -#### 2.4 RCP Lactantes (`BLOQUE_04_3_RCP_LACTANTES.md`) -- ❌ **Falta:** - - **Diagrama de flujo RCP lactante** (15:2, técnica específica) - - **Infografía de técnica lactante** (dos dedos, posición) - - **Guía visual de diferencias** con pediátrico - -#### 2.5 Uso DESA (`BLOQUE_04_4_USO_DESA.md`) -- ✅ **Tienes:** `flujo-desa-telefono.png` (transtelefónica) -- ❌ **Falta:** - - **Diagrama de flujo DESA** (encender → colocar → analizar → descargar) - - **Infografía de colocación de electrodos** (posición correcta) - - **Guía visual paso a paso** DESA - - **Diagrama de zonas de seguridad** (no tocar durante análisis) - -#### 2.6 Ventilación BVM (`BLOQUE_04_5_VENTILACION_BVM.md`) -- ✅ **Tienes:** `uso-correcto-ambu.png`, `configuracion-maxima-fio2-bolsa-mascarilla.png` -- ❌ **Falta:** - - **Diagrama de técnica de sellado** (posición manos, sellado correcto) - - **Infografía de frecuencia ventilatoria** (adulto vs pediátrico) - - **Guía visual de problemas comunes** (fugas, resistencia, etc.) - -#### 2.7 Canulas OPA/NPA (`BLOQUE_04_6_USO_CANULAS_OPA_NPA.md`) -- ✅ **Tienes:** `canulas-guedel-nasofaringea.png` -- ❌ **Falta:** - - **Diagrama de selección de talla** (medición, tabla) - - **Infografía de colocación OPA** paso a paso - - **Infografía de colocación NPA** paso a paso - - **Guía visual de contraindicaciones** (OPA vs NPA) - -#### 2.8 Aspiración Secreciones (`BLOQUE_04_7_ASPIRACION_SECRECIONES.md`) -- ❌ **Falta:** - - **Diagrama de técnica de aspiración** (posición, profundidad) - - **Infografía de material necesario** (sonda, aspirador, etc.) - - **Guía visual de precauciones** (tiempo, presión, etc.) - -#### 2.9 Posiciones Seguridad (`BLOQUE_04_8_POSICIONES_SEGURIDAD_MOVILIZACION.md`) -- ❌ **Falta:** - - **Infografía de posición lateral de seguridad** (PLS) - - **Diagrama de posicionamiento** según situación - - **Guía visual de movilización segura** - ---- - -### BLOQUE 3: MATERIAL E INMOVILIZACIÓN - -#### 3.1 Anatomía Operativa (`BLOQUE_02_0_ANATOMIA_OPERATIVA.md`) -- ✅ **Tienes:** `situaciones-que-requieren-inmovilizacion.png` -- ❌ **Falta:** - - **Diagrama anatómico básico** (columna cervical, puntos clave) - - **Infografía de mecanismos lesionales** (hiperextensión, flexión, etc.) - - **Guía visual de indicaciones** de inmovilización - -#### 3.2 Inmovilización Manual (`BLOQUE_02_2_INMOVILIZACION_MANUAL.md`) -- ✅ **Tienes:** `posicion-tes-inmovilizacion-manual.png`, `tecnica-sujecion-manual-cervical.png` -- ❌ **Falta:** - - **Diagrama de transición** manual → dispositivo (ya existe parcialmente) - - **Infografía de coordinación equipo** (ya existe) - -#### 3.3 Collarín Cervical (`BLOQUE_02_3_COLLARIN_CERVICAL.md`) -- ✅ **Tienes:** 12 imágenes (pasos, selección, errores, verificaciones) -- ❌ **Falta:** Nada crítico (muy completo) - -#### 3.4 Tablero Espinal (`BLOQUE_02_5_TABLERO_ESPINAL.md`) -- ✅ **Tienes:** `componentes-tablero-espinal.png` -- ❌ **Falta:** - - **Infografía de colocación paso a paso** (serie de imágenes) - - **Diagrama de posicionamiento correas** (mínimo 4, zonas) - - **Guía visual de acolchado** (espacios vacíos) - -#### 3.5 Colchón Vacío (`BLOQUE_02_6_COLCHON_VACIO.md`) -- ✅ **Tienes:** `componentes-colchon-vacio.png`, `colocacion-colchon-vacio-paso-a-paso.png` -- ❌ **Falta:** Nada crítico - -#### 3.6 Férulas (`BLOQUE_02_10_FERULAS.md`) -- ❌ **Falta:** - - **Infografía de tipos de férulas** (neumática, rígida, etc.) - - **Diagrama de selección** según lesión - - **Guía visual de colocación** paso a paso - - **Tabla visual de indicaciones** por tipo - -#### 3.7 Extricación (`BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md`) -- ✅ **Tienes:** `coordinacion-equipo-inmovilizacion.png` -- ❌ **Falta:** - - **Diagrama de técnicas de extricación** (rápida, lenta) - - **Infografía de movimientos bloque** (log roll, etc.) - - **Guía visual de coordinación** equipo - ---- - -### BLOQUE 4: OXIGENOTERAPIA Y MATERIAL SANITARIO - -#### 4.1 Oxigenoterapia Fundamentos (`BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md`) -- ✅ **Tienes:** `tabla-rangos-fio2-oxigenoterapia.png` -- ❌ **Falta:** - - **Diagrama de selección de dispositivo** (flujograma de decisión) - - **Infografía de indicaciones** de oxigenoterapia - - **Tabla visual de contraindicaciones** relativas - -#### 4.2 Dispositivos Oxigenoterapia (`BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md`) -- ✅ **Tienes:** `guia-colocacion-dispositivos-oxigenoterapia.png`, `diagrama-seleccion-dispositivo-oxigenoterapia.png` -- ❌ **Falta:** - - **Infografía comparativa** de dispositivos (cánula, mascarilla, etc.) - - **Tabla visual de FiO2** por dispositivo (ya existe parcialmente) - -#### 4.3 Control Hemorragias (`BLOQUE_03_6_CONTROL_HEMORRAGIAS.md`) -- ❌ **Falta:** - - **Diagrama de técnicas de control** (compresión directa, elevación, etc.) - - **Infografía de puntos de presión** anatómicos - - **Guía visual paso a paso** control hemorragia - - **Tabla visual de tipos** de hemorragia - -#### 4.4 Quemaduras (`BLOQUE_03_7_QUEMADURAS.md`) -- ❌ **Falta:** - - **Diagrama de regla de los 9** (superficie corporal) - - **Infografía de profundidad** (1º, 2º, 3º grado) - - **Tabla visual de clasificación** (superficial, profunda, etc.) - - **Guía visual de primeros auxilios** - -#### 4.5 Heridas y Vendajes (`BLOQUE_03_8_HERIDAS_VENDAJES.md`) -- ❌ **Falta:** - - **Infografía de tipos de vendajes** (circular, espiral, etc.) - - **Diagrama de técnicas de vendaje** paso a paso - - **Guía visual de limpieza** de heridas - -#### 4.6 Dispositivos Supraglóticos (`BLOQUE_03_22_DISPOSITIVOS_SUPRAGLOTICOS.md`) -- ✅ **Tienes:** `dispositivos-supragloticos-guia.png` -- ❌ **Falta:** - - **Diagrama de tipos** (LMA, i-gel, etc.) - - **Infografía de indicaciones** y contraindicaciones - - **Guía visual de colocación** paso a paso - -#### 4.7 Ventilación Medios Fortuna (`BLOQUE_03_25_VENTILACION_MEDIOS_FORTUNA.md`) -- ✅ **Tienes:** `ventilacion-medios-fortuna.png` -- ❌ **Falta:** Nada crítico - ---- - -### BLOQUE 5: PROTOCOLOS TRANSTELEFÓNICOS - -#### 5.1 RCP Transtelefónica (`BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md`) -- ✅ **Tienes:** `flujo-rcp-transtelefonica.png` -- ❌ **Falta:** - - **Diagrama de flujo completo** (incluyendo pediátrico/lactante) - - **Infografía de guía telefónica** paso a paso - -#### 5.2 DESA Transtelefónico (`BLOQUE_05_4_DESA_GUIADO_TELEFONO.md`) -- ✅ **Tienes:** `flujo-desa-telefono.png` -- ❌ **Falta:** Nada crítico - -#### 5.3 ICTUS Transtelefónico (`BLOQUE_05_7_ICTUS_TRANSTELEFONICO.md`) -- ✅ **Tienes:** `fast-transtelefonico.png` -- ❌ **Falta:** - - **Infografía de escala FAST** (Face, Arm, Speech, Time) - - **Diagrama de decisión** (¿ictus? → activar código) - ---- - -### BLOQUE 6: FARMACOLOGÍA - -#### 6.1 Principios Administración (`BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md`) -- ❌ **Falta:** - - **Infografía de 5 correctos** (paciente, fármaco, dosis, vía, tiempo) - - **Diagrama de verificación** antes de administrar - - **Guía visual de seguridad** farmacológica - -#### 6.2 Del Vial a la Vena (`BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md`) -- ❌ **Falta:** - - **Infografía de preparación** paso a paso (vial → jeringa → vena) - - **Diagrama de técnicas de extracción** (vial, ampolla) - - **Guía visual de eliminación de aire** (burbujas) - - **Infografía de verificación** (nombre, fecha, dosis) - -#### 6.3 Vías de Administración (`BLOQUE_06_X_VIAS_ADMINISTRACION.md` - si existe) -- ❌ **Falta:** - - **Diagrama de vías** (IV, IO, IM, sublingual, etc.) - - **Infografía de selección** según situación - - **Tabla visual de ventajas/desventajas** por vía - -#### 6.4 Fármacos Cardiológicos (`BLOQUE_06_5_FARMACOS_CARDIOLOGICOS.md`) -- ❌ **Falta:** - - **Tabla visual de fármacos** (adrenalina, atropina, etc.) - - **Infografía de indicaciones** por fármaco - - **Diagrama de dosis** (adulto vs pediátrico) - -#### 6.5 Fármacos Respiratorios (`BLOQUE_06_6_FARMACOS_RESPIRATORIOS.md`) -- ❌ **Falta:** - - **Tabla visual de fármacos** (salbutamol, etc.) - - **Infografía de administración** (nebulización, etc.) - ---- - -### BLOQUE 7: TRANSFERENCIA Y TRASLADO - -#### 7.1 Preparación Traslado (`BLOQUE_08_1_PREPARACION_TRASLADO.md`) -- ✅ **Tienes:** `configuracion-gps-antes-de-salir.png` -- ❌ **Falta:** - - **Checklist visual** pre-traslado - - **Infografía de verificación** material y paciente - -#### 7.2 Transferencia al Hospital (`BLOQUE_08_5_TRANSFERENCIA_AL_HOSPITAL.md`) -- ❌ **Falta:** - - **Diagrama de flujo de transferencia** (comunicación → entrega → documentación) - - **Infografía de información crítica** a transmitir - - **Guía visual de entrega** (SBAR, IMIST-AMBO) - ---- - -## 🟡 PRIORIDAD MEDIA (35 temas) - -### BLOQUE 8: TRIAGE Y MÚLTIPLES VÍCTIMAS - -#### 8.1 Fundamentos Triage (`BLOQUE_07_1_FUNDAMENTOS_TRIAGE.md`) -- ❌ **Falta:** - - **Infografía de principios** de triage - - **Diagrama de objetivos** (máximo beneficio, mínimo tiempo) - -#### 8.2 Método START (`BLOQUE_07_2_METODO_START.md`) -- ✅ **Tienes:** `RESUMEN VISUAL DEL ALGORITMO START.svg` -- ❌ **Falta:** - - **Diagrama de flujo START** detallado - - **Infografía de categorías** con ejemplos - -#### 8.3 Etiquetado y Zonificación (`BLOQUE_07_3_ETIQUETADO_ZONIFICACION.md`) -- ❌ **Falta:** - - **Infografía de colores** (rojo, amarillo, verde, negro) - - **Diagrama de zonas** (triage, tratamiento, evacuación) - - **Guía visual de etiquetas** (qué información incluir) - -#### 8.4 Roles y Funciones (`BLOQUE_07_4_ROLES_FUNCIONES_TES_TMV.md`) -- ❌ **Falta:** - - **Diagrama de organización** del equipo - - **Infografía de roles** (triage, tratamiento, evacuación) - ---- - -### BLOQUE 9: SITUACIONES ESPECIALES - -#### 9.1 Patologías por Sistemas (varios capítulos) -- ❌ **Falta:** - - **Infografías de patologías** (IAM, ictus, shock, etc.) - - **Diagramas de signos y síntomas** por patología - - **Tablas visuales de actuación** rápida - -#### 9.2 Poblaciones Especiales -- ❌ **Falta:** - - **Infografías pediátricas** (diferencias con adulto) - - **Infografías geriátricas** (consideraciones especiales) - - **Infografías embarazadas** (modificaciones técnicas) - ---- - -## 🟢 PRIORIDAD BAJA (38 temas) - -### BLOQUE 10: COMUNICACIÓN Y DOCUMENTACIÓN - -#### 10.1 Comunicación Operativa -- ❌ **Falta:** - - **Infografía de técnicas** de comunicación - - **Diagrama de SBAR/IMIST-AMBO** (estructura) - -#### 10.2 Documentación -- ❌ **Falta:** - - **Infografía de información esencial** a documentar - - **Guía visual de formato** de informe - ---- - -## 📋 RESUMEN POR TIPO DE MEDIO - -### Diagramas de Flujo (30-35 medios) -- RCP (adulto, pediátrico, lactante) -- ABCDE completo -- START detallado -- Protocolos transtelefónicos -- Transferencia hospitalaria -- Triage - -### Infografías Paso a Paso (25-30 medios) -- Colocación de dispositivos -- Técnicas de procedimientos -- Preparación de fármacos -- Técnicas de inmovilización - -### Tablas Visuales (20-25 medios) -- Rangos de constantes vitales -- Dosis de fármacos -- FiO2 por dispositivo -- Clasificaciones (quemaduras, Glasgow, etc.) - -### Diagramas Anatómicos/Técnicos (15-20 medios) -- Anatomía básica -- Posicionamiento -- Técnicas manuales -- Puntos de presión - ---- - -## 🎯 RECOMENDACIÓN FINAL - -### Fase 1: Integrar 48 imágenes existentes (INMEDIATO) -- **Esfuerzo:** Bajo -- **Impacto:** Alto (30-35 capítulos con imágenes) - -### Fase 2: Crear 25 medios críticos (MEDIO PLAZO) -- **Prioridad ALTA:** 25 medios -- **Esfuerzo:** Medio-Alto -- **Impacto:** Muy Alto (cobertura de procedimientos críticos) - -### Fase 3: Crear 35 medios operativos (LARGO PLAZO) -- **Prioridad MEDIA:** 35 medios -- **Esfuerzo:** Alto -- **Impacto:** Alto (cobertura completa de temas operativos) - -### Fase 4: Crear 38 medios complementarios (MUY LARGO PLAZO) -- **Prioridad BAJA:** 38 medios -- **Esfuerzo:** Muy Alto -- **Impacto:** Medio (mejora formativa) - ---- - -**Total sugerido:** ~100 medios visuales -**Prioridad inmediata:** 25 medios críticos + integrar 48 existentes diff --git a/docs/archivo/TEST_BANNER_INSTALACION.md b/docs/archivo/TEST_BANNER_INSTALACION.md deleted file mode 100644 index a6382093..00000000 --- a/docs/archivo/TEST_BANNER_INSTALACION.md +++ /dev/null @@ -1,191 +0,0 @@ -# 🧪 Test: Banner de Instalación PWA - -**Fecha:** 2025-12-23 - ---- - -## 🔍 DEBUGGING: Banner No Se Ve - -Si el banner no aparece, sigue estos pasos: - ---- - -## ✅ PASO 1: Verificar Consola - -Abre DevTools (F12) > Console y busca estos mensajes: - -``` -[PWA Install] Hook initialized -[PWA Install] Setting up install prompt listeners -[InstallBanner] Render - State: { isInstallable: false, showBanner: false } -``` - -**Si ves estos mensajes pero el banner no aparece:** -- El evento `beforeinstallprompt` no se está disparando -- Verifica los requisitos (ver abajo) - ---- - -## ✅ PASO 2: Modo Desarrollo (Testing) - -En **modo desarrollo**, el banner se mostrará automáticamente después de 5 segundos **incluso si no hay prompt real**, para que puedas ver cómo se ve. - -**Para probar:** -```bash -npm run dev -# Abrir http://localhost:8096 -# Esperar 5 segundos -# El banner debería aparecer -``` - ---- - -## ✅ PASO 3: Verificar Requisitos PWA - -El banner solo aparece si se cumplen TODOS estos requisitos: - -### 1. Manifest.json ✅ -```bash -# Verificar que existe -ls -la public/manifest.json -ls -la dist/manifest.json -``` - -### 2. Service Worker ✅ -```bash -# Verificar que existe -ls -la public/sw.js -ls -la dist/sw.js - -# En DevTools > Application > Service Workers -# Debe estar "activated and is running" -``` - -### 3. HTTPS o Localhost ✅ -- **Desarrollo:** `localhost` funciona -- **Preview:** `npm run preview` usa localhost -- **Producción:** Debe estar en HTTPS - -### 4. Navegador Compatible ✅ -- ✅ Chrome (Desktop y Android) -- ✅ Edge (Desktop y Android) -- ✅ Opera -- ❌ Safari - NO soporta `beforeinstallprompt` -- ❌ Firefox - NO soporta `beforeinstallprompt` - -### 5. No Estar Ya Instalada ✅ -Si la app ya está instalada, el banner NO aparece. - -**Verificar:** -```javascript -// En consola del navegador -window.matchMedia('(display-mode: standalone)').matches -// Si es true, la app ya está instalada -``` - ---- - -## 🧪 TEST MANUAL - -### Test 1: Verificar Evento en Consola - -Abre la consola del navegador y ejecuta: - -```javascript -// Escuchar el evento -window.addEventListener('beforeinstallprompt', (e) => { - console.log('✅ beforeinstallprompt detected!', e); - e.preventDefault(); -}); - -// Recargar la página -// Si ves el mensaje, el evento se está disparando -``` - -### Test 2: Forzar Mostrar Banner (Desarrollo) - -El código ya tiene un fallback en desarrollo que muestra el banner después de 5 segundos incluso sin prompt real. - -**Para verificar:** -1. Abrir `http://localhost:8096` -2. Esperar 5 segundos -3. El banner debería aparecer -4. Verificar consola para mensajes `[PWA Install]` - -### Test 3: Verificar Estado del Hook - -Abre React DevTools y busca el componente `InstallBanner`: -- Verifica las props: `isInstallable`, `showBanner` -- Si ambos son `true`, el banner debería mostrarse - ---- - -## 🔧 SOLUCIONES RÁPIDAS - -### Solución 1: Resetear localStorage - -Si cerraste el banner antes, puede estar guardado: - -```javascript -// En consola del navegador -localStorage.removeItem('pwa-install-dismissed') -// Recargar página -``` - -### Solución 2: Usar Preview en lugar de Dev - -El evento `beforeinstallprompt` puede no dispararse en `npm run dev`: - -```bash -npm run build -npm run preview -# Abrir http://localhost:4173 -``` - -### Solución 3: Verificar Build - -Asegúrate de que el build incluye los archivos necesarios: - -```bash -npm run build -ls -la dist/sw.js dist/manifest.json -# Ambos deben existir -``` - ---- - -## 📋 CHECKLIST RÁPIDO - -- [ ] Consola muestra `[PWA Install] Hook initialized` -- [ ] Consola muestra `[InstallBanner] Render` -- [ ] Navegador es Chrome/Edge (no Safari/Firefox) -- [ ] Service Worker está registrado (DevTools > Application) -- [ ] Manifest es válido (DevTools > Application > Manifest) -- [ ] No está en modo standalone (ya instalada) -- [ ] localStorage no tiene `pwa-install-dismissed` reciente -- [ ] En desarrollo, esperar 5 segundos para fallback - ---- - -## 🚨 SI SIGUE SIN APARECER - -1. **Verificar que el componente se renderiza:** - - Abrir React DevTools - - Buscar `InstallBanner` - - Verificar que existe en el árbol de componentes - -2. **Añadir banner de prueba siempre visible:** - - Temporalmente, cambiar la condición en `InstallBanner.tsx`: - ```tsx - if (true) { // Cambiar esto temporalmente - return
BANNER DE PRUEBA
; - } - ``` - -3. **Verificar z-index:** - - El banner tiene `z-40` - - Verificar que no hay otros elementos con z-index mayor - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/archivo/TEST_CHECKLIST.md b/docs/archivo/TEST_CHECKLIST.md deleted file mode 100644 index f8b540f4..00000000 --- a/docs/archivo/TEST_CHECKLIST.md +++ /dev/null @@ -1,115 +0,0 @@ -# ✅ Checklist Pre-Deploy - -Usa este checklist antes de cada deploy para asegurar que todo funciona correctamente. - -## 🔨 Build - -- [ ] `npm ci` ejecutado sin errores -- [ ] `npm run build` completado exitosamente -- [ ] Directorio `dist/` creado y contiene archivos -- [ ] No hay errores en consola durante build -- [ ] Tamaño de `dist/` es razonable (<50MB típicamente) - -## 📁 Archivos Críticos - -- [ ] `dist/index.html` existe -- [ ] `dist/manifest.json` existe -- [ ] `dist/sw.js` existe (si usas service worker) -- [ ] Assets (JS, CSS) están en `dist/assets/` -- [ ] Archivos `.md` del manual están en `dist/manual/` (si aplica) - -## 🌐 Nginx - -- [ ] Configuración creada en `/etc/nginx/sites-available/` -- [ ] Symlink creado en `/etc/nginx/sites-enabled/` -- [ ] `sudo nginx -t` pasa sin errores -- [ ] Permisos correctos en directorio `dist/` -- [ ] Nginx reiniciado: `sudo systemctl reload nginx` - -## 🔒 SSL (si aplica) - -- [ ] Certificado SSL válido -- [ ] Redirección HTTP → HTTPS configurada -- [ ] Certbot renovación automática configurada - -## 🧪 Pruebas Funcionales - -### Desktop -- [ ] Página principal carga correctamente -- [ ] Navegación entre páginas funciona -- [ ] Calculadoras funcionan -- [ ] Búsqueda funciona -- [ ] Footer visible (desktop) -- [ ] Enlace de donaciones funciona - -### Móvil -- [ ] Responsive funciona -- [ ] BottomNav visible y funcional -- [ ] Touch funciona correctamente -- [ ] PWA instalable -- [ ] Offline funciona (service worker) - -### Rutas SPA -- [ ] `/herramientas` carga -- [ ] `/farmacos` carga -- [ ] `/manual` carga -- [ ] Rutas anidadas funcionan (ej: `/manual/parte/bloque/capitulo`) -- [ ] 404 redirige a página principal - -## 🔍 Verificación Técnica - -- [ ] Service Worker registrado (DevTools > Application) -- [ ] Cache funciona (offline mode) -- [ ] Console sin errores críticos -- [ ] Network tab: recursos cargan correctamente -- [ ] Lighthouse score >90 (Performance, PWA) - -## 📊 Performance - -- [ ] First Contentful Paint < 2s -- [ ] Time to Interactive < 3s -- [ ] Assets comprimidos (gzip) -- [ ] Imágenes optimizadas - -## 🔐 Seguridad - -- [ ] Headers de seguridad configurados (si aplica) -- [ ] HTTPS funcionando (si aplica) -- [ ] No hay información sensible en código cliente -- [ ] Service Worker no cachea datos sensibles - -## 📱 PWA - -- [ ] Manifest válido -- [ ] Iconos presentes y correctos -- [ ] Instalable en Android -- [ ] Instalable en iOS -- [ ] Splash screen funciona - -## 🎯 Funcionalidad Específica - -- [ ] Calculadoras: Glasgow, Parkland, Pediátricas, etc. -- [ ] Protocolos: RCP, Ictus, Shock -- [ ] Fármacos: búsqueda y visualización -- [ ] Manual: navegación y visualización - -## 📝 Post-Deploy - -- [ ] Monitorear logs: `sudo tail -f /var/log/nginx/error.log` -- [ ] Verificar métricas (si tienes analytics) -- [ ] Probar en diferentes dispositivos -- [ ] Documentar cualquier problema encontrado - -## 🚨 Rollback Plan - -Si algo falla: -1. Restaurar `dist/` desde backup -2. O hacer `git checkout ` + rebuild -3. Verificar logs de Nginx -4. Revisar cambios recientes - ---- - -**Fecha de verificación:** _______________ -**Verificado por:** _______________ -**Notas:** _______________ diff --git a/docs/archivo/TEST_PWA.md b/docs/archivo/TEST_PWA.md deleted file mode 100644 index 3c393aef..00000000 --- a/docs/archivo/TEST_PWA.md +++ /dev/null @@ -1,178 +0,0 @@ -# 🧪 Test de PWA y Actualizaciones - -**Fecha:** 2025-12-23 - ---- - -## ✅ VERIFICACIONES REALIZADAS - -### 1. Service Worker -- ✅ **Registrado** correctamente en `src/main.tsx` -- ✅ **Ruta correcta:** `${base}sw.js` -- ✅ **Configuración:** `updateViaCache: 'none'` (siempre verifica actualizaciones) -- ✅ **Verificación periódica:** Cada hora + al recuperar foco - -### 2. Cache Strategy -- ✅ **Cache First** para assets estáticos (offline-first) -- ✅ **Network First** para HTML (permite actualizaciones) -- ✅ **Cache de imágenes** automático -- ✅ **Versión de cache:** `v1.0.1` (incrementar para forzar actualización) - -### 3. Sistema de Actualizaciones -- ✅ **Hook `useServiceWorker`** creado -- ✅ **Componente `UpdateNotification`** creado -- ✅ **Detección automática** de nuevas versiones -- ✅ **Notificación al usuario** cuando hay actualización - -### 4. Manifest -- ✅ **Configurado** correctamente -- ✅ **Iconos** definidos -- ✅ **Display:** standalone -- ✅ **Shortcuts** para acceso rápido - ---- - -## 🧪 CÓMO PROBAR - -### Test 1: Verificar Registro del SW - -```bash -# 1. Iniciar servidor de desarrollo -npm run dev - -# 2. Abrir en navegador: http://localhost:8096 - -# 3. Abrir DevTools > Application > Service Workers -# Verificar: -# - ✅ SW registrado y activo -# - ✅ Estado: "activated and is running" -# - ✅ Scope: "/" -``` - -### Test 2: Verificar Cache - -```bash -# 1. Cargar la app en navegador - -# 2. DevTools > Application > Cache Storage -# Verificar: -# - ✅ Cache `emerges-tes-v1.0.1` existe -# - ✅ Contiene index.html, manifest.json -# - ✅ Contiene assets (JS, CSS) -``` - -### Test 3: Test Offline - -```bash -# 1. Cargar la app (para cachear recursos) - -# 2. DevTools > Network > Throttling > "Offline" - -# 3. Recargar la página (F5) - -# Verificar: -# - ✅ La app carga correctamente -# - ✅ Las imágenes cargan desde cache -# - ✅ La navegación funciona -``` - -### Test 4: Test de Actualización - -```bash -# 1. Cambiar CACHE_VERSION en public/sw.js -# De: const CACHE_VERSION = 'v1.0.1'; -# A: const CACHE_VERSION = 'v1.0.2'; - -# 2. Hacer build -npm run build - -# 3. Servir (preview o servidor) -npm run preview -# O subir dist/ a servidor - -# 4. Abrir la app en navegador - -# 5. Verificar: -# - ✅ El SW detecta la nueva versión -# - ✅ Se muestra banner de actualización -# - ✅ Al hacer clic en "Actualizar", se recarga -# - ✅ El nuevo cache se crea -# - ✅ El cache antiguo se elimina -``` - ---- - -## 🔍 VERIFICACIÓN EN CONSOLA - -### Mensajes Esperados - -**Al cargar la app:** -``` -[SW] Registered: http://localhost:8096/ -``` - -**Cuando hay actualización:** -``` -[SW] New version available -``` - -**Al actualizar:** -``` -[SW] Installing service worker... -[SW] Caching static assets -[SW] Activating service worker... -[SW] Deleting old cache: emerges-tes-v1.0.1 -``` - ---- - -## 📋 CHECKLIST DE VERIFICACIÓN - -### Instalación PWA -- [ ] La app se puede instalar (Add to Home Screen) -- [ ] El icono aparece correctamente -- [ ] El nombre aparece correctamente -- [ ] Se abre en modo standalone - -### Funcionamiento Offline -- [ ] La app carga sin internet -- [ ] Las imágenes cargan desde cache -- [ ] Los archivos Markdown cargan desde cache -- [ ] La navegación funciona offline - -### Actualizaciones -- [ ] El SW detecta nuevas versiones -- [ ] Se muestra notificación de actualización -- [ ] La actualización funciona correctamente -- [ ] El cache se actualiza correctamente - ---- - -## 🚨 PROBLEMAS COMUNES - -### Problema: SW no se registra - -**Solución:** -1. Verificar que `sw.js` está en `public/` -2. Verificar que se copia a `dist/` en el build -3. Limpiar cache del navegador -4. Verificar consola para errores - -### Problema: Actualizaciones no se detectan - -**Solución:** -1. Incrementar `CACHE_VERSION` en `sw.js` -2. Hacer nuevo build -3. Verificar que el nuevo `sw.js` está en el servidor -4. Forzar actualización: DevTools > Application > Service Workers > "Update" - -### Problema: Cache no se actualiza - -**Solución:** -1. Cambiar `CACHE_VERSION` en `sw.js` -2. Hacer build y desplegar -3. Limpiar cache manualmente si es necesario - ---- - -**Última actualización:** 2025-12-23 diff --git a/docs/consolidado/ANALISIS_TECNOLOGICO_PROYECTO.md b/docs/consolidado/ANALISIS_TECNOLOGICO_PROYECTO.md index a354ce34..d7095a39 100644 --- a/docs/consolidado/ANALISIS_TECNOLOGICO_PROYECTO.md +++ b/docs/consolidado/ANALISIS_TECNOLOGICO_PROYECTO.md @@ -2,7 +2,7 @@ **Proyecto:** EMERGES TES - Protocolo Rápido **Fecha de Análisis:** 2025-12-23 -**Ruta del Proyecto:** `/home/planetazuzu/protocolo-r-pido` +**Ruta del Proyecto:** `/home/planetazuzu/guia-tes` --- diff --git a/docs/consolidado/CHECKLIST_PWA_COMPLETA.md b/docs/consolidado/CHECKLIST_PWA_COMPLETA.md index 4b2dc9fc..cdbfe4b4 100644 --- a/docs/consolidado/CHECKLIST_PWA_COMPLETA.md +++ b/docs/consolidado/CHECKLIST_PWA_COMPLETA.md @@ -13,10 +13,11 @@ - [x] **display** - `standalone` configurado - [x] **theme_color** - `#1a1f2e` configurado - [x] **background_color** - `#1a1f2e` configurado -- [x] **icons** - Configurados (favicon.svg, favicon.ico) +- [x] **icons** - Configurados (favicon.svg, favicon.ico, icon-192.png, icon-512.png) - [x] **scope** - `/` configurado - [x] **shortcuts** - Configurado (Manual Completo) -- [ ] **Iconos 192x192 y 512x512** - ⚠️ Usando favicon.svg (funciona pero ideal tener PNGs específicos) +- [x] **Iconos 192x192 y 512x512** - ✅ PNGs específicos generados +- [x] **Iconos maskable** - ✅ Para Android generados ### 2. Service Worker ✅ - [x] **Archivo presente** - `public/sw.js` @@ -53,17 +54,25 @@ ## ⚠️ MEJORAS OPCIONALES -### Iconos Específicos -- [ ] Crear iconos PNG 192x192 y 512x512 específicos -- [ ] Añadir iconos maskable para Android -- [ ] Optimizar iconos para diferentes dispositivos +### Iconos Específicos ✅ +- [x] Crear iconos PNG 192x192 y 512x512 específicos +- [x] Añadir iconos maskable para Android +- [x] Optimizar iconos para diferentes dispositivos +- **Estado:** ✅ Completado - Iconos generados con `scripts/generar_iconos_pwa.py` +- **Archivos:** `public/icon-192.png`, `public/icon-512.png`, `public/icon-192-maskable.png`, `public/icon-512-maskable.png` -### Screenshots -- [ ] Añadir screenshots al manifest para mejor presentación en stores +### Screenshots ⏳ +- [x] Añadir screenshots al manifest para mejor presentación en stores +- [ ] Generar screenshots reales de la aplicación +- **Estado:** ⏳ Manifest actualizado, pendiente generar screenshots +- **Guía:** Ver `scripts/generar_screenshots.md` para instrucciones +- **Nota:** Los screenshots se pueden generar manualmente usando DevTools del navegador o herramientas automatizadas -### Notificaciones Push +### Notificaciones Push ⏸️ - [ ] Implementar notificaciones push (requiere backend) - [ ] Configurar permisos de notificaciones +- **Estado:** ⏸️ Pendiente - Requiere backend y servicio de notificaciones +- **Nota:** No es crítico para funcionalidad básica de PWA --- @@ -109,12 +118,15 @@ | Requisito | Estado | Notas | |-----------|--------|-------| -| **Manifest** | ✅ Completo | Falta iconos PNG específicos (opcional) | +| **Manifest** | ✅ Completo | Iconos PNG y maskable añadidos | | **Service Worker** | ✅ Completo | Funcionando correctamente | | **HTTPS** | ✅ Requerido | En producción | | **Meta Tags** | ✅ Completo | Todos configurados | | **Instalación** | ✅ Completo | Banner implementado | | **Offline** | ✅ Completo | Funciona correctamente | +| **Iconos PNG** | ✅ Completo | 192x192, 512x512 generados | +| **Iconos Maskable** | ✅ Completo | Para Android generados | +| **Screenshots** | ⏳ Pendiente | Manifest configurado, pendiente imágenes | --- @@ -130,9 +142,10 @@ La aplicación cumple con todos los requisitos esenciales para ser una PWA compl - ✅ Banner de instalación implementado **Mejoras opcionales:** -- Iconos PNG específicos (192x192, 512x512) -- Screenshots para manifest -- Notificaciones push (requiere backend) +- ✅ Iconos PNG específicos (192x192, 512x512) - **COMPLETADO** +- ✅ Iconos maskable para Android - **COMPLETADO** +- ⏳ Screenshots para manifest - **Manifest actualizado, pendiente generar imágenes** +- ⏸️ Notificaciones push (requiere backend) - **Pendiente** --- diff --git a/ecosystem.config.js b/ecosystem.config.cjs similarity index 100% rename from ecosystem.config.js rename to ecosystem.config.cjs diff --git a/generar_documento_word.py b/generar_documento_word.py deleted file mode 100755 index be303f03..00000000 --- a/generar_documento_word.py +++ /dev/null @@ -1,464 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Script para generar documento Word del Manual TES Digital -FASE 3: Generación de documento Word con hipervínculos internos -""" - -import os -import re -from pathlib import Path -from docx import Document -from docx.shared import Pt, Inches, RGBColor -from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING -from docx.oxml.ns import qn -from docx.oxml import OxmlElement -from docx.shared import Length - -# Configuración -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido/manual-tes/TES_Manual_Digital") -OUTPUT_FILE = Path("/home/planetazuzu/protocolo-r-pido/MANUAL_TES_DIGITAL_COMPLETO.docx") - -# Mapeo de archivos según estructura jerárquica (rutas relativas desde BASE_DIR) -ESTRUCTURA_ARCHIVOS = { - "PARTE I: FUNDAMENTOS Y EVALUACIÓN INICIAL": { - "BLOQUE 0 - Fundamentos de Emergencias Prehospitalarias": [ - "./BLOQUE_0_FUNDAMENTOS/BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md" - ], - "BLOQUE 1 - Procedimientos Básicos": [ - "./BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_1_CONSTANTES_VITALES.md", - "./BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_2_ABCDE_OPERATIVO.md", - "./BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_3_GLASGOW_OPERATIVO.md", - "./BLOQUE_1_PROCEDIMIENTOS_BASICOS/BLOQUE_01_4_TRIAGE_START.md" - ] - }, - "PARTE II: SOPORTE VITAL Y PROCEDIMIENTOS CRÍTICOS": { - "BLOQUE 4 - Soporte Vital Básico y RCP": [ - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_0B_RECONOCIMIENTO_PCR.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_1_RCP_ADULTOS.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_2_RCP_PEDIATRIA.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_3_RCP_LACTANTES.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_4_USO_DESA.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_6_OVACE_ADULTOS.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_7_OVACE_PEDIATRIA.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_8_OVACE_LACTANTES.md", - "./BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP/BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md" - ], - "BLOQUE 9 - Medicina de Emergencias Aplicada": [ - "./BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA/BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md" - ] - }, - "PARTE III: MATERIAL Y EQUIPAMIENTO": { - "BLOQUE 2 - Material e Inmovilización": [ - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_0_ANATOMIA_OPERATIVA.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_2_INMOVILIZACION_MANUAL.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_4_CAMILLA_CUCHARA.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_5_TABLERO_ESPINAL.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_6_COLCHON_VACIO.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_9_ERRORES_CRITICOS.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_10_FERULAS.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_11_CINTURON_PELVICO.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_12_FERULA_TRACCION.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md", - "./BLOQUE_2_MATERIAL_E_INMOVILIZACION/BLOQUE_02_X_INVENTARIO_MATERIAL.md" - ], - "BLOQUE 3 - Material Sanitario y Oxigenoterapia": [ - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_0_OXIGENOTERAPIA_BASICA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_1_VENTILACION_BOLSA_MASCARILLA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_2_ASPIRACION.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_2_CANULA_OROFARINGEA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_3_BVM.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_4_CANULAS.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_5_ORGANIZACION_MALETIN.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_6_CONTROL_HEMORRAGIAS.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_7_QUEMADURAS.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_8_HERIDAS_VENDAJES.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_10_MONITORIZACION_BASICA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_11_GLUCOMETRO.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_12_TERMOMETRIA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_13_CONFORT_DOLOR.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_16_COMUNICACION_OPERATIVA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_17_SENALIZACION_ILUMINACION.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_99_CIERRE_BLOQUE_3.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X2_MALETIN_CURAS.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X3_BOLSA_MONITORIZACION.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X4_INVENTARIO_GLOBAL.md", - "./BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA/BLOQUE_03_X5_CHECKLIST_MAESTRO.md" - ] - }, - "PARTE IV: FARMACOLOGÍA Y MEDICAMENTOS": { - "BLOQUE 6 - Farmacología y Vademécum Operativo": [ - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_1_VADEMECUM_OPERATIVO.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_4_ASPIRINA_USO_SCA.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md", - "./BLOQUE_6_FARMACOLOGIA/BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md" - ] - }, - "PARTE V: PROTOCOLOS Y GESTIÓN OPERATIVA": { - "BLOQUE 5 - Protocolos Transtelefónicos": [ - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_0_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_PCR_TRANSTELEFONICA.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_2_OVACE_TRANSTELEFONICA.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_3_SCA_TRANSTELEFONICO.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md", - "./BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_8_COMUNICACION_COORDINADOR.md" - ], - "BLOQUE 8 - Gestión Operativa y Documentación": [ - "./BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md", - "./BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md", - "./BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md", - "./BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md", - "./BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION/BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md" - ] - }, - "PARTE VI: CONDUCCIÓN Y SEGURIDAD VIAL": { - "BLOQUE 7 - Conducción y Seguridad Vial": [ - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md", - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_1_USO_LUCES_Y_SIRENA.md", - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md", - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md", - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md", - "./BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL/BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md" - ] - }, - "PARTE VII: SITUACIONES ESPECIALES Y TRAUMA": { - "BLOQUE 10 - Situaciones Especiales y Protocolos Avanzados": [ - "./BLOQUE_10_SITUACIONES_ESPECIALES/BLOQUE_10_0_SITUACIONES_ESPECIALES.md" - ], - "BLOQUE 11 - Protocolos de Trauma y Escenarios de Riesgo": [ - "./BLOQUE_11_PROTOCOLOS_TRAUMA/BLOQUE_11_0_PROTOCOLOS_TRAUMA.md" - ] - }, - "PARTE VIII: HABILIDADES PROFESIONALES": { - "BLOQUE 12 - Marco Legal, Ético y Profesional del TES": [ - "./BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL/BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md" - ], - "BLOQUE 13 - Comunicación y Relación con el Paciente": [ - "./BLOQUE_13_COMUNICACION_RELACION_PACIENTE/BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md" - ], - "BLOQUE 14 - Seguridad Personal y Salud del TES": [ - "./BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES/BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md" - ] - } -} - -def sanitize_bookmark(text): - """Sanitiza texto para usar como bookmark""" - # Elimina caracteres especiales y espacios - text = re.sub(r'[^\w\s-]', '', text) - text = re.sub(r'[-\s]+', '_', text) - return text[:50] # Limita longitud - -def process_markdown_content(doc, content, file_name): - """Procesa contenido Markdown y lo añade al documento Word con formato compacto""" - lines = content.split('\n') - in_code_block = False - last_was_empty = False - - for line in lines: - # Detectar bloques de código - if line.strip().startswith('```'): - in_code_block = not in_code_block - continue - - if in_code_block: - p = doc.add_paragraph(line, style='Normal') - p.style.font.name = 'Courier New' - p.style.font.size = Pt(10) - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(3) - p.paragraph_format.line_spacing = 1.15 - last_was_empty = False - continue - - # Saltos de página explícitos - eliminar completamente - if line.strip() == '---' and len(line.strip()) == 3: - continue - - # Títulos - if line.startswith('#'): - level = len(line) - len(line.lstrip('#')) - title_text = line.lstrip('#').strip() - - # Limpiar formato markdown del título - title_text = re.sub(r'\*\*(.+?)\*\*', r'\1', title_text) - title_text = re.sub(r'\*(.+?)\*', r'\1', title_text) - - if level == 1: - p = doc.add_heading(title_text, level=1) - p.paragraph_format.space_before = Pt(6) - p.paragraph_format.space_after = Pt(3) - elif level == 2: - p = doc.add_heading(title_text, level=2) - p.paragraph_format.space_before = Pt(6) - p.paragraph_format.space_after = Pt(3) - elif level == 3: - p = doc.add_heading(title_text, level=3) - p.paragraph_format.space_before = Pt(4) - p.paragraph_format.space_after = Pt(2) - elif level == 4: - p = doc.add_heading(title_text, level=4) - p.paragraph_format.space_before = Pt(3) - p.paragraph_format.space_after = Pt(2) - elif level == 5: - p = doc.add_heading(title_text, level=5) - p.paragraph_format.space_before = Pt(2) - p.paragraph_format.space_after = Pt(1) - else: - p = doc.add_heading(title_text, level=6) - p.paragraph_format.space_before = Pt(2) - p.paragraph_format.space_after = Pt(1) - - last_was_empty = False - continue - - # Listas con guiones - if line.strip().startswith('-') or line.strip().startswith('*'): - list_text = line.strip().lstrip('-*').strip() - - # Procesar formato dentro de la lista - p = doc.add_paragraph(style='List Bullet') - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(0) - p.paragraph_format.line_spacing = 1.15 - process_text_formatting(p, list_text) - last_was_empty = False - continue - - # Listas numeradas - match = re.match(r'^(\d+)\.\s*(.+)', line.strip()) - if match: - list_text = match.group(2) - p = doc.add_paragraph(style='List Number') - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(0) - p.paragraph_format.line_spacing = 1.15 - process_text_formatting(p, list_text) - last_was_empty = False - continue - - # Líneas vacías - máximo una seguida - if not line.strip(): - if not last_was_empty: - p = doc.add_paragraph() - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(0) - last_was_empty = True - continue - - # Texto normal - p = doc.add_paragraph() - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(3) - p.paragraph_format.line_spacing = 1.15 - process_text_formatting(p, line.strip()) - last_was_empty = False - -def process_text_formatting(paragraph, text): - """Procesa formato Markdown en texto (negritas, cursivas, etc.)""" - # Patrón para negritas **texto** - parts = re.split(r'(\*\*[^*]+\*\*)', text) - - for part in parts: - if part.startswith('**') and part.endswith('**'): - # Negrita - run = paragraph.add_run(part[2:-2]) - run.bold = True - elif part.startswith('*') and part.endswith('*') and len(part) > 2: - # Cursiva (solo si no es negrita) - run = paragraph.add_run(part[1:-1]) - run.italic = True - elif part.strip(): - # Texto normal - paragraph.add_run(part) - -def process_markdown_file(file_path): - """Lee un archivo Markdown""" - try: - with open(file_path, 'r', encoding='utf-8') as f: - return f.read() - except Exception as e: - print(f" ⚠️ Error leyendo {file_path}: {e}") - return None - -def main(): - """Función principal""" - print("=" * 70) - print("GENERACIÓN DE DOCUMENTO WORD - MANUAL TES DIGITAL") - print("FASE 3: Documento Word con hipervínculos internos") - print("=" * 70) - - # Crear documento - doc = Document() - - # Configurar estilos base - style = doc.styles['Normal'] - font = style.font - font.name = 'Calibri' - font.size = Pt(11) - style.paragraph_format.line_spacing = 1.15 - style.paragraph_format.space_before = Pt(0) - style.paragraph_format.space_after = Pt(3) - - # Configurar estilos de títulos - for i in range(1, 7): - heading_style = doc.styles[f'Heading {i}'] - heading_style.font.name = 'Calibri' - heading_style.font.size = Pt(max(16 - i, 12)) # Título 1: 16pt, Título 2: 15pt, etc. - heading_style.paragraph_format.line_spacing = 1.15 - if i == 1: - heading_style.paragraph_format.space_before = Pt(6) - heading_style.paragraph_format.space_after = Pt(3) - elif i == 2: - heading_style.paragraph_format.space_before = Pt(6) - heading_style.paragraph_format.space_after = Pt(3) - else: - heading_style.paragraph_format.space_before = Pt(4) - heading_style.paragraph_format.space_after = Pt(2) - - # Configurar estilo de listas - for list_style_name in ['List Bullet', 'List Number']: - if list_style_name in doc.styles: - list_style = doc.styles[list_style_name] - list_style.font.size = Pt(11) - list_style.paragraph_format.line_spacing = 1.15 - list_style.paragraph_format.space_before = Pt(0) - list_style.paragraph_format.space_after = Pt(0) - - # Configurar márgenes (compactos: 2cm = ~0.79 pulgadas) - sections = doc.sections - for section in sections: - section.top_margin = Inches(0.79) - section.bottom_margin = Inches(0.79) - section.left_margin = Inches(0.79) - section.right_margin = Inches(0.79) - - # PORTADA (compacta) - print("\n📄 Creando portada...") - title = doc.add_heading('MANUAL TES DIGITAL', level=1) - title.alignment = WD_ALIGN_PARAGRAPH.CENTER - title.paragraph_format.space_after = Pt(6) - - p = doc.add_paragraph('Versión 1.0') - p.alignment = WD_ALIGN_PARAGRAPH.CENTER - p.paragraph_format.space_after = Pt(3) - - p = doc.add_paragraph('Fecha: 2024-12-15') - p.alignment = WD_ALIGN_PARAGRAPH.CENTER - p.paragraph_format.space_after = Pt(3) - - p = doc.add_paragraph('Tipo: Manual Operativo Completo') - p.alignment = WD_ALIGN_PARAGRAPH.CENTER - p.paragraph_format.space_after = Pt(6) - - doc.add_page_break() - - # ÍNDICE GENERAL (compacto) - print("📑 Creando índice general...") - doc.add_heading('ÍNDICE GENERAL', level=1) - - for parte, bloques in ESTRUCTURA_ARCHIVOS.items(): - p = doc.add_paragraph(parte, style='Normal') - p.style.font.bold = True - p.style.font.size = Pt(12) - p.paragraph_format.space_before = Pt(3) - p.paragraph_format.space_after = Pt(1) - - for bloque, archivos in bloques.items(): - p = doc.add_paragraph(f" {bloque}", style='Normal') - p.style.font.size = Pt(11) - p.style.font.italic = True - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(1) - - doc.add_page_break() - - # PROCESAR CADA PARTE - total_archivos = sum(len(archivos) for bloques in ESTRUCTURA_ARCHIVOS.values() for archivos in bloques.values()) - archivo_actual = 0 - - partes_list = list(ESTRUCTURA_ARCHIVOS.items()) - for idx, (parte, bloques) in enumerate(partes_list): - print(f"\n📚 Procesando {parte}...") - - # Título de parte - parte_heading = doc.add_heading(parte, level=1) - parte_heading.paragraph_format.space_before = Pt(6) - parte_heading.paragraph_format.space_after = Pt(3) - - for bloque, archivos in bloques.items(): - print(f" 📖 Procesando {bloque}...") - - # Título de bloque - bloque_heading = doc.add_heading(bloque, level=2) - bloque_heading.paragraph_format.space_before = Pt(6) - bloque_heading.paragraph_format.space_after = Pt(3) - - # Procesar cada archivo del bloque - for archivo_relativo in archivos: - archivo_actual += 1 - archivo_path = BASE_DIR / archivo_relativo.lstrip('./') - - if not archivo_path.exists(): - print(f" ⚠️ Archivo no encontrado: {archivo_relativo}") - p = doc.add_paragraph(f"[ARCHIVO NO ENCONTRADO: {archivo_relativo}]") - p.style.font.color.rgb = RGBColor(255, 0, 0) - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(3) - continue - - print(f" 📄 [{archivo_actual}/{total_archivos}] {archivo_path.name}") - - # Título del capítulo (nombre del archivo sin extensión y formato) - chapter_title = archivo_path.stem.replace('BLOQUE_', '').replace('_', ' ') - heading = doc.add_heading(chapter_title, level=3) - heading.paragraph_format.space_before = Pt(4) - heading.paragraph_format.space_after = Pt(2) - - # Procesar contenido - content = process_markdown_file(archivo_path) - if content: - process_markdown_content(doc, content, archivo_path.name) - else: - p = doc.add_paragraph("[Error al leer el contenido del archivo]") - p.style.font.color.rgb = RGBColor(255, 0, 0) - p.paragraph_format.space_before = Pt(0) - p.paragraph_format.space_after = Pt(3) - - # Salto de página solo entre partes principales (no después de la última) - if idx < len(partes_list) - 1: - doc.add_page_break() - - # Guardar documento - print(f"\n💾 Guardando documento en {OUTPUT_FILE}...") - doc.save(str(OUTPUT_FILE)) - - file_size_mb = OUTPUT_FILE.stat().st_size / 1024 / 1024 - print(f"\n✅ Documento generado exitosamente!") - print(f" 📁 Archivo: {OUTPUT_FILE}") - print(f" 📊 Tamaño: {file_size_mb:.2f} MB") - print(f" 📄 Archivos procesados: {archivo_actual}/{total_archivos}") - print("\n" + "=" * 70) - -if __name__ == "__main__": - main() diff --git a/generar_indice_app.py b/generar_indice_app.py deleted file mode 100644 index 5865ffac..00000000 --- a/generar_indice_app.py +++ /dev/null @@ -1,544 +0,0 @@ -#!/usr/bin/env python3 -""" -Genera el archivo manual-index.ts desde la estructura real de archivos -""" - -import json -from pathlib import Path - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -# Mapeo del índice -INDICE_ESPERADO = { - "1.1.1": {"nombre": "Fundamentos de Emergencias", "bloque": 0, "parte": 1}, - "1.2.1": {"nombre": "Constantes Vitales", "bloque": 1, "parte": 1}, - "1.2.2": {"nombre": "ABCDE Operativo", "bloque": 1, "parte": 1}, - "1.2.3": {"nombre": "Glasgow Operativo", "bloque": 1, "parte": 1}, - "1.2.4": {"nombre": "Triage START", "bloque": 1, "parte": 1}, - "2.1.1": {"nombre": "Acceso Vascular Básico", "bloque": 4, "parte": 2}, - "2.1.2": {"nombre": "Reconocimiento PCR", "bloque": 4, "parte": 2}, - "2.1.3": {"nombre": "RCP Adultos", "bloque": 4, "parte": 2}, - "2.1.4": {"nombre": "RCP Pediatría", "bloque": 4, "parte": 2}, - "2.1.5": {"nombre": "RCP Lactantes", "bloque": 4, "parte": 2}, - "2.1.6": {"nombre": "Uso DESA", "bloque": 4, "parte": 2}, - "2.1.7": {"nombre": "RCP Dos Intervinientes", "bloque": 4, "parte": 2}, - "2.1.8": {"nombre": "OVACE Adultos", "bloque": 4, "parte": 2}, - "2.1.9": {"nombre": "OVACE Pediatría", "bloque": 4, "parte": 2}, - "2.1.10": {"nombre": "OVACE Lactantes", "bloque": 4, "parte": 2}, - "2.1.11": {"nombre": "Posición Lateral de Seguridad", "bloque": 4, "parte": 2}, - "2.2.1": {"nombre": "Medicina de Emergencias Aplicada", "bloque": 9, "parte": 2}, - "3.1.1": {"nombre": "Anatomía Operativa", "bloque": 2, "parte": 3}, - "3.1.2": {"nombre": "Inmovilización Manual", "bloque": 2, "parte": 3}, - "3.1.3": {"nombre": "Collarín Cervical", "bloque": 2, "parte": 3}, - "3.1.4": {"nombre": "Camilla Cuchara", "bloque": 2, "parte": 3}, - "3.1.5": {"nombre": "Tablero Espinal", "bloque": 2, "parte": 3}, - "3.1.6": {"nombre": "Colchón Vacío", "bloque": 2, "parte": 3}, - "3.1.7": {"nombre": "Extricación y Movimientos en Bloque", "bloque": 2, "parte": 3}, - "3.1.8": {"nombre": "Transferencias y Movilización", "bloque": 2, "parte": 3}, - "3.1.9": {"nombre": "Errores Críticos", "bloque": 2, "parte": 3}, - "3.1.10": {"nombre": "Férulas", "bloque": 2, "parte": 3}, - "3.1.11": {"nombre": "Cinturón Pélvico", "bloque": 2, "parte": 3}, - "3.1.12": {"nombre": "Férula de Tracción", "bloque": 2, "parte": 3}, - "3.1.13": {"nombre": "Camillas y Sillas de Evacuación", "bloque": 2, "parte": 3}, - "3.1.14": {"nombre": "Inventario de Material", "bloque": 2, "parte": 3}, - "3.2.1": {"nombre": "Oxigenoterapia Básica", "bloque": 3, "parte": 3}, - "3.2.2": {"nombre": "Oxigenoterapia - Fundamentos", "bloque": 3, "parte": 3}, - "3.2.3": {"nombre": "Dispositivos de Oxigenoterapia", "bloque": 3, "parte": 3}, - "3.2.4": {"nombre": "Ventilación con Bolsa-Mascarilla", "bloque": 3, "parte": 3}, - "3.2.5": {"nombre": "Aspiración", "bloque": 3, "parte": 3}, - "3.2.6": {"nombre": "Cánula Orofaringea", "bloque": 3, "parte": 3}, - "3.2.7": {"nombre": "BVM (Bolsa Válvula Mascarilla)", "bloque": 3, "parte": 3}, - "3.2.8": {"nombre": "Cánulas", "bloque": 3, "parte": 3}, - "3.2.9": {"nombre": "Organización del Maletín", "bloque": 3, "parte": 3}, - "3.2.10": {"nombre": "Control de Hemorragias", "bloque": 3, "parte": 3}, - "3.2.11": {"nombre": "Quemaduras", "bloque": 3, "parte": 3}, - "3.2.12": {"nombre": "Heridas y Vendajes", "bloque": 3, "parte": 3}, - "3.2.13": {"nombre": "Exposición y Aislamiento Térmico", "bloque": 3, "parte": 3}, - "3.2.14": {"nombre": "Monitorización Básica", "bloque": 3, "parte": 3}, - "3.2.15": {"nombre": "Glucometro", "bloque": 3, "parte": 3}, - "3.2.16": {"nombre": "Termometría", "bloque": 3, "parte": 3}, - "3.2.17": {"nombre": "Confort y Dolor", "bloque": 3, "parte": 3}, - "3.2.18": {"nombre": "Bioseguridad y Descontaminación", "bloque": 3, "parte": 3}, - "3.2.19": {"nombre": "Gestión de Material en Escena", "bloque": 3, "parte": 3}, - "3.2.20": {"nombre": "Comunicación Operativa", "bloque": 3, "parte": 3}, - "3.2.21": {"nombre": "Señalización e Iluminación", "bloque": 3, "parte": 3}, - "3.2.22": {"nombre": "Documentación Operativa", "bloque": 3, "parte": 3}, - "3.2.23": {"nombre": "Cierre Bloque 3", "bloque": 3, "parte": 3}, - "3.2.24": {"nombre": "Inventario Material Sanitario", "bloque": 3, "parte": 3}, - "3.2.25": {"nombre": "Maletín de Curas", "bloque": 3, "parte": 3}, - "3.2.26": {"nombre": "Bolsa de Monitorización", "bloque": 3, "parte": 3}, - "3.2.27": {"nombre": "Inventario Global", "bloque": 3, "parte": 3}, - "3.2.28": {"nombre": "Checklist Maestro", "bloque": 3, "parte": 3}, - "4.1.1": {"nombre": "Principios de Administración de Fármacos", "bloque": 6, "parte": 4}, - "4.1.2": {"nombre": "Vademécum Operativo", "bloque": 6, "parte": 4}, - "4.1.3": {"nombre": "Oxígeno - Administración y Seguridad", "bloque": 6, "parte": 4}, - "4.1.4": {"nombre": "Adrenalina - Uso en Anafilaxia y RCP", "bloque": 6, "parte": 4}, - "4.1.5": {"nombre": "Aspirina - Uso en SCA", "bloque": 6, "parte": 4}, - "4.1.6": {"nombre": "Glucagón - Uso en Hipoglucemia", "bloque": 6, "parte": 4}, - "4.1.7": {"nombre": "Salbutamol - Uso en Crisis Asmática", "bloque": 6, "parte": 4}, - "4.1.8": {"nombre": "Abreviaturas y Terminología Farmacológica", "bloque": 6, "parte": 4}, - "5.1.1": {"nombre": "Introducción a Protocolos Transtelefónicos", "bloque": 5, "parte": 5}, - "5.1.2": {"nombre": "Protocolos de Emergencias Específicas", "bloque": 5, "parte": 5}, - "5.1.3": {"nombre": "PCR Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.4": {"nombre": "OVACE Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.5": {"nombre": "SCA Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.6": {"nombre": "ICTUS Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.7": {"nombre": "Anafilaxia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.8": {"nombre": "Crisis Asmática Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.9": {"nombre": "Hipoglucemia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.10": {"nombre": "Comunicación con Coordinador", "bloque": 5, "parte": 5}, - "5.2.1": {"nombre": "Introducción a Gestión Operativa", "bloque": 8, "parte": 5}, - "5.2.2": {"nombre": "Documentación Clínica Prehospitalaria", "bloque": 8, "parte": 5}, - "5.2.3": {"nombre": "Coordinación y Comunicación Operativa", "bloque": 8, "parte": 5}, - "5.2.4": {"nombre": "Gestión de Recursos y Material", "bloque": 8, "parte": 5}, - "5.2.5": {"nombre": "Calidad y Mejora Continua", "bloque": 8, "parte": 5}, - "6.1.1": {"nombre": "Fundamentos de Conducción en Urgencias", "bloque": 7, "parte": 6}, - "6.1.2": {"nombre": "Uso de Luces y Sirena", "bloque": 7, "parte": 6}, - "6.1.3": {"nombre": "Técnicas de Conducción en Emergencias", "bloque": 7, "parte": 6}, - "6.1.4": {"nombre": "Seguridad Vial y Prevención de Accidentes", "bloque": 7, "parte": 6}, - "6.1.5": {"nombre": "Gestión de Rutas y Navegación", "bloque": 7, "parte": 6}, - "6.1.6": {"nombre": "Protocolos de Seguridad en Escena", "bloque": 7, "parte": 6}, - "7.1.1": {"nombre": "Situaciones Especiales", "bloque": 10, "parte": 7}, - "7.2.1": {"nombre": "Protocolos de Trauma", "bloque": 11, "parte": 7}, - "8.1.1": {"nombre": "Marco Legal, Ético y Profesional del TES", "bloque": 12, "parte": 8}, - "8.2.1": {"nombre": "Comunicación y Relación con el Paciente", "bloque": 13, "parte": 8}, - "8.3.1": {"nombre": "Seguridad Personal y Salud del TES", "bloque": 14, "parte": 8}, -} - -MAPEO_REAL = { - "1.1.1": "BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md", - "1.2.1": "BLOQUE_01_1_CONSTANTES_VITALES.md", - "1.2.2": "BLOQUE_01_2_ABCDE_OPERATIVO.md", - "1.2.3": "BLOQUE_01_3_GLASGOW_OPERATIVO.md", - "1.2.4": "BLOQUE_01_4_TRIAGE_START.md", - "2.1.1": "BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md", - "2.1.2": "BLOQUE_04_0B_RECONOCIMIENTO_PCR.md", - "2.1.3": "BLOQUE_04_1_RCP_ADULTOS.md", - "2.1.4": "BLOQUE_04_2_RCP_PEDIATRIA.md", - "2.1.5": "BLOQUE_04_3_RCP_LACTANTES.md", - "2.1.6": "BLOQUE_04_4_USO_DESA.md", - "2.1.7": "BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md", - "2.1.8": "BLOQUE_04_6_OVACE_ADULTOS.md", - "2.1.9": "BLOQUE_04_7_OVACE_PEDIATRIA.md", - "2.1.10": "BLOQUE_04_8_OVACE_LACTANTES.md", - "2.1.11": "BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md", - "2.2.1": "BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md", - "3.1.1": "BLOQUE_02_0_ANATOMIA_OPERATIVA.md", - "3.1.2": "BLOQUE_02_2_INMOVILIZACION_MANUAL.md", - "3.1.3": "BLOQUE_02_3_COLLARIN_CERVICAL.md", - "3.1.4": "BLOQUE_02_4_CAMILLA_CUCHARA.md", - "3.1.5": "BLOQUE_02_5_TABLERO_ESPINAL.md", - "3.1.6": "BLOQUE_02_6_COLCHON_VACIO.md", - "3.1.7": "BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md", - "3.1.8": "BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md", - "3.1.9": "BLOQUE_02_9_ERRORES_CRITICOS.md", - "3.1.10": "BLOQUE_02_10_FERULAS.md", - "3.1.11": "BLOQUE_02_11_CINTURON_PELVICO.md", - "3.1.12": "BLOQUE_02_12_FERULA_TRACCION.md", - "3.1.13": "BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md", - "3.1.14": "BLOQUE_02_X_INVENTARIO_MATERIAL.md", - "3.2.1": "BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md", - "3.2.2": "BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md", - "3.2.3": "BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md", - "3.2.4": "BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md", - "3.2.5": "BLOQUE_03_2_ASPIRACION.md", - "3.2.6": "BLOQUE_03_2B_CANULA_OROFARINGEA.md", - "3.2.7": "BLOQUE_03_3_BVM.md", - "3.2.8": "BLOQUE_03_4_CANULAS.md", - "3.2.9": "BLOQUE_03_5_ORGANIZACION_MALETIN.md", - "3.2.10": "BLOQUE_03_6_CONTROL_HEMORRAGIAS.md", - "3.2.11": "BLOQUE_03_7_QUEMADURAS.md", - "3.2.12": "BLOQUE_03_8_HERIDAS_VENDAJES.md", - "3.2.13": "BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md", - "3.2.14": "BLOQUE_03_10_MONITORIZACION_BASICA.md", - "3.2.15": "BLOQUE_03_11_GLUCOMETRO.md", - "3.2.16": "BLOQUE_03_12_TERMOMETRIA.md", - "3.2.17": "BLOQUE_03_13_CONFORT_DOLOR.md", - "3.2.18": "BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md", - "3.2.19": "BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md", - "3.2.20": "BLOQUE_03_16_COMUNICACION_OPERATIVA.md", - "3.2.21": "BLOQUE_03_17_SENALIZACION_ILUMINACION.md", - "3.2.22": "BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md", - "3.2.23": "BLOQUE_03_99_CIERRE_BLOQUE_3.md", - "3.2.24": "BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md", - "3.2.25": "BLOQUE_03_X2_MALETIN_CURAS.md", - "3.2.26": "BLOQUE_03_X3_BOLSA_MONITORIZACION.md", - "3.2.27": "BLOQUE_03_X4_INVENTARIO_GLOBAL.md", - "3.2.28": "BLOQUE_03_X5_CHECKLIST_MAESTRO.md", - "4.1.1": "BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md", - "4.1.2": "BLOQUE_06_1_VADEMECUM_OPERATIVO.md", - "4.1.3": "BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md", - "4.1.4": "BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md", - "4.1.5": "BLOQUE_06_4_ASPIRINA_USO_SCA.md", - "4.1.6": "BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md", - "4.1.7": "BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md", - "4.1.8": "BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md", - "5.1.1": "BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md", - "5.1.2": "BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md", - "5.1.3": "BLOQUE_05_1_PCR_TRANSTELEFONICA.md", - "5.1.4": "BLOQUE_05_2_OVACE_TRANSTELEFONICA.md", - "5.1.5": "BLOQUE_05_3_SCA_TRANSTELEFONICO.md", - "5.1.6": "BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md", - "5.1.7": "BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md", - "5.1.8": "BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md", - "5.1.9": "BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md", - "5.1.10": "BLOQUE_05_8_COMUNICACION_COORDINADOR.md", - "5.2.1": "BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md", - "5.2.2": "BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md", - "5.2.3": "BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md", - "5.2.4": "BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md", - "5.2.5": "BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md", - "6.1.1": "BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md", - "6.1.2": "BLOQUE_07_1_USO_LUCES_Y_SIRENA.md", - "6.1.3": "BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md", - "6.1.4": "BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md", - "6.1.5": "BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md", - "6.1.6": "BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md", - "7.1.1": "BLOQUE_10_0_SITUACIONES_ESPECIALES.md", - "7.2.1": "BLOQUE_11_0_PROTOCOLOS_TRAUMA.md", - "8.1.1": "BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md", - "8.2.1": "BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md", - "8.3.1": "BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md", -} - -BLOQUE_TO_FOLDER = { - 0: "BLOQUE_0_FUNDAMENTOS", - 1: "BLOQUE_1_PROCEDIMIENTOS_BASICOS", - 2: "BLOQUE_2_MATERIAL_E_INMOVILIZACION", - 3: "BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA", - 4: "BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP", - 5: "BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS", - 6: "BLOQUE_6_FARMACOLOGIA", - 7: "BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL", - 8: "BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION", - 9: "BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA", - 10: "BLOQUE_10_SITUACIONES_ESPECIALES", - 11: "BLOQUE_11_PROTOCOLOS_TRAUMA", - 12: "BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL", - 13: "BLOQUE_13_COMUNICACION_RELACION_PACIENTE", - 14: "BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES", -} - -PARTES_INFO = { - 1: {"nombre": "Fundamentos y Evaluación Inicial", "icono": "BookOpen"}, - 2: {"nombre": "Soporte Vital y Procedimientos Críticos", "icono": "Heart"}, - 3: {"nombre": "Material y Equipamiento", "icono": "Package"}, - 4: {"nombre": "Farmacología y Medicamentos", "icono": "Pill"}, - 5: {"nombre": "Protocolos y Gestión Operativa", "icono": "Phone"}, - 6: {"nombre": "Conducción y Seguridad Vial", "icono": "Car"}, - 7: {"nombre": "Situaciones Especiales y Trauma", "icono": "AlertTriangle"}, - 8: {"nombre": "Habilidades Profesionales", "icono": "User"}, -} - -BLOQUES_INFO = { - 0: {"nombre": "Fundamentos de Emergencias Prehospitalarias", "icono": "BookOpen"}, - 1: {"nombre": "Procedimientos Básicos", "icono": "ClipboardCheck"}, - 2: {"nombre": "Material e Inmovilización", "icono": "Package"}, - 3: {"nombre": "Material Sanitario y Oxigenoterapia", "icono": "Wind"}, - 4: {"nombre": "Soporte Vital Básico y RCP", "icono": "Heart"}, - 5: {"nombre": "Protocolos Transtelefónicos", "icono": "Phone"}, - 6: {"nombre": "Farmacología y Vademécum Operativo", "icono": "Pill"}, - 7: {"nombre": "Conducción y Seguridad Vial", "icono": "Car"}, - 8: {"nombre": "Gestión Operativa y Documentación", "icono": "FileText"}, - 9: {"nombre": "Medicina de Emergencias Aplicada", "icono": "Stethoscope"}, - 10: {"nombre": "Situaciones Especiales", "icono": "AlertTriangle"}, - 11: {"nombre": "Protocolos de Trauma", "icono": "Activity"}, - 12: {"nombre": "Marco Legal, Ético y Profesional", "icono": "Scale"}, - 13: {"nombre": "Comunicación y Relación con el Paciente", "icono": "MessageSquare"}, - 14: {"nombre": "Seguridad Personal y Salud del TES", "icono": "Shield"}, -} - -def generar_ruta_url(codigo: str, parte: int, bloque: int) -> str: - """Genera ruta URL amigable""" - parte_nombres = { - 1: "parte-i-fundamentos", - 2: "parte-ii-soporte-vital", - 3: "parte-iii-material", - 4: "parte-iv-farmacologia", - 5: "parte-v-protocolos", - 6: "parte-vi-conduccion", - 7: "parte-vii-situaciones-especiales", - 8: "parte-viii-habilidades", - } - - bloque_nombres = { - 0: "bloque-0-fundamentos", - 1: "bloque-1-procedimientos-basicos", - 2: "bloque-2-inmovilizacion", - 3: "bloque-3-oxigenoterapia", - 4: "bloque-4-rcp", - 5: "bloque-5-transtelefonicos", - 6: "bloque-6-farmacologia", - 7: "bloque-7-conduccion", - 8: "bloque-8-gestion", - 9: "bloque-9-medicina-emergencias", - 10: "bloque-10-situaciones-especiales", - 11: "bloque-11-trauma", - 12: "bloque-12-marco-legal", - 13: "bloque-13-comunicacion", - 14: "bloque-14-seguridad", - } - - return f"/manual/{parte_nombres[parte]}/{bloque_nombres[bloque]}/{codigo}" - -def determinar_nivel_dificultad(codigo: str, bloque: int) -> str: - """Determina nivel de dificultad basado en bloque y código""" - if bloque == 0 or codigo.startswith("1."): - return "basico" - elif bloque in [4, 5] or codigo.startswith("2."): - return "avanzado" - else: - return "intermedio" - -def determinar_importancia(codigo: str, bloque: int) -> str: - """Determina importancia basado en contenido""" - protocolos_criticos = ["2.1.3", "2.1.8", "2.1.6", "1.2.2"] # RCP, OVACE, DESA, ABCDE - if codigo in protocolos_criticos or bloque == 4: - return "alta" - elif bloque in [0, 1, 2, 3]: - return "alta" - else: - return "media" - -def extraer_palabras_clave(nombre: str, bloque: int) -> list: - """Extrae palabras clave del nombre""" - palabras = nombre.lower().split() - palabras_clave = [] - - # Agregar palabras relevantes - terminos_importantes = [ - "rcp", "ovace", "abcde", "glasgow", "triage", "oxigenoterapia", - "farmacologia", "trauma", "inmovilizacion", "protocolo", "emergencia" - ] - - for termino in terminos_importantes: - if termino in nombre.lower(): - palabras_clave.append(termino) - - return palabras_clave[:5] # Máximo 5 palabras clave - -def calcular_tiempo_lectura(ruta_archivo: Path) -> int: - """Calcula tiempo estimado de lectura""" - try: - with open(ruta_archivo, 'r', encoding='utf-8') as f: - contenido = f.read() - palabras = len(contenido.split()) - # Promedio: 200 palabras por minuto - return max(5, palabras // 200) - except: - return 10 # Default - -def obtener_capitulos_relacionados(codigo: str, parte: int, bloque: int) -> list: - """Obtiene IDs de capítulos relacionados""" - relacionados = [] - - # Misma parte - for cod, info in INDICE_ESPERADO.items(): - if info["parte"] == parte and cod != codigo: - relacionados.append(cod) - - # Limitar a 5 relacionados - return relacionados[:5] - -def generar_indice(): - """Genera el archivo manual-index.ts""" - - # Organizar por partes y bloques - partes_estructura = {} - - for codigo, info in INDICE_ESPERADO.items(): - parte_num = info["parte"] - bloque_num = info["bloque"] - - if parte_num not in partes_estructura: - partes_estructura[parte_num] = { - "bloques": {} - } - - if bloque_num not in partes_estructura[parte_num]["bloques"]: - partes_estructura[parte_num]["bloques"][bloque_num] = { - "capitulos": [] - } - - # Obtener archivo real - nombre_archivo = MAPEO_REAL.get(codigo) - if nombre_archivo: - folder_name = BLOQUE_TO_FOLDER[bloque_num] - ruta_archivo = MANUAL_DIR / folder_name / nombre_archivo - - # Calcular navegación - codigos_ordenados = sorted(INDICE_ESPERADO.keys()) - indice_actual = codigos_ordenados.index(codigo) - anterior = codigos_ordenados[indice_actual - 1] if indice_actual > 0 else None - siguiente = codigos_ordenados[indice_actual + 1] if indice_actual < len(codigos_ordenados) - 1 else None - - capitulo = { - "id": codigo, - "titulo": info["nombre"], - "parte": parte_num, - "parteNombre": PARTES_INFO[parte_num]["nombre"], - "bloque": bloque_num, - "bloqueNombre": BLOQUES_INFO[bloque_num]["nombre"], - "rutaArchivo": f"manual-tes/TES_Manual_Digital/{folder_name}/{nombre_archivo}", - "rutaUrl": generar_ruta_url(codigo, parte_num, bloque_num), - "nivelDificultad": determinar_nivel_dificultad(codigo, bloque_num), - "importancia": determinar_importancia(codigo, bloque_num), - "palabrasClave": extraer_palabras_clave(info["nombre"], bloque_num), - "tipoContenido": "operativo" if bloque_num in [1, 2, 3, 4] else "formativo", - "tiempoLectura": calcular_tiempo_lectura(ruta_archivo), - "navegacion": { - "anterior": anterior, - "siguiente": siguiente, - "relacionados": obtener_capitulos_relacionados(codigo, parte_num, bloque_num) - }, - "metadata": { - "version": "1.0", - "fechaActualizacion": "2024-12-13", - "autor": "Manual TES Digital" - } - } - - partes_estructura[parte_num]["bloques"][bloque_num]["capitulos"].append(capitulo) - - # Generar código TypeScript - ts_code = [] - ts_code.append("// Índice del Manual TES Digital") - ts_code.append("// Generado automáticamente desde estructura de archivos") - ts_code.append("// Fecha: 2025-12-17") - ts_code.append("") - ts_code.append("export interface Capitulo {") - ts_code.append(" id: string;") - ts_code.append(" titulo: string;") - ts_code.append(" parte: number;") - ts_code.append(" parteNombre: string;") - ts_code.append(" bloque: number;") - ts_code.append(" bloqueNombre: string;") - ts_code.append(" rutaArchivo: string;") - ts_code.append(" rutaUrl: string;") - ts_code.append(" nivelDificultad: 'basico' | 'intermedio' | 'avanzado';") - ts_code.append(" importancia: 'alta' | 'media' | 'baja';") - ts_code.append(" palabrasClave: string[];") - ts_code.append(" tipoContenido: 'formativo' | 'operativo' | 'referencia';") - ts_code.append(" tiempoLectura: number;") - ts_code.append(" navegacion: {") - ts_code.append(" anterior: string | null;") - ts_code.append(" siguiente: string | null;") - ts_code.append(" relacionados: string[];") - ts_code.append(" };") - ts_code.append(" metadata: {") - ts_code.append(" version: string;") - ts_code.append(" fechaActualizacion: string;") - ts_code.append(" autor: string;") - ts_code.append(" };") - ts_code.append("}") - ts_code.append("") - ts_code.append("export interface Bloque {") - ts_code.append(" id: number;") - ts_code.append(" nombre: string;") - ts_code.append(" descripcion: string;") - ts_code.append(" icono?: string;") - ts_code.append(" capitulos: Capitulo[];") - ts_code.append("}") - ts_code.append("") - ts_code.append("export interface Parte {") - ts_code.append(" id: number;") - ts_code.append(" nombre: string;") - ts_code.append(" descripcion: string;") - ts_code.append(" icono?: string;") - ts_code.append(" bloques: Bloque[];") - ts_code.append("}") - ts_code.append("") - ts_code.append("export const manualIndex: Parte[] = [") - - # Generar estructura de partes - for parte_num in sorted(partes_estructura.keys()): - parte_info = PARTES_INFO[parte_num] - ts_code.append(f" {{") - ts_code.append(f" id: {parte_num},") - ts_code.append(f" nombre: \"{parte_info['nombre']}\",") - ts_code.append(f" descripcion: \"\",") - ts_code.append(f" icono: \"{parte_info['icono']}\",") - ts_code.append(f" bloques: [") - - # Generar bloques - for bloque_num in sorted(partes_estructura[parte_num]["bloques"].keys()): - bloque_info = BLOQUES_INFO[bloque_num] - capitulos = sorted(partes_estructura[parte_num]["bloques"][bloque_num]["capitulos"], - key=lambda x: x["id"]) - - ts_code.append(f" {{") - ts_code.append(f" id: {bloque_num},") - ts_code.append(f" nombre: \"{bloque_info['nombre']}\",") - ts_code.append(f" descripcion: \"\",") - ts_code.append(f" icono: \"{bloque_info['icono']}\",") - ts_code.append(f" capitulos: [") - - # Generar capítulos - for cap in capitulos: - ts_code.append(f" {{") - ts_code.append(f" id: \"{cap['id']}\",") - ts_code.append(f" titulo: \"{cap['titulo']}\",") - ts_code.append(f" parte: {cap['parte']},") - ts_code.append(f" parteNombre: \"{cap['parteNombre']}\",") - ts_code.append(f" bloque: {cap['bloque']},") - ts_code.append(f" bloqueNombre: \"{cap['bloqueNombre']}\",") - ts_code.append(f" rutaArchivo: \"{cap['rutaArchivo']}\",") - ts_code.append(f" rutaUrl: \"{cap['rutaUrl']}\",") - ts_code.append(f" nivelDificultad: \"{cap['nivelDificultad']}\",") - ts_code.append(f" importancia: \"{cap['importancia']}\",") - ts_code.append(f" palabrasClave: {json.dumps(cap['palabrasClave'])},") - ts_code.append(f" tipoContenido: \"{cap['tipoContenido']}\",") - ts_code.append(f" tiempoLectura: {cap['tiempoLectura']},") - ts_code.append(f" navegacion: {{") - ts_code.append(f" anterior: {json.dumps(cap['navegacion']['anterior'])},",) - ts_code.append(f" siguiente: {json.dumps(cap['navegacion']['siguiente'])},",) - ts_code.append(f" relacionados: {json.dumps(cap['navegacion']['relacionados'])}") - ts_code.append(f" }},") - ts_code.append(f" metadata: {{") - ts_code.append(f" version: \"{cap['metadata']['version']}\",") - ts_code.append(f" fechaActualizacion: \"{cap['metadata']['fechaActualizacion']}\",") - ts_code.append(f" autor: \"{cap['metadata']['autor']}\"") - ts_code.append(f" }}") - ts_code.append(f" }},") - - ts_code.append(f" ]") - ts_code.append(f" }},") - - ts_code.append(f" ]") - ts_code.append(f" }},") - - ts_code.append("];") - ts_code.append("") - ts_code.append("// Función helper para obtener capítulo por ID") - ts_code.append("export function getCapituloById(id: string): Capitulo | null {") - ts_code.append(" for (const parte of manualIndex) {") - ts_code.append(" for (const bloque of parte.bloques) {") - ts_code.append(" const capitulo = bloque.capitulos.find(c => c.id === id);") - ts_code.append(" if (capitulo) return capitulo;") - ts_code.append(" }") - ts_code.append(" }") - ts_code.append(" return null;") - ts_code.append("}") - ts_code.append("") - ts_code.append("// Función helper para obtener todos los capítulos") - ts_code.append("export function getAllCapitulos(): Capitulo[] {") - ts_code.append(" const capitulos: Capitulo[] = [];") - ts_code.append(" for (const parte of manualIndex) {") - ts_code.append(" for (const bloque of parte.bloques) {") - ts_code.append(" capitulos.push(...bloque.capitulos);") - ts_code.append(" }") - ts_code.append(" }") - ts_code.append(" return capitulos;") - ts_code.append("}") - - # Guardar archivo - output_path = BASE_DIR / "src" / "data" / "manual-index.ts" - with open(output_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(ts_code)) - - print(f"✅ Índice generado: {output_path}") - print(f" Total de capítulos: {len(INDICE_ESPERADO)}") - -if __name__ == "__main__": - generar_indice() diff --git a/generar_reportes_app.py b/generar_reportes_app.py deleted file mode 100644 index 677c5d06..00000000 --- a/generar_reportes_app.py +++ /dev/null @@ -1,632 +0,0 @@ -#!/usr/bin/env python3 -""" -Script para generar reportes completos para conversión a app digital -Genera 3 reportes: -1. Archivos .md faltantes del índice -2. Medios/multimedia faltantes -3. Recomendaciones para estructura de app -""" - -import os -import re -from pathlib import Path -from collections import defaultdict -from typing import Dict, List, Set, Tuple - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -# Mapeo del índice esperado (del INDICE_COMPLETO_MANUAL_TES.md) -INDICE_ESPERADO = { - "1.1.1": {"nombre": "Fundamentos de Emergencias", "bloque": 0, "parte": 1}, - "1.2.1": {"nombre": "Constantes Vitales", "bloque": 1, "parte": 1}, - "1.2.2": {"nombre": "ABCDE Operativo", "bloque": 1, "parte": 1}, - "1.2.3": {"nombre": "Glasgow Operativo", "bloque": 1, "parte": 1}, - "1.2.4": {"nombre": "Triage START", "bloque": 1, "parte": 1}, - "2.1.1": {"nombre": "Acceso Vascular Básico", "bloque": 4, "parte": 2}, - "2.1.2": {"nombre": "Reconocimiento PCR", "bloque": 4, "parte": 2}, - "2.1.3": {"nombre": "RCP Adultos", "bloque": 4, "parte": 2}, - "2.1.4": {"nombre": "RCP Pediatría", "bloque": 4, "parte": 2}, - "2.1.5": {"nombre": "RCP Lactantes", "bloque": 4, "parte": 2}, - "2.1.6": {"nombre": "Uso DESA", "bloque": 4, "parte": 2}, - "2.1.7": {"nombre": "RCP Dos Intervinientes", "bloque": 4, "parte": 2}, - "2.1.8": {"nombre": "OVACE Adultos", "bloque": 4, "parte": 2}, - "2.1.9": {"nombre": "OVACE Pediatría", "bloque": 4, "parte": 2}, - "2.1.10": {"nombre": "OVACE Lactantes", "bloque": 4, "parte": 2}, - "2.1.11": {"nombre": "Posición Lateral de Seguridad", "bloque": 4, "parte": 2}, - "2.2.1": {"nombre": "Medicina de Emergencias Aplicada", "bloque": 9, "parte": 2}, - "3.1.1": {"nombre": "Anatomía Operativa", "bloque": 2, "parte": 3}, - "3.1.2": {"nombre": "Inmovilización Manual", "bloque": 2, "parte": 3}, - "3.1.3": {"nombre": "Collarín Cervical", "bloque": 2, "parte": 3}, - "3.1.4": {"nombre": "Camilla Cuchara", "bloque": 2, "parte": 3}, - "3.1.5": {"nombre": "Tablero Espinal", "bloque": 2, "parte": 3}, - "3.1.6": {"nombre": "Colchón Vacío", "bloque": 2, "parte": 3}, - "3.1.7": {"nombre": "Extricación y Movimientos en Bloque", "bloque": 2, "parte": 3}, - "3.1.8": {"nombre": "Transferencias y Movilización", "bloque": 2, "parte": 3}, - "3.1.9": {"nombre": "Errores Críticos", "bloque": 2, "parte": 3}, - "3.1.10": {"nombre": "Férulas", "bloque": 2, "parte": 3}, - "3.1.11": {"nombre": "Cinturón Pélvico", "bloque": 2, "parte": 3}, - "3.1.12": {"nombre": "Férula de Tracción", "bloque": 2, "parte": 3}, - "3.1.13": {"nombre": "Camillas y Sillas de Evacuación", "bloque": 2, "parte": 3}, - "3.1.14": {"nombre": "Inventario de Material", "bloque": 2, "parte": 3}, - "3.2.1": {"nombre": "Oxigenoterapia Básica", "bloque": 3, "parte": 3}, - "3.2.2": {"nombre": "Oxigenoterapia - Fundamentos", "bloque": 3, "parte": 3}, - "3.2.3": {"nombre": "Dispositivos de Oxigenoterapia", "bloque": 3, "parte": 3}, - "3.2.4": {"nombre": "Ventilación con Bolsa-Mascarilla", "bloque": 3, "parte": 3}, - "3.2.5": {"nombre": "Aspiración", "bloque": 3, "parte": 3}, - "3.2.6": {"nombre": "Cánula Orofaringea", "bloque": 3, "parte": 3}, - "3.2.7": {"nombre": "BVM (Bolsa Válvula Mascarilla)", "bloque": 3, "parte": 3}, - "3.2.8": {"nombre": "Cánulas", "bloque": 3, "parte": 3}, - "3.2.9": {"nombre": "Organización del Maletín", "bloque": 3, "parte": 3}, - "3.2.10": {"nombre": "Control de Hemorragias", "bloque": 3, "parte": 3}, - "3.2.11": {"nombre": "Quemaduras", "bloque": 3, "parte": 3}, - "3.2.12": {"nombre": "Heridas y Vendajes", "bloque": 3, "parte": 3}, - "3.2.13": {"nombre": "Exposición y Aislamiento Térmico", "bloque": 3, "parte": 3}, - "3.2.14": {"nombre": "Monitorización Básica", "bloque": 3, "parte": 3}, - "3.2.15": {"nombre": "Glucometro", "bloque": 3, "parte": 3}, - "3.2.16": {"nombre": "Termometría", "bloque": 3, "parte": 3}, - "3.2.17": {"nombre": "Confort y Dolor", "bloque": 3, "parte": 3}, - "3.2.18": {"nombre": "Bioseguridad y Descontaminación", "bloque": 3, "parte": 3}, - "3.2.19": {"nombre": "Gestión de Material en Escena", "bloque": 3, "parte": 3}, - "3.2.20": {"nombre": "Comunicación Operativa", "bloque": 3, "parte": 3}, - "3.2.21": {"nombre": "Señalización e Iluminación", "bloque": 3, "parte": 3}, - "3.2.22": {"nombre": "Documentación Operativa", "bloque": 3, "parte": 3}, - "3.2.23": {"nombre": "Cierre Bloque 3", "bloque": 3, "parte": 3}, - "3.2.24": {"nombre": "Inventario Material Sanitario", "bloque": 3, "parte": 3}, - "3.2.25": {"nombre": "Maletín de Curas", "bloque": 3, "parte": 3}, - "3.2.26": {"nombre": "Bolsa de Monitorización", "bloque": 3, "parte": 3}, - "3.2.27": {"nombre": "Inventario Global", "bloque": 3, "parte": 3}, - "3.2.28": {"nombre": "Checklist Maestro", "bloque": 3, "parte": 3}, - "4.1.1": {"nombre": "Principios de Administración de Fármacos", "bloque": 6, "parte": 4}, - "4.1.2": {"nombre": "Vademécum Operativo", "bloque": 6, "parte": 4}, - "4.1.3": {"nombre": "Oxígeno - Administración y Seguridad", "bloque": 6, "parte": 4}, - "4.1.4": {"nombre": "Adrenalina - Uso en Anafilaxia y RCP", "bloque": 6, "parte": 4}, - "4.1.5": {"nombre": "Aspirina - Uso en SCA", "bloque": 6, "parte": 4}, - "4.1.6": {"nombre": "Glucagón - Uso en Hipoglucemia", "bloque": 6, "parte": 4}, - "4.1.7": {"nombre": "Salbutamol - Uso en Crisis Asmática", "bloque": 6, "parte": 4}, - "4.1.8": {"nombre": "Abreviaturas y Terminología Farmacológica", "bloque": 6, "parte": 4}, - "5.1.1": {"nombre": "Introducción a Protocolos Transtelefónicos", "bloque": 5, "parte": 5}, - "5.1.2": {"nombre": "Protocolos de Emergencias Específicas", "bloque": 5, "parte": 5}, - "5.1.3": {"nombre": "PCR Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.4": {"nombre": "OVACE Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.5": {"nombre": "SCA Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.6": {"nombre": "ICTUS Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.7": {"nombre": "Anafilaxia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.8": {"nombre": "Crisis Asmática Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.9": {"nombre": "Hipoglucemia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.10": {"nombre": "Comunicación con Coordinador", "bloque": 5, "parte": 5}, - "5.2.1": {"nombre": "Introducción a Gestión Operativa", "bloque": 8, "parte": 5}, - "5.2.2": {"nombre": "Documentación Clínica Prehospitalaria", "bloque": 8, "parte": 5}, - "5.2.3": {"nombre": "Coordinación y Comunicación Operativa", "bloque": 8, "parte": 5}, - "5.2.4": {"nombre": "Gestión de Recursos y Material", "bloque": 8, "parte": 5}, - "5.2.5": {"nombre": "Calidad y Mejora Continua", "bloque": 8, "parte": 5}, - "6.1.1": {"nombre": "Fundamentos de Conducción en Urgencias", "bloque": 7, "parte": 6}, - "6.1.2": {"nombre": "Uso de Luces y Sirena", "bloque": 7, "parte": 6}, - "6.1.3": {"nombre": "Técnicas de Conducción en Emergencias", "bloque": 7, "parte": 6}, - "6.1.4": {"nombre": "Seguridad Vial y Prevención de Accidentes", "bloque": 7, "parte": 6}, - "6.1.5": {"nombre": "Gestión de Rutas y Navegación", "bloque": 7, "parte": 6}, - "6.1.6": {"nombre": "Protocolos de Seguridad en Escena", "bloque": 7, "parte": 6}, - "7.1.1": {"nombre": "Situaciones Especiales", "bloque": 10, "parte": 7}, - "7.2.1": {"nombre": "Protocolos de Trauma", "bloque": 11, "parte": 7}, - "8.1.1": {"nombre": "Marco Legal, Ético y Profesional del TES", "bloque": 12, "parte": 8}, - "8.2.1": {"nombre": "Comunicación y Relación con el Paciente", "bloque": 13, "parte": 8}, - "8.3.1": {"nombre": "Seguridad Personal y Salud del TES", "bloque": 14, "parte": 8}, -} - -BLOQUE_TO_FOLDER = { - 0: "BLOQUE_0_FUNDAMENTOS", - 1: "BLOQUE_1_PROCEDIMIENTOS_BASICOS", - 2: "BLOQUE_2_MATERIAL_E_INMOVILIZACION", - 3: "BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA", - 4: "BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP", - 5: "BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS", - 6: "BLOQUE_6_FARMACOLOGIA", - 7: "BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL", - 8: "BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION", - 9: "BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA", - 10: "BLOQUE_10_SITUACIONES_ESPECIALES", - 11: "BLOQUE_11_PROTOCOLOS_TRAUMA", - 12: "BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL", - 13: "BLOQUE_13_COMUNICACION_RELACION_PACIENTE", - 14: "BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES", -} - -def obtener_archivos_md_existentes() -> Dict[str, Path]: - """Obtiene todos los archivos .md existentes mapeados por nombre""" - archivos = {} - for bloque_dir in MANUAL_DIR.iterdir(): - if bloque_dir.is_dir() and bloque_dir.name.startswith("BLOQUE_"): - for archivo in bloque_dir.glob("*.md"): - archivos[archivo.name] = archivo - return archivos - -def buscar_referencias_multimedia(archivo: Path) -> List[Dict]: - """Busca referencias a medios/multimedia en un archivo""" - referencias = [] - try: - with open(archivo, 'r', encoding='utf-8') as f: - contenido = f.read() - lineas = contenido.split('\n') - - for num_linea, linea in enumerate(lineas, 1): - # Buscar imágenes: ![texto](ruta) - patron_imagen = r'!\[([^\]]*)\]\(([^\)]+)\)' - matches = re.findall(patron_imagen, linea) - for texto_alt, ruta in matches: - referencias.append({ - 'tipo': 'imagen', - 'texto_alt': texto_alt, - 'ruta': ruta, - 'linea': num_linea, - 'archivo': archivo.name, - 'ruta_completa': str(archivo) - }) - - # Buscar enlaces a archivos multimedia - patron_multimedia = r'\[([^\]]+)\]\(([^\)]+\.(jpg|jpeg|png|gif|svg|pdf|mp4|mp3|avi|mov|wav))\)' - matches = re.findall(patron_multimedia, linea, re.IGNORECASE) - for texto, ruta, ext in matches: - referencias.append({ - 'tipo': 'multimedia', - 'texto': texto, - 'ruta': ruta, - 'extension': ext, - 'linea': num_linea, - 'archivo': archivo.name, - 'ruta_completa': str(archivo) - }) - - # Buscar referencias a videos - if 'video' in linea.lower() or 'youtube' in linea.lower() or 'vimeo' in linea.lower(): - referencias.append({ - 'tipo': 'video_referencia', - 'linea': num_linea, - 'contenido': linea.strip(), - 'archivo': archivo.name, - 'ruta_completa': str(archivo) - }) - except Exception as e: - print(f"Error leyendo {archivo}: {e}") - - return referencias - -def verificar_existencia_medio(ruta: str, archivo_origen: Path) -> bool: - """Verifica si un archivo multimedia existe""" - # Si es ruta absoluta - if os.path.isabs(ruta): - return os.path.exists(ruta) - - # Si es ruta relativa - archivo_dir = archivo_origen.parent - ruta_completa = (archivo_dir / ruta).resolve() - - # Verificar si existe - if ruta_completa.exists(): - return True - - # Buscar en otras ubicaciones comunes - posibles_rutas = [ - MANUAL_DIR / ruta, - BASE_DIR / ruta, - BASE_DIR / "public" / ruta, - BASE_DIR / "src" / "assets" / ruta, - ] - - return any(os.path.exists(r) for r in posibles_rutas) - -def generar_reporte_1_archivos_faltantes(): - """Genera reporte 1: Archivos .md faltantes del índice""" - archivos_existentes = obtener_archivos_md_existentes() - - # Mapear archivos esperados según el índice - archivos_esperados = {} - for codigo, info in INDICE_ESPERADO.items(): - bloque_num = info["bloque"] - folder_name = BLOQUE_TO_FOLDER[bloque_num] - # Generar nombre esperado basado en el patrón observado - nombre_base = info["nombre"].upper().replace(" ", "_").replace("-", "_") - nombre_archivo = f"BLOQUE_{bloque_num:02d}_{codigo.split('.')[-1]}_{nombre_base}.md" - archivos_esperados[codigo] = { - 'nombre': info["nombre"], - 'archivo_esperado': nombre_archivo, - 'bloque': bloque_num, - 'folder': folder_name - } - - # Verificar qué archivos existen realmente - archivos_encontrados = [] - archivos_faltantes = [] - - # Buscar archivos por bloque y nombre aproximado - for codigo, info_esperado in archivos_esperados.items(): - bloque_num = info_esperado['bloque'] - folder_name = info_esperado['folder'] - bloque_dir = MANUAL_DIR / folder_name - - encontrado = False - archivo_real = None - - if bloque_dir.exists(): - # Buscar archivos que coincidan con el patrón - nombre_buscar = info_esperado['nombre'].upper().replace(" ", "_") - for archivo in bloque_dir.glob("*.md"): - if nombre_buscar in archivo.name.upper() or f"BLOQUE_{bloque_num:02d}" in archivo.name: - encontrado = True - archivo_real = archivo.name - break - - if encontrado: - archivos_encontrados.append({ - 'codigo': codigo, - 'nombre': info_esperado['nombre'], - 'archivo_real': archivo_real, - 'bloque': bloque_num - }) - else: - archivos_faltantes.append({ - 'codigo': codigo, - 'nombre': info_esperado['nombre'], - 'archivo_esperado': info_esperado['archivo_esperado'], - 'bloque': bloque_num, - 'folder': folder_name - }) - - # Generar reporte - reporte = [] - reporte.append("# REPORTE 1: ARCHIVOS .MD FALTANTES DEL ÍNDICE\n") - reporte.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte.append("---\n") - - reporte.append("## 📊 RESUMEN EJECUTIVO\n") - reporte.append(f"- **Total de capítulos según índice:** {len(INDICE_ESPERADO)}\n") - reporte.append(f"- **Archivos encontrados:** {len(archivos_encontrados)}\n") - reporte.append(f"- **Archivos faltantes:** {len(archivos_faltantes)}\n") - reporte.append(f"- **Porcentaje de completitud:** {(len(archivos_encontrados)/len(INDICE_ESPERADO)*100):.1f}%\n") - reporte.append("---\n") - - if archivos_faltantes: - reporte.append("## ❌ ARCHIVOS FALTANTES\n") - reporte.append(f"**Total:** {len(archivos_faltantes)} archivos\n\n") - - por_parte = defaultdict(list) - for archivo in archivos_faltantes: - parte_num = archivo['codigo'].split('.')[0] - por_parte[parte_num].append(archivo) - - for parte_num in sorted(por_parte.keys(), key=int): - reporte.append(f"\n### Parte {parte_num}\n") - for archivo in sorted(por_parte[parte_num], key=lambda x: x['codigo']): - reporte.append(f"- **{archivo['codigo']}** - {archivo['nombre']}") - reporte.append(f" - Bloque: {archivo['bloque']}") - reporte.append(f" - Carpeta esperada: `{archivo['folder']}/`") - reporte.append(f" - Archivo esperado: `{archivo['archivo_esperado']}`\n") - else: - reporte.append("## ✅ TODOS LOS ARCHIVOS ESTÁN PRESENTES\n") - reporte.append("Todos los 93 capítulos del índice tienen archivos .md correspondientes.\n") - - reporte.append("\n---\n") - reporte.append("## 📋 LISTADO COMPLETO DE ARCHIVOS ENCONTRADOS\n") - reporte.append(f"**Total:** {len(archivos_encontrados)} archivos\n\n") - - por_parte_encontrados = defaultdict(list) - for archivo in archivos_encontrados: - parte_num = archivo['codigo'].split('.')[0] - por_parte_encontrados[parte_num].append(archivo) - - for parte_num in sorted(por_parte_encontrados.keys(), key=int): - reporte.append(f"\n### Parte {parte_num}\n") - for archivo in sorted(por_parte_encontrados[parte_num], key=lambda x: x['codigo']): - reporte.append(f"- ✅ `{archivo['codigo']}` - {archivo['nombre']}") - reporte.append(f" - Archivo: `{archivo['archivo_real']}`\n") - - return "\n".join(reporte), len(archivos_faltantes) - -def generar_reporte_2_multimedia_faltante(): - """Genera reporte 2: Medios/multimedia faltantes""" - archivos_md = obtener_archivos_md_existentes() - todas_referencias = [] - medios_faltantes = [] - - for nombre_archivo, ruta_archivo in archivos_md.items(): - referencias = buscar_referencias_multimedia(ruta_archivo) - todas_referencias.extend(referencias) - - for ref in referencias: - if ref['tipo'] in ['imagen', 'multimedia']: - if not verificar_existencia_medio(ref['ruta'], ruta_archivo): - medios_faltantes.append(ref) - - # Generar reporte - reporte = [] - reporte.append("# REPORTE 2: MEDIOS/MULTIMEDIA FALTANTES\n") - reporte.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte.append("---\n") - - reporte.append("## 📊 RESUMEN EJECUTIVO\n") - reporte.append(f"- **Total de referencias a medios encontradas:** {len(todas_referencias)}\n") - reporte.append(f"- **Medios faltantes:** {len(medios_faltantes)}\n") - reporte.append(f"- **Medios existentes:** {len(todas_referencias) - len(medios_faltantes)}\n") - reporte.append("---\n") - - if medios_faltantes: - reporte.append("## ❌ MEDIOS FALTANTES\n") - reporte.append(f"**Total:** {len(medios_faltantes)} referencias a medios que no existen\n\n") - - por_tipo = defaultdict(list) - for medio in medios_faltantes: - por_tipo[medio['tipo']].append(medio) - - for tipo in sorted(por_tipo.keys()): - reporte.append(f"\n### {tipo.upper()}\n") - for medio in por_tipo[tipo]: - reporte.append(f"- **Archivo:** `{medio['archivo']}`") - reporte.append(f" - **Línea:** {medio['linea']}") - reporte.append(f" - **Ruta referenciada:** `{medio['ruta']}`") - if 'texto_alt' in medio: - reporte.append(f" - **Texto alternativo:** {medio['texto_alt']}") - reporte.append(f" - **Ubicación:** `{medio['ruta_completa']}`\n") - else: - reporte.append("## ✅ NO SE ENCONTRARON REFERENCIAS A MEDIOS FALTANTES\n") - reporte.append("No se encontraron referencias a imágenes, videos u otros medios multimedia en los archivos.\n") - - reporte.append("\n---\n") - reporte.append("## 📋 TODAS LAS REFERENCIAS A MEDIOS ENCONTRADAS\n") - reporte.append(f"**Total:** {len(todas_referencias)} referencias\n\n") - - if todas_referencias: - por_archivo = defaultdict(list) - for ref in todas_referencias: - por_archivo[ref['archivo']].append(ref) - - for archivo in sorted(por_archivo.keys()): - reporte.append(f"\n### `{archivo}`\n") - for ref in por_archivo[archivo]: - reporte.append(f"- **Línea {ref['linea']}:** {ref['tipo']}") - if 'ruta' in ref: - reporte.append(f" - Ruta: `{ref['ruta']}`") - reporte.append("") - else: - reporte.append("No se encontraron referencias a medios multimedia en ningún archivo.\n") - - return "\n".join(reporte), len(medios_faltantes) - -def generar_reporte_3_recomendaciones_app(): - """Genera reporte 3: Recomendaciones para estructura de app""" - reporte = [] - reporte.append("# REPORTE 3: RECOMENDACIONES PARA ESTRUCTURA DE APP\n") - reporte.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte.append("---\n") - - reporte.append("## 📱 ESTRUCTURA DE CARPETAS IDEAL PARA APP\n") - reporte.append("\n### Propuesta de Estructura:\n") - reporte.append("```\n") - reporte.append("app-manual-tes/\n") - reporte.append("├── contenido/\n") - reporte.append("│ ├── parte-i-fundamentos/\n") - reporte.append("│ │ ├── bloque-0-fundamentos/\n") - reporte.append("│ │ │ ├── 1.1.1-fundamentos-emergencias.md\n") - reporte.append("│ │ │ └── metadata.json\n") - reporte.append("│ │ └── bloque-1-procedimientos-basicos/\n") - reporte.append("│ │ ├── 1.2.1-constantes-vitales.md\n") - reporte.append("│ │ ├── 1.2.2-abcde-operativo.md\n") - reporte.append("│ │ ├── 1.2.3-glasgow-operativo.md\n") - reporte.append("│ │ ├── 1.2.4-triage-start.md\n") - reporte.append("│ │ └── metadata.json\n") - reporte.append("│ ├── parte-ii-soporte-vital/\n") - reporte.append("│ │ ├── bloque-4-rcp/\n") - reporte.append("│ │ └── bloque-9-medicina-emergencias/\n") - reporte.append("│ ├── parte-iii-material/\n") - reporte.append("│ │ ├── bloque-2-inmovilizacion/\n") - reporte.append("│ │ └── bloque-3-oxigenoterapia/\n") - reporte.append("│ ├── parte-iv-farmacologia/\n") - reporte.append("│ │ └── bloque-6-farmacologia/\n") - reporte.append("│ ├── parte-v-protocolos/\n") - reporte.append("│ │ ├── bloque-5-transtelefonicos/\n") - reporte.append("│ │ └── bloque-8-gestion/\n") - reporte.append("│ ├── parte-vi-conduccion/\n") - reporte.append("│ │ └── bloque-7-conduccion/\n") - reporte.append("│ ├── parte-vii-situaciones-especiales/\n") - reporte.append("│ │ ├── bloque-10-situaciones-especiales/\n") - reporte.append("│ │ └── bloque-11-trauma/\n") - reporte.append("│ └── parte-viii-habilidades/\n") - reporte.append("│ ├── bloque-12-marco-legal/\n") - reporte.append("│ ├── bloque-13-comunicacion/\n") - reporte.append("│ └── bloque-14-seguridad/\n") - reporte.append("├── assets/\n") - reporte.append("│ ├── imagenes/\n") - reporte.append("│ ├── videos/\n") - reporte.append("│ └── iconos/\n") - reporte.append("├── data/\n") - reporte.append("│ ├── indice.json\n") - reporte.append("│ └── metadata-global.json\n") - reporte.append("└── public/\n") - reporte.append(" └── (archivos estáticos)\n") - reporte.append("```\n") - reporte.append("\n---\n") - - reporte.append("## 📋 METADATOS NECESARIOS EN CADA .MD\n") - reporte.append("\n### Front Matter Propuesto (YAML):\n") - reporte.append("```yaml\n") - reporte.append("---\n") - reporte.append("id: '1.1.1'\n") - reporte.append("titulo: 'Fundamentos de Emergencias'\n") - reporte.append("subtitulo: 'Marco conceptual y operativo'\n") - reporte.append("parte: 1\n") - reporte.append("bloque: 0\n") - reporte.append("bloque_nombre: 'Fundamentos de Emergencias Prehospitalarias'\n") - reporte.append("parte_nombre: 'Fundamentos y Evaluación Inicial'\n") - reporte.append("nivel_dificultad: 'basico'\n") - reporte.append("importancia: 'alta'\n") - reporte.append("palabras_clave:\n") - reporte.append(" - 'emergencias'\n") - reporte.append(" - 'soporte vital'\n") - reporte.append(" - 'cadena supervivencia'\n") - reporte.append("tipo_contenido: 'formativo'\n") - reporte.append("tiempo_lectura: 15\n") - reporte.append("version: '1.0'\n") - reporte.append("fecha_actualizacion: '2024-12-13'\n") - reporte.append("autor: 'Manual TES Digital'\n") - reporte.append("navegacion:\n") - reporte.append(" anterior: null\n") - reporte.append(" siguiente: '1.2.1'\n") - reporte.append(" relacionados:\n") - reporte.append(" - '1.2.1'\n") - reporte.append(" - '2.1.1'\n") - reporte.append("---\n") - reporte.append("```\n") - reporte.append("\n### Campos Explicados:\n") - reporte.append("- **id**: Identificador único del capítulo (formato X.Y.Z)\n") - reporte.append("- **titulo**: Título principal del capítulo\n") - reporte.append("- **subtitulo**: Descripción breve\n") - reporte.append("- **parte/bloque**: Números para organización jerárquica\n") - reporte.append("- **nivel_dificultad**: 'basico', 'intermedio', 'avanzado'\n") - reporte.append("- **importancia**: 'alta', 'media', 'baja'\n") - reporte.append("- **palabras_clave**: Array de términos para búsqueda\n") - reporte.append("- **tipo_contenido**: 'formativo', 'operativo', 'referencia'\n") - reporte.append("- **tiempo_lectura**: Minutos estimados\n") - reporte.append("- **navegacion**: Enlaces a capítulos relacionados\n") - reporte.append("\n---\n") - - reporte.append("## 🧭 SISTEMA DE NAVEGACIÓN RECOMENDADO\n") - reporte.append("\n### 1. Menú Lateral Jerárquico\n") - reporte.append("```\n") - reporte.append("📚 Manual TES Digital\n") - reporte.append("├── 📖 Parte I: Fundamentos\n") - reporte.append("│ ├── 🔹 Bloque 0: Fundamentos\n") - reporte.append("│ │ └── 1.1.1 Fundamentos de Emergencias\n") - reporte.append("│ └── 🔹 Bloque 1: Procedimientos Básicos\n") - reporte.append("│ ├── 1.2.1 Constantes Vitales\n") - reporte.append("│ ├── 1.2.2 ABCDE Operativo\n") - reporte.append("│ ├── 1.2.3 Glasgow Operativo\n") - reporte.append("│ └── 1.2.4 Triage START\n") - reporte.append("├── 💉 Parte II: Soporte Vital\n") - reporte.append("│ ├── 🔹 Bloque 4: RCP\n") - reporte.append("│ └── 🔹 Bloque 9: Medicina Emergencias\n") - reporte.append("└── ... (resto de partes)\n") - reporte.append("```\n") - reporte.append("\n**Características:**\n") - reporte.append("- Expandible/colapsable por niveles\n") - reporte.append("- Indicador visual del capítulo actual\n") - reporte.append("- Búsqueda rápida integrada\n") - reporte.append("- Favoritos/marcadores\n") - reporte.append("\n### 2. Breadcrumbs (Migas de Pan)\n") - reporte.append("```\n") - reporte.append("Inicio > Parte I > Bloque 1 > 1.2.1 Constantes Vitales\n") - reporte.append("```\n") - reporte.append("\n**Funcionalidad:**\n") - reporte.append("- Navegación rápida a niveles superiores\n") - reporte.append("- Contexto visual de ubicación\n") - reporte.append("- Click en cualquier nivel para ir directamente\n") - reporte.append("\n### 3. Navegación Anterior/Siguiente\n") - reporte.append("```\n") - reporte.append("← Capítulo Anterior: 1.1.1 Fundamentos\n") - reporte.append("Capítulo Siguiente: 1.2.2 ABCDE Operativo →\n") - reporte.append("```\n") - reporte.append("\n**Funcionalidad:**\n") - reporte.append("- Botones flotantes o en footer\n") - reporte.append("- Navegación secuencial lógica\n") - reporte.append("- Atajos de teclado (← →)\n") - reporte.append("\n### 4. Índice Rápido\n") - reporte.append("**Características:**\n") - reporte.append("- Modal o sidebar deslizable\n") - reporte.append("- Búsqueda instantánea\n") - reporte.append("- Filtros por parte/bloque\n") - reporte.append("- Acceso desde cualquier página\n") - reporte.append("\n---\n") - - reporte.append("## 🔍 FUNCIONALIDADES ADICIONALES RECOMENDADAS\n") - reporte.append("\n### Búsqueda Avanzada\n") - reporte.append("- Búsqueda por texto completo\n") - reporte.append("- Filtros por parte, bloque, tipo de contenido\n") - reporte.append("- Búsqueda por palabras clave\n") - reporte.append("- Historial de búsquedas\n") - reporte.append("\n### Modo Offline\n") - reporte.append("- Cache de contenido para acceso offline\n") - reporte.append("- Service Worker para PWA\n") - reporte.append("- Sincronización cuando hay conexión\n") - reporte.append("\n### Personalización\n") - reporte.append("- Modo oscuro/claro\n") - reporte.append("- Tamaño de fuente ajustable\n") - reporte.append("- Favoritos personalizados\n") - reporte.append("- Notas/annotaciones por capítulo\n") - reporte.append("\n### Tests/Autoevaluaciones\n") - reporte.append("- Preguntas por capítulo\n") - reporte.append("- Tests por bloque/parte\n") - reporte.append("- Historial de resultados\n") - reporte.append("- Modo estudio vs modo examen\n") - reporte.append("\n---\n") - - reporte.append("## 📐 ESTRUCTURA DE DATOS JSON RECOMENDADA\n") - reporte.append("\n### indice.json\n") - reporte.append("```json\n") - reporte.append("{\n") - reporte.append(" \"version\": \"1.0\",\n") - reporte.append(" \"fecha\": \"2024-12-15\",\n") - reporte.append(" \"partes\": [\n") - reporte.append(" {\n") - reporte.append(" \"id\": 1,\n") - reporte.append(" \"nombre\": \"Fundamentos y Evaluación Inicial\",\n") - reporte.append(" \"bloques\": [\n") - reporte.append(" {\n") - reporte.append(" \"id\": 0,\n") - reporte.append(" \"nombre\": \"Fundamentos de Emergencias\",\n") - reporte.append(" \"capitulos\": [\n") - reporte.append(" {\n") - reporte.append(" \"id\": \"1.1.1\",\n") - reporte.append(" \"titulo\": \"Fundamentos de Emergencias\",\n") - reporte.append(" \"ruta\": \"parte-i-fundamentos/bloque-0-fundamentos/1.1.1-fundamentos-emergencias.md\"\n") - reporte.append(" }\n") - reporte.append(" ]\n") - reporte.append(" }\n") - reporte.append(" ]\n") - reporte.append(" }\n") - reporte.append(" ]\n") - reporte.append("}\n") - reporte.append("```\n") - reporte.append("\n---\n") - - reporte.append("## ✅ CHECKLIST DE IMPLEMENTACIÓN\n") - reporte.append("\n### Fase 1: Estructura Base\n") - reporte.append("- [ ] Crear estructura de carpetas propuesta\n") - reporte.append("- [ ] Migrar archivos .md a nueva estructura\n") - reporte.append("- [ ] Agregar front matter a todos los archivos\n") - reporte.append("- [ ] Generar indice.json desde estructura\n") - reporte.append("\n### Fase 2: Navegación\n") - reporte.append("- [ ] Implementar menú lateral jerárquico\n") - reporte.append("- [ ] Agregar breadcrumbs\n") - reporte.append("- [ ] Implementar navegación anterior/siguiente\n") - reporte.append("- [ ] Crear índice rápido con búsqueda\n") - reporte.append("\n### Fase 3: Funcionalidades\n") - reporte.append("- [ ] Implementar búsqueda avanzada\n") - reporte.append("- [ ] Agregar modo offline (PWA)\n") - reporte.append("- [ ] Implementar personalización\n") - reporte.append("- [ ] Crear sistema de tests/autoevaluaciones\n") - reporte.append("\n---\n") - - return "\n".join(reporte) - -if __name__ == "__main__": - print("Generando reportes para conversión a app digital...") - - # Reporte 1 - print("\n1. Generando reporte de archivos faltantes...") - reporte1, num_faltantes = generar_reporte_1_archivos_faltantes() - with open(BASE_DIR / "REPORTE_1_ARCHIVOS_FALTANTES.md", "w", encoding="utf-8") as f: - f.write(reporte1) - print(f" ✅ Reporte 1 generado: {num_faltantes} archivos faltantes") - - # Reporte 2 - print("\n2. Generando reporte de medios faltantes...") - reporte2, num_medios_faltantes = generar_reporte_2_multimedia_faltante() - with open(BASE_DIR / "REPORTE_2_MEDIOS_FALTANTES.md", "w", encoding="utf-8") as f: - f.write(reporte2) - print(f" ✅ Reporte 2 generado: {num_medios_faltantes} medios faltantes") - - # Reporte 3 - print("\n3. Generando reporte de recomendaciones...") - reporte3 = generar_reporte_3_recomendaciones_app() - with open(BASE_DIR / "REPORTE_3_RECOMENDACIONES_APP.md", "w", encoding="utf-8") as f: - f.write(reporte3) - print(f" ✅ Reporte 3 generado") - - print("\n✅ Todos los reportes generados exitosamente!") diff --git a/integrate_assets.py b/integrate_assets.py index b7ef8f4d..882602fd 100644 --- a/integrate_assets.py +++ b/integrate_assets.py @@ -12,7 +12,7 @@ import json # Configuración EXCEL_PATH = "/home/planetazuzu/Imágenes/medios de app/Manual_TES_Assets_Tracker.xlsx" -REPO_ROOT = Path("/home/planetazuzu/protocolo-r-pido") +REPO_ROOT = Path("/home/planetazuzu/guia-tes") EXCEL_DEST = REPO_ROOT / "Manual_TES_Assets_Tracker.xlsx" ASSETS_PLAN = REPO_ROOT / "ASSETS_PLAN.md" MANIFEST_PATH = REPO_ROOT / "manifest.json" diff --git a/manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md b/manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md deleted file mode 100644 index d4711b0d..00000000 --- a/manual-tes/BLOQUES/BLOQUE_01_OXIGENOTERAPIA.md +++ /dev/null @@ -1,701 +0,0 @@ -# BLOQUE 01 – Oxigenoterapia Básica en Emergencias Prehospitalarias (TES) - -## Manual TES Digital – Uso formativo y procedimental - -**Versión:** 1.0 -**Fecha:** 2025-12-23 -**Fuente:** Manual TES Digital - Sección 3.8.2 - ---- - -## 1. OBJETIVO DEL BLOQUE - -Proporcionar a los Técnicos de Emergencias Sanitarias (TES) los conocimientos y procedimientos básicos para la administración segura y efectiva de oxígeno en situaciones de emergencia prehospitalaria, incluyendo: - -- Identificación de situaciones que requieren oxigenoterapia -- Selección del dispositivo adecuado según la situación clínica -- Aplicación correcta de cada dispositivo -- Monitorización y ajuste según respuesta del paciente -- Cálculo de duración de botellas de oxígeno -- Prevención de errores frecuentes y garantía de seguridad - -**Uso del bloque:** -- ✅ Referencia rápida durante intervención -- ✅ Formación y actualización de conocimientos -- ✅ Apoyo al criterio profesional -- ❌ NO sustituye formación reglada ni protocolos oficiales - ---- - -## 2. INDICACIONES DE OXIGENOTERAPIA - -### Indicaciones Generales - -**Situaciones que requieren administración de oxígeno:** - -1. **Hipoxia** - - SpO2 <94% en pacientes sin EPOC - - Dificultad respiratoria - - Signos de hipoxia - -2. **Shock** - - Cualquier tipo de shock - - Hipotensión con signos de hipoperfusión - -3. **Parada Cardiorrespiratoria (PCR)** - - Durante RCP - - Apoyo ventilatorio - -4. **Traumatismo Grave** - - Politraumatismo - - Traumatismo torácico - - Traumatismo craneoencefálico - -5. **Intoxicación por Monóxido de Carbono** - - Sospecha o confirmación - - Alta concentración de O2 necesaria - -6. **Crisis Asmática Severa** - - Disnea severa - - Uso de musculatura accesoria - - SpO2 baja - -7. **EPOC Reagudizado** - - Con precaución - - Objetivo SpO2 88-92% (NO 94-98%) - - Usar O2 controlado (Venturi o flujo bajo) - -### Contraindicaciones Relativas - -**Situaciones que requieren precaución:** - -- **EPOC crónico:** Usar O2 controlado, objetivo SpO2 88-92% -- **Pacientes con riesgo de retención de CO2:** Monitorización estrecha -- **Pacientes con náuseas/vómitos:** Evitar mascarilla con reservorio - ---- - -## 3. SIGNOS CLÍNICOS QUE JUSTIFICAN SU USO - -### Signos de Hipoxia - -**Signos Objetivos:** -- SpO2 <94% (en pacientes sin EPOC) -- Taquipnea (FR >20/min en adultos) -- Bradipnea (FR <12/min en adultos) -- Uso de musculatura accesoria -- Cianosis -- Confusión o alteración del nivel de consciencia - -**Signos Subjetivos (si paciente consciente):** -- Disnea -- Sensación de ahogo -- Dificultad para hablar en frases completas - -### Signos de Shock - -- Hipotensión -- Taquicardia -- Piel pálida, fría, sudorosa -- Relleno capilar >2 segundos -- Alteración del nivel de consciencia - -### Signos de Insuficiencia Respiratoria - -- Respiración superficial -- Asimetría torácica -- Sonidos respiratorios anormales -- Dificultad para mantener vía aérea - -**Criterio de Activación:** -Si el paciente presenta cualquiera de estos signos, considerar administración de oxígeno según gravedad y situación clínica. - ---- - -## 4. OBJETIVOS DE SATURACIÓN DE OXÍGENO - -### Objetivos Generales - -**Pacientes sin EPOC:** -- **Objetivo:** SpO2 94-98% -- **Mínimo aceptable:** SpO2 ≥94% -- **Máximo recomendado:** SpO2 ≤98% (evitar hiperoxia innecesaria) - -**Pacientes con EPOC:** -- **Objetivo:** SpO2 88-92% -- **Razón:** Prevenir retención de CO2 -- **Método:** O2 controlado (Venturi o flujo bajo con gafas nasales) - -### Ajuste Según Respuesta - -**Si SpO2 no alcanza objetivo:** -1. Verificar que dispositivo está bien colocado -2. Aumentar flujo (si dispositivo lo permite) -3. Cambiar a dispositivo con mayor FiO2 -4. Revalorar necesidad de ventilación asistida - -**Si SpO2 supera objetivo (en EPOC):** -1. Reducir flujo -2. Cambiar a dispositivo con menor FiO2 -3. Monitorizar estrechamente - -**Monitorización Continua:** -- ⚠️ Monitorizar SpO2 continuamente durante oxigenoterapia -- ⚠️ Ajustar flujo/FiO2 según respuesta del paciente -- ⚠️ Verificar que el dispositivo está bien colocado y funcionando - ---- - -## 5. DISPOSITIVOS DE ADMINISTRACIÓN DE OXÍGENO - -### Gafas Nasales - -**Características:** -- **Flujo:** 1-6 L/min -- **FiO2 aproximada:** 24-44% -- **Comodidad:** Alta -- **Portabilidad:** Alta - -**Indicaciones:** -- Hipoxia leve -- Pacientes conscientes que toleran -- Necesidad de O2 de bajo flujo - -**Ventajas:** -- Cómodo para el paciente -- No interfiere con alimentación -- Permite comunicación - -**Limitaciones:** -- FiO2 limitada (máximo ~44%) -- Depende de respiración nasal -- No adecuado para hipoxia severa - -**Consideraciones:** -- Humedecer si flujo >4 L/min -- Verificar que cánulas están en fosas nasales -- No usar si paciente respira solo por boca - -### Mascarilla Simple - -**Características:** -- **Flujo:** 6-10 L/min -- **FiO2 aproximada:** 40-60% -- **Comodidad:** Media -- **Portabilidad:** Alta - -**Indicaciones:** -- Hipoxia moderada -- Pacientes que no toleran gafas nasales -- Necesidad de FiO2 intermedia - -**Ventajas:** -- Mayor FiO2 que gafas nasales -- Fácil de colocar -- Disponible en la mayoría de ambulancias - -**Limitaciones:** -- Menos cómoda que gafas nasales -- Puede causar claustrofobia -- FiO2 limitada - -**Consideraciones:** -- Flujo mínimo 6 L/min para evitar reinhalación de CO2 -- Verificar sellado adecuado -- No usar si paciente tiene náuseas/vómitos - -### Mascarilla con Reservorio (No Re-inhalación) - -**Características:** -- **Flujo:** 10-15 L/min -- **FiO2 aproximada:** 60-90% -- **Comodidad:** Baja -- **Portabilidad:** Alta - -**Indicaciones:** -- Hipoxia severa -- Shock -- Parada cardiorrespiratoria -- Necesidad de alta FiO2 - -**Ventajas:** -- Alta FiO2 (hasta 90%) -- Válvula unidireccional (evita reinhalación) -- Adecuada para situaciones críticas - -**Limitaciones:** -- Requiere flujo alto (10-15 L/min) -- Reservorio debe estar inflado -- Menos cómoda para el paciente -- Consume más O2 - -**Consideraciones:** -- Verificar que reservorio está inflado antes de usar -- Flujo mínimo 10 L/min -- No usar si paciente tiene náuseas/vómitos -- Verificar válvula unidireccional funcionando - -### Venturi - -**Características:** -- **Flujo:** Variable según dispositivo -- **FiO2 aproximada:** 24%, 28%, 35%, 40% (según color/ajuste) -- **Comodidad:** Media -- **Portabilidad:** Media - -**Indicaciones:** -- EPOC (requiere FiO2 precisa) -- Necesidad de FiO2 controlada y predecible -- Pacientes con riesgo de retención de CO2 - -**Ventajas:** -- FiO2 controlada y predecible -- Adecuada para EPOC -- Evita hiperoxia - -**Limitaciones:** -- Requiere flujo alto -- Menos portátil -- Menos disponible en algunas ambulancias - -**Consideraciones:** -- Seleccionar color/ajuste según FiO2 deseada -- Verificar que dispositivo está correctamente conectado -- Seguir instrucciones del fabricante para cada color - -**Colores Comunes:** -- **Azul:** 24% FiO2 -- **Blanco:** 28% FiO2 -- **Amarillo:** 35% FiO2 -- **Rojo:** 40% FiO2 - -### Bolsa Autoinflable (Ambú) - -**Características:** -- **Uso:** Ventilación manual asistida -- **FiO2:** Depende de conexión a O2 (con O2: hasta 90-100%) -- **Comodidad:** N/A (paciente inconsciente) -- **Portabilidad:** Alta - -**Indicaciones:** -- Paciente inconsciente con respiración inadecuada -- Apoyo ventilatorio durante RCP -- Ventilación de rescate -- Necesidad de ventilación controlada - -**Ventajas:** -- Permite ventilación controlada -- Alta FiO2 con O2 conectado (90-100%) -- Control de frecuencia y volumen -- Disponible en todas las ambulancias - -**Limitaciones:** -- Requiere técnica adecuada -- Puede causar distensión gástrica -- Requiere cánula orofaríngea si paciente inconsciente -- Consume mucho O2 - -**Consideraciones:** -- Conectar a O2 (15 L/min) para máxima FiO2 -- Usar cánula orofaríngea si paciente inconsciente -- Ventilar con frecuencia adecuada (10-12/min en adultos, 12-20/min en niños) -- Observar elevación del pecho -- Técnica C-E para sellado de mascarilla - -### Tabla de Referencia Rápida - -| Dispositivo | Flujo (L/min) | FiO2 Aproximada | Indicación Principal | -|-------------|---------------|-----------------|----------------------| -| Gafas nasales | 1-2 | 24-28% | Hipoxia leve | -| Gafas nasales | 3-4 | 32-36% | Hipoxia leve-moderada | -| Gafas nasales | 5-6 | 40-44% | Hipoxia moderada | -| Mascarilla simple | 6-8 | 40-50% | Hipoxia moderada | -| Mascarilla simple | 9-10 | 50-60% | Hipoxia moderada-severa | -| Mascarilla con reservorio | 10-12 | 60-80% | Hipoxia severa, shock | -| Mascarilla con reservorio | 13-15 | 80-90% | Hipoxia severa, PCR | -| Venturi 24% | Variable | 24% | EPOC | -| Venturi 28% | Variable | 28% | EPOC | -| Venturi 35% | Variable | 35% | EPOC moderado | -| Venturi 40% | Variable | 40% | EPOC severo | -| Ambú con O2 | 15 | 90-100% | Ventilación asistida, PCR | - ---- - -## 6. PROCEDIMIENTO BÁSICO PASO A PASO (TES) - -### Procedimiento General de Administración de Oxígeno - -**Paso 1: Valoración Inicial** -1. Valorar nivel de consciencia del paciente -2. Medir SpO2 con pulsioxímetro -3. Observar signos clínicos de hipoxia -4. Identificar si paciente tiene EPOC conocido - -**Paso 2: Selección del Dispositivo** -1. Según SpO2 y situación clínica: - - SpO2 90-94%, paciente consciente → Gafas nasales - - SpO2 85-90%, paciente consciente → Mascarilla simple - - SpO2 <85% o shock → Mascarilla con reservorio - - EPOC → Venturi (FiO2 24-28%) - - Paciente inconsciente, respiración inadecuada → Ambú -2. Verificar disponibilidad del dispositivo -3. Verificar disponibilidad de O2 suficiente - -**Paso 3: Preparación del Dispositivo** -1. Conectar dispositivo a fuente de O2 -2. Ajustar flujo según dispositivo: - - Gafas nasales: 1-6 L/min - - Mascarilla simple: 6-10 L/min - - Mascarilla con reservorio: 10-15 L/min - - Venturi: Según instrucciones del dispositivo - - Ambú: 15 L/min -3. Verificar que O2 fluye correctamente -4. Si mascarilla con reservorio: verificar que reservorio se infla - -**Paso 4: Colocación del Dispositivo** - -**Gafas Nasales:** -1. Colocar cánulas en fosas nasales -2. Ajustar tubo sobre orejas -3. Ajustar clip nasal para fijación -4. Verificar que cánulas están en posición correcta - -**Mascarilla Simple:** -1. Colocar mascarilla sobre boca y nariz -2. Ajustar goma elástica detrás de la cabeza -3. Verificar sellado adecuado -4. Ajustar flujo a mínimo 6 L/min - -**Mascarilla con Reservorio:** -1. Verificar que reservorio está inflado -2. Colocar mascarilla sobre boca y nariz -3. Ajustar goma elástica detrás de la cabeza -4. Verificar sellado adecuado -5. Ajustar flujo a mínimo 10 L/min -6. Verificar que reservorio se mantiene inflado - -**Venturi:** -1. Seleccionar color/ajuste según FiO2 deseada -2. Conectar a fuente de O2 -3. Ajustar flujo según instrucciones del dispositivo -4. Colocar mascarilla sobre boca y nariz -5. Verificar que dispositivo está correctamente conectado - -**Ambú:** -1. Conectar a fuente de O2 (15 L/min) -2. Si paciente inconsciente: colocar cánula orofaríngea -3. Colocar mascarilla sobre boca y nariz -4. Técnica C-E para sellado: - - **C:** Pulgar e índice forman "C" sobre mascarilla - - **E:** Dedos restantes forman "E" bajo mandíbula - - Elevar mandíbula hacia mascarilla -5. Comprimir bolsa observando elevación del pecho -6. Frecuencia: 10-12/min en adultos, 12-20/min en niños - -**Paso 5: Verificación y Ajuste** -1. Medir SpO2 después de 1-2 minutos -2. Observar respuesta clínica del paciente -3. Verificar que dispositivo está bien colocado -4. Ajustar flujo según respuesta: - - Si SpO2 no alcanza objetivo: aumentar flujo o cambiar dispositivo - - Si SpO2 supera objetivo (EPOC): reducir flujo o cambiar dispositivo -5. Verificar que O2 sigue fluyendo - -**Paso 6: Monitorización Continua** -1. Monitorizar SpO2 continuamente -2. Observar signos clínicos de mejora o empeoramiento -3. Verificar presión de botella periódicamente -4. Calcular duración restante de botella si uso prolongado -5. Preparar recambio de botella si es necesario - ---- - -## 7. ADVERTENCIAS, ERRORES FRECUENTES Y SEGURIDAD - -### Advertencias de Seguridad - -**Generales:** -- ⚠️ **No fumar** cerca de fuentes de oxígeno -- ⚠️ **Verificar conexiones** antes de usar -- ⚠️ **No apurar botellas** (dejar margen de seguridad del 20%) -- ⚠️ **Verificar presión** de botella antes de usar -- ⚠️ **Tener botella de repuesto** disponible - -**Específicas para EPOC:** -- ⚠️ **EPOC:** Usar O2 controlado (Venturi o flujo bajo) -- ⚠️ **Objetivo SpO2 88-92%** (NO 94-98%) -- ⚠️ **Monitorización estrecha** de nivel de consciencia -- ⚠️ **No usar mascarilla con reservorio** en EPOC (riesgo de retención CO2) - -**Específicas para Dispositivos:** -- ⚠️ **Mascarilla con reservorio:** Verificar que reservorio está inflado -- ⚠️ **Mascarilla simple:** Flujo mínimo 6 L/min -- ⚠️ **Mascarilla con reservorio:** Flujo mínimo 10 L/min -- ⚠️ **Gafas nasales:** No usar si paciente respira solo por boca -- ⚠️ **Ambú:** Conectar siempre a O2 para máxima FiO2 - -### Errores Frecuentes - -**Selección de Dispositivo:** -- ❌ Usar dispositivo con FiO2 insuficiente para la situación -- ❌ Usar mascarilla con reservorio en EPOC -- ❌ No considerar si paciente tiene EPOC conocido -- ❌ No verificar disponibilidad de dispositivo antes de seleccionar - -**Colocación:** -- ❌ Dispositivo mal colocado (fugas de aire) -- ❌ Mascarilla con reservorio sin verificar que está inflado -- ❌ Gafas nasales en paciente que respira solo por boca -- ❌ Ambú sin conectar a O2 (FiO2 baja) - -**Flujo:** -- ❌ Flujo insuficiente para el dispositivo -- ❌ Flujo excesivo en EPOC -- ❌ No ajustar flujo según respuesta del paciente -- ❌ No verificar que O2 fluye correctamente - -**Monitorización:** -- ❌ No medir SpO2 antes de iniciar oxigenoterapia -- ❌ No monitorizar SpO2 durante oxigenoterapia -- ❌ No ajustar según respuesta del paciente -- ❌ No verificar presión de botella - -**Seguridad:** -- ❌ Apurar botellas hasta el final -- ❌ No calcular duración de botella -- ❌ No tener botella de repuesto -- ❌ No verificar conexiones antes de usar - -### Consideraciones Especiales - -**Pacientes con Náuseas/Vómitos:** -- No usar mascarilla con reservorio -- Considerar gafas nasales o posición lateral si es seguro -- Preparar aspiración si es necesario - -**Pacientes Agitados:** -- Puede ser difícil mantener dispositivo colocado -- Considerar necesidad de sedación (según protocolo) -- Priorizar seguridad del paciente y del equipo - -**Uso Prolongado:** -- Calcular duración de botella al inicio -- Verificar presión periódicamente -- Planificar recambio antes de agotar botella -- Tener botella de repuesto disponible - ---- - -## 8. CONTENIDO APTO PARA APP - -### Checklists Interactivos - -**Selección de Dispositivo:** -- [ ] Valorar SpO2 inicial -- [ ] Identificar si paciente tiene EPOC -- [ ] Seleccionar dispositivo según algoritmo -- [ ] Verificar disponibilidad de dispositivo -- [ ] Verificar disponibilidad de O2 - -**Colocación de Dispositivo:** -- [ ] Conectar dispositivo a O2 -- [ ] Ajustar flujo según dispositivo -- [ ] Verificar que O2 fluye -- [ ] Colocar dispositivo correctamente -- [ ] Verificar sellado (si mascarilla) -- [ ] Verificar inflado de reservorio (si aplica) - -**Verificación Post-Colocación:** -- [ ] Medir SpO2 después de 1-2 min -- [ ] Observar respuesta clínica -- [ ] Verificar dispositivo bien colocado -- [ ] Ajustar flujo según respuesta -- [ ] Verificar presión de botella - -### Calculadoras - -**Cálculo de Duración de Botella:** -- Fórmula: (Presión en bar × Volumen en L) ÷ Flujo en L/min -- Entrada: Presión, volumen, flujo -- Salida: Duración en minutos -- Incluir margen de seguridad del 20% - -**Tabla de Referencia Rápida:** -- Botellas: 2L, 5L, 10L -- Flujos: 10, 15, 20 L/min -- Tiempos con margen de seguridad - -### Guías Visuales - -**Selección de Dispositivo según SpO2:** -- Diagrama de flujo visual -- Indicaciones por dispositivo -- Consideraciones especiales (EPOC) - -**Colocación de Dispositivos:** -- Imágenes/diagramas de colocación correcta -- Técnica C-E para Ambú -- Verificación de sellado - -**Rangos de FiO2:** -- Tabla visual interactiva -- Selección según dispositivo y flujo -- Objetivos de SpO2 - -### Alertas y Recordatorios - -**Alertas de Seguridad:** -- Verificar presión de botella antes de usar -- No apurar botellas (margen 20%) -- EPOC: objetivo SpO2 88-92% -- Flujo mínimo según dispositivo - -**Recordatorios de Verificación:** -- Medir SpO2 después de 1-2 min -- Verificar dispositivo bien colocado -- Ajustar flujo según respuesta -- Calcular duración de botella si uso prolongado - ---- - -## 9. CONTENIDO SOLO DOCUMENTAL - -### Fundamentos Teóricos - -**Fisiología de la Oxigenación:** -- Transporte de oxígeno -- Saturación de hemoglobina -- Difusión alveolo-capilar -- Factores que afectan la oxigenación - -**Fisiopatología de la Hipoxia:** -- Tipos de hipoxia -- Compensación del organismo -- Signos y síntomas -- Consecuencias de la hipoxia prolongada - -### Consideraciones Avanzadas - -**EPOC y Retención de CO2:** -- Mecanismo de retención de CO2 -- Por qué evitar alta FiO2 en EPOC -- Monitorización de nivel de consciencia -- Signos de retención de CO2 - -**Hiperoxia:** -- Efectos de la hiperoxia -- Cuándo evitar hiperoxia innecesaria -- Objetivos de SpO2 según situación - -**Ventilación Mecánica:** -- Indicaciones de ventilación mecánica -- Diferencia con oxigenoterapia -- Consideraciones para TES - -### Contexto y Referencias - -**Guías Oficiales:** -- Referencias a guías ERC, AHA, SEMES -- Protocolos institucionales -- Evidencia científica - -**Formación Continua:** -- Actualización de conocimientos -- Práctica supervisada -- Simulaciones - ---- - -## 10. PUNTOS CLAVE PARA TES - -### Resumen Ejecutivo - -**1. Valoración Inicial:** -- Medir SpO2 siempre antes de iniciar oxigenoterapia -- Identificar si paciente tiene EPOC conocido -- Observar signos clínicos de hipoxia - -**2. Selección de Dispositivo:** -- SpO2 90-94%, consciente → Gafas nasales -- SpO2 85-90%, consciente → Mascarilla simple -- SpO2 <85% o shock → Mascarilla con reservorio -- EPOC → Venturi (FiO2 24-28%) -- Inconsciente, respiración inadecuada → Ambú - -**3. Objetivos de SpO2:** -- Pacientes sin EPOC: 94-98% -- Pacientes con EPOC: 88-92% - -**4. Flujos Mínimos:** -- Gafas nasales: 1-6 L/min -- Mascarilla simple: 6 L/min mínimo -- Mascarilla con reservorio: 10 L/min mínimo -- Ambú: 15 L/min - -**5. Verificaciones Obligatorias:** -- SpO2 después de 1-2 minutos -- Dispositivo bien colocado -- O2 fluyendo correctamente -- Presión de botella (si uso prolongado) - -**6. Errores a Evitar:** -- No verificar SpO2 antes y durante -- Usar dispositivo con FiO2 insuficiente -- Mascarilla con reservorio en EPOC -- Flujo insuficiente para el dispositivo -- Apurar botellas hasta el final - -**7. Seguridad:** -- No fumar cerca de O2 -- Verificar conexiones antes de usar -- Margen de seguridad 20% en botellas -- Tener botella de repuesto disponible - -**8. Cálculo de Duración:** -- Fórmula: (Presión × Volumen) ÷ Flujo -- Incluir margen de seguridad 20% -- Planificar recambio antes de agotar - -### Checklist Rápido TES - -**Antes de Iniciar:** -- [ ] Medir SpO2 inicial -- [ ] Identificar EPOC -- [ ] Seleccionar dispositivo adecuado -- [ ] Verificar disponibilidad de O2 -- [ ] Verificar presión de botella - -**Durante Uso:** -- [ ] Dispositivo bien colocado -- [ ] Flujo correcto según dispositivo -- [ ] O2 fluyendo correctamente -- [ ] Monitorizar SpO2 continuamente -- [ ] Ajustar según respuesta - -**Seguridad:** -- [ ] No fumar cerca de O2 -- [ ] Verificar conexiones -- [ ] Calcular duración de botella -- [ ] Tener botella de repuesto -- [ ] No apurar botellas - ---- - -## NOTA FINAL DE SEGURIDAD - -Este contenido es de **uso exclusivo como apoyo** y **NO sustituye**: -- ❌ La formación reglada del profesional -- ❌ Los protocolos oficiales de la institución -- ❌ El criterio clínico del TES o médico -- ❌ La práctica supervisada y experiencia - -El profesional que utiliza este contenido mantiene la **responsabilidad completa** de sus actuaciones y debe adaptar las técnicas a cada situación específica. - -**Validación Médica:** Pendiente de validación médica profesional antes de uso en producción. - ---- - -**Versión:** 1.0 -**Última actualización:** 2025-12-23 -**Fuente:** Manual TES Digital - Sección 3.8.2 - diff --git a/manual-tes/BLOQUES/BLOQUE_02_MATERIAL_E_INMOVILIZACION.md b/manual-tes/BLOQUES/BLOQUE_02_MATERIAL_E_INMOVILIZACION.md deleted file mode 100644 index d480400b..00000000 --- a/manual-tes/BLOQUES/BLOQUE_02_MATERIAL_E_INMOVILIZACION.md +++ /dev/null @@ -1,1102 +0,0 @@ -# BLOQUE 02 – Material e Inmovilización en Emergencias Prehospitalarias (TES) - -## Manual TES Digital – Procedimientos seguros y estandarizados - -**Versión:** 1.0 -**Fecha:** 2025-12-23 -**Estado:** Estructura base - Preparado para ampliar - ---- - -## 1. OBJETIVO DEL BLOQUE - -Proporcionar a los Técnicos de Emergencias Sanitarias (TES) los conocimientos y procedimientos básicos para el uso seguro y efectivo del material de inmovilización en situaciones de emergencia prehospitalaria, incluyendo: - -- Identificación y selección del material adecuado según la situación -- Técnicas básicas de inmovilización -- Procedimientos paso a paso estandarizados -- Prevención de errores frecuentes -- Consideraciones de seguridad - -**Uso del bloque:** -- ✅ Referencia rápida durante intervención -- ✅ Formación y actualización de conocimientos -- ✅ Apoyo al criterio profesional -- ❌ NO sustituye formación reglada ni protocolos oficiales -- ❌ NO incluye decisiones sobre necesidad de inmovilización (criterio médico) - -**Alcance del bloque:** -- Material básico de inmovilización -- Procedimientos estandarizados -- Técnicas fundamentales -- Seguridad en el uso del material - -**Limitaciones:** -- No incluye técnicas avanzadas (pendiente de ampliar) -- No incluye casos especiales complejos (pendiente de ampliar) -- No incluye decisiones sobre indicación de inmovilización (criterio médico) - ---- - -## 2. PRINCIPIOS GENERALES DE INMOVILIZACIÓN - -### Principios Fundamentales - -**1. Seguridad Primero** -- La seguridad del paciente y del equipo es la máxima prioridad -- No realizar inmovilización si la escena es insegura -- Evaluar continuamente los riesgos durante el procedimiento - -**2. Inmovilización Completa** -- Inmovilizar la lesión y las articulaciones adyacentes -- Prevenir movimiento que pueda agravar la lesión -- Mantener alineación anatómica - -**3. Verificación Continua** -- Verificar pulso/circulación antes y después de inmovilizar -- Verificar función neurológica si es posible -- Verificar vía aérea después de inmovilización espinal - -**4. Acolchado y Protección** -- Acolchar todos los puntos de presión -- Proteger prominencias óseas -- Prevenir lesiones por el material de inmovilización - -**5. Comunicación** -- Explicar al paciente lo que se va a hacer (si está consciente) -- Coordinar con el equipo durante el procedimiento -- Comunicar cualquier problema o dificultad - -### Consideraciones Generales - -**Antes de Inmovilizar:** -- Valorar la situación y mecanismo lesional -- Identificar el material necesario -- Verificar que el material está disponible y en buen estado -- Preparar el material antes de iniciar - -**Durante la Inmovilización:** -- Mantener alineación durante todo el proceso -- No forzar posiciones -- Trabajar de forma coordinada si hay varios profesionales -- Verificar continuamente la posición del paciente - -**Después de Inmovilizar:** -- Verificar pulso/circulación -- Verificar función neurológica si es posible -- Verificar vía aérea (especialmente en inmovilización espinal) -- Asegurar que el material está bien fijado -- Documentar el procedimiento - -### Indicaciones Generales (Criterio Médico) - -*Nota: La decisión de inmovilizar corresponde al criterio médico. El TES aplica la inmovilización según indicación.* - -**Situaciones que pueden requerir inmovilización:** -- Mecanismo lesional de riesgo -- Dolor en columna vertebral -- Déficit neurológico -- Alteración del nivel de consciencia -- Traumatismo con sospecha de lesión espinal - -**El TES debe:** -- Aplicar la inmovilización según protocolo e indicación -- Verificar que la inmovilización es adecuada -- Comunicar cualquier problema o dificultad -- NO decidir sobre la necesidad de inmovilización (criterio médico) - ---- - -## 2.3 Marco Conceptual ATLS y Fundamentos de la Evaluación Inicial en Trauma - -### Introducción - -El protocolo ATLS (Advanced Trauma Life Support) establece el marco conceptual y metodológico para la atención inicial del paciente traumatizado. Esta sección proporciona el contexto formativo que permite al TES comprender el "por qué" de las actuaciones que realiza, dando coherencia a los procedimientos operativos descritos en este bloque. - -**Características de esta sección:** -- ✅ Contenido formativo y conceptual -- ✅ Contexto para procedimientos operativos -- ✅ Comprensión del marco de trabajo -- ❌ NO es protocolo operativo paso a paso -- ❌ NO incluye técnicas detalladas (ver bloques específicos) -- ❌ NO es contenido para APP - ---- - -### Origen del ATLS y Concepto de la "Primera Hora" - -**Origen Histórico:** -El protocolo ATLS fue desarrollado por el American College of Surgeons a finales de los años 70, tras un accidente aéreo en el que un cirujano identificó la necesidad de un enfoque sistemático y estandarizado para la atención inicial del trauma. - -**Concepto de la "Primera Hora":** -- La primera hora tras el traumatismo es crítica para la supervivencia -- Durante esta hora se deben identificar y tratar los problemas que amenazan la vida -- El tiempo es un factor determinante en el pronóstico -- La atención sistemática y ordenada maximiza las posibilidades de supervivencia - -**Aplicación en Prehospitalario:** -- El TES inicia la evaluación y tratamiento en la escena -- La atención prehospitalaria es parte de esta "primera hora" -- La coordinación con el hospital es esencial -- El tiempo de traslado debe optimizarse - -**Relevancia para el TES:** -- El TES es parte del equipo que trabaja en esta "primera hora" -- Las actuaciones prehospitalarias son críticas para el resultado final -- La eficiencia y sistematicidad son esenciales -- Cada minuto cuenta - ---- - -### Filosofía del Enfoque Sistemático - -**Principio Fundamental:** -El ATLS se basa en un enfoque sistemático que prioriza la identificación y tratamiento de problemas que amenazan la vida en orden de importancia, no en orden de aparición. - -**Características del Enfoque Sistemático:** - -**1. Orden de Prioridad:** -- Los problemas más críticos se identifican y tratan primero -- No se avanza al siguiente paso hasta resolver problemas del anterior (salvo si es necesario simultáneamente) -- La priorización salva vidas - -**2. Evaluación Estructurada:** -- Secuencia clara y predecible (ABCDE) -- No se olvidan pasos importantes -- Todos los profesionales siguen la misma secuencia -- Facilita la coordinación del equipo - -**3. Tratamiento Inmediato:** -- Los problemas identificados se tratan inmediatamente -- No se espera a completar toda la evaluación -- Tratamiento y evaluación pueden ser simultáneos - -**4. Re-evaluación Continua:** -- El paciente puede cambiar durante la atención -- Los problemas pueden aparecer o agravarse -- La re-evaluación detecta cambios -- Permite ajustar el tratamiento - -**Ventajas del Enfoque Sistemático:** -- Reduce errores por omisión -- Facilita la coordinación del equipo -- Establece un lenguaje común -- Mejora la eficiencia -- Aumenta la seguridad del paciente - -**Aplicación por el TES:** -- El TES aplica este enfoque sistemático en la escena -- Sigue la secuencia ABCDE según protocolo -- Trata problemas inmediatamente según competencia -- Re-evalúa continuamente -- Comunica hallazgos al equipo - ---- - -### Visión Global del Protocolo ABCDE - -**Concepto:** -El protocolo ABCDE es la herramienta estructurada del ATLS para la evaluación primaria del paciente traumatizado. Cada letra representa una prioridad y un área de evaluación. - -**Estructura del ABCDE:** - -**A - Airway (Vía Aérea) con Control Cervical:** -- **Prioridad:** Máxima - Sin vía aérea no hay vida -- **Objetivo:** Asegurar vía aérea permeable y prevenir lesión cervical secundaria -- **Evaluación:** Permeabilidad, sonidos, obstrucciones -- **Tratamiento:** Apertura de vía aérea, control cervical, aspiración, dispositivos básicos -- **Rol del TES:** Aplicación de técnicas básicas según competencia (ver BLOQUE 2.1 y 2.2) - -**B - Breathing (Ventilación y Respiración):** -- **Prioridad:** Alta - Sin oxigenación no hay vida -- **Objetivo:** Evaluar y asegurar ventilación y oxigenación adecuadas -- **Evaluación:** Frecuencia, profundidad, simetría, SpO2, auscultación -- **Tratamiento:** Oxigenoterapia, ventilación asistida, posicionamiento -- **Rol del TES:** Evaluación, oxigenoterapia, ventilación básica (ver BLOQUE 01) - -**C - Circulation (Circulación y Control de Hemorragias):** -- **Prioridad:** Alta - Sin circulación no hay vida -- **Objetivo:** Evaluar circulación y controlar hemorragias que amenazan la vida -- **Evaluación:** Pulso, tensión arterial, relleno capilar, hemorragias -- **Tratamiento:** Control de hemorragias, acceso vascular, fluidoterapia -- **Rol del TES:** Control de hemorragias, acceso vascular básico según protocolo - -**D - Disability (Valoración Neurológica):** -- **Prioridad:** Media-Alta - Detecta problemas neurológicos críticos -- **Objetivo:** Evaluar función neurológica y nivel de consciencia -- **Evaluación:** Nivel de consciencia, pupilas, respuesta motora, glucemia -- **Tratamiento:** Mantener vía aérea, tratamiento de hipoglucemia, posicionamiento -- **Rol del TES:** Evaluación de nivel de consciencia, pupilas, glucemia, aplicación de Glasgow - -**E - Exposure (Exposición y Control del Ambiente):** -- **Prioridad:** Media - Identifica lesiones ocultas -- **Objetivo:** Exponer al paciente para evaluación completa y prevenir hipotermia -- **Evaluación:** Inspección completa, búsqueda de lesiones ocultas -- **Tratamiento:** Prevención de hipotermia, control del ambiente -- **Rol del TES:** Exposición, inspección, prevención de hipotermia - -**Principio de No Avanzar:** -- No se avanza al siguiente paso hasta resolver problemas críticos del anterior -- Excepción: Si es necesario tratar simultáneamente (ej: hemorragia masiva mientras se asegura vía aérea) -- La priorización salva vidas - -**Rol del TES en el ABCDE:** -- Participa activamente en todos los pasos según competencia -- Aplica técnicas básicas en cada área -- Identifica problemas y comunica al médico -- Asiste al médico en técnicas avanzadas -- Documenta hallazgos - ---- - -### Importancia de la Reevaluación Continua - -**Concepto:** -La reevaluación continua es un principio fundamental del ATLS. El paciente traumatizado es dinámico y puede cambiar durante la atención. - -**Por Qué es Importante:** -- Los problemas pueden aparecer después de la evaluación inicial -- Los problemas identificados pueden agravarse -- El tratamiento puede causar nuevos problemas -- El tiempo puede revelar problemas no evidentes inicialmente - -**Cuándo Re-evaluar:** -- Después de cualquier intervención -- Después de movilización del paciente -- Durante el traslado (periódicamente) -- Si el paciente empeora -- Si aparecen nuevos signos o síntomas - -**Qué Re-evaluar:** -- Todos los componentes del ABCDE -- Efectividad del tratamiento aplicado -- Nuevos problemas que puedan haber aparecido -- Cambios en el estado del paciente - -**Re-evaluación Secundaria:** -- Después de completar la evaluación primaria (ABCDE) -- Evaluación más detallada de cada sistema -- Búsqueda de lesiones no críticas -- Historial completo si es posible - -**Aplicación por el TES:** -- Re-evaluar continuamente durante la atención -- Comunicar cambios al médico -- Ajustar tratamiento según protocolo -- Documentar cambios en el estado - -**Principio:** -- El paciente no es estático -- La atención no es un acto único -- La re-evaluación es parte del proceso -- Los cambios requieren ajuste del tratamiento - ---- - -### Consideraciones Generales en Poblaciones Especiales - -**Pacientes Pediátricos:** - -**Diferencias Anatómicas y Fisiológicas:** -- Cabeza proporcionalmente más grande → mayor riesgo de lesión cervical -- Vía aérea más pequeña y vulnerable -- Superficie corporal mayor → mayor riesgo de hipotermia -- Compensación mejor que adultos → puede descompensar bruscamente - -**Adaptaciones del ABCDE:** -- **A:** Control cervical especialmente importante -- **B:** Ventilaciones más críticas (causa más frecuente es respiratoria) -- **C:** Signos de shock pueden aparecer más tarde -- **D:** Evaluación adaptada a la edad -- **E:** Prevención de hipotermia especialmente importante - -**Pacientes Geriátricos:** - -**Consideraciones Especiales:** -- Medicación crónica que puede afectar respuesta -- Fragilidad ósea → mayor riesgo de fracturas -- Compensación limitada → descompensación más rápida -- Comorbilidades que complican el cuadro - -**Adaptaciones:** -- Considerar medicación en evaluación -- Mayor precaución en movilizaciones -- Monitorización más estrecha -- Comunicación con familiares sobre historial médico - -**Pacientes Embarazadas:** - -**Consideraciones:** -- Dos pacientes: madre y feto -- Cambios fisiológicos del embarazo -- Posición de decúbito supino puede comprometer circulación -- Prioridad: estabilizar madre para salvar feto - -**Adaptaciones:** -- Posición lateral izquierda si es posible (evitar compresión vena cava) -- Considerar edad gestacional -- Comunicar embarazo al hospital -- Evaluación fetal si es posible - -**Aplicación por el TES:** -- Identificar población especial -- Adaptar técnicas según consideraciones -- Comunicar características especiales al médico -- Aplicar protocolos específicos si existen - ---- - -### Valor del ATLS como Lenguaje Común en Emergencias - -**Estándar Internacional:** -- El ATLS es un estándar reconocido internacionalmente -- Establece un lenguaje común entre profesionales -- Facilita la comunicación y coordinación -- Mejora la calidad de la atención - -**Comunicación Eficiente:** -- Todos los profesionales entienden el mismo lenguaje -- La comunicación es más rápida y precisa -- Se reducen malentendidos -- La coordinación es más efectiva - -**Transferencia de Información:** -- Al transferir paciente, se usa el mismo lenguaje -- La información se transmite de forma estructurada -- Se facilita la continuidad de la atención -- Se reducen errores de comunicación - -**Formación Estándar:** -- Todos los profesionales reciben formación similar -- Se establecen competencias comunes -- Se facilita el trabajo en equipo -- Se mejora la seguridad del paciente - -**Aplicación en Prehospitalario:** -- El TES usa el mismo lenguaje que el hospital -- La transferencia de información es más eficiente -- La coordinación es más efectiva -- Se mejora la continuidad de la atención - -**Beneficio para el TES:** -- Comprende el marco de trabajo del equipo completo -- Comunica de forma eficiente con otros profesionales -- Participa activamente en el equipo multidisciplinar -- Su trabajo se integra coherentemente en el proceso global - ---- - -### Integración con Procedimientos Operativos - -**Relación con Bloques Operativos:** - -**BLOQUE 2.1 (Collarín Cervical):** -- Se aplica en el paso **A** del ABCDE -- El control cervical es parte de la evaluación primaria -- La colocación del collarín sigue el protocolo ATLS - -**BLOQUE 2.2 (Inmovilización Manual):** -- Se aplica desde el primer contacto (paso **A**) -- Es la primera técnica de inmovilización según ATLS -- Prepara para la colocación de dispositivos - -**BLOQUE 01 (Oxigenoterapia):** -- Se aplica en el paso **B** del ABCDE -- La oxigenoterapia es parte del soporte respiratorio -- Sigue los principios de evaluación y tratamiento inmediato - -**Otros Procedimientos:** -- Todos los procedimientos operativos se integran en el marco ATLS -- Cada procedimiento tiene su lugar en la secuencia ABCDE -- La comprensión del marco ATLS da coherencia a los procedimientos - -**Principio de Integración:** -- Los procedimientos operativos no son acciones aisladas -- Forman parte de un enfoque sistemático -- La comprensión del marco mejora la aplicación de los procedimientos -- El TES entiende "por qué" hace lo que hace - ---- - -## 3. MATERIAL DE INMOVILIZACIÓN - -### 3.1 Collarín Cervical - -**Descripción:** -Dispositivo rígido o semirrígido que inmoviliza la columna cervical, previniendo movimientos de flexión, extensión y rotación. - -**Tipos:** -- Rígidos (plástico duro) -- Semirrígidos (espuma con estructura rígida) -- Tallas: Pequeña, mediana, grande - -**Componentes:** -- Parte anterior (soporte mentón) -- Parte posterior (soporte occipital) -- Sistema de ajuste (velcro o cierre) - -**Selección de Talla:** -- **Talla pequeña:** Niños y adultos de constitución pequeña -- **Talla mediana:** Adultos estándar -- **Talla grande:** Adultos de constitución grande - -**Medición:** -- Desde la base del mentón hasta la parte superior del esternón -- Verificar que no comprime la vía aérea -- Verificar que soporta correctamente la cabeza - -**Consideraciones:** -- ⚠️ Mantener alineación manual durante todo el proceso de colocación -- ⚠️ No retirar hasta valoración médica completa -- ⚠️ Verificar que no comprime vía aérea después de colocar -- ⚠️ Ajustar correctamente para evitar movimiento - -*Nota: Técnica detallada de colocación pendiente de ampliar en sección de procedimientos.* - ---- - -### 3.2 Inmovilización Manual Básica - -**Descripción:** -Técnica de inmovilización manual de la cabeza y cuello mientras se prepara o coloca el material de inmovilización. - -**Principios:** -- Mantener alineación neutra de la cabeza -- Evitar movimientos de flexión, extensión o rotación -- Sujetar firmemente pero sin comprimir -- Mantener hasta que el material esté colocado y fijado - -**Técnica Básica:** -- Colocarse en la cabecera del paciente -- Colocar manos a ambos lados de la cabeza -- Sujetar cabeza y cuello manteniendo alineación -- No soltar hasta que el material esté fijado - -**Consideraciones:** -- ⚠️ Mantener inmovilización manual durante todo el proceso -- ⚠️ No realizar movimientos bruscos -- ⚠️ Coordinar con el equipo si hay cambio de reanimador -- ⚠️ Comunicar antes de soltar - -*Nota: Técnicas avanzadas y variantes pendientes de ampliar.* - ---- - -### 3.3 Tablero Espinal - -**Descripción:** -Tabla rígida diseñada para inmovilización completa de la columna vertebral, desde cabeza hasta pies. - -**Componentes:** -- Tabla rígida (plástico o material compuesto) -- Sistema de correas (mínimo 4: tórax, pelvis, muslos, tobillos) -- Agujeros para acceso a paciente -- Sistema de sujeción de cabeza (bloques laterales o cinta) - -**Características:** -- Longitud ajustable o fija -- Ancho estándar para adultos -- Peso ligero pero resistente -- Compatible con sistemas de sujeción - -**Uso:** -- Inmovilización espinal completa -- Traslado de pacientes con sospecha de lesión espinal -- Extracción de vehículos -- Situaciones que requieren inmovilización completa - -**Consideraciones:** -- ⚠️ Acolchar espacios vacíos -- ⚠️ Usar mínimo 4 correas -- ⚠️ Verificar que correas no comprimen -- ⚠️ Inmovilizar cabeza con bloques o cinta -- ⚠️ Verificar vía aérea después de colocar - -*Nota: Procedimiento detallado de colocación pendiente de ampliar.* - ---- - -### 3.4 Colchón de Vacío - -**Descripción:** -Sistema de inmovilización que utiliza una bolsa con perlas de poliestireno que se adapta al cuerpo del paciente al extraer el aire, creando una inmovilización rígida y personalizada. - -**Componentes:** -- Bolsa con perlas de poliestireno -- Válvula de vacío -- Aspirador portátil o de pared -- Funda protectora (opcional) - -**Características:** -- Se adapta a la forma del paciente -- Rígido después de extraer el aire -- Reutilizable -- Ligero cuando está vacío - -**Uso:** -- Inmovilización espinal -- Fracturas complejas -- Pacientes con deformidades -- Situaciones que requieren inmovilización personalizada - -**Consideraciones:** -- ⚠️ Verificar que válvula funciona correctamente -- ⚠️ Extraer aire completamente -- ⚠️ Verificar rigidez antes de usar -- ⚠️ No perforar la bolsa -- ⚠️ Verificar que no comprime vía aérea - -*Nota: Procedimiento detallado de uso pendiente de ampliar.* - ---- - -### 3.5 Férulas (Rígidas y de Vacío) - -**Descripción:** -Dispositivos para inmovilización de extremidades, previniendo movimiento de la lesión y articulaciones adyacentes. - -**Tipos:** - -**Férulas Rígidas:** -- Material: Aluminio, plástico rígido -- Forma: Rectangulares, en L, ajustables -- Uso: Fracturas de extremidades -- Ventajas: Estabilidad, fácil aplicación -- Limitaciones: Requiere acolchado, menos adaptable - -**Férulas Neumáticas:** -- Material: Plástico con válvula de aire -- Forma: Adaptable -- Uso: Fracturas, inmovilización temporal -- Ventajas: Adaptable, compresión controlada -- Limitaciones: No sobre-inflar, verificar pulso después - -**Férulas de Vacío:** -- Material: Bolsa con perlas de poliestireno -- Forma: Adaptable -- Uso: Fracturas complejas, inmovilización personalizada -- Ventajas: Muy adaptable, mantiene forma -- Limitaciones: Requiere aspirador, verificar rigidez - -**Consideraciones Generales:** -- ⚠️ Acolchar puntos de presión antes de aplicar -- ⚠️ Verificar pulso distal antes y después -- ⚠️ Inmovilizar articulaciones proximal y distal -- ⚠️ No sobre-ajustar (riesgo de síndrome compartimental) -- ⚠️ Exponer la extremidad para valoración visual - -*Nota: Técnicas específicas por tipo de férula pendientes de ampliar.* - ---- - -### 3.6 Camilla / Ferno - -**Descripción:** -Sistema de transporte del paciente inmovilizado, compatible con tablero espinal y otros sistemas de inmovilización. - -**Tipos:** - -**Camilla Rígida:** -- Estructura rígida con patas plegables -- Compatible con tablero espinal -- Sistema de elevación (hidráulico o manual) -- Ruedas para transporte - -**Ferno (Férula de Kendrick):** -- Estructura rígida para inmovilización de extremidades inferiores -- Ajustable a la longitud del paciente -- Sistema de correas -- Compatible con camilla - -**Características:** -- Peso ligero pero resistente -- Fácil de limpiar y desinfectar -- Compatible con sistemas de sujeción -- Sistema de elevación para carga en ambulancia - -**Consideraciones:** -- ⚠️ Verificar que patas están bloqueadas antes de usar -- ⚠️ Verificar que sistema de elevación funciona -- ⚠️ Coordinar elevación con el equipo -- ⚠️ Mantener alineación durante elevación - -*Nota: Procedimientos de uso pendientes de ampliar.* - ---- - -### 3.7 Salvafast y Sistemas de Sujeción - -**Descripción:** -Cánula orofaríngea (Salvafast) y sistemas de sujeción para mantener vía aérea y posición del paciente durante inmovilización. - -**Salvafast (Cánula Orofaríngea):** - -**Descripción:** -Dispositivo que mantiene la vía aérea permeable en pacientes inconscientes sin reflejo nauseoso. - -**Tallas:** -- **Talla pequeña (Guedel 0-1):** Lactantes -- **Talla mediana (Guedel 2-3):** Niños -- **Talla grande (Guedel 4-5):** Adultos - -**Medición:** -- Desde comisura labial hasta ángulo mandibular - -**Indicaciones:** -- Paciente inconsciente sin reflejo nauseoso -- Mantener vía aérea permeable -- Facilitar ventilación con Ambú - -**Consideraciones:** -- ⚠️ Solo en pacientes inconscientes -- ⚠️ Verificar talla correcta -- ⚠️ No usar si paciente tiene reflejo nauseoso -- ⚠️ Verificar posición después de colocar - -**Sistemas de Sujeción:** - -**Cintas de Sujeción:** -- Para fijar cabeza en tablero espinal -- Para fijar extremidades en férulas -- Material: Cinta adhesiva o velcro - -**Bloques Laterales:** -- Para inmovilización lateral de cabeza -- Compatible con tablero espinal -- Material: Espuma rígida - -**Consideraciones:** -- ⚠️ No comprimir vía aérea -- ⚠️ Verificar que sujeción es segura -- ⚠️ No obstruir acceso a paciente - -*Nota: Técnicas de colocación pendientes de ampliar.* - ---- - -## 4. PROCEDIMIENTOS BÁSICOS PASO A PASO (TES) - -### Procedimiento General de Inmovilización Espinal - -**Paso 1: Preparación** -1. Valorar seguridad de la escena -2. Identificar material necesario -3. Verificar que material está disponible y en buen estado -4. Preparar material antes de iniciar -5. Coordinar con el equipo - -**Paso 2: Inmovilización Manual** -1. Colocarse en la cabecera del paciente -2. Colocar manos a ambos lados de la cabeza -3. Sujetar cabeza y cuello manteniendo alineación neutra -4. Mantener inmovilización manual durante todo el proceso -5. No soltar hasta que material esté fijado - -**Paso 3: Colocación de Collarín** -1. Medir talla aproximada -2. Mantener inmovilización manual -3. Colocar collarín según técnica -4. Ajustar correctamente -5. Verificar que no comprime vía aérea -6. Verificar que soporta correctamente la cabeza - -*Nota: Técnica detallada de colocación de collarín pendiente de ampliar.* - -**Paso 4: Colocación en Tablero Espinal** -1. Mantener inmovilización manual y collarín -2. Colocar tablero espinal -3. Deslizar paciente sobre tablero (si es necesario) -4. Acolchar espacios vacíos -5. Colocar correas (mínimo 4) -6. Ajustar correas sin comprimir -7. Inmovilizar cabeza con bloques o cinta -8. Verificar vía aérea - -*Nota: Técnica detallada de colocación en tablero pendiente de ampliar.* - -**Paso 5: Verificación** -1. Verificar pulso/circulación -2. Verificar función neurológica si es posible -3. Verificar vía aérea -4. Verificar que material está bien fijado -5. Verificar que no hay compresiones -6. Documentar procedimiento - -### Procedimiento General de Inmovilización de Extremidad - -**Paso 1: Preparación** -1. Exponer la extremidad -2. Valorar lesión visualmente (sin mover) -3. Identificar material necesario -4. Preparar material (acolchar si es necesario) - -**Paso 2: Verificación Pre-Inmovilización** -1. Verificar pulso distal -2. Verificar función neurológica si es posible -3. Verificar color y temperatura -4. Documentar estado antes de inmovilizar - -**Paso 3: Aplicación de Férula** -1. Acolchar puntos de presión -2. Colocar férula según técnica -3. Ajustar sin comprimir -4. Fijar con vendas o correas -5. Verificar que articulaciones adyacentes están inmovilizadas - -*Nota: Técnicas específicas por tipo de férula pendientes de ampliar.* - -**Paso 4: Verificación Post-Inmovilización** -1. Verificar pulso distal -2. Verificar color y temperatura -3. Verificar que no hay compresiones -4. Verificar que inmovilización es adecuada -5. Documentar procedimiento - -*Nota: Procedimientos específicos por tipo de material y situación pendientes de ampliar.* - ---- - -## 5. ERRORES FRECUENTES Y ADVERTENCIAS DE SEGURIDAD - -### Errores Frecuentes - -**Selección de Material:** -- ❌ Talla incorrecta de collarín -- ❌ Material inadecuado para la situación -- ❌ No verificar que material está en buen estado -- ❌ No preparar material antes de iniciar - -**Colocación:** -- ❌ No mantener inmovilización manual durante colocación -- ❌ Colocar collarín sin medir talla -- ❌ No acolchar puntos de presión -- ❌ Correas demasiado ajustadas (compresión) -- ❌ Inmovilización incompleta (no incluir articulaciones adyacentes) - -**Verificación:** -- ❌ No verificar pulso/circulación antes y después -- ❌ No verificar vía aérea después de inmovilización espinal -- ❌ No verificar función neurológica si es posible -- ❌ No verificar que material está bien fijado - -**Comunicación:** -- ❌ No coordinar con el equipo -- ❌ No comunicar problemas o dificultades -- ❌ No explicar al paciente (si está consciente) - -### Advertencias de Seguridad - -**Generales:** -- ⚠️ **Nunca inmovilizar** si la escena es insegura -- ⚠️ **Mantener alineación** durante todo el proceso -- ⚠️ **No forzar posiciones** que causen dolor o resistencia -- ⚠️ **Verificar continuamente** pulso, circulación y vía aérea -- ⚠️ **No apresurarse** - proceder de forma controlada - -**Específicas para Collarín:** -- ⚠️ **Mantener inmovilización manual** durante colocación -- ⚠️ **No comprimir vía aérea** - verificar después de colocar -- ⚠️ **No retirar** hasta valoración médica completa -- ⚠️ **Talla correcta** - verificar antes de colocar - -**Específicas para Tablero Espinal:** -- ⚠️ **Mínimo 4 correas** - tórax, pelvis, muslos, tobillos -- ⚠️ **Acolchar espacios vacíos** - prevenir lesiones por presión -- ⚠️ **Verificar vía aérea** después de colocar -- ⚠️ **Inmovilizar cabeza** con bloques o cinta - -**Específicas para Férulas:** -- ⚠️ **Acolchar puntos de presión** antes de aplicar -- ⚠️ **Verificar pulso distal** antes y después -- ⚠️ **No sobre-ajustar** - riesgo de síndrome compartimental -- ⚠️ **Inmovilizar articulaciones** proximal y distal - -**Específicas para Salvafast:** -- ⚠️ **Solo en pacientes inconscientes** - no usar si tiene reflejo nauseoso -- ⚠️ **Talla correcta** - verificar antes de colocar -- ⚠️ **Verificar posición** después de colocar -- ⚠️ **No empujar lengua** hacia atrás - -### Consideraciones Especiales - -**Pacientes Conscientes:** -- Explicar lo que se va a hacer -- Pedir colaboración si es posible -- No forzar si hay resistencia significativa -- Comunicar cualquier problema - -**Pacientes Inconscientes:** -- Priorizar vía aérea -- Considerar Salvafast si es necesario -- Verificar vía aérea después de inmovilización -- Monitorizar nivel de consciencia - -**Situaciones de Riesgo:** -- Evaluar continuamente la seguridad -- No comprometer seguridad del equipo -- Comunicar problemas inmediatamente -- Retirarse si la situación se vuelve insegura - -*Nota: Casos especiales y situaciones complejas pendientes de ampliar.* - ---- - -## 6. CONTENIDO APTO PARA APP - -### Checklists Interactivos - -**Preparación de Material:** -- [ ] Valorar situación y mecanismo lesional -- [ ] Identificar material necesario -- [ ] Verificar que material está disponible -- [ ] Verificar que material está en buen estado -- [ ] Preparar material antes de iniciar - -**Colocación de Collarín:** -- [ ] Mantener inmovilización manual -- [ ] Medir talla aproximada -- [ ] Colocar collarín según técnica -- [ ] Ajustar correctamente -- [ ] Verificar que no comprime vía aérea -- [ ] Verificar que soporta correctamente la cabeza - -**Colocación en Tablero Espinal:** -- [ ] Mantener inmovilización manual y collarín -- [ ] Colocar tablero espinal -- [ ] Deslizar paciente sobre tablero (si necesario) -- [ ] Acolchar espacios vacíos -- [ ] Colocar correas (mínimo 4) -- [ ] Ajustar correas sin comprimir -- [ ] Inmovilizar cabeza -- [ ] Verificar vía aérea - -**Inmovilización de Extremidad:** -- [ ] Exponer extremidad -- [ ] Verificar pulso distal antes -- [ ] Acolchar puntos de presión -- [ ] Colocar férula según técnica -- [ ] Ajustar sin comprimir -- [ ] Fijar con vendas/correas -- [ ] Verificar pulso distal después -- [ ] Verificar que inmovilización es adecuada - -**Verificación Post-Inmovilización:** -- [ ] Verificar pulso/circulación -- [ ] Verificar función neurológica (si posible) -- [ ] Verificar vía aérea -- [ ] Verificar que material está bien fijado -- [ ] Verificar que no hay compresiones -- [ ] Documentar procedimiento - -### Guías Visuales - -**Selección de Talla de Collarín:** -- Diagrama de medición -- Guía visual de tallas -- Verificación de ajuste correcto - -**Colocación de Material:** -- Diagramas de colocación paso a paso -- Técnicas de inmovilización manual -- Posicionamiento correcto - -**Verificación de Seguridad:** -- Puntos de verificación visual -- Signos de compresión -- Verificación de circulación - -### Tablas de Referencia Rápida - -**Tallas de Collarín:** -- Pequeña: Niños y adultos pequeños -- Mediana: Adultos estándar -- Grande: Adultos grandes - -**Tallas de Salvafast:** -- 0-1: Lactantes -- 2-3: Niños -- 4-5: Adultos - -**Material Necesario por Situación:** -- Inmovilización espinal: Collarín + Tablero + Correas + Bloques -- Inmovilización extremidad: Férula + Acolchado + Vendaje -- (Pendiente de ampliar con más situaciones) - -### Alertas y Recordatorios - -**Alertas de Seguridad:** -- Mantener inmovilización manual durante colocación -- Verificar pulso antes y después -- Verificar vía aérea después de inmovilización espinal -- No comprimir con correas o material - -**Recordatorios de Verificación:** -- Pulso/circulación -- Función neurológica -- Vía aérea -- Fijación del material - -*Nota: Contenido específico para app pendiente de desarrollar según necesidades.* - ---- - -## 7. CONTENIDO SOLO DOCUMENTAL - -### Fundamentos Teóricos - -**Anatomía de la Columna Vertebral:** -- Estructura de la columna -- Mecanismos de lesión -- Importancia de la inmovilización -- (Pendiente de ampliar) - -**Fisiología de la Inmovilización:** -- Efectos de la inmovilización -- Prevención de lesiones secundarias -- Consideraciones de circulación -- (Pendiente de ampliar) - -### Consideraciones Avanzadas - -**Técnicas Avanzadas:** -- Técnicas de extracción vehicular -- Inmovilización en espacios reducidos -- Situaciones especiales -- (Pendiente de ampliar) - -**Material Avanzado:** -- Sistemas especializados -- Material para situaciones específicas -- Alternativas y variantes -- (Pendiente de ampliar) - -### Contexto y Referencias - -**Guías Oficiales:** -- Referencias a guías de inmovilización -- Protocolos institucionales -- Evidencia científica -- (Pendiente de ampliar) - -**Formación Continua:** -- Actualización de conocimientos -- Práctica supervisada -- Simulaciones -- (Pendiente de ampliar) - -*Nota: Contenido documental pendiente de desarrollar según necesidades formativas.* - ---- - -## 8. PUNTOS CLAVE PARA TES - -### Resumen Ejecutivo - -**1. Principios Fundamentales:** -- Seguridad primero -- Inmovilización completa -- Verificación continua -- Acolchado y protección -- Comunicación - -**2. Material Básico:** -- Collarín cervical (3 tallas) -- Tablero espinal (mínimo 4 correas) -- Férulas (rígidas, neumáticas, de vacío) -- Salvafast (3 tallas) -- Sistemas de sujeción - -**3. Procedimiento General:** -- Preparación -- Inmovilización manual -- Colocación de material -- Verificación -- Documentación - -**4. Verificaciones Obligatorias:** -- Pulso/circulación (antes y después) -- Función neurológica (si posible) -- Vía aérea (después de inmovilización espinal) -- Fijación del material - -**5. Errores a Evitar:** -- No mantener inmovilización manual durante colocación -- Talla incorrecta de material -- No acolchar puntos de presión -- Correas demasiado ajustadas -- No verificar pulso/circulación -- No verificar vía aérea - -**6. Seguridad:** -- Nunca inmovilizar si escena es insegura -- Mantener alineación durante todo el proceso -- No forzar posiciones -- Verificar continuamente -- No apresurarse - -**7. Comunicación:** -- Coordinar con el equipo -- Explicar al paciente (si consciente) -- Comunicar problemas o dificultades -- Documentar procedimiento - -### Checklist Rápido TES - -**Antes de Inmovilizar:** -- [ ] Valorar seguridad de la escena -- [ ] Identificar material necesario -- [ ] Verificar que material está disponible -- [ ] Verificar que material está en buen estado -- [ ] Preparar material - -**Durante Inmovilización:** -- [ ] Mantener inmovilización manual -- [ ] Colocar material correctamente -- [ ] Acolchar puntos de presión -- [ ] Ajustar sin comprimir -- [ ] Verificar continuamente - -**Después de Inmovilizar:** -- [ ] Verificar pulso/circulación -- [ ] Verificar función neurológica (si posible) -- [ ] Verificar vía aérea -- [ ] Verificar que material está bien fijado -- [ ] Documentar procedimiento - -**Seguridad:** -- [ ] Escena segura -- [ ] Material en buen estado -- [ ] Talla correcta -- [ ] No compresiones -- [ ] Vía aérea permeable - ---- - -## NOTA FINAL DE SEGURIDAD - -Este contenido es de **uso exclusivo como apoyo** y **NO sustituye**: -- ❌ La formación reglada del profesional -- ❌ Los protocolos oficiales de la institución -- ❌ El criterio clínico del TES o médico -- ❌ La práctica supervisada y experiencia - -**Importante:** -- La decisión de inmovilizar corresponde al **criterio médico** -- El TES aplica la inmovilización según **protocolo e indicación** -- El profesional mantiene la **responsabilidad completa** de sus actuaciones -- Debe adaptar las técnicas a cada situación específica - -**Estado del Bloque:** -- ✅ Estructura base completada -- ⏳ Contenido detallado pendiente de ampliar -- ⏳ Técnicas avanzadas pendientes de ampliar -- ⏳ Casos especiales pendientes de ampliar - -**Validación Médica:** Pendiente de validación médica profesional antes de uso en producción. - ---- - -**Versión:** 1.0 -**Última actualización:** 2025-12-23 -**Estado:** Estructura base - Preparado para ampliar - diff --git a/mejorar_reporte_1.py b/mejorar_reporte_1.py deleted file mode 100644 index 7972f47f..00000000 --- a/mejorar_reporte_1.py +++ /dev/null @@ -1,304 +0,0 @@ -#!/usr/bin/env python3 -""" -Mejora del reporte 1 con mapeo correcto de archivos -""" - -import os -from pathlib import Path -from collections import defaultdict - -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -# Mapeo real de archivos según auditoría previa -MAPEO_REAL = { - "1.1.1": "BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md", - "1.2.1": "BLOQUE_01_1_CONSTANTES_VITALES.md", - "1.2.2": "BLOQUE_01_2_ABCDE_OPERATIVO.md", - "1.2.3": "BLOQUE_01_3_GLASGOW_OPERATIVO.md", - "1.2.4": "BLOQUE_01_4_TRIAGE_START.md", - "2.1.1": "BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md", - "2.1.2": "BLOQUE_04_0B_RECONOCIMIENTO_PCR.md", - "2.1.3": "BLOQUE_04_1_RCP_ADULTOS.md", - "2.1.4": "BLOQUE_04_2_RCP_PEDIATRIA.md", - "2.1.5": "BLOQUE_04_3_RCP_LACTANTES.md", - "2.1.6": "BLOQUE_04_4_USO_DESA.md", - "2.1.7": "BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md", - "2.1.8": "BLOQUE_04_6_OVACE_ADULTOS.md", - "2.1.9": "BLOQUE_04_7_OVACE_PEDIATRIA.md", - "2.1.10": "BLOQUE_04_8_OVACE_LACTANTES.md", - "2.1.11": "BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md", - "2.2.1": "BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md", - "3.1.1": "BLOQUE_02_0_ANATOMIA_OPERATIVA.md", - "3.1.2": "BLOQUE_02_2_INMOVILIZACION_MANUAL.md", - "3.1.3": "BLOQUE_02_3_COLLARIN_CERVICAL.md", - "3.1.4": "BLOQUE_02_4_CAMILLA_CUCHARA.md", - "3.1.5": "BLOQUE_02_5_TABLERO_ESPINAL.md", - "3.1.6": "BLOQUE_02_6_COLCHON_VACIO.md", - "3.1.7": "BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md", - "3.1.8": "BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md", - "3.1.9": "BLOQUE_02_9_ERRORES_CRITICOS.md", - "3.1.10": "BLOQUE_02_10_FERULAS.md", - "3.1.11": "BLOQUE_02_11_CINTURON_PELVICO.md", - "3.1.12": "BLOQUE_02_12_FERULA_TRACCION.md", - "3.1.13": "BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md", - "3.1.14": "BLOQUE_02_X_INVENTARIO_MATERIAL.md", - "3.2.1": "BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md", - "3.2.2": "BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md", - "3.2.3": "BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md", - "3.2.4": "BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md", - "3.2.5": "BLOQUE_03_2_ASPIRACION.md", - "3.2.6": "BLOQUE_03_2B_CANULA_OROFARINGEA.md", - "3.2.7": "BLOQUE_03_3_BVM.md", - "3.2.8": "BLOQUE_03_4_CANULAS.md", - "3.2.9": "BLOQUE_03_5_ORGANIZACION_MALETIN.md", - "3.2.10": "BLOQUE_03_6_CONTROL_HEMORRAGIAS.md", - "3.2.11": "BLOQUE_03_7_QUEMADURAS.md", - "3.2.12": "BLOQUE_03_8_HERIDAS_VENDAJES.md", - "3.2.13": "BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md", - "3.2.14": "BLOQUE_03_10_MONITORIZACION_BASICA.md", - "3.2.15": "BLOQUE_03_11_GLUCOMETRO.md", - "3.2.16": "BLOQUE_03_12_TERMOMETRIA.md", - "3.2.17": "BLOQUE_03_13_CONFORT_DOLOR.md", - "3.2.18": "BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md", - "3.2.19": "BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md", - "3.2.20": "BLOQUE_03_16_COMUNICACION_OPERATIVA.md", - "3.2.21": "BLOQUE_03_17_SENALIZACION_ILUMINACION.md", - "3.2.22": "BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md", - "3.2.23": "BLOQUE_03_99_CIERRE_BLOQUE_3.md", - "3.2.24": "BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md", - "3.2.25": "BLOQUE_03_X2_MALETIN_CURAS.md", - "3.2.26": "BLOQUE_03_X3_BOLSA_MONITORIZACION.md", - "3.2.27": "BLOQUE_03_X4_INVENTARIO_GLOBAL.md", - "3.2.28": "BLOQUE_03_X5_CHECKLIST_MAESTRO.md", - "4.1.1": "BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md", - "4.1.2": "BLOQUE_06_1_VADEMECUM_OPERATIVO.md", - "4.1.3": "BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md", - "4.1.4": "BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md", - "4.1.5": "BLOQUE_06_4_ASPIRINA_USO_SCA.md", - "4.1.6": "BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md", - "4.1.7": "BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md", - "4.1.8": "BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md", - "5.1.1": "BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md", - "5.1.2": "BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md", - "5.1.3": "BLOQUE_05_1_PCR_TRANSTELEFONICA.md", - "5.1.4": "BLOQUE_05_2_OVACE_TRANSTELEFONICA.md", - "5.1.5": "BLOQUE_05_3_SCA_TRANSTELEFONICO.md", - "5.1.6": "BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md", - "5.1.7": "BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md", - "5.1.8": "BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md", - "5.1.9": "BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md", - "5.1.10": "BLOQUE_05_8_COMUNICACION_COORDINADOR.md", - "5.2.1": "BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md", - "5.2.2": "BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md", - "5.2.3": "BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md", - "5.2.4": "BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md", - "5.2.5": "BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md", - "6.1.1": "BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md", - "6.1.2": "BLOQUE_07_1_USO_LUCES_Y_SIRENA.md", - "6.1.3": "BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md", - "6.1.4": "BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md", - "6.1.5": "BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md", - "6.1.6": "BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md", - "7.1.1": "BLOQUE_10_0_SITUACIONES_ESPECIALES.md", - "7.2.1": "BLOQUE_11_0_PROTOCOLOS_TRAUMA.md", - "8.1.1": "BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md", - "8.2.1": "BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md", - "8.3.1": "BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md", -} - -BLOQUE_TO_FOLDER = { - 0: "BLOQUE_0_FUNDAMENTOS", - 1: "BLOQUE_1_PROCEDIMIENTOS_BASICOS", - 2: "BLOQUE_2_MATERIAL_E_INMOVILIZACION", - 3: "BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA", - 4: "BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP", - 5: "BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS", - 6: "BLOQUE_6_FARMACOLOGIA", - 7: "BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL", - 8: "BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION", - 9: "BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA", - 10: "BLOQUE_10_SITUACIONES_ESPECIALES", - 11: "BLOQUE_11_PROTOCOLOS_TRAUMA", - 12: "BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL", - 13: "BLOQUE_13_COMUNICACION_RELACION_PACIENTE", - 14: "BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES", -} - -INDICE_ESPERADO = { - "1.1.1": {"nombre": "Fundamentos de Emergencias", "bloque": 0, "parte": 1}, - "1.2.1": {"nombre": "Constantes Vitales", "bloque": 1, "parte": 1}, - "1.2.2": {"nombre": "ABCDE Operativo", "bloque": 1, "parte": 1}, - "1.2.3": {"nombre": "Glasgow Operativo", "bloque": 1, "parte": 1}, - "1.2.4": {"nombre": "Triage START", "bloque": 1, "parte": 1}, - "2.1.1": {"nombre": "Acceso Vascular Básico", "bloque": 4, "parte": 2}, - "2.1.2": {"nombre": "Reconocimiento PCR", "bloque": 4, "parte": 2}, - "2.1.3": {"nombre": "RCP Adultos", "bloque": 4, "parte": 2}, - "2.1.4": {"nombre": "RCP Pediatría", "bloque": 4, "parte": 2}, - "2.1.5": {"nombre": "RCP Lactantes", "bloque": 4, "parte": 2}, - "2.1.6": {"nombre": "Uso DESA", "bloque": 4, "parte": 2}, - "2.1.7": {"nombre": "RCP Dos Intervinientes", "bloque": 4, "parte": 2}, - "2.1.8": {"nombre": "OVACE Adultos", "bloque": 4, "parte": 2}, - "2.1.9": {"nombre": "OVACE Pediatría", "bloque": 4, "parte": 2}, - "2.1.10": {"nombre": "OVACE Lactantes", "bloque": 4, "parte": 2}, - "2.1.11": {"nombre": "Posición Lateral de Seguridad", "bloque": 4, "parte": 2}, - "2.2.1": {"nombre": "Medicina de Emergencias Aplicada", "bloque": 9, "parte": 2}, - "3.1.1": {"nombre": "Anatomía Operativa", "bloque": 2, "parte": 3}, - "3.1.2": {"nombre": "Inmovilización Manual", "bloque": 2, "parte": 3}, - "3.1.3": {"nombre": "Collarín Cervical", "bloque": 2, "parte": 3}, - "3.1.4": {"nombre": "Camilla Cuchara", "bloque": 2, "parte": 3}, - "3.1.5": {"nombre": "Tablero Espinal", "bloque": 2, "parte": 3}, - "3.1.6": {"nombre": "Colchón Vacío", "bloque": 2, "parte": 3}, - "3.1.7": {"nombre": "Extricación y Movimientos en Bloque", "bloque": 2, "parte": 3}, - "3.1.8": {"nombre": "Transferencias y Movilización", "bloque": 2, "parte": 3}, - "3.1.9": {"nombre": "Errores Críticos", "bloque": 2, "parte": 3}, - "3.1.10": {"nombre": "Férulas", "bloque": 2, "parte": 3}, - "3.1.11": {"nombre": "Cinturón Pélvico", "bloque": 2, "parte": 3}, - "3.1.12": {"nombre": "Férula de Tracción", "bloque": 2, "parte": 3}, - "3.1.13": {"nombre": "Camillas y Sillas de Evacuación", "bloque": 2, "parte": 3}, - "3.1.14": {"nombre": "Inventario de Material", "bloque": 2, "parte": 3}, - "3.2.1": {"nombre": "Oxigenoterapia Básica", "bloque": 3, "parte": 3}, - "3.2.2": {"nombre": "Oxigenoterapia - Fundamentos", "bloque": 3, "parte": 3}, - "3.2.3": {"nombre": "Dispositivos de Oxigenoterapia", "bloque": 3, "parte": 3}, - "3.2.4": {"nombre": "Ventilación con Bolsa-Mascarilla", "bloque": 3, "parte": 3}, - "3.2.5": {"nombre": "Aspiración", "bloque": 3, "parte": 3}, - "3.2.6": {"nombre": "Cánula Orofaringea", "bloque": 3, "parte": 3}, - "3.2.7": {"nombre": "BVM (Bolsa Válvula Mascarilla)", "bloque": 3, "parte": 3}, - "3.2.8": {"nombre": "Cánulas", "bloque": 3, "parte": 3}, - "3.2.9": {"nombre": "Organización del Maletín", "bloque": 3, "parte": 3}, - "3.2.10": {"nombre": "Control de Hemorragias", "bloque": 3, "parte": 3}, - "3.2.11": {"nombre": "Quemaduras", "bloque": 3, "parte": 3}, - "3.2.12": {"nombre": "Heridas y Vendajes", "bloque": 3, "parte": 3}, - "3.2.13": {"nombre": "Exposición y Aislamiento Térmico", "bloque": 3, "parte": 3}, - "3.2.14": {"nombre": "Monitorización Básica", "bloque": 3, "parte": 3}, - "3.2.15": {"nombre": "Glucometro", "bloque": 3, "parte": 3}, - "3.2.16": {"nombre": "Termometría", "bloque": 3, "parte": 3}, - "3.2.17": {"nombre": "Confort y Dolor", "bloque": 3, "parte": 3}, - "3.2.18": {"nombre": "Bioseguridad y Descontaminación", "bloque": 3, "parte": 3}, - "3.2.19": {"nombre": "Gestión de Material en Escena", "bloque": 3, "parte": 3}, - "3.2.20": {"nombre": "Comunicación Operativa", "bloque": 3, "parte": 3}, - "3.2.21": {"nombre": "Señalización e Iluminación", "bloque": 3, "parte": 3}, - "3.2.22": {"nombre": "Documentación Operativa", "bloque": 3, "parte": 3}, - "3.2.23": {"nombre": "Cierre Bloque 3", "bloque": 3, "parte": 3}, - "3.2.24": {"nombre": "Inventario Material Sanitario", "bloque": 3, "parte": 3}, - "3.2.25": {"nombre": "Maletín de Curas", "bloque": 3, "parte": 3}, - "3.2.26": {"nombre": "Bolsa de Monitorización", "bloque": 3, "parte": 3}, - "3.2.27": {"nombre": "Inventario Global", "bloque": 3, "parte": 3}, - "3.2.28": {"nombre": "Checklist Maestro", "bloque": 3, "parte": 3}, - "4.1.1": {"nombre": "Principios de Administración de Fármacos", "bloque": 6, "parte": 4}, - "4.1.2": {"nombre": "Vademécum Operativo", "bloque": 6, "parte": 4}, - "4.1.3": {"nombre": "Oxígeno - Administración y Seguridad", "bloque": 6, "parte": 4}, - "4.1.4": {"nombre": "Adrenalina - Uso en Anafilaxia y RCP", "bloque": 6, "parte": 4}, - "4.1.5": {"nombre": "Aspirina - Uso en SCA", "bloque": 6, "parte": 4}, - "4.1.6": {"nombre": "Glucagón - Uso en Hipoglucemia", "bloque": 6, "parte": 4}, - "4.1.7": {"nombre": "Salbutamol - Uso en Crisis Asmática", "bloque": 6, "parte": 4}, - "4.1.8": {"nombre": "Abreviaturas y Terminología Farmacológica", "bloque": 6, "parte": 4}, - "5.1.1": {"nombre": "Introducción a Protocolos Transtelefónicos", "bloque": 5, "parte": 5}, - "5.1.2": {"nombre": "Protocolos de Emergencias Específicas", "bloque": 5, "parte": 5}, - "5.1.3": {"nombre": "PCR Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.4": {"nombre": "OVACE Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.5": {"nombre": "SCA Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.6": {"nombre": "ICTUS Transtelefónico", "bloque": 5, "parte": 5}, - "5.1.7": {"nombre": "Anafilaxia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.8": {"nombre": "Crisis Asmática Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.9": {"nombre": "Hipoglucemia Transtelefónica", "bloque": 5, "parte": 5}, - "5.1.10": {"nombre": "Comunicación con Coordinador", "bloque": 5, "parte": 5}, - "5.2.1": {"nombre": "Introducción a Gestión Operativa", "bloque": 8, "parte": 5}, - "5.2.2": {"nombre": "Documentación Clínica Prehospitalaria", "bloque": 8, "parte": 5}, - "5.2.3": {"nombre": "Coordinación y Comunicación Operativa", "bloque": 8, "parte": 5}, - "5.2.4": {"nombre": "Gestión de Recursos y Material", "bloque": 8, "parte": 5}, - "5.2.5": {"nombre": "Calidad y Mejora Continua", "bloque": 8, "parte": 5}, - "6.1.1": {"nombre": "Fundamentos de Conducción en Urgencias", "bloque": 7, "parte": 6}, - "6.1.2": {"nombre": "Uso de Luces y Sirena", "bloque": 7, "parte": 6}, - "6.1.3": {"nombre": "Técnicas de Conducción en Emergencias", "bloque": 7, "parte": 6}, - "6.1.4": {"nombre": "Seguridad Vial y Prevención de Accidentes", "bloque": 7, "parte": 6}, - "6.1.5": {"nombre": "Gestión de Rutas y Navegación", "bloque": 7, "parte": 6}, - "6.1.6": {"nombre": "Protocolos de Seguridad en Escena", "bloque": 7, "parte": 6}, - "7.1.1": {"nombre": "Situaciones Especiales", "bloque": 10, "parte": 7}, - "7.2.1": {"nombre": "Protocolos de Trauma", "bloque": 11, "parte": 7}, - "8.1.1": {"nombre": "Marco Legal, Ético y Profesional del TES", "bloque": 12, "parte": 8}, - "8.2.1": {"nombre": "Comunicación y Relación con el Paciente", "bloque": 13, "parte": 8}, - "8.3.1": {"nombre": "Seguridad Personal y Salud del TES", "bloque": 14, "parte": 8}, -} - -def verificar_archivos(): - """Verifica que todos los archivos existan""" - archivos_encontrados = [] - archivos_faltantes = [] - - for codigo, nombre_archivo in MAPEO_REAL.items(): - info = INDICE_ESPERADO[codigo] - bloque_num = info["bloque"] - folder_name = BLOQUE_TO_FOLDER[bloque_num] - ruta_completa = MANUAL_DIR / folder_name / nombre_archivo - - if ruta_completa.exists(): - archivos_encontrados.append({ - 'codigo': codigo, - 'nombre': info['nombre'], - 'archivo': nombre_archivo, - 'bloque': bloque_num, - 'ruta': str(ruta_completa.relative_to(BASE_DIR)) - }) - else: - archivos_faltantes.append({ - 'codigo': codigo, - 'nombre': info['nombre'], - 'archivo_esperado': nombre_archivo, - 'bloque': bloque_num, - 'folder': folder_name - }) - - return archivos_encontrados, archivos_faltantes - -def generar_reporte_corregido(): - """Genera reporte corregido con mapeo real""" - archivos_encontrados, archivos_faltantes = verificar_archivos() - - reporte = [] - reporte.append("# REPORTE 1: ARCHIVOS .MD FALTANTES DEL ÍNDICE\n") - reporte.append(f"**Fecha:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - reporte.append("---\n") - - reporte.append("## 📊 RESUMEN EJECUTIVO\n") - reporte.append(f"- **Total de capítulos según índice:** {len(INDICE_ESPERADO)}\n") - reporte.append(f"- **Archivos encontrados:** {len(archivos_encontrados)}\n") - reporte.append(f"- **Archivos faltantes:** {len(archivos_faltantes)}\n") - reporte.append(f"- **Porcentaje de completitud:** {(len(archivos_encontrados)/len(INDICE_ESPERADO)*100):.1f}%\n") - reporte.append("---\n") - - if archivos_faltantes: - reporte.append("## ❌ ARCHIVOS FALTANTES\n") - reporte.append(f"**Total:** {len(archivos_faltantes)} archivos\n\n") - for archivo in archivos_faltantes: - reporte.append(f"- **{archivo['codigo']}** - {archivo['nombre']}") - reporte.append(f" - Bloque: {archivo['bloque']}") - reporte.append(f" - Carpeta: `{archivo['folder']}/`") - reporte.append(f" - Archivo esperado: `{archivo['archivo_esperado']}`\n") - else: - reporte.append("## ✅ TODOS LOS ARCHIVOS ESTÁN PRESENTES\n") - reporte.append("Todos los 93 capítulos del índice tienen archivos .md correspondientes.\n") - - reporte.append("\n---\n") - reporte.append("## 📋 LISTADO COMPLETO DE ARCHIVOS ENCONTRADOS\n") - reporte.append(f"**Total:** {len(archivos_encontrados)} archivos\n\n") - - por_parte = defaultdict(list) - for archivo in archivos_encontrados: - parte_num = archivo['codigo'].split('.')[0] - por_parte[parte_num].append(archivo) - - for parte_num in sorted(por_parte.keys(), key=int): - reporte.append(f"\n### Parte {parte_num}\n") - for archivo in sorted(por_parte[parte_num], key=lambda x: x['codigo']): - reporte.append(f"- ✅ `{archivo['codigo']}` - **{archivo['nombre']}**") - reporte.append(f" - Archivo: `{archivo['archivo']}`") - reporte.append(f" - Ruta: `{archivo['ruta']}`\n") - - return "\n".join(reporte) - -if __name__ == "__main__": - reporte = generar_reporte_corregido() - with open(BASE_DIR / "REPORTE_1_ARCHIVOS_FALTANTES.md", "w", encoding="utf-8") as f: - f.write(reporte) - print("✅ Reporte 1 corregido generado") diff --git a/mostrar-estructura.sh b/mostrar-estructura.sh new file mode 100755 index 00000000..52c133e5 --- /dev/null +++ b/mostrar-estructura.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Script para mostrar la estructura del proyecto + +echo "═══════════════════════════════════════════════════════════" +echo " ESTRUCTURA DEL PROYECTO: guia-tes" +echo "═══════════════════════════════════════════════════════════" +echo "" + +CARPETA="/home/planetazuzu/guia-tes" +cd "$CARPETA" + +echo "📁 CARPETAS PRINCIPALES:" +echo "───────────────────────────────────────────────────────────" +for dir in */; do + if [ -d "$dir" ]; then + count=$(find "$dir" -type f 2>/dev/null | wc -l) + size=$(du -sh "$dir" 2>/dev/null | cut -f1) + echo " 📂 $dir ($count archivos, $size)" + fi +done + +echo "" +echo "📄 ARCHIVOS PRINCIPALES EN LA RAÍZ:" +echo "───────────────────────────────────────────────────────────" +ls -lh *.json *.ts *.tsx *.sh *.py *.md *.yml *.yaml *.config.* 2>/dev/null | awk '{print " 📄 " $9 " (" $5 ")"}' + +echo "" +echo "═══════════════════════════════════════════════════════════" +echo " ESTRUCTURA DETALLADA DE CARPETAS IMPORTANTES" +echo "═══════════════════════════════════════════════════════════" +echo "" + +echo "📁 src/ (código fuente):" +if [ -d "src" ]; then + find src -type d -maxdepth 2 | sort | sed 's|^| |' +fi + +echo "" +echo "📁 public/ (archivos públicos):" +if [ -d "public" ]; then + find public -type d -maxdepth 2 | sort | sed 's|^| |' +fi + +echo "" +echo "📁 assets/ (recursos multimedia):" +if [ -d "assets" ]; then + find assets -type d -maxdepth 2 | sort | sed 's|^| |' +fi + +echo "" +echo "═══════════════════════════════════════════════════════════" +echo " RESUMEN" +echo "═══════════════════════════════════════════════════════════" +total_files=$(find . -type f ! -path "./node_modules/*" ! -path "./.git/*" ! -path "./dist/*" 2>/dev/null | wc -l) +total_dirs=$(find . -type d ! -path "./node_modules/*" ! -path "./.git/*" ! -path "./dist/*" 2>/dev/null | wc -l) +echo " Total archivos: $total_files" +echo " Total carpetas: $total_dirs" +echo "" + diff --git a/public/icon-192-maskable.png b/public/icon-192-maskable.png new file mode 100644 index 00000000..4f6e4e95 Binary files /dev/null and b/public/icon-192-maskable.png differ diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 00000000..4f80fb4b Binary files /dev/null and b/public/icon-192.png differ diff --git a/public/icon-512-maskable.png b/public/icon-512-maskable.png new file mode 100644 index 00000000..d855c683 Binary files /dev/null and b/public/icon-512-maskable.png differ diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 00000000..0ab1c7dc Binary files /dev/null and b/public/icon-512.png differ diff --git a/public/manifest.json b/public/manifest.json index 202e7b6e..efad5031 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -16,28 +16,62 @@ "src": "/favicon.svg", "sizes": "any", "type": "image/svg+xml", - "purpose": "any maskable" + "purpose": "any" + }, + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/icon-192-maskable.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/icon-512-maskable.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" }, { "src": "/favicon.ico", "sizes": "256x256", "type": "image/x-icon", - "purpose": "any maskable" - }, - { - "src": "/favicon.svg", - "sizes": "192x192", - "type": "image/svg+xml", - "purpose": "any" - }, - { - "src": "/favicon.svg", - "sizes": "512x512", - "type": "image/svg+xml", "purpose": "any" } ], - "screenshots": [], + "screenshots": [ + { + "src": "/screenshots/home.png", + "sizes": "1280x720", + "type": "image/png", + "form_factor": "wide", + "label": "Página principal de EMERGES TES" + }, + { + "src": "/screenshots/manual.png", + "sizes": "1280x720", + "type": "image/png", + "form_factor": "wide", + "label": "Manual completo navegable" + }, + { + "src": "/screenshots/mobile-home.png", + "sizes": "750x1334", + "type": "image/png", + "form_factor": "narrow", + "label": "Vista móvil - Página principal" + } + ], "shortcuts": [ { "name": "Manual Completo", diff --git a/public/sw.js b/public/sw.js index 9c7c325b..8b2dacd8 100644 --- a/public/sw.js +++ b/public/sw.js @@ -33,9 +33,25 @@ self.addEventListener('install', (event) => { caches.open(CACHE_NAME) .then((cache) => { console.log('[SW] Caching static assets'); - return cache.addAll(STATIC_ASSETS); + // Cachear recursos uno por uno para manejar errores individualmente + return Promise.allSettled( + STATIC_ASSETS.map(url => + cache.add(url).catch(err => { + console.warn(`[SW] Failed to cache ${url}:`, err); + return null; // Continuar aunque falle uno + }) + ) + ); + }) + .then(() => { + console.log('[SW] Static assets cached'); + self.skipWaiting(); // Activar inmediatamente + }) + .catch((error) => { + console.error('[SW] Installation failed:', error); + // Continuar aunque falle la instalación + self.skipWaiting(); }) - .then(() => self.skipWaiting()) // Activar inmediatamente ); }); diff --git a/reorganizar_proyecto.sh b/reorganizar_proyecto.sh index 5860eb14..22c01b05 100644 --- a/reorganizar_proyecto.sh +++ b/reorganizar_proyecto.sh @@ -2,7 +2,7 @@ # Script de reorganización del Manual TES Digital # FASE 5: Reorganización del Proyecto MD -BASE_DIR="/home/planetazuzu/protocolo-r-pido/manual-tes/TES_Manual_Digital" +BASE_DIR="/home/planetazuzu/guia-tes/manual-tes/TES_Manual_Digital" cd "$BASE_DIR" || exit 1 echo "======================================================================" diff --git a/scripts/diagnostico_errores.md b/scripts/diagnostico_errores.md new file mode 100644 index 00000000..600cb3b7 --- /dev/null +++ b/scripts/diagnostico_errores.md @@ -0,0 +1,348 @@ +# 🔍 Diagnóstico de Errores - EMERGES TES + +Guía de diagnóstico y solución de problemas específicos para el proyecto **EMERGES TES - Guía de Protocolos de Emergencias**. + +--- + +## 🧹 Limpieza Rápida + +### Script Automatizado +```bash +./scripts/limpiar_errores_desarrollo.sh +``` + +Este script: +- ✅ Limpia caché de Vite +- ✅ Elimina builds anteriores +- ✅ Verifica TypeScript +- ✅ Proporciona instrucciones para limpiar almacenamiento + +--- + +## 🔧 Problemas Comunes y Soluciones + +### 1. Error: "Cannot destructure property 'basename' of 'React2.useContext(...)' as it is null" + +**Causa:** Componente `` o `` renderizado fuera del contexto de `` + +**Solución aplicada:** +- ✅ `ErrorBoundary` movido dentro de `` en `src/App.tsx` +- ✅ Eliminado import de `Link` de `ErrorBoundary.tsx` (no se usa) + +**Verificación:** +```typescript +// ✅ CORRECTO (ErrorBoundary dentro de BrowserRouter) + + + {/* ... */} + + + +// ❌ INCORRECTO (ErrorBoundary fuera de BrowserRouter) + + + {/* ... */} + + +``` + +--- + +### 2. Error: "Failed to execute 'addAll' on 'Cache': Request failed" + +**Causa:** Service Worker intenta cachear recursos que no existen o no son accesibles + +**Solución aplicada:** +- ✅ Service Worker actualizado para usar `Promise.allSettled` en lugar de `cache.addAll` +- ✅ Manejo de errores individual para cada recurso +- ✅ El Service Worker continúa aunque algunos recursos fallen + +**Código aplicado:** +```javascript +// En public/sw.js +return Promise.allSettled( + STATIC_ASSETS.map(url => + cache.add(url).catch(err => { + console.warn(`[SW] Failed to cache ${url}:`, err); + return null; + }) + ) +); +``` + +--- + +### 3. Error: "Objects are not valid as a React child" + +**Causa:** Componente React pasado como objeto en lugar de JSX + +**Solución:** +- Verificar que los componentes lazy se rendericen correctamente +- Asegurar que los iconos se pasen como componentes, no como objetos +- Verificar que `Suspense` envuelva correctamente los componentes lazy + +**Verificación:** +```typescript +// ✅ CORRECTO +const Icon = tab.icon; + + +// ❌ INCORRECTO +{tab.icon} // Si tab.icon es un componente, debe ser +``` + +--- + +### 4. Errores de Almacenamiento Local (localStorage/sessionStorage) + +**Síntomas:** +- Favoritos no se guardan +- Historial no funciona +- Errores en consola relacionados con storage + +**Solución:** +```javascript +// En la consola del navegador (F12): +// Limpiar solo las claves de esta app +localStorage.removeItem('emerges-tes-favorites'); +sessionStorage.removeItem('emerges-tes-search-history'); +localStorage.removeItem('pwa-install-dismissed'); + +// O limpiar todo (cuidado: afecta otras apps) +localStorage.clear(); +sessionStorage.clear(); +``` + +**Desde DevTools:** +1. Abre DevTools (F12) +2. Pestaña "Application" → "Storage" +3. Limpia "Local Storage" y "Session Storage" para tu dominio + +--- + +### 2. Service Worker Desactualizado + +**Síntomas:** +- La app no carga offline +- Cambios no se reflejan después del deploy +- Errores en consola sobre service worker + +**Solución:** +```javascript +// En la consola del navegador: +// 1. Desregistrar service worker +navigator.serviceWorker.getRegistrations().then(registrations => { + registrations.forEach(registration => { + registration.unregister(); + console.log('Service Worker desregistrado'); + }); +}); + +// 2. Limpiar caché +caches.keys().then(names => { + names.forEach(name => { + caches.delete(name); + console.log('Caché eliminada:', name); + }); +}); + +// 3. Recargar página con Ctrl+Shift+R (hard refresh) +``` + +--- + +### 3. Errores de Build + +**Síntomas:** +- `npm run build` falla +- Errores de TypeScript +- Errores de módulos no encontrados + +**Solución:** +```bash +# 1. Limpiar completamente +rm -rf node_modules dist node_modules/.vite package-lock.json + +# 2. Reinstalar dependencias +npm install + +# 3. Verificar TypeScript +npx tsc --noEmit + +# 4. Rebuild +npm run build +``` + +--- + +### 4. Errores de HMR (Hot Module Replacement) + +**Síntomas:** +- Cambios no se reflejan en desarrollo +- Errores de recarga en caliente +- Variables duplicadas + +**Solución:** +```bash +# 1. Limpiar caché de Vite +rm -rf node_modules/.vite + +# 2. Reiniciar servidor de desarrollo +# Ctrl+C para detener +npm run dev +``` + +--- + +### 5. Errores de React Router + +**Síntomas:** +- Warnings sobre future flags +- Rutas no funcionan correctamente +- Navegación falla + +**Solución:** +Ya está configurado en `src/App.tsx`: +```typescript + +``` + +Si persisten warnings, verifica que la versión de react-router-dom sea compatible: +```bash +npm list react-router-dom +``` + +--- + +## ✅ Verificación del Proyecto + +### Checklist de Diagnóstico + +```bash +# 1. Verificar que estás en el proyecto correcto +pwd # Debe ser: /home/planetazuzu/guia-tes + +# 2. Verificar Node.js +node -v # Debe ser >= 18 + +# 3. Verificar build +npm run build # Debe compilar sin errores + +# 4. Verificar TypeScript +npx tsc --noEmit # No debe mostrar errores + +# 5. Verificar linter +npm run lint # Revisar warnings + +# 6. Verificar servidor de desarrollo +npm run dev # Debe iniciar en puerto 8096 +``` + +--- + +## 🐛 Errores Específicos del Proyecto + +### Error: "Cannot find module '@/...'" + +**Causa:** Alias de TypeScript no configurado + +**Solución:** +Verifica `tsconfig.json` y `vite.config.ts`: +```json +// tsconfig.json debe tener: +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} +``` + +--- + +### Error: "Markdown files not loading" + +**Causa:** Archivos .md no están en `public/manual/` + +**Solución:** +```bash +# Verificar que existen los archivos +ls -la public/manual/ + +# Debe haber 94 archivos .md en subdirectorios +find public/manual -name "*.md" | wc -l +``` + +--- + +### Error: "Service Worker registration failed" + +**Causa:** `sw.js` no existe o está mal configurado + +**Solución:** +```bash +# Verificar que existe +ls -la public/sw.js + +# Si no existe, verifica src/main.tsx para el registro +``` + +--- + +## 📊 Estado Actual del Proyecto + +### Almacenamiento Usado +- ✅ `localStorage`: Favoritos (`emerges-tes-favorites`) +- ✅ `sessionStorage`: Historial (`emerges-tes-search-history`) +- ✅ `localStorage`: Banner PWA (`pwa-install-dismissed`) +- ❌ **NO usa IndexedDB ni Dexie** + +### Base de Datos +- ❌ Este proyecto **NO usa** bases de datos +- ❌ **NO usa** Dexie, IndexedDB, ni ninguna BD +- ✅ Solo usa almacenamiento del navegador (localStorage/sessionStorage) + +--- + +## 🆘 Si Persisten los Errores + +1. **Verifica el proyecto correcto** + ```bash + pwd + cat package.json | grep name + # Debe mostrar: "vite_react_shadcn_ts" + ``` + +2. **Limpia completamente** + ```bash + ./scripts/limpiar_errores_desarrollo.sh + rm -rf node_modules dist + npm install + ``` + +3. **Reconstruye** + ```bash + npm run build + npm run dev + ``` + +4. **Verifica en el navegador** + - Abre DevTools (F12) + - Revisa la pestaña "Console" para errores + - Revisa la pestaña "Network" para recursos fallidos + +--- + +## 📝 Notas Importantes + +- Este proyecto **NO usa Dexie** ni IndexedDB +- Este proyecto **NO tiene** NominaUploader ni pdf-parser +- Este proyecto usa **localStorage/sessionStorage** para persistencia +- El proyecto compila **sin errores** actualmente + +--- + +**Última actualización:** 2025-12-23 +**Proyecto:** EMERGES TES - Guía de Protocolos de Emergencias + diff --git a/scripts/generar_iconos_pwa.py b/scripts/generar_iconos_pwa.py new file mode 100755 index 00000000..297f3400 --- /dev/null +++ b/scripts/generar_iconos_pwa.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +""" +Script para generar iconos PWA desde favicon.svg +Crea iconos PNG 192x192, 512x512 y maskable para Android +""" + +import subprocess +import sys +from pathlib import Path + +PROJECT_ROOT = Path(__file__).parent.parent +PUBLIC_DIR = PROJECT_ROOT / "public" +FAVICON_SVG = PUBLIC_DIR / "favicon.svg" + +def check_dependencies(): + """Verifica que ImageMagick esté instalado""" + try: + result = subprocess.run( + ["convert", "-version"], + capture_output=True, + text=True + ) + if result.returncode == 0: + print("✅ ImageMagick encontrado") + return True + except FileNotFoundError: + pass + + print("❌ ImageMagick no encontrado") + print(" Instala con: sudo apt-get install imagemagick") + return False + +def generar_icono_png(tamaño, nombre_archivo, maskable=False): + """Genera un icono PNG desde el SVG""" + output_path = PUBLIC_DIR / nombre_archivo + + # Comando ImageMagick para convertir SVG a PNG + cmd = [ + "convert", + "-background", "none", # Fondo transparente + "-resize", f"{tamaño}x{tamaño}", + str(FAVICON_SVG), + str(output_path) + ] + + # Para iconos maskable, añadir padding seguro (80% del tamaño) + if maskable: + safe_size = int(tamaño * 0.8) + padding = int((tamaño - safe_size) / 2) + cmd = [ + "convert", + "-background", "none", + "-resize", f"{safe_size}x{safe_size}", + "-gravity", "center", + "-extent", f"{tamaño}x{tamaño}", + str(FAVICON_SVG), + str(output_path) + ] + + try: + result = subprocess.run(cmd, capture_output=True, text=True) + if result.returncode == 0: + print(f"✅ Generado: {nombre_archivo} ({tamaño}x{tamaño})") + return True + else: + print(f"❌ Error generando {nombre_archivo}: {result.stderr}") + return False + except Exception as e: + print(f"❌ Error: {e}") + return False + +def main(): + print("🎨 Generando iconos PWA...") + print(f"📁 SVG fuente: {FAVICON_SVG}") + print() + + if not FAVICON_SVG.exists(): + print(f"❌ Error: No se encuentra {FAVICON_SVG}") + sys.exit(1) + + if not check_dependencies(): + sys.exit(1) + + print() + print("📦 Generando iconos...") + + # Iconos estándar + iconos = [ + (192, "icon-192.png", False), + (512, "icon-512.png", False), + # Iconos maskable para Android + (192, "icon-192-maskable.png", True), + (512, "icon-512-maskable.png", True), + ] + + exitosos = 0 + for tamaño, nombre, maskable in iconos: + if generar_icono_png(tamaño, nombre, maskable): + exitosos += 1 + + print() + if exitosos == len(iconos): + print(f"✅ Todos los iconos generados exitosamente ({exitosos}/{len(iconos)})") + print() + print("📝 Próximos pasos:") + print(" 1. Actualizar public/manifest.json con los nuevos iconos") + print(" 2. Verificar que los iconos se vean correctamente") + else: + print(f"⚠️ Solo se generaron {exitosos}/{len(iconos)} iconos") + sys.exit(1) + +if __name__ == "__main__": + main() + diff --git a/scripts/generar_screenshots.md b/scripts/generar_screenshots.md new file mode 100644 index 00000000..5c0c8f08 --- /dev/null +++ b/scripts/generar_screenshots.md @@ -0,0 +1,101 @@ +# 📸 Guía para Generar Screenshots de la PWA + +Los screenshots son importantes para mostrar la aplicación en las tiendas de aplicaciones y mejorar la presentación de la PWA. + +## 📋 Screenshots Requeridos + +Según el manifest.json, necesitamos: + +1. **Desktop (Wide):** + - `screenshots/home.png` - 1280x720px - Página principal + - `screenshots/manual.png` - 1280x720px - Manual completo + +2. **Mobile (Narrow):** + - `screenshots/mobile-home.png` - 750x1334px - Vista móvil + +## 🛠️ Métodos para Generar Screenshots + +### Opción 1: Herramientas del Navegador (Recomendado) + +1. **Chrome DevTools:** + ```bash + # Abre la aplicación en Chrome + # Presiona F12 para abrir DevTools + # Presiona Ctrl+Shift+P (Cmd+Shift+P en Mac) + # Busca "Capture screenshot" + # Selecciona "Capture full size screenshot" + ``` + +2. **Firefox DevTools:** + ```bash + # Abre la aplicación en Firefox + # Presiona F12 + # Presiona Ctrl+Shift+S (Cmd+Shift+S en Mac) + # Selecciona "Screenshot" + ``` + +### Opción 2: Herramientas de Línea de Comando + +#### Usando Puppeteer (Node.js) +```bash +npm install -g puppeteer-cli +puppeteer screenshot --url http://localhost:8607 --width 1280 --height 720 --output screenshots/home.png +``` + +#### Usando Playwright +```bash +npx playwright install chromium +npx playwright screenshot --url http://localhost:8607 --width 1280 --height 720 --output screenshots/home.png +``` + +#### Usando wkhtmltoimage +```bash +# Instalar: sudo apt-get install wkhtmltopdf +wkhtmltoimage --width 1280 --height 720 http://localhost:8607 screenshots/home.png +``` + +### Opción 3: Script Automatizado + +Crea un script que capture las páginas automáticamente: + +```javascript +// scripts/capturar_screenshots.js +const puppeteer = require('puppeteer'); + +(async () => { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + // Desktop screenshot + await page.setViewport({ width: 1280, height: 720 }); + await page.goto('http://localhost:8607'); + await page.screenshot({ path: 'public/screenshots/home.png' }); + + // Manual page + await page.goto('http://localhost:8607/manual'); + await page.screenshot({ path: 'public/screenshots/manual.png' }); + + // Mobile screenshot + await page.setViewport({ width: 375, height: 667 }); + await page.goto('http://localhost:8607'); + await page.screenshot({ path: 'public/screenshots/mobile-home.png' }); + + await browser.close(); +})(); +``` + +## 📝 Notas + +- Los screenshots deben mostrar las mejores características de la aplicación +- Usa contenido real, no placeholders +- Asegúrate de que la aplicación esté corriendo antes de capturar +- Los screenshots se actualizarán automáticamente cuando cambies el contenido + +## ✅ Verificación + +Después de generar los screenshots: + +1. Verifica que los archivos existan en `public/screenshots/` +2. Verifica que el manifest.json tenga las rutas correctas +3. Prueba la instalación de la PWA y verifica que los screenshots se muestren + diff --git a/scripts/generar_screenshots.sh b/scripts/generar_screenshots.sh new file mode 100755 index 00000000..152ac9c1 --- /dev/null +++ b/scripts/generar_screenshots.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Script para generar screenshots de la PWA +# Requiere: wkhtmltoimage o herramientas del navegador + +set -e + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +APP_URL="${1:-http://localhost:8607}" +SCREENSHOTS_DIR="public/screenshots" + +echo -e "${GREEN}📸 Generando screenshots de la PWA${NC}" +echo -e "URL: ${APP_URL}" +echo "" + +# Crear directorio si no existe +mkdir -p "$SCREENSHOTS_DIR" + +# Verificar herramientas disponibles +HAS_WKHTML=false +HAS_PUPPETEER=false + +if command -v wkhtmltoimage &> /dev/null; then + HAS_WKHTML=true + echo -e "${GREEN}✅ wkhtmltoimage encontrado${NC}" +fi + +if command -v node &> /dev/null && npm list -g puppeteer &> /dev/null 2>&1; then + HAS_PUPPETEER=true + echo -e "${GREEN}✅ Puppeteer encontrado${NC}" +fi + +if [ "$HAS_WKHTML" = false ] && [ "$HAS_PUPPETEER" = false ]; then + echo -e "${YELLOW}⚠️ No se encontraron herramientas automatizadas${NC}" + echo "" + echo "Opciones:" + echo "1. Instalar wkhtmltoimage: sudo apt-get install wkhtmltopdf" + echo "2. Usar DevTools del navegador (ver scripts/generar_screenshots.md)" + echo "3. Instalar Puppeteer: npm install -g puppeteer-cli" + echo "" + echo "Por ahora, puedes generar screenshots manualmente:" + echo " - Abre ${APP_URL} en Chrome/Firefox" + echo " - Presiona F12 para DevTools" + echo " - Usa 'Capture screenshot' o 'Screenshot'" + echo " - Guarda en ${SCREENSHOTS_DIR}/" + exit 0 +fi + +echo "" +echo "Generando screenshots..." + +# Desktop screenshots (1280x720) +if [ "$HAS_WKHTML" = true ]; then + echo "📸 Generando home.png (Desktop)..." + wkhtmltoimage --width 1280 --height 720 --quality 90 \ + "${APP_URL}" "${SCREENSHOTS_DIR}/home.png" 2>/dev/null || true + + echo "📸 Generando manual.png (Desktop)..." + wkhtmltoimage --width 1280 --height 720 --quality 90 \ + "${APP_URL}/manual" "${SCREENSHOTS_DIR}/manual.png" 2>/dev/null || true +fi + +# Mobile screenshot (750x1334) +if [ "$HAS_WKHTML" = true ]; then + echo "📸 Generando mobile-home.png (Mobile)..." + wkhtmltoimage --width 375 --height 667 --quality 90 \ + "${APP_URL}" "${SCREENSHOTS_DIR}/mobile-home.png" 2>/dev/null || true +fi + +echo "" +if [ -f "${SCREENSHOTS_DIR}/home.png" ]; then + echo -e "${GREEN}✅ Screenshots generados en ${SCREENSHOTS_DIR}/${NC}" + ls -lh "${SCREENSHOTS_DIR}"/*.png 2>/dev/null || true +else + echo -e "${YELLOW}⚠️ No se generaron screenshots automáticamente${NC}" + echo " Usa las herramientas del navegador (ver scripts/generar_screenshots.md)" +fi + diff --git a/scripts/limpiar_errores_desarrollo.sh b/scripts/limpiar_errores_desarrollo.sh new file mode 100755 index 00000000..a9791452 --- /dev/null +++ b/scripts/limpiar_errores_desarrollo.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Script para limpiar errores comunes de desarrollo +# Uso: ./scripts/limpiar_errores_desarrollo.sh + +set -e + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +BLUE='\033[0;34m' +NC='\033[0m' + +echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}" +echo -e "${BLUE}🧹 Limpieza de Errores de Desarrollo${NC}" +echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}" +echo "" + +PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$PROJECT_ROOT" + +# 1. Limpiar caché de Vite +echo -e "${YELLOW}[1/5] Limpiando caché de Vite...${NC}" +if [ -d "node_modules/.vite" ]; then + rm -rf node_modules/.vite + echo -e "${GREEN}✅ Caché de Vite eliminada${NC}" +else + echo -e "${GREEN}✅ No hay caché de Vite${NC}" +fi + +# 2. Limpiar build anterior +echo -e "${YELLOW}[2/5] Limpiando build anterior...${NC}" +if [ -d "dist" ]; then + rm -rf dist + echo -e "${GREEN}✅ Build anterior eliminado${NC}" +else + echo -e "${GREEN}✅ No hay build anterior${NC}" +fi + +# 3. Verificar TypeScript +echo -e "${YELLOW}[3/5] Verificando TypeScript...${NC}" +if npx tsc --noEmit 2>&1 | grep -q "error"; then + echo -e "${RED}⚠️ Se encontraron errores de TypeScript${NC}" + npx tsc --noEmit 2>&1 | grep "error" | head -10 +else + echo -e "${GREEN}✅ Sin errores de TypeScript${NC}" +fi + +# 4. Limpiar localStorage del navegador (instrucciones) +echo -e "${YELLOW}[4/5] Instrucciones para limpiar almacenamiento del navegador...${NC}" +echo "" +echo -e "${BLUE}Para limpiar localStorage/sessionStorage en el navegador:${NC}" +echo -e " 1. Abre DevTools (F12)" +echo -e " 2. Ve a la pestaña 'Application' o 'Aplicación'" +echo -e " 3. En 'Storage' → 'Local Storage' → Selecciona tu dominio" +echo -e " 4. Haz clic derecho → 'Clear' o 'Limpiar'" +echo -e " 5. Repite para 'Session Storage'" +echo "" +echo -e "${BLUE}O ejecuta en la consola del navegador:${NC}" +echo -e " localStorage.clear();" +echo -e " sessionStorage.clear();" +echo "" + +# 5. Verificar dependencias +echo -e "${YELLOW}[5/5] Verificando dependencias...${NC}" +if [ ! -d "node_modules" ]; then + echo -e "${YELLOW}⚠️ node_modules no existe. Ejecuta: npm install${NC}" +else + echo -e "${GREEN}✅ Dependencias instaladas${NC}" +fi + +echo "" +echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}" +echo -e "${GREEN}✅ Limpieza completada${NC}" +echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}" +echo "" +echo -e "${BLUE}Próximos pasos:${NC}" +echo -e " 1. Limpia el almacenamiento del navegador (ver arriba)" +echo -e " 2. Reinicia el servidor de desarrollo: npm run dev" +echo -e " 3. Recarga la página con Ctrl+Shift+R (hard refresh)" +echo "" + diff --git a/servir-local.sh b/servir-local.sh index 7c85bf70..89dd3b0e 100755 --- a/servir-local.sh +++ b/servir-local.sh @@ -2,5 +2,5 @@ echo "🚀 Iniciando servidor de desarrollo..." echo "📍 URL: http://localhost:8096" echo "" -cd /home/planetazuzu/protocolo-r-pido +cd /home/planetazuzu/guia-tes npm run dev diff --git a/src/App.tsx b/src/App.tsx index 508fc342..90a9e4cc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -52,13 +52,13 @@ const App = () => { const [isMenuOpen, setIsMenuOpen] = useState(false); return ( - - - - - - - + + + + + + +
setIsSearchOpen(true)} @@ -118,11 +118,11 @@ const App = () => { onClose={() => setIsMenuOpen(false)} />
-
-
-
-
-
+ +
+ + + ); }; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index a9c659ad..7e366274 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -1,6 +1,5 @@ import React, { Component, ErrorInfo, ReactNode } from 'react'; import { AlertTriangle, Home, RefreshCw } from 'lucide-react'; -import { Link } from 'react-router-dom'; import { Button } from '@/components/ui/button'; interface Props { diff --git a/verificar_estructura_proyecto.py b/verificar_estructura_proyecto.py deleted file mode 100644 index 0964a704..00000000 --- a/verificar_estructura_proyecto.py +++ /dev/null @@ -1,829 +0,0 @@ -#!/usr/bin/env python3 -""" -Script para verificar la estructura completa del Manual TES Digital -Compara el índice esperado con los archivos reales existentes -""" - -import os -import re -from pathlib import Path -from collections import defaultdict -from typing import Dict, List, Tuple, Set - -# Ruta base del proyecto -BASE_DIR = Path("/home/planetazuzu/protocolo-r-pido") -MANUAL_DIR = BASE_DIR / "manual-tes" / "TES_Manual_Digital" - -# Mapeo del índice esperado según INDICE_COMPLETO_MANUAL_TES.md -INDICE_ESPERADO = { - # PARTE I: FUNDAMENTOS Y EVALUACIÓN INICIAL - "1.1.1": { - "nombre": "Fundamentos de Emergencias", - "bloque": 0, - "parte": 1, - "archivo_esperado": "BLOQUE_00_0_FUNDAMENTOS_EMERGENCIAS.md" - }, - "1.2.1": { - "nombre": "Constantes Vitales", - "bloque": 1, - "parte": 1, - "archivo_esperado": "BLOQUE_01_1_CONSTANTES_VITALES.md" - }, - "1.2.2": { - "nombre": "ABCDE Operativo", - "bloque": 1, - "parte": 1, - "archivo_esperado": "BLOQUE_01_2_ABCDE_OPERATIVO.md" - }, - "1.2.3": { - "nombre": "Glasgow Operativo", - "bloque": 1, - "parte": 1, - "archivo_esperado": "BLOQUE_01_3_GLASGOW_OPERATIVO.md" - }, - "1.2.4": { - "nombre": "Triage START", - "bloque": 1, - "parte": 1, - "archivo_esperado": "BLOQUE_01_4_TRIAGE_START.md" - }, - - # PARTE II: SOPORTE VITAL Y PROCEDIMIENTOS CRÍTICOS - "2.1.1": { - "nombre": "Acceso Vascular Básico", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_0_ACCESO_VASCULAR_BASICO.md" - }, - "2.1.2": { - "nombre": "Reconocimiento PCR", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_0B_RECONOCIMIENTO_PCR.md" - }, - "2.1.3": { - "nombre": "RCP Adultos", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_1_RCP_ADULTOS.md" - }, - "2.1.4": { - "nombre": "RCP Pediatría", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_2_RCP_PEDIATRIA.md" - }, - "2.1.5": { - "nombre": "RCP Lactantes", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_3_RCP_LACTANTES.md" - }, - "2.1.6": { - "nombre": "Uso DESA", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_4_USO_DESA.md" - }, - "2.1.7": { - "nombre": "RCP Dos Intervinientes", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_5_RCP_DOS_INTERVINIENTES.md" - }, - "2.1.8": { - "nombre": "OVACE Adultos", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_6_OVACE_ADULTOS.md" - }, - "2.1.9": { - "nombre": "OVACE Pediatría", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_7_OVACE_PEDIATRIA.md" - }, - "2.1.10": { - "nombre": "OVACE Lactantes", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_8_OVACE_LACTANTES.md" - }, - "2.1.11": { - "nombre": "Posición Lateral de Seguridad", - "bloque": 4, - "parte": 2, - "archivo_esperado": "BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md" - }, - "2.2.1": { - "nombre": "Medicina de Emergencias Aplicada", - "bloque": 9, - "parte": 2, - "archivo_esperado": "BLOQUE_09_0_MEDICINA_EMERGENCIAS_APLICADA.md" - }, - - # PARTE III: MATERIAL Y EQUIPAMIENTO - "3.1.1": { - "nombre": "Anatomía Operativa", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_0_ANATOMIA_OPERATIVA.md" - }, - "3.1.2": { - "nombre": "Inmovilización Manual", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_2_INMOVILIZACION_MANUAL.md" - }, - "3.1.3": { - "nombre": "Collarín Cervical", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_3_COLLARIN_CERVICAL.md" - }, - "3.1.4": { - "nombre": "Camilla Cuchara", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_4_CAMILLA_CUCHARA.md" - }, - "3.1.5": { - "nombre": "Tablero Espinal", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_5_TABLERO_ESPINAL.md" - }, - "3.1.6": { - "nombre": "Colchón Vacío", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_6_COLCHON_VACIO.md" - }, - "3.1.7": { - "nombre": "Extricación y Movimientos en Bloque", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md" - }, - "3.1.8": { - "nombre": "Transferencias y Movilización", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md" - }, - "3.1.9": { - "nombre": "Errores Críticos", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_9_ERRORES_CRITICOS.md" - }, - "3.1.10": { - "nombre": "Férulas", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_10_FERULAS.md" - }, - "3.1.11": { - "nombre": "Cinturón Pélvico", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_11_CINTURON_PELVICO.md" - }, - "3.1.12": { - "nombre": "Férula de Tracción", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_12_FERULA_TRACCION.md" - }, - "3.1.13": { - "nombre": "Camillas y Sillas de Evacuación", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_13_CAMILLAS_SILLAS_EVACUACION.md" - }, - "3.1.14": { - "nombre": "Inventario de Material", - "bloque": 2, - "parte": 3, - "archivo_esperado": "BLOQUE_02_X_INVENTARIO_MATERIAL.md" - }, - "3.2.1": { - "nombre": "Oxigenoterapia Básica", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_0A_OXIGENOTERAPIA_BASICA.md" - }, - "3.2.2": { - "nombre": "Oxigenoterapia - Fundamentos", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_0B_OXIGENOTERAPIA_FUNDAMENTOS.md" - }, - "3.2.3": { - "nombre": "Dispositivos de Oxigenoterapia", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md" - }, - "3.2.4": { - "nombre": "Ventilación con Bolsa-Mascarilla", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_1B_VENTILACION_BOLSA_MASCARILLA.md" - }, - "3.2.5": { - "nombre": "Aspiración", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_2_ASPIRACION.md" - }, - "3.2.6": { - "nombre": "Cánula Orofaringea", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_2B_CANULA_OROFARINGEA.md" - }, - "3.2.7": { - "nombre": "BVM (Bolsa Válvula Mascarilla)", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_3_BVM.md" - }, - "3.2.8": { - "nombre": "Cánulas", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_4_CANULAS.md" - }, - "3.2.9": { - "nombre": "Organización del Maletín", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_5_ORGANIZACION_MALETIN.md" - }, - "3.2.10": { - "nombre": "Control de Hemorragias", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_6_CONTROL_HEMORRAGIAS.md" - }, - "3.2.11": { - "nombre": "Quemaduras", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_7_QUEMADURAS.md" - }, - "3.2.12": { - "nombre": "Heridas y Vendajes", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_8_HERIDAS_VENDAJES.md" - }, - "3.2.13": { - "nombre": "Exposición y Aislamiento Térmico", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_9_EXPOSICION_AISLAMIENTO_TERMICO.md" - }, - "3.2.14": { - "nombre": "Monitorización Básica", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_10_MONITORIZACION_BASICA.md" - }, - "3.2.15": { - "nombre": "Glucometro", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_11_GLUCOMETRO.md" - }, - "3.2.16": { - "nombre": "Termometría", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_12_TERMOMETRIA.md" - }, - "3.2.17": { - "nombre": "Confort y Dolor", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_13_CONFORT_DOLOR.md" - }, - "3.2.18": { - "nombre": "Bioseguridad y Descontaminación", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_14_BIOSEGURIDAD_DESCONTAMINACION.md" - }, - "3.2.19": { - "nombre": "Gestión de Material en Escena", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_15_GESTION_MATERIAL_ESCENA.md" - }, - "3.2.20": { - "nombre": "Comunicación Operativa", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_16_COMUNICACION_OPERATIVA.md" - }, - "3.2.21": { - "nombre": "Señalización e Iluminación", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_17_SENALIZACION_ILUMINACION.md" - }, - "3.2.22": { - "nombre": "Documentación Operativa", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_18_DOCUMENTACION_OPERATIVA.md" - }, - "3.2.23": { - "nombre": "Cierre Bloque 3", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_99_CIERRE_BLOQUE_3.md" - }, - "3.2.24": { - "nombre": "Inventario Material Sanitario", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_X_INVENTARIO_MATERIAL_SANITARIO.md" - }, - "3.2.25": { - "nombre": "Maletín de Curas", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_X2_MALETIN_CURAS.md" - }, - "3.2.26": { - "nombre": "Bolsa de Monitorización", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_X3_BOLSA_MONITORIZACION.md" - }, - "3.2.27": { - "nombre": "Inventario Global", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_X4_INVENTARIO_GLOBAL.md" - }, - "3.2.28": { - "nombre": "Checklist Maestro", - "bloque": 3, - "parte": 3, - "archivo_esperado": "BLOQUE_03_X5_CHECKLIST_MAESTRO.md" - }, - - # PARTE IV: FARMACOLOGÍA Y MEDICAMENTOS - "4.1.1": { - "nombre": "Principios de Administración de Fármacos", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION_FARMACOS.md" - }, - "4.1.2": { - "nombre": "Vademécum Operativo", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_1_VADEMECUM_OPERATIVO.md" - }, - "4.1.3": { - "nombre": "Oxígeno - Administración y Seguridad", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_2_OXIGENO_ADMINISTRACION_Y_SEGURIDAD.md" - }, - "4.1.4": { - "nombre": "Adrenalina - Uso en Anafilaxia y RCP", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_3_ADRENALINA_USO_ANAFILAXIA_Y_RCP.md" - }, - "4.1.5": { - "nombre": "Aspirina - Uso en SCA", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_4_ASPIRINA_USO_SCA.md" - }, - "4.1.6": { - "nombre": "Glucagón - Uso en Hipoglucemia", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_5_GLUCAGON_USO_HIPOGLUCEMIA.md" - }, - "4.1.7": { - "nombre": "Salbutamol - Uso en Crisis Asmática", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_6_SALBUTAMOL_USO_CRISIS_ASMATICA.md" - }, - "4.1.8": { - "nombre": "Abreviaturas y Terminología Farmacológica", - "bloque": 6, - "parte": 4, - "archivo_esperado": "BLOQUE_06_7_ABREVIATURAS_TERMINOLOGIA_FARMACOLOGICA.md" - }, - - # PARTE V: PROTOCOLOS Y GESTIÓN OPERATIVA - "5.1.1": { - "nombre": "Introducción a Protocolos Transtelefónicos", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_0_INTRODUCCION_PROTOCOLOS_TRANSTELEFONICOS.md" - }, - "5.1.2": { - "nombre": "Protocolos de Emergencias Específicas", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_0B_PROTOCOLOS_EMERGENCIAS_ESPECIFICAS.md" - }, - "5.1.3": { - "nombre": "PCR Transtelefónica", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_1_PCR_TRANSTELEFONICA.md" - }, - "5.1.4": { - "nombre": "OVACE Transtelefónica", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_2_OVACE_TRANSTELEFONICA.md" - }, - "5.1.5": { - "nombre": "SCA Transtelefónico", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_3_SCA_TRANSTELEFONICO.md" - }, - "5.1.6": { - "nombre": "ICTUS Transtelefónico", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_4_ICTUS_TRANSTELEFONICO.md" - }, - "5.1.7": { - "nombre": "Anafilaxia Transtelefónica", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_5_ANAFILAXIA_TRANSTELEFONICA.md" - }, - "5.1.8": { - "nombre": "Crisis Asmática Transtelefónica", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_6_CRISIS_ASMATICA_TRANSTELEFONICA.md" - }, - "5.1.9": { - "nombre": "Hipoglucemia Transtelefónica", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_7_HIPOGLUCEMIA_TRANSTELEFONICA.md" - }, - "5.1.10": { - "nombre": "Comunicación con Coordinador", - "bloque": 5, - "parte": 5, - "archivo_esperado": "BLOQUE_05_8_COMUNICACION_COORDINADOR.md" - }, - "5.2.1": { - "nombre": "Introducción a Gestión Operativa", - "bloque": 8, - "parte": 5, - "archivo_esperado": "BLOQUE_08_0_INTRODUCCION_GESTION_OPERATIVA.md" - }, - "5.2.2": { - "nombre": "Documentación Clínica Prehospitalaria", - "bloque": 8, - "parte": 5, - "archivo_esperado": "BLOQUE_08_1_DOCUMENTACION_CLINICA_PREHOSPITALARIA.md" - }, - "5.2.3": { - "nombre": "Coordinación y Comunicación Operativa", - "bloque": 8, - "parte": 5, - "archivo_esperado": "BLOQUE_08_2_COORDINACION_Y_COMUNICACION_OPERATIVA.md" - }, - "5.2.4": { - "nombre": "Gestión de Recursos y Material", - "bloque": 8, - "parte": 5, - "archivo_esperado": "BLOQUE_08_3_GESTION_RECURSOS_Y_MATERIAL.md" - }, - "5.2.5": { - "nombre": "Calidad y Mejora Continua", - "bloque": 8, - "parte": 5, - "archivo_esperado": "BLOQUE_08_4_CALIDAD_Y_MEJORA_CONTINUA.md" - }, - - # PARTE VI: CONDUCCIÓN Y SEGURIDAD VIAL - "6.1.1": { - "nombre": "Fundamentos de Conducción en Urgencias", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_0_FUNDAMENTOS_CONDUCCION_URGENCIAS.md" - }, - "6.1.2": { - "nombre": "Uso de Luces y Sirena", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_1_USO_LUCES_Y_SIRENA.md" - }, - "6.1.3": { - "nombre": "Técnicas de Conducción en Emergencias", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_2_TECNICAS_CONDUCCION_EMERGENCIAS.md" - }, - "6.1.4": { - "nombre": "Seguridad Vial y Prevención de Accidentes", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_3_SEGURIDAD_VIAL_Y_PREVENCION_ACCIDENTES.md" - }, - "6.1.5": { - "nombre": "Gestión de Rutas y Navegación", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_4_GESTION_RUTAS_Y_NAVEGACION.md" - }, - "6.1.6": { - "nombre": "Protocolos de Seguridad en Escena", - "bloque": 7, - "parte": 6, - "archivo_esperado": "BLOQUE_07_5_PROTOCOLOS_SEGURIDAD_EN_ESCENA.md" - }, - - # PARTE VII: SITUACIONES ESPECIALES Y TRAUMA - "7.1.1": { - "nombre": "Situaciones Especiales", - "bloque": 10, - "parte": 7, - "archivo_esperado": "BLOQUE_10_0_SITUACIONES_ESPECIALES.md" - }, - "7.2.1": { - "nombre": "Protocolos de Trauma", - "bloque": 11, - "parte": 7, - "archivo_esperado": "BLOQUE_11_0_PROTOCOLOS_TRAUMA.md" - }, - - # PARTE VIII: HABILIDADES PROFESIONALES - "8.1.1": { - "nombre": "Marco Legal, Ético y Profesional del TES", - "bloque": 12, - "parte": 8, - "archivo_esperado": "BLOQUE_12_0_MARCO_LEGAL_ETICO_PROFESIONAL.md" - }, - "8.2.1": { - "nombre": "Comunicación y Relación con el Paciente", - "bloque": 13, - "parte": 8, - "archivo_esperado": "BLOQUE_13_0_COMUNICACION_RELACION_PACIENTE.md" - }, - "8.3.1": { - "nombre": "Seguridad Personal y Salud del TES", - "bloque": 14, - "parte": 8, - "archivo_esperado": "BLOQUE_14_0_SEGURIDAD_PERSONAL_SALUD_TES.md" - }, -} - -# Mapeo de bloques a carpetas -BLOQUE_TO_FOLDER = { - 0: "BLOQUE_0_FUNDAMENTOS", - 1: "BLOQUE_1_PROCEDIMIENTOS_BASICOS", - 2: "BLOQUE_2_MATERIAL_E_INMOVILIZACION", - 3: "BLOQUE_3_MATERIAL_SANITARIO_Y_OXIGENOTERAPIA", - 4: "BLOQUE_4_SOPORTE_VITAL_BASICO_Y_RCP", - 5: "BLOQUE_5_PROTOCOLOS_TRANSTELEFONICOS", - 6: "BLOQUE_6_FARMACOLOGIA", - 7: "BLOQUE_7_CONDUCCION_Y_SEGURIDAD_VIAL", - 8: "BLOQUE_8_GESTION_OPERATIVA_Y_DOCUMENTACION", - 9: "BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA", - 10: "BLOQUE_10_SITUACIONES_ESPECIALES", - 11: "BLOQUE_11_PROTOCOLOS_TRAUMA", - 12: "BLOQUE_12_MARCO_LEGAL_ETICO_PROFESIONAL", - 13: "BLOQUE_13_COMUNICACION_RELACION_PACIENTE", - 14: "BLOQUE_14_SEGURIDAD_PERSONAL_SALUD_TES", -} - -def obtener_archivos_existentes() -> Dict[str, List[str]]: - """Obtiene todos los archivos .md existentes organizados por bloque""" - archivos_por_bloque = defaultdict(list) - - for bloque_num, folder_name in BLOQUE_TO_FOLDER.items(): - bloque_dir = MANUAL_DIR / folder_name - if bloque_dir.exists(): - for archivo in bloque_dir.glob("*.md"): - archivos_por_bloque[bloque_num].append(archivo.name) - - return archivos_por_bloque - -def verificar_estructura(): - """Verifica la estructura completa del proyecto""" - archivos_existentes = obtener_archivos_existentes() - - reporte = { - "capitulos_encontrados": [], - "capitulos_faltantes": [], - "archivos_huérfanos": [], - "inconsistencias_nombres": [], - "errores_estructura": [], - "estadisticas": { - "total_esperado": len(INDICE_ESPERADO), - "total_encontrado": 0, - "total_faltante": 0, - "total_huérfanos": 0, - } - } - - # Verificar cada capítulo esperado - archivos_verificados = set() - - for codigo, info in INDICE_ESPERADO.items(): - bloque_num = info["bloque"] - archivo_esperado = info["archivo_esperado"] - folder_name = BLOQUE_TO_FOLDER[bloque_num] - ruta_completa = MANUAL_DIR / folder_name / archivo_esperado - - if ruta_completa.exists(): - reporte["capitulos_encontrados"].append({ - "codigo": codigo, - "nombre": info["nombre"], - "archivo": archivo_esperado, - "ruta": str(ruta_completa.relative_to(BASE_DIR)) - }) - archivos_verificados.add((bloque_num, archivo_esperado)) - reporte["estadisticas"]["total_encontrado"] += 1 - else: - reporte["capitulos_faltantes"].append({ - "codigo": codigo, - "nombre": info["nombre"], - "archivo_esperado": archivo_esperado, - "bloque": bloque_num, - "carpeta": folder_name - }) - reporte["estadisticas"]["total_faltante"] += 1 - - # Buscar archivos huérfanos (existen pero no están en el índice) - for bloque_num, archivos in archivos_existentes.items(): - folder_name = BLOQUE_TO_FOLDER[bloque_num] - for archivo in archivos: - if (bloque_num, archivo) not in archivos_verificados: - # Verificar si es documentación interna - if not archivo.startswith("_") and "DOCUMENTACION" not in str(MANUAL_DIR / folder_name): - reporte["archivos_huérfanos"].append({ - "archivo": archivo, - "bloque": bloque_num, - "carpeta": folder_name, - "ruta": str((MANUAL_DIR / folder_name / archivo).relative_to(BASE_DIR)) - }) - reporte["estadisticas"]["total_huérfanos"] += 1 - - # Verificar estructura de carpetas - for bloque_num, folder_name in BLOQUE_TO_FOLDER.items(): - bloque_dir = MANUAL_DIR / folder_name - if not bloque_dir.exists(): - reporte["errores_estructura"].append({ - "tipo": "carpeta_faltante", - "bloque": bloque_num, - "carpeta_esperada": folder_name - }) - - return reporte - -def generar_reporte_markdown(reporte: dict) -> str: - """Genera un reporte detallado en formato Markdown""" - md = [] - md.append("# REPORTE DE VERIFICACIÓN DE ESTRUCTURA - MANUAL TES DIGITAL\n") - md.append(f"**Fecha de verificación:** {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - md.append("---\n") - - # Estadísticas generales - md.append("## 📊 ESTADÍSTICAS GENERALES\n") - stats = reporte["estadisticas"] - md.append(f"- **Total de capítulos esperados:** {stats['total_esperado']}") - md.append(f"- **Total de capítulos encontrados:** {stats['total_encontrado']}") - md.append(f"- **Total de capítulos faltantes:** {stats['total_faltante']}") - md.append(f"- **Total de archivos huérfanos:** {stats['total_huérfanos']}") - md.append(f"- **Porcentaje de completitud:** {(stats['total_encontrado']/stats['total_esperado']*100):.1f}%\n") - md.append("---\n") - - # Capítulos encontrados (resumen por parte) - md.append("## ✅ CAPÍTULOS ENCONTRADOS\n") - md.append(f"**Total:** {len(reporte['capitulos_encontrados'])} capítulos\n") - - # Agrupar por parte - por_parte = defaultdict(list) - for cap in reporte["capitulos_encontrados"]: - codigo = cap["codigo"] - parte_num = codigo.split(".")[0] - por_parte[parte_num].append(cap) - - for parte_num in sorted(por_parte.keys(), key=int): - md.append(f"\n### Parte {parte_num}") - md.append(f"**Capítulos encontrados:** {len(por_parte[parte_num])}") - for cap in sorted(por_parte[parte_num], key=lambda x: x["codigo"]): - md.append(f"- `{cap['codigo']}` - {cap['nombre']}") - - md.append("\n---\n") - - # Capítulos faltantes - if reporte["capitulos_faltantes"]: - md.append("## ❌ CAPÍTULOS FALTANTES\n") - md.append(f"**Total:** {len(reporte['capitulos_faltantes'])} capítulos\n") - - por_parte_faltante = defaultdict(list) - for cap in reporte["capitulos_faltantes"]: - codigo = cap["codigo"] - parte_num = codigo.split(".")[0] - por_parte_faltante[parte_num].append(cap) - - for parte_num in sorted(por_parte_faltante.keys(), key=int): - md.append(f"\n### Parte {parte_num}") - for cap in sorted(por_parte_faltante[parte_num], key=lambda x: x["codigo"]): - md.append(f"- `{cap['codigo']}` - **{cap['nombre']}**") - md.append(f" - Archivo esperado: `{cap['archivo_esperado']}`") - md.append(f" - Ubicación esperada: `{cap['carpeta']}/`") - else: - md.append("## ✅ TODOS LOS CAPÍTULOS ESTÁN PRESENTES\n") - - md.append("\n---\n") - - # Archivos huérfanos - if reporte["archivos_huérfanos"]: - md.append("## ⚠️ ARCHIVOS HUÉRFANOS (no listados en el índice)\n") - md.append(f"**Total:** {len(reporte['archivos_huérfanos'])} archivos\n") - - por_bloque_huérfano = defaultdict(list) - for archivo in reporte["archivos_huérfanos"]: - por_bloque_huérfano[archivo["bloque"]].append(archivo) - - for bloque_num in sorted(por_bloque_huérfano.keys()): - md.append(f"\n### Bloque {bloque_num} - {por_bloque_huérfano[bloque_num][0]['carpeta']}") - for archivo in por_bloque_huérfano[bloque_num]: - md.append(f"- `{archivo['archivo']}`") - md.append(f" - Ruta: `{archivo['ruta']}`") - else: - md.append("## ✅ NO HAY ARCHIVOS HUÉRFANOS\n") - - md.append("\n---\n") - - # Errores de estructura - if reporte["errores_estructura"]: - md.append("## 🔴 ERRORES DE ESTRUCTURA\n") - for error in reporte["errores_estructura"]: - if error["tipo"] == "carpeta_faltante": - md.append(f"- ❌ Carpeta faltante: `{error['carpeta_esperada']}` (Bloque {error['bloque']})") - else: - md.append("## ✅ ESTRUCTURA DE CARPETAS CORRECTA\n") - - md.append("\n---\n") - - # Resumen por bloques - md.append("## 📁 RESUMEN POR BLOQUES\n") - archivos_existentes = obtener_archivos_existentes() - - for bloque_num in sorted(BLOQUE_TO_FOLDER.keys()): - folder_name = BLOQUE_TO_FOLDER[bloque_num] - bloque_dir = MANUAL_DIR / folder_name - - md.append(f"\n### Bloque {bloque_num}: {folder_name}") - if bloque_dir.exists(): - archivos_bloque = archivos_existentes.get(bloque_num, []) - md.append(f"- ✅ Carpeta existe") - md.append(f"- Archivos .md encontrados: {len(archivos_bloque)}") - - # Contar capítulos esperados en este bloque - esperados_bloque = [c for c in INDICE_ESPERADO.values() if c["bloque"] == bloque_num] - md.append(f"- Capítulos esperados según índice: {len(esperados_bloque)}") - else: - md.append(f"- ❌ Carpeta NO existe") - - md.append("\n---\n") - md.append("## 📝 NOTAS\n") - md.append("- Este reporte compara el índice en `INDICE_COMPLETO_MANUAL_TES.md` con los archivos reales en `manual-tes/TES_Manual_Digital/`") - md.append("- Los archivos huérfanos son archivos que existen pero no están listados en el índice") - md.append("- Se recomienda revisar los archivos huérfanos para determinar si deben agregarse al índice o eliminarse") - - return "\n".join(md) - -if __name__ == "__main__": - print("Verificando estructura del Manual TES Digital...") - reporte = verificar_estructura() - - reporte_md = generar_reporte_markdown(reporte) - - # Guardar reporte - reporte_path = BASE_DIR / "REPORTE_VERIFICACION_ESTRUCTURA.md" - with open(reporte_path, "w", encoding="utf-8") as f: - f.write(reporte_md) - - print(f"\n✅ Reporte generado: {reporte_path}") - print(f"\n📊 Resumen:") - print(f" - Capítulos encontrados: {reporte['estadisticas']['total_encontrado']}/{reporte['estadisticas']['total_esperado']}") - print(f" - Capítulos faltantes: {reporte['estadisticas']['total_faltante']}") - print(f" - Archivos huérfanos: {reporte['estadisticas']['total_huérfanos']}")