1 | DGEN ;ALB/RMO/CJM - Patient Enrollment Option; 11/17/00 12:12pm ; 12/6/00 5:32pm
|
---|
2 | ;;5.3;Registration;**121,122,165,147,232,314,624**;Aug 13,1993
|
---|
3 | ;
|
---|
4 | EN ;Entry point for stand-alone enrollment option
|
---|
5 | ; Input -- None
|
---|
6 | ; Output -- None
|
---|
7 | N DFN
|
---|
8 | ;
|
---|
9 | ;Get Patient file (#2) IEN - DFN
|
---|
10 | D GETPAT^DGRPTU(,,.DFN,) G ENQ:DFN<0
|
---|
11 | ;
|
---|
12 | ;Load patient enrollment screen
|
---|
13 | D EN^DGENL(DFN)
|
---|
14 | ENQ Q
|
---|
15 | ;
|
---|
16 | EN1(DFN) ;Entry point for enrollment from registration and disposition
|
---|
17 | ; Input -- DFN Patient IEN
|
---|
18 | ; Output -- None
|
---|
19 | N DGENOUT
|
---|
20 | ;
|
---|
21 | ;Check if patient should be asked to enroll
|
---|
22 | I $$CHK(DFN) D
|
---|
23 | . ;Enroll patient
|
---|
24 | . I $$ENRPAT(DFN,.DGENOUT)
|
---|
25 | ;
|
---|
26 | ;If user did not timeout or '^' and
|
---|
27 | ;patient is an eligible veteran or has an enrollment status
|
---|
28 | I '$G(DGENOUT),($$VET^DGENPTA(DFN)!($$STATUS^DGENA(DFN))) D
|
---|
29 | . ;Display enrollment
|
---|
30 | . D DISPLAY^DGENU(DFN)
|
---|
31 | EN1Q Q
|
---|
32 | ;
|
---|
33 | CHK(DFN) ;Check if patient should be asked to enroll
|
---|
34 | ; Input -- DFN Patient IEN
|
---|
35 | ; Output -- 1=Yes and 0=No
|
---|
36 | N Y,STATUS
|
---|
37 | S Y=1
|
---|
38 | ;Is patient an eligible veteran
|
---|
39 | S Y=$$VET^DGENPTA(DFN)
|
---|
40 | ;
|
---|
41 | ;Is patient already enrolled or pending enrollment
|
---|
42 | S STATUS=$$STATUS^DGENA(DFN)
|
---|
43 | ; Purple Heart added status 21
|
---|
44 | I Y,(STATUS=9)!(STATUS=1)!(STATUS=2)!(STATUS=14)!(STATUS=15)!(STATUS=16)!(STATUS=17)!(STATUS=18)!(STATUS=21) S Y=0
|
---|
45 | Q +$G(Y)
|
---|
46 | ;
|
---|
47 | ENRPAT(DFN,DGENOUT) ;Enroll patient
|
---|
48 | ; Input -- DFN Patient IEN
|
---|
49 | ; Output -- 1=Successful and 0=Failure
|
---|
50 | ; DGENOUT 1=Timeout or up-arrow
|
---|
51 | N DGOKF
|
---|
52 | ;Ask patient if s/he would like to enroll
|
---|
53 | I $$ASK("enroll",.DGENOUT) D
|
---|
54 | . ;If 'Yes' enroll patient
|
---|
55 | . S DGOKF=$$ENROLL(DFN)
|
---|
56 | ELSE D
|
---|
57 | . ;Quit if timeout or '^'
|
---|
58 | . Q:$G(DGENOUT)
|
---|
59 | . ;Otherwise patient declined enrollment
|
---|
60 | . ;Cancel/decline functionality disabled by DG*5.3*232
|
---|
61 | . ;S DGOKF=$$DECLINE(DFN,DT)
|
---|
62 | . S DGOKF=0
|
---|
63 | . ;* Prompt for requested appt. (DG*5.3*624)
|
---|
64 | . I $P($G(^DPT(DFN,1010.15)),"^",9)="" DO
|
---|
65 | . . N DGSXS,DGAPPTAN
|
---|
66 | . . S DGSXS=$$PROMPT^DGENU(2,1010.159,1,.DGAPPTAN,"",1)
|
---|
67 | . . I DGSXS DO
|
---|
68 | . . . N DA,DR,DIE
|
---|
69 | . . . S DA=DFN
|
---|
70 | . . . S DIE="^DPT("
|
---|
71 | . . . S DR="1010.159////^S X=DGAPPTAN"
|
---|
72 | . . . D ^DIE
|
---|
73 | . . . K DA,DR,DIE
|
---|
74 | . . . ;*Set Appointment Request Date to current date
|
---|
75 | . . . N DA,DR,DIE
|
---|
76 | . . . S DIE="^DPT("
|
---|
77 | . . . S DA=DFN
|
---|
78 | . . . S DR="1010.1511////^S X=DT"
|
---|
79 | . . . D ^DIE
|
---|
80 | . . . K DA,DR,DIE
|
---|
81 | ENRPATQ Q +$G(DGOKF)
|
---|
82 | ;
|
---|
83 | ASK(ACTION,DGENOUT) ;Ask patient if s/he would like to enroll or cease enrollment
|
---|
84 | ; Input -- ACTION Action description
|
---|
85 | ; Output -- 1=Yes and 0=No
|
---|
86 | ; DGENOUT 1=Timeout or up-arrow
|
---|
87 | N DIR,DTOUT,DUOUT,Y
|
---|
88 | S DIR("A")="Do you wish to "_ACTION_" in the VA Patient Enrollment System"
|
---|
89 | S DIR("B")="YES",DIR(0)="Y"
|
---|
90 | W ! D ^DIR
|
---|
91 | I $D(DTOUT)!($D(DUOUT)) S DGENOUT=1
|
---|
92 | Q +$G(Y)
|
---|
93 | ;
|
---|
94 | ENROLL(DFN) ;Create new local unverified enrollment
|
---|
95 | ; Input -- DFN Patient IEN
|
---|
96 | ; Output -- 1=Successful and 0=Failure
|
---|
97 | N DGENR,DGOKF,DGREQF,APPDATE
|
---|
98 | ;Lock enrollment record
|
---|
99 | I '$$LOCK^DGENA1(DFN) D G ENROLLQ
|
---|
100 | . W !,">>> Another user is editing, try later ..."
|
---|
101 | . D PAUSE^VALM1
|
---|
102 | ;
|
---|
103 | ;now that the enrollment history is locked, need to check again whether or not patient may be enrolled (query reply may have been received)
|
---|
104 | G:'$$CHK^DGEN(DFN) ENROLLQ
|
---|
105 | ;
|
---|
106 | ;Ask Application Date
|
---|
107 | W !
|
---|
108 | I $$PROMPT^DGENU(27.11,.01,DT,.APPDATE) D
|
---|
109 | . ;Does patient require a Means Test?
|
---|
110 | . D EN^DGMTR
|
---|
111 | . ;Create local enrollment array
|
---|
112 | . I $$CREATE^DGENA6(DFN,APPDATE,,,,.DGENR) D
|
---|
113 | . . ;Store local enrollment as current
|
---|
114 | . . I $$STORECUR^DGENA1(.DGENR) D
|
---|
115 | . . . S DGOKF=1
|
---|
116 | . . . ;Ask preferred facility
|
---|
117 | . . . D PREFER^DGENPT(DFN)
|
---|
118 | . . . ;If patient's means test status is required, send bulletin
|
---|
119 | . . . I $$MTREQ(DFN) D MTBULL(DFN,.DGENR)
|
---|
120 | I $P($G(^DPT(DFN,1010.15)),"^",11)="" DO
|
---|
121 | . N DGSXS,DGAPPTAN,DGDFLT
|
---|
122 | . S DGDFLT=$P($G(^DPT(DFN,1010.15)),"^",9)
|
---|
123 | . S:DGDFLT="" DGDFLT=1
|
---|
124 | . S DGSXS=$$PROMPT^DGENU(2,1010.159,DGDFLT,.DGAPPTAN,"",1)
|
---|
125 | . I DGSXS DO
|
---|
126 | . . N DA,DR,DIE
|
---|
127 | . . S DA=DFN
|
---|
128 | . . S DIE="^DPT("
|
---|
129 | . . S DR="1010.159////^S X=DGAPPTAN"
|
---|
130 | . . D ^DIE
|
---|
131 | . . K DA,DR,DIE
|
---|
132 | . . ;*If patient answered NO to "Do you want an appt" question
|
---|
133 | . . I $P($G(^DPT(DFN,1010.15)),"^",9)=0 DO
|
---|
134 | . . . N DA,DR,DIE
|
---|
135 | . . . S DIE="^DPT("
|
---|
136 | . . . S DA=DFN
|
---|
137 | . . . S DR="1010.1511////^S X=DT"
|
---|
138 | . . . D ^DIE
|
---|
139 | . . . K DA,DR,DIE
|
---|
140 | . . ;*If patient answered YES to "Do you want an appt" question
|
---|
141 | . . I $P($G(^DPT(DFN,1010.15)),"^",9)=1 DO
|
---|
142 | . . . N DA,DR,DIE
|
---|
143 | . . . S DIE="^DPT("
|
---|
144 | . . . S DA=DFN
|
---|
145 | . . . S DR="1010.1511////^S X=APPDATE"
|
---|
146 | . . . D ^DIE
|
---|
147 | . . . K DA,DR,DIE
|
---|
148 | ENROLLQ D UNLOCK^DGENA1(DFN)
|
---|
149 | Q +$G(DGOKF)
|
---|
150 | ;
|
---|
151 | CANCEL(DFN,DGENR,EFFDATE) ;Cancel current enrollment
|
---|
152 | ; Input
|
---|
153 | ; DFN Patient IEN
|
---|
154 | ; DGENR Array containing current enrollment (pass by reference)
|
---|
155 | ; EFFDATE Enrollment Effective Date Of Change (optional)
|
---|
156 | ; Output
|
---|
157 | ; Function Return Value is 1 if Successful and 0 on Failure
|
---|
158 | ;
|
---|
159 | N DGENR2,DGOKF,REASON,REMARKS,BEGIN,END,ERRMSG
|
---|
160 | ;Lock enrollment record
|
---|
161 | I '$$LOCK^DGENA1(DFN) D G CANCELQ
|
---|
162 | .W !,">>> Another user is editing, try later ..."
|
---|
163 | .D PAUSE^VALM1
|
---|
164 | W !
|
---|
165 | ;Ask effective date of change for cessation
|
---|
166 | I '$G(EFFDATE) D G:'EFFDATE CANCELQ
|
---|
167 | .N DIR
|
---|
168 | .S BEGIN=$S(DGENR("DATE"):DGENR("DATE"),1:DGENR("APP"))
|
---|
169 | .S END=DGENR("END")
|
---|
170 | .S DIR(0)="D^::AEX"
|
---|
171 | .S DIR("A")="Effective Date of Cancellation"
|
---|
172 | .S DIR("B")=$$VIEWDATE(DT)
|
---|
173 | ASKDATE .W !,"Please enter the date to cease enrollment, no earlier than "_$$VIEWDATE(BEGIN)
|
---|
174 | .I END W !,"and no later than "_$$VIEWDATE(END)_"."
|
---|
175 | .D ^DIR
|
---|
176 | .I $D(DIRUT)!('Y) S EFFDATE="" Q
|
---|
177 | .E S EFFDATE=Y I (EFFDATE<BEGIN)!(END&(END<EFFDATE)) G ASKDATE
|
---|
178 | .;
|
---|
179 | ;Ask reason canceled/declined enrollment
|
---|
180 | I '$$PROMPT^DGENU(27.11,.05,,.REASON,1) G CANCELQ
|
---|
181 | ;If reason is 'Other', ask for remarks
|
---|
182 | I REASON=4,'$$PROMPT^DGENU(27.11,25,,.REMARKS,1) G CANCELQ
|
---|
183 | ;Create local enrollment array
|
---|
184 | I $$CREATE^DGENA6(DFN,DGENR("APP"),EFFDATE,REASON,$G(REMARKS),.DGENR2,DGENR("DATE"),EFFDATE) D
|
---|
185 | .;Store local enrollment as current
|
---|
186 | .I $$STORECUR^DGENA1(.DGENR2,,.ERRMSG) D
|
---|
187 | ..S DGOKF=1
|
---|
188 | .E D
|
---|
189 | ..W !,$G(ERRMSG)
|
---|
190 | ;
|
---|
191 | D UNLOCK^DGENA1(DFN)
|
---|
192 | CANCELQ Q +$G(DGOKF)
|
---|
193 | ;
|
---|
194 | DECLINE(DFN,APPDATE) ;Create Declined enrollment
|
---|
195 | ; Input -- DFN Patient IEN
|
---|
196 | ; APPDATE Application date (optional)
|
---|
197 | ; Output -- 1=Successful and 0=Failure
|
---|
198 | N DGENR,DGOKF,REASON,REMARKS
|
---|
199 | ;Lock enrollment record
|
---|
200 | I '$$LOCK^DGENA1(DFN) D G DECLINEQ
|
---|
201 | . W !,">>> Another user is editing, try later ..."
|
---|
202 | . D PAUSE^VALM1
|
---|
203 | ;Ask enrollment date
|
---|
204 | W !
|
---|
205 | I '$G(APPDATE),'$$PROMPT^DGENU(27.11,.01,DT,.APPDATE) G DECLINEQ
|
---|
206 | ;Ask reason declined enrollment
|
---|
207 | I '$$PROMPT^DGENU(27.11,.05,,.REASON,1) G DECLINEQ
|
---|
208 | ;If reason is 'Other', ask for remarks
|
---|
209 | I REASON=4,'$$PROMPT^DGENU(27.11,25,,.REMARKS,1) G DECLINEQ
|
---|
210 | ;Create local enrollment array
|
---|
211 | I $$CREATE^DGENA6(DFN,APPDATE,DT,REASON,$G(REMARKS),.DGENR) D
|
---|
212 | . ;Store local enrollment as current
|
---|
213 | . I $$STORECUR^DGENA1(.DGENR) D
|
---|
214 | . . S DGOKF=1
|
---|
215 | . . ;Ask preferred facility
|
---|
216 | . . D PREFER^DGENPT(DFN)
|
---|
217 | D UNLOCK^DGENA1(DFN)
|
---|
218 | DECLINEQ ;
|
---|
219 | Q +$G(DGOKF)
|
---|
220 | ;
|
---|
221 | MTBULL(DFN,DGENR) ;Create/Send means test 'REQUIRED' bulletin for PATIENT ENROLLMENT
|
---|
222 | ;
|
---|
223 | ; Input:
|
---|
224 | ; DFN - patient IEN
|
---|
225 | ; DGENR - this local array represents the PATIENT ENROLLMENT and
|
---|
226 | ; should be passed by reference
|
---|
227 | ;
|
---|
228 | ; Output: None
|
---|
229 | ;
|
---|
230 | N DGBULL,DGLINE,DGMGRP,DGNAME,DIFROM,VA,VAERR,XMTEXT,XMSUB,XMDUZ
|
---|
231 | ;
|
---|
232 | ; get Means Test 'Required' mail group
|
---|
233 | S DGMGRP=$P($G(^DG(43,1,"NOT")),"^",13)
|
---|
234 | ;
|
---|
235 | ; if mail group not defined, exit
|
---|
236 | I 'DGMGRP G MTBULLQ
|
---|
237 | ;
|
---|
238 | ; set up XMY array
|
---|
239 | D XMY^DGMTUTL(DGMGRP,0,1)
|
---|
240 | ;
|
---|
241 | ; obtain patient identifier
|
---|
242 | D PID^VADPT6
|
---|
243 | ;
|
---|
244 | ; patient name
|
---|
245 | S DGNAME=$P($G(^DPT(DFN,0)),"^")
|
---|
246 | ;
|
---|
247 | ; local array containing msg text
|
---|
248 | S XMTEXT="DGBULL("
|
---|
249 | ;
|
---|
250 | ; - msg subject
|
---|
251 | S XMSUB=$E("Patient: "_DGNAME,1,30)_" ("_VA("BID")_") "_"Means Test Required"
|
---|
252 | ;
|
---|
253 | ; - insert lines of text into message
|
---|
254 | S DGLINE=0
|
---|
255 | D LINE("The following patient is enrolled in the VA Patient Enrollment",.DGLINE)
|
---|
256 | D LINE("System and 'REQUIRES' a means test.",.DGLINE)
|
---|
257 | D LINE("",.DGLINE)
|
---|
258 | D LINE(" Patient Name: "_DGNAME,.DGLINE)
|
---|
259 | D LINE(" Patient ID: "_VA("PID"),.DGLINE)
|
---|
260 | D LINE("",.DGLINE)
|
---|
261 | D LINE(" Enrollment Date: "_$$EXT^DGENU("DATE",DGENR("DATE")),.DGLINE)
|
---|
262 | D LINE(" Enrollment Status: "_$$EXT^DGENU("STATUS",DGENR("STATUS")),.DGLINE)
|
---|
263 | D LINE(" Entered By: "_$$EXT^DGENU("USER",DGENR("USER")),.DGLINE)
|
---|
264 | D LINE(" Date/Time Entered: "_$$EXT^DGENU("DATETIME",DGENR("DATETIME")),.DGLINE)
|
---|
265 | D ^XMD
|
---|
266 | ;
|
---|
267 | MTBULLQ Q
|
---|
268 | ;
|
---|
269 | LINE(DGTEXT,DGLINE) ;Add lines of text to mail message
|
---|
270 | ;
|
---|
271 | ; Input:
|
---|
272 | ; DGTEXT - as line of text to be inserted into mail message
|
---|
273 | ; DGLINE - as number of lines in message, passed by reference
|
---|
274 | ;
|
---|
275 | ; Output:
|
---|
276 | ; DGBULL - as local array containing message text
|
---|
277 | ;
|
---|
278 | S DGLINE=DGLINE+1
|
---|
279 | S DGBULL(DGLINE)=DGTEXT
|
---|
280 | Q
|
---|
281 | ;
|
---|
282 | MTREQ(DFN) ; --
|
---|
283 | ;Determine if Means Test (required) bulletin should be sent for patient.
|
---|
284 | ;
|
---|
285 | ; Input:
|
---|
286 | ; DFN - patient IEN
|
---|
287 | ;
|
---|
288 | ; Output:
|
---|
289 | ; 1=Successful and 0=Failure
|
---|
290 | ;
|
---|
291 | N DGMTNODE,DGMTREQ
|
---|
292 | ;
|
---|
293 | ;Last means test for patient
|
---|
294 | S DGMTNODE=$$LST^DGMTU(DFN)
|
---|
295 | ;
|
---|
296 | ;If scheduling bulletin already sent, exit
|
---|
297 | I $P($G(^DGMT(408.31,+DGMTNODE,"BUL")),"^")=DT G MTREQQ
|
---|
298 | ;
|
---|
299 | ;If patient means test status is 'REQUIRED'
|
---|
300 | I $P(DGMTNODE,"^",4)="R" D
|
---|
301 | . ;set flag (send bulletin)
|
---|
302 | . S DGMTREQ=1
|
---|
303 | ;
|
---|
304 | MTREQQ Q +$G(DGMTREQ)
|
---|
305 | ;
|
---|
306 | VIEWDATE(FMDATE) ;
|
---|
307 | ;This function changes a FM date to its external representation
|
---|
308 | N Y
|
---|
309 | S Y=$G(FMDATE)
|
---|
310 | D DD^%DT
|
---|
311 | Q Y
|
---|