2 lines
19 KiB
JavaScript
Executable file
2 lines
19 KiB
JavaScript
Executable file
import{r as f,j as e,R as E,C as z,X as T,i as j,I,au as B}from"./0-vendor-react-DWOJpYrt.js";import{B as A}from"./page-ajustes-DgawOEJM.js";import{B as x,C as y,A as C,a as N}from"./page-comunicacion-DmHQUHoW.js";import"./1-vendor-utils-Delnuc0l.js";import"./2-vendor-markdown-BQlHAcA7.js";const O=({checklist:t,onReset:c})=>{const[o,d]=f.useState(new Set),[u,s]=f.useState(new Set([t.sections[0]?.id||""])),b=i=>{const a=new Set(o);a.has(i)?a.delete(i):a.add(i),d(a)},g=i=>{const a=new Set(u);a.has(i)?a.delete(i):a.add(i),s(a)},S=()=>{d(new Set),c&&c()},w=i=>{const a=i.items.length,n=i.items.filter(l=>o.has(l.id)).length;return{checked:n,total:a,percentage:a>0?Math.round(n/a*100):0}},P=()=>{const i=t.sections.flatMap(l=>l.items),a=i.length,n=i.filter(l=>o.has(l.id)).length;return{checked:n,total:a,percentage:a>0?Math.round(n/a*100):0}},M=()=>t.sections.flatMap(i=>i.items.filter(a=>a.critical)),_=()=>M().filter(i=>!o.has(i.id)),m=P(),h=_(),R=i=>{switch(i){case"inicio_turno":return"default";case"pre_escena":return"default";case"post_servicio":return"default";default:return"default"}},k=i=>{switch(i){case"inicio_turno":return"Inicio Turno";case"pre_escena":return"Pre-Escena";case"post_servicio":return"Post-Servicio";default:return i}};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("h3",{className:"font-bold text-foreground text-lg",children:t.title}),e.jsx(x,{variant:R(t.phase),children:k(t.phase)})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:t.description})]}),e.jsx(A,{variant:"ghost",size:"sm",onClick:S,className:"shrink-0",title:"Reiniciar checklist",children:e.jsx(E,{className:"w-4 h-4"})})]}),e.jsx(y,{className:"p-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:"Progreso general"}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[m.checked," / ",m.total," (",m.percentage,"%)"]})]}),e.jsx("div",{className:"w-full bg-muted rounded-full h-2",children:e.jsx("div",{className:"bg-primary h-2 rounded-full transition-all",style:{width:`${m.percentage}%`}})})]})}),h.length>0&&e.jsxs(C,{variant:"destructive",children:[e.jsx(z,{className:"w-4 h-4"}),e.jsxs(N,{children:[e.jsx("strong",{children:"Items críticos pendientes:"})," ",h.length," item(s) crítico(s) sin verificar"]})]}),e.jsx("div",{className:"space-y-3",children:t.sections.map(i=>{const a=w(i),n=u.has(i.id),v=i.items.filter(r=>r.critical).filter(r=>!o.has(r.id));return e.jsxs(y,{className:"overflow-hidden",children:[e.jsxs("button",{onClick:()=>g(i.id),className:"w-full p-4 flex items-center justify-between hover:bg-accent transition-colors text-left",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("h4",{className:"font-semibold text-foreground",children:i.title}),v.length>0&&e.jsxs(x,{variant:"destructive",className:"text-xs",children:[v.length," crítico(s)"]})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[a.checked," / ",a.total," completado"]}),e.jsx("span",{children:"•"}),e.jsxs("span",{children:[a.percentage,"%"]})]})]}),e.jsx("div",{className:"ml-4",children:n?e.jsx(T,{className:"w-5 h-5 text-muted-foreground"}):e.jsx(j,{className:"w-5 h-5 text-muted-foreground"})})]}),n&&e.jsxs("div",{className:"px-4 pb-4 space-y-2 border-t border-border pt-4",children:[i.items.map(r=>{const p=o.has(r.id);return e.jsxs("button",{onClick:()=>b(r.id),className:`w-full flex items-start gap-3 p-3 rounded-lg bg-muted hover:bg-accent transition-colors text-left ${p?r.critical?"bg-destructive/15 ring-2 ring-destructive/40":"bg-success/15 ring-2 ring-success/40":""}`,children:[e.jsx("div",{className:`w-6 h-6 rounded border-2 flex items-center justify-center transition-colors shrink-0 mt-0.5 ${p?r.critical?"bg-destructive border-destructive":"bg-success border-success":r.critical?"border-destructive":"border-muted-foreground"}`,children:p&&e.jsx(j,{className:"w-4 h-4 text-background"})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`text-foreground ${p?"line-through opacity-60":""}`,children:r.text}),r.critical&&e.jsx(x,{variant:"destructive",className:"text-xs",children:"Crítico"})]}),r.notes&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:r.notes})]})]},r.id)}),i.notes&&e.jsxs(C,{className:"mt-3",children:[e.jsx(I,{className:"w-4 h-4"}),e.jsx(N,{className:"text-xs",children:i.notes})]})]})]},i.id)})}),t.source&&e.jsxs("p",{className:"text-xs text-muted-foreground text-center",children:["Fuente: ",t.source]})]})},L={id:"inicio-turno-material",title:"Checklist Inicio de Turno - Material Sanitario",shortTitle:"Inicio Turno",phase:"inicio_turno",description:"Verificación completa de material sanitario y oxigenoterapia antes de iniciar servicio.",source:"BLOQUE_03_X5_CHECKLIST_MAESTRO.md",sections:[{id:"oxigeno",title:"O₂: presión, fijación, regulador, tubuladuras, prueba de flujo",category:"oxigeno",items:[{id:"botellas-disponibles",text:"Verificar que botellas están disponibles",critical:!0},{id:"presion-manometro",text:"Leer presión en manómetro (verificar que presión es adecuada)",critical:!0},{id:"botellas-caducadas",text:"Verificar que botellas no están caducadas (si aplica)"},{id:"valvulas-funcionan",text:"Verificar que válvulas funcionan",critical:!0},{id:"fijacion-segura",text:"Verificar que botellas están fijadas correctamente en ambulancia",critical:!0},{id:"regulador-disponible",text:"Verificar que regulador está disponible y bien conectado",critical:!0},{id:"caudalimetro-funciona",text:"Verificar que caudalímetro funciona (ajuste de flujo)",critical:!0},{id:"tubuladuras-disponibles",text:"Verificar que tubuladuras están disponibles y en buen estado",critical:!0},{id:"prueba-flujo",text:"Prueba de flujo: verificar que flujo se ajusta correctamente",critical:!0}],notes:"Registrar presión de botellas e incidencias (botella con poca presión, válvula que no funciona, etc.)"},{id:"dispositivos-oxigeno",title:"Dispositivos O₂: tallas, integridad",category:"dispositivos",items:[{id:"gafas-nasales",text:"Gafas nasales: disponibles y en buen estado"},{id:"mascarilla-simple",text:"Mascarilla simple: disponible y en buen estado"},{id:"mascarilla-reservorio",text:"Mascarilla con reservorio: disponible, buen estado, reservorio funciona",critical:!0},{id:"mascarilla-venturi",text:"Mascarilla Venturi: disponible, adaptadores/boquillas completos"},{id:"nebulizador",text:"Nebulizador (si aplica): disponible, cámara y mascarilla/boquilla en buen estado"},{id:"mascarillas-pediatricas",text:"Mascarillas pediátricas: verificar tallas disponibles y buen estado",critical:!0}],notes:"Registrar incidencias (dispositivo faltante, dañado, tallas incompletas, etc.)"},{id:"bvm",title:"BVM: válvula, reservorio, mascarillas, filtro si aplica",category:"bvm",items:[{id:"bolsa-estado",text:"Bolsa: verificar que está en buen estado (sin daños) y se expande/retorna correctamente",critical:!0},{id:"valvula-funciona",text:"Válvula: verificar que funciona correctamente y no está obstruida",critical:!0},{id:"reservorio-disponible",text:"Reservorio: disponible (si BVM lo lleva), buen estado, conexión correcta"},{id:"mascarillas-tallas",text:"Mascarillas: verificar por tallas (adulto, pediátrico, neonatal según dotación)",critical:!0},{id:"mascarillas-recambios",text:"Mascarillas: verificar que hay recambios disponibles"},{id:"valvula-peep",text:"Válvula PEEP (si existe): disponible y funciona"},{id:"filtros",text:"Filtros (si se usan): disponibles y no obstruidos"}],notes:"Registrar incidencias (BVM dañada, válvula que no funciona, mascarillas faltantes, etc.)"},{id:"aspiracion",title:"Aspiración: batería, frasco, tubuladuras, prueba de succión",category:"aspiracion",items:[{id:"aspirador-disponible",text:"Aspirador: disponible y enciende",critical:!0},{id:"bateria-cargada",text:"Batería: cargada (si aplica)",critical:!0},{id:"regulador-funciona",text:"Regulador/manómetro: funciona"},{id:"frasco-disponible",text:"Frasco: disponible, buen estado, tapas cierran correctamente",critical:!0},{id:"tubuladuras-aspiracion",text:"Tubuladuras: disponibles y en buen estado (sin daños)"},{id:"yankauer",text:"Cánula Yankauer: disponible y en buen estado"},{id:"sondas-flexibles",text:"Sondas flexibles: tamaños disponibles y en buen estado"},{id:"filtros-aspiracion",text:"Filtros: disponibles y no obstruidos"},{id:"prueba-succion",text:"Prueba de succión: verificar que se genera vacío correctamente",critical:!0}],notes:"Registrar incidencias (batería descargada, frasco dañado, vacío que no funciona, etc.)"},{id:"canulas",title:"Cánulas: tallas completas, lubricante si aplica",category:"canulas",items:[{id:"opa-tallas",text:"Cánulas orofaríngeas (OPA): verificar tallas disponibles (0-1, 2-3, 4, 5-6, 7-8 según dotación)",critical:!0},{id:"opa-estado",text:"OPA: verificar que están en buen estado"},{id:"npa-tallas",text:"Cánulas nasofaríngeas (NPA): verificar tallas disponibles (5-6, 7, 8 según dotación)"},{id:"npa-estado",text:"NPA: verificar que están en buen estado"},{id:"lubricante",text:"Lubricante (si aplica): disponible, no caducado, hidrosoluble"}],notes:"Registrar incidencias (tallas faltantes, cánulas dañadas, lubricante faltante, etc.)"},{id:"curas",title:"Curas/hemorragias: compresas/vendas/compresivos",category:"curas",items:[{id:"gasas-compresas",text:"Gasas/compresas/apósitos: disponibles, buen estado (no caducados, no dañados), cantidades suficientes"},{id:"vendas",text:"Vendas (crepé/elástica/cohesiva/triangular/tubular si existe): disponibles, buen estado, tamaños adecuados"},{id:"cinta-esparadrapo",text:"Cinta/esparadrapo: disponible y en buen estado"},{id:"apositos-compresivos",text:"Apósitos compresivos (si hay): disponibles y en buen estado"},{id:"hemostaticos",text:"Hemostáticos/torniquete (si dotación y protocolo): disponibles y en buen estado (no caducados)"}],notes:"Registrar incidencias (material faltante, dañado, caducado, etc.)"},{id:"monitorizacion",title:"Monitorización: SpO₂, manguitos, electrodos, tiras glucemia, fundas termómetro",category:"monitorizacion",items:[{id:"pulsioximetro",text:"Pulsioxímetro: disponible, pilas cargadas, sensor funciona",critical:!0},{id:"tensiometro-manual",text:"Tensiómetro manual: disponible, manguitos (diferentes tallas), pera y manómetro funcionan"},{id:"tensiometro-automatico",text:"Tensiómetro automático: disponible, manguitos (diferentes tallas), batería cargada"},{id:"ecg-monitor",text:"ECG básico/monitor (si dotación): disponible, cables en buen estado, electrodos disponibles, batería cargada"},{id:"glucometro",text:"Glucómetro: disponible, batería cargada, tiras reactivas disponibles y en fecha, lancetas disponibles",critical:!0},{id:"termometro",text:"Termómetro (IR frontal/timpánico/digital según dotación): disponible, batería cargada, fundas disponibles (si aplica)"}],notes:"Registrar incidencias (equipo que no funciona, batería baja, material faltante, etc.)"},{id:"epi",title:"EPI/residuos/punzantes",category:"epi",items:[{id:"guantes",text:"Guantes: diferentes tallas, no caducados (si aplica)",critical:!0},{id:"proteccion-ocular",text:"Protección ocular: disponible y en buen estado"},{id:"mascarillas-epi",text:"Mascarillas (quirúrgica/FFP según protocolo): no caducadas (si aplica)"},{id:"chaleco",text:"Chaleco alta visibilidad: disponible y en buen estado"},{id:"casco",text:"Casco (si aplica según protocolo): disponible y en buen estado"},{id:"bolsas-residuos",text:"Bolsas de residuos biológicos y no biológicos: disponibles"},{id:"contenedor-punzantes",text:"Contenedor de punzantes: disponible, no lleno, accesible",critical:!0}],notes:"Registrar incidencias (EPI faltante, caducado, contenedor de punzantes lleno, etc.)"}]},F={id:"pre-escena-rapido",title:"Checklist Pre-Escena Rápido",shortTitle:"Pre-Escena",phase:"pre_escena",description:"Verificación rápida de material crítico antes de intervención (2-5 minutos).",source:"BLOQUE_03_X5_CHECKLIST_MAESTRO.md",sections:[{id:"evaluar-situacion",title:"Evaluar situación y seleccionar módulos",category:"oxigeno",items:[{id:"tipo-situacion",text:"Evaluar tipo de situación (trauma, médico, etc.)"},{id:"material-critico",text:"Identificar material crítico necesario"},{id:"modulo-via-aerea",text:"Módulo Vía Aérea: Si hay riesgo de compromiso de vía aérea o necesidad de oxigenoterapia",critical:!0},{id:"modulo-curas",text:"Módulo Curas: Si hay heridas, hemorragias o quemaduras"},{id:"modulo-monitor",text:"Módulo Monitor: Si es necesario monitorizar constantes"},{id:"modulo-termico",text:"Módulo Térmico: Si hay riesgo de hipotermia o necesidad de control térmico"}]},{id:"verificacion-rapida",title:"Verificación rápida de material crítico",category:"oxigeno",items:[{id:"material-disponible",text:"Verificar que material crítico seleccionado está disponible",critical:!0},{id:"material-funciona",text:"Verificar que material crítico funciona (prueba rápida si es necesario)",critical:!0},{id:"material-accesible",text:"Verificar que material crítico está accesible"},{id:"preparacion-inmediata",text:"Preparar material crítico para uso inmediato"}],notes:"Tiempo estimado: 2-5 minutos aproximadamente"}]},G={id:"post-servicio-cierre",title:"Checklist Post-Servicio - Cierre y Reposición",shortTitle:"Post-Servicio",phase:"post_servicio",description:"Cierre, limpieza, reposición y documentación después del servicio.",source:"BLOQUE_03_X5_CHECKLIST_MAESTRO.md",sections:[{id:"desecho-punzantes",title:"Desecho y punzantes",category:"epi",items:[{id:"punzantes-contenedor",text:"Verificar que todos los punzantes están en contenedor",critical:!0},{id:"no-punzantes-fuera",text:"No dejar punzantes fuera del contenedor",critical:!0},{id:"cerrar-contenedor",text:"Cerrar contenedor si está lleno o al finalizar servicio"},{id:"residuos-biologicos",text:"Gestionar residuos biológicos en bolsas correspondientes"},{id:"residuos-no-biologicos",text:"Gestionar residuos no biológicos en bolsas correspondientes"},{id:"cerrar-bolsas",text:"Cerrar bolsas correctamente y gestionar según protocolo"}]},{id:"limpieza",title:"Limpieza y desinfección",category:"cierre",items:[{id:"limpieza-preliminar",text:"Limpieza preliminar: retirar suciedad visible con paños/toallitas"},{id:"desinfeccion",text:"Aplicar desinfectante según protocolo del servicio, respetar tiempos de contacto"},{id:"secado",text:"Secar material completamente (no guardar material húmedo)",critical:!0},{id:"verificar-seco",text:"Verificar que material está seco"}],notes:"Ver 3.14 – Bioseguridad y Descontaminación del Material para procedimientos detallados"},{id:"reposicion",title:"Reposición",category:"cierre",items:[{id:"identificar-usado",text:"Identificar material consumido durante servicio"},{id:"identificar-danado",text:"Identificar material dañado"},{id:"reponer-consumido",text:"Reponer material consumido si es posible",critical:!0},{id:"reponer-danado",text:"Reponer material dañado si es posible"},{id:"verificar-reposicion",text:"Verificar que reposición es completa"},{id:"solicitar-reposicion",text:"Solicitar reposición de material faltante según protocolo si no es posible reponer"},{id:"comunicar-prioridad",text:"Comunicar prioridad si es necesario y documentar solicitud"}]},{id:"incidencias",title:"Registro de incidencias",category:"cierre",items:[{id:"consumos-criticos",text:"Registrar consumos críticos (O₂, mascarillas, BVM/filtros, aspiración, hemostáticos/torniquete si aplica)"},{id:"mediciones-equipos",text:"Registrar mediciones/equipos usados (electrodos, tiras glucemia, fundas termómetro si aplica)"},{id:"incidencias-equipo",text:"Registrar incidencias de equipo (batería baja, fugas, roturas, material caducado)"},{id:"observaciones-seguridad",text:"Registrar observaciones de seguridad (pinchazo, derrame, contaminación)"},{id:"comunicar-incidencias",text:"Comunicar incidencias según protocolo y necesidades de reposición"}],notes:"Ver 3.18 – Documentación Operativa del Material Usado e Incidencias para procedimientos detallados"},{id:"cerrar-maletines",title:"Cerrar maletines",category:"cierre",items:[{id:"verificar-completos",text:"Verificar que maletines están completos (ver 3.5, 3.X2, 3.X3)",critical:!0},{id:"verificar-limpio-seco",text:"Verificar que material está limpio y seco"},{id:"verificar-no-falta",text:"Verificar que no falta material crítico"},{id:"cerrar-correctamente",text:"Cerrar maletines correctamente"},{id:"listos-siguiente",text:"Verificar que maletines están listos para siguiente servicio"}]}]},V=[L,F,G];function D(t){return V.filter(c=>c.phase===t)}const q={inicio_turno:"Inicio de Turno",pre_escena:"Pre-Escena",post_servicio:"Post-Servicio"},U={inicio_turno:"Verificación completa de material antes de iniciar servicio",pre_escena:"Verificación rápida de material crítico antes de intervención",post_servicio:"Cierre, limpieza, reposición y documentación después del servicio"},Y=()=>{const[t,c]=f.useState(null),[o,d]=f.useState("todos"),u=o==="todos"?V:D(o);return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground mb-1",children:"Checklists de Material"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Verificación de material sanitario y oxigenoterapia"})]}),t?e.jsxs("div",{children:[e.jsx("button",{onClick:()=>c(null),className:"mb-4 text-sm text-muted-foreground hover:text-foreground flex items-center gap-2",children:"← Volver a lista de checklists"}),e.jsx(O,{checklist:t,onReset:()=>c(null)})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex gap-2 overflow-x-auto scrollbar-hide -mx-4 px-4",children:[e.jsx("button",{onClick:()=>d("todos"),className:`px-4 py-2 rounded-full text-sm font-medium whitespace-nowrap transition-colors ${o==="todos"?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-accent"}`,children:"Todos"}),["inicio_turno","pre_escena","post_servicio"].map(s=>e.jsx("button",{onClick:()=>d(s),className:`px-4 py-2 rounded-full text-sm font-medium whitespace-nowrap transition-colors ${o===s?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-accent"}`,children:q[s]},s))]}),e.jsx("div",{className:"space-y-3",children:u.map(s=>e.jsx("button",{onClick:()=>c(s),className:"w-full text-left card-procedure hover:bg-accent transition-colors",children:e.jsx("div",{className:"flex items-start justify-between gap-3",children:e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(B,{className:"w-5 h-5 text-primary"}),e.jsx("h3",{className:"font-semibold text-foreground",children:s.shortTitle}),e.jsx(x,{variant:"default",children:q[s.phase]})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:U[s.phase]}),e.jsxs("p",{className:"text-muted-foreground text-xs mt-1",children:[s.sections.length," sección(es) •"," ",s.sections.reduce((b,g)=>b+g.items.length,0)," items"]})]})})},s.id))})]})]})};export{Y as default};
|