| 1 | IVMPREC7 ;ALB/SEK,RTK - ROUTINE TO PROCESS INCOMING (Z06 EVENT TYPE) HL7 MESSAGES ; 31 May 94
 | 
|---|
| 2 |  ;;2.0;INCOME VERIFICATION MATCH;**1,17,44,34,77**;21-OCT-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ; This routine will process (validate) batch ORU Means Test(event type
 | 
|---|
| 6 |  ; Z06) HL7 messages received from the IVM center.  Format of batch:
 | 
|---|
| 7 |  ;       BHS
 | 
|---|
| 8 |  ;       {MSH
 | 
|---|
| 9 |  ;        PID
 | 
|---|
| 10 |  ;        ZIC
 | 
|---|
| 11 |  ;        ZIR
 | 
|---|
| 12 |  ;        {ZDP
 | 
|---|
| 13 |  ;         ZIC
 | 
|---|
| 14 |  ;         ZIR
 | 
|---|
| 15 |  ;        }
 | 
|---|
| 16 |  ;        ZMT
 | 
|---|
| 17 |  ;       }
 | 
|---|
| 18 |  ;       BTS
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | EN ; entry point to validate Means Test messages 
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  F IVMDA=1:0 S IVMDA=$O(^TMP($J,IVMRTN,IVMDA)) Q:'IVMDA  S IVMSEG=$G(^(IVMDA,0)) I $E(IVMSEG,1,3)="MSH" D  Q:'IVMDA
 | 
|---|
| 23 |  .K HLERR
 | 
|---|
| 24 | EN1 .S HLMID=$P(IVMSEG,HLFS,10) ; message control id from MSH
 | 
|---|
| 25 |  .S IVMFLGC=0
 | 
|---|
| 26 |  .D GET I IVMSEG1'="PID" D  Q
 | 
|---|
| 27 |  ..S HLERR="Missing PID segment" D ACK^IVMPREC
 | 
|---|
| 28 |  .S DFN=$P($P(IVMSEG,HLFS,4),$E(HLECH))
 | 
|---|
| 29 |  .I ('DFN!(DFN'=+DFN)!('$D(^DPT(+DFN,0)))) D  Q
 | 
|---|
| 30 |  ..S HLERR="Invalid DFN" D ACK^IVMPREC
 | 
|---|
| 31 |  .I $P(IVMSEG,HLFS,20)'=$P(^DPT(DFN,0),"^",9) S HLERR="Couldn't match IVM SSN with DHCP SSN" D ACK^IVMPREC Q
 | 
|---|
| 32 |  .S IVMDAP=IVMDA ; save IVMDA for veteran PID segment
 | 
|---|
| 33 |  .;
 | 
|---|
| 34 |  .; check for veteran's ZIC and ZIR segments
 | 
|---|
| 35 |  .D GET I IVMSEG1'="ZIC" D  Q
 | 
|---|
| 36 |  ..S HLERR="Missing veteran's ZIC segment" D ACK^IVMPREC
 | 
|---|
| 37 |  .S IVMDGLY=$P(IVMSEG,"^",3) ; income year
 | 
|---|
| 38 |  .D GET I IVMSEG1'="ZIR" D  Q
 | 
|---|
| 39 |  ..S HLERR="Missing veteran's ZIR segment" D ACK^IVMPREC
 | 
|---|
| 40 |  .;
 | 
|---|
| 41 |  .; check for spouse's ZDP, ZIC, ZIR segments
 | 
|---|
| 42 |  .D GET I IVMSEG1'="ZDP" D  Q
 | 
|---|
| 43 |  ..S HLERR="Missing spouse's ZDP segment" D ACK^IVMPREC
 | 
|---|
| 44 |  .S IVMDAS=IVMDA ; save IVMDA for spouse ZDP segment
 | 
|---|
| 45 |  .D GET I IVMSEG1'="ZIC" D  Q
 | 
|---|
| 46 |  ..S HLERR="Missing spouse's ZIC segment" D ACK^IVMPREC
 | 
|---|
| 47 |  .D GET I IVMSEG1'="ZIR" D  Q
 | 
|---|
| 48 |  ..S HLERR="Missing spouse's ZIR segment" D ACK^IVMPREC
 | 
|---|
| 49 |  .;
 | 
|---|
| 50 |  .; check for dependent children's ZDP, ZIC, ZIR segments and ZMT segment
 | 
|---|
| 51 |  .K IVMERR
 | 
|---|
| 52 |  .S IVMFLG7=0
 | 
|---|
| 53 |  .F  D  Q:$D(IVMERR)!(IVMSEG1="ZMT")
 | 
|---|
| 54 |  ..D GET I IVMSEG1'="ZDP"&(IVMSEG1'="ZMT") D  Q
 | 
