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