| [613] | 1 | RORXU003 ;HCIOFO/BH,SG - REPORT BUILDER UTILITIES ; 7/19/06 12:34pm | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; This routine uses the following IAs: | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ; #1894         ENCEVENT^PXKENC (controlled) | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | Q | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ;***** SEARCHES FOR UTLIZATION | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; STDT          Start date for search (FileMan) | 
|---|
|  | 13 | ; ENDT          End date for search   (FileMan) | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; RORDFN        Patient IEN in the PATIENT file (#2) | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | ; CHK           Reference to a local array that identifies the | 
|---|
|  | 18 | ;               packages files that need to be checked i.e. CHK("O"): | 
|---|
|  | 19 | ;                 A   Allergy | 
|---|
|  | 20 | ;                 C   Cytopathology | 
|---|
|  | 21 | ;                 I   Inpatients | 
|---|
|  | 22 | ;                 IP  Inpatient Pharmacy | 
|---|
|  | 23 | ;                 IV  IV Medications | 
|---|
|  | 24 | ;                 L   Laboratory | 
|---|
|  | 25 | ;                 M   Microbiology | 
|---|
|  | 26 | ;                 O   Outpatient | 
|---|
|  | 27 | ;                 OP  Outpatient Pharmacy | 
|---|
|  | 28 | ;                 R   Radiology | 
|---|
|  | 29 | ;                 SP  Surgical Pathology | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | ;               If set to "ALL", Outpatients, Inpatients, Radiology, | 
|---|
|  | 32 | ;               Allergy, Pharmacy, Microbiology, Surgical Pathology, | 
|---|
|  | 33 | ;               Cytopathology, and Lab data will be checked. | 
|---|
|  | 34 | ; | 
|---|
|  | 35 | ; Return Values: | 
|---|
|  | 36 | ;       0  No utilization has been found | 
|---|
|  | 37 | ;       1  The patient has had utilization. The subsequent "^"-pieces | 
|---|
|  | 38 | ;          will indicate the utilization areas (the same codes as | 
|---|
|  | 39 | ;          those for the CHK parameter) | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | ;          For example, if a patient had utilization for Inpatients, | 
|---|
|  | 42 | ;          Outpatient, Pharmacy, and Lab the string would look as | 
|---|
|  | 43 | ;          follows: 1^O^I^OP^L | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | UTIL(STDT,ENDT,RORDFN,CHK) ; | 
|---|
|  | 46 | N IEN,LRDFN,RES,RORMSG,RORVAL | 
|---|
|  | 47 | S RORVAL="" | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ;--- Outpatient data | 
|---|
|  | 50 | I $D(CHK("ALL"))!$D(CHK("O")) D | 
|---|
|  | 51 | . S RES=$$OUTPAT(STDT,ENDT,RORDFN) | 
|---|
|  | 52 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | ;--- Inpatient data | 
|---|
|  | 55 | I $D(CHK("ALL"))!$D(CHK("I")) D | 
|---|
|  | 56 | . S RES=$$INPAT(STDT,ENDT,RORDFN) | 
|---|
|  | 57 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | ;--- Radiology data | 
|---|
|  | 60 | I $D(CHK("ALL"))!$D(CHK("R")) D | 
|---|
|  | 61 | . S RES=$$RAD(STDT,ENDT,RORDFN) | 
|---|
|  | 62 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 63 | ; | 
|---|
|  | 64 | ;--- Allergy data | 
|---|
|  | 65 | I $D(CHK("ALL"))!$D(CHK("A")) D | 
|---|
|  | 66 | . S RES=$$ALLERGY(STDT,ENDT,RORDFN) | 
|---|
|  | 67 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 68 | ; | 
|---|
|  | 69 | ;--- Pharmacy data | 
|---|
|  | 70 | I $D(CHK("ALL"))!$D(CHK("IP"))!$D(CHK("OP"))!$D(CHK("IV")) D | 
|---|
|  | 71 | . S RES=$$PHARM(STDT,ENDT,RORDFN,.CHK) | 
|---|
|  | 72 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | S LRDFN=+$$LABREF^RORUTL18(RORDFN) | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | I LRDFN>0  D | 
|---|
|  | 77 | . ;--- Microbiology | 
|---|
|  | 78 | . I $D(CHK("ALL"))!$D(CHK("M")) D | 
|---|
|  | 79 | . . S RES=$$MICRO(STDT,ENDT,LRDFN) | 
|---|
|  | 80 | . . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 81 | . ;--- Surgical Pathology | 
|---|
|  | 82 | . I $D(CHK("ALL"))!$D(CHK("SP")) D | 
|---|
|  | 83 | . . S RES=$$SURGP(STDT,ENDT,LRDFN) | 
|---|
|  | 84 | . . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 85 | . ;--- Cytopathology | 
|---|
|  | 86 | . I $D(CHK("ALL"))!$D(CHK("C")) D | 
|---|
|  | 87 | . . S RES=$$CYTO(STDT,ENDT,LRDFN) | 
|---|
|  | 88 | . . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 89 | ; | 
|---|
|  | 90 | ;--- Lab data | 
|---|
|  | 91 | I $D(CHK("ALL"))!$D(CHK("L")) D | 
|---|
|  | 92 | . S RES=$$LAB(STDT,ENDT,RORDFN) | 
|---|
|  | 93 | . S:RES RORVAL=RORVAL_U_$P(RES,U,2,999) | 
|---|
|  | 94 | ; | 
|---|
|  | 95 | S $P(RORVAL,U)=(RORVAL'="") | 
|---|
|  | 96 | Q RORVAL | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | ;***** CHECKS ALLERGY DATA | 
|---|
|  | 99 | ALLERGY(STDT,ENDT,RORDFN) ; | 
|---|
|  | 100 | N DTE,IEN,RC | 
|---|
|  | 101 | S RC=0 | 
|---|
|  | 102 | S DTE=$O(^GMR(120.8,"AODT",STDT),-1) | 
|---|
|  | 103 | S ENDT=ENDT_".999999" | 
|---|
|  | 104 | F  S DTE=$O(^GMR(120.8,"AODT",DTE))  Q:'DTE!(DTE'<ENDT)  D  Q:RC | 
|---|
|  | 105 | . S IEN=0 | 
|---|
|  | 106 | . F  S IEN=$O(^GMR(120.8,"AODT",DTE,IEN))  Q:'IEN  D  Q:RC | 
|---|
|  | 107 | . . S:$D(^GMR(120.8,"B",RORDFN,IEN)) RC="1^A" | 
|---|
|  | 108 | Q RC | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | ;***** CHECKS CYTOPATHOLOGY DATA | 
|---|
|  | 111 | CYTO(STDT,ENDT,LRDFN) ; | 
|---|
|  | 112 | N IDT | 
|---|
|  | 113 | S IDT=$O(^LR(LRDFN,"CY",9999999-STDT)) | 
|---|
|  | 114 | S IDT=$O(^LR(LRDFN,"CY",IDT),-1) | 
|---|
|  | 115 | Q $S(IDT&(IDT>(9999999-ENDT)):"1^C",1:0) | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | ;***** CHECKS INPATIENT DATA | 
|---|
|  | 118 | INPAT(STDT,ENDT,DFN) ; | 
|---|
|  | 119 | N ADMDT,DATE,DISDT,IEN,QUIT,RC,VAIP | 
|---|
|  | 120 | S STDT=STDT\1 | 
|---|
|  | 121 | ;--- Check for an admission date inside the time frame | 
|---|
|  | 122 | S QUIT=0,DATE=(ENDT\1)_".999999" | 
|---|
|  | 123 | F  S DATE=$O(^DGPT("AAD",DFN,DATE),-1)  Q:'DATE!(DATE<STDT)  D  Q:QUIT | 
|---|
|  | 124 | . S IEN="" | 
|---|
|  | 125 | . F  S IEN=$O(^DGPT("AAD",DFN,DATE,IEN),-1)  Q:'IEN  D  Q:QUIT | 
|---|
|  | 126 | . . S:'$$PTF^RORXU001(IEN,"FP") QUIT=1 | 
|---|
|  | 127 | Q:QUIT=1 "1^I" | 
|---|
|  | 128 | ;--- Check for an earlier admission that overlaps the date range | 
|---|
|  | 129 | S QUIT=0,VAIP("D")=STDT | 
|---|
|  | 130 | F  D  Q:QUIT | 
|---|
|  | 131 | . D IN5^VADPT | 
|---|
|  | 132 | . S VAIP("D")=+$G(VAIP(13,1)) | 
|---|
|  | 133 | . I VAIP("D")'>0  S QUIT=2  Q | 
|---|
|  | 134 | . S VAIP("D")=$$FMADD^XLFDT(VAIP("D"),,,,-1) | 
|---|
|  | 135 | . S IEN=+$G(VAIP(12))  Q:IEN'>0 | 
|---|
|  | 136 | . S RC=$$PTF^RORXU001(IEN,"FP",,.DISDT) | 
|---|
|  | 137 | . S QUIT=$S(RC:0,$G(DISDT)'>0:1,DISDT>STDT:1,1:2) | 
|---|
|  | 138 | Q $S(QUIT=1:"1^I",1:0) | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | ;***** CHECKS LAB DATA | 
|---|
|  | 141 | LAB(STDT,ENDT,RORDFN) ; | 
|---|
|  | 142 | N PTID,RC,RORMSG,RORTMP | 
|---|
|  | 143 | S PTID=$$PTID^RORUTL02(RORDFN)  Q:PTID<0 0 | 
|---|
|  | 144 | S RORTMP=$$ALLOC^RORTMP() | 
|---|
|  | 145 | ;--- Get the Lab data | 
|---|
|  | 146 | S ENDT=(ENDT\1+1)_"^CD",STDT=STDT_"^CD" | 
|---|
|  | 147 | S RC=$$GCPR^LA7QRY(PTID,STDT,ENDT,"CH","*",.RORMSG,RORTMP) | 
|---|
|  | 148 | S RC=$S(($D(RORMSG)>1)&(RC=""):0,$D(@RORTMP)>1:"1^L",1:0) | 
|---|
|  | 149 | ;--- Cleanup | 
|---|
|  | 150 | D FREE^RORTMP(RORTMP) | 
|---|
|  | 151 | Q RC | 
|---|
|  | 152 | ; | 
|---|
|  | 153 | ;***** CHECKS MICROBIOLOGY DATA | 
|---|
|  | 154 | MICRO(STDT,ENDT,LRDFN) ; | 
|---|
|  | 155 | N RC,RORTMP | 
|---|
|  | 156 | S RC=0,RORTMP=$$ALLOC^RORTMP() | 
|---|
|  | 157 | D:$$GETDATA^LA7UTL1A(LRDFN,STDT,ENDT,"CD",RORTMP)'<0 | 
|---|
|  | 158 | . S:$D(@RORTMP@(LRDFN)) RC="1^M" | 
|---|
|  | 159 | D FREE^RORTMP(RORTMP) | 
|---|
|  | 160 | Q RC | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ;***** CHECKS OUTPATIENT DATA | 
|---|
|  | 163 | OUTPAT(STDT,ENDT,RORDFN) ; | 
|---|
|  | 164 | S STDT=$P(STDT,".",1),STDT=STDT-1,STDT=STDT+.9999 | 
|---|
|  | 165 | S ENDT=$P(ENDT,".",1),ENDT=ENDT+1 | 
|---|
|  | 166 | N QUERY,RORDST,RORECNT | 
|---|
|  | 167 | S RORECNT=0 | 
|---|
|  | 168 | S RORDST=$NA(^TMP("RORXU003",$J,"OUT")) | 
|---|
|  | 169 | D OPEN^SDQ(.QUERY) | 
|---|
|  | 170 | D INDEX^SDQ(.QUERY,"PATIENT/DATE","SET") | 
|---|
|  | 171 | D PAT^SDQ(.QUERY,RORDFN,"SET") | 
|---|
|  | 172 | D DATE^SDQ(.QUERY,STDT,ENDT,"SET") | 
|---|
|  | 173 | D SCANCB^SDQ(.QUERY,"D SCAN^RORXU003()","SET") | 
|---|
|  | 174 | D ACTIVE^SDQ(.QUERY,"TRUE","SET") | 
|---|
|  | 175 | D SCAN^SDQ(.QUERY,"FORWARD") | 
|---|
|  | 176 | D CLOSE^SDQ(.QUERY) | 
|---|
|  | 177 | Q $S(RORECNT:"1^O",1:0) | 
|---|
|  | 178 | ; | 
|---|
|  | 179 | ;***** CHECKS PHARMACY DATA | 
|---|
|  | 180 | PHARM(STDT,ENDT,RORDFN,CHK) ; | 
|---|
|  | 181 | N BUF,II,IP,IV,OP,ORD,RC,RORLST,SKIP,TMP,TYPE | 
|---|
|  | 182 | S ENDT=$$FMADD^XLFDT(ENDT\1,1) | 
|---|
|  | 183 | I '$D(CHK("ALL"))  D | 
|---|
|  | 184 | . S IP='$D(CHK("IP")) | 
|---|
|  | 185 | . S IV='$D(CHK("IV")) | 
|---|
|  | 186 | . S OP='$D(CHK("OP")) | 
|---|
|  | 187 | E  S (OP,IP,IV)=0 | 
|---|
|  | 188 | ;=== Get the list of orders | 
|---|
|  | 189 | K ^TMP("PS",$J) | 
|---|
|  | 190 | D OCL^PSOORRL(RORDFN,STDT,ENDT) | 
|---|
|  | 191 | Q:$D(^TMP("PS",$J))<10 0 | 
|---|
|  | 192 | S RORLST=$$ALLOC^RORTMP() | 
|---|
|  | 193 | ;=== Preselect the orders | 
|---|
|  | 194 | S II=0 | 
|---|
|  | 195 | F  S II=$O(^TMP("PS",$J,II))  Q:'II  D | 
|---|
|  | 196 | . S BUF=$G(^TMP("PS",$J,II,0)),ORD=$P(BUF,U)  Q:ORD'>0 | 
|---|
|  | 197 | . S TMP=$L(ORD),TYPE=$E(ORD,TMP-2,TMP) | 
|---|
|  | 198 | . S TYPE=$S(TYPE="R;O":"R",TYPE="U;I":"U",TYPE="V;I":"V",1:"") | 
|---|
|  | 199 | . ;--- Check if this kind of orders should be processed | 
|---|
|  | 200 | . Q:$S(TYPE="R":OP,TYPE="U":IP,TYPE="V":IV,1:1) | 
|---|
|  | 201 | . ;--- Check the dates | 
|---|
|  | 202 | . I "UV"[TYPE  S TMP=$P(BUF,U,15)  Q:(TMP<STDT)!(TMP'<ENDT) | 
|---|
|  | 203 | . I TYPE="R"   S TMP=$P(BUF,U,10)  Q:TMP<STDT | 
|---|
|  | 204 | . ;--- Add the order to the list | 
|---|
|  | 205 | . S @RORLST@(II)=TYPE,@RORLST@(II,0)=BUF | 
|---|
|  | 206 | ;=== Process the preselected orders | 
|---|
|  | 207 | S II=0,RC="" | 
|---|
|  | 208 | F  S II=$O(@RORLST@(II))  Q:'II  D  Q:OP&IP&IV | 
|---|
|  | 209 | . S TYPE=@RORLST@(II),ORD=$P(@RORLST@(II,0),U) | 
|---|
|  | 210 | . ;--- Outpatient | 
|---|
|  | 211 | . I TYPE="R"  Q:OP  D  S:'SKIP OP=1,RC=RC_U_"OP"  Q | 
|---|
|  | 212 | . . ;--- Double-check the Rx date(s) | 
|---|
|  | 213 | . . K ^TMP("PS",$J) | 
|---|
|  | 214 | . . D OEL^PSOORRL(RORDFN,ORD) | 
|---|
|  | 215 | . . I $D(^TMP("PS",$J))<10  S SKIP=1  Q | 
|---|
|  | 216 | . . S SKIP=$$DTCHECK^RORUTL15(STDT,ENDT) | 
|---|
|  | 217 | . ;--- Inpatient | 
|---|
|  | 218 | . I TYPE="U"  Q:IP  S IP=1,RC=RC_U_"IP"  Q | 
|---|
|  | 219 | . ;--- IV | 
|---|
|  | 220 | . I TYPE="V"  Q:IV  S IV=1,RC=RC_U_"IV"  Q | 
|---|
|  | 221 | ;=== | 
|---|
|  | 222 | D FREE^RORTMP(RORLST) | 
|---|
|  | 223 | K ^TMP("PS",$J) | 
|---|
|  | 224 | S $P(RC,U)=(RC'="") | 
|---|
|  | 225 | Q RC | 
|---|
|  | 226 | ; | 
|---|
|  | 227 | ;***** CHECKS RADIOLOGY DATA | 
|---|
|  | 228 | RAD(STDT,ENDT,RORDFN) ; | 
|---|
|  | 229 | N RC | 
|---|
|  | 230 | K ^TMP($J,"RAE1") | 
|---|
|  | 231 | D EN1^RAO7PC1(RORDFN,STDT,ENDT,999999999) | 
|---|
|  | 232 | S RC=$S($D(^TMP($J,"RAE1",RORDFN))>1:"1^R",1:0) | 
|---|
|  | 233 | K ^TMP($J,"RAE1") | 
|---|
|  | 234 | Q RC | 
|---|
|  | 235 | ; | 
|---|
|  | 236 | ;***** | 
|---|
|  | 237 | SCAN() ; | 
|---|
|  | 238 | S RORECNT=1 | 
|---|
|  | 239 | Q | 
|---|
|  | 240 | ; | 
|---|
|  | 241 | ;***** CHECKS SURGICAL PATHOLOGY DATA | 
|---|
|  | 242 | SURGP(STDT,ENDT,LRDFN) ; | 
|---|
|  | 243 | N IDT | 
|---|
|  | 244 | S IDT=$O(^LR(LRDFN,"SP",9999999-STDT)) | 
|---|
|  | 245 | S IDT=$O(^LR(LRDFN,"SP",IDT),-1) | 
|---|
|  | 246 | Q $S(IDT&(IDT>(9999999-ENDT)):"1^SP",1:0) | 
|---|