| 1 | GMVDCVAL ;HOIFO/DAD,FT-VITALS COMPONENT: VALIDATE DATA ;9/29/00  09:18
 | 
|---|
| 2 |  ;;5.0;GEN. MED. REC. - VITALS;;Oct 31, 2002
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine uses the following IAs:
 | 
|---|
| 5 |  ; #10035 - FILE 2 references        (supported)
 | 
|---|
| 6 |  ; #10040 - FILE 44 references       (supported)
 | 
|---|
| 7 |  ; #10060 - FILE 200 fields          (supported)
 | 
|---|
| 8 |  ; #10104 - ^XLFSTR calls            (supported)
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | EN1(RESULT,GMVDATA) ;
 | 
|---|
| 11 |  ; *** Validates vitals data ***
 | 
|---|
| 12 |  N GMV,GMVD0,GMVID0,GMVIFIND,GMVIHOLD,GMVILAST,GMVINUM,GMVIXFRM
 | 
|---|
| 13 |  N GMVMSG,GMVOK,GMVQARRY,GMVQD0,GMVQFIND,GMVQHOLD,GMVQNUM,GMVRD0
 | 
|---|
| 14 |  N GMVRET,GMVRFIND,GMVRHOLD,GMVRNUM,GMVSYSBP,GMVVABBR,GMVVD0
 | 
|---|
| 15 |  N GMVVFIND,GMVVHOLD,GMVVLAST,GMVVMEAS,GMVVNUM
 | 
|---|
| 16 |  D EXIT
 | 
|---|
| 17 |  F GMV=1:1 S GMVSYSBP=$P($T(BPSYSQ+GMV),";;",2) Q:GMVSYSBP=""  D
 | 
|---|
| 18 |  . S GMVD0=0
 | 
|---|
| 19 |  . F  S GMVD0=$O(^GMRD(120.52,"B",GMVSYSBP,GMVD0)) Q:GMVD0'>0  D
 | 
|---|
| 20 |  .. I GMVSYSBP=$P($G(^GMRD(120.52,GMVD0,0)),U) S GMVSYSBP(GMVD0)=""
 | 
|---|
| 21 |  .. Q
 | 
|---|
| 22 |  . Q
 | 
|---|
| 23 |  I $O(@GMVDATA@(""))]"" D
 | 
|---|
| 24 |  . ; *** Vital measurement data validation ***
 | 
|---|
| 25 |  . I ($O(@GMVDATA@("V",0))>0)!($O(@GMVDATA@("Q",0))>0) D VITMEA
 | 
|---|
| 26 |  . ; *** Entered in Error data validation ***
 | 
|---|
| 27 |  . I ($O(@GMVDATA@("I",0))>0)!($O(@GMVDATA@("R",0))>0) D ENTERR
 | 
|---|
| 28 |  . Q
 | 
|---|
| 29 |  E  D
 | 
|---|
| 30 |  . D MSG("ERROR: No data to validate/save")
 | 
|---|
| 31 |  . Q
 | 
|---|
| 32 |  I $G(RESULT(0))="OK" D MSG("OK: Data validated")
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | EXIT ; *** Clean-up ***
 | 
|---|
| 35 |  K ^TMP($J,"GMVXREF")
 | 
|---|
| 36 |  Q
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | VITMEA ; *** Validate vital measurement data ***
 | 
|---|
| 39 |  I $$FIND1^DIC(2,"","","`"_GMVDFN)'=GMVDFN D
 | 
|---|
| 40 |  . D MSG("ERROR: Missing or invalid Patient parameter")
 | 
|---|
| 41 |  . Q
 | 
|---|
| 42 |  K GMVRET D DT^DILF("RSTX",GMVDTDUN,.GMVRET,"-NOW")
 | 
|---|
| 43 |  I $G(GMVRET,-1)<0 D
 | 
|---|
| 44 |  . D MSG("ERROR: Missing or invalid Date/Time Vitals Taken parameter")
 | 
|---|
| 45 |  . Q
 | 
|---|
| 46 |  I $$FIND1^DIC(44,"","","`"_GMVHOSPL)'=GMVHOSPL D
 | 
|---|
| 47 |  . D MSG("ERROR: Missing or invalid Hospital Location parameter")
 | 
|---|
| 48 |  . Q
 | 
