| [613] | 1 | ORRCVIT ;SLC/MKB - Vitals utilities ; 25 Jul 2003  9:31 AM
 | 
|---|
 | 2 |  ;;1.0;CARE MANAGEMENT;;Jul 15, 2003
 | 
|---|
 | 3 |  ; 
 | 
|---|
 | 4 |  ; ID = "VIT:"_PatientID_;_MeasurementDate everywhere below
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 | LIST(ORY,DFN,SDATE,EDATE,VALS) ; -- Return MAX sets of measurements for DFN
 | 
|---|
 | 7 |  ; in @ORY@(#) = Item=ID^^MeasurementDate in HL7 format, and if VALS
 | 
|---|
 | 8 |  ;             = Data=Vital^Value^Unit^MetricValue^Unit^BMI^SuppO2^CriticalFlag^Qualifiers
 | 
|---|
 | 9 |  ; RPC = ORRC VITALS BY PATIENT
 | 
|---|
 | 10 |  N ORN,GMRVSTR,CNT,IDT,VDT,TYPE,IFN,DATA,X K ^UTILITY($J,"GMRVD")
 | 
|---|
 | 11 |  S SDATE=$$HL7TFM^XLFDT($G(SDATE)),EDATE=$$HL7TFM^XLFDT($G(EDATE))
 | 
|---|
 | 12 |  S DFN=+$G(DFN),MAX=$S(SDATE&EDATE:100,1:5)
 | 
|---|
 | 13 |  I $G(EDATE),$L(EDATE,".")<2 S EDATE=EDATE_".2359"
 | 
|---|
 | 14 |  S GMRVSTR="BP;T;R;P;HT;WT;CVP;CG;PO2;PN",GMRVSTR(0)=SDATE_U_EDATE_U_MAX_"^1"
 | 
|---|
 | 15 |  D EN1^GMRVUT0 S ORY=$NA(^TMP($J,"ORRCVIT")),(ORN,CNT)=0 K @ORY
 | 
|---|
 | 16 |  S IDT=0 F  S IDT=$O(^UTILITY($J,"GMRVD",IDT)) Q:IDT<1  D  Q:CNT'<MAX
 | 
|---|
 | 17 |  . S VDT=9999999-IDT,CNT=CNT+1
 | 
|---|
 | 18 |  . S ORN=ORN+1,@ORY@(ORN)="Item=VIT:"_DFN_";"_VDT_U_U_VDT Q:'$G(VALS)
 | 
|---|
 | 19 |  . S TYPE="" F  S TYPE=$O(^UTILITY($J,"GMRVD",IDT,TYPE)) Q:TYPE=""  D
 | 
|---|
 | 20 |  .. S IFN=0 F  S IFN=$O(^UTILITY($J,"GMRVD",IDT,TYPE,IFN)) Q:IFN<1  S X=$G(^(IFN)) D
 | 
|---|
 | 21 |  ... D @TYPE ;return DATA w/relevant pieces
 | 
|---|
 | 22 |  ... S ORN=ORN+1,@ORY@(ORN)="Data="_DATA
 | 
|---|
 | 23 |  K ^UTILITY($J,"GMRVD")
 | 
|---|
 | 24 |  Q
 | 
|---|
 | 25 |  ;
 | 
|---|
 | 26 | DETAIL(ORY,VITAL) ; -- Return details of VITALs
 | 
|---|
 | 27 |  ; where VITAL(#) = ID
 | 
|---|
 | 28 |  ; in @ORY@(#) = Item=ID^^MeasurementDate in HL7 format
 | 
|---|
 | 29 |  ;             = Data=Vital^Value^Unit^MetricValue^Unit^BMI^SuppO2^CriticalFlag^Qualifiers
 | 
|---|
 | 30 |  ; RPC = ORRC VITALS BY ID
 | 
|---|
 | 31 |  N GMRVSTR,DFN,STRT,STOP,ORN,ORI,ID,IDT,VDT,TYPE,IFN,DATA,X
 | 
|---|
 | 32 |  K ^UTILITY($J,"GMRVD") D RANGE
 | 
|---|
 | 33 |  S GMRVSTR="BP;T;R;P;HT;WT;CVP;CG;PO2;PN",GMRVSTR(0)=STRT_U_STOP_"^100^1"
 | 
|---|
 | 34 |  D EN1^GMRVUT0 S ORY=$NA(^TMP($J,"ORRCVIT")),ORN=0 K @ORY
 | 
|---|
 | 35 |  S ORI=0 F  S ORI=$O(VITAL(ORI)) Q:ORI<1  S ID=$G(VITAL(ORI)) D
 | 
|---|
 | 36 |  . S VDT=$P(ID,";",2),IDT=9999999-VDT
 | 
|---|
 | 37 |  . S ORN=ORN+1,@ORY@(ORN)="Item="_ID_U_U_VDT
 | 
|---|
 | 38 |  . S TYPE="" F  S TYPE=$O(^UTILITY($J,"GMRVD",IDT,TYPE)) Q:TYPE=""  D
 | 
|---|
 | 39 |  .. S IFN=0 F  S IFN=$O(^UTILITY($J,"GMRVD",IDT,TYPE,IFN)) Q:IFN<1  S X=$G(^(IFN)) D
 | 
|---|
 | 40 |  ... D @TYPE ;return DATA w/relevant pieces
 | 
|---|
 | 41 |  ... S ORN=ORN+1,@ORY@(ORN)="Data="_DATA
 | 
|---|
 | 42 |  K ^UTILITY($J,"GMRVD")
 | 
|---|
 | 43 |  Q
 | 
|---|
 | 44 |  ;
 | 
|---|
 | 45 | RANGE ; -- Get STRT,STOP,DFN from VITALs
 | 
|---|
 | 46 |  N ORI,ID,VDT  S (STRT,STOP)=""
 | 
|---|
 | 47 |  S ORI=0 F  S ORI=$O(VITAL(ORI)) Q:ORI<1  S ID=$G(VITAL(ORI)) D
 | 
|---|
 | 48 |  . S DFN=+$P(ID,":",2),VDT=$P(ID,";",2)
 | 
|---|
 | 49 |  . I $S('$L(STRT):1,VDT<STRT:1,1:0) S STRT=VDT
 | 
|---|
 | 50 |  . I $S('$L(STOP):1,VDT>STOP:1,1:0) S STOP=VDT
 | 
|---|
 | 51 |  Q
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  ; Return formatted DATA string from X:
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 | BP ; -- Blood Pressure = B/P^value^^^^^^[*]^Q1;..;Qn
 | 
|---|
 | 56 |  S DATA="B/P^"_$P(X,U,8)_"^^^^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 57 |  Q
 | 
|---|
 | 58 | T ; -- Temperature = Temp.^value^F^metric^C^^^[*]^Q1;..;Qn
 | 
|---|
 | 59 |  S DATA="Temp.^"_$P(X,U,8)_"^F^"_$P(X,U,13)_"^C^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 60 |  Q
 | 
|---|
 | 61 | R ; -- Respiration = Resp.^value^^^^^^[*]^Q1;..;Qn
 | 
|---|
 | 62 |  S DATA="Resp.^"_$P(X,U,8)_"^^^^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 63 |  Q
 | 
|---|
 | 64 | P ; -- Pulse = Pulse^value^^^^^^[*]^Q1;..;Qn
 | 
|---|
 | 65 |  S DATA="Pulse^"_$P(X,U,8)_"^^^^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 66 |  Q
 | 
|---|
 | 67 | HT ; -- Height = Ht.^value^in^metric^cm^^^[*]^Q1;..;Qn
 | 
|---|
 | 68 |  S DATA="Ht.^"_$P(X,U,8)_"^in^"_$P(X,U,13)_"^cm^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 69 |  Q
 | 
|---|
 | 70 | WT ; -- Weight = Wt.^value^lb^metric^kg^BodyMassIndex^^[*]^Q1;..;Qn
 | 
|---|
 | 71 |  S DATA="Wt.^"_$P(X,U,8)_"^lb^"_$P(X,U,13)_"^kg^"_$P(X,U,14)_U_U_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 72 |  Q
 | 
|---|
 | 73 | CVP ; -- CenVenPress = CVP^value^cmH2O^^^^^[*]^Q1;..;Qn
 | 
|---|
 | 74 |  S DATA="CVP^"_$P(X,U,8)_"^cmH2O^^^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 75 |  Q
 | 
|---|
 | 76 | CG ; -- Circm/Girth = C/G^value^in^metric^cm^^^[*]^Q1;..;Qn
 | 
|---|
 | 77 |  S DATA="C/G^"_$P(X,U,8)_"^in^"_$P(X,U,13)_"^cm^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 78 |  Q
 | 
|---|
 | 79 | PO2 ; -- PulseOx = Pulse Ox^value^^^^^l/min of supplemental O2^[*]^Q1;..;Qn
 | 
|---|
 | 80 |  S DATA="Pulse Ox^"_$P(X,U,8)_"^^^^^"_$P(X,U,15)_U_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 81 |  Q
 | 
|---|
 | 82 | PN ; -- Pain = Pain^value^^^^^^[*]^Q1;..;Qn
 | 
|---|
 | 83 |  S DATA="Pain^"_$P(X,U,8)_"^^^^^^"_$P(X,U,12)_U_$P(X,U,17)
 | 
|---|
 | 84 |  Q
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 | IDS(ORY,DFN,SDATE,EDATE) ; --Return recent measurement IDs for DFN
 | 
|---|
 | 87 |  ; in @ORY@(DFN) = #sets ^ 1 if any are critical
 | 
|---|
 | 88 |  ;    @ORY@(DFN,ID) = * if critical, else null
 | 
|---|
 | 89 |  ; [from ORRCDPT1]
 | 
|---|
 | 90 |  N GMRVSTR,MAX,CNT,ABN,IDT,VDT,X
 | 
|---|
 | 91 |  S ORY=$NA(^TMP($J,"ORRCVIT")) K @ORY,^UTILITY($J,"GMRVD")
 | 
|---|
 | 92 |  S DFN=+$G(DFN),MAX=$S($G(SDATE)&$G(EDATE):100,1:5)
 | 
|---|
 | 93 |  I $G(EDATE),$L(EDATE,".")<2 S EDATE=EDATE_".2359" ;end of day
 | 
|---|
 | 94 |  S GMRVSTR="BP;T;R;P;HT;WT;CVP;CG;PO2;PN",GMRVSTR(0)=$G(SDATE)_U_$G(EDATE)_U_MAX_"^1"
 | 
|---|
 | 95 |  D EN1^GMRVUT0 S CNT=0,ABN=""
 | 
|---|
 | 96 |  S IDT=0 F  S IDT=$O(^UTILITY($J,"GMRVD",IDT)) Q:IDT<1  D  Q:CNT'<MAX
 | 
|---|
 | 97 |  . S VDT=9999999-IDT,CNT=CNT+1,X=$$ABN(IDT)
 | 
|---|
 | 98 |  . S @ORY@(DFN,"VIT:"_DFN_";"_VDT)=X S:$L(X) ABN=1
 | 
|---|
 | 99 |  S:CNT @ORY@(DFN)=CNT_U_ABN
 | 
|---|
 | 100 |  K ^UTILITY($J,"GMRVD")
 | 
|---|
 | 101 |  Q
 | 
|---|
 | 102 |  ;
 | 
|---|
 | 103 | ABN(IDT) ; -- Return * if any value from measurement set is critical, else null
 | 
|---|
 | 104 |  N Y,TYPE,IFN S Y=""
 | 
|---|
 | 105 |  S TYPE="" F  S TYPE=$O(^UTILITY($J,"GMRVD",IDT,TYPE)) Q:TYPE=""  D
 | 
|---|
 | 106 |  . S IFN=0 F  S IFN=$O(^UTILITY($J,"GMRVD",IDT,TYPE,IFN)) Q:IFN<1  S:$G(^(IFN))["*" Y="*"
 | 
|---|
 | 107 |  Q Y
 | 
|---|