// js/proa.js - Lógica para el visor de Guías PROA (v14 - Rutas corregidas) // ====================================================================== // BLOCK START: DOM Elements Selection & Initial Setup // ====================================================================== console.log("[proa.js v14] Script cargado. Esperando DOMContentLoaded..."); window.addEventListener('DOMContentLoaded', () => { console.log("[proa.js v14] DOMContentLoaded detectado. Iniciando setup..."); // Selectores y Contenedores const guideSelector = document.getElementById('guideSelector'); const diagnosisSelectorContainer = document.getElementById('diagnosis-selector-container'); const diagnosisSelector = document.getElementById('diagnosisSelector'); const guideContentDisplay = document.getElementById('guide-content-display'); const togglePediatricCheckbox = document.getElementById('togglePediatric'); // Ruta al JSON const guidesDataUrl = './data/guides_data.json'; // Mantenemos ./ aquí, ya que funciona // Verificar elementos críticos if (!guideSelector || !diagnosisSelectorContainer || !diagnosisSelector || !guideContentDisplay || !togglePediatricCheckbox) { console.error("[proa.js v14] Error Crítico: No se encontraron elementos DOM esenciales."); guideContentDisplay.innerHTML = '
Error: Interfaz no inicializada correctamente.
'; return; } console.log("[proa.js v14] Elementos DOM encontrados."); // ====================================================================== // BLOCK END: DOM Elements Selection & Initial Setup // ====================================================================== // ====================================================================== // BLOCK START: State Variables // ====================================================================== let allGuides = []; let currentSelectedGuideData = null; let currentGuideHTMLContent = null; // ====================================================================== // BLOCK END: State Variables // ====================================================================== // ====================================================================== // BLOCK START: Function to Fetch Guides Data (from JSON) // ====================================================================== async function loadGuidesData() { console.log(`[proa.js v14] Iniciando loadGuidesData desde: ${guidesDataUrl}`); guideSelector.innerHTML = ''; guideSelector.disabled = true; resetUI(); try { console.log("[proa.js v14] Realizando fetch..."); const response = await fetch(guidesDataUrl); console.log(`[proa.js v14] Fetch completado. Status: ${response.status}`); if (!response.ok) throw new Error(`Error HTTP ${response.status} al cargar ${guidesDataUrl}. Verifica que el archivo exista y sea accesible.`); console.log("[proa.js v14] Parseando JSON..."); const rawData = await response.json(); console.log("[proa.js v14] JSON parseado."); if (!Array.isArray(rawData)) throw new Error("El formato del JSON no es un array válido."); allGuides = rawData.filter(g => g.id && g.title && g.file && typeof g.isPediatric === 'boolean'); console.log(`[proa.js v14] Guías válidas iniciales: ${allGuides.length}`); allGuides = allGuides.map(g => { if (g.hasDiagnoses === true) { if (!Array.isArray(g.diagnoses) || g.diagnoses.some(d => !d.id || !d.title)) { console.warn(`[proa.js v14] Guía '${g.title}' marcada con 'hasDiagnoses' pero la estructura 'diagnoses' es inválida. Se tratará como guía normal.`); return { ...g, hasDiagnoses: false, diagnoses: undefined }; } } return g; }); if (allGuides.length === 0) throw new Error("No se encontraron guías válidas en los datos después de la validación."); allGuides.sort((a, b) => a.title.localeCompare(b.title)); console.log("[proa.js v14] Llamando a populateGuideSelector (mostrará Adultos por defecto)..."); populateGuideSelector(); guideSelector.disabled = false; console.log("[proa.js v14] Carga inicial de datos completada."); } catch (error) { console.error("[proa.js v14] Error durante loadGuidesData:", error); guideSelector.innerHTML = ``; guideSelector.disabled = true; guideContentDisplay.innerHTML = `Error crítico al cargar datos: ${error.message}. Revisa la consola y el archivo '${guidesDataUrl}'.
`; } } // ====================================================================== // BLOCK END: Function to Fetch Guides Data (from JSON) // ====================================================================== // ====================================================================== // BLOCK START: UI Update Functions // ====================================================================== function resetUI(fullReset = true) { guideContentDisplay.innerHTML = 'Selecciona una guía del desplegable.
Cargando guía completa...
Cargando diagnóstico...
Error: Datos de guía no encontrados.
'; return; } if (currentSelectedGuideData.hasDiagnoses === true) { console.log(`[proa.js v14] La guía '${currentSelectedGuideData.title}' tiene diagnósticos. Poblando selector secundario.`); populateDiagnosisSelector(currentSelectedGuideData); guideContentDisplay.innerHTML = 'Selecciona un diagnóstico específico del desplegable superior.
Selecciona un diagnóstico específico del desplegable superior.
Error: Guía base no seleccionada correctamente.
'; } }); togglePediatricCheckbox.addEventListener('change', () => { console.log('[proa.js v14] Cambiado filtro pediátrico.'); populateGuideSelector(); }); console.log("[proa.js v14] Listeners añadidos."); // ====================================================================== // BLOCK END: Event Listeners Setup // ====================================================================== // ====================================================================== // BLOCK START: Initial Execution // ====================================================================== loadGuidesData(); // ====================================================================== // BLOCK END: Initial Execution // ====================================================================== }); // Fin DOMContentLoaded console.log("[proa.js v14] Script completamente definido.");