| 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 | 
|---|