Compare commits
10 commits
99319367cc
...
0201f16cf4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0201f16cf4 | ||
|
|
e56dd8bfc2 | ||
|
|
c9825db32a | ||
|
|
d26dc0f700 | ||
|
|
e6e87322df | ||
|
|
975892ecd4 | ||
|
|
5d7a6500fe | ||
|
|
8cffa970d3 | ||
|
|
4e2efa0bed | ||
|
|
a58d436505 |
10
.dockerignore
Normal file → Executable file
10
.dockerignore
Normal file → Executable file
|
|
@ -38,10 +38,14 @@ _BACKUP_MD/
|
||||||
MANUAL_TES_DIGITAL/
|
MANUAL_TES_DIGITAL/
|
||||||
imagenes-pendientes/
|
imagenes-pendientes/
|
||||||
|
|
||||||
# Scripts (no necesario en producción)
|
# Scripts (no necesario en producción) - EXCEPTO verify-build.js
|
||||||
scripts/
|
scripts/*.sh
|
||||||
|
scripts/*.ts
|
||||||
|
scripts/deploy/
|
||||||
|
scripts/consolidated/
|
||||||
|
!scripts/verify-build.js
|
||||||
|
|
||||||
*.py
|
*.py
|
||||||
*.sh
|
|
||||||
!deploy-docker.sh
|
!deploy-docker.sh
|
||||||
|
|
||||||
# Configuraciones de desarrollo
|
# Configuraciones de desarrollo
|
||||||
|
|
|
||||||
0
.github/workflows/deploy.yml
vendored
Normal file → Executable file
0
.github/workflows/deploy.yml
vendored
Normal file → Executable file
89
.gitignore
vendored
Normal file → Executable file
89
.gitignore
vendored
Normal file → Executable file
|
|
@ -1,56 +1,69 @@
|
||||||
# Logs
|
# Dependencies
|
||||||
logs
|
node_modules
|
||||||
|
admin-panel/node_modules/
|
||||||
|
backend/node_modules/
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
backend/.env
|
||||||
|
|
||||||
|
# Build outputs
|
||||||
|
dist
|
||||||
|
build
|
||||||
|
.admin-panel/dist
|
||||||
|
backend/dist
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
*.log
|
*.log
|
||||||
|
logs
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
pnpm-debug.log*
|
.pnpm-debug.log*
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
node_modules
|
# Coverage directory
|
||||||
dist
|
coverage
|
||||||
dist-ssr
|
.nyc_output
|
||||||
*.local
|
|
||||||
|
|
||||||
# Variables de entorno
|
|
||||||
.env
|
|
||||||
.env.local
|
|
||||||
.env.production
|
|
||||||
.env.development
|
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
.vscode/*
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
.idea
|
.idea
|
||||||
.DS_Store
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
|
|
||||||
# Archivos temporales y de desarrollo
|
|
||||||
*.pyc
|
|
||||||
__pycache__/
|
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
*~
|
*~
|
||||||
|
|
||||||
# Archivos de documentación temporal (opcional - descomentar si no quieres subirlos)
|
# OS generated files
|
||||||
# *.md
|
.DS_Store
|
||||||
# !README.md
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
# Archivos de copia de seguridad
|
# Contexto de IA
|
||||||
*.bak
|
.ai/
|
||||||
*.backup
|
*.ai.md
|
||||||
backup_manual_pre_limpieza/
|
.ai-assistant.md
|
||||||
|
|
||||||
# Build outputs (añadido por auditoría de limpieza)
|
# Documentación interna
|
||||||
dist/
|
docs/internal/
|
||||||
|
|
||||||
# Logs (añadido por auditoría de limpieza)
|
# Archivos MD internos específicos
|
||||||
logs/*.log
|
docs/BACKLOG_MICRO_TICKETS.md
|
||||||
|
docs/QUE_FALTA.md
|
||||||
|
docs/CONTENIDO_FALTANTE.md
|
||||||
|
SPEC.md
|
||||||
|
README_TODO.md
|
||||||
|
auditoria-assets-completa.md
|
||||||
|
MEDIOS_REALES_NECESARIOS_FILTRADO.md
|
||||||
|
|
||||||
# Backup files (añadido por auditoría de limpieza)
|
# Temporary files
|
||||||
*.backup
|
tmp
|
||||||
*.bak
|
temp
|
||||||
|
|
|
||||||
49
.planning/PROJECT.md
Executable file
49
.planning/PROJECT.md
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# EMERGES TES - Limpieza y Arreglos
|
||||||
|
|
||||||
|
## What This Is
|
||||||
|
|
||||||
|
Copia del proyecto EMERGES TES (Guía Digital de Protocolos de Emergencias para TES) enfocada en limpieza de código, eliminación de código muerto y arreglos técnicos.
|
||||||
|
|
||||||
|
## Core Value
|
||||||
|
|
||||||
|
Mantener la funcionalidad existente mientras se mejora la calidad del código y se elimina deuda técnica.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
### Validated
|
||||||
|
|
||||||
|
(None yet - ship to validate)
|
||||||
|
|
||||||
|
### Active
|
||||||
|
|
||||||
|
- [ ] Limpiar código muerto y archivos sin usar
|
||||||
|
- [ ] Arreglar errores y warnings en el código
|
||||||
|
- [ ] Eliminar deuda técnica (código duplicado, patrones inconsistentes)
|
||||||
|
- [ ] Arreglar bugs conocidos
|
||||||
|
- [ ] Mejorar consistencia del código
|
||||||
|
|
||||||
|
### Out of Scope
|
||||||
|
|
||||||
|
- [ ] Nuevas funcionalidades - solo limpieza
|
||||||
|
- [ ] Cambios de arquitectura mayores
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Proyecto existente con:
|
||||||
|
- Frontend: React 19 + TypeScript + Vite + Tailwind
|
||||||
|
- Backend: Express + PostgreSQL + Clean Architecture
|
||||||
|
- PWA para emergencias médicas
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
- **[Stack]**: Mantener tecnologías actuales — No cambiar framework
|
||||||
|
- **[Funcionalidad]**: No romper features existentes — Todos los tests deben pasar
|
||||||
|
|
||||||
|
## Key Decisions
|
||||||
|
|
||||||
|
| Decision | Rationale | Outcome |
|
||||||
|
|----------|-----------|---------|
|
||||||
|
| Modo interactivo | Preferimos aprobar cada paso | — Pending |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Last updated: 2026-03-11 after initialization*
|
||||||
14
.planning/config.json
Executable file
14
.planning/config.json
Executable file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"mode": "interactive",
|
||||||
|
"granularity": "standard",
|
||||||
|
"parallelization": true,
|
||||||
|
"commit_docs": true,
|
||||||
|
"model_profile": "balanced",
|
||||||
|
"workflow": {
|
||||||
|
"research": true,
|
||||||
|
"plan_check": true,
|
||||||
|
"verifier": true,
|
||||||
|
"nyquist_validation": true,
|
||||||
|
"auto_advance": false
|
||||||
|
}
|
||||||
|
}
|
||||||
0
Dockerfile
Normal file → Executable file
0
Dockerfile
Normal file → Executable file
|
|
@ -1,19 +0,0 @@
|
||||||
# ⚡ COMANDO PARA EJECUTAR
|
|
||||||
|
|
||||||
Ejecuta este comando en tu terminal:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /home/planetazuzu/guia-tes/backend
|
|
||||||
bash crear-usuario-y-bd.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Este script:
|
|
||||||
- ✅ Crea el usuario `planetazuzu` con password `Monforte.1977`
|
|
||||||
- ✅ Crea la base de datos `emerges_tes`
|
|
||||||
- ✅ Crea el esquema `emerges_content`
|
|
||||||
- ✅ Da todos los permisos necesarios
|
|
||||||
|
|
||||||
**Después de ejecutarlo, avísame y continúo automáticamente con:**
|
|
||||||
- Verificar conexión
|
|
||||||
- Crear tablas (migraciones)
|
|
||||||
- Migrar contenido
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
# 📊 ESTADO ACTUAL - FASE 1
|
|
||||||
|
|
||||||
## ✅ COMPLETADO
|
|
||||||
|
|
||||||
1. ✅ **Dependencias instaladas** (`npm install` en backend)
|
|
||||||
2. ✅ **Archivo `.env` configurado** con tus credenciales:
|
|
||||||
- Usuario: `planetazuzu`
|
|
||||||
- Password: `Monforte.1977`
|
|
||||||
- Base de datos: `emerges_tes`
|
|
||||||
3. ✅ **Scripts creados**:
|
|
||||||
- `backend/scripts/verify-setup.js` - Verificar conexión
|
|
||||||
- `backend/scripts/db-create.js` - Crear tablas
|
|
||||||
- `backend/scripts/migrate-content.js` - Migrar contenido
|
|
||||||
- `backend/scripts/create-user.sql` - SQL para crear usuario
|
|
||||||
- `backend/crear-usuario-y-bd.sh` - Script bash para ejecutar
|
|
||||||
4. ✅ **Conexión verificada** a PostgreSQL
|
|
||||||
5. ✅ **Migraciones ejecutadas** (esquema y funciones)
|
|
||||||
6. ✅ **Contenido migrado** (protocolos y fármacos)
|
|
||||||
|
|
||||||
## ✅ ESTADO ACTUAL
|
|
||||||
|
|
||||||
La base de datos `emerges_tes` y el esquema `emerges_content` ya están creados,
|
|
||||||
las migraciones se ejecutaron correctamente y el contenido fue migrado.
|
|
||||||
|
|
||||||
## 📁 ARCHIVOS IMPORTANTES
|
|
||||||
|
|
||||||
- `backend/.env` - Configuración de base de datos
|
|
||||||
- `backend/crear-usuario-y-bd.sh` - Script para crear usuario (EJECUTAR ESTE)
|
|
||||||
- `database/migrations/001_create_schema.sql` - Esquema de tablas
|
|
||||||
- `database/migrations/002_create_functions.sql` - Funciones y triggers
|
|
||||||
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
# 📁 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
|
|
||||||
└── 📂 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`, `docker.sh`
|
|
||||||
- Scripts de limpieza: `cleanup.sh`
|
|
||||||
- Scripts de utilidad: `integrate-assets.py`, `generate-docs.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
|
|
||||||
tree -L 2
|
|
||||||
```
|
|
||||||
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
||||||
═══════════════════════════════════════════════════════════
|
|
||||||
ESTRUCTURA DEL PROYECTO: guia-tes
|
|
||||||
═══════════════════════════════════════════════════════════
|
|
||||||
|
|
||||||
📁 CARPETAS PRINCIPALES:
|
|
||||||
───────────────────────────────────────────────────────────
|
|
||||||
📂 assets/ (0 archivos, 136K)
|
|
||||||
📂 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)
|
|
||||||
📄 components.json (414)
|
|
||||||
📄 deploy.sh (4,0K)
|
|
||||||
📄 docker-compose.prod.yml (995)
|
|
||||||
📄 docker-compose.yml (654)
|
|
||||||
📄 ecosystem.config.js (852)
|
|
||||||
📄 eslint.config.js (765)
|
|
||||||
📄 manifest.json (33K)
|
|
||||||
📄 package.json (3,3K)
|
|
||||||
📄 package-lock.json (339K)
|
|
||||||
📄 postcss.config.js (81)
|
|
||||||
📄 README.md (1,3K)
|
|
||||||
📄 reorganizar_proyecto.sh (3,0K)
|
|
||||||
📄 tailwind.config.ts (3,9K)
|
|
||||||
📄 tsconfig.app.json (652)
|
|
||||||
📄 tsconfig.json (369)
|
|
||||||
📄 tsconfig.node.json (481)
|
|
||||||
📄 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_Y_DOCUMENTACION
|
|
||||||
public/manual/BLOQUE_9_MEDICINA_EMERGENCIAS_APLICADA
|
|
||||||
|
|
||||||
═══════════════════════════════════════════════════════════
|
|
||||||
RESUMEN
|
|
||||||
═══════════════════════════════════════════════════════════
|
|
||||||
Total archivos: 1233
|
|
||||||
Total carpetas: 229
|
|
||||||
|
|
||||||
21
LICENSE
Executable file
21
LICENSE
Executable file
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Javier Fernández (@planetazuzu)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
0
MANIFESTO_MEDIOS.json
Normal file → Executable file
0
MANIFESTO_MEDIOS.json
Normal file → Executable file
File diff suppressed because it is too large
Load diff
|
|
@ -1,530 +0,0 @@
|
||||||
# Medios reales necesarios (derivado de referencias en docs/)
|
|
||||||
|
|
||||||
Este listado incluye referencias en documentación que no son placeholders evidentes.
|
|
||||||
|
|
||||||
## Medios reales necesarios
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 172
|
|
||||||
- diagrama_abcde_paso_a_paso_completo.svg | public/assets/infografias/bloque-0-fundamentos/diagrama_abcde_paso_a_paso_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 48
|
|
||||||
- diagrama_abcde_paso_a_paso_completo.svg | diagrama_abcde_paso_a_paso_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 53
|
|
||||||
- diagrama_abcde_paso_a_paso_completo.svg | /assets/infografias/bloque-0-fundamentos/diagrama_abcde_paso_a_paso_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 59
|
|
||||||
- rcp_adulto_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 150
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 161
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 172
|
|
||||||
- rcp_pediatrica_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_pediatrica_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 177
|
|
||||||
- rcp_lactantes_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_lactantes_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 185
|
|
||||||
- diagrama_uso_desa.png | public/assets/infografias/bloque-4-rcp/diagrama_uso_desa.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 193
|
|
||||||
- diagrama_uso_desa.png | diagrama_uso_desa.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 198
|
|
||||||
- ovace_adulto.png | public/assets/infografias/bloque-4-rcp/ovace_adulto.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 205
|
|
||||||
- ovace_adulto.png | ovace_adulto.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 210
|
|
||||||
- ovace_pediatrica.png | public/assets/infografias/bloque-4-rcp/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 217
|
|
||||||
- ovace_lactantes.png | public/assets/infografias/bloque-4-rcp/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 225
|
|
||||||
- flujo_rcp_adulto_telefono.svg | flujo_rcp_adulto_telefono.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 250
|
|
||||||
- rcp_posicion_manos_adulto.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 361
|
|
||||||
- rcp_posicion_manos_adulto.png | rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 362
|
|
||||||
- rcp_posicion_manos_adulto.png | /assets/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 363
|
|
||||||
- rcp_profundidad_compresiones.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_profundidad_compresiones.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 384
|
|
||||||
- rcp_profundidad_compresiones.png | rcp_profundidad_compresiones.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 385
|
|
||||||
- rcp_profundidad_compresiones.png | /assets/infografias/rcp/rcp_profundidad_compresiones.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 386
|
|
||||||
- rcp_adulto_svb.mp4 | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 407
|
|
||||||
- rcp_adulto_svb_thumb.jpg | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb_thumb.jpg | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 408
|
|
||||||
- rcp_adulto_svb.mp4 | rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 409
|
|
||||||
- rcp_adulto_svb.mp4 | /assets/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 410
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 60
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 61
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 415
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 416
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 42
|
|
||||||
- rcp_page.png | rcp_page.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MODERNIZACION_TECNOLOGICA.md, línea 946
|
|
||||||
- diagrama_abcde_paso_a_paso_completo.svg | bloque-0-fundamentos/diagrama_abcde_paso_a_paso_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 12
|
|
||||||
- rcp_adulto_paso_a_paso.png | bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 20
|
|
||||||
- rcp_pediatrica_paso_a_paso.png | bloque-4-rcp/rcp_pediatrica_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 21
|
|
||||||
- rcp_lactantes_paso_a_paso.png | bloque-4-rcp/rcp_lactantes_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 22
|
|
||||||
- diagrama_uso_desa.png | bloque-4-rcp/diagrama_uso_desa.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 23
|
|
||||||
- ovace_adulto.png | bloque-4-rcp/ovace_adulto.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 24
|
|
||||||
- ovace_pediatrica.png | bloque-4-rcp/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 25
|
|
||||||
- ovace_lactantes.png | bloque-4-rcp/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 26
|
|
||||||
- rcp_posicion_manos_adulto.png | rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/PLAN_TECNICO_SISTEMA_CONTENIDO.md, línea 98
|
|
||||||
- rcp_posicion_manos_adulto.png | rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/PLAN_TECNICO_SISTEMA_CONTENIDO.md, línea 666
|
|
||||||
- rcp_adulto_svb.mp4 | rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/PLAN_TECNICO_SISTEMA_CONTENIDO.md, línea 669
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 59
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 89
|
|
||||||
- priorizacion_vital_enfoque_abcde.png | priorizacion_vital_enfoque_abcde.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 89
|
|
||||||
- seleccion_talla_collarin_2.png | public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 191
|
|
||||||
- algoritmo_rcp_comentado.svg | /assets/infografias/bloque-4-rcp/algoritmo_rcp_comentado.svg | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 231
|
|
||||||
- compresiones_incorrectas.png | /assets/infografias/bloque-4-rcp/compresiones_incorrectas.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 232
|
|
||||||
- compresiones_correctas.png | /assets/infografias/bloque-4-rcp/compresiones_correctas.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 233
|
|
||||||
- descompresion_incompleta.png | /assets/infografias/bloque-4-rcp/descompresion_incompleta.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 234
|
|
||||||
- descompresion_completa.png | /assets/infografias/bloque-4-rcp/descompresion_completa.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 235
|
|
||||||
- resumen_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/resumen_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 236
|
|
||||||
- rcp_posicion_manos_adulto.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 225
|
|
||||||
- rcp_posicion_manos_adulto.png | rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 226
|
|
||||||
- rcp_posicion_manos_adulto.png | /assets/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 227
|
|
||||||
- rcp_adulto_svb.mp4 | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 249
|
|
||||||
- rcp_adulto_svb_thumb.jpg | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb_thumb.jpg | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 250
|
|
||||||
- rcp_adulto_svb.mp4 | rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 251
|
|
||||||
- rcp_adulto_svb.mp4 | /assets/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 252
|
|
||||||
- rcp_posicion_manos_adulto.png | rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/API_ENDPOINTS_ESPECIFICACION.md, línea 504
|
|
||||||
- rcp_posicion_manos_adulto.png | /media/images/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/API_ENDPOINTS_ESPECIFICACION.md, línea 505
|
|
||||||
- introduccion_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/introduccion_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_RCP_ADULTO_SVB.md, línea 41
|
|
||||||
- introduccion_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/introduccion_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_RCP_ADULTO_SVB.md, línea 41
|
|
||||||
|
|
||||||
## Medios con ambigüedad (revisión manual)
|
|
||||||
- imagen_presion_directa.jpg | imagen_presion_directa.jpg | /home/planetazuzu/guia-tes/docs/DISENO_FUNCIONAL_PANEL_ADMINISTRACION.md, línea 247
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | public/assets/infografias/bloque-0-fundamentos/tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 23
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 28
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | /assets/infografias/bloque-0-fundamentos/tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 43
|
|
||||||
- tabla_escala_glasgow.png | public/assets/infografias/bloque-0-fundamentos/tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 70
|
|
||||||
- tabla_escala_glasgow.png | tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 75
|
|
||||||
- diagrama_start_completo.svg | public/assets/infografias/bloque-0-fundamentos/diagrama_start_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 82
|
|
||||||
- guia_inmovilizacion_manual.png | public/assets/infografias/bloque-2-inmovilizacion/guia_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 94
|
|
||||||
- guia_inmovilizacion_manual.png | guia_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 99
|
|
||||||
- diagrama_uso_tablero_espinal.png | public/assets/infografias/bloque-2-inmovilizacion/diagrama_uso_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 106
|
|
||||||
- infografia_transferencias_seguras.png | public/assets/infografias/bloque-2-inmovilizacion/infografia_transferencias_seguras.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 114
|
|
||||||
- guia_aspiracion.png | public/assets/infografias/bloque-3-material-sanitario/guia_aspiracion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 126
|
|
||||||
- guia_aspiracion.png | guia_aspiracion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 131
|
|
||||||
- organizacion_maletin.png | public/assets/infografias/bloque-3-material-sanitario/organizacion_maletin.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 138
|
|
||||||
- rcp_adulto_paso_a_paso.png | rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 155
|
|
||||||
- farmacologia_basica_visual.png | public/assets/infografias/bloque-6-farmacologia/farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 260
|
|
||||||
- farmacologia_basica_visual.png | farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 267
|
|
||||||
- tabla_dosis_pediatricas.png | public/assets/infografias/bloque-6-farmacologia/tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 273
|
|
||||||
- vias_administracion.png | public/assets/infografias/bloque-6-farmacologia/vias_administracion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 282
|
|
||||||
- tema_descripcion.png | tema_descripcion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 320
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 163
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 171
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 179
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | public/assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 40
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 44
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | public/assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 51
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 97
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.svg | ABCDE_PIRAMIDE_PRIORIDAD_VITAL.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 101
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 106
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.svg | ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 110
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 115
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.svg | ABCDE_FLUJO_DETERIORO_FISIOLOGICO.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 119
|
|
||||||
- .png | .png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 127
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 163
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 171
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_MEDIOS_VISUALES.md, línea 179
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 133
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 26
|
|
||||||
- TES.svg | TES.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 27
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 28
|
|
||||||
- fast_transtelefonico.png | fast_transtelefonico.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 29
|
|
||||||
- flujo_desa_telefono.png | flujo_desa_telefono.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 30
|
|
||||||
- flujo_rcp_transtelefonica.png | flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 31
|
|
||||||
- guia_colocacion_dispositivos_oxigenoterapia.png | guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 32
|
|
||||||
- START.svg | START.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 33
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 34
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 35
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 46
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 49
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 61
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 64
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 79
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 80
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 81
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 84
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 85
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 86
|
|
||||||
- TES.svg | TES.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 95
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 96
|
|
||||||
- START.svg | START.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 97
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 121
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 133
|
|
||||||
- .png | .png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 147
|
|
||||||
- .png | .png | /home/planetazuzu/guia-tes/docs/VERIFICACION_RUTAS_ASSETS_BLOQUE_0.md, línea 148
|
|
||||||
- hemorragia_presion_directa.jpg | hemorragia_presion_directa.jpg | /home/planetazuzu/guia-tes/docs/FASE_C_MODELO_DATOS_CANONICO.md, línea 212
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 145
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 50
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 55
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 13
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.jpg | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.jpg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 14
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 15
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL_V2.png | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL_V2.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 25
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | public/assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 35
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 50
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 55
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/INSTRUCCIONES_SUBIR_INFOGRAFIA.md, línea 70
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 508
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 510
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 512
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 497
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 498
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 499
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 508
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 510
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/MEDIOS_VISUALES_SECCION_2_ABCDE.md, línea 512
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 5
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 8
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 9
|
|
||||||
- favicon.svg | favicon.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 25
|
|
||||||
- favicon.svg | /home/planetazuzu/guia-tes/public/favicon.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 26
|
|
||||||
- icon_512.png | icon_512.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 30
|
|
||||||
- icon_512.png | /home/planetazuzu/guia-tes/public/icon_512.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 31
|
|
||||||
- icon_512_maskable.png | icon_512_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 35
|
|
||||||
- icon_512_maskable.png | /home/planetazuzu/guia-tes/public/icon_512_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 36
|
|
||||||
- icon_192_maskable.png | icon_192_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 40
|
|
||||||
- icon_192_maskable.png | /home/planetazuzu/guia-tes/public/icon_192_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 41
|
|
||||||
- icon_192.png | icon_192.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 45
|
|
||||||
- icon_192.png | /home/planetazuzu/guia-tes/public/icon_192.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 46
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 55
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 56
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 65
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 66
|
|
||||||
- posicion_tes_inmovilizacion_manual.png | posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 70
|
|
||||||
- posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 71
|
|
||||||
- componentes_colchon_vacio.png | componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 75
|
|
||||||
- componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 76
|
|
||||||
- errores_frecuentes_collarin_cervical.png | errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 80
|
|
||||||
- errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 81
|
|
||||||
- seleccion_talla_collarin_medicion_anatomica.png | seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 85
|
|
||||||
- seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 86
|
|
||||||
- seleccion_talla_collarin_tabla_tallas.png | seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 90
|
|
||||||
- seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 91
|
|
||||||
- colocacion_collarin_paso_5_verificacion.png | colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 95
|
|
||||||
- colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 96
|
|
||||||
- seleccion_talla_collarin_cervical1.png | seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 100
|
|
||||||
- seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 101
|
|
||||||
- colocacion_collarin_paso_6_liberacion_controlada.png | colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 105
|
|
||||||
- colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 106
|
|
||||||
- colocacion_collarin_paso_4_ajuste_cierres.png | colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 110
|
|
||||||
- colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 111
|
|
||||||
- seleccion_talla_collarin_error_demasiado_grande.png | seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 115
|
|
||||||
- seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 116
|
|
||||||
- tecnica_sujecion_manual_cervical.png | tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 120
|
|
||||||
- tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 121
|
|
||||||
- seleccion_talla_collarin_cervical.png | seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 125
|
|
||||||
- seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 126
|
|
||||||
- colocacion_collarin_paso_2_parte_posterior.png | colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 130
|
|
||||||
- colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 131
|
|
||||||
- componentes_camilla_cuchara.png | componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 135
|
|
||||||
- componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 136
|
|
||||||
- componentes_tablero_espinal.png | componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 140
|
|
||||||
- componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 141
|
|
||||||
- colocacion_colchon_vacio_paso_a_paso.png | colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 145
|
|
||||||
- colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 146
|
|
||||||
- situaciones_que_requieren_inmovilizacion.png | situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 150
|
|
||||||
- situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 151
|
|
||||||
- colocacion_collarin_paso_1_preparacion.png | colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 155
|
|
||||||
- colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 156
|
|
||||||
- colocacion_collarin_paso_3_parte_anterior.png | colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 160
|
|
||||||
- colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 161
|
|
||||||
- secuencia_transicion_inmovilizacion.png | secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 165
|
|
||||||
- secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 166
|
|
||||||
- componentes_sistema_inmovilizacion.png | componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 170
|
|
||||||
- componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 171
|
|
||||||
- verificaciones_post_colocacion_collarin.png | verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 175
|
|
||||||
- verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 176
|
|
||||||
- coordinacion_equipo_inmovilizacion.png | coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 180
|
|
||||||
- coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 181
|
|
||||||
- uso_correcto_pulsioximetro.png | uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 185
|
|
||||||
- uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 186
|
|
||||||
- configuracion_maxima_fio2_bolsa_mascarilla.png | configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 190
|
|
||||||
- configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 191
|
|
||||||
- canulas_guedel_nasofaringea.png | canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 195
|
|
||||||
- canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 196
|
|
||||||
- uso_correcto_ambu.png | uso_correcto_ambu.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 200
|
|
||||||
- uso_correcto_ambu.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_ambu.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 201
|
|
||||||
- dispositivos_supragloticos_guia.png | dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 205
|
|
||||||
- dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 206
|
|
||||||
- uso_correcto_tensiometro.png | uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 210
|
|
||||||
- uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 211
|
|
||||||
- interpretacion_constantes_semaforo.png | interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 215
|
|
||||||
- interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 216
|
|
||||||
- ventilacion_medios_fortuna.png | ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 220
|
|
||||||
- ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 221
|
|
||||||
- registro_constantes_vitales.png | registro_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 225
|
|
||||||
- registro_constantes_vitales.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/registro_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 226
|
|
||||||
- configuracion_gps_antes_de_salir.png | configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 230
|
|
||||||
- configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-7-conduccion/configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 231
|
|
||||||
- flujo_rcp_transtelefonica.png | flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 235
|
|
||||||
- flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 236
|
|
||||||
- farmacologia_basica_visual.png | farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 240
|
|
||||||
- farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 241
|
|
||||||
- flujo_desa_telefono.png | flujo_desa_telefono.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 245
|
|
||||||
- flujo_desa_telefono.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/flujo_desa_telefono.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 246
|
|
||||||
- tabla_dosis_pediatricas.png | tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 250
|
|
||||||
- tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 251
|
|
||||||
- sistema_abcde_prioridades_emergencias.png | sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 255
|
|
||||||
- sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 256
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 260
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 261
|
|
||||||
- vias_administracion.png | vias_administracion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 265
|
|
||||||
- vias_administracion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/vias_administracion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 266
|
|
||||||
- sistema_abcde_prioridades_emergencias.webp | sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 270
|
|
||||||
- sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 271
|
|
||||||
- rcp_adulto_paso_a_paso.png | rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 275
|
|
||||||
- rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 276
|
|
||||||
- ovace_pediatrica.png | ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 280
|
|
||||||
- ovace_pediatrica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 281
|
|
||||||
- guia_colocacion_dispositivos_oxigenoterapia.png | guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 285
|
|
||||||
- guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 286
|
|
||||||
- tabla_escala_glasgow.png | tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 290
|
|
||||||
- tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 291
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.png | el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 295
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 296
|
|
||||||
- diagrama_flujo_start_triaje_es.svg | diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 300
|
|
||||||
- diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 301
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 305
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 306
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 310
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 311
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.png | priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 315
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 316
|
|
||||||
- fast_transtelefonico.png | fast_transtelefonico.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 320
|
|
||||||
- fast_transtelefonico.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/fast_transtelefonico.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 321
|
|
||||||
- ovace_lactantes.png | ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 325
|
|
||||||
- ovace_lactantes.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 326
|
|
||||||
- abcde_introduccion_estructura_mental.svg | abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 330
|
|
||||||
- abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 331
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.webp | el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 335
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 336
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.webp | priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 340
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 341
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 345
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 346
|
|
||||||
- diagrama_decisiones_eticas_urgencias.png | diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 350
|
|
||||||
- diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-12-marco-legal/diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 351
|
|
||||||
- diagrama_decisiones_eticas.png | diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 355
|
|
||||||
- diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-12-marco-legal/diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 356
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 362
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 363
|
|
||||||
- favicon.svg | favicon.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 380
|
|
||||||
- favicon.svg | /home/planetazuzu/guia-tes/public/favicon.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 381
|
|
||||||
- icon_512.png | icon_512.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 385
|
|
||||||
- icon_512.png | /home/planetazuzu/guia-tes/public/icon_512.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 386
|
|
||||||
- icon_512_maskable.png | icon_512_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 390
|
|
||||||
- icon_512_maskable.png | /home/planetazuzu/guia-tes/public/icon_512_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 391
|
|
||||||
- icon_192_maskable.png | icon_192_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 395
|
|
||||||
- icon_192_maskable.png | /home/planetazuzu/guia-tes/public/icon_192_maskable.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 396
|
|
||||||
- icon_192.png | icon_192.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 400
|
|
||||||
- icon_192.png | /home/planetazuzu/guia-tes/public/icon_192.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 401
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 410
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 411
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 420
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 421
|
|
||||||
- posicion_tes_inmovilizacion_manual.png | posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 425
|
|
||||||
- posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 426
|
|
||||||
- componentes_colchon_vacio.png | componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 430
|
|
||||||
- componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_colchon_vacio.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 431
|
|
||||||
- errores_frecuentes_collarin_cervical.png | errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 435
|
|
||||||
- errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/errores_frecuentes_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 436
|
|
||||||
- seleccion_talla_collarin_medicion_anatomica.png | seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 440
|
|
||||||
- seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_medicion_anatomica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 441
|
|
||||||
- seleccion_talla_collarin_tabla_tallas.png | seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 445
|
|
||||||
- seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_tabla_tallas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 446
|
|
||||||
- colocacion_collarin_paso_5_verificacion.png | colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 450
|
|
||||||
- colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_5_verificacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 451
|
|
||||||
- seleccion_talla_collarin_cervical1.png | seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 455
|
|
||||||
- seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 456
|
|
||||||
- colocacion_collarin_paso_6_liberacion_controlada.png | colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 460
|
|
||||||
- colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_6_liberacion_controlada.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 461
|
|
||||||
- colocacion_collarin_paso_4_ajuste_cierres.png | colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 465
|
|
||||||
- colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_4_ajuste_cierres.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 466
|
|
||||||
- seleccion_talla_collarin_error_demasiado_grande.png | seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 470
|
|
||||||
- seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_error_demasiado_grande.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 471
|
|
||||||
- tecnica_sujecion_manual_cervical.png | tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 475
|
|
||||||
- tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/tecnica_sujecion_manual_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 476
|
|
||||||
- seleccion_talla_collarin_cervical.png | seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 480
|
|
||||||
- seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 481
|
|
||||||
- colocacion_collarin_paso_2_parte_posterior.png | colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 485
|
|
||||||
- colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_2_parte_posterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 486
|
|
||||||
- componentes_camilla_cuchara.png | componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 490
|
|
||||||
- componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_camilla_cuchara.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 491
|
|
||||||
- componentes_tablero_espinal.png | componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 495
|
|
||||||
- componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 496
|
|
||||||
- colocacion_colchon_vacio_paso_a_paso.png | colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 500
|
|
||||||
- colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_colchon_vacio_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 501
|
|
||||||
- situaciones_que_requieren_inmovilizacion.png | situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 505
|
|
||||||
- situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/situaciones_que_requieren_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 506
|
|
||||||
- colocacion_collarin_paso_1_preparacion.png | colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 510
|
|
||||||
- colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 511
|
|
||||||
- colocacion_collarin_paso_3_parte_anterior.png | colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 515
|
|
||||||
- colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/colocacion_collarin_paso_3_parte_anterior.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 516
|
|
||||||
- secuencia_transicion_inmovilizacion.png | secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 520
|
|
||||||
- secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/secuencia_transicion_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 521
|
|
||||||
- componentes_sistema_inmovilizacion.png | componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 525
|
|
||||||
- componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 526
|
|
||||||
- verificaciones_post_colocacion_collarin.png | verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 530
|
|
||||||
- verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/verificaciones_post_colocacion_collarin.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 531
|
|
||||||
- coordinacion_equipo_inmovilizacion.png | coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 535
|
|
||||||
- coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-2-inmovilizacion/coordinacion_equipo_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 536
|
|
||||||
- uso_correcto_pulsioximetro.png | uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 540
|
|
||||||
- uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_pulsioximetro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 541
|
|
||||||
- configuracion_maxima_fio2_bolsa_mascarilla.png | configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 545
|
|
||||||
- configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/configuracion_maxima_fio2_bolsa_mascarilla.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 546
|
|
||||||
- canulas_guedel_nasofaringea.png | canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 550
|
|
||||||
- canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 551
|
|
||||||
- uso_correcto_ambu.png | uso_correcto_ambu.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 555
|
|
||||||
- uso_correcto_ambu.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_ambu.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 556
|
|
||||||
- dispositivos_supragloticos_guia.png | dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 560
|
|
||||||
- dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/dispositivos_supragloticos_guia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 561
|
|
||||||
- uso_correcto_tensiometro.png | uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 565
|
|
||||||
- uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/uso_correcto_tensiometro.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 566
|
|
||||||
- interpretacion_constantes_semaforo.png | interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 570
|
|
||||||
- interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/interpretacion_constantes_semaforo.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 571
|
|
||||||
- ventilacion_medios_fortuna.png | ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 575
|
|
||||||
- ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/ventilacion_medios_fortuna.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 576
|
|
||||||
- registro_constantes_vitales.png | registro_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 580
|
|
||||||
- registro_constantes_vitales.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-3-material-sanitario/registro_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 581
|
|
||||||
- configuracion_gps_antes_de_salir.png | configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 585
|
|
||||||
- configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-7-conduccion/configuracion_gps_antes_de_salir.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 586
|
|
||||||
- flujo_rcp_transtelefonica.png | flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 590
|
|
||||||
- flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/flujo_rcp_transtelefonica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 591
|
|
||||||
- farmacologia_basica_visual.png | farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 595
|
|
||||||
- farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 596
|
|
||||||
- flujo_desa_telefono.png | flujo_desa_telefono.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 600
|
|
||||||
- flujo_desa_telefono.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/flujo_desa_telefono.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 601
|
|
||||||
- tabla_dosis_pediatricas.png | tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 605
|
|
||||||
- tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 606
|
|
||||||
- sistema_abcde_prioridades_emergencias.png | sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 610
|
|
||||||
- sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 611
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 615
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 616
|
|
||||||
- vias_administracion.png | vias_administracion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 620
|
|
||||||
- vias_administracion.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/vias_administracion.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 621
|
|
||||||
- sistema_abcde_prioridades_emergencias.webp | sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 625
|
|
||||||
- sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/sistema_abcde_prioridades_emergencias.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 626
|
|
||||||
- rcp_adulto_paso_a_paso.png | rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 630
|
|
||||||
- rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 631
|
|
||||||
- ovace_pediatrica.png | ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 635
|
|
||||||
- ovace_pediatrica.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 636
|
|
||||||
- guia_colocacion_dispositivos_oxigenoterapia.png | guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 640
|
|
||||||
- guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/guia_colocacion_dispositivos_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 641
|
|
||||||
- tabla_escala_glasgow.png | tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 645
|
|
||||||
- tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 646
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.png | el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 650
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/el_orden_importa_maeious_que_la_velocidad.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 651
|
|
||||||
- diagrama_flujo_start_triaje_es.svg | diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 655
|
|
||||||
- diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/diagrama_flujo_start_triaje_es.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 656
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 660
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 661
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 665
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 666
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.png | priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 670
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/priorizaciaeioun_vital_el_enfoque_abcde.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 671
|
|
||||||
- fast_transtelefonico.png | fast_transtelefonico.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 675
|
|
||||||
- fast_transtelefonico.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/fast_transtelefonico.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 676
|
|
||||||
- ovace_lactantes.png | ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 680
|
|
||||||
- ovace_lactantes.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 681
|
|
||||||
- abcde_introduccion_estructura_mental.svg | abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 685
|
|
||||||
- abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 686
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.webp | el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 690
|
|
||||||
- el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/el_orden_importa_maeious_que_la_velocidad.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 691
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.webp | priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 695
|
|
||||||
- priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/priorizaciaeioun_vital_el_enfoque_abcde.webp | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 696
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 700
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-0-fundamentos/diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 701
|
|
||||||
- diagrama_decisiones_eticas_urgencias.png | diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 705
|
|
||||||
- diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-12-marco-legal/diagrama_decisiones_eticas_urgencias.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 706
|
|
||||||
- diagrama_decisiones_eticas.png | diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 710
|
|
||||||
- diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/public/assets/infografias/bloque-12-marco-legal/diagrama_decisiones_eticas.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 711
|
|
||||||
- hemorragia_presion_directa.jpg | hemorragia_presion_directa.jpg | /home/planetazuzu/guia-tes/docs/MODELO_DATOS_CANONICO_DEFINITIVO.md, línea 305
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 41
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 43
|
|
||||||
- TES.svg | TES.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 65
|
|
||||||
- algoritmo_operativo_del_tes.svg | algoritmo_operativo_del_tes.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 65
|
|
||||||
- START.svg | START.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 66
|
|
||||||
- resumen_visual_del_algoritmo_start.svg | resumen_visual_del_algoritmo_start.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 66
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 67
|
|
||||||
- abcde_introduccion_estructura_mental.svg | abcde_introduccion_estructura_mental.svg | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 67
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | public/assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.png | /home/planetazuzu/guia-tes/docs/PROXIMOS_PASOS_POST_INFOGRAFIA.md, línea 17
|
|
||||||
- tabla_rangos_normales_constantes_vitales.png | bloque-0-fundamentos/tabla_rangos_normales_constantes_vitales.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 11
|
|
||||||
- tabla_escala_glasgow.png | bloque-0-fundamentos/tabla_escala_glasgow.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 13
|
|
||||||
- diagrama_start_completo.svg | bloque-0-fundamentos/diagrama_start_completo.svg | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 14
|
|
||||||
- guia_inmovilizacion_manual.png | bloque-2-inmovilizacion/guia_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 15
|
|
||||||
- diagrama_uso_tablero_espinal.png | bloque-2-inmovilizacion/diagrama_uso_tablero_espinal.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 16
|
|
||||||
- infografia_transferencias_seguras.png | bloque-2-inmovilizacion/infografia_transferencias_seguras.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 17
|
|
||||||
- guia_aspiracion.png | bloque-3-material-sanitario/guia_aspiracion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 18
|
|
||||||
- organizacion_maletin.png | bloque-3-material-sanitario/organizacion_maletin.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 19
|
|
||||||
- farmacologia_basica_visual.png | bloque-6-farmacologia/farmacologia_basica_visual.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 28
|
|
||||||
- tabla_dosis_pediatricas.png | bloque-6-farmacologia/tabla_dosis_pediatricas.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 29
|
|
||||||
- vias_administracion.png | bloque-6-farmacologia/vias_administracion.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 30
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | public/assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INFOGRAFIA_ABCDE_INTEGRADA.md, línea 13
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INFOGRAFIA_ABCDE_INTEGRADA.md, línea 33
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | public/assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/INFOGRAFIA_ABCDE_INTEGRADA.md, línea 151
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 40
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 42
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 42
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 58
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 60
|
|
||||||
- img.png | img.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 82
|
|
||||||
- img.png | img.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 84
|
|
||||||
- optimized.png | optimized.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 84
|
|
||||||
- velocidad.png | velocidad.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 88
|
|
||||||
- el_orden_importa_mas_que_la_velocidad.png | el_orden_importa_mas_que_la_velocidad.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 88
|
|
||||||
- Emergencias.png | Emergencias.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 90
|
|
||||||
- sistema_abcde_prioridades_emergencias.png | sistema_abcde_prioridades_emergencias.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 90
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 173
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 174
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 175
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 176
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 181
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 181
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 190
|
|
||||||
- img.png | img.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 269
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia.png | tabla_rangos_fio2_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 285
|
|
||||||
- tabla_rangos_fio2_oxigenoterapia1.png | tabla_rangos_fio2_oxigenoterapia1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 286
|
|
||||||
- seleccion_talla_collarin_cervical.png | seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 287
|
|
||||||
- seleccion_talla_collarin_cervical1.png | seleccion_talla_collarin_cervical1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 288
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 289
|
|
||||||
- componentes_sistema_inmovilizacion.png | componentes_sistema_inmovilizacion.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 290
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 291
|
|
||||||
- posicion_tes_inmovilizacion_manual.png | posicion_tes_inmovilizacion_manual.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 292
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 293
|
|
||||||
- 1.png | 1.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 299
|
|
||||||
- 2.png | 2.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 299
|
|
||||||
- img.png | img.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 536
|
|
||||||
- imagen_400w.webp | /assets/infografias/imagen_400w.webp | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 703
|
|
||||||
- imagen_800w.webp | /assets/infografias/imagen_800w.webp | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 704
|
|
||||||
- imagen_1200w.webp | /assets/infografias/imagen_1200w.webp | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 705
|
|
||||||
- TES.svg | TES.svg | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 17
|
|
||||||
- diagrama_seleccion_dispositivo_oxigenoterapia.png | diagrama_seleccion_dispositivo_oxigenoterapia.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 18
|
|
||||||
- colocacion_collarin_paso_1_preparacion.png | colocacion_collarin_paso_1_preparacion.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 21
|
|
||||||
- seleccion_talla_collarin_cervical.png | seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 22
|
|
||||||
- canulas_guedel_nasofaringea.png | canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 25
|
|
||||||
- canulas_guedel_nasofaringea.png | /assets/infografias/bloque-3-material-sanitario/canulas_guedel_nasofaringea.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 41
|
|
||||||
- TES.svg | TES.svg | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 104
|
|
||||||
- seleccion_talla_collarin_cervical.png | /assets/infografias/bloque-2-inmovilizacion/seleccion_talla_collarin_cervical.png | /home/planetazuzu/guia-tes/docs/consolidado/SISTEMA_MEDIOS_VISUALES.md, línea 350
|
|
||||||
- ABCDE_ALGORITMO_COMPLETO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ALGORITMO_COMPLETO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_03_ABCDE_OPERATIVO.md, línea 11
|
|
||||||
- ABCDE_ALGORITMO_COMPLETO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ALGORITMO_COMPLETO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_03_ABCDE_OPERATIVO.md, línea 11
|
|
||||||
- ABCDE_IMAGEN_01_ESCANEO_INICIAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_01_ESCANEO_INICIAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 107
|
|
||||||
- ABCDE_IMAGEN_02_PRIORIDAD_VITAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_02_PRIORIDAD_VITAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 124
|
|
||||||
- ABCDE_IMAGEN_03_TRANSICION_CONTROLADO.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_03_TRANSICION_CONTROLADO.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 141
|
|
||||||
- ABCDE_IMAGEN_04_REEVALUACION_CICLO.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_04_REEVALUACION_CICLO.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 158
|
|
||||||
- ABCDE_IMAGEN_05_VISION_GLOBAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_05_VISION_GLOBAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 175
|
|
||||||
- ABCDE_IMAGEN_01_ESCANEO_INICIAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_01_ESCANEO_INICIAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 107
|
|
||||||
- ABCDE_IMAGEN_02_PRIORIDAD_VITAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_02_PRIORIDAD_VITAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 124
|
|
||||||
- ABCDE_IMAGEN_03_TRANSICION_CONTROLADO.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_03_TRANSICION_CONTROLADO.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 141
|
|
||||||
- ABCDE_IMAGEN_04_REEVALUACION_CICLO.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_04_REEVALUACION_CICLO.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 158
|
|
||||||
- ABCDE_IMAGEN_05_VISION_GLOBAL.jpg | /assets/infografias/bloque-0-fundamentos/ABCDE_IMAGEN_05_VISION_GLOBAL.jpg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_04_ABCDE_OPERATIVO.md, línea 175
|
|
||||||
- favicon.svg | favicon.svg | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 16
|
|
||||||
- icon_192.png | icon_192.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 16
|
|
||||||
- icon_512.png | icon_512.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 16
|
|
||||||
- icon_192.png | public/icon_192.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 62
|
|
||||||
- icon_512.png | public/icon_512.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 62
|
|
||||||
- icon_192_maskable.png | public/icon_192_maskable.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 62
|
|
||||||
- icon_512_maskable.png | public/icon_512_maskable.png | /home/planetazuzu/guia-tes/docs/consolidado/CHECKLIST_PWA_COMPLETA.md, línea 62
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_ABCDE_OPERATIVO.md, línea 61
|
|
||||||
- ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /assets/infografias/bloque-0-fundamentos/ABCDE_INTRODUCCION_ESTRUCTURA_MENTAL.svg | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_ABCDE_OPERATIVO.md, línea 61
|
|
||||||
- ABCDE_ERROR_01_SALTARSE_LETRAS.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_01_SALTARSE_LETRAS.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 21
|
|
||||||
- ABCDE_ERROR_02_ATASCARSE_LETRA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_02_ATASCARSE_LETRA.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 85
|
|
||||||
- ABCDE_ERROR_03_VISIBLE_SOBRE_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_03_VISIBLE_SOBRE_VITAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 149
|
|
||||||
- ABCDE_ERROR_04_NO_REEVALUAR.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_04_NO_REEVALUAR.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 211
|
|
||||||
- ABCDE_ERROR_05_PERDER_VISION_GLOBAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_05_PERDER_VISION_GLOBAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 275
|
|
||||||
- ABCDE_SINTESIS_ESTRUCTURA_PROTECCION.png | /assets/infografias/bloque-0-fundamentos/ABCDE_SINTESIS_ESTRUCTURA_PROTECCION.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 337
|
|
||||||
- ABCDE_ERROR_01_SALTARSE_LETRAS.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_01_SALTARSE_LETRAS.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 21
|
|
||||||
- ABCDE_ERROR_02_ATASCARSE_LETRA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_02_ATASCARSE_LETRA.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 85
|
|
||||||
- ABCDE_ERROR_03_VISIBLE_SOBRE_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_03_VISIBLE_SOBRE_VITAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 149
|
|
||||||
- ABCDE_ERROR_04_NO_REEVALUAR.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_04_NO_REEVALUAR.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 211
|
|
||||||
- ABCDE_ERROR_05_PERDER_VISION_GLOBAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_ERROR_05_PERDER_VISION_GLOBAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 275
|
|
||||||
- ABCDE_SINTESIS_ESTRUCTURA_PROTECCION.png | /assets/infografias/bloque-0-fundamentos/ABCDE_SINTESIS_ESTRUCTURA_PROTECCION.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_05_ABCDE_OPERATIVO.md, línea 337
|
|
||||||
- favicon.svg | favicon.svg | /home/planetazuzu/guia-tes/docs/consolidado/ANALISIS_TECNOLOGICO_PROYECTO.md, línea 122
|
|
||||||
- ABCDE_RESUMEN_FLUJO_MENTAL_CONTINUO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_RESUMEN_FLUJO_MENTAL_CONTINUO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_08_ABCDE_OPERATIVO.md, línea 10
|
|
||||||
- ABCDE_RESUMEN_FLUJO_MENTAL_CONTINUO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_RESUMEN_FLUJO_MENTAL_CONTINUO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_08_ABCDE_OPERATIVO.md, línea 10
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 93
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 112
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 143
|
|
||||||
- ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /assets/infografias/bloque-0-fundamentos/ABCDE_PIRAMIDE_PRIORIDAD_VITAL.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 93
|
|
||||||
- ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /assets/infografias/bloque-0-fundamentos/ABCDE_COMPARACION_DESORDEN_VS_ESTRUCTURA.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 112
|
|
||||||
- ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /assets/infografias/bloque-0-fundamentos/ABCDE_FLUJO_DETERIORO_FISIOLOGICO.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_02_ABCDE_OPERATIVO.md, línea 143
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
# Medios reales necesarios (filtrado, sin placeholders)
|
|
||||||
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 172
|
|
||||||
- rcp_adulto_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 150
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 161
|
|
||||||
- rcp_adulto_paso_a_paso.png | /assets/infografias/bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 172
|
|
||||||
- rcp_pediatrica_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_pediatrica_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 177
|
|
||||||
- rcp_lactantes_paso_a_paso.png | public/assets/infografias/bloque-4-rcp/rcp_lactantes_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 185
|
|
||||||
- diagrama_uso_desa.png | public/assets/infografias/bloque-4-rcp/diagrama_uso_desa.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 193
|
|
||||||
- ovace_adulto.png | public/assets/infografias/bloque-4-rcp/ovace_adulto.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 205
|
|
||||||
- ovace_pediatrica.png | public/assets/infografias/bloque-4-rcp/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 217
|
|
||||||
- ovace_lactantes.png | public/assets/infografias/bloque-4-rcp/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/MEDIOS_AUDIOVISUALES_FALTANTES.md, línea 225
|
|
||||||
- rcp_posicion_manos_adulto.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 361
|
|
||||||
- rcp_posicion_manos_adulto.png | /assets/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 363
|
|
||||||
- rcp_profundidad_compresiones.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_profundidad_compresiones.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 384
|
|
||||||
- rcp_profundidad_compresiones.png | /assets/infografias/rcp/rcp_profundidad_compresiones.png | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 386
|
|
||||||
- rcp_adulto_svb.mp4 | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 407
|
|
||||||
- rcp_adulto_svb_thumb.jpg | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb_thumb.jpg | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 408
|
|
||||||
- rcp_adulto_svb.mp4 | /assets/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_PACK_SPEC.md, línea 410
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 60
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 61
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 415
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/AUDITORIA_ASSETS_MULTIMEDIA.json, línea 416
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/SEMANA_2_COMPLETADA.md, línea 42
|
|
||||||
- rcp_adulto_paso_a_paso.png | bloque-4-rcp/rcp_adulto_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 20
|
|
||||||
- rcp_pediatrica_paso_a_paso.png | bloque-4-rcp/rcp_pediatrica_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 21
|
|
||||||
- rcp_lactantes_paso_a_paso.png | bloque-4-rcp/rcp_lactantes_paso_a_paso.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 22
|
|
||||||
- diagrama_uso_desa.png | bloque-4-rcp/diagrama_uso_desa.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 23
|
|
||||||
- ovace_adulto.png | bloque-4-rcp/ovace_adulto.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 24
|
|
||||||
- ovace_pediatrica.png | bloque-4-rcp/ovace_pediatrica.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 25
|
|
||||||
- ovace_lactantes.png | bloque-4-rcp/ovace_lactantes.png | /home/planetazuzu/guia-tes/docs/MEDIOS_FALTANTES_TABLA_RAPIDA.md, línea 26
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 59
|
|
||||||
- ABCDE.png | ABCDE.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 89
|
|
||||||
- algoritmo_rcp_comentado.svg | /assets/infografias/bloque-4-rcp/algoritmo_rcp_comentado.svg | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 231
|
|
||||||
- compresiones_incorrectas.png | /assets/infografias/bloque-4-rcp/compresiones_incorrectas.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 232
|
|
||||||
- compresiones_correctas.png | /assets/infografias/bloque-4-rcp/compresiones_correctas.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 233
|
|
||||||
- descompresion_incompleta.png | /assets/infografias/bloque-4-rcp/descompresion_incompleta.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 234
|
|
||||||
- descompresion_completa.png | /assets/infografias/bloque-4-rcp/descompresion_completa.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 235
|
|
||||||
- resumen_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/resumen_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/ANALISIS_MEDIOS_SUPERFLUOS.md, línea 236
|
|
||||||
- rcp_posicion_manos_adulto.png | .supabase.co/storage/v1/object/public/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 225
|
|
||||||
- rcp_posicion_manos_adulto.png | /assets/infografias/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 227
|
|
||||||
- rcp_adulto_svb.mp4 | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 249
|
|
||||||
- rcp_adulto_svb_thumb.jpg | .supabase.co/storage/v1/object/public/videos/rcp/rcp_adulto_svb_thumb.jpg | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 250
|
|
||||||
- rcp_adulto_svb.mp4 | /assets/videos/rcp/rcp_adulto_svb.mp4 | /home/planetazuzu/guia-tes/docs/CONTENT_MODEL.md, línea 252
|
|
||||||
- rcp_posicion_manos_adulto.png | /media/images/rcp/rcp_posicion_manos_adulto.png | /home/planetazuzu/guia-tes/docs/API_ENDPOINTS_ESPECIFICACION.md, línea 505
|
|
||||||
- introduccion_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/introduccion_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_RCP_ADULTO_SVB.md, línea 41
|
|
||||||
- introduccion_rcp_adulto_svb.png | /assets/infografias/bloque-4-rcp/introduccion_rcp_adulto_svb.png | /home/planetazuzu/guia-tes/docs/consolidado/SECCION_01_RCP_ADULTO_SVB.md, línea 41
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
# Sistema de generación de medios audiovisuales – Prioridad A
|
|
||||||
|
|
||||||
Este documento define prompts y criterios de salida para la generación sistemática de medios críticos.
|
|
||||||
|
|
||||||
## Estándar de salida
|
|
||||||
- Resolución imágenes: 1920x1080 (mínimo)
|
|
||||||
- Formato imágenes: PNG o JPG según nombre objetivo
|
|
||||||
- Vídeos: MP4 H.264, 1080p, 30fps, 30-60s
|
|
||||||
- Sin logos, sin marcas de agua, sin texto excesivo
|
|
||||||
- Estilo educativo TES, alta legibilidad en móvil
|
|
||||||
|
|
||||||
## Prioridad A – Medios críticos (12)
|
|
||||||
|
|
||||||
### B01_1.1_colocación_manguito_ta_y_pulsioxímetro.jpg
|
|
||||||
- Tipo: Imagen
|
|
||||||
- Ruta final esperada: assets/images/bloque_01/B01_1.1_colocación_manguito_ta_y_pulsioxímetro.jpg
|
|
||||||
- Prompt sugerido:
|
|
||||||
Fotografía clínica realista, entorno prehospitalario TES, mostrando la colocación correcta del manguito de tensión arterial y el pulsioxímetro en un paciente adulto, con manos del TES colocando ambos dispositivos de forma correcta. Iluminación neutral, alta nitidez, sin logos. Enfoque en el procedimiento, plano medio, fondo limpio.
|
|
||||||
|
|
||||||
### B01_1.1_vídeo_toma_ta_manual_y_errores_típicos.mp4
|
|
||||||
- Tipo: Vídeo
|
|
||||||
- Ruta final esperada: assets/videos/bloque_01/B01_1.1_vídeo_toma_ta_manual_y_errores_típicos.mp4
|
|
||||||
- Prompt sugerido:
|
|
||||||
Vídeo educativo corto (30-60s) mostrando toma manual de tensión arterial con esfigmomanómetro y estetoscopio. Incluir 2-3 errores típicos (manguito mal colocado, brazo sin soporte, estetoscopio mal posicionado) y la corrección inmediata. Estilo demostrativo TES, fondo neutro, sin logos, texto breve en pantalla para señalar errores.
|
|
||||||
|
|
||||||
### B01_1.2_diagrama_abcde_operativo.png
|
|
||||||
- Tipo: Imagen
|
|
||||||
- Ruta final esperada: assets/images/bloque_01/B01_1.2_diagrama_abcde_operativo.png
|
|
||||||
- Prompt sugerido:
|
|
||||||
Infografía clínica en español con diagrama ABCDE operativo. Diseño limpio, fondo claro, títulos grandes: A (Vía aérea), B (Respiración), C (Circulación), D (Neurológico), E (Exposición). Usar iconos simples y flechas de secuencia. Estilo educativo TES, alto contraste, legible en móvil.
|
|
||||||
|
|
||||||
### B01_1.4_diagrama_start_flujo_simple.png
|
|
||||||
- Tipo: Imagen
|
|
||||||
- Ruta final esperada: assets/images/bloque_01/B01_1.4_diagrama_start_flujo_simple.png
|
|
||||||
- Prompt sugerido:
|
|
||||||
Diagrama de flujo START para triaje en español, versión simplificada. Caja inicial con “¿Respira?”, ramas con colores de triaje (rojo, amarillo, verde, negro). Iconos mínimos, tipografía grande, estilo infografía clínica TES, legible en móvil.
|
|
||||||
File diff suppressed because it is too large
Load diff
234
README.md
Normal file → Executable file
234
README.md
Normal file → Executable file
|
|
@ -1,45 +1,220 @@
|
||||||
# EMERGES TES - Protocolo Rápido
|
# EMERGES TES - Guía Digital de Protocolos de Emergencias 🏥
|
||||||
|
|
||||||
Aplicación PWA para protocolos médicos de emergencia.
|
**Aplicación web progresiva (PWA)** diseñada como herramienta de referencia rápida para **Técnicos de Emergencias Sanitarias (TES)** y profesionales de emergencias médicas.
|
||||||
|
|
||||||
## 🚑 Características
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
- **Protocolos de emergencia** (RCP, vía aérea, shock, etc.)
|
## 👤 Autor
|
||||||
- **Vademécum de fármacos** con dosis, indicaciones y contraindicaciones
|
**Javier Fernández** · [@planetazuzu](https://github.com/planetazuzu)
|
||||||
- **Calculadoras médicas** (Glasgow, perfusiones)
|
TES · Developer · La Rioja 🇪🇸
|
||||||
- **Guías de actuación en escena** (seguridad, ABCDE, triage)
|
|
||||||
- **Diseño optimizado para móvil** y uso nocturno
|
---
|
||||||
- **Funciona offline** (PWA)
|
|
||||||
|
## 🎯 Objetivo Funcional
|
||||||
|
|
||||||
|
**EMERGES TES** es un **socio cognitivo** que reduce la carga cognitiva en emergencias médicas proporcionando:
|
||||||
|
|
||||||
|
- ✅ Acceso rápido a información crítica (< 2 clics)
|
||||||
|
- ✅ Protocolos operativos estructurados (RCP, vía aérea, shock, etc.)
|
||||||
|
- ✅ Vademécum de fármacos con dosis, indicaciones y contraindicaciones
|
||||||
|
- ✅ Calculadoras médicas (Glasgow, perfusiones, dosis pediátricas)
|
||||||
|
- ✅ Guías formativas asociadas a protocolos
|
||||||
|
- ✅ Funcionalidad **offline-first** (funciona sin conexión)
|
||||||
|
- ✅ Diseño optimizado para uso bajo presión y estrés
|
||||||
|
|
||||||
|
**No es:**
|
||||||
|
- ❌ Un sistema de diagnóstico automático
|
||||||
|
- ❌ Una herramienta de IA que toma decisiones clínicas
|
||||||
|
- ❌ Un sustituto de la formación reglada del profesional
|
||||||
|
- ❌ Un reemplazo del criterio clínico
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Estado Actual del Proyecto
|
||||||
|
|
||||||
|
**Estado:** En desarrollo activo
|
||||||
|
|
||||||
|
### ✅ Completado
|
||||||
|
|
||||||
|
- **Frontend PWA:** React 19 + TypeScript, funcional con Service Worker
|
||||||
|
- **Backend API:** Express + PostgreSQL con Clean Architecture
|
||||||
|
- **Protocolos:** 50+ protocolos operativos estructurados
|
||||||
|
- **Fármacos:** 100+ fármacos con dosis y especificaciones
|
||||||
|
- **Guías formativas:** Guías de refuerzo asociadas a protocolos
|
||||||
|
- **Herramientas clínicas:** Checklists, calculadoras, pathways
|
||||||
|
- **Validación médica:** Workflow completo de revisión y aprobación
|
||||||
|
- **Glosario:** Backend completo con ~74 términos migrados
|
||||||
|
- **Medios:** Sistema de gestión de imágenes/vídeos/documentos
|
||||||
|
- **Tests:** Tests unitarios backend (servicios) y tests integración API
|
||||||
|
|
||||||
|
### ⚠️ En Progreso / Pendiente
|
||||||
|
|
||||||
|
- **Frontend glosario:** La app aún no consume `GET /api/glossary` (usa datos locales)
|
||||||
|
- **Cobertura frontend:** Objetivo 80% (en aumento)
|
||||||
|
- **Contenido:** Categoría "Escena" vacía en protocolos (ver `docs/CONTENIDO_FALTANTE.md`)
|
||||||
|
|
||||||
|
**Documentación detallada:** Ver `docs/QUE_FALTA.md` y `docs/CONTENIDO_FALTANTE.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ ACLARACIÓN FUNDAMENTAL: ¿Qué son los "Tickets"?
|
||||||
|
|
||||||
|
### Los tickets NO son funcionalidad de negocio
|
||||||
|
|
||||||
|
**IMPORTANTE:** En este proyecto, los **"tickets"** (TICKET-001, TICKET-002, etc.) **NO** son una funcionalidad de negocio.
|
||||||
|
|
||||||
|
- ❌ **NO existe** un sistema de tickets de soporte, incidencias o solicitudes de usuarios
|
||||||
|
- ❌ **NO hay** entidades llamadas "tickets" en el código
|
||||||
|
- ❌ **NO hay** lógica de negocio asociada a tickets
|
||||||
|
|
||||||
|
### Los tickets son tareas técnicas de desarrollo
|
||||||
|
|
||||||
|
Los tickets son **únicamente** una forma de dividir, organizar y seguir las **tareas pendientes de desarrollo** de la aplicación.
|
||||||
|
|
||||||
|
- ✅ Son equivalentes a **issues** o **tickets técnicos** de JIRA / GitHub
|
||||||
|
- ✅ Representan **tareas técnicas** o **pasos de desarrollo**
|
||||||
|
- ✅ Sirven para **planificación y seguimiento** del trabajo
|
||||||
|
- ✅ Están documentados en `docs/QUE_FALTA.md` y `docs/BACKLOG_MICRO_TICKETS.md`
|
||||||
|
|
||||||
|
**Ejemplo:** TICKET-013 significa "Implementar ValidationService para workflow de validación médica" (tarea técnica completada).
|
||||||
|
|
||||||
|
### Entidades reales del dominio
|
||||||
|
|
||||||
|
Las entidades reales del dominio de la aplicación son:
|
||||||
|
|
||||||
|
- **ContentItem:** Protocolos, guías, manuales, checklists
|
||||||
|
- **Drug:** Fármacos con especificaciones técnicas
|
||||||
|
- **GlossaryTerm:** Términos médicos del glosario
|
||||||
|
- **MediaResource:** Imágenes, vídeos, documentos
|
||||||
|
- **MedicalReview:** Revisiones médicas de contenido
|
||||||
|
|
||||||
|
**Ninguna de estas entidades se llama "ticket" ni tiene relación con tickets.**
|
||||||
|
|
||||||
|
### Si en el futuro se añade un sistema de tickets de negocio
|
||||||
|
|
||||||
|
Si en el futuro se añade un sistema de tickets de soporte/incidencias como **nueva funcionalidad**, deberá tratarse como una **FEATURE independiente**, no implementada actualmente.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🛠️ Stack Tecnológico
|
## 🛠️ Stack Tecnológico
|
||||||
|
|
||||||
- **React 18** + **TypeScript 5.8**
|
### Frontend
|
||||||
- **Vite 5.4** - Build tool
|
- **React 19** + **TypeScript 5.8**
|
||||||
|
- **Vite 7** - Build tool
|
||||||
- **Tailwind CSS 3.4** + **shadcn/ui** - UI Framework
|
- **Tailwind CSS 3.4** + **shadcn/ui** - UI Framework
|
||||||
- **React Router 6.3** - Navegación SPA
|
- **React Router 6.3** - Navegación SPA
|
||||||
- **PWA** - Service Worker + Manifest
|
- **PWA** - Service Worker + Manifest
|
||||||
|
- **Vitest** - Testing
|
||||||
|
|
||||||
## 📦 Instalación
|
### Backend
|
||||||
|
- **Node.js** + **TypeScript**
|
||||||
|
- **Express 4.18** - Framework web
|
||||||
|
- **PostgreSQL** - Base de datos relacional
|
||||||
|
- **Redis** - Caché (opcional)
|
||||||
|
- **Zod** - Validación de esquemas
|
||||||
|
- **Vitest** + **Supertest** - Testing
|
||||||
|
|
||||||
|
### Arquitectura
|
||||||
|
- **Clean Architecture** en backend (Domain → Application → Infrastructure → Presentation)
|
||||||
|
- **Arquitectura funcional React** en frontend
|
||||||
|
- **Type Safety estricto** (sin `any`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Instalación y Ejecución
|
||||||
|
|
||||||
|
### Requisitos previos
|
||||||
|
- Node.js 20+
|
||||||
|
- PostgreSQL 14+
|
||||||
|
- Redis (opcional, para caché)
|
||||||
|
|
||||||
|
### Instalación
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Clonar repositorio
|
||||||
|
git clone [url-del-repositorio]
|
||||||
|
cd guia-tes
|
||||||
|
|
||||||
|
# Instalar dependencias frontend
|
||||||
npm install
|
npm install
|
||||||
npm run dev # Desarrollo (localhost:8096)
|
|
||||||
npm run build # Producción
|
# Instalar dependencias backend
|
||||||
|
cd backend
|
||||||
|
npm install
|
||||||
|
cd ..
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🚀 Despliegue Principal
|
### Ejecución
|
||||||
|
|
||||||
- **Servidor:** PM2 en puerto 8607
|
#### Solo frontend (desarrollo)
|
||||||
- **Docker:** `docker-compose up --build`
|
```bash
|
||||||
- **CI/CD:** GitHub Actions
|
npm run dev
|
||||||
|
# Abre en http://localhost:8096
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Frontend + Backend local (con Docker)
|
||||||
|
```bash
|
||||||
|
npm run dev:local
|
||||||
|
# Inicia PostgreSQL + Redis en Docker
|
||||||
|
# Frontend: http://localhost:8096
|
||||||
|
# Backend: http://localhost:3000
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Backend solo
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
npm run dev
|
||||||
|
# Backend en http://localhost:3000
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build producción
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Frontend
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Backend
|
||||||
|
cd backend
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
**Documentación detallada:** Ver `docs/DESPLIEGUE_LOCAL.md` para configuración completa con Docker.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📚 Documentación
|
## 📚 Documentación
|
||||||
|
|
||||||
Ver `docs/consolidado/` para documentación completa:
|
### Documentación principal
|
||||||
- Despliegue (Docker, PM2, GitHub Actions)
|
- **`SPEC.md`** - Especificación maestra del proyecto (fuente de verdad)
|
||||||
- PWA y Service Worker
|
- **`.cursorrules`** - Reglas de desarrollo y arquitectura
|
||||||
- Estado de funcionalidades
|
- **`docs/QUE_FALTA.md`** - Estado de tickets técnicos y tareas pendientes
|
||||||
- Análisis técnico
|
- **`docs/CONTENIDO_FALTANTE.md`** - Contenido faltante (protocolos, guías, glosario)
|
||||||
|
|
||||||
|
### Documentación para desarrolladores
|
||||||
|
- **`README_DEV.md`** - Reglas de desarrollo y principios
|
||||||
|
- **`README_ARCHITECTURE.md`** - Arquitectura del sistema
|
||||||
|
- **`README_TODO.md`** - Tareas pendientes con prioridades
|
||||||
|
|
||||||
|
### Documentación técnica
|
||||||
|
- **`docs/BACKLOG_MICRO_TICKETS.md`** - Backlog de fases ejecutadas
|
||||||
|
- **`docs/ANDRAGOGIA_STRESS_READY_112.md`** - Principios de diseño UX
|
||||||
|
- **`docs/CHECKLIST_ANTES_ACEPTAR_CAMBIOS.md`** - Checklist de calidad
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Evolución de la Arquitectura
|
||||||
|
|
||||||
|
**Nota importante:** La arquitectura puede evolucionar según las necesidades del proyecto.
|
||||||
|
|
||||||
|
- Las decisiones arquitectónicas están documentadas en `SPEC.md` y `.cursorrules`
|
||||||
|
- Cualquier cambio arquitectónico debe documentarse explícitamente
|
||||||
|
- Se prioriza la mantenibilidad y claridad del código
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📄 Licencia
|
## 📄 Licencia
|
||||||
|
|
||||||
|
|
@ -47,6 +222,15 @@ Ver `docs/consolidado/` para documentación completa:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 👥 Contribución
|
||||||
|
|
||||||
|
Este proyecto está en desarrollo activo. Para contribuir:
|
||||||
|
|
||||||
|
1. Leer `README_DEV.md` para reglas de desarrollo
|
||||||
|
2. Revisar `README_ARCHITECTURE.md` para entender la arquitectura
|
||||||
|
3. Consultar `README_TODO.md` para tareas pendientes
|
||||||
|
4. Seguir las reglas definidas en `.cursorrules`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**Desarrollado para Técnicos de Emergencias Sanitarias**
|
**Desarrollado para Técnicos de Emergencias Sanitarias**
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,191 +0,0 @@
|
||||||
# 🎛️ RESUMEN: ADMIN PANEL - SISTEMA COMPLETO
|
|
||||||
|
|
||||||
## ✅ IMPLEMENTADO
|
|
||||||
|
|
||||||
### 1. Modelo de Datos Extendido ✅
|
|
||||||
|
|
||||||
**Ubicación**: `admin-panel/shared/types/content.ts`
|
|
||||||
|
|
||||||
- ✅ Interfaces TypeScript para Protocol, Guide, Manual, Drug, Checklist
|
|
||||||
- ✅ Extensión del modelo existente sin romper compatibilidad
|
|
||||||
- ✅ ContentPack para distribución
|
|
||||||
- ✅ Tipos de autenticación y autorización
|
|
||||||
|
|
||||||
### 2. Backend API Completo ✅
|
|
||||||
|
|
||||||
**Ubicación**: `backend/src/`
|
|
||||||
|
|
||||||
#### Autenticación
|
|
||||||
- ✅ `routes/auth.js` - Login, JWT, verificación
|
|
||||||
- ✅ `middleware/auth.js` - Autenticación y permisos
|
|
||||||
- ✅ RBAC con 5 roles (super_admin, editor_clinico, editor_formativo, revisor, viewer)
|
|
||||||
|
|
||||||
#### Gestión de Contenido
|
|
||||||
- ✅ `routes/content.js` - CRUD completo
|
|
||||||
- GET /api/content - Listar con filtros
|
|
||||||
- GET /api/content/:id - Obtener por ID
|
|
||||||
- POST /api/content - Crear
|
|
||||||
- PUT /api/content/:id - Actualizar
|
|
||||||
- GET /api/content/:id/versions - Historial
|
|
||||||
- POST /api/content/:id/validate - Validar
|
|
||||||
- GET /api/content/pack/latest - Content pack público
|
|
||||||
|
|
||||||
#### Scripts
|
|
||||||
- ✅ `scripts/seed-admin.js` - Crear usuario admin
|
|
||||||
- ✅ `scripts/seed-content.js` - Crear contenido de ejemplo
|
|
||||||
|
|
||||||
### 3. Integración en App Principal ✅
|
|
||||||
|
|
||||||
**Ubicación**: `src/services/content-pack.ts`
|
|
||||||
|
|
||||||
- ✅ Servicio de content pack
|
|
||||||
- ✅ Sistema de "override" (pack > local)
|
|
||||||
- ✅ Cache offline
|
|
||||||
- ✅ Funciones para obtener contenido con override
|
|
||||||
- ✅ **NO modifica** `procedures.ts` ni `drugs.ts`
|
|
||||||
|
|
||||||
### 4. Seed Data ✅
|
|
||||||
|
|
||||||
**Contenido de ejemplo creado**:
|
|
||||||
|
|
||||||
- ✅ **3 Checklists**:
|
|
||||||
- Electrodos/Parches DESA
|
|
||||||
- Preparación Intubación
|
|
||||||
- RCP Checklist
|
|
||||||
|
|
||||||
- ✅ **2 Protocolos Extendidos**:
|
|
||||||
- RCP Adulto SVB (con checklist, dosis inline, fuentes)
|
|
||||||
- Shock Hemorrágico (con dosis inline, fuentes)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚧 PENDIENTE (Admin Panel UI)
|
|
||||||
|
|
||||||
La estructura del Admin Panel está creada, pero los componentes React están pendientes:
|
|
||||||
|
|
||||||
- [ ] Dashboard con estadísticas
|
|
||||||
- [ ] Biblioteca de contenido
|
|
||||||
- [ ] Editores especializados (Protocolo, Checklist, Guía, Vademécum)
|
|
||||||
- [ ] Vista de auditoría
|
|
||||||
- [ ] Gestión de fuentes
|
|
||||||
|
|
||||||
**Nota**: El backend está completo y funcional. El Admin Panel UI se puede desarrollar progresivamente.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 INICIO RÁPIDO
|
|
||||||
|
|
||||||
### Backend
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
|
|
||||||
# 1. Instalar dependencias
|
|
||||||
npm install
|
|
||||||
|
|
||||||
# 2. Configurar .env (ver backend/ENV_TEMPLATE.md)
|
|
||||||
# DB_USER=planetazuzu
|
|
||||||
# DB_PASSWORD=Monforte.1977
|
|
||||||
# DB_NAME=emerges_tes
|
|
||||||
# JWT_SECRET=tu-secret-key-aqui
|
|
||||||
|
|
||||||
# 3. Crear usuario y BD (requiere sudo)
|
|
||||||
bash crear-usuario-y-bd.sh
|
|
||||||
|
|
||||||
# 4. Crear tablas
|
|
||||||
npm run db:create
|
|
||||||
|
|
||||||
# 5. Crear usuario admin
|
|
||||||
npm run seed:admin
|
|
||||||
|
|
||||||
# 6. Crear contenido de ejemplo
|
|
||||||
npm run seed:content
|
|
||||||
|
|
||||||
# 7. Iniciar servidor
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
**Credenciales por defecto**:
|
|
||||||
- Email: `admin@emerges-tes.local`
|
|
||||||
- Password: `Admin123!`
|
|
||||||
|
|
||||||
### Admin Panel (cuando esté implementado)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd admin-panel
|
|
||||||
npm install
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📁 ARCHIVOS CREADOS
|
|
||||||
|
|
||||||
### Modelo de Datos
|
|
||||||
- `admin-panel/shared/types/content.ts` - Interfaces de contenido
|
|
||||||
- `admin-panel/shared/types/auth.ts` - Tipos de autenticación
|
|
||||||
|
|
||||||
### Backend
|
|
||||||
- `backend/src/routes/auth.js` - Rutas de autenticación
|
|
||||||
- `backend/src/routes/content.js` - Rutas de contenido
|
|
||||||
- `backend/src/middleware/auth.js` - Middleware de auth
|
|
||||||
- `backend/scripts/seed-admin.js` - Seed de usuario admin
|
|
||||||
- `backend/scripts/seed-content.js` - Seed de contenido
|
|
||||||
|
|
||||||
### Integración
|
|
||||||
- `src/services/content-pack.ts` - Servicio de content pack
|
|
||||||
|
|
||||||
### Documentación
|
|
||||||
- `docs/ADMIN_PANEL_IMPLEMENTACION.md` - Documentación completa
|
|
||||||
- `docs/CHECKLIST_VERIFICACION_ADMIN_PANEL.md` - Checklist de verificación
|
|
||||||
- `admin-panel/README.md` - README del admin panel
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ RESTRICCIONES CUMPLIDAS
|
|
||||||
|
|
||||||
- ✅ **NO se modifica** `src/data/procedures.ts` ni `searchProcedures()`
|
|
||||||
- ✅ **NO se modifica** `src/data/drugs.ts` ni `searchDrugs()`
|
|
||||||
- ✅ **NO rompe PWA offline** - Content pack funciona offline
|
|
||||||
- ✅ **NO cambia rutas existentes** - Compatibilidad total
|
|
||||||
- ✅ **Versionado completo** - Todo contenido es versionado
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔐 ROLES Y PERMISOS
|
|
||||||
|
|
||||||
| Rol | Permisos |
|
|
||||||
|-----|----------|
|
|
||||||
| **super_admin** | Acceso total |
|
|
||||||
| **editor_clinico** | Editar protocolos, fármacos, checklists |
|
|
||||||
| **editor_formativo** | Editar guías y manuales |
|
|
||||||
| **revisor** | Revisar y validar |
|
|
||||||
| **viewer** | Solo lectura |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 PRÓXIMOS PASOS
|
|
||||||
|
|
||||||
1. **Completar Admin Panel UI** (componentes React)
|
|
||||||
2. **Integrar content pack** en componentes existentes de la app
|
|
||||||
3. **Tests automatizados**
|
|
||||||
4. **Documentación de API**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 ESTADO
|
|
||||||
|
|
||||||
✅ **Backend completo y funcional**
|
|
||||||
✅ **Modelo de datos diseñado**
|
|
||||||
✅ **Sistema de content pack implementado**
|
|
||||||
✅ **Seed data creado**
|
|
||||||
🚧 **Admin Panel UI pendiente** (estructura lista)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 DOCUMENTACIÓN
|
|
||||||
|
|
||||||
- **Implementación completa**: `docs/ADMIN_PANEL_IMPLEMENTACION.md`
|
|
||||||
- **Checklist de verificación**: `docs/CHECKLIST_VERIFICACION_ADMIN_PANEL.md`
|
|
||||||
- **README Admin Panel**: `admin-panel/README.md`
|
|
||||||
|
|
||||||
0
admin-panel/DIAGNOSTICO.md
Normal file → Executable file
0
admin-panel/DIAGNOSTICO.md
Normal file → Executable file
0
admin-panel/README.md
Normal file → Executable file
0
admin-panel/README.md
Normal file → Executable file
0
admin-panel/index.html
Normal file → Executable file
0
admin-panel/index.html
Normal file → Executable file
0
admin-panel/package-lock.json
generated
Normal file → Executable file
0
admin-panel/package-lock.json
generated
Normal file → Executable file
0
admin-panel/package.json
Normal file → Executable file
0
admin-panel/package.json
Normal file → Executable file
0
admin-panel/shared/types/auth.ts
Normal file → Executable file
0
admin-panel/shared/types/auth.ts
Normal file → Executable file
4
admin-panel/shared/types/content-canonical.ts
Normal file → Executable file
4
admin-panel/shared/types/content-canonical.ts
Normal file → Executable file
|
|
@ -125,7 +125,7 @@ export interface ContentItem {
|
||||||
updated_at: string; // ISO timestamp
|
updated_at: string; // ISO timestamp
|
||||||
|
|
||||||
// Metadatos adicionales
|
// Metadatos adicionales
|
||||||
metadata?: Record<string, any>; // Metadatos flexibles
|
metadata?: Record<string, unknown>; // Metadatos flexibles
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -438,7 +438,7 @@ export interface AuditLog {
|
||||||
user_role: UserRole; // Rol del usuario
|
user_role: UserRole; // Rol del usuario
|
||||||
|
|
||||||
// Metadatos
|
// Metadatos
|
||||||
metadata?: Record<string, any>; // Metadatos adicionales (cambios, valores anteriores, etc.)
|
metadata?: Record<string, unknown>; // Metadatos adicionales (cambios, valores anteriores, etc.)
|
||||||
|
|
||||||
// Timestamp
|
// Timestamp
|
||||||
timestamp: string; // ISO timestamp
|
timestamp: string; // ISO timestamp
|
||||||
|
|
|
||||||
4
admin-panel/shared/types/content.ts
Normal file → Executable file
4
admin-panel/shared/types/content.ts
Normal file → Executable file
|
|
@ -336,7 +336,7 @@ export interface ContentListResponse {
|
||||||
export interface ContentVersion {
|
export interface ContentVersion {
|
||||||
versionId: string;
|
versionId: string;
|
||||||
version: number;
|
version: number;
|
||||||
content: any; // Contenido de esta versión
|
content: unknown; // Contenido de esta versión
|
||||||
status: ContentStatus;
|
status: ContentStatus;
|
||||||
changeSummary?: string;
|
changeSummary?: string;
|
||||||
createdBy: string;
|
createdBy: string;
|
||||||
|
|
@ -351,7 +351,7 @@ export interface AuditLog {
|
||||||
versionId?: string;
|
versionId?: string;
|
||||||
userId: string;
|
userId: string;
|
||||||
action: 'create' | 'update' | 'delete' | 'validate' | 'approve' | 'publish' | 'revert';
|
action: 'create' | 'update' | 'delete' | 'validate' | 'approve' | 'publish' | 'revert';
|
||||||
details?: Record<string, any>;
|
details?: Record<string, unknown>;
|
||||||
timestamp: string;
|
timestamp: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
0
admin-panel/src/App.tsx
Normal file → Executable file
0
admin-panel/src/App.tsx
Normal file → Executable file
0
admin-panel/src/components/auth/ProtectedRoute.tsx
Normal file → Executable file
0
admin-panel/src/components/auth/ProtectedRoute.tsx
Normal file → Executable file
0
admin-panel/src/components/content/ResourcesManager.tsx
Normal file → Executable file
0
admin-panel/src/components/content/ResourcesManager.tsx
Normal file → Executable file
2
admin-panel/src/components/content/ValidationHistory.tsx
Normal file → Executable file
2
admin-panel/src/components/content/ValidationHistory.tsx
Normal file → Executable file
|
|
@ -11,7 +11,7 @@ interface ValidationHistoryItem {
|
||||||
id: string;
|
id: string;
|
||||||
action: string;
|
action: string;
|
||||||
timestamp: string;
|
timestamp: string;
|
||||||
metadata: any;
|
metadata: Record<string, unknown>;
|
||||||
username?: string;
|
username?: string;
|
||||||
role?: string;
|
role?: string;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
admin-panel/src/components/layout/Layout.tsx
Normal file → Executable file
6
admin-panel/src/components/layout/Layout.tsx
Normal file → Executable file
|
|
@ -113,9 +113,9 @@ function SidebarContent({
|
||||||
logout,
|
logout,
|
||||||
onClose,
|
onClose,
|
||||||
}: {
|
}: {
|
||||||
navigation: any[];
|
navigation: Array<{ name: string; href: string; icon: React.ComponentType }>;
|
||||||
location: any;
|
location: { pathname: string };
|
||||||
user: any;
|
user: { username?: string; role?: string } | null;
|
||||||
logout: () => void;
|
logout: () => void;
|
||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
}) {
|
}) {
|
||||||
|
|
|
||||||
0
admin-panel/src/contexts/AuthContext.tsx
Normal file → Executable file
0
admin-panel/src/contexts/AuthContext.tsx
Normal file → Executable file
7
admin-panel/src/hooks/useContentStats.ts
Normal file → Executable file
7
admin-panel/src/hooks/useContentStats.ts
Normal file → Executable file
|
|
@ -57,10 +57,11 @@ export function useContentStats() {
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('✅ Estadísticas cargadas correctamente');
|
console.log('✅ Estadísticas cargadas correctamente');
|
||||||
} catch (error: any) {
|
} catch (error: unknown) {
|
||||||
console.error('❌ Error cargando estadísticas:', error);
|
console.error('❌ Error cargando estadísticas:', error);
|
||||||
console.error('Detalles del error:', error.response?.data || error.message);
|
const err = error as { response?: { data?: unknown; status?: number }; message?: string };
|
||||||
console.error('Status:', error.response?.status);
|
console.error('Detalles del error:', err.response?.data || err.message);
|
||||||
|
console.error('Status:', err.response?.status);
|
||||||
|
|
||||||
// Si es error 401, el token puede estar expirado
|
// Si es error 401, el token puede estar expirado
|
||||||
if (error.response?.status === 401) {
|
if (error.response?.status === 401) {
|
||||||
|
|
|
||||||
0
admin-panel/src/index.css
Normal file → Executable file
0
admin-panel/src/index.css
Normal file → Executable file
0
admin-panel/src/main.tsx
Normal file → Executable file
0
admin-panel/src/main.tsx
Normal file → Executable file
0
admin-panel/src/pages/AuditPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/AuditPage.tsx
Normal file → Executable file
7
admin-panel/src/pages/ChecklistEditorPage.tsx
Normal file → Executable file
7
admin-panel/src/pages/ChecklistEditorPage.tsx
Normal file → Executable file
|
|
@ -46,7 +46,7 @@ export default function ChecklistEditorPage() {
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
contentService
|
contentService
|
||||||
.getById(id)
|
.getById(id)
|
||||||
.then((data: any) => {
|
.then((data: unknown) => {
|
||||||
setChecklist({
|
setChecklist({
|
||||||
...data,
|
...data,
|
||||||
content: data.content || {
|
content: data.content || {
|
||||||
|
|
@ -115,9 +115,10 @@ export default function ChecklistEditorPage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
navigate('/content');
|
navigate('/content');
|
||||||
} catch (error: any) {
|
} catch (error: unknown) {
|
||||||
console.error('Error guardando checklist:', error);
|
console.error('Error guardando checklist:', error);
|
||||||
setErrors({ general: error.response?.data?.error || 'Error al guardar' });
|
const err = error as { response?: { data?: { error?: string } } };
|
||||||
|
setErrors({ general: err.response?.data?.error || 'Error al guardar' });
|
||||||
} finally {
|
} finally {
|
||||||
setIsSaving(false);
|
setIsSaving(false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
admin-panel/src/pages/ContentLibraryPage.tsx
Normal file → Executable file
7
admin-panel/src/pages/ContentLibraryPage.tsx
Normal file → Executable file
|
|
@ -45,12 +45,13 @@ export default function ContentLibraryPage() {
|
||||||
} else {
|
} else {
|
||||||
console.warn('⚠️ No se encontraron items. Verifica filtros y autenticación.');
|
console.warn('⚠️ No se encontraron items. Verifica filtros y autenticación.');
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: unknown) {
|
||||||
console.error('❌ Error cargando contenido:', error);
|
console.error('❌ Error cargando contenido:', error);
|
||||||
console.error('Detalles:', error.response?.data || error.message);
|
const err = error as { response?: { data?: unknown; status?: number }; message?: string };
|
||||||
|
console.error('Detalles:', err.response?.data || err.message);
|
||||||
|
|
||||||
// Si es error 401, redirigir a login
|
// Si es error 401, redirigir a login
|
||||||
if (error.response?.status === 401) {
|
if (err.response?.status === 401) {
|
||||||
console.warn('⚠️ Token expirado o inválido. Redirigiendo a login...');
|
console.warn('⚠️ Token expirado o inválido. Redirigiendo a login...');
|
||||||
localStorage.removeItem('admin_token');
|
localStorage.removeItem('admin_token');
|
||||||
localStorage.removeItem('admin_user');
|
localStorage.removeItem('admin_user');
|
||||||
|
|
|
||||||
0
admin-panel/src/pages/ContentPackPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/ContentPackPage.tsx
Normal file → Executable file
4
admin-panel/src/pages/DashboardPage.tsx
Normal file → Executable file
4
admin-panel/src/pages/DashboardPage.tsx
Normal file → Executable file
|
|
@ -13,7 +13,7 @@ const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000';
|
||||||
export default function DashboardPage() {
|
export default function DashboardPage() {
|
||||||
const { stats, isLoading } = useContentStats();
|
const { stats, isLoading } = useContentStats();
|
||||||
const { hasPermission } = useAuth();
|
const { hasPermission } = useAuth();
|
||||||
const [validationStats, setValidationStats] = useState<any>(null);
|
const [validationStats, setValidationStats] = useState<Record<string, unknown> | null>(null);
|
||||||
const [pendingCount, setPendingCount] = useState(0);
|
const [pendingCount, setPendingCount] = useState(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -160,7 +160,7 @@ function StatCard({
|
||||||
value,
|
value,
|
||||||
subtitle,
|
subtitle,
|
||||||
}: {
|
}: {
|
||||||
icon: any;
|
icon: React.ComponentType;
|
||||||
title: string;
|
title: string;
|
||||||
value: number;
|
value: number;
|
||||||
subtitle: string;
|
subtitle: string;
|
||||||
|
|
|
||||||
0
admin-panel/src/pages/DrugEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/DrugEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/DrugManagerPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/DrugManagerPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/GuideEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/GuideEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/LoginPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/LoginPage.tsx
Normal file → Executable file
53
admin-panel/src/pages/MediaManagerPage.tsx
Normal file → Executable file
53
admin-panel/src/pages/MediaManagerPage.tsx
Normal file → Executable file
|
|
@ -36,8 +36,11 @@ export default function MediaManagerPage() {
|
||||||
const [typeFilter, setTypeFilter] = useState<'all' | 'image' | 'video'>('all');
|
const [typeFilter, setTypeFilter] = useState<'all' | 'image' | 'video'>('all');
|
||||||
const [searchQuery, setSearchQuery] = useState('');
|
const [searchQuery, setSearchQuery] = useState('');
|
||||||
const [orphanedCount, setOrphanedCount] = useState(0);
|
const [orphanedCount, setOrphanedCount] = useState(0);
|
||||||
|
const [loadError, setLoadError] = useState<string | null>(null);
|
||||||
const [showUpload, setShowUpload] = useState(false);
|
const [showUpload, setShowUpload] = useState(false);
|
||||||
const [uploadFile, setUploadFile] = useState<File | null>(null);
|
const [uploadFile, setUploadFile] = useState<File | null>(null);
|
||||||
|
const [uploadError, setUploadError] = useState<string | null>(null);
|
||||||
|
const [uploadValidationDetails, setUploadValidationDetails] = useState<{ path: string; message: string }[] | null>(null);
|
||||||
const [uploadData, setUploadData] = useState({
|
const [uploadData, setUploadData] = useState({
|
||||||
title: '',
|
title: '',
|
||||||
description: '',
|
description: '',
|
||||||
|
|
@ -48,6 +51,7 @@ export default function MediaManagerPage() {
|
||||||
|
|
||||||
const loadResources = async () => {
|
const loadResources = async () => {
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
|
setLoadError(null);
|
||||||
try {
|
try {
|
||||||
const token = localStorage.getItem('admin_token');
|
const token = localStorage.getItem('admin_token');
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
|
|
@ -63,10 +67,14 @@ export default function MediaManagerPage() {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
if (!response.ok) {
|
||||||
|
setLoadError(data.error || 'Error al cargar recursos');
|
||||||
|
return;
|
||||||
|
}
|
||||||
setResources(data.items || []);
|
setResources(data.items || []);
|
||||||
setTotal(data.total || 0);
|
setTotal(data.total || 0);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error cargando recursos:', error);
|
setLoadError('Error de conexión al cargar recursos');
|
||||||
} finally {
|
} finally {
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
}
|
}
|
||||||
|
|
@ -96,6 +104,8 @@ export default function MediaManagerPage() {
|
||||||
if (!uploadFile) return;
|
if (!uploadFile) return;
|
||||||
|
|
||||||
setIsUploading(true);
|
setIsUploading(true);
|
||||||
|
setUploadError(null);
|
||||||
|
setUploadValidationDetails(null);
|
||||||
try {
|
try {
|
||||||
const token = localStorage.getItem('admin_token');
|
const token = localStorage.getItem('admin_token');
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
|
@ -114,6 +124,8 @@ export default function MediaManagerPage() {
|
||||||
body: formData,
|
body: formData,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
setShowUpload(false);
|
setShowUpload(false);
|
||||||
setUploadFile(null);
|
setUploadFile(null);
|
||||||
|
|
@ -127,12 +139,16 @@ export default function MediaManagerPage() {
|
||||||
await loadResources();
|
await loadResources();
|
||||||
await loadOrphanedCount();
|
await loadOrphanedCount();
|
||||||
} else {
|
} else {
|
||||||
const error = await response.json();
|
setUploadError(data.error || 'Error al subir archivo');
|
||||||
alert(`Error: ${error.error || 'Error al subir archivo'}`);
|
if (Array.isArray(data.details)) {
|
||||||
|
setUploadValidationDetails(data.details);
|
||||||
|
} else {
|
||||||
|
setUploadValidationDetails(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error subiendo archivo:', error);
|
setUploadError('Error de conexión al subir archivo');
|
||||||
alert('Error al subir archivo');
|
setUploadValidationDetails(null);
|
||||||
} finally {
|
} finally {
|
||||||
setIsUploading(false);
|
setIsUploading(false);
|
||||||
}
|
}
|
||||||
|
|
@ -214,6 +230,19 @@ export default function MediaManagerPage() {
|
||||||
<div className="bg-card border border-border rounded-xl p-6 space-y-4">
|
<div className="bg-card border border-border rounded-xl p-6 space-y-4">
|
||||||
<h2 className="text-xl font-semibold text-foreground">Subir Nuevo Recurso</h2>
|
<h2 className="text-xl font-semibold text-foreground">Subir Nuevo Recurso</h2>
|
||||||
|
|
||||||
|
{uploadError && (
|
||||||
|
<div className="bg-red-500/10 border border-red-500/20 rounded-lg p-4 space-y-2" role="alert">
|
||||||
|
<p className="text-red-500 font-medium">{uploadError}</p>
|
||||||
|
{uploadValidationDetails && uploadValidationDetails.length > 0 && (
|
||||||
|
<ul className="text-sm text-red-500/90 list-disc list-inside">
|
||||||
|
{uploadValidationDetails.map((d, i) => (
|
||||||
|
<li key={i}>{d.path ? `${d.path}: ` : ''}{d.message}</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium text-muted-foreground mb-1">
|
<label className="block text-sm font-medium text-muted-foreground mb-1">
|
||||||
Archivo *
|
Archivo *
|
||||||
|
|
@ -308,6 +337,8 @@ export default function MediaManagerPage() {
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setShowUpload(false);
|
setShowUpload(false);
|
||||||
setUploadFile(null);
|
setUploadFile(null);
|
||||||
|
setUploadError(null);
|
||||||
|
setUploadValidationDetails(null);
|
||||||
setUploadData({
|
setUploadData({
|
||||||
title: '',
|
title: '',
|
||||||
description: '',
|
description: '',
|
||||||
|
|
@ -363,7 +394,17 @@ export default function MediaManagerPage() {
|
||||||
|
|
||||||
{/* Lista de recursos */}
|
{/* Lista de recursos */}
|
||||||
<div className="bg-card border border-border rounded-xl overflow-hidden">
|
<div className="bg-card border border-border rounded-xl overflow-hidden">
|
||||||
{isLoading ? (
|
{loadError ? (
|
||||||
|
<div className="p-8 text-center space-y-4">
|
||||||
|
<p className="text-red-500">{loadError}</p>
|
||||||
|
<button
|
||||||
|
onClick={() => loadResources()}
|
||||||
|
className="px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors"
|
||||||
|
>
|
||||||
|
Reintentar
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
) : isLoading ? (
|
||||||
<div className="p-8 text-center text-muted-foreground">Cargando...</div>
|
<div className="p-8 text-center text-muted-foreground">Cargando...</div>
|
||||||
) : resources.length === 0 ? (
|
) : resources.length === 0 ? (
|
||||||
<div className="p-8 text-center text-muted-foreground">
|
<div className="p-8 text-center text-muted-foreground">
|
||||||
|
|
|
||||||
0
admin-panel/src/pages/ProtocolEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/ProtocolEditorPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/ValidationPage.tsx
Normal file → Executable file
0
admin-panel/src/pages/ValidationPage.tsx
Normal file → Executable file
0
admin-panel/src/services/auth.ts
Normal file → Executable file
0
admin-panel/src/services/auth.ts
Normal file → Executable file
0
admin-panel/src/services/content.ts
Normal file → Executable file
0
admin-panel/src/services/content.ts
Normal file → Executable file
0
admin-panel/tailwind.config.js
Normal file → Executable file
0
admin-panel/tailwind.config.js
Normal file → Executable file
0
admin-panel/tsconfig.json
Normal file → Executable file
0
admin-panel/tsconfig.json
Normal file → Executable file
0
admin-panel/tsconfig.node.json
Normal file → Executable file
0
admin-panel/tsconfig.node.json
Normal file → Executable file
0
admin-panel/vite.config.ts
Normal file → Executable file
0
admin-panel/vite.config.ts
Normal file → Executable file
File diff suppressed because it is too large
Load diff
0
backend/CONFIGURAR_PASSWORD.md
Normal file → Executable file
0
backend/CONFIGURAR_PASSWORD.md
Normal file → Executable file
0
backend/ENV_TEMPLATE.md
Normal file → Executable file
0
backend/ENV_TEMPLATE.md
Normal file → Executable file
13
backend/INSTRUCCIONES_CREAR_USUARIO.md
Normal file → Executable file
13
backend/INSTRUCCIONES_CREAR_USUARIO.md
Normal file → Executable file
|
|
@ -10,9 +10,10 @@ sudo -u postgres psql -f scripts/create-user.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
Este script:
|
Este script:
|
||||||
- ✅ Crea el usuario `planetazuzu` con password `Monforte.1977`
|
- ✅ Crea el usuario según configuración (ver variables de entorno)
|
||||||
- ✅ Crea la base de datos `emerges_tes`
|
- ✅ Crea la base de datos `emerges_tes`
|
||||||
- ✅ Da todos los permisos necesarios
|
- ✅ Da todos los permisos necesarios
|
||||||
|
- ⚠️ **IMPORTANTE:** Configura `DB_USER` y `DB_PASSWORD` antes de ejecutar
|
||||||
|
|
||||||
## Opción 2: Manual (si prefieres)
|
## Opción 2: Manual (si prefieres)
|
||||||
|
|
||||||
|
|
@ -20,14 +21,14 @@ Este script:
|
||||||
sudo -u postgres psql
|
sudo -u postgres psql
|
||||||
```
|
```
|
||||||
|
|
||||||
Luego ejecutar en psql:
|
Luego ejecutar en psql (reemplaza 'TU_PASSWORD_SEGURO' con una contraseña segura):
|
||||||
```sql
|
```sql
|
||||||
CREATE USER planetazuzu WITH PASSWORD 'Monforte.1977';
|
CREATE USER tu_usuario WITH PASSWORD 'TU_PASSWORD_SEGURO';
|
||||||
CREATE DATABASE emerges_tes OWNER planetazuzu;
|
CREATE DATABASE emerges_tes OWNER tu_usuario;
|
||||||
GRANT ALL PRIVILEGES ON DATABASE emerges_tes TO planetazuzu;
|
GRANT ALL PRIVILEGES ON DATABASE emerges_tes TO tu_usuario;
|
||||||
\c emerges_tes
|
\c emerges_tes
|
||||||
CREATE SCHEMA IF NOT EXISTS emerges_content;
|
CREATE SCHEMA IF NOT EXISTS emerges_content;
|
||||||
GRANT ALL ON SCHEMA emerges_content TO planetazuzu;
|
GRANT ALL ON SCHEMA emerges_content TO tu_usuario;
|
||||||
\q
|
\q
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
0
backend/README.md
Normal file → Executable file
0
backend/README.md
Normal file → Executable file
82
backend/README_ESTRUCTURA.md
Executable file
82
backend/README_ESTRUCTURA.md
Executable file
|
|
@ -0,0 +1,82 @@
|
||||||
|
# 🏗️ Estructura Clean Architecture - Backend
|
||||||
|
|
||||||
|
## 📁 Estructura de Carpetas
|
||||||
|
|
||||||
|
```
|
||||||
|
backend/src/
|
||||||
|
├── domain/ # 🎯 DOMAIN LAYER
|
||||||
|
│ ├── entities/ # Entidades de negocio
|
||||||
|
│ │ ├── ContentItem.ts
|
||||||
|
│ │ ├── Drug.ts
|
||||||
|
│ │ ├── GlossaryTerm.ts
|
||||||
|
│ │ ├── MediaResource.ts
|
||||||
|
│ │ ├── MedicalReview.ts
|
||||||
|
│ │ └── index.ts
|
||||||
|
│ │
|
||||||
|
│ ├── value-objects/ # Objetos de valor inmutables
|
||||||
|
│ │ ├── ContentStatus.ts
|
||||||
|
│ │ ├── ContentPriority.ts
|
||||||
|
│ │ └── index.ts
|
||||||
|
│ │
|
||||||
|
│ ├── services/ # Servicios de dominio (pendiente)
|
||||||
|
│ ├── repositories/ # Interfaces de repositorios
|
||||||
|
│ │ ├── IContentRepository.ts
|
||||||
|
│ │ ├── IDrugRepository.ts
|
||||||
|
│ │ ├── IGlossaryRepository.ts
|
||||||
|
│ │ ├── IMediaRepository.ts
|
||||||
|
│ │ ├── IReviewRepository.ts
|
||||||
|
│ │ └── index.ts
|
||||||
|
│ │
|
||||||
|
│ └── events/ # Eventos de dominio (pendiente)
|
||||||
|
│
|
||||||
|
├── application/ # 🔧 APPLICATION LAYER
|
||||||
|
│ ├── services/ # Servicios de aplicación (pendiente)
|
||||||
|
│ ├── use-cases/ # Casos de uso (pendiente)
|
||||||
|
│ └── dto/ # Data Transfer Objects (pendiente)
|
||||||
|
│
|
||||||
|
├── infrastructure/ # 🔌 INFRASTRUCTURE LAYER
|
||||||
|
│ ├── repositories/ # Implementaciones (pendiente)
|
||||||
|
│ ├── database/ # Acceso a BD (pendiente)
|
||||||
|
│ ├── storage/ # Almacenamiento (pendiente)
|
||||||
|
│ ├── cache/ # Caché (pendiente)
|
||||||
|
│ └── external/ # Servicios externos (pendiente)
|
||||||
|
│
|
||||||
|
├── presentation/ # 🌐 PRESENTATION LAYER
|
||||||
|
│ ├── routes/ # Rutas Express (existente)
|
||||||
|
│ ├── middleware/ # Middleware (existente)
|
||||||
|
│ └── validators/ # Validadores Zod (existente)
|
||||||
|
│
|
||||||
|
└── shared/ # 🔗 CÓDIGO COMPARTIDO
|
||||||
|
├── types/ # Tipos compartidos
|
||||||
|
├── errors/ # Errores compartidos
|
||||||
|
└── utils/ # Utilidades compartidas
|
||||||
|
```
|
||||||
|
|
||||||
|
## ✅ Estado Actual
|
||||||
|
|
||||||
|
### Completado (Ticket 1.1)
|
||||||
|
- ✅ Estructura de carpetas creada
|
||||||
|
- ✅ Interfaces de repositorios definidas
|
||||||
|
- ✅ Entidades de dominio creadas (tipos TypeScript)
|
||||||
|
- ✅ Value Objects creados (ContentStatus, ContentPriority)
|
||||||
|
- ✅ Tipos compartidos exportados
|
||||||
|
- ✅ Errores de dominio definidos
|
||||||
|
- ✅ Utilidades compartidas
|
||||||
|
|
||||||
|
### Pendiente
|
||||||
|
- ⏳ Implementaciones de repositorios (Infrastructure)
|
||||||
|
- ⏳ Servicios de aplicación (Application)
|
||||||
|
- ⏳ Casos de uso (Application)
|
||||||
|
- ⏳ Value Objects adicionales (DoseRange, PatientAge, etc.)
|
||||||
|
- ⏳ Servicios de dominio (Domain)
|
||||||
|
|
||||||
|
## 📝 Próximos Pasos
|
||||||
|
|
||||||
|
1. **Ticket 1.2:** Crear schemas Zod compartidos
|
||||||
|
2. **Ticket 1.3:** Refactorizar `drugs.ts` del frontend
|
||||||
|
3. **Ticket 1.4:** Refactorizar `procedures.ts` del frontend
|
||||||
|
4. **Ticket 1.5:** Eliminar duplicidades
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Última actualización:** 2025-01-25
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
/**
|
|
||||||
* Configuración de conexión a PostgreSQL
|
|
||||||
*
|
|
||||||
* FASE 1: Infraestructura Base
|
|
||||||
*
|
|
||||||
* IMPORTANTE: Usar variables de entorno para credenciales
|
|
||||||
*/
|
|
||||||
|
|
||||||
import pg from 'pg';
|
|
||||||
import dotenv from 'dotenv';
|
|
||||||
|
|
||||||
dotenv.config();
|
|
||||||
|
|
||||||
const { Pool } = pg;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pool de conexiones a PostgreSQL
|
|
||||||
*/
|
|
||||||
export const pool = new Pool({
|
|
||||||
host: process.env.DB_HOST || 'localhost',
|
|
||||||
port: parseInt(process.env.DB_PORT || '5432', 10),
|
|
||||||
database: process.env.DB_NAME || 'emerges_tes',
|
|
||||||
user: process.env.DB_USER || 'postgres',
|
|
||||||
password: process.env.DB_PASSWORD || '',
|
|
||||||
max: 20, // Máximo de conexiones en el pool
|
|
||||||
idleTimeoutMillis: 30000,
|
|
||||||
connectionTimeoutMillis: 2000,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test de conexión
|
|
||||||
*/
|
|
||||||
export async function testConnection() {
|
|
||||||
try {
|
|
||||||
const result = await pool.query('SELECT NOW()');
|
|
||||||
console.log('✅ Conexión a PostgreSQL exitosa:', result.rows[0].now);
|
|
||||||
return true;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('❌ Error conectando a PostgreSQL:', error.message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Función helper para ejecutar queries
|
|
||||||
* Envuelve pool.query para mantener compatibilidad
|
|
||||||
*/
|
|
||||||
export async function query(text, params) {
|
|
||||||
return await pool.query(text, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cerrar pool de conexiones
|
|
||||||
*/
|
|
||||||
export async function closePool() {
|
|
||||||
await pool.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
0
backend/config/database.ts
Normal file → Executable file
0
backend/config/database.ts
Normal file → Executable file
|
|
@ -10,12 +10,12 @@ cat > /tmp/create-user-emerges.sql << 'SQL'
|
||||||
-- Crear usuario si no existe
|
-- Crear usuario si no existe
|
||||||
DO $$
|
DO $$
|
||||||
BEGIN
|
BEGIN
|
||||||
IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'planetazuzu') THEN
|
IF NOT EXISTS (SELECT FROM pg_user WHERE usename = '${DB_USER:-planetazuzu}') THEN
|
||||||
CREATE USER planetazuzu WITH PASSWORD 'Monforte.1977';
|
CREATE USER ${DB_USER:-planetazuzu} WITH PASSWORD '${DB_PASSWORD}';
|
||||||
RAISE NOTICE 'Usuario planetazuzu creado';
|
RAISE NOTICE 'Usuario ${DB_USER:-planetazuzu} creado';
|
||||||
ELSE
|
ELSE
|
||||||
RAISE NOTICE 'Usuario planetazuzu ya existe';
|
RAISE NOTICE 'Usuario ${DB_USER:-planetazuzu} ya existe';
|
||||||
ALTER USER planetazuzu WITH PASSWORD 'Monforte.1977';
|
ALTER USER ${DB_USER:-planetazuzu} WITH PASSWORD '${DB_PASSWORD}';
|
||||||
END IF;
|
END IF;
|
||||||
END
|
END
|
||||||
$$;
|
$$;
|
||||||
|
|
|
||||||
0
backend/database/migrations/001_create_auth_schema.sql
Normal file → Executable file
0
backend/database/migrations/001_create_auth_schema.sql
Normal file → Executable file
0
backend/database/migrations/002_create_drugs_schema.sql
Normal file → Executable file
0
backend/database/migrations/002_create_drugs_schema.sql
Normal file → Executable file
0
backend/database/migrations/003_create_content_items_schema.sql
Normal file → Executable file
0
backend/database/migrations/003_create_content_items_schema.sql
Normal file → Executable file
60
backend/database/migrations/004_create_glossary_schema.sql
Executable file
60
backend/database/migrations/004_create_glossary_schema.sql
Executable file
|
|
@ -0,0 +1,60 @@
|
||||||
|
-- ============================================
|
||||||
|
-- MIGRACIÓN 004: Esquema de Glosario (tes_content)
|
||||||
|
-- ============================================
|
||||||
|
-- TICKET-007: Schema de BD para glosario
|
||||||
|
-- Crea la tabla glossary_terms en tes_content.
|
||||||
|
-- Reutiliza tes_content.content_status para estado.
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Schema tes_content ya existe (003); content_status ya existe.
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- TABLA: glossary_terms
|
||||||
|
-- Propósito: Términos del glosario médico (farmacológico, anatómico, clínico, procedural)
|
||||||
|
-- ============================================
|
||||||
|
CREATE TABLE IF NOT EXISTS tes_content.glossary_terms (
|
||||||
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
term VARCHAR(200) NOT NULL,
|
||||||
|
abbreviation VARCHAR(50),
|
||||||
|
category VARCHAR(50) NOT NULL,
|
||||||
|
definition TEXT NOT NULL,
|
||||||
|
context VARCHAR(500),
|
||||||
|
examples TEXT[],
|
||||||
|
related_terms UUID[],
|
||||||
|
source VARCHAR(200),
|
||||||
|
status tes_content.content_status NOT NULL DEFAULT 'draft',
|
||||||
|
|
||||||
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
created_by UUID NOT NULL,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
|
updated_by UUID,
|
||||||
|
|
||||||
|
CONSTRAINT chk_glossary_category CHECK (category IN ('pharmaceutical', 'anatomical', 'clinical', 'procedural'))
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Índices
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_glossary_terms_category ON tes_content.glossary_terms(category);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_glossary_terms_status ON tes_content.glossary_terms(status);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_glossary_terms_term_lower ON tes_content.glossary_terms(LOWER(term));
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_glossary_terms_term_category ON tes_content.glossary_terms(LOWER(term), category);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_glossary_terms_updated_at ON tes_content.glossary_terms(updated_at);
|
||||||
|
-- Búsqueda full-text en term y definition
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_glossary_terms_fts ON tes_content.glossary_terms
|
||||||
|
USING GIN (to_tsvector('spanish', term || ' ' || COALESCE(definition, '')));
|
||||||
|
|
||||||
|
-- Función updated_at en tes_content (idempotente)
|
||||||
|
CREATE OR REPLACE FUNCTION tes_content.update_updated_at_column()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
NEW.updated_at = NOW();
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER update_glossary_terms_updated_at
|
||||||
|
BEFORE UPDATE ON tes_content.glossary_terms
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION tes_content.update_updated_at_column();
|
||||||
|
|
||||||
|
-- Comentarios
|
||||||
|
COMMENT ON TABLE tes_content.glossary_terms IS 'Términos del glosario médico (farmacológico, anatómico, clínico, procedural)';
|
||||||
26
backend/dist/config/database.d.ts
vendored
Executable file
26
backend/dist/config/database.d.ts
vendored
Executable file
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* Configuración de conexión a PostgreSQL
|
||||||
|
*
|
||||||
|
* FASE 1: Infraestructura Base
|
||||||
|
*
|
||||||
|
* IMPORTANTE: Usar variables de entorno para credenciales
|
||||||
|
*/
|
||||||
|
import pg from 'pg';
|
||||||
|
/**
|
||||||
|
* Pool de conexiones a PostgreSQL
|
||||||
|
*/
|
||||||
|
export declare const pool: pg.Pool;
|
||||||
|
/**
|
||||||
|
* Test de conexión
|
||||||
|
*/
|
||||||
|
export declare function testConnection(): Promise<boolean>;
|
||||||
|
/**
|
||||||
|
* Función helper para ejecutar queries
|
||||||
|
* Envuelve pool.query para mantener compatibilidad
|
||||||
|
*/
|
||||||
|
export declare function query(text: string, params?: any[]): Promise<pg.QueryResult>;
|
||||||
|
/**
|
||||||
|
* Cerrar pool de conexiones
|
||||||
|
*/
|
||||||
|
export declare function closePool(): Promise<void>;
|
||||||
|
//# sourceMappingURL=database.d.ts.map
|
||||||
1
backend/dist/config/database.d.ts.map
vendored
Executable file
1
backend/dist/config/database.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../config/database.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAOpB;;GAEG;AACH,eAAO,MAAM,IAAI,SASf,CAAC;AAEH;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAUvD;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAEjF;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
||||||
53
backend/dist/config/database.js
vendored
Executable file
53
backend/dist/config/database.js
vendored
Executable file
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* Configuración de conexión a PostgreSQL
|
||||||
|
*
|
||||||
|
* FASE 1: Infraestructura Base
|
||||||
|
*
|
||||||
|
* IMPORTANTE: Usar variables de entorno para credenciales
|
||||||
|
*/
|
||||||
|
import pg from 'pg';
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config();
|
||||||
|
const { Pool } = pg;
|
||||||
|
/**
|
||||||
|
* Pool de conexiones a PostgreSQL
|
||||||
|
*/
|
||||||
|
export const pool = new Pool({
|
||||||
|
host: process.env.DB_HOST || 'localhost',
|
||||||
|
port: parseInt(process.env.DB_PORT || '5432', 10),
|
||||||
|
database: process.env.DB_NAME || 'emerges_tes',
|
||||||
|
user: process.env.DB_USER || 'postgres',
|
||||||
|
password: process.env.DB_PASSWORD || '',
|
||||||
|
max: 20, // Máximo de conexiones en el pool
|
||||||
|
idleTimeoutMillis: 30000,
|
||||||
|
connectionTimeoutMillis: 2000,
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* Test de conexión
|
||||||
|
*/
|
||||||
|
export async function testConnection() {
|
||||||
|
try {
|
||||||
|
const result = await pool.query('SELECT NOW()');
|
||||||
|
console.log('✅ Conexión a PostgreSQL exitosa:', result.rows[0].now);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
||||||
|
console.error('❌ Error conectando a PostgreSQL:', errorMessage);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Función helper para ejecutar queries
|
||||||
|
* Envuelve pool.query para mantener compatibilidad
|
||||||
|
*/
|
||||||
|
export async function query(text, params) {
|
||||||
|
return await pool.query(text, params);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Cerrar pool de conexiones
|
||||||
|
*/
|
||||||
|
export async function closePool() {
|
||||||
|
await pool.end();
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=database.js.map
|
||||||
1
backend/dist/config/database.js.map
vendored
Executable file
1
backend/dist/config/database.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../config/database.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;IACxC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,EAAE,EAAE,CAAC;IACjD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,aAAa;IAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;IACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;IACvC,GAAG,EAAE,EAAE,EAAE,kCAAkC;IAC3C,iBAAiB,EAAE,KAAK;IACxB,uBAAuB,EAAE,IAAI;CAC9B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,MAAc;IACtD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;AACnB,CAAC"}
|
||||||
10
backend/dist/src/config/cors.d.ts
vendored
Executable file
10
backend/dist/src/config/cors.d.ts
vendored
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
/**
|
||||||
|
* Configuración CORS Mejorada
|
||||||
|
* Limita orígenes incluso en desarrollo por seguridad
|
||||||
|
*/
|
||||||
|
import { CorsOptions } from 'cors';
|
||||||
|
/**
|
||||||
|
* Obtener configuración CORS basada en entorno
|
||||||
|
*/
|
||||||
|
export declare function getCorsConfig(): CorsOptions;
|
||||||
|
//# sourceMappingURL=cors.d.ts.map
|
||||||
1
backend/dist/src/config/cors.d.ts.map
vendored
Executable file
1
backend/dist/src/config/cors.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/config/cors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC;;GAEG;AACH,wBAAgB,aAAa,IAAI,WAAW,CAqD3C"}
|
||||||
57
backend/dist/src/config/cors.js
vendored
Executable file
57
backend/dist/src/config/cors.js
vendored
Executable file
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
* Configuración CORS Mejorada
|
||||||
|
* Limita orígenes incluso en desarrollo por seguridad
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Obtener configuración CORS basada en entorno
|
||||||
|
*/
|
||||||
|
export function getCorsConfig() {
|
||||||
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
||||||
|
// Orígenes por defecto para desarrollo
|
||||||
|
const defaultDevOrigins = [
|
||||||
|
'http://localhost:8096',
|
||||||
|
'http://localhost:5174',
|
||||||
|
'http://localhost:5173',
|
||||||
|
];
|
||||||
|
// Obtener orígenes permitidos de env o usar defaults
|
||||||
|
const envOrigins = process.env.CORS_ORIGINS
|
||||||
|
? process.env.CORS_ORIGINS.split(',').map(origin => origin.trim())
|
||||||
|
: [];
|
||||||
|
const allowedOrigins = envOrigins.length > 0 ? envOrigins : defaultDevOrigins;
|
||||||
|
// En producción, CORS_ORIGINS es requerido
|
||||||
|
if (!isDevelopment && allowedOrigins.length === 0) {
|
||||||
|
console.error('❌ CRÍTICO: CORS_ORIGINS no configurado en producción');
|
||||||
|
console.error(' Configurar CORS_ORIGINS en .env con orígenes permitidos separados por coma');
|
||||||
|
console.error(' Ejemplo: CORS_ORIGINS=https://app.example.com,https://admin.example.com');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
console.log(`✅ CORS configurado para ${isDevelopment ? 'desarrollo' : 'producción'}`);
|
||||||
|
console.log(` Orígenes permitidos: ${allowedOrigins.join(', ')}`);
|
||||||
|
return {
|
||||||
|
origin: (origin, callback) => {
|
||||||
|
// Permitir requests sin origen solo en desarrollo (mobile apps, Postman, etc.)
|
||||||
|
if (!origin) {
|
||||||
|
if (isDevelopment) {
|
||||||
|
return callback(null, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return callback(new Error('Origen no proporcionado - requerido en producción'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Verificar si el origen está en la lista permitida
|
||||||
|
if (allowedOrigins.includes(origin)) {
|
||||||
|
callback(null, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.warn(`⚠️ Intento de acceso desde origen no permitido: ${origin}`);
|
||||||
|
callback(new Error(`Origen ${origin} no permitido por CORS`));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
credentials: true,
|
||||||
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
|
||||||
|
allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
|
||||||
|
exposedHeaders: ['X-Total-Count', 'X-Page-Count'],
|
||||||
|
maxAge: 86400, // 24 horas
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=cors.js.map
|
||||||
1
backend/dist/src/config/cors.js.map
vendored
Executable file
1
backend/dist/src/config/cors.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/config/cors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAE5D,uCAAuC;IACvC,MAAM,iBAAiB,GAAG;QACxB,uBAAuB;QACvB,uBAAuB;QACvB,uBAAuB;KACxB,CAAC;IAEF,qDAAqD;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY;QACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAE9E,2CAA2C;IAC3C,IAAI,CAAC,aAAa,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC/F,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpE,OAAO;QACL,MAAM,EAAE,CAAC,MAA0B,EAAE,QAAsD,EAAE,EAAE;YAC7F,+EAA+E;YAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,OAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oDAAoD,MAAM,EAAE,CAAC,CAAC;gBAC3E,QAAQ,CAAC,IAAI,KAAK,CAAC,UAAU,MAAM,wBAAwB,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;QAC7D,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,CAAC;QACrE,cAAc,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;QACjD,MAAM,EAAE,KAAK,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC"}
|
||||||
33
backend/dist/src/config/env.d.ts
vendored
Executable file
33
backend/dist/src/config/env.d.ts
vendored
Executable file
|
|
@ -0,0 +1,33 @@
|
||||||
|
/**
|
||||||
|
* Validación de Variables de Entorno
|
||||||
|
* Valida todas las variables requeridas al startup
|
||||||
|
*/
|
||||||
|
interface EnvConfig {
|
||||||
|
db: {
|
||||||
|
host: string;
|
||||||
|
port: number;
|
||||||
|
database: string;
|
||||||
|
user: string;
|
||||||
|
password: string;
|
||||||
|
};
|
||||||
|
jwt: {
|
||||||
|
secret: string;
|
||||||
|
expiresIn: string;
|
||||||
|
};
|
||||||
|
cors: {
|
||||||
|
origins: string[];
|
||||||
|
};
|
||||||
|
webhook: {
|
||||||
|
secret: string;
|
||||||
|
};
|
||||||
|
redis: {
|
||||||
|
url: string;
|
||||||
|
};
|
||||||
|
nodeEnv: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Validar variables de entorno requeridas
|
||||||
|
*/
|
||||||
|
export declare function validateEnv(): EnvConfig;
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=env.d.ts.map
|
||||||
1
backend/dist/src/config/env.d.ts.map
vendored
Executable file
1
backend/dist/src/config/env.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,SAAS;IACjB,EAAE,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAyBD;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAmEvC"}
|
||||||
94
backend/dist/src/config/env.js
vendored
Executable file
94
backend/dist/src/config/env.js
vendored
Executable file
|
|
@ -0,0 +1,94 @@
|
||||||
|
/**
|
||||||
|
* Validación de Variables de Entorno
|
||||||
|
* Valida todas las variables requeridas al startup
|
||||||
|
*/
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config();
|
||||||
|
/**
|
||||||
|
* Variables de entorno requeridas por categoría
|
||||||
|
*/
|
||||||
|
const REQUIRED_ENV_VARS = {
|
||||||
|
database: [
|
||||||
|
'DB_HOST',
|
||||||
|
'DB_NAME',
|
||||||
|
'DB_USER',
|
||||||
|
'DB_PASSWORD',
|
||||||
|
],
|
||||||
|
security: [
|
||||||
|
'JWT_SECRET',
|
||||||
|
],
|
||||||
|
optional: [
|
||||||
|
'DB_PORT',
|
||||||
|
'JWT_EXPIRES_IN',
|
||||||
|
'CORS_ORIGINS',
|
||||||
|
'WEBHOOK_SECRET',
|
||||||
|
'REDIS_URL',
|
||||||
|
'NODE_ENV',
|
||||||
|
],
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Validar variables de entorno requeridas
|
||||||
|
*/
|
||||||
|
export function validateEnv() {
|
||||||
|
const missing = [];
|
||||||
|
const warnings = [];
|
||||||
|
// Validar variables requeridas
|
||||||
|
Object.entries(REQUIRED_ENV_VARS).forEach(([category, vars]) => {
|
||||||
|
vars.forEach(key => {
|
||||||
|
if (!process.env[key]) {
|
||||||
|
if (category !== 'optional') {
|
||||||
|
missing.push(`${key} (${category})`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
warnings.push(`${key} (${category})`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Validar formatos específicos
|
||||||
|
if (process.env.JWT_SECRET && process.env.JWT_SECRET.length < 32) {
|
||||||
|
missing.push('JWT_SECRET debe tener al menos 32 caracteres');
|
||||||
|
}
|
||||||
|
if (process.env.DB_PORT && isNaN(parseInt(process.env.DB_PORT, 10))) {
|
||||||
|
missing.push('DB_PORT debe ser un número válido');
|
||||||
|
}
|
||||||
|
// Mostrar advertencias
|
||||||
|
if (warnings.length > 0 && process.env.NODE_ENV === 'production') {
|
||||||
|
console.warn('⚠️ Variables opcionales no configuradas (recomendadas en producción):');
|
||||||
|
warnings.forEach(key => console.warn(` - ${key}`));
|
||||||
|
}
|
||||||
|
// Si faltan variables críticas, salir
|
||||||
|
if (missing.length > 0) {
|
||||||
|
console.error('❌ CRÍTICO: Variables de entorno faltantes o inválidas:');
|
||||||
|
missing.forEach(key => console.error(` - ${key}`));
|
||||||
|
console.error('\n⚠️ Configura estas variables en el archivo .env\n');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
console.log('✅ Variables de entorno validadas correctamente');
|
||||||
|
return {
|
||||||
|
db: {
|
||||||
|
host: process.env.DB_HOST || 'localhost',
|
||||||
|
port: parseInt(process.env.DB_PORT || '5432', 10),
|
||||||
|
database: process.env.DB_NAME || 'emerges_tes',
|
||||||
|
user: process.env.DB_USER || 'postgres',
|
||||||
|
password: process.env.DB_PASSWORD || '',
|
||||||
|
},
|
||||||
|
jwt: {
|
||||||
|
secret: process.env.JWT_SECRET || '',
|
||||||
|
expiresIn: process.env.JWT_EXPIRES_IN || '24h',
|
||||||
|
},
|
||||||
|
cors: {
|
||||||
|
origins: process.env.CORS_ORIGINS
|
||||||
|
? process.env.CORS_ORIGINS.split(',').map(o => o.trim())
|
||||||
|
: [],
|
||||||
|
},
|
||||||
|
webhook: {
|
||||||
|
secret: process.env.WEBHOOK_SECRET || '',
|
||||||
|
},
|
||||||
|
redis: {
|
||||||
|
url: process.env.REDIS_URL || 'redis://localhost:6379',
|
||||||
|
},
|
||||||
|
nodeEnv: process.env.NODE_ENV || 'development',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=env.js.map
|
||||||
1
backend/dist/src/config/env.js.map
vendored
Executable file
1
backend/dist/src/config/env.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AA0BhB;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE;QACR,SAAS;QACT,SAAS;QACT,SAAS;QACT,aAAa;KACd;IACD,QAAQ,EAAE;QACR,YAAY;KACb;IACD,QAAQ,EAAE;QACR,SAAS;QACT,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,WAAW;QACX,UAAU;KACX;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,+BAA+B;IAC/B,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;QAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACpD,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACvF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAE9D,OAAO;QACL,EAAE,EAAE;YACF,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;YACxC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,EAAE,EAAE,CAAC;YACjD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,aAAa;YAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;YACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;SACxC;QACD,GAAG,EAAE;YACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;YACpC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK;SAC/C;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;gBAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,CAAC,CAAC,EAAE;SACP;QACD,OAAO,EAAE;YACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;SACzC;QACD,KAAK,EAAE;YACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,wBAAwB;SACvD;QACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;KAC/C,CAAC;AACJ,CAAC"}
|
||||||
16
backend/dist/src/config/security.d.ts
vendored
Executable file
16
backend/dist/src/config/security.d.ts
vendored
Executable file
|
|
@ -0,0 +1,16 @@
|
||||||
|
/**
|
||||||
|
* Configuración de Seguridad
|
||||||
|
* Valida variables de entorno críticas al startup
|
||||||
|
*/
|
||||||
|
interface SecurityConfig {
|
||||||
|
JWT_SECRET: string;
|
||||||
|
JWT_EXPIRES_IN: string;
|
||||||
|
WEBHOOK_SECRET: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Validar configuración de seguridad
|
||||||
|
* Si alguna variable crítica falta, la app no arranca
|
||||||
|
*/
|
||||||
|
export declare function validateSecurityConfig(): SecurityConfig;
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=security.d.ts.map
|
||||||
1
backend/dist/src/config/security.d.ts.map
vendored
Executable file
1
backend/dist/src/config/security.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/config/security.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CA2CvD"}
|
||||||
52
backend/dist/src/config/security.js
vendored
Executable file
52
backend/dist/src/config/security.js
vendored
Executable file
|
|
@ -0,0 +1,52 @@
|
||||||
|
/**
|
||||||
|
* Configuración de Seguridad
|
||||||
|
* Valida variables de entorno críticas al startup
|
||||||
|
*/
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config();
|
||||||
|
/**
|
||||||
|
* Validar configuración de seguridad
|
||||||
|
* Si alguna variable crítica falta, la app no arranca
|
||||||
|
*/
|
||||||
|
export function validateSecurityConfig() {
|
||||||
|
const errors = [];
|
||||||
|
// JWT_SECRET es crítico - debe existir y no ser el valor por defecto
|
||||||
|
const JWT_SECRET = process.env.JWT_SECRET;
|
||||||
|
if (!JWT_SECRET) {
|
||||||
|
errors.push('JWT_SECRET no está configurado en .env');
|
||||||
|
console.error('❌ CRÍTICO: JWT_SECRET no configurado');
|
||||||
|
console.error(' Generar con: openssl rand -base64 32');
|
||||||
|
}
|
||||||
|
else if (JWT_SECRET === 'emerges-tes-secret-key-change-in-production') {
|
||||||
|
errors.push('JWT_SECRET está usando el valor por defecto inseguro');
|
||||||
|
console.error('❌ CRÍTICO: JWT_SECRET usa valor por defecto inseguro');
|
||||||
|
console.error(' Generar un secret seguro con: openssl rand -base64 32');
|
||||||
|
console.error(' Y actualizarlo en .env');
|
||||||
|
}
|
||||||
|
else if (JWT_SECRET.length < 32) {
|
||||||
|
errors.push('JWT_SECRET debe tener al menos 32 caracteres');
|
||||||
|
console.error('❌ CRÍTICO: JWT_SECRET demasiado corto (mínimo 32 caracteres)');
|
||||||
|
}
|
||||||
|
// WEBHOOK_SECRET es crítico en producción
|
||||||
|
const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;
|
||||||
|
if (process.env.NODE_ENV === 'production' && !WEBHOOK_SECRET) {
|
||||||
|
errors.push('WEBHOOK_SECRET no configurado en producción');
|
||||||
|
console.error('❌ CRÍTICO: WEBHOOK_SECRET no configurado en producción');
|
||||||
|
}
|
||||||
|
// Si hay errores críticos, salir
|
||||||
|
if (errors.length > 0) {
|
||||||
|
console.error('\n🚨 ERRORES DE SEGURIDAD ENCONTRADOS:');
|
||||||
|
errors.forEach((error, index) => {
|
||||||
|
console.error(` ${index + 1}. ${error}`);
|
||||||
|
});
|
||||||
|
console.error('\n⚠️ La aplicación no puede iniciarse con estos errores de seguridad.\n');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
console.log('✅ Variables de seguridad validadas correctamente');
|
||||||
|
return {
|
||||||
|
JWT_SECRET: JWT_SECRET || '',
|
||||||
|
JWT_EXPIRES_IN: process.env.JWT_EXPIRES_IN || '24h',
|
||||||
|
WEBHOOK_SECRET: WEBHOOK_SECRET || '',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=security.js.map
|
||||||
1
backend/dist/src/config/security.js.map
vendored
Executable file
1
backend/dist/src/config/security.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/config/security.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAQhB;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,qEAAqE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,UAAU,KAAK,6CAA6C,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAChF,CAAC;IAED,0CAA0C;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC1E,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAEhE,OAAO;QACL,UAAU,EAAE,UAAU,IAAI,EAAE;QAC5B,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK;QACnD,cAAc,EAAE,cAAc,IAAI,EAAE;KACrC,CAAC;AACJ,CAAC"}
|
||||||
35
backend/dist/src/domain/entities/ContentItem.d.ts
vendored
Executable file
35
backend/dist/src/domain/entities/ContentItem.d.ts
vendored
Executable file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
* ContentItem Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
import type { ContentStatus } from '../value-objects/ContentStatus.js';
|
||||||
|
import type { ContentPriority } from '../value-objects/ContentPriority.js';
|
||||||
|
export type ContentType = 'protocol' | 'guide' | 'manual' | 'checklist';
|
||||||
|
export type ContentLevel = 'operativo' | 'formativo' | 'referencia';
|
||||||
|
export type AgeGroup = 'adulto' | 'pediatrico' | 'neonatal' | 'todos';
|
||||||
|
export interface ContentItem {
|
||||||
|
readonly id: string;
|
||||||
|
readonly type: ContentType;
|
||||||
|
readonly slug: string;
|
||||||
|
readonly level: ContentLevel;
|
||||||
|
readonly title: string;
|
||||||
|
readonly shortTitle?: string;
|
||||||
|
readonly description?: string;
|
||||||
|
readonly content: Record<string, unknown>;
|
||||||
|
readonly contentMarkdown?: string;
|
||||||
|
readonly category?: string;
|
||||||
|
readonly subcategory?: string;
|
||||||
|
readonly priority: ContentPriority;
|
||||||
|
readonly ageGroup?: AgeGroup;
|
||||||
|
readonly status: ContentStatus;
|
||||||
|
readonly version: number;
|
||||||
|
readonly latestVersion: number;
|
||||||
|
readonly validatedBy?: string;
|
||||||
|
readonly validatedAt?: Date;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
readonly updatedAt: Date;
|
||||||
|
readonly createdBy: string;
|
||||||
|
readonly updatedBy: string;
|
||||||
|
readonly tags?: readonly string[];
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=ContentItem.d.ts.map
|
||||||
1
backend/dist/src/domain/entities/ContentItem.d.ts.map
vendored
Executable file
1
backend/dist/src/domain/entities/ContentItem.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"ContentItem.d.ts","sourceRoot":"","sources":["../../../../src/domain/entities/ContentItem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AACpE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC"}
|
||||||
6
backend/dist/src/domain/entities/ContentItem.js
vendored
Executable file
6
backend/dist/src/domain/entities/ContentItem.js
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* ContentItem Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=ContentItem.js.map
|
||||||
1
backend/dist/src/domain/entities/ContentItem.js.map
vendored
Executable file
1
backend/dist/src/domain/entities/ContentItem.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"ContentItem.js","sourceRoot":"","sources":["../../../../src/domain/entities/ContentItem.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
||||||
36
backend/dist/src/domain/entities/Drug.d.ts
vendored
Executable file
36
backend/dist/src/domain/entities/Drug.d.ts
vendored
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
/**
|
||||||
|
* Drug Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
import type { ContentStatus } from '../value-objects/ContentStatus.js';
|
||||||
|
export type DrugCategory = 'cardiovascular' | 'respiratorio' | 'neurologico' | 'analgesia' | 'oxigenoterapia' | 'otros';
|
||||||
|
export type AdministrationRoute = 'IV' | 'IM' | 'SC' | 'IO' | 'Nebulizado' | 'SL' | 'Rectal' | 'Nasal';
|
||||||
|
export interface Drug {
|
||||||
|
readonly id: string;
|
||||||
|
readonly slug: string;
|
||||||
|
readonly genericName: string;
|
||||||
|
readonly tradeName?: string;
|
||||||
|
readonly category: DrugCategory;
|
||||||
|
readonly line: 'first' | 'second';
|
||||||
|
readonly frequency: 'high' | 'medium' | 'low';
|
||||||
|
readonly presentation: string;
|
||||||
|
readonly adultDose: string;
|
||||||
|
readonly pediatricDose?: string;
|
||||||
|
readonly routes: readonly AdministrationRoute[];
|
||||||
|
readonly dilution?: string;
|
||||||
|
readonly indications: readonly string[];
|
||||||
|
readonly contraindications: readonly string[];
|
||||||
|
readonly sideEffects?: string;
|
||||||
|
readonly antidote?: string;
|
||||||
|
readonly notes: readonly string[];
|
||||||
|
readonly criticalPoints: readonly string[];
|
||||||
|
readonly source?: string;
|
||||||
|
readonly status: ContentStatus;
|
||||||
|
readonly version: string;
|
||||||
|
readonly latestVersion: string;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
readonly updatedAt: Date;
|
||||||
|
readonly createdBy: string;
|
||||||
|
readonly updatedBy?: string;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=Drug.d.ts.map
|
||||||
1
backend/dist/src/domain/entities/Drug.d.ts.map
vendored
Executable file
1
backend/dist/src/domain/entities/Drug.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"Drug.d.ts","sourceRoot":"","sources":["../../../../src/domain/entities/Drug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,OAAO,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAC3B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,YAAY,GACZ,IAAI,GACJ,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
||||||
6
backend/dist/src/domain/entities/Drug.js
vendored
Executable file
6
backend/dist/src/domain/entities/Drug.js
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* Drug Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=Drug.js.map
|
||||||
1
backend/dist/src/domain/entities/Drug.js.map
vendored
Executable file
1
backend/dist/src/domain/entities/Drug.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"Drug.js","sourceRoot":"","sources":["../../../../src/domain/entities/Drug.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
||||||
23
backend/dist/src/domain/entities/GlossaryTerm.d.ts
vendored
Executable file
23
backend/dist/src/domain/entities/GlossaryTerm.d.ts
vendored
Executable file
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* GlossaryTerm Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
import type { ContentStatus } from '../value-objects/ContentStatus.js';
|
||||||
|
export type GlossaryCategory = 'pharmaceutical' | 'anatomical' | 'clinical' | 'procedural';
|
||||||
|
export interface GlossaryTerm {
|
||||||
|
readonly id: string;
|
||||||
|
readonly term: string;
|
||||||
|
readonly abbreviation?: string;
|
||||||
|
readonly category: GlossaryCategory;
|
||||||
|
readonly definition: string;
|
||||||
|
readonly context?: string;
|
||||||
|
readonly examples?: readonly string[];
|
||||||
|
readonly relatedTerms?: readonly string[];
|
||||||
|
readonly source?: string;
|
||||||
|
readonly status: ContentStatus;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
readonly updatedAt: Date;
|
||||||
|
readonly createdBy: string;
|
||||||
|
readonly updatedBy?: string;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=GlossaryTerm.d.ts.map
|
||||||
1
backend/dist/src/domain/entities/GlossaryTerm.d.ts.map
vendored
Executable file
1
backend/dist/src/domain/entities/GlossaryTerm.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"GlossaryTerm.d.ts","sourceRoot":"","sources":["../../../../src/domain/entities/GlossaryTerm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,YAAY,GACZ,UAAU,GACV,YAAY,CAAC;AAEjB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
||||||
6
backend/dist/src/domain/entities/GlossaryTerm.js
vendored
Executable file
6
backend/dist/src/domain/entities/GlossaryTerm.js
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* GlossaryTerm Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=GlossaryTerm.js.map
|
||||||
1
backend/dist/src/domain/entities/GlossaryTerm.js.map
vendored
Executable file
1
backend/dist/src/domain/entities/GlossaryTerm.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"GlossaryTerm.js","sourceRoot":"","sources":["../../../../src/domain/entities/GlossaryTerm.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
||||||
34
backend/dist/src/domain/entities/MediaResource.d.ts
vendored
Executable file
34
backend/dist/src/domain/entities/MediaResource.d.ts
vendored
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
* MediaResource Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
import type { ContentStatus } from '../value-objects/ContentStatus.js';
|
||||||
|
import type { ContentPriority } from '../value-objects/ContentPriority.js';
|
||||||
|
export type MediaType = 'image' | 'video' | 'audio' | 'document';
|
||||||
|
export interface MediaResource {
|
||||||
|
readonly id: string;
|
||||||
|
readonly type: MediaType;
|
||||||
|
readonly path: string;
|
||||||
|
readonly filename: string;
|
||||||
|
readonly fileUrl: string;
|
||||||
|
readonly thumbnailUrl?: string;
|
||||||
|
readonly title?: string;
|
||||||
|
readonly description?: string;
|
||||||
|
readonly altText?: string;
|
||||||
|
readonly caption?: string;
|
||||||
|
readonly tags: readonly string[];
|
||||||
|
readonly block?: string;
|
||||||
|
readonly chapter?: string;
|
||||||
|
readonly priority: ContentPriority;
|
||||||
|
readonly width?: number;
|
||||||
|
readonly height?: number;
|
||||||
|
readonly format?: string;
|
||||||
|
readonly fileSize: number;
|
||||||
|
readonly durationSeconds?: number;
|
||||||
|
readonly status: ContentStatus;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
readonly updatedAt: Date;
|
||||||
|
readonly createdBy: string;
|
||||||
|
readonly updatedBy?: string;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=MediaResource.d.ts.map
|
||||||
1
backend/dist/src/domain/entities/MediaResource.d.ts.map
vendored
Executable file
1
backend/dist/src/domain/entities/MediaResource.d.ts.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"MediaResource.d.ts","sourceRoot":"","sources":["../../../../src/domain/entities/MediaResource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
||||||
6
backend/dist/src/domain/entities/MediaResource.js
vendored
Executable file
6
backend/dist/src/domain/entities/MediaResource.js
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/**
|
||||||
|
* MediaResource Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=MediaResource.js.map
|
||||||
1
backend/dist/src/domain/entities/MediaResource.js.map
vendored
Executable file
1
backend/dist/src/domain/entities/MediaResource.js.map
vendored
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"MediaResource.js","sourceRoot":"","sources":["../../../../src/domain/entities/MediaResource.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
||||||
27
backend/dist/src/domain/entities/MedicalReview.d.ts
vendored
Executable file
27
backend/dist/src/domain/entities/MedicalReview.d.ts
vendored
Executable file
|
|
@ -0,0 +1,27 @@
|
||||||
|
/**
|
||||||
|
* MedicalReview Entity
|
||||||
|
* Domain Layer - Entidad inmutable de dominio
|
||||||
|
*/
|
||||||
|
export type ReviewerRole = 'reviewer' | 'validator';
|
||||||
|
export type ReviewStatus = 'pending' | 'approved' | 'rejected';
|
||||||
|
export interface ReviewComment {
|
||||||
|
readonly id: string;
|
||||||
|
readonly section: string;
|
||||||
|
readonly comment: string;
|
||||||
|
readonly type: 'suggestion' | 'correction' | 'question' | 'approval';
|
||||||
|
readonly severity: 'low' | 'medium' | 'high' | 'critical';
|
||||||
|
readonly createdAt: Date;
|
||||||
|
}
|
||||||
|
export interface MedicalReview {
|
||||||
|
readonly id: string;
|
||||||
|
readonly contentId: string;
|
||||||
|
readonly reviewerId: string;
|
||||||
|
readonly reviewerName: string;
|
||||||
|
readonly reviewerRole: ReviewerRole;
|
||||||
|
readonly status: ReviewStatus;
|
||||||
|
readonly comments: readonly ReviewComment[];
|
||||||
|
readonly clinicalSources: readonly string[];
|
||||||
|
readonly validatedAt?: Date;
|
||||||
|
readonly createdAt: Date;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=MedicalReview.d.ts.map
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue