feat: añadir enlaces de referencia entre capítulos del manual

- Añadir secciones de enlaces recomendados en 8 capítulos clave
- Crear guía de enlaces de referencia (GUIA_ENLACES_REFERENCIA.md)
- Crear script para añadir enlaces automáticamente
- Organizar enlaces por categorías: prerrequisitos, relacionados, aplicación práctica, continuación

Capítulos actualizados:
- BLOQUE_02_3_COLLARIN_CERVICAL.md (10 enlaces)
- BLOQUE_04_1_RCP_ADULTOS.md (8 enlaces)
- BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md (7 enlaces)
- BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md (7 enlaces)
- BLOQUE_02_2_INMOVILIZACION_MANUAL.md (7 enlaces)
- BLOQUE_02_5_TABLERO_ESPINAL.md (7 enlaces)
- BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md (8 enlaces)
- BLOQUE_04_0_RECONOCIMIENTO_PCR.md (4 enlaces)

Total: ~40 enlaces añadidos entre capítulos relacionados
This commit is contained in:
planetazuzu 2025-12-19 21:24:06 +01:00
parent 1a7f9ae008
commit 1c083118e3
8 changed files with 570 additions and 6 deletions

253
GUIA_ENLACES_REFERENCIA.md Normal file
View file

@ -0,0 +1,253 @@
# 🔗 Guía: Enlaces de Referencia entre Capítulos
**Fecha:** 2024-12-19
**Objetivo:** Añadir enlaces cruzados entre capítulos relacionados del manual
---
## 📋 FORMATO ESTÁNDAR
### Sección de Enlaces Recomendados
Añadir al final de cada capítulo (antes de la línea final):
```markdown
---
## 🔗 Enlaces recomendados / Guía de referencia
### Capítulos relacionados
- [Título del Capítulo Relacionado](../ruta/relativa/al/archivo.md)
- [Otro Capítulo Relacionado](../ruta/relativa/al/archivo.md)
### Prerrequisitos
- [Capítulo que debe leerse antes](../ruta/relativa/al/archivo.md)
### Continuación
- [Capítulo siguiente en la secuencia](../ruta/relativa/al/archivo.md)
```
---
## 📁 ESTRUCTURA DE RUTAS
### Desde `MANUAL_TES_DIGITAL/BLOQUE_X/archivo.md`
**Ejemplo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md`
#### Enlaces a capítulos del mismo bloque:
```markdown
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md)
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md)
```
#### Enlaces a capítulos de otro bloque:
```markdown
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md)
```
#### Enlaces a capítulos de otra parte:
```markdown
- [Fundamentos de Emergencias](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md)
```
---
## 🎯 CATEGORÍAS DE ENLACES
### 1. Prerrequisitos (Debe leerse antes)
```markdown
### Prerrequisitos
- [Fundamentos de Emergencias](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md)
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
```
### 2. Relacionados (Temas complementarios)
```markdown
### Capítulos relacionados
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md)
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md)
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md)
```
### 3. Continuación (Siguiente en secuencia)
```markdown
### Continuación
- [Preparación para Traslado](./BLOQUE_08_1_PREPARACION_TRASLADO.md)
- [Gestión durante Traslado](./BLOQUE_08_2_GESTION_DURANTE_TRASLADO.md)
```
### 4. Aplicación práctica (Dónde se usa)
```markdown
### Aplicación práctica
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md)
- [Protocolos Transtelefónicos](../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md)
```
---
## 📝 EJEMPLOS POR BLOQUE
### Bloque 2 - Inmovilización
**Archivo:** `BLOQUE_02_3_COLLARIN_CERVICAL.md`
```markdown
---
## 🔗 Enlaces recomendados / Guía de referencia
### Prerrequisitos
- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md)
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md)
### Capítulos relacionados
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md)
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md)
- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md)
### Aplicación práctica
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md)
```
### Bloque 3 - Oxigenoterapia
**Archivo:** `BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md`
```markdown
---
## 🔗 Enlaces recomendados / Guía de referencia
### Prerrequisitos
- [Constantes Vitales](../02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md)
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Capítulos relacionados
- [Dispositivos de Oxigenoterapia](./BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md)
- [Ventilación BVM](./BLOQUE_03_3_BVM.md)
- [Monitorización Básica](./BLOQUE_03_10_MONITORIZACION_BASICA.md)
### Aplicación práctica
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md)
- [Ventilación BVM](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_5_VENTILACION_BVM.md)
```
### Bloque 4 - Soporte Vital
**Archivo:** `BLOQUE_04_1_RCP_ADULTOS.md`
```markdown
---
## 🔗 Enlaces recomendados / Guía de referencia
### Prerrequisitos
- [Reconocimiento de PCR](./BLOQUE_04_0_RECONOCIMIENTO_PCR.md)
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Capítulos relacionados
- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md)
- [RCP Lactantes](./BLOQUE_04_3_RCP_LACTANTES.md)
- [Uso de DESA](./BLOQUE_04_4_USO_DESA.md)
- [Ventilación BVM](./BLOQUE_04_5_VENTILACION_BVM.md)
### Protocolos transtelefónicos
- [RCP Transtelefónica Adultos](../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md)
### Continuación
- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md)
```
---
## 🔧 CONVERSIÓN DE RUTAS
### De ruta de archivo a ruta relativa en Markdown
**Ruta del archivo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md`
**Ruta relativa desde otro archivo:**
#### Desde mismo bloque:
```markdown
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md)
```
#### Desde bloque diferente (misma parte):
```markdown
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md)
```
#### Desde otra parte:
```markdown
- [Fundamentos](../01_FUNDAMENTOS_Y_CONCEPTOS/BLOQUE_00_FUNDAMENTOS_EMERGENCIAS.md)
```
---
## 📋 CHECKLIST PARA AÑADIR ENLACES
Antes de añadir enlaces a un capítulo:
- [ ] Identificar capítulos relacionados (mismo tema)
- [ ] Identificar prerrequisitos (qué debe leerse antes)
- [ ] Identificar continuación (siguiente en secuencia)
- [ ] Verificar que las rutas relativas son correctas
- [ ] Probar que los enlaces funcionan en la app
- [ ] Añadir sección al final del capítulo (antes de línea final)
---
## 🎯 PRIORIDADES
### Alta Prioridad (Añadir enlaces ahora)
1. **Bloque 2 - Inmovilización** (todos los capítulos están relacionados)
2. **Bloque 3 - Oxigenoterapia** (secuencia lógica clara)
3. **Bloque 4 - Soporte Vital** (RCP adulto → pediátrico → lactante)
4. **Bloque 6 - Farmacología** (principios → preparación → fármacos)
### Media Prioridad
5. **Bloque 5 - Protocolos Transtelefónicos** (relacionados con Bloque 4)
6. **Bloque 8 - Transferencia** (secuencia clara)
### Baja Prioridad
7. Resto de bloques
---
## ✅ EJEMPLO COMPLETO
**Archivo:** `MANUAL_TES_DIGITAL/04_MATERIAL_E_INMOVILIZACION/BLOQUE_02_3_COLLARIN_CERVICAL.md`
Añadir al final:
```markdown
---
## 🔗 Enlaces recomendados / Guía de referencia
### Prerrequisitos
- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md) - Fundamentos anatómicos
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) - Técnica previa
### Capítulos relacionados (Sistema de Inmovilización)
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) - Inmovilización corporal completa
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Alternativa al tablero
- [Camilla Cuchara](./BLOQUE_02_4_CAMILLA_CUCHARA.md) - Dispositivo de transferencia
- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - Técnicas de movilización
### Aplicación práctica
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) - Contexto de uso
- [Transferencia y Movilización](./BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md) - Continuación del proceso
### Errores y prevención
- [Errores Críticos en Inmovilización](./BLOQUE_02_9_ERRORES_CRITICOS.md) - Errores comunes a evitar
```
---
**Última actualización:** 2024-12-19

