codigo0/dist/assets/page-herramientas-BzovIToK.js

2 lines
85 KiB
JavaScript
Raw Normal View History

import{r as m,j as e,a1 as le,I as A,T as M,a2 as ye,a3 as ke,a4 as ce,a5 as we,z as q,a6 as Ce,a7 as de,a8 as Se,a9 as me,aa as Pe,i as Me,ab as Re,ac as ue,y as G,ad as xe,ae as ge,af as pe,Y as U,ag as Fe,ah as Ee,ai as Ie,R as Te,Q as he,m as Ae,aj as De,C as _,ak as ze,a as O}from"./0-vendor-react-DWOJpYrt.js";import{B as E,I as j,C as F,A as Z,a as X,b as Ve,c as K,d as W,e as Q}from"./page-comunicacion-DmHQUHoW.js";import{c as P,B as Y}from"./page-ajustes-DgawOEJM.js";import{a as be}from"./1-vendor-utils-Delnuc0l.js";const Le={smartPerfusions:!0},H=s=>typeof s=="number"&&Number.isFinite(s),L=(s,t,r)=>({value:s,interpretation:t,severity:r}),Oe=s=>{const{weightKg:t,doseMcgKgMin:r,concentrationMcgMl:o,doseRange:a}=s;if(!H(t)||!H(r)||!H(o)||t<=0||r<=0||o<=0)return L("N/A","Datos insuficientes para calcular ml/h","amber");const i=r*t*60/o;if(a){if(r>a.max)return L(i,"Dosis por encima del rango habitual","red");if(r<a.min)return L(i,"Dosis por debajo del rango habitual","amber")}return L(i,"Dosis dentro de rango habitual","green")},Be=(s,t=20)=>{if(!H(s)||!H(t)||s<=0||t<=0)return L("N/A","Datos insuficientes para gotas/min","amber");const r=s*t/60;return L(r,"Goteo estimado","green")},w=s=>typeof s=="number"&&Number.isFinite(s),N=(s,t,r)=>({value:s,interpretation:t,severity:r}),Fs=(s,t)=>{if(!w(s)||!w(t))return N("N/A","Insufficient data for MAP","amber");const r=(2*t+s)/3;return r<65?N(r,"MAP low (hypotension risk)","red"):r<75?N(r,"MAP borderline","amber"):N(r,"MAP adequate","green")},Es=(s,t)=>{if(!w(s)||!w(t)||t<=0)return N("N/A","Insufficient data for Shock Index","amber");const r=s/t;return r>=1?N(r,"Shock Index high (possible shock)","red"):r>=.7?N(r,"Shock Index elevated","amber"):N(r,"Shock Index normal","green")},Is=s=>{const{respiratoryRate:t,systolicBP:r,gcs:o}=s;if(!w(t)||!w(r)||!w(o))return N("N/A","Insufficient data for qSOFA","amber");const a=(t>=22?1:0)+(r<=100?1:0)+(o<15?1:0);return a>=2?N(a,"qSOFA high risk","red"):a===1?N(a,"qSOFA elevated risk","amber"):N(a,"qSOFA low risk","green")},qe=s=>s<=8?3:s<=11?1:s<=20?0:s<=24?2:3,He=s=>s>=96?0:s>=94?1:s>=92?2:3,$e=s=>s<=90?3:s<=100?2:s<=110?1:s<=219?0:3,Ge=s=>s<=40?3:s<=50?1:s<=90?0:s<=110?1:s<=130?2:3,_e=s=>s<=35?3:s<=36?1:s<=38?0:s<=39?1:2,Ue=s=>s<15?3:0,Ts=s=>{const{respiratoryRate:t,oxygenSaturation:r,systolicBP:o,heartRate:a,temperatureC:i,gcs:n}=s;if(!w(t)||!w(r)||!w(o)||!w(a)||!w(i)||!w(n))return N("N/A","Insufficient data for NEWS2","amber");const d=qe(t)+He(r)+$e(o)+Ge(a)+_e(i)+Ue(n);return d>=7?N(d,"NEWS2 high risk","red"):d>=5?N(d,"NEWS2 medium risk","amber"):N(d,"NEWS2 low risk","green")},ee="patient_context_v1",Ke=1440*60*1e3,$={patient:{},vitals:{},clinicalFlags:{}},fe=m.createContext(void 0),se=typeof window<"u",We=()=>{if(!se)return null;try{const s=window.localStorage.getItem(ee);return s?JSON.parse(s):null}catch{return null}},Qe=s=>{if(se)try{const t={data:s,expiresAt:Date.now()+Ke};window.localStorage.setItem(ee,JSON.stringify(t))}catch{}},ae=()=>{if(se)try{window.localStorage.removeItem(ee)}catch{}},As=({children:s})=>{const[t,r]=m.useState($);m.useEffect(()=>{const a=We();if(a){if(a.expiresAt<=Date.now()){ae(),r($);return}r(a.data||$)}},[]),m.useEffect(()=>{Qe(t)},[t]);const o=m.useMemo(()=>({state:t,setPatientBasics:a=>{r(i=>({...i,patient:{...i.patient,...a}}))},updateVitals:a=>{r(i=>({...i,vitals:{...i.vitals,...a}}))},setClinicalFlags:a=>{r(i=>({...i,clinicalFlags:{...a}}))},resetPatient:()=>{r($),ae()}}),[t]);return e.jsx(fe.Provider,{value:o,children:s})},Ye=()=>{const s=m.useContext(fe);if(!s)throw new Error("usePatient must be used within PatientContextProvider");return s},Je=[{name:"Apertura Ocular",options:[{label:"Espontánea",value:4},{label:"A la orden verbal",value:3},{label:"Al dolor",value:2},{label:"No abre",value:1}]},{name:"Respuesta Verbal",options:[{label:"Orientado",value:5},{label:"Confuso",value:4},{label:"Palabras inapropiadas",value:3},{label:"Sonidos incomprensibles",value:2},{label:"Sin respuesta",value:1}]},{name:"Respuesta Motora",options:[{label:"Obedece órdenes",value:6},{label:"Localiza el dolor",value