|---|
| 49 |  K GMVRET D DT^DILF("RSTX",GMVDTENT,.GMVRET,"-NOW")
 | 
|---|
| 50 |  I $G(GMVRET,-1)<0 D
 | 
|---|
| 51 |  . D MSG("ERROR: Missing or invalid Date/Time Vitals Entered parameter")
 | 
|---|
| 52 |  . Q
 | 
|---|
| 53 |  I $$FIND1^DIC(200,"","","`"_GMVENTBY)'=GMVENTBY D
 | 
|---|
| 54 |  . D MSG("ERROR: Missing or invalid Entered By parameter")
 | 
|---|
| 55 |  . Q
 | 
|---|
| 56 |  I "^C^M^"'[(U_$G(GMVMSYS)_U) D
 | 
|---|
| 57 |  . D MSG("ERROR: Missing or invalid Measurement System")
 | 
|---|
| 58 |  . Q
 | 
|---|
| 59 |  S (GMVVNUM,GMVVLAST,GMVVFIND)=0
 | 
|---|
| 60 |  F  S GMVVNUM=$O(@GMVDATA@("V",GMVVNUM)) Q:GMVVNUM'>0  D
 | 
|---|
| 61 |  . S GMVVLAST=GMVVNUM
 | 
|---|
| 62 |  . S GMVSYSBP=0,GMVQARRY=U
 | 
|---|
| 63 |  . S (GMV,GMVVHOLD)=$G(@GMVDATA@("V",GMVVNUM))
 | 
|---|
| 64 |  . S GMVVD0=$$VITIEN^GMVDCUTL($P(GMV,U))
 | 
|---|
| 65 |  . S (GMVVMEAS,GMVVMEAS(1))=$P(GMV,U,2)
 | 
|---|
| 66 |  . I GMVVD0'>0 D
 | 
|---|
| 67 |  .. D MSG("ERROR: Missing or invalid Vital Type (V^"_GMVVNUM_"="_GMVVHOLD_")")
 | 
|---|
| 68 |  .. Q
 | 
|---|
| 69 |  . E  D
 | 
|---|
| 70 |  .. S GMVVFIND=1
 | 
|---|
| 71 |  .. S GMVVABBR=$P($G(^GMRD(120.51,+GMVVD0,0)),U,2)
 | 
|---|
| 72 |  .. S $P(@GMVDATA@("V",GMVVNUM),U,1)=GMVVD0
 | 
|---|
| 73 |  .. D BP^GMVDCVAM,PO2^GMVDCVAM
 | 
|---|
| 74 |  .. I $$OMIT^GMVDCVAM(GMVVMEAS) D
 | 
|---|
| 75 |  ... S GMVVMEAS=$$UP^XLFSTR($E(GMVVMEAS))_$$LOW^XLFSTR($E(GMVVMEAS,2,$L(GMVVMEAS)))
 | 
|---|
| 76 |  ... I $O(@GMVDATA@("Q",GMVVNUM,0))>0 D
 | 
|---|
| 77 |  .... D MSG("ERROR: Qualifiers not allowed if vital measurement is omitted (V^"_GMVVNUM_"="_GMVVHOLD_")")
 | 
|---|
| 78 |  .... Q
 | 
|---|
| 79 |  ... Q
 | 
|---|
| 80 |  .. S GMVOK=1
 | 
|---|
| 81 |  .. I '$$VALID^GMVDCCHK($P(GMVVMEAS,";"),GMVMSYS,GMVVABBR) S GMVOK=0
 | 
|---|
| 82 |  .. I GMVOK,GMVVMEAS("PO2")]"" D
 | 
|---|
| 83 |  ... S GMVIXFRM=$$GET1^DID(120.5,1.4,"","INPUT TRANSFORM")
 | 
|---|
| 84 |  ... I GMVIXFRM]"" S X=GMVVMEAS("PO2") X GMVIXFRM I '$D(X) S GMVOK=0
 | 
|---|
| 85 |  ... Q
 | 
|---|
| 86 |  .. I 'GMVOK S GMVOK=$$OMIT^GMVDCVAM($P(GMVVMEAS,";"))
 | 
|---|
| 87 |  .. I 'GMVOK D
 | 