View file

@ -348,5 +348,19 @@ Este procedimiento es de **uso exclusivo como apoyo** y **NO sustituye**:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Reconocimiento de PCR](./BLOQUE_04_0_RECONOCIMIENTO_PCR.md) - Identificación de PCR
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial
### Capítulos relacionados (RCP)
- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md) - RCP en niños
- [RCP Lactantes](./BLOQUE_04_3_RCP_LACTANTES.md) - RCP en lactantes
- [Uso de DESA](./BLOQUE_04_4_USO_DESA.md) - Desfibrilación precoz
- [Ventilación BVM](./BLOQUE_04_5_VENTILACION_BVM.md) - Ventilación con bolsa-mascarilla
### Protocolos transtelefónicos
- [RCP Transtelefónica Adultos](../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md) - Guía telefónica
### Continuación
- [RCP Pediátrica](./BLOQUE_04_2_RCP_PEDIATRIA.md) - Siguiente en la secuencia

View file

@ -711,5 +711,16 @@ Este procedimiento es de **uso exclusivo como apoyo** y **NO sustituye**:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md) - Fundamentos anatómicos
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial
### Capítulos relacionados (Sistema de Inmovilización)
- [Collarín Cervical](./BLOQUE_02_3_COLLARIN_CERVICAL.md) - Dispositivo de inmovilización cervical
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) - Inmovilización corporal completa
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Alternativa al tablero
- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - Técnicas de movilización
### Continuación
- [Collarín Cervical](./BLOQUE_02_3_COLLARIN_CERVICAL.md) - Siguiente paso en inmovilización

