| 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," )(/#\-","") | 
|---|