| [613] | 1 | IVMPTRN9 ;ALB/KCL/CN/BRM,TDM,EG - HL7 FULL DATA TRANSMISSION (Z07) BUILDER (CONTINUED) ; 4/10/06 4:36pm | 
|---|
|  | 2 | ;;2.0;INCOME VERIFICATION MATCH;**9,11,19,12,21,17,46,50,53,34,49,58,79,99,116,105**; 21-OCT-94;Build 2 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | GOTO ; place to break up the routine | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ; create (ZIO) Inpatient/Outpatient segment for veteran | 
|---|
|  | 8 | S N101015=$G(^DPT(DFN,1010.15)) | 
|---|
|  | 9 | S ZIOSEG="ZIO^1^"_$$EN^IVMUFNC1(DFN,IVMMTDT,.IVMQUERY)  ;seq 1-3 | 
|---|
|  | 10 | S ZIOSEG=ZIOSEG_"^"_$$LTD^IVMUFNC(DFN,.IVMQUERY)        ;seq 4 | 
|---|
|  | 11 | S X=$P(N101015,"^",9),$P(ZIOSEG,U,6)=$S(X=0:"N",X=1:"Y",1:HLQ)   ;Appt Request | 
|---|
|  | 12 | S X=$P(N101015,"^",11),$P(ZIOSEG,U,7)=$S(X]"":$$HLDATE^HLFNC(X),1:HLQ) ;Appt Request Date | 
|---|
|  | 13 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=ZIOSEG | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; create (NTE) Notes and Comments segment | 
|---|
|  | 16 | D NTE^IVMUFNC4(DFN,.IVMNTE,IVMMTDT) | 
|---|
|  | 17 | I '$D(IVMNTE) D | 
|---|
|  | 18 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)="NTE^1" | 
|---|
|  | 19 | I $D(IVMNTE) D | 
|---|
|  | 20 | .; - get notes and comments | 
|---|
|  | 21 | .F IVMSUB=0:0 S IVMSUB=$O(IVMNTE(IVMSUB)) Q:'IVMSUB  D | 
|---|
|  | 22 | ..S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=IVMNTE(IVMSUB) | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | ; create (IN1) Insurance segment(s) for all active insurance | 
|---|
|  | 25 | K ^TMP("VAFIN1",$J) | 
|---|
|  | 26 | D EN^VAFHLIN1(DFN,"1,4,5,7,8,9,12,13,15,16,17,28,36") | 
|---|
|  | 27 | F IVMSUB=0:0 S IVMSUB=$O(^TMP("VAFIN1",$J,IVMSUB)) Q:'IVMSUB  D | 
|---|
|  | 28 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=^TMP("VAFIN1",$J,+IVMSUB,0) | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ;find if the deletion flags were set in the IVM Patient file, and if so, should the deletion indicators be sent? | 
|---|
|  | 31 | F I="RX","MT","HARDSHIP","DATE OF TEST","LTC" S DELETE(I)="" | 
|---|
|  | 32 | S IVMPIEN=$$FIND^IVMPLOG(DFN,($E(IVMMTDT,1,3)-1)) | 
|---|
|  | 33 | I IVMPIEN D | 
|---|
|  | 34 | .S IVMPNODE=$G(^IVM(301.5,IVMPIEN,0)) | 
|---|
|  | 35 | .I $P(IVMPNODE,"^",8)!$P(IVMPNODE,"^",9)!$P(IVMPNODE,"^",10)!$P(IVMPNODE,"^",11) S DELETE("SET")=1 | 
|---|
|  | 36 | .;was the MT deletion flag set, and if so verify that there is no completed MT | 
|---|
|  | 37 | .I $P(IVMPNODE,"^",8),(TESTTYPE'=1)!(TESTCODE="")!("ACGP"'[TESTCODE) S DELETE("DATE OF TEST")=$P(IVMPNODE,"^",8),DELETE("MT")=1 | 
|---|
|  | 38 | .; | 
|---|
|  | 39 | .;was the hardship deletion flag set, and if so verify that there is no completed hardship | 
|---|
|  | 40 | .I $P(IVMPNODE,"^",10),'HARDSHIP D | 
|---|
|  | 41 | ..S:('DELETE("DATE OF TEST")) DELETE("DATE OF TEST")=$P(IVMPNODE,"^",10) | 
|---|
|  | 42 | ..S DELETE("HARDSHIP")=1 | 
|---|
|  | 43 | ; | 
|---|
|  | 44 | ; create (ZMT) Means Test segment | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | S SEQS=$S(TESTTYPE=1:"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,21,22,23,24,25,26,28,29,30",1:"1,17") | 
|---|
|  | 47 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^IVMCZMT(DFN,SEQS,IVMMTDT,1,1,.DELETE,1) | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; create (ZMT) Rx-Copay Test segment | 
|---|
|  | 50 | I IVMPIEN D | 
|---|
|  | 51 | .;was the RX deletion flag set, and if so verify that there is no completed test | 
|---|
|  | 52 | .I $P(IVMPNODE,"^",9),(TESTTYPE'=2)!(TESTCODE="")!("EM"'[TESTCODE) S DELETE("DATE OF TEST")=$P(IVMPNODE,"^",9),DELETE("RX")=1 | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | N IVMCPDT,CPTST,LINK,CPDATE | 
|---|
|  | 55 | ;should be ok to get the last co-pay test for this year vs. looking from the IVMMTDT backwards | 
|---|
|  | 56 | ;as long as the means test date is in the current year | 
|---|
|  | 57 | S CPTST=$$LST^DGMTU(DFN,$E(IVMIY,1,3)+1_1231,2) | 
|---|
|  | 58 | I CPTST D | 
|---|
|  | 59 | . S CPDATE=$P(CPTST,U,2) | 
|---|
|  | 60 | . S LINK=$P($G(^DGMT(408.31,+CPTST,2)),U,6) | 
|---|
|  | 61 | . I TESTTYPE=1,$E(CPDATE,1,3)=$E(IVMMTDT,1,3) D | 
|---|
|  | 62 | . . ;if you have a means test and a linked co-pay test then send both (the means test | 
|---|
|  | 63 | . . ;was already sent from above) | 
|---|
|  | 64 | . . ;if means and copay are not linked, don't send the co-pay test (the means test | 
|---|
|  | 65 | . . ;was already sent from above) | 
|---|
|  | 66 | . . I LINK=+$$LST^DGMTU(DFN,IVMMTDT,1) S TESTTYPE=2,(IVMCPDT,IVMMTDT)=CPDATE | 
|---|
|  | 67 | . . Q | 
|---|
|  | 68 | . Q | 
|---|
|  | 69 | ;always send the 2nd ZMT segment | 
|---|
|  | 70 | S SEQS="1,17" | 
|---|
|  | 71 | ;can also send a co-pay test if there is no means test (see module GETTYPE) | 
|---|
|  | 72 | I TESTTYPE=2 D | 
|---|
|  | 73 | . S SEQS="1,2,3,4,5,6,7,9,10,12,15,16,17,18,21,22,25,26" | 
|---|
|  | 74 | . Q | 
|---|
|  | 75 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^IVMCZMT(DFN,SEQS,IVMMTDT,2,2,.DELETE,1) | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | ; create (ZMT) Long Term Care Copay Exemption Test segment | 
|---|
|  | 78 | I IVMPIEN D | 
|---|
|  | 79 | .; set deletion indicators if LTC test deletion should be transmitted | 
|---|
|  | 80 | .I $P(IVMPNODE,"^",11) S DELETE("LTC")=1 S:('DELETE("DATE OF TEST")) DELETE("DATE OF TEST")=$P(IVMPNODE,"^",11) | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | S SEQS="1,2,3,4,5,7,9,10,12,16,17,18,22,25" | 
|---|
|  | 83 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^IVMCZMT(DFN,SEQS,IVMMTDT,4,4,.DELETE,1) | 
|---|
|  | 84 | ; | 
|---|
|  | 85 | ;if the deletion flags were set in the IVM Patient file, unset them | 
|---|
|  | 86 | I $G(DELETE("SET")) D | 
|---|
|  | 87 | .N DATA | 
|---|
|  | 88 | .S DATA(.08)="",DATA(.09)="",DATA(.1)="",DATA(.11)="" | 
|---|
|  | 89 | .I $$UPD^DGENDBS(301.5,IVMPIEN,.DATA) | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | ; create (ZBT) Beneficiary Travel segment based on last BT Claim | 
|---|
|  | 92 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZBT($$BTCLM^IVMUFNC4(DFN),"1,2,3,4,7") | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | ; create (ZFE) Fee Basis segment(s) | 
|---|
|  | 95 | D EN^FBHLZFE(DFN,"1,2,3,4,5") | 
|---|
|  | 96 | F IVMSUB=0:0 S IVMSUB=+$O(FBZFE(IVMSUB)) Q:'IVMSUB  D | 
|---|
|  | 97 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(FBZFE(+IVMSUB)) | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ; create (ZSP) Service Period segment | 
|---|
|  | 100 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZSP(DFN,1,1) | 
|---|
|  | 101 | ; | 
|---|
|  | 102 | ; optionally create (OBX) segment for Patient Sensitivity Flag | 
|---|
|  | 103 | K OBXTMP | 
|---|
|  | 104 | S OBXCNT=0,GETCUR=$$FINDSEC^DGENSEC(DFN) | 
|---|
|  | 105 | I GETCUR,$$GET^DGENSEC(GETCUR,.DGSEC) D | 
|---|
|  | 106 | .Q:(DGSEC("LEVEL")'=1)&(DGSEC("LEVEL")'=0) | 
|---|
|  | 107 | .S OBXTMP(2)="CE",OBXTMP(3)="38.1"_$E(HL("ECH"))_"SECURITY LOG" | 
|---|
|  | 108 | .S:DGSEC("LEVEL") OBXTMP(5)="Y"_$E(HL("ECH"))_"YES"_$E(HL("ECH"))_"HL70136" | 
|---|
|  | 109 | .S:'DGSEC("LEVEL") OBXTMP(5)="N"_$E(HL("ECH"))_"NO"_$E(HL("ECH"))_"HL70136" | 
|---|
|  | 110 | .S OBXTMP(11)="R",OBXTMP(14)=DGSEC("DATETIME") | 
|---|
|  | 111 | .S OBXTMP(16)="" I $G(DGSEC("SOURCE"))'="" D | 
|---|
|  | 112 | ..S $P(OBXTMP(16),$E(HL("ECH")),14)=$E(HL("ECH"),4)_DGSEC("SOURCE") | 
|---|
|  | 113 | .S IVMCT=IVMCT+1,OBXCNT=OBXCNT+1 | 
|---|
|  | 114 | .S ^TMP("HLS",$J,IVMCT)=$$EN^VAFHLOBX(.OBXTMP,OBXCNT,"2,3,5,11,14,16") | 
|---|
|  | 115 | .I $G(OBXTMP(16))'="" S $P(^TMP("HLS",$J,IVMCT),"^",17)=$G(OBXTMP(16)) | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | ; create (OBX) segment for NTR | 
|---|
|  | 118 | ; CALL PIMS API TO GET NTRARRY OF NTR DATA | 
|---|
|  | 119 | S GETCUR=$$ENRGET^DGNTAPI1(DFN) | 
|---|
|  | 120 | I GETCUR D NTROBX^IVMPTRNA(.DGNTARR) | 
|---|
|  | 121 | I $D(NTROBX) D | 
|---|
|  | 122 | . S IVMCT=IVMCT+1,OBXCNT=OBXCNT+1 | 
|---|
|  | 123 | . S ^TMP("HLS",$J,IVMCT)=$$EN^VAFHLOBX(.NTROBX,OBXCNT,"2,3,5,11,12,14,15,16,17") | 
|---|
|  | 124 | . I $G(NTROBX(16))'="" S $P(^TMP("HLS",$J,IVMCT),"^",17)=$G(NTROBX(16)) | 
|---|
|  | 125 | . K NTROBX | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | ; create (RF1) segment | 
|---|
|  | 128 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$RF1^IVMPTRNA(DFN,"SAD") | 
|---|
|  | 129 | F RF1TYP="CAD","CPH","PNO","EAD" D   ;Create Optional RF1 Segments | 
|---|
|  | 130 | . S RF1SEG=$$RF1^IVMPTRNA(DFN,RF1TYP) Q:RF1SEG="" | 
|---|
|  | 131 | . S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=RF1SEG | 
|---|
|  | 132 | ; | 
|---|
|  | 133 | Q | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | GETTYPE(DFN,IVMMTDT,CODE,HARDSHIP,ACTVIEN) ; | 
|---|
|  | 136 | ;Determines the type of test to include in the Z10.  HEC wants only the | 
|---|
|  | 137 | ;test that they would consider primary,i.e., preference given to a comptleted means test, even if not currently in effect. | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | ;Input: | 
|---|
|  | 140 | ;  DFN | 
|---|
|  | 141 | ;  IVMMTDT -date to be the search for the test | 
|---|
|  | 142 | ;Output: | 
|---|
|  | 143 | ;  Function value - type of test to send in Z10 | 
|---|
|  | 144 | ;  CODE - status code of test (pass by reference) | 
|---|
|  | 145 | ;  HARDSHIP - hardship indicator (pass by reference) | 
|---|
|  | 146 | ;  ACTVIEN - ien of test that should have the associated Income Relations (pass by reference) | 
|---|
|  | 147 | ; | 
|---|
|  | 148 | N TESTTYPE,MTNODE,RXNODE,NODE0,NODE2 | 
|---|
|  | 149 | S TESTTYPE=1 | 
|---|
|  | 150 | S (HARDSHIP,CODE,ACTVIEN)="" | 
|---|
|  | 151 | Q:'$G(IVMMTDT) TESTTYPE | 
|---|
|  | 152 | Q:'$G(DFN) TESTTYPE | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | S MTNODE=$$LST^DGMTU(DFN,IVMMTDT,1) I $E($P(MTNODE,"^",2),1,3)'=$E(IVMMTDT,1,3) S MTNODE="" | 
|---|
|  | 155 | S RXNODE=$$LST^DGMTU(DFN,IVMMTDT,2) I $E($P(RXNODE,"^",2),1,3)'=$E(IVMMTDT,1,3) S RXNODE="" | 
|---|
|  | 156 | ; | 
|---|
|  | 157 | I MTNODE="" S MTNODE=$$FUT^DGMTU(DFN,"",1) I $E($P(MTNODE,"^",2),1,3)'=$E(IVMMTDT,1,3) S MTNODE="" | 
|---|
|  | 158 | I RXNODE="" S RXNODE=$$FUT^DGMTU(DFN,"",2) I $E($P(RXNODE,"^",2),1,3)'=$E(IVMMTDT,1,3) S RXNODE="" | 
|---|
|  | 159 | D | 
|---|
|  | 160 | .;determine which test has the associated income relations | 
|---|
|  | 161 | .; | 
|---|
|  | 162 | .I +MTNODE S CODE=$P(MTNODE,"^",4) I CODE'="",("ACGPR"[CODE) S ACTVIEN=+MTNODE Q | 
|---|
|  | 163 | .I +RXNODE S CODE=$P(RXNODE,"^",4) I CODE'="",("EMI"[CODE) S ACTVIEN=+RXNODE Q | 
|---|
|  | 164 | .I +MTNODE S ACTVIEN=+MTNODE Q | 
|---|
|  | 165 | .I +RXNODE S ACTVIEN=+RXNODE Q | 
|---|
|  | 166 | I ACTVIEN,+MTNODE,+RXNODE D TRANSFER^DGMTU4(DFN,$S((ACTVIEN=+MTNODE):+RXNODE,1:+MTNODE),ACTVIEN) | 
|---|
|  | 167 | ; | 
|---|
|  | 168 | ;now find the primary test | 
|---|
|  | 169 | I '(+MTNODE) G CHKCOPAY | 
|---|
|  | 170 | S CODE=$P(MTNODE,"^",4) | 
|---|
|  | 171 | S HARDSHIP=$P($G(^DGMT(408.31,+MTNODE,0)),"^",20) | 
|---|
|  | 172 | I (CODE="")!("ACGP"'[CODE) S NODE2=$G(^DGMT(408.31,+MTNODE,2)),CODE=$$GETCODE^DGMTH($P(NODE2,"^",3)) I (CODE="")!("ACGP"'[CODE) G CHKCOPAY | 
|---|
|  | 173 | ; | 
|---|
|  | 174 | G QGETTYPE | 
|---|
|  | 175 | ; | 
|---|
|  | 176 | CHKCOPAY ; | 
|---|
|  | 177 | I '(+RXNODE) G QGETTYPE | 
|---|
|  | 178 | S CODE=$P(RXNODE,"^",4) | 
|---|
|  | 179 | I (CODE="")!("EM"'[CODE) S NODE2=$G(^DGMT(408.31,+RXNODE,2)),CODE=$$GETCODE^DGMTH($P(NODE2,"^",3)) I (CODE="")!("EM"'[CODE) G QGETTYPE | 
|---|
|  | 180 | S TESTTYPE=2 | 
|---|
|  | 181 | ; | 
|---|
|  | 182 | QGETTYPE ; | 
|---|
|  | 183 | Q TESTTYPE | 
|---|
|  | 184 | ; | 
|---|
|  | 185 | FILTER(DFN) ; address transmission filter | 
|---|
|  | 186 | ; Check Bad Address Indicator for a known bad address and | 
|---|
|  | 187 | ; Scrutinize the Street Address line 1 field for known bad address | 
|---|
|  | 188 | ; strings based on functionality currently in place in HEC Legacy. | 
|---|
|  | 189 | ; | 
|---|
|  | 190 | ;  Input: DFN - ien of the Patient (#2) file | 
|---|
|  | 191 | ; Output:   0 - filter passed (ok to transmit address) | 
|---|
|  | 192 | ;           1 - filter failed (do not transmit address) | 
|---|
|  | 193 | ; | 
|---|
|  | 194 | N VAPA | 
|---|
|  | 195 | Q:'$G(DFN) 1  ;DFN missing | 
|---|
|  | 196 | Q:$$BADADR^DGUTL3(DFN) 1  ;check Bad Address Indicator | 
|---|
|  | 197 | D ADD^VADPT  ;get patient address | 
|---|
|  | 198 | ; Street Address Line 1 or Zip Code is <null> | 
|---|
|  | 199 | Q:($G(VAPA(1))="")!($P($G(VAPA(11)),"^")="") 1 | 
|---|
|  | 200 | ; St Addr Line 1 contains 'UNKNOWN', 'HOMELESS', or 'ADDRESS' | 
|---|
|  | 201 | Q:(VAPA(1)["UNKNOWN")!(VAPA(1)["HOMELESS")!(VAPA(1)["ADDRESS") 1 | 
|---|
|  | 202 | ; The first two characters of the address is equal to '**' | 
|---|
|  | 203 | Q:$E(VAPA(1),1,2)="**" 1 | 
|---|
|  | 204 | ; passed all address filters - ok to send | 
|---|
|  | 205 | Q 0 | 
|---|