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