| [613] | 1 | ORQQVI ; slc/STAFF - Functions which return patient vital and I/O data ;10/26/06  11:44
 | 
|---|
 | 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,198,215,250,260**;Dec 17, 1997;Build 26
 | 
|---|
 | 3 | VITALS(ORY,DFN,ORSDT,OREDT) ; return patient's vital measurements taken between start date/time and end date/time
 | 
|---|
 | 4 |  ;ORY: return variable, results are returned in the format:
 | 
|---|
 | 5 |  ;     vital measurement ien^vital type^date/time taken^rate
 | 
|---|
 | 6 |  ;DFN: patient identifier from Patient File [#2]
 | 
|---|
 | 7 |  ;ORSDT: start date/time in Fileman format
 | 
|---|
 | 8 |  ;OREDT: end date/time in Fileman format
 | 
|---|
 | 9 |  K ^UTILITY($J,"GMRVD")
 | 
|---|
 | 10 |  S GMRVSTR="BP;HT;WT;T;R;P;PN" ;dee 2/12/99 added PN
 | 
|---|
 | 11 |  S GMRVSTR(0)=ORSDT_"^"_OREDT_"^"_"^"
 | 
|---|
 | 12 |  D EN1^GMRVUT0
 | 
|---|
 | 13 |  N ORT,ORD,ORI,I
 | 
|---|
 | 14 |  S ORT="",ORD=0,ORI=0,I=0
 | 
|---|
 | 15 |  F  S ORT=$O(^UTILITY($J,"GMRVD",ORT)) Q:ORT=""  D
 | 
|---|
 | 16 |  .F  S ORD=$O(^UTILITY($J,"GMRVD",ORT,ORD)) Q:ORD<1  D
 | 
|---|
 | 17 |  ..F  S ORI=$O(^UTILITY($J,"GMRVD",ORT,ORD,ORI)) Q:ORI<1  D
 | 
|---|
 | 18 |  ...S I=I+1
 | 
|---|
 | 19 |  ...S ORY(I)=ORI_"^"_ORT_"^"_$P(^UTILITY($J,"GMRVD",ORT,ORD,ORI),"^",8)_"^"_$P(^(ORI),"^")
 | 
|---|
 | 20 |  I I=0 S ORY(1)="^No vitals found."
 | 
|---|
 | 21 |  K GMRVSTR
 | 
|---|
 | 22 |  Q
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 | XFASTVIT(ORY,DFN,F1,F2) ; return patient's most recent vital measurements
 | 
|---|
 | 25 |  ;ORY: return variable, results are returned in the format:
 | 
|---|
 | 26 |  ;     vital measurement ien^vital type^rate^date/time taken
 | 
|---|
 | 27 |  ;DFN: patient identifier from Patient File [#2]
 | 
|---|
 | 28 |  ; F1 & F2 are ignored
 | 
|---|
 | 29 |  ;
 | 
|---|
 | 30 |  N CNT
 | 
|---|
 | 31 |  S CNT=0
 | 
|---|
 | 32 |  D VITAL("TEMPERATURE","T",DFN,.ORY,.CNT)
 | 
|---|
 | 33 |  D VITAL("PULSE","P",DFN,.ORY,.CNT)
 | 
|---|
 | 34 |  D VITAL("RESPIRATION","R",DFN,.ORY,.CNT)
 | 
|---|
 | 35 |  D VITAL("BLOOD PRESSURE","BP",DFN,.ORY,.CNT)
 | 
|---|
 | 36 |  D VITAL("HEIGHT","HT",DFN,.ORY,.CNT)
 | 
|---|
 | 37 |  D VITAL("WEIGHT","WT",DFN,.ORY,.CNT)
 | 
|---|
 | 38 |  D VITAL("PAIN","PN",DFN,ORY,.CNT) ;dee 2/11/99
 | 
|---|
 | 39 |  Q
 | 
|---|
 | 40 |  ;
 | 
|---|
 | 41 | XVITAL(VITAL,ABBREV,DFN,ORY,CNT) ; get vital measurement
 | 
|---|
 | 42 |  N DATA,IDT,IEN,OK,VTYPE
 | 
|---|
 | 43 |  S VTYPE=$$FIND1^DIC(120.51,"","BX",VITAL,"","","ERR")
 | 
|---|
 | 44 |  I 'VTYPE Q
 | 
|---|
 | 45 |  S OK=0,IDT=0 F  S IDT=$O(^GMR(120.5,"AA",DFN,VTYPE,IDT)) Q:IDT<1  D  Q:OK
 | 
|---|
 | 46 |  .S IEN=0 F  S IEN=$O(^GMR(120.5,"AA",DFN,VTYPE,IDT,IEN)) Q:IEN<1  D  Q:OK
 | 
|---|
 | 47 |  ..I $P($G(^GMR(120.5,IEN,2)),U) Q  ; do not retrieve if entered in error
 | 
|---|
 | 48 |  ..S DATA=$G(^GMR(120.5,IEN,0))
 | 
|---|
 | 49 |  ..I 'DATA Q
 | 
|---|
 | 50 |  ..S CNT=CNT+1,OK=1
 | 
|---|
 | 51 |  ..S ORY(CNT)=IEN_U_ABBREV_U_$P(DATA,U,8)_U_$P(DATA,U)
 | 
|---|
 | 52 |  Q
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 | NOTEVIT(ORY,DFN,NOTEIEN) ;
 | 
|---|
 | 55 |  N VSTR,NOTEDATE
 | 
|---|
 | 56 |  D NOTEVSTR^ORWPCE(.VSTR,NOTEIEN)
 | 
|---|
 | 57 |  Q:$P(VSTR,";",2)=""
 | 
|---|
 | 58 |  D FASTVIT(.ORY,DFN,$P(VSTR,";",2))
 | 
|---|
 | 59 |  Q
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 | FASTVIT(ORY,DFN,F1,F2) ; return patient's most recent vital measurements
 | 
|---|
 | 62 |  ; in date range
 | 
|---|
 | 63 |  ;ORY: return variable, results are returned in the format:
 | 
|---|
 | 64 |  ;     vital measurement ien^vital type^rate^date/time taken
 | 
|---|
 | 65 |  ;DFN: patient identifier from Patient File [#2]
 | 
|---|
 | 66 |  ; F1: starting date/time range
 | 
|---|
 | 67 |  ; F2: ending date/time range
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 |  N CNT,DT1,DT2
 | 
|---|
 | 70 |  S CNT=0
 | 
|---|
 | 71 |  I $G(F1)>0 D
 | 
|---|
 | 72 |  . I $G(F2)="",F1["." S DT1=$P(F1,".",1)_"."_$E($P(F1,".",2),1,4)
 | 
|---|
 | 73 |  . E  S DT1=F1
 | 
|---|
 | 74 |  E  S DT1=1
 | 
|---|
 | 75 |  S DT2=$S($G(F2)>0:F2,DT1>1:DT1,1:9999998)
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 |  D VITAL("TEMPERATURE","T",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 78 |  D VITAL("PULSE","P",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 79 |  D VITAL("RESPIRATION","R",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 80 |  D VITAL("BLOOD PRESSURE","BP",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 81 |  D VITAL("HEIGHT","HT",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 82 |  D VITAL("WEIGHT","WT",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 83 |  D VITAL("PAIN","PN",DFN,.ORY,.CNT,DT1,DT2) ;dee 2/11/99
 | 
|---|
 | 84 |  D VITAL("PULSE OXIMETRY","PO2",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 85 |  D VITAL("CENTRAL VENOUS PRESSURE","CVP",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 86 |  D VITAL("CIRCUMFERENCE/GIRTH","CG",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 87 |  D VITAL("BODY MASS INDEX","BMI",DFN,.ORY,.CNT,DT1,DT2)
 | 
|---|
 | 88 |  Q
 | 
|---|
 | 89 |  ;
 | 
|---|
 | 90 | VITAL(VITAL,ABBREV,DFN,ORY,CNT,F1,F2) ;
 | 
|---|
 | 91 |  ;get most recent vital measurement in date range
 | 
|---|
 | 92 |  I ABBREV="BMI" D BMILAST^ORWGAPIX(DFN,.ORY,.CNT) Q
 | 
|---|
 | 93 |  N DATA,IDT,ENDIDT,IEN,OK,VTYPE,MVAL,VALUE
 | 
|---|
 | 94 |  S VTYPE=$$FIND1^DIC(120.51,"","BX",VITAL,"","","ERR")
 | 
|---|
 | 95 |  I 'VTYPE Q
 | 
|---|
 | 96 |  S OK=0
 | 
|---|
 | 97 |  S IDT=9999999-(F2+$S(F2#1:.0000001,1:.7))
 | 
|---|
 | 98 |  S ENDIDT=9999999-(F1-.0000001)
 | 
|---|
 | 99 |  F  S IDT=$O(^GMR(120.5,"AA",DFN,VTYPE,IDT)) Q:IDT>ENDIDT!'IDT  D  Q:OK
 | 
|---|
 | 100 |  .S IEN=0 F  S IEN=$O(^GMR(120.5,"AA",DFN,VTYPE,IDT,IEN)) Q:IEN<1  D  Q:OK
 | 
|---|
 | 101 |  ..I $P($G(^GMR(120.5,IEN,2)),U) Q  ; do not retrieve if entered in error
 | 
|---|
 | 102 |  ..S DATA=$G(^GMR(120.5,IEN,0))
 | 
|---|
 | 103 |  ..I 'DATA Q
 | 
|---|
 | 104 |  ..S CNT=CNT+1,OK=1,VALUE=$P(DATA,U,8)
 | 
|---|
 | 105 |  ..; changed to display 'POX' rather than 'PO2' per CQ 10592
 | 
|---|
 | 106 |  ..S ORY(CNT)=IEN_U_$S(ABBREV="PO2":"POX",1:ABBREV)_U_VALUE_U_$P(DATA,U)
 | 
|---|
 | 107 |  ..I $P(ORY(CNT),"^",2)="T" D  ; Temperature.
 | 
|---|
 | 108 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE_$S($E(VALUE):" F",1:"")
 | 
|---|
 | 109 |  ...S MVAL=+VALUE
 | 
|---|
 | 110 |  ...Q:'MVAL
 | 
|---|
 | 111 |  ...S MVAL=MVAL-32
 | 
|---|
 | 112 |  ...S MVAL=$J((MVAL*(5/9)),3,1)
 | 
|---|
 | 113 |  ...S ORY(CNT)=ORY(CNT)_"^("_MVAL_" C)"
 | 
|---|
 | 114 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 115 |  ..I $P(ORY(CNT),"^",2)="P" D  ; Pulse.
 | 
|---|
 | 116 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE
 | 
|---|
 | 117 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 118 |  ..I $P(ORY(CNT),"^",2)="R" D  ; Respiration.
 | 
|---|
 | 119 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE
 | 
|---|
 | 120 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 121 |  ..I $P(ORY(CNT),"^",2)="BP" D  ; Blood Pressure.
 | 
|---|
 | 122 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE
 | 
|---|
 | 123 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 124 |  ..I $P(ORY(CNT),"^",2)="HT" D  ; Height.
 | 
|---|
 | 125 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE_$S($E(VALUE):" in",1:"")
 | 
|---|
 | 126 |  ...S MVAL=+VALUE
 | 
|---|
 | 127 |  ...Q:'MVAL
 | 
|---|
 | 128 |  ...S MVAL=$J((MVAL*2.54),3,1)
 | 
|---|
 | 129 |  ...S ORY(CNT)=ORY(CNT)_"^("_MVAL_" cm)"
 | 
|---|
 | 130 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 131 |  ..I $P(ORY(CNT),"^",2)="WT" D  ; Weight.
 | 
|---|
 | 132 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE_$S($E(VALUE):" lb",1:"")
 | 
|---|
 | 133 |  ...S MVAL=+VALUE
 | 
|---|
 | 134 |  ...Q:'MVAL
 | 
|---|
 | 135 |  ...; changed 2.2 to 2.20462262 per CQ 10637
 | 
|---|
 | 136 |  ...S MVAL=$J((MVAL/2.20462262),3,1)
 | 
|---|
 | 137 |  ...S ORY(CNT)=ORY(CNT)_"^("_MVAL_" kg)"
 | 
|---|
 | 138 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8($P(ORY(CNT),U,1))
 | 
|---|
 | 139 |  ..I $P(ORY(CNT),"^",2)="PN" D   ; Pain
 | 
|---|
 | 140 |  ...S ORY(CNT)=ORY(CNT)_"^"_VALUE
 | 
|---|
 | 141 |  ...S $P(ORY(CNT),U,7)="" ;pain doesn't have qualifiers
 | 
|---|
 | 142 |  ..; looks for 'POX' rather than 'PO2' due to change for CQ 10592 above
 | 
|---|
 | 143 |  ..I $P(ORY(CNT),"^",2)="POX" D  ; Pulse Oximetry.
 | 
|---|
 | 144 |  ...S ORY(CNT)=ORY(CNT)_"^"_$P(ORY(CNT),"^",3)
 | 
|---|
 | 145 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8(+$P(ORY(CNT),U,1))
 | 
|---|
 | 146 |  ...S $P(ORY(CNT),U,8)=$$SUPO2^GMVUTL8(+$P(ORY(CNT),U,1))
 | 
|---|
 | 147 |  ..I $P(ORY(CNT),"^",2)="CVP" D  ; Central Venous Pressure.
 | 
|---|
 | 148 |  ...S ORY(CNT)=ORY(CNT)_"^"_$P(ORY(CNT),"^",3)
 | 
|---|
 | 149 |  ...S MVAL=$P(ORY(CNT),"^",3)
 | 
|---|
 | 150 |  ...I MVAL'=+MVAL,+MVAL=0 S ORY(CNT)=ORY(CNT)_"^",$P(ORY(CNT),U,7)="" Q
 | 
|---|
 | 151 |  ...S MVAL=$J((MVAL/1.36),3,1)
 | 
|---|
 | 152 |  ...S ORY(CNT)=ORY(CNT)_" cmH20^("_MVAL_" mmHg)"
 | 
|---|
 | 153 |  ...S $P(ORY(CNT),U,7)="" ;cvp doesn't have qualifiers
 | 
|---|
 | 154 |  ..I $P(ORY(CNT),"^",2)="CG" D  ; Circumference Girth.
 | 
|---|
 | 155 |  ...S ORY(CNT)=ORY(CNT)_"^"_$P(ORY(CNT),"^",3)
 | 
|---|
 | 156 |  ...S MVAL=$P(ORY(CNT),"^",3)
 | 
|---|
 | 157 |  ...I MVAL'=+MVAL,+MVAL=0 S ORY(CNT)=ORY(CNT)_"^",$P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8(+$P(ORY(CNT),U,1)) Q
 | 
|---|
 | 158 |  ...S MVAL=$J((MVAL*2.54),3,1)
 | 
|---|
 | 159 |  ...S ORY(CNT)=ORY(CNT)_" in^("_MVAL_" cm)"
 | 
|---|
 | 160 |  ...S $P(ORY(CNT),U,7)=$$QUALIFRS^GMVUTL8(+$P(ORY(CNT),U,1))
 | 
|---|
 | 161 |  Q
 | 
|---|