| 1 | IVMLDEMD ;ALB/PJR/PHH - IVM DEMOGRAPHIC UPLOAD FILE DATE OF DEATH FIELDS ; 7/20/05 9:22am | 
|---|
| 2 | ;;2.0;INCOME VERIFICATION MATCH;**102,108**; 21-OCT-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; | 
|---|
| 6 | DOD(DFN,IVMDA2,IVMDA1,IVMDA) ; function to upload Date of Death | 
|---|
| 7 | ;                                   fields and return a flag | 
|---|
| 8 | ; | 
|---|
| 9 | ;  Input:      DFN  -  as patient IEN | 
|---|
| 10 | ;           IVMDA2  -  pointer to case record in (#301.5) file | 
|---|
| 11 | ;           IVMDA1  -  pointer to PID msg in (#301.501) sub-file | 
|---|
| 12 | ;            IVMDA  -  pointer to record in (#301.511) sub-file | 
|---|
| 13 | ; | 
|---|
| 14 | ; Output: IVMFLAG   -  1 if a Date of Death Field | 
|---|
| 15 | ;                      0 if not a Date of Death field | 
|---|
| 16 | ; | 
|---|
| 17 | ; | 
|---|
| 18 | N IVMFLAG,IVMI,IVMJ,IVMNODE,IVMPTR,Y,DODFIELD,DELDATA,CKDEL,DGDAUTO | 
|---|
| 19 | ; | 
|---|
| 20 | ; - initialize flags | 
|---|
| 21 | S IVMFLAG=0 | 
|---|
| 22 | ; | 
|---|
| 23 | ; - check for required parameters | 
|---|
| 24 | I '$G(DFN)!('$G(IVMDA))!('$G(IVMDA1))!'($G(IVMDA2)) G DODQ | 
|---|
| 25 | ; | 
|---|
| 26 | ; - get pointer to (#301.92) file from (#301.511) sub-file | 
|---|
| 27 | S IVMPTR=+$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMDA,0)) G DODQ:'IVMPTR | 
|---|
| 28 | ; | 
|---|
| 29 | ASK ;; | 
|---|
| 30 | D CKDEL I CKDEL G DODDEL | 
|---|
| 31 | W ! S DIR("A")="Do you wish to proceed with this action" | 
|---|
| 32 | S DIR("A",1)="You have selected to update a Date of Death field." | 
|---|
| 33 | S DIR("A",2)="All Date of Death Fields will be uploaded." | 
|---|
| 34 | S DIR("?")="Enter 'YES' to continue or 'NO' to abort." | 
|---|
| 35 | S DIR(0)="Y",DIR("B")="NO" | 
|---|
| 36 | D ^DIR K DIR | 
|---|
| 37 | S IVMFLAG=1 G DODQ:'Y | 
|---|
| 38 | W !,"Filing Date of Death fields... " | 
|---|
| 39 | ; | 
|---|
| 40 | ; | 
|---|
| 41 | LOOP ; - loop through DOD fields | 
|---|
| 42 | S (DGDAUTO,IVMDODUP)=1 | 
|---|
| 43 | F DODFIELD="ZPD09","ZPD31","ZPD32" D | 
|---|
| 44 | .S IVMI=$O(^IVM(301.92,"C",DODFIELD,"")) I IVMI="" Q | 
|---|
| 45 | .S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) Q:IVMJ']""  D | 
|---|
| 46 | ..; | 
|---|
| 47 | ..; - check for data node in (#301.511) sub-file | 
|---|
| 48 | ..S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) Q:'(+IVMNODE) | 
|---|
| 49 | ..I DODFIELD="ZPD31",$P(IVMNODE,"^",2)=""!($P(IVMNODE,"^",2)<1)!($P(IVMNODE,"^",2)>9) S $P(IVMNODE,"^",2)="@" | 
|---|
| 50 | ..I DODFIELD'="ZPD31",$P(IVMNODE,"^",2)=""!($E($P(IVMNODE,"^",2),1,7)'?1.7N) S $P(IVMNODE,"^",2)="@" | 
|---|
| 51 | ..; | 
|---|
| 52 | ..;   load Date of Death field rec'd from IVM into DHCP (#2) file | 
|---|
| 53 | ..D UPLOAD(+DFN,$P($G(^IVM(301.92,+IVMNODE,0)),"^",5),$P(IVMNODE,"^",2)) S IVMFLAG=1 | 
|---|
| 54 | ..; | 
|---|
| 55 | ..; - remove entry from (#301.511) sub-file | 
|---|
| 56 | ..D DELENT^IVMLDEMU(IVMDA2,IVMDA1,IVMJ) | 
|---|
| 57 | ; | 
|---|
| 58 | I IVMFLAG D  W "completed.",! | 
|---|
| 59 | .D UPLOAD(+DFN,.355,$S($G(DUZ):DUZ,1:.5)) | 
|---|
| 60 | D DISCHRGE^DGDEATH,XFR^DGDEATH | 
|---|
| 61 | K IVMDODUP | 
|---|
| 62 | ; | 
|---|
| 63 | S VALMBCK="R" | 
|---|
| 64 | ; | 
|---|
| 65 | G DODQ | 
|---|
| 66 | ; | 
|---|
| 67 | DODDEL ; | 
|---|
| 68 | W ! S DIR("A")="Do you wish to proceed with this action" | 
|---|
| 69 | S DIR("A",1)="You have selected to update a DELETION of a Date of Death field." | 
|---|
| 70 | S DIR("A",2)="All Date of Death Fields will be deleted." | 
|---|
| 71 | S DIR("?")="Enter 'YES' to continue or 'NO' to abort." | 
|---|
| 72 | S DIR(0)="Y",DIR("B")="NO" | 
|---|
| 73 | D ^DIR K DIR | 
|---|
| 74 | S IVMFLAG=1 G DODQ:'Y | 
|---|
| 75 | W !,"Filing Date of Death deletions... " | 
|---|
| 76 | F DODFIELD="ZPD09","ZPD31","ZPD32" D | 
|---|
| 77 | .S IVMI=$O(^IVM(301.92,"C",DODFIELD,"")) I IVMI="" Q | 
|---|
| 78 | .S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) Q:IVMJ']"" | 
|---|
| 79 | .; | 
|---|
| 80 | .; - check for data node in (#301.511) sub-file | 
|---|
| 81 | .S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) | 
|---|
| 82 | .Q:'(+IVMNODE) | 
|---|
| 83 | .; | 
|---|
| 84 | .;   load Date of Death deletion rec'd from IVM into DHCP (#2) file | 
|---|
| 85 | .I DODFIELD="ZPD09" D UPLOAD(+DFN,.351,"@") | 
|---|
| 86 | .; | 
|---|
| 87 | .; - remove entry from (#301.511) sub-file | 
|---|
| 88 | .D DELENT^IVMLDEMU(IVMDA2,IVMDA1,IVMJ) | 
|---|
| 89 | ; | 
|---|
| 90 | I IVMFLAG D  W "completed.",! | 
|---|
| 91 | .D UPLOAD(+DFN,.355,.5) | 
|---|
| 92 | ; | 
|---|
| 93 | S VALMBCK="R" | 
|---|
| 94 | ; | 
|---|
| 95 | G DODQ | 
|---|
| 96 | CKDEL S CKDEL=0 | 
|---|
| 97 | S IVMI=$O(^IVM(301.92,"C","ZPD09","")) I IVMI="" Q | 
|---|
| 98 | S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) | 
|---|
| 99 | I IVMJ']"" Q | 
|---|
| 100 | ; | 
|---|
| 101 | ; - check for data node in (#301.511) sub-file | 
|---|
| 102 | S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) | 
|---|
| 103 | Q:'(+IVMNODE)!($P(IVMNODE,"^",2)']"") | 
|---|
| 104 | ; | 
|---|
| 105 | I $P(IVMNODE,"^",2)="""""" S CKDEL=1 | 
|---|
| 106 | Q | 
|---|
| 107 | AUTODOD(DFN) ; | 
|---|
| 108 | ; function to automatically upload Date of Death | 
|---|
| 109 | ; fields and return a flag | 
|---|
| 110 | ; | 
|---|
| 111 | ;  Input:      DFN  -  as patient IEN | 
|---|
| 112 | ; | 
|---|
| 113 | ; Output: IVMFLAG   -  1 if a Date of Death Field | 
|---|
| 114 | ;                      0 if not a Date of Death field | 
|---|
| 115 | ; | 
|---|
| 116 | N IVMFLAG,IVMI,IVMJ,IVMNODE,IVMPTR,DODFIELD | 
|---|
| 117 | N DELDATA,CKDEL,CKADD,CKDUZ,IVMDA1,IVMDA2,DGDAUTO,IVMENT4 | 
|---|
| 118 | ; | 
|---|
| 119 | ; - initialize flags | 
|---|
| 120 | S (IVMFLAG,CKDEL,CKADD,CKDUZ)=0,IVMENT4=999999999 | 
|---|
| 121 | ; | 
|---|
| 122 | ; - check for required parameters | 
|---|
| 123 | S IVMDA2=$G(IVM3015) | 
|---|
| 124 | I 'IVMDA2 G DODQ | 
|---|
| 125 | S IVMDA1=$O(^HL(771.3,"B","PID","")) | 
|---|
| 126 | S IVMDA1=$O(^IVM(301.5,IVMDA2,"IN","B",IVMDA1,""),-1) | 
|---|
| 127 | I 'IVMDA1 G DODQ | 
|---|
| 128 | ; | 
|---|
| 129 | D CKAUTO I CKDEL D AUTODEL,DEM5,BULL(+^IVM(301.5,IVMDA2,0)) G DODQ | 
|---|
| 130 | I CKADD D CKDUZ,AUTOADD,DEM5 G DODQ | 
|---|
| 131 | G DODQ | 
|---|
| 132 | AUTOADD ; | 
|---|
| 133 | S DGDAUTO=1 | 
|---|
| 134 | ; - loop through DOD fields | 
|---|
| 135 | F DODFIELD="ZPD09","ZPD31","ZPD32" D | 
|---|
| 136 | .S IVMI=$O(^IVM(301.92,"C",DODFIELD,"")) I IVMI="" Q | 
|---|
| 137 | .S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) Q:IVMJ']""  D | 
|---|
| 138 | ..; | 
|---|
| 139 | ..; - check for data node in (#301.511) sub-file | 
|---|
| 140 | ..S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) Q:'(+IVMNODE) | 
|---|
| 141 | ..I DODFIELD="ZPD31",$P(IVMNODE,"^",2)=""!($P(IVMNODE,"^",2)<1)!($P(IVMNODE,"^",2)>9) S $P(IVMNODE,"^",2)="@" | 
|---|
| 142 | ..I DODFIELD'="ZPD31",$P(IVMNODE,"^",2)=""!($E($P(IVMNODE,"^",2),1,7)'?1.7N) S $P(IVMNODE,"^",2)="@" | 
|---|
| 143 | ..; | 
|---|
| 144 | ..;   load Date of Death field rec'd from IVM into DHCP (#2) file | 
|---|
| 145 | ..I DODFIELD'="ZPD09" D UPLOAD(+DFN,$P($G(^IVM(301.92,+IVMNODE,0)),"^",5),$P(IVMNODE,"^",2)) S IVMFLAG=1 | 
|---|
| 146 | ..; - remove entry from (#301.511) sub-file | 
|---|
| 147 | ..D DELENT^IVMLDEMU(IVMDA2,IVMDA1,IVMJ) | 
|---|
| 148 | ; | 
|---|
| 149 | I IVMFLAG D UPLOAD(+DFN,.355,$S(CKDUZ:CKDUZ,1:.5)) | 
|---|
| 150 | D CLEAN(IVMDA2) | 
|---|
| 151 | Q | 
|---|
| 152 | AUTODEL ; | 
|---|
| 153 | N DFNDOD,DODMPI S DFNDOD=0 I $P($G(^DPT(+DFN,.35)),U)>0 S DFNDOD=1 | 
|---|
| 154 | F DODFIELD="ZPD09","ZPD31","ZPD32" D | 
|---|
| 155 | .S IVMI=$O(^IVM(301.92,"C",DODFIELD,"")) I IVMI="" Q | 
|---|
| 156 | .S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) Q:IVMJ']"" | 
|---|
| 157 | .; - check for data node in (#301.511) sub-file | 
|---|
| 158 | .S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) | 
|---|
| 159 | .Q:'(+IVMNODE) | 
|---|
| 160 | .;   load Date of Death deletion rec'd from IVM into DHCP (#2) file | 
|---|
| 161 | .I DODFIELD="ZPD09" I DFNDOD D UPLOAD(+DFN,.351,"@") S DODMPI=$$A31^MPIFA31B(+DFN),IVMFLAG=1 | 
|---|
| 162 | .; - remove entry from (#301.511) sub-file | 
|---|
| 163 | .D DELENT^IVMLDEMU(IVMDA2,IVMDA1,IVMJ) | 
|---|
| 164 | ; | 
|---|
| 165 | I IVMFLAG D UPLOAD(+DFN,.355,.5) | 
|---|
| 166 | D CLEAN(IVMDA2) | 
|---|
| 167 | Q | 
|---|
| 168 | DEM5 ; | 
|---|
| 169 | I '$$DEMO^IVMLDEM5(IVMDA2,IVMDA1,0),'$$DEMO^IVMLDEM5(IVMDA2,IVMDA1,1) D | 
|---|
| 170 | .D DELETE^IVMLDEM5(IVMDA2,IVMDA1," ") ; Dummy up name parameter | 
|---|
| 171 | Q | 
|---|
| 172 | CKAUTO S (CKDEL,CKADD)=0 | 
|---|
| 173 | S IVMI=$O(^IVM(301.92,"C","ZPD09","")) I IVMI="" Q | 
|---|
| 174 | S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) | 
|---|
| 175 | I IVMJ']"" Q | 
|---|
| 176 | ; | 
|---|
| 177 | ; - check for data node in (#301.511) sub-file | 
|---|
| 178 | S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) | 
|---|
| 179 | Q:'(+IVMNODE)!($P(IVMNODE,"^",2)']"") | 
|---|
| 180 | ; | 
|---|
| 181 | I $P(IVMNODE,"^",2)="""""" S CKDEL=1 Q | 
|---|
| 182 | I $P(IVMNODE,"^",2)=$P($G(^DPT(DFN,.35)),"^",1) S CKADD=1 | 
|---|
| 183 | Q | 
|---|
| 184 | CKDUZ ; Check to preserve DUZ for "Last Edited By" | 
|---|
| 185 | S IVMI=$O(^IVM(301.92,"C","ZPD32","")) I IVMI="" Q | 
|---|
| 186 | S IVMJ=$O(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM","B",IVMI,"")) | 
|---|
| 187 | I IVMJ']"" Q | 
|---|
| 188 | ; | 
|---|
| 189 | ; - check for data node in (#301.511) sub-file | 
|---|
| 190 | S IVMNODE=$G(^IVM(301.5,IVMDA2,"IN",IVMDA1,"DEM",IVMJ,0)) | 
|---|
| 191 | Q:'(+IVMNODE)!($P(IVMNODE,"^",2)']"") | 
|---|
| 192 | ; | 
|---|
| 193 | I $P(IVMNODE,"^",2)=$P($G(^DPT(DFN,.35)),"^",4) D | 
|---|
| 194 | .S CKDUZ=$P($G(^DPT(DFN,.35)),"^",5) | 
|---|
| 195 | Q | 
|---|
| 196 | UPLOAD(DFN,IVMFIELD,IVMVALUE) ; - file Date of Death fields received from IVM | 
|---|
| 197 | ;  Input:       DFN  -  as patient IEN | 
|---|
| 198 | ;          IVMFIELD  -  as the field number to be updated | 
|---|
| 199 | ;          IVMVALUE  -  as the value of the field | 
|---|
| 200 | ; | 
|---|
| 201 | ; Output: None | 
|---|
| 202 | ; | 
|---|
| 203 | N DA,DIE,DR | 
|---|
| 204 | S DIE="^DPT(",DA=DFN,DR=IVMFIELD_"////^S X=IVMVALUE" | 
|---|
| 205 | D ^DIE | 
|---|
| 206 | Q | 
|---|
| 207 | ; | 
|---|
| 208 | DODQ ; - return  -->  1 if uploadable field is a Date of Death field | 
|---|
| 209 | ;           -->  0 if nothing uploadable | 
|---|
| 210 | ; | 
|---|
| 211 | I IVMFLAG D RESET^IVMLDEMU | 
|---|
| 212 | Q IVMFLAG | 
|---|
| 213 | ; | 
|---|
| 214 | CLEAN(IVMI) ; | 
|---|
| 215 | ; Remove any Date of Death related entries from IVM UPLOAD DEM | 
|---|
| 216 | N IVMJ,IVMN,IVM92,OTHFLG | 
|---|
| 217 | S IVMJ=0 F  S IVMJ=$O(^IVM(301.5,"ASEG","PID",IVMI,IVMJ)) Q:'IVMJ  D | 
|---|
| 218 | .I '$D(^IVM(301.5,IVMI,"IN",IVMJ)) D REMASEG(IVMI,IVMJ) Q | 
|---|
| 219 | .S (OTHFLG,IVMN)=0 F  S IVMN=$O(^IVM(301.5,IVMI,"IN",IVMJ,"DEM",IVMN)) Q:'IVMN  D | 
|---|
| 220 | ..S IVM92=$P(^IVM(301.5,IVMI,"IN",IVMJ,"DEM",IVMN,0),U) | 
|---|
| 221 | ..I "^15^36^37^"[(U_IVM92_U) D REM511(IVMI,IVMJ,IVMN) | 
|---|
| 222 | ..I "^15^36^37^"'[(U_IVM92_U) S OTHFLG=1 | 
|---|
| 223 | .I 'OTHFLG D REM501(IVMI,IVMJ) | 
|---|
| 224 | Q | 
|---|
| 225 | ; | 
|---|
| 226 | REM501(IVMI,IVMJ) ; | 
|---|
| 227 | ; Delete 301.501 entry to remove from ASEG x-ref | 
|---|
| 228 | N DA,DIE,DR | 
|---|
| 229 | S DA=IVMJ,DA(1)=IVMI | 
|---|
| 230 | S DIE="^IVM(301.5,"_DA(1)_",""IN""," | 
|---|
| 231 | S DR=".02////@" D ^DIE | 
|---|
| 232 | Q | 
|---|
| 233 | ; | 
|---|
| 234 | REM511(IVMI,IVMJ,IVMN) ; | 
|---|
| 235 | ; Delete 301.511 entry to remove from IVM UPLOAD DEM | 
|---|
| 236 | N DA,DIK | 
|---|
| 237 | S DA(1)=IVMJ,DA(2)=IVMI,DA=IVMN | 
|---|
| 238 | S DIK="^IVM(301.5,"_DA(2)_",""IN"","_DA(1)_",""DEM""," | 
|---|
| 239 | D ^DIK | 
|---|
| 240 | Q | 
|---|
| 241 | ; | 
|---|
| 242 | REMASEG(IVMI,IVMJ) ; | 
|---|
| 243 | ; Delete invalid ASEG x-ref entries | 
|---|
| 244 | K ^IVM(301.5,"ASEG","PID",IVMI,IVMJ) | 
|---|
| 245 | Q | 
|---|
| 246 | BULL(DFN) ; Date of Death Deletion Bulletin | 
|---|
| 247 | I '$D(^DPT(DFN,0)) Q | 
|---|
| 248 | I '(+$G(^DPT(DFN,.35))) Q | 
|---|
| 249 | ; | 
|---|
| 250 | N DGDEATH,DGB,DGPCMM,XMSUB,X | 
|---|
| 251 | S DGDEATH=+$G(^DPT(DFN,.35)),XMSUB="Patient Death has been Deleted",DGCT=0 | 
|---|
| 252 | D ^DGPATV | 
|---|
| 253 | D LINE^DGDEATH("The date of death for the following patient has been deleted.") | 
|---|
| 254 | D LINE^DGDEATH("") | 
|---|
| 255 | D DEMOG^DGDEATH | 
|---|
| 256 | D LINE^DGDEATH("") | 
|---|
| 257 | S DGPCMM=$$PCMMXMY^SCAPMC25(1,DFN,,,0) ;creates xmy array | 
|---|
| 258 | S DGCT=$$PCMAIL^SCMCMM(DFN,"DGTEXT",DT) | 
|---|
| 259 | S DGB=1 D ^DGBUL S X=DGDEATH | 
|---|
| 260 | K DGCT,DGDEATH D KILL^DGPATV | 
|---|
| 261 | ; | 
|---|
| 262 | Q | 
|---|