1 | IVMPREC8 ;ALB/KCL/BRM/PJR - PROCESS INCOMING (Z05 EVENT TYPE) HL7 MESSAGES (CON'T) ; 11/24/04 9:58am
|
---|
2 | ;;2.0; INCOME VERIFICATION MATCH ;**5,6,12,58,73,79,102**; 21-OCT-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; This routine is called from IVMPREC6.
|
---|
6 | ; This routine will process batch ORU demographic (event type Z05) HL7
|
---|
7 | ; messages received from the IVM center.
|
---|
8 | ;
|
---|
9 | ;
|
---|
10 | ;
|
---|
11 | PID ; - compare PID segment fields with DHCP fields
|
---|
12 | N COMPPH1,COMPPH2
|
---|
13 | ;
|
---|
14 | ; - strip off segment name
|
---|
15 | S IVMPIECE=$E(IVMXREF,4,7)
|
---|
16 | ;
|
---|
17 | I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
|
---|
18 | .;
|
---|
19 | .; - if PID field is the address field - parse address
|
---|
20 | .S IVMADFLG=0
|
---|
21 | .I IVMXREF["PID11" D Q:IVMFLD=""
|
---|
22 | ..; - get PID address field containing 5 pieces seperated by HLECH (~)
|
---|
23 | ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2))
|
---|
24 | ..; - get piece of address field, and set IVMFLD
|
---|
25 | ..S IVMPIECE=$E(IVMPIECE,3,4),IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE)
|
---|
26 | ..Q:IVMFLD=""
|
---|
27 | ..; - convert state abbrev. to pointer
|
---|
28 | ..I IVMPIECE=4 S (IVMSTPTR,IVMFLD)=+$O(^DIC(5,"C",IVMFLD,0))
|
---|
29 | ..I IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=X
|
---|
30 | ..S IVMADFLG=1
|
---|
31 | .;
|
---|
32 | .I IVMXREF["PID12" S IVMADFLG=1,IVMFLD=+$O(^DIC(5,IVMSTPTR,1,"C",$P(IVMSEG,HLFS,12),0))
|
---|
33 | .; line remove so that the phone number is compared
|
---|
34 | .; before saving to 301.5.
|
---|
35 | .;I IVMXREF["PID13" S IVMFLD=$P(IVMSEG,HLFS,13) D STORE^IVMPREC9 S IVMADFLG=1 Q
|
---|
36 | .;
|
---|
37 | .; - file address fields and quit
|
---|
38 | .I IVMADFLG D STORE^IVMPREC9 Q
|
---|
39 | .;
|
---|
40 | .; - otherwise, set IVMFLD to field rec'd from IVM
|
---|
41 | .; for comparison with DHCP field
|
---|
42 | .S IVMFLD=$P(IVMSEG,HLFS,IVMPIECE)
|
---|
43 | .;
|
---|
44 | .; - if HL7 date convert to FM date and set IVMFLD
|
---|
45 | .I IVMXREF["PID07" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
|
---|
46 | .;
|
---|
47 | .; - call VADPT routine to return DHCP demographics
|
---|
48 | .D DEM^VADPT,ADD^VADPT
|
---|
49 | .;
|
---|
50 | .; - execute code on the 1 node and get DHCP field for comparison
|
---|
51 | .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
|
---|
52 | .;
|
---|
53 | .; - special logic for phone number processing
|
---|
54 | .; - if different, then store the actual value received, then quit
|
---|
55 | .I IVMXREF["PID13",IVMFLD]"" D Q
|
---|
56 | ..S COMPPH1=$$CONVPH(IVMFLD)
|
---|
57 | ..S COMPPH2=$$CONVPH(IVMDHCP)
|
---|
58 | ..I COMPPH1'=COMPPH2 D STORE^IVMPREC9
|
---|
59 | .;
|
---|
60 | .; - if field from IVM does not equal DHCP field - store for uploading
|
---|
61 | .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | ;
|
---|
65 | ZPD ; - compare ZPD segment fields with DHCP fields
|
---|
66 | S IVMPIECE=$E(IVMXREF,4,5)
|
---|
67 | I $P(IVMSEG,HLFS,IVMPIECE)]"" D
|
---|
68 | .;
|
---|
69 | .; - set var to HL7 field
|
---|
70 | .S IVMFLD=$P(IVMSEG,HLFS,IVMPIECE)
|
---|
71 | .;
|
---|
72 | .; - if HL7 date convert to FM date
|
---|
73 | .I IVMXREF["ZPD09"!(IVMXREF["ZPD13")!(IVMXREF["ZPD32") S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
|
---|
74 | .;
|
---|
75 | .; - execute code on the 1 node and get DHCP field
|
---|
76 | .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
|
---|
77 | .;
|
---|
78 | .; - if field from IVM does not equal DHCP field - store for uploading
|
---|
79 | .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9 Q
|
---|
80 | .I IVMXREF["ZPD09"!(IVMXREF["ZPD31")!(IVMXREF["ZPD32") D STORE^IVMPREC9
|
---|
81 | I IVMXREF["ZPD32",$$AUTODOD^IVMLDEMD(DFN)
|
---|
82 | Q
|
---|
83 | ;
|
---|
84 | ;
|
---|
85 | ZGD ; - compare ZGD segment fields with DHCP fields
|
---|
86 | S IVMADFLG=0
|
---|
87 | S IVMPIECE=$E(IVMXREF,4,7)
|
---|
88 | I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
|
---|
89 | .;
|
---|
90 | .; - set var IVMFLD to incoming HL7 field
|
---|
91 | .I 'IVMADFLG S IVMFLD=$P(IVMSEG,HLFS,IVMPIECE)
|
---|
92 | .;
|
---|
93 | .; - ZGD06 as the ZGD address field containing 5 pieces seperated by HLECH (~)
|
---|
94 | .I IVMXREF["ZGD06" D
|
---|
95 | ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)),IVMPIECE=$E(IVMPIECE,3)
|
---|
96 | ..S IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE),IVMADFLG=1
|
---|
97 | ..I IVMFLD]"",IVMPIECE=4 S IVMFLD=$O(^DIC(5,"C",IVMFLD,0))
|
---|
98 | ..I IVMFLD]"",IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=$G(X)
|
---|
99 | .;
|
---|
100 | .; - if HL7 date convert to FM date
|
---|
101 | .I IVMXREF["ZGD08" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
|
---|
102 | .;
|
---|
103 | .; - execute code on the 1 node and get DHCP field
|
---|
104 | .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
|
---|
105 | .;
|
---|
106 | .; if field from IVM does not equal DHCP field - store for uploading
|
---|
107 | .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
|
---|
108 | Q
|
---|
109 | RF1 ; - compare RF1 segment fields with DHCP fields
|
---|
110 | S IVMPIECE=$E(IVMXREF,4),IVMADFLG=1
|
---|
111 | I $P(IVMSEG,HLFS,IVMPIECE)]"" D
|
---|
112 | .;if RF1 field is SEQ6, then parse subcomponents
|
---|
113 | .I IVMXREF["RF16" D Q
|
---|
114 | ..;- get data containing 4 pieces seperated by HLECH (~)
|
---|
115 | ..S IVMRFDAT=$P(IVMSEG,HLFS,6)
|
---|
116 | ..S IVMPIECE=$E(IVMXREF,5),IVMFLD=$P(IVMRFDAT,"~",IVMPIECE)
|
---|
117 | ..I IVMPIECE=2 S IVMFLD=$$ADDRCNV(IVMFLD)
|
---|
118 | ..Q:IVMFLD=""
|
---|
119 | ..D STORE^IVMPREC9
|
---|
120 | .I IVMXREF["RF17" D Q
|
---|
121 | ..;get address change date/tm field
|
---|
122 | ..S IVMFLD=$$FMDATE^HLFNC($P(IVMSEG,HLFS,7))
|
---|
123 | ..Q:IVMFLD=""
|
---|
124 | ..D STORE^IVMPREC9
|
---|
125 | ..; check for auto-upload
|
---|
126 | ..S NOUPDT=0,IVMDHCP=$P($G(^DPT(DFN,.11)),HLFS,13)
|
---|
127 | ..I IVMFLD]"",(IVMFLD'>IVMDHCP) S NOUPDT=1
|
---|
128 | ..I $$AUTOADDR^IVMLDEM6(DFN,1,NOUPDT)
|
---|
129 | Q
|
---|
130 | ;
|
---|
131 | ADDRCNV(ADDRSRC) ;convert Address Source from HL7 to DHCP format
|
---|
132 | ;
|
---|
133 | Q:$G(ADDRSRC)']"" ""
|
---|
134 | Q:ADDRSRC="USVAHEC" "HEC"
|
---|
135 | Q:ADDRSRC="USVAMC" "VAMC"
|
---|
136 | Q:ADDRSRC="USVAHBSC" "HBSC"
|
---|
137 | Q:ADDRSRC="USNCOA" "NCOA"
|
---|
138 | Q:ADDRSRC="USVABVA" "BVA"
|
---|
139 | Q:ADDRSRC="USVAINS" "VAINS"
|
---|
140 | Q:ADDRSRC="USPS" "USPS"
|
---|
141 | Q ""
|
---|
142 | CONVPH(PH) ;remove special chars/spaces from Phone number
|
---|
143 | Q $TR(PH," )(/#\-","")
|
---|