|---|
| 88 |  ... D MSG("ERROR: Invalid Vital Measurement (V^"_GMVVNUM_"="_GMVVHOLD_")")
 | 
|---|
| 89 |  ... Q
 | 
|---|
| 90 |  .. S GMVVMEAS=$$CNV^GMVDCCNV($P(GMVVMEAS,";"),GMVMSYS,"S",GMVVABBR)
 | 
|---|
| 91 |  .. S $P(@GMVDATA@("V",GMVVNUM),U,2)=GMVVMEAS_";"_GMVVMEAS("PO2")
 | 
|---|
| 92 |  .. S (GMVQNUM,GMVQFIND)=0
 | 
|---|
| 93 |  .. F  S GMVQNUM=$O(@GMVDATA@("Q",GMVVNUM,GMVQNUM)) Q:GMVQNUM'>0  D
 | 
|---|
| 94 |  ... S (GMV,GMVQHOLD)=$G(@GMVDATA@("Q",GMVVNUM,GMVQNUM))
 | 
|---|
| 95 |  ... S GMVQD0=$$QUAIEN^GMVDCUTL(GMV)
 | 
|---|
| 96 |  ... I GMVQD0>0,$O(^GMRD(120.52,"C",GMVVD0,GMVQD0,0))'>0 S GMVQD0=-2
 | 
|---|
| 97 |  ... I GMVQD0'>0 D
 | 
|---|
| 98 |  .... I GMVQD0=-2 D MSG("ERROR: Invalid Qualifier for Vital Type (Q^"_GMVVNUM_U_GMVQNUM_"="_GMVQHOLD_")")
 | 
|---|
| 99 |  .... I GMVQD0'=-2 D MSG("ERROR: Missing or invalid Vitals Qualifier (Q^"_GMVVNUM_U_GMVQNUM_"="_GMVQHOLD_")")
 | 
|---|
| 100 |  .... Q
 | 
|---|
| 101 |  ... E  D
 | 
|---|
| 102 |  .... S GMVQFIND=1
 | 
|---|
| 103 |  .... S $P(@GMVDATA@("Q",GMVVNUM,GMVQNUM),U,1)=GMVQD0
 | 
|---|
| 104 |  .... S GMVQARRY=GMVQARRY_GMVQD0_U
 | 
|---|
| 105 |  .... I GMVSYSBP,$D(GMVSYSBP(GMVQD0))#2 S GMVSYSBP=0
 | 
|---|
| 106 |  .... Q
 | 
|---|
| 107 |  ... Q
 | 
|---|
| 108 |  .. I GMVSYSBP D
 | 
|---|
| 109 |  ... D MSG("ERROR: Systolic only BPs must have a Doppler or Palpated qualifier (V^"_GMVVNUM_"="_GMVVHOLD_")")
 | 
|---|
| 110 |  ... Q
 | 
|---|
| 111 |  .. I 'GMVQFIND,$O(^GMRD(120.52,"C",GMVVD0,0))>0,'$$OMIT^GMVDCVAM(GMVVMEAS) D
 | 
|---|
| 112 |  ... D MSG("WARNING: No valid Qualifiers found (Q^"_GMVVNUM_"^##=Qualifier)")
 | 
|---|
| 113 |  ... Q
 | 
|---|
| 114 |  .. D DUPCHK^GMVDCVAM
 | 
|---|
| 115 |  .. Q
 | 
|---|
| 116 |  . Q
 | 
|---|
| 117 |  I 'GMVVFIND D
 | 
|---|
| 118 |  . D MSG("ERROR: No valid Vital Types / Measurements found (V^##=VitalType^Measurement)")
 | 
|---|
| 119 |  . Q
 | 
|---|
| 120 |  I $O(@GMVDATA@("Q",GMVVLAST)) D
 | 