View file

@ -884,5 +884,21 @@ Este procedimiento es de **uso exclusivo como apoyo** y **NO sustituye**:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Anatomía Operativa](./BLOQUE_02_0_ANATOMIA_OPERATIVA.md) - Fundamentos anatómicos
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) - Técnica previa
### Capítulos relacionados (Sistema de Inmovilización)
- [Tablero Espinal](./BLOQUE_02_5_TABLERO_ESPINAL.md) - Inmovilización corporal completa
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Alternativa al tablero
- [Camilla Cuchara](./BLOQUE_02_4_CAMILLA_CUCHARA.md) - Dispositivo de transferencia
- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - Técnicas de movilización
### Aplicación práctica
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) - Contexto de uso
- [Transferencia y Movilización](./BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md) - Continuación del proceso
### Errores y prevención
- [Errores Críticos en Inmovilización](./BLOQUE_02_9_ERRORES_CRITICOS.md) - Errores comunes a evitar

View file

@ -513,5 +513,16 @@ Este procedimiento es de **uso exclusivo como apoyo** y **NO sustituye**:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Inmovilización Manual](./BLOQUE_02_2_INMOVILIZACION_MANUAL.md) - Técnica previa
- [Collarín Cervical](./BLOQUE_02_3_COLLARIN_CERVICAL.md) - Parte del sistema completo
### Capítulos relacionados (Sistema de Inmovilización)
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Alternativa para traslados largos
- [Camilla Cuchara](./BLOQUE_02_4_CAMILLA_CUCHARA.md) - Dispositivo de transferencia
- [Extricación y Movimientos Bloque](./BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md) - Técnicas de movilización
### Continuación
- [Colchón de Vacío](./BLOQUE_02_6_COLCHON_VACIO.md) - Considerar para traslados prolongados
- [Transferencia y Movilización](./BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md) - Continuación del proceso

View file

@ -765,5 +765,16 @@ Este procedimiento es de **uso exclusivo como apoyo** y **NO sustituye**:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Constantes Vitales](../02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md) - Monitorización durante oxigenoterapia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración inicial
### Capítulos relacionados
- [Dispositivos de Oxigenoterapia](./BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md) - Tipos de dispositivos
- [Ventilación BVM](./BLOQUE_03_3_BVM.md) - Ventilación con bolsa-mascarilla
- [Monitorización Básica](./BLOQUE_03_10_MONITORIZACION_BASICA.md) - Seguimiento del paciente
### Aplicación práctica
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) - Uso durante RCP
- [Ventilación BVM](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_5_VENTILACION_BVM.md) - Técnica de ventilación

View file

@ -282,5 +282,16 @@ Estas habilidades son el núcleo para:
## 🔗 Enlaces recomendados / Guía de referencia
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md)
### Prerrequisitos
- [Principios de Administración de Fármacos](./BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md) - Fundamentos de seguridad farmacológica
- [Constantes Vitales](../02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md) - Monitorización durante administración
### Capítulos relacionados (Vademécum)
- [Analgésicos y Sedantes](./BLOQUE_06_2_ANALGESICOS_SEDANTES.md) - Aplicación práctica
- [Vasoactivos y Aminas](./BLOQUE_06_3_VASOACTIVOS_AMINAS.md) - Aplicación práctica
- [Fármacos Cardiológicos](./BLOQUE_06_5_FARMACOS_CARDIOLOGICOS.md) - Aplicación práctica
### Aplicación práctica
- [RCP Adultos](../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md) - Contexto de uso en PCR
- [ABCDE Operativo](../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md) - Valoración durante administración

View file

