1 | PXRMXSU ; SLC/PJH - Reminder Reports DIC Prompts;01/06/2006
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
|
---|
3 | ;
|
---|
4 | ;Called by PXRMXD
|
---|
5 | ;
|
---|
6 | ;Exits from SEL subroutine
|
---|
7 | QUIT() I $D(DTOUT)!$D(DUOUT) Q 1
|
---|
8 | ;Only one entry allowed
|
---|
9 | I ONE="D",(CNT>0) Q 1
|
---|
10 | ;Mandatory entry
|
---|
11 | I Y=-1,(CHECK=3)!(CNT>0) Q 1
|
---|
12 | ;Categories may already contain reminders
|
---|
13 | I Y=-1,CHECK=2,$D(REMCAT) Q 1
|
---|
14 | ;Otherwise
|
---|
15 | Q 0
|
---|
16 | ;
|
---|
17 | ;Repeated Prompt using DIC
|
---|
18 | ;-------------------------
|
---|
19 | SEL(FILE,MODE,CNT,ARRAY,ONE,CHECK) ;
|
---|
20 | ;
|
---|
21 | ; ONE = only allows one entry
|
---|
22 | ; CHECK = number or null - validation of facility
|
---|
23 | ;
|
---|
24 | N X,Y,ARRAYN
|
---|
25 | K DIROUT,DIRUT,DTOUT,DUOUT
|
---|
26 | W !
|
---|
27 | F D Q:$$QUIT
|
---|
28 | .S DIC=FILE,DIC(0)=MODE
|
---|
29 | .; Set up ^DIC("S") for duplicate check
|
---|
30 | .S DIC("S")="I '$D(ARRAYN(+Y))"
|
---|
31 | .I CHECK=1 D FACT^PXRMXAP
|
---|
32 | .I CHECK=2 S DIC("S")=DIC("S")_",'(+$P(^(0),U,6))"
|
---|
33 | .I CHECK=3 S DIC("S")=DIC("S")_",$$OK^PXRMXS1(+Y)"
|
---|
34 | .I CHECK=4 S DIC("S")=DIC("S")_",$P($G(^PXRMXP(810.5,+Y,30,0)),U,3)>0"
|
---|
35 | .I CHECK=5 S DIC("S")=DIC("S")_",$P($G(^OR(100.21,+Y,10,0)),U,3)>0"
|
---|
36 | .I CNT>0 S DIC("A")=LIT
|
---|
37 | .D ^DIC
|
---|
38 | .I X=(U_U) S DTOUT=1
|
---|
39 | .I $D(DTOUT)!$D(DUOUT) Q
|
---|
40 | .I +Y'=-1 D Q
|
---|
41 | ..I $D(ARRAYN(+Y)) W !,"Error - Duplicate entry" Q
|
---|
42 | ..S CNT=CNT+1,ARRAY(CNT)=Y_U_Y(0,0)_U_$P(Y(0),U,3)
|
---|
43 | ..S ARRAYN(+Y)=""
|
---|
44 | .I CNT=0,'$$QUIT W !,LIT1
|
---|
45 | .K DIC
|
---|
46 | Q
|
---|
47 | ;
|
---|
48 | ;Establish the LOCATION criteria
|
---|
49 | LOC(ADEF,BDEF) ;
|
---|
50 | N X,Y,DIR
|
---|
51 | LOC0 K DIROUT,DIRUT,DTOUT,DUOUT
|
---|
52 | S DIR(0)="S"_U_"HA:All Outpatient Locations;"
|
---|
53 | S DIR(0)=DIR(0)_"HAI:All Inpatient Locations;"
|
---|
54 | S DIR(0)=DIR(0)_"HS:Selected Hospital Locations;"
|
---|
55 | S DIR(0)=DIR(0)_"CA:All Clinic Stops(with encounters);"
|
---|
56 | S DIR(0)=DIR(0)_"CS:Selected Clinic Stops;"
|
---|
57 | S DIR(0)=DIR(0)_"GS:Selected Clinic Groups;"
|
---|
58 | S DIR("A")=ADEF
|
---|
59 | S DIR("B")=BDEF
|
---|
60 | S DIR("?")="Select from the codes displayed. For detailed help type ??"
|
---|
61 | S DIR("??")=U_"D HELP^PXRMXHLP(8)"
|
---|
62 | D ^DIR K DIR
|
---|
63 | I $D(DIROUT) S DTOUT=1
|
---|
64 | I $D(DTOUT)!($D(DUOUT)) Q
|
---|
65 | S PXRMLCSC=Y_U_Y(0)
|
---|
66 | ;If locations are to be selected individually get the list.
|
---|
67 | I Y="HS" D HLOC Q:$D(DTOUT) G:$D(DUOUT) LOC0
|
---|
68 | I Y="CS" D CSTOP Q:$D(DTOUT) G:$D(DUOUT) LOC0
|
---|
69 | I Y="GS" D CGRP(.PXRMCGRP) Q:$D(DTOUT) G:$D(DUOUT) LOC0
|
---|
70 | Q
|
---|
71 | ;
|
---|
72 | ;Build a list of hospital locations
|
---|
73 | HLOC N IEN,SC,X,Y,CHECK
|
---|
74 | K DTOUT,DUOUT
|
---|
75 | S NHL=0
|
---|
76 | S DIC("A")="LOCATION: "
|
---|
77 | W !
|
---|
78 | F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NHL>0)
|
---|
79 | .S DIC="^SC("
|
---|
80 | .S DIC(0)="AEQMZ"
|
---|
81 | .I NHL>0 S DIC("A")="Select another LOCATION: "
|
---|
82 | .D ^DIC
|
---|
83 | .I X=(U_U) S DTOUT=1
|
---|
84 | .I $D(DTOUT)!($D(DUOUT)) Q
|
---|
85 | .I +Y'=-1 D
|
---|
86 | ..S IEN=$P(Y,U,1)
|
---|
87 | ..;Check Facility code
|
---|
88 | ..N FACILITY S FACILITY=$$FACL^PXRMXAP(IEN)
|
---|
89 | ..I FACILITY="" W !,"Location has no facility code" Q
|
---|
90 | ..I '$D(PXRMFACN(FACILITY)) D Q
|
---|
91 | ...W !,"Location has a different facility code" Q
|
---|
92 | ..;Check for duplicates
|
---|
93 | ..I (NHL>0),$$DUP(IEN,.PXRMLCHL,2) W !,"Error - Duplicate entry" Q
|
---|
94 | ..S NHL=NHL+1
|
---|
95 | ..;Get the stop code.
|
---|
96 | ..S X=$P(^SC(IEN,0),U,7)
|
---|
97 | ..S SC="Unknown" I +X>0 S SC=$P(^DIC(40.7,X,0),U,2) ; DBIA #557
|
---|
98 | ..I $L(SC)=0 S SC="Unknown"
|
---|
99 | ..;Save the external form of the name, then IEN, and the stop code.
|
---|
100 | ..S PXRMLCHL(NHL)=$P(Y(0,0),U,1)_U_IEN_U_SC
|
---|
101 | ..;Check for mixed inpatient and outpatient locations
|
---|
102 | ..I (NHL>1),$D(CHECK)=0 D
|
---|
103 | ...Q:'$$LOCN^PXRMXAP(.PXRMLCHL)
|
---|
104 | ...W !,"Inpatient and Outpatient locations have been selected"
|
---|
105 | ...S CHECK="DONE"
|
---|
106 | .K DIC
|
---|
107 | .I (NHL=0)&(+Y=-1) W !,"You must select a hospital location!"
|
---|
108 | ;
|
---|
109 | I $D(DUOUT)!($D(DTOUT)) Q
|
---|
110 | ;Sort the hospital location list into alphabetical order.
|
---|
111 | S NHL=$$SORT(NHL,"PXRMLCHL",2)
|
---|
112 | ;Build array by IEN
|
---|
113 | S IC=""
|
---|
114 | F S IC=$O(PXRMLCHL(IC)) Q:IC'>0 D
|
---|
115 | .S PXRMLOCN($P(PXRMLCHL(IC),U,2))=IC
|
---|
116 | Q
|
---|
117 | ;---
|
---|
118 | FACILITY(SEL) ;Select facility (COPIED EX- PXRR)
|
---|
119 | N IC,STATION,X,Y,DIC
|
---|
120 | K DIRUT,DTOUT,DUOUT
|
---|
121 | S NFAC=0
|
---|
122 | S DIC("B")=+$P($$SITE^VASITE,U,3)
|
---|
123 | S DIC("A")="Select FACILITY: "
|
---|
124 | W !
|
---|
125 | F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NFAC>0)
|
---|
126 | .S DIC=4
|
---|
127 | .S DIC(0)="AEMQZ"
|
---|
128 | .I NFAC>0 S DIC("A")="Select another FACILITY: "
|
---|
129 | .D ^DIC
|
---|
130 | .I X=(U_U) S DTOUT=1
|
---|
131 | .I '$D(DTOUT),('$D(DUOUT)),+Y'=-1 D
|
---|
132 | ..;Check for duplicates
|
---|
133 | ..I (NFAC>0),$$DUP($P(Y,U,1),.PXRMFAC,1) W !,"Error - Duplicate entry" Q
|
---|
134 | ..S NFAC=NFAC+1,PXRMFAC(NFAC)=Y_U_Y(0,0)
|
---|
135 | .K DIC
|
---|
136 | ;
|
---|
137 | I $D(DTOUT)!$D(DUOUT) Q
|
---|
138 | ;;Save the facility names and station.
|
---|
139 | F IC=1:1:NFAC D
|
---|
140 | .S X=$P(PXRMFAC(IC),U,1)
|
---|
141 | .S STATION=$P($G(^DIC(4,X,99)),U,1)
|
---|
142 | .S PXRMFACN(X)=$P(PXRMFAC(IC),U,2)_U_STATION
|
---|
143 | ;Sort the facility list into alphabetical order.
|
---|
144 | S NFAC=$$SORT(NFAC,"PXRMFAC",2)
|
---|
145 | Q
|
---|
146 | ; ---
|
---|
147 | CGRP(TEMP) ; Clinic Group Selection
|
---|
148 | N LIT,LIT1,DIC
|
---|
149 | S DIC("A")="Select CLINIC GROUP: ",NOTM=0
|
---|
150 | S LIT="Select another CLINIC GROUP: "
|
---|
151 | S LIT1="You must select a clinic group!"
|
---|
152 | D SEL(409.67,"AEQMZ",.NOTM,.TEMP,"","")
|
---|
153 | ;Build array by IEN
|
---|
154 | S NCGRP=0 N IC S IC=""
|
---|
155 | F S IC=$O(PXRMCGRP(IC)) Q:IC="" D
|
---|
156 | .S PXRMCGRN($P(PXRMCGRP(IC),U,1))=IC,NCGRP=IC
|
---|
157 | Q
|
---|
158 | ; ---
|
---|
159 | LIST(TEMP) ; Patient List
|
---|
160 | N LIT,LIT1,DIC,NLIST
|
---|
161 | S DIC("A")="Select REMINDER PATIENT LIST: ",NLIST=0
|
---|
162 | S DIC("?")="Select a patient list to run the reminder report against."
|
---|
163 | S LIT="Select another PATIENT LIST: ",LIT1="You must select a list!"
|
---|
164 | D SEL(810.5,"AEQMZ",.NLIST,.TEMP,"",4)
|
---|
165 | Q
|
---|
166 | ;
|
---|
167 | ; ---
|
---|
168 | PCMM(TEMP) ; PCMM teams
|
---|
169 | N LIT,LIT1,DIC
|
---|
170 | S DIC("A")="Select PCMM TEAM: ",NOTM=0
|
---|
171 | S LIT="Select another PCMM TEAM: ",LIT1="You must select a team!"
|
---|
172 | D SEL(404.51,"AEQMZ",.NOTM,.TEMP,"",1)
|
---|
173 | Q
|
---|
174 | ; ---
|
---|
175 | OERR(TEAM) ; OE/RR teams
|
---|
176 | N LIT,LIT1,DIC
|
---|
177 | S DIC("A")="Select TEAM: ",NOTM=0
|
---|
178 | S LIT="Select another TEAM: ",LIT1="You must select a team!"
|
---|
179 | D SEL(100.21,"AEQMZ",.NOTM,.TEAM,"",5)
|
---|
180 | Q
|
---|
181 | ; ---
|
---|
182 | RCAT(REMCAT,REM) ;Reminder Category/Reminder selection
|
---|
183 | N CAT,DIC,LIT,LIT1,SEQ
|
---|
184 | S NCAT=0 K REMCAT,REM
|
---|
185 | ;Reminder Category
|
---|
186 | RCATS I PXRMREP="S" D Q:$D(DUOUT)!$D(DTOUT)
|
---|
187 | .K REMCAT S NCAT=0
|
---|
188 | .S DIC("A")="Select a REMINDER CATEGORY: "
|
---|
189 | .S LIT="Select another REMINDER CATEGORY: ",LIT1=""
|
---|
190 | .D SEL(811.7,"AEQMZ",.NCAT,.REMCAT,PXRMREP,3)
|
---|
191 | ;Individual Reminders
|
---|
192 | D REM(.REM) Q:$D(DTOUT)
|
---|
193 | I $D(DUOUT),PXRMREP="S" G RCATS
|
---|
194 | Q
|
---|
195 | ; ---
|
---|
196 | REM(REM) ;Reminders selection
|
---|
197 | N LIT,LIT1,DIC
|
---|
198 | K REM S NREM=0
|
---|
199 | S DIC("A")="Select individual REMINDER: "
|
---|
200 | S LIT="Select another REMINDER: ",LIT1="You must select a reminder!"
|
---|
201 | D SEL(811.9,"AEQMZ",.NREM,.REM,PXRMREP,2)
|
---|
202 | Q
|
---|
203 | ; ---
|
---|
204 | PAT(VAR) ; Patient select
|
---|
205 | N LIT,LIT1,DIC
|
---|
206 | S DIC("A")="Select PATIENT: ",NPAT=0
|
---|
207 | S LIT="Select another PATIENT: ",LIT1="You must select a patient!"
|
---|
208 | D SEL(2,"AEQMZ",.NPAT,.VAR,"","")
|
---|
209 | ;Sort the patient list into ascending order.
|
---|
210 | S NPAT=$$SORT(NPAT,"VAR")
|
---|
211 | Q
|
---|
212 | ; ---
|
---|
213 | PROV(PRV) ;Build a list of selected providers.
|
---|
214 | N LIT,LIT1,DIC
|
---|
215 | S DIC("A")="Select PROVIDER: ",NPRV=0
|
---|
216 | S LIT="Select another PROVIDER: ",LIT1="You must select a provider!"
|
---|
217 | D SEL(200,"AEQMZ",.NPRV,.PRV,"","")
|
---|
218 | I $D(DTOUT)!($D(DUOUT)) Q
|
---|
219 | ;Sort the provider list into ascending order.
|
---|
220 | S NPRV=$$SORT(NPRV,"PRV")
|
---|
221 | Q
|
---|
222 | ; ---
|
---|
223 | CSTOP ;Get a list of clinic stop codes.
|
---|
224 | N LIT,LIT1,DIC,X,Y
|
---|
225 | K DIROUT,DIRUT,DTOUT,DUOUT
|
---|
226 | S DIC("A")="Select CLINIC STOP: "
|
---|
227 | S LIT="Select another CLINIC STOP: "
|
---|
228 | S LIT1="You must select a clinic stop!"
|
---|
229 | S NCS=0
|
---|
230 | W !
|
---|
231 | F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NCS>0)
|
---|
232 | .S DIC=40.7,DIC(0)="AEMQZ"
|
---|
233 | .I NCS>0 S DIC("A")=LIT
|
---|
234 | .D ^DIC
|
---|
235 | .I X=(U_U) S DTOUT=1
|
---|
236 | .I '$D(DTOUT),('$D(DUOUT)) D
|
---|
237 | ..I +Y'=-1 D Q
|
---|
238 | ...S NCS=NCS+1
|
---|
239 | ...;Save the external form of the name, the IEN, and the stop code.
|
---|
240 | ...S PXRMCS(NCS)=$P(Y(0,0),U,1)_U_$P(Y,U,1)_U_$P(Y(0),U,2)
|
---|
241 | ..W:NCS=0 !,LIT1
|
---|
242 | ;Sort the clinic stop list into alphabetical order.
|
---|
243 | S NCS=$$SORT(NCS,"PXRMCS",2)
|
---|
244 | ;Build array by IEN
|
---|
245 | S IC=""
|
---|
246 | F S IC=$O(PXRMCS(IC)) Q:IC="" D
|
---|
247 | .S PXRMCSN($P(PXRMCS(IC),U,2))=IC
|
---|
248 | Q
|
---|
249 | ; ---
|
---|
250 | SORT(N,ARRAY,KEY) ;Sort an ARRAY with N elements
|
---|
251 | ;return the number of unique elements. KEY is the piece of ARRAY on
|
---|
252 | ;which to base the sort. The default is the first piece.
|
---|
253 | ;
|
---|
254 | K ^TMP($J,"SORT")
|
---|
255 | I (N'>0)!(N=1) Q N
|
---|
256 | N IC,IND
|
---|
257 | I '$D(KEY) S KEY=1
|
---|
258 | F IC=1:1:N S ^TMP($J,"SORT",$P(@ARRAY@(IC),U,KEY))=@ARRAY@(IC)
|
---|
259 | S IND=""
|
---|
260 | F IC=1:1 S IND=$O(^TMP($J,"SORT",IND)) Q:IND="" D
|
---|
261 | .S @ARRAY@(IC)=^TMP($J,"SORT",IND)
|
---|
262 | K ^TMP($J,"SORT")
|
---|
263 | Q IC-1
|
---|
264 | ;
|
---|
265 | ;Check for duplicate entries
|
---|
266 | DUP(VALUE,ARRAY,PIECE) ;
|
---|
267 | N IC,DUP
|
---|
268 | S IC=0,DUP=0
|
---|
269 | F S IC=$O(ARRAY(IC)) Q:IC="" D Q:DUP
|
---|
270 | .I $P(ARRAY(IC),U,PIECE)=VALUE S DUP=1
|
---|
271 | Q DUP
|
---|