|---|
| 121 |  . S GMV=$S(GMVVFIND'>0:"ERROR",1:"WARNING")
 | 
|---|
| 122 |  . D MSG(GMV_": There are more Qualifiers than there are VitalTypes / Measurements")
 | 
|---|
| 123 |  . Q
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 | ENTERR ; *** Validate Entered in Error data ***
 | 
|---|
| 127 |  I $$FIND1^DIC(200,"","","`"_GMVERRBY)'=GMVERRBY D
 | 
|---|
| 128 |  . D MSG("ERROR: Missing or invalid Entered in Error By parameter")
 | 
|---|
| 129 |  . Q
 | 
|---|
| 130 |  S (GMVINUM,GMVILAST,GMVIFIND)=0
 | 
|---|
| 131 |  F  S GMVINUM=$O(@GMVDATA@("I",GMVINUM)) Q:GMVINUM'>0  D
 | 
|---|
| 132 |  . S GMVILAST=GMVINUM
 | 
|---|
| 133 |  . S (GMVID0,GMVIHOLD)=$G(@GMVDATA@("I",GMVINUM))
 | 
|---|
| 134 |  . I $$FIND1^DIC(120.5,"","","`"_GMVID0)'=GMVID0 D
 | 
|---|
| 135 |  .. D MSG("ERROR: Entered in Error IENS not found (I^"_GMVINUM_"="_GMVIHOLD_")")
 | 
|---|
| 136 |  .. Q
 | 
|---|
| 137 |  . E  D
 | 
|---|
| 138 |  .. I $P($G(^GMR(120.5,GMVID0,2)),U) D
 | 
|---|
| 139 |  ... D MSG("ERROR: Vitals record already marked Entered in Error (I^"_GMVINUM_"="_GMVIHOLD_")")
 | 
|---|
| 140 |  ... Q
 | 
|---|
| 141 |  .. S GMVIFIND=1
 | 
|---|
| 142 |  .. S (GMVRNUM,GMVRFIND)=0
 | 
|---|
| 143 |  .. F  S GMVRNUM=$O(@GMVDATA@("R",GMVINUM,GMVRNUM)) Q:GMVRNUM'>0  D
 | 
|---|
| 144 |  ... S (GMV,GMVRHOLD)=$G(@GMVDATA@("R",GMVINUM,GMVRNUM))
 | 
|---|
| 145 |  ... S GMVRD0=$$REAIEN^GMVDCUTL(GMV)
 | 
|---|
| 146 |  ... I GMVRD0'>0 D
 | 
|---|
| 147 |  .... D MSG("ERROR: Missing or invalid Entered in Error Reason (R^"_GMVINUM_U_GMVRNUM_"="_GMVRHOLD_")")
 | 
|---|
| 148 |  .... Q
 | 
|---|
| 149 |  ... E  D
 | 
|---|
| 150 |  .... S GMVRFIND=1
 | 
|---|
| 151 |  .... S @GMVDATA@("R",GMVINUM,GMVRNUM)=GMVRD0
 | 
|---|
| 152 |  .... Q
 | 
|---|
| 153 |  ... Q
 | 
|---|
| 154 |  .. I 'GMVRFIND D
 | 
|---|
| 155 |  ... D MSG("ERROR: No valid Entered in Error Reasons found (R^"_GMVINUM_"^##=EnteredInErrorReason)")
 | 
|---|
| 156 |  ... Q
 | 
|---|
| 157 |  .. Q
 | 
|---|
| 158 |  . Q
 | 
|---|
| 159 |  I 'GMVIFIND D
 | 
|---|
| 160 |  . D MSG("ERROR: No valid Entered in Error IENS found (I^##=EnteredInError)")
 | 
|---|
| 161 |  . Q
 | 
|---|
| 162 |  I $O(@GMVDATA@("R",GMVILAST)) D
 | 
|---|
| 163 |  . S GMV=$S(GMVIFIND'>0:"ERROR",1:"WARNING")
 | 
|---|
| 164 |  . D MSG(GMV_": There are more Entered in Error Reasons than there are Entered in Error IENS")
 | 
|---|
| 165 |  . Q
 | 
|---|
| 166 |  Q
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 | MSG(X) ; *** Add a line to the message array ***
 | 
|---|
| 169 |  S (GMVMSG,RESULT(-1))=1+$G(RESULT(-1),0)
 | 
|---|
| 170 |  S RESULT(GMVMSG)=X
 | 
|---|
| 171 |  I $P(X,":")="ERROR" S RESULT(0)="ERROR"
 | 
|---|
| 172 |  Q
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 | BPSYSQ ;;Qualifiers that must be present if only systolic BP is present
 | 
|---|
| 175 |  ;;DOPPLER
 | 
|---|
| 176 |  ;;PALPATED
 | 
|---|
| 177 |  ;;
 | 
|---|