@ -0,0 +1,237 @@
#!/usr/bin/env python3
"""
Script para añadir enlaces de referencia entre capítulos del manual
Basado en manual-index.ts y relaciones lógicas entre capítulos
"""
import os
import re
from pathlib import Path
from typing import Dict, List, Tuple, Optional
BASE_DIR = Path(__file__).parent.parent
MANUAL_DIR = BASE_DIR / "MANUAL_TES_DIGITAL"
# Mapeo de relaciones entre capítulos
RELACIONES: Dict[str, Dict[str, List[str]]] = {
# Bloque 2 - Inmovilización
"BLOQUE_02_3_COLLARIN_CERVICAL.md": {
"prerrequisitos": [
"BLOQUE_02_0_ANATOMIA_OPERATIVA.md",
"BLOQUE_02_2_INMOVILIZACION_MANUAL.md",
],
"relacionados": [
"BLOQUE_02_5_TABLERO_ESPINAL.md",
"BLOQUE_02_6_COLCHON_VACIO.md",
"BLOQUE_02_4_CAMILLA_CUCHARA.md",
"BLOQUE_02_7_EXTRICACION_MOVIMIENTOS_BLOQUE.md",
],
"aplicacion": [
"../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md",
"../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md",
],
"continuacion": [
"BLOQUE_02_8_TRANSFERENCIAS_MOVILIZACION.md",
],
},
# Bloque 4 - RCP
"BLOQUE_04_1_RCP_ADULTOS.md": {
"prerrequisitos": [
"BLOQUE_04_0_RECONOCIMIENTO_PCR.md",
"../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md",
],
"relacionados": [
"BLOQUE_04_2_RCP_PEDIATRIA.md",
"BLOQUE_04_3_RCP_LACTANTES.md",
"BLOQUE_04_4_USO_DESA.md",
"BLOQUE_04_5_VENTILACION_BVM.md",
],
"transtelefonico": [
"../06_PROTOCOLOS_TRANSTELEFONICOS/BLOQUE_05_1_RCP_TRANSTELEFONICA_ADULTOS.md",
],
},
# Bloque 3 - Oxigenoterapia
"BLOQUE_03_0_OXIGENOTERAPIA_FUNDAMENTOS.md": {
"prerrequisitos": [
"../02_PROCEDIMIENTOS_BASICOS/1.1_constantes_vitales.md",
"../02_PROCEDIMIENTOS_BASICOS/1.2_abcde_operativo.md",
],
"relacionados": [
"BLOQUE_03_1_DISPOSITIVOS_OXIGENOTERAPIA.md",
"BLOQUE_03_3_BVM.md",
"BLOQUE_03_10_MONITORIZACION_BASICA.md",
],
"aplicacion": [
"../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md",
"../03_SOPORTE_VITAL_BASICO/BLOQUE_04_5_VENTILACION_BVM.md",
],
},
# Bloque 6 - Farmacología
"BLOQUE_06_1_DEL_VIAL_A_LA_VENA.md": {
"prerrequisitos": [
"BLOQUE_06_0_PRINCIPIOS_ADMINISTRACION.md",
],
"relacionados": [
"BLOQUE_06_2_ANALGESICOS_SEDANTES.md",
"BLOQUE_06_3_VASOACTIVOS_AMINAS.md",
"BLOQUE_06_5_FARMACOS_CARDIOLOGICOS.md",
],
"aplicacion": [
"../03_SOPORTE_VITAL_BASICO/BLOQUE_04_1_RCP_ADULTOS.md",
],
},
}
# Mapeo de nombres de archivo a rutas completas
def encontrar_archivo(nombre: str, directorio_actual: Path) -> Optional[str]:
"""Encuentra la ruta relativa de un archivo desde el directorio actual"""
# Buscar en el mismo directorio
archivo_local = directorio_actual / nombre
if archivo_local.exists():
return f"./{nombre}"
# Buscar en subdirectorios del manual
for subdir in MANUAL_DIR.rglob("*"):
if subdir.is_dir():
archivo = subdir / nombre
if archivo.exists():
# Calcular ruta relativa
rel_path = os.path.relpath(archivo, directorio_actual)
return rel_path.replace("\\", "/")
return None
def generar_seccion_enlaces(archivo: Path, relaciones: Dict[str, List[str]]) -> str:
"""Genera la sección de enlaces en formato Markdown"""
directorio_actual = archivo.parent
seccion = "\n---\n\n## 🔗 Enlaces recomendados / Guía de referencia\n\n"
# Prerrequisitos
if relaciones.get("prerrequisitos"):
seccion += "### Prerrequisitos\n\n"
for rel in relaciones["prerrequisitos"]:
ruta = encontrar_archivo(rel, directorio_actual) or rel
nombre = rel.replace(".md", "").replace("BLOQUE_", "").replace("_", " ")
seccion += f"- [{nombre}]({ruta})\n"
seccion += "\n"
# Relacionados
if relaciones.get("relacionados"):
seccion += "### Capítulos relacionados\n\n"
for rel in relaciones["relacionados"]:
ruta = encontrar_archivo(rel, directorio_actual) or rel
nombre = rel.replace(".md", "").replace("BLOQUE_", "").replace("_", " ")
seccion += f"- [{nombre}]({ruta})\n"
seccion += "\n"
# Aplicación práctica
if relaciones.get("aplicacion"):
seccion += "### Aplicación práctica\n\n"
for rel in relaciones["aplicacion"]:
ruta = rel # Ya es ruta relativa
nombre = Path(rel).stem.replace("BLOQUE_", "").replace("_", " ")
seccion += f"- [{nombre}]({ruta})\n"
seccion += "\n"
# Continuación
if relaciones.get("continuacion"):
seccion += "### Continuación\n\n"
for rel in relaciones["continuacion"]:
ruta = encontrar_archivo(rel, directorio_actual) or rel
nombre = rel.replace(".md", "").replace("BLOQUE_", "").replace("_", " ")
seccion += f"- [{nombre}]({ruta})\n"
seccion += "\n"
# Protocolos transtelefónicos
if relaciones.get("transtelefonico"):
seccion += "### Protocolos transtelefónicos\n\n"
for rel in relaciones["transtelefonico"]:
ruta = rel
nombre = Path(rel).stem.replace("BLOQUE_", "").replace("_", " ")
seccion += f"- [{nombre}]({ruta})\n"
seccion += "\n"
return seccion.rstrip() + "\n"
def añadir_enlaces_a_archivo(archivo: Path, relaciones: Dict[str, List[str]]) -> bool:
"""Añade enlaces de referencia a un archivo Markdown"""
if not archivo.exists():
print(f"❌ Archivo no encontrado: {archivo}")
return False
contenido = archivo.read_text(encoding='utf-8')
# Verificar si ya tiene sección de enlaces
if "## 🔗 Enlaces recomendados" in contenido:
print(f"⏭️ Ya tiene enlaces: {archivo.name}")
return False
# Buscar el final del archivo (última línea con contenido)
lineas = contenido.rstrip().split('\n')
# Buscar última línea con contenido antes de líneas vacías finales
ultima_linea_contenido = len(lineas) - 1
while ultima_linea_contenido >= 0 and not lineas[ultima_linea_contenido].strip():
ultima_linea_contenido -= 1
# Generar sección de enlaces
seccion_enlaces = generar_seccion_enlaces(archivo, relaciones)
# Insertar antes de la última línea (o al final si no hay separador)
if ultima_linea_contenido >= 0:
# Insertar después de la última línea con contenido
lineas.insert(ultima_linea_contenido + 1, seccion_enlaces)
else:
lineas.append(seccion_enlaces)
nuevo_contenido = '\n'.join(lineas)
# Guardar
archivo.write_text(nuevo_contenido, encoding='utf-8')
print(f"✅ Enlaces añadidos: {archivo.name}")
return True
def main():
"""Función principal"""
print("=" * 70)
print("🔗 AÑADIR ENLACES DE REFERENCIA ENTRE CAPÍTULOS")
print("=" * 70)
print()
añadidos = 0
omitidos = 0
# Procesar cada archivo con relaciones definidas
for nombre_archivo, relaciones in RELACIONES.items():
# Buscar archivo en el manual
archivo = None
for subdir in MANUAL_DIR.rglob(nombre_archivo):
if subdir.is_file():
archivo = subdir
break
if not archivo:
print(f"⚠️ Archivo no encontrado: {nombre_archivo}")
omitidos += 1
continue
if añadir_enlaces_a_archivo(archivo, relaciones):
añadidos += 1
else:
omitidos += 1
print()
print("=" * 70)
print(f"📊 RESUMEN: {añadidos} añadidos, {omitidos} omitidos")
print("=" * 70)
if __name__ == "__main__":
main()