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