[613] | 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
|
---|