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