Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: EDPVIT

EDPVIT.m

Go to the documentation of this file.
  1. EDPVIT ;SLC/MKB -- Vitals utilities ;4/25/12 12:51pm
  1. ;;2.0;EMERGENCY DEPARTMENT;;May 2, 2012;Build 103
  1. ;
  1. GET(DFN,BEG,END) ; -- Return vitals measurements from BEG to END
  1. D XML^EDPX("<Vitals dfn="""_$G(DFN)_""" >")
  1. ;D XML^EDPX("<Vitals>")
  1. S DFN=+$G(DFN) I DFN<1 D ERR("Missing or invalid patient DFN") D XML^EDPX("</Vitals>") Q
  1. N LOG,GMRVSTR,IDT,TYPE,IEN,REC,EDPX,LAST,X
  1. S LOG=+$O(^EDP(230,"APA",DFN,0))
  1. S:'$G(END) END=9999999 I '$G(BEG) D
  1. . I LOG S BEG=+$P($G(^EDP(230,LOG,0)),U,8) ;Time In
  1. . E S BEG=$$FMADD^XLFDT($$NOW^XLFDT,-1) ;Last 24 hours
  1. S GMRVSTR="BP;T;R;P;HT;WT;PN",GMRVSTR(0)=BEG_U_END_"^9999999^1"
  1. K ^UTILITY($J,"GMRVD") D EN1^GMRVUT0
  1. ; ^UTILITY($J,"GMRVD",IDT,TYPE,IEN) = $P(^GMR(120.5,IEN,0),U,1,9)_
  1. ; ^ Qual1 ^ Qual2 ^ * ^ metric ^ BMI ^ L/Min ^ SuppO2% ^ all qual's
  1. S IDT="A" F S IDT=$O(^UTILITY($J,"GMRVD",IDT),-1) Q:IDT<1 D
  1. . K EDPX S EDPX("time")=9999999-IDT
  1. . S TYPE="" F S TYPE=$O(^UTILITY($J,"GMRVD",IDT,TYPE)) Q:TYPE="" D
  1. .. S IEN=$O(^UTILITY($J,"GMRVD",IDT,TYPE,0)),REC=$G(^(IEN))
  1. .. S EDPX(TYPE)=$P(REC,U,8),LAST=9999999-IDT
  1. . ; EDPX("error")="false" ;for now
  1. . D XML^EDPX($$XMLA^EDPX("vital",.EDPX))
  1. GETQ ;end
  1. D XML^EDPX("</Vitals>")
  1. S X=$G(^EDP(230,LOG,7)) I X D ;schedule
  1. . K EDPX S EDPX("frequency")=$P(X,U),EDPX("frequencyUnits")="mins"
  1. . ;S:$P(X,U,2) EDPX("duration")=$P(X,U,2),EDPX("durationUnits")="mins"
  1. . S:$G(LAST) EDPX("lastUpdated")=LAST
  1. . D XML^EDPX($$XMLA^EDPX("schedule",.EDPX))
  1. Q
  1. ;
  1. PUT(DFN,DATA) ; -- Save new measurement
  1. N I,NM,VAL,TIME,LOC,TYPE,X,ERROR
  1. S DFN=+$G(DFN) I DFN<1 D ERR("Missing or invalid patient DFN") Q
  1. F I=1:1:$L(DATA,"^") D ;parse
  1. . S X=$P(DATA,U,I),NM=$P(X,"="),VAL=$P(X,"=",2)
  1. . S:$L(NM) DATA($$UP^XLFSTR(NM))=VAL
  1. S TIME=$G(DATA("TIME")),ERROR=$G(DATA("ERROR"))
  1. I TIME<1 D ERR("Missing or invalid time") Q
  1. I ERROR="true" D G PUTQ
  1. . ;mark all values at TIME as Entered in Error
  1. S LOC=$$DFLTLOC^EDPLPCE(DFN)
  1. I LOC<1 D ERR("Missing default ED Hospital Location") Q
  1. F TYPE="BP","T","R","P","HT","WT","PN" S X=$G(DATA(TYPE)) I X D
  1. . N IEN,DATA,EDPY
  1. . S IEN=+$O(^GMRD(120.51,"C",TYPE,0))
  1. . S DATA=TIME_U_DFN_U_IEN_";"_X_U_LOC_U_DUZ
  1. . D EN1^GMVDCSAV(.EDPY,DATA) ;IA #4815
  1. PUTQ ;return new list
  1. D GET(DFN)
  1. Q
  1. ;
  1. ERR(MSG) ; -- Return error node
  1. I +MSG S MSG=$$MSG^EDPX(MSG)
  1. N X S X="<error msg='"_MSG_"' />"
  1. D XML^EDPX(X)
  1. Q
  1. ;
  1. LAST(DFN) ; -- Return time that vitals were last taken
  1. N Y,IDX
  1. S IDX=$Q(^GMR(120.5,"AA",DFN)),Y=""
  1. I $P(IDX,",",3)=DFN S Y=9999999-+$P(IDX,",",5)
  1. Q Y
  1. ;
  1. ; -- Worksheet calls:
  1. ;
  1. READ(CTXT) ; -- return current vitals in XML
  1. D XML^EDPX("<vitals>")
  1. N DFN,LOG,BEG,END,GMRVSTR,IDT,TYPE,IEN,REC,EDPX,LAST,X,EDPBMI,Q
  1. S DFN=+$G(CTXT("dfn")),LOG=+$G(CTXT("log"))
  1. I DFN<1 D ERR("Missing or invalid patient DFN") G RQ
  1. S END=9999999 D
  1. . I LOG S BEG=+$P($G(^EDP(230,LOG,0)),U,8) ;Time In
  1. . E S BEG=$$FMADD^XLFDT($$NOW^XLFDT,-1) ;Last 24 hours
  1. S GMRVSTR="BP;T;R;P;HT;WT;CVP;CG;PO2;PN",GMRVSTR(0)=BEG_U_END_"^9999999^1"
  1. K ^UTILITY($J,"GMRVD") D EN1^GMRVUT0
  1. ; ^UTILITY($J,"GMRVD",IDT,TYPE,IEN) = $P(^GMR(120.5,IEN,0),U,1,9)_
  1. ; ^ Qual1 ^ Qual2 ^ * ^ metric ^ BMI ^ L/Min ^ SuppO2% ^ all qual's
  1. S IDT="A" F S IDT=$O(^UTILITY($J,"GMRVD",IDT),-1) Q:IDT<1 D
  1. . D XML^EDPX("<vital>")
  1. . S LAST=9999999-IDT
  1. . S TYPE="" F S TYPE=$O(^UTILITY($J,"GMRVD",IDT,TYPE)) Q:TYPE="" D
  1. .. S IEN=$O(^UTILITY($J,"GMRVD",IDT,TYPE,0)),REC=$G(^(IEN)) K EDPX
  1. .. S EDPX("id")=IEN,EDPX("time")=LAST,EDPX("ussValue")=$P(REC,U,8)
  1. .. S EDPX("name")=TYPE I TYPE="WT",$P(REC,U,14) S EDPBMI=IEN_U_$P(REC,U,14)
  1. .. S X=$S(TYPE="T":"F",TYPE="HT":"in",TYPE="WT":"lb",TYPE="CVP":"cmH2O",TYPE="CG":"in",1:"")
  1. .. S:$L(X) EDPX("ussUnits")=X I $L($P(REC,U,13)) D
  1. ... S X=$S(TYPE="T":"C",TYPE="HT":"cm",TYPE="WT":"kg",TYPE="CVP":"mmHg",TYPE="CG":"cm",1:"")
  1. ... S EDPX("metricValue")=$P(REC,U,13) S:$L(X) EDPX("metricUnits")=X
  1. .. S EDPX("abnormal")=$S($L($P(REC,U,12)):"true",1:"false")
  1. .. I '$L($P(REC,U,17)) D XML^EDPX($$XMLA^EDPX("vitalMsmt",.EDPX)) Q
  1. .. ;Qualifiers
  1. .. D XML^EDPX($$XMLA^EDPX("vitalMsmt",.EDPX,""))
  1. .. D XML^EDPX("<qualifiers>") S X=$P(REC,U,17)
  1. .. F I=1:1:$L(X,";") S Q=$P(X,";",I) D XML^EDPX("<qualifier value="""_Q_""" />")
  1. .. D XML^EDPX("</qualifiers>")
  1. .. D XML^EDPX("</vitalMsmt>")
  1. . I $G(EDPBMI) D K EDPBMI
  1. .. K EDPX S EDPX("id")=+EDPBMI_"BMI",EDPX("time")=LAST
  1. .. S EDPX("ussValue")=$P(EDPBMI,U,2),EDPX("name")="BMI"
  1. .. D XML^EDPX($$XMLA^EDPX("vitalMsmt",.EDPX))
  1. . D XML^EDPX("</vital>")
  1. RQ ;end
  1. D XML^EDPX("</vitals>")
  1. S X=$G(^EDP(230,LOG,7)) I X D ;schedule
  1. . K EDPX S EDPX("frequency")=$P(X,U),EDPX("frequencyUnits")="mins"
  1. . S EDPX("repeatVitals")=$S($P(X,U,2):"true",1:"false")
  1. . S:$G(LAST) EDPX("lastUpdated")=LAST
  1. . D XML^EDPX($$XMLA^EDPX("schedule",.EDPX))
  1. Q
  1. ;
  1. SAVE(ARRAY) ; -- process incoming Vitals XML array
  1. N DFN,LOG,ADD,DEL,SCH,EDPI,LOC,TIME,ID,X1,X2
  1. S DFN=+$G(ARRAY("context",1,"/dfn")) ;?!?
  1. I DFN<1 D ERR("Missing or invalid patient DFN") Q
  1. S LOG=+$G(ARRAY("context",1,"/log")) ;?!?
  1. ; entered in error
  1. M DEL=ARRAY("removeVitals",1,"vitalMsmt")
  1. F EDPI=1:1 S ID=$G(DEL(EDPI,"/id")) Q:ID="" D
  1. . N DATA,EDPRES S DATA=ID_U_DUZ_U_$G(DEL(EDPI,"/reason"))
  1. . D ERROR^GMVUTL1(.EDPRES,DATA)
  1. ; add a new measurement
  1. M ADD=ARRAY("addVital",1,"vitalMsmt")
  1. S LOC=$$DFLTLOC^EDPLPCE(DFN),TIME=$$NOW^XLFDT
  1. I LOC<1 D ERR("Missing default ED Hospital Location") Q
  1. F EDPI=1:1 S TYPE=$G(ADD(EDPI,"/name")) Q:TYPE="" D
  1. . N IEN,DATA,EDPY,X
  1. . S X=$G(ADD(EDPI,"/value")) Q:'$L(X)
  1. . ;ck /units, convert if necessary ??
  1. . S IEN=+$O(^GMRD(120.51,"C",TYPE,0))
  1. . S DATA=TIME_U_DFN_U_IEN_";"_X_U_LOC_U_DUZ
  1. . D EN1^GMVDCSAV(.EDPY,DATA) ;IA #4815
  1. ; save frequency
  1. M SCH=ARRAY("schedule",1) I $D(SCH),LOG D
  1. . S X1=+$G(SCH("/frequency")) ;ck units?
  1. . S X2=$S($G(SCH("/repeatVitals"))="true":1,1:0)
  1. . S ^EDP(230,LOG,7)=X1_U_X2
  1. Q