|---|
| 55 |  ...S HLERR="Missing child's ZDP segment or ZMT segment",IVMERR="" D ACK^IVMPREC
 | 
|---|
| 56 |  ..I IVMSEG1="ZMT" D  Q
 | 
|---|
| 57 |  ...S:$P(IVMSEG,"^",4)=HLQ IVMFLG7=1 ; delete MT if status is HLQ
 | 
|---|
| 58 |  ...S IVMDAZ=IVMDA ; ZMT segment ivmda
 | 
|---|
| 59 |  ..I $P(IVMSEG,"^",2)']""!($P(IVMSEG,"^",3)']"")!($P(IVMSEG,"^",4)']"") D  Q
 | 
|---|
| 60 |  ... S HLERR="Missing child data from ZDP segment",IVMERR="" D ACK^IVMPREC
 | 
|---|
| 61 |  ..D GET I IVMSEG1'="ZIC" D  Q
 | 
|---|
| 62 |  ...S HLERR="Missing child's ZIC segment",IVMERR="" D ACK^IVMPREC
 | 
|---|
| 63 |  ..D GET I IVMSEG1'="ZIR" D  Q
 | 
|---|
| 64 |  ...S HLERR="Missing child's ZIR segment",IVMERR="" D ACK^IVMPREC
 | 
|---|
| 65 |  ..S IVMFLGC=IVMFLGC+1 ; # of children
 | 
|---|
| 66 |  .;
 | 
|---|
| 67 |  .Q:$D(IVMERR)&(IVMSEG1'="MSH")
 | 
|---|
| 68 |  .G EN1:IVMSEG1="MSH"
 | 
|---|
| 69 |  .;
 | 
|---|
| 70 |  .; get primary means test
 | 
|---|
| 71 |  .; ivmmtdt - means test date
 | 
|---|
| 72 |  .; dgly - income year
 | 
|---|
| 73 |  .; if Means Test not in DHCP don't upload IVM Means Test
 | 
|---|
| 74 |  .S IVMMTDT=$$FMDATE^HLFNC($P(IVMSEG,HLFS,3)) ; means test date from ZMT segment
 | 
|---|
| 75 |  .S DGLY=$$LYR^DGMTSCU1(IVMMTDT)
 | 
|---|
| 76 |  .S IVMMTIEN=+$$LST^DGMTU(DFN,IVMMTDT) ; primary means test IEN
 | 
|---|
| 77 |  .;
 | 
|---|
| 78 |  .I IVMFLG7 D ^IVMUM7 Q  ; delete means test
 | 
|---|
| 79 |  .;
 | 
|---|
| 80 |  .S (IVMMT31,DGMTP)=$G(^DGMT(408.31,IVMMTIEN,0)) ; dgmtp is event driver variable
 | 
|---|
| 81 |  .I $P(IVMMT31,"^")'=IVMMTDT D  Q
 | 
|---|
| 82 |  ..S Y=IVMMTDT X ^DD("DD")
 | 
|---|
| 83 |  ..S IVMTEXT(6)="Means Test of "_Y_" not in DHCP."
 | 
|---|
| 84 |  ..D ERRBULL,MAIL^IVMUFNC()
 | 
|---|
| 85 |  ..S HLERR="Means test not in DHCP" D ACK^IVMPREC
 | 
|---|
| 86 |  ..Q
 | 
|---|
| 87 |  .I $P(IVMMT31,"^",23)=2 S Y=IVMMTDT X ^DD("DD") S HLERR="2nd means test sent for "_Y D ACK^IVMPREC Q
 | 
|---|
| 88 |  .;
 | 
|---|
| 89 |  .; do not upload IVM means test if primary means test status is
 | 
|---|
| 90 |  .; 3-no longer required
 | 
|---|
| 91 |  .; or if hardship case
 | 
|---|
| 92 |  .S IVMSTAT=$P(IVMMT31,"^",3)
 | 
|---|
| 93 |  .I IVMSTAT=3 S HLERR="NOT UPLOADED no longer required" D ACK^IVMPREC Q
 | 
|---|
| 94 |  .I $P(IVMMT31,"^",20)=1 S HLERR="NOT UPLOADED hardship case" D ACK^IVMPREC Q
 | 
|---|
| 95 |  .D ^IVMUM1 ; upload means test
 | 
|---|
| 96 |  .I $D(HLERR) D ACK^IVMPREC
 | 
|---|
| 97 |  .;
 | 
|---|
| 98 |  .; cleanup
 | 
|---|
| 99 |  .K DGLY,DGMTP,IVMDAP,IVMDAS,IVMDAZ,IVMDGLY,IVMFLG7,IVMFLGC,IVMMT31,IVMMTDT,IVMMTIEN,IVMSEG,IVMSEG1,IVMSTAT,IVMTEXT,XMSUB
 | 
|---|
| 100 |  .Q
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | GET ; get HL7 segment from ^HL
 | 
|---|
| 104 |  S IVMDA=$O(^TMP($J,IVMRTN,+IVMDA)),IVMSEG=$G(^(+IVMDA,0))
 | 
|---|
| 105 |  S IVMSEG1=$E(IVMSEG,1,3)
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | ERRBULL ; build mail message for transmission to IVM mail group notifying site
 | 
|---|
| 109 |  ; of upload error.
 | 
|---|
| 110 |  S IVMPAT=$$PT^IVMUFNC4(DFN)
 | 
|---|
| 111 |  S XMSUB="IVM - MEANS TEST UPLOAD"
 | 
|---|
| 112 |  S IVMTEXT(1)="The following error occured when an Income Verification Match"
 | 
|---|
| 113 |  S IVMTEXT(2)="verified Means Test was being uploaded for the following patient:"
 | 
|---|
| 114 |  S IVMTEXT(3)=" "
 | 
|---|
| 115 |  S IVMTEXT(4)="    NAME:     "_$P(IVMPAT,"^")
 | 
|---|
| 116 |  S IVMTEXT(5)="    ID:       "_$P(IVMPAT,"^",2)
 | 
|---|
| 117 |  S IVMTEXT(6)="    ERROR:    "_IVMTEXT(6)
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 | ORF ;entry point for Means Test Signature Z06 msgs.
 | 
|---|
| 120 |  I $G(HLFS)="" S HLFS="^"
 | 
|---|
| 121 |  I $G(HLECH)="" S HLECH="~"
 | 
|---|
| 122 |  F IVMDA=0:0 S IVMDA=$O(^TMP($J,IVMRTN,IVMDA)) Q:'IVMDA  S IVMSEG=$G(^(IVMDA,0)) I $E(IVMSEG,1,3)="MSH" D  Q:'IVMDA
 | 
|---|
| 123 |  .K HLERR
 | 
|---|
| 124 |  .S HLMID=$P(IVMSEG,HLFS,10) ; message control id from MSH
 | 
|---|
| 125 |  .S IVMFLGC=0
 | 
|---|
| 126 |  .D GET I IVMSEG1'="PID" D  Q
 | 
|---|
| 127 |  ..S HLERR="Missing PID segment" D ACK^IVMPREC
 | 
|---|
| 128 |  .S DFN=$P($P(IVMSEG,HLFS,4),$E(HLECH))
 | 
|---|
| 129 |  .I ('DFN!(DFN'=+DFN)!('$D(^DPT(+DFN,0)))) D  Q
 | 
|---|
| 130 |  ..S HLERR="Invalid DFN" D ACK^IVMPREC
 | 
|---|
| 131 |  .I $P(IVMSEG,HLFS,20)'=$P(^DPT(DFN,0),"^",9) S HLERR="Couldn't match IVMSSN with DHCP SSN" D ACK^IVMPREC Q
 | 
|---|
| 132 |  .S IVMDAP=IVMDA ; save IVMDA for veteran PID segment
 | 
|---|
| 133 |  .D GET I IVMSEG1'="ZMT" D  Q
 | 
|---|
| 134 |  ..S HLERR="Missing ZMT segment" D ACK^IVMPREC
 | 
|---|
| 135 |  .; IVMMTDT - means test date
 | 
|---|
| 136 |  .; DGLY - income year
 | 
|---|
| 137 |  .; if Means Test not in DHCP don't upload IVM Means Test
 | 
|---|
| 138 |  .S IVMMTDT=$$FMDATE^HLFNC($P(IVMSEG,HLFS,3)) ; means test date from ZMT  segment
 | 
|---|
| 139 |  .S DGLY=$$LYR^DGMTSCU1(IVMMTDT)
 | 
|---|
| 140 |  .; get means test to be updated
 | 
|---|
| 141 |  .N UPMTS
 | 
|---|
| 142 |  .S MTDATE=-IVMMTDT,IVMMTIEN="",MTFND=0
 | 
|---|
| 143 |  .F  S IVMMTIEN=$O(^DGMT(408.31,"AID",1,DFN,MTDATE,IVMMTIEN),-1) Q:MTFND!(IVMMTIEN="")  D
 | 
|---|
| 144 |  ..I $$Z06MT^EASPTRN1(IVMMTIEN) Q    ;EDB Z06 - Don't use this one
 | 
|---|
| 145 |  ..; match site completing in case multiple tests for same date
 | 
|---|
| 146 |  ..I $P(IVMSEG,HLFS,23)=$P(^DGMT(408.31,IVMMTIEN,2),HLFS,5) S UPMTS=IVMMTIEN,MTFND=1 Q
 | 
|---|
| 147 |  .S (IVMMT31,DGMTP)=$G(^DGMT(408.31,UPMTS,0)) ; DGMTP is event driver  variable
 | 
|---|
| 148 |  .I $P(IVMMT31,"^")'=IVMMTDT D  Q
 | 
|---|
| 149 |  ..S Y=IVMMTDT X ^DD("DD")
 | 
|---|
| 150 |  ..S IVMTEXT(6)="Means Test of "_Y_" not in DHCP."
 | 
|---|
| 151 |  ..D ERRBULL,MAIL^IVMUFNC()
 | 
|---|
| 152 |  ..S HLERR="Means test not in DHCP" D ACK^IVMPREC
 | 
|---|
| 153 |  ..Q
 | 
|---|
| 154 |  .I $P(IVMMT31,"^",23)=2 S Y=IVMMTDT X ^DD("DD") S HLERR="2nd means test  sent for "_Y D ACK^IVMPREC Q
 | 
|---|
| 155 |  .; do not upload IVM means test if primary means test status is
 | 
|---|
| 156 |  .; 3-no longer required
 | 
|---|
| 157 |  .; or if hardship case
 | 
|---|
| 158 |  .S IVMSTAT=$P(IVMMT31,"^",3)
 | 
|---|
| 159 |  .I IVMSTAT=3 S HLERR="NOT UPLOADED no longer required" D ACK^IVMPREC Q
 | 
|---|
| 160 |  .I $P(IVMMT31,"^",20)=1 S HLERR="NOT UPLOADED hardship case" D ACK^IVMPREC Q
 | 
|---|
| 161 |  .;get MT signature and date/time edited info, update means test
 | 
|---|
| 162 |  .N DATA
 | 
|---|
| 163 |  .S DATA(.29)=$P(IVMSEG,HLFS,28),DATA(2.02)=$$FMDATE^HLFNC($P(IVMSEG,HLFS,26)) I $D(DATA(.29)) D
 | 
|---|
| 164 |  ..I $$UPD^DGENDBS(408.31,UPMTS,.DATA)
 | 
|---|
| 165 |  .I '$D(HLERR) D ACK^IVMPREC
 | 
|---|
| 166 |  .;
 | 
|---|
| 167 |  .; cleanup
 | 
|---|
| 168 |  .K DGLY,DGMTP,IVMDAP,IVMDAS,IVMDAZ,IVMDGLY,IVMFLG7,IVMFLGC,IVMMT31,IVMMTDT,IVMMTIEN,IVMSEG,IVMSEG1,IVMSTAT,IVMTEXT,XMSUB,FMDATE,MTDATE
 | 
|---|
| 169 |  .Q
 | 
|---|
| 170 |  Q
 | 
|---|