// Data layer — loads the three taxonomies from /data after the user passes the upload gate. // IMPORTANT: All user-facing copy says "Diagnósticos / Objetivos / Intervenciones de enfermería". // We don't ship the proprietary taxonomy names anywhere in copy. const DATA = { dxs: null, objs: null, ints: null, relations: null, loaded: false }; async function loadAllData() { if (DATA.loaded) return DATA; const [dxs, objs, ints, relations] = await Promise.all([ fetch('data/diagnosticos.json').then(r => r.json()), fetch('data/objetivos.json').then(r => r.json()), fetch('data/intervenciones.json').then(r => r.json()), fetch('data/relations.json').then(r => r.json()), ]); DATA.dxs = dxs; DATA.objs = objs; DATA.ints = ints; DATA.relations = relations; // Build code → item indexes for fast lookup DATA.objByCode = new Map(objs.items.map(o => [o.codigo, o])); DATA.intByCode = new Map(ints.items.map(i => [i.codigo, i])); DATA.dxByCode = new Map(dxs.items.map(d => [d.codigo, d])); DATA.loaded = true; return DATA; } // ─── CASOS (saved patient plans) — generic codes, no proprietary names ───── const CASOS = [ { id: 'c1', paciente: 'M.G. · 67 años', contexto: 'Posoperatorio de hemicolectomía · Día 2', status: 'active', statusLabel: 'Activo', actualizado: 'Hoy, 14:30', rels: [ { kind: 'dx', code: '00132', label: 'Dolor agudo' }, { kind: 'ob', code: '2102', label: 'Nivel del dolor' }, { kind: 'iv', code: '1400', label: 'Manejo del dolor: agudo' }, ] }, { id: 'c2', paciente: 'J.R. · 52 años', contexto: 'EPOC reagudizado · UCI', status: 'active', statusLabel: 'Activo', actualizado: 'Ayer, 21:08', rels: [ { kind: 'dx', code: '00031', label: 'Limpieza ineficaz de vías aéreas' }, { kind: 'ob', code: '0410', label: 'Permeabilidad vías respiratorias' }, { kind: 'iv', code: '3140', label: 'Manejo de las vías aéreas' }, ] }, { id: 'c3', paciente: 'A.L. · 78 años', contexto: 'Inmovilización prolongada · Hogar de cuidados', status: 'draft', statusLabel: 'Borrador', actualizado: 'Hace 3 d', rels: [ { kind: 'dx', code: '00046', label: 'Deterioro integridad cutánea' }, { kind: 'ob', code: '1101', label: 'Integridad tisular' }, { kind: 'iv', code: '3590', label: 'Vigilancia de la piel' }, ] }, { id: 'c4', paciente: 'C.M. · 34 años', contexto: 'Ansiedad preoperatoria', status: 'archived', statusLabel: 'Archivado', actualizado: 'Hace 2 sem', rels: [ { kind: 'dx', code: '00146', label: 'Ansiedad' }, { kind: 'ob', code: '1402', label: 'Autocontrol de la ansiedad' }, { kind: 'iv', code: '5820', label: 'Disminución de la ansiedad' }, ] }, ]; // ─── CREADOR ─────────────────────────────────────────────── // Único creador del proyecto. const CREATORS = [ { photo: 'assets/salvador-canela.jpg', name: 'Salvador Canela', role: 'Creador único · Enfermería', bio: 'Enfermero y desarrollador de Cynamonurs. Creó la herramienta para reducir el tiempo de búsqueda y relación entre las tres taxonomías, y así devolverle minutos al cuidado del paciente.', // Usa SOCIAL.personal (abajo) para sus enlaces. Deja "" para mostrar el icono sin enlace. social: 'personal', }, ]; // ─── REDES SOCIALES ──────────────────────────────────────── // Para ACTIVAR un enlace, pega la URL completa entre las comillas. // ej: instagram: 'https://instagram.com/cynamonurs' // Deja "" (vacío) y el icono se mostrará igual, listo para configurar más adelante. const SOCIAL = { // Redes de la EMPRESA Cynamonurs → aparecen en Contacto y el pie de página. empresa: { instagram: '', tiktok: '', youtube: '', facebook: '', linkedin: '', }, // Redes PERSONALES de Salvador → aparecen en su tarjeta de creador. personal: { instagram: '', tiktok: '', youtube: '', facebook: '', linkedin: '', }, }; // Datos de contacto editables en un solo lugar. const CONTACTO = { email: 'cynamonurs@gmail.com', ciudad: 'Chetumal, Quintana Roo · México', appName: 'Cynamonurs', }; // ─── EDICIONES SOPORTADAS ────────────────────────────────── // ⚠️ CONFIRMAR: edita aquí la edición/año EXACTO de cada taxonomía que soporta la app. // Estos valores se muestran en la web, en Términos y Condiciones y en el explorador. const EDITIONS = { nanda: { sigla: 'NANDA-I', nombre: 'Diagnósticos de enfermería', edicion: 'NANDA-I 2021–2023, 12.ª edición', detalle: '12.ª edición · 2021–2023', items: 263, }, noc: { sigla: 'NOC', nombre: 'Clasificación de Resultados de Enfermería', edicion: 'NOC, 7.ª edición (2024)', detalle: '7.ª edición · 2024', items: 610, }, nic: { sigla: 'NIC', nombre: 'Clasificación de Intervenciones de Enfermería', edicion: 'NIC, 8.ª edición (2024)', detalle: '8.ª edición · 2024', items: 614, }, }; // ─── ESCALAS (image-based, from clinical sources) ────────── const ESCALAS = [ { id: 'apgar', name: 'Escala de APGAR', desc: 'Recién nacido al 1.° y 5.° minuto', img: 'assets/scales/apgar.png', rangos: '8–10 normal · 4–7 depresión moderada · 0–3 depresión grave' }, { id: 'silverman', name: 'Silverman–Andersen', desc: 'Dificultad respiratoria del RN', img: 'assets/scales/silverman.png', rangos: '0 sin dificultad · 1–3 leve · 4–6 moderada · 7–10 grave' }, { id: 'pipp', name: 'Escala PIPP del dolor en neonatos', desc: 'Perfil del dolor en prematuros', img: 'assets/scales/dolor-neonatos.png', rangos: '≤6 dolor leve · 7–12 moderado · ≥13 intenso' }, { id: 'braden-a', name: 'Braden — riesgo de úlceras por presión', desc: 'Adultos', img: 'assets/scales/braden-adultos.png', rangos: '<12 alto · 13–14 moderado · 15–16 bajo · >16 sin riesgo' }, { id: 'braden-p', name: 'Braden adaptada — visual', desc: 'Versión gráfica para enfermería', img: 'assets/scales/braden-pediatrica.png', rangos: '<12 alto · 13–14 moderado · 15–16 bajo · >16 sin riesgo' }, { id: 'glasgow-p', name: 'Glasgow pediátrica', desc: 'Nivel de consciencia por edad', img: 'assets/scales/glasgow-pediatrica.png', rangos: '14–15 leve · 9–13 moderada · <9 grave' }, ]; Object.assign(window, { loadAllData, DATA, CASOS, CREATORS, ESCALAS, SOCIAL, CONTACTO, EDITIONS });