| 1 | IVMPTRN8 ;ALB/RKS/PDJ/BRM,TDM - HL7 FULL DATA TRANSMISSION (Z07) BUILDER ; 4/10/06 4:34pm | 
|---|
| 2 | ;;2.0;INCOME VERIFICATION MATCH;**9,11,19,12,21,17,24,36,37,47,48,42,34,77,76,75,79,85,89,98,56,97,104,113,109,114,105**; 21-OCT-94;Build 2 | 
|---|
| 3 | ; | 
|---|
| 4 | ; | 
|---|
| 5 | BUILD(DFN,IVMMTDT,IVMCT,IVMQUERY) ; -- | 
|---|
| 6 | ;  Description: This entry point will be used to create an HL7 | 
|---|
| 7 | ;  "Full Data Transmission" message for a patient. | 
|---|
| 8 | ; | 
|---|
| 9 | ;  Input: | 
|---|
| 10 | ;        DFN - Patient IEN | 
|---|
| 11 | ;    IVMMTDT - date of the patient's Means Test or Copay Test | 
|---|
| 12 | ;      IVMCT - count of hl7 segments transmitted, pass by reference | 
|---|
| 13 | ;   IVMQUERY - array passed in by reference where | 
|---|
| 14 | ;    IVMQUERY("LTD") -- # of the QUERY that is currently open or | 
|---|
| 15 | ;                undefined, zero, or null if no QUERY opened for | 
|---|
| 16 | ;                last treatment date | 
|---|
| 17 | ;    IVMQUERY("OVIS") -- # of the QUERY that is currently open or | 
|---|
| 18 | ;                undefined, zero, or null if no QUERY opened for | 
|---|
| 19 | ;                finding outpatient visits | 
|---|
| 20 | ; | 
|---|
| 21 | ;  HL7 variables as defined by call to INIT^IVMUFNC: | 
|---|
| 22 | ;      HLEVN - HL7 message event counter | 
|---|
| 23 | ;      HLSDT - a flag that indicates that the data to be sent is | 
|---|
| 24 | ;              stored in the ^TMP("HLS") global array. | 
|---|
| 25 | ; | 
|---|
| 26 | ;  The following variables returned by the INIT^HLTRANS entry point: | 
|---|
| 27 | ;    HLNDAP - Non-DHCP Application Pointer from file 770 | 
|---|
| 28 | ;   HLNDAP0 - Zero node from file 770 corresponding to HLNDAP | 
|---|
| 29 | ;     HLDAP - DHCP Application Pointer from file 771 | 
|---|
| 30 | ;     HLDAN - The DHCP Application Name (.01 field, file 771) for HLDAP | 
|---|
| 31 | ;     HLPID - HL7 processing ID from file 770 | 
|---|
| 32 | ;     HLVER - HL7 version number from file 770 | 
|---|
| 33 | ;      HLFS - HL7 Field Separator from the 'FS' node of file 771 | 
|---|
| 34 | ;     HLECH - HL7 Encoding Characters from the 'EC' node of file 771 | 
|---|
| 35 | ;       HLQ - Double quotes ("") for use in building HL7 segments | 
|---|
| 36 | ;     HLERR - if an error is encountered, an error message is returned | 
|---|
| 37 | ;             in the HLERR variable. | 
|---|
| 38 | ;      HLDA - the internal entry number for the entry created in | 
|---|
| 39 | ;             file #772. | 
|---|
| 40 | ;      HLDT - transmission date/time (associated with the entry in file | 
|---|
| 41 | ;             #772 identified by HLDA) in internal VA FileMan format. | 
|---|
| 42 | ;     HLDT1 - the same transmission date/time as the HLDT variable, | 
|---|
| 43 | ;             only in HL7 format. | 
|---|
| 44 | ; | 
|---|
| 45 | ; Output: | 
|---|
| 46 | ;  ^TMP("HLS",$J,IVMCT) - global array containing all segments of the HL7 message that the VistA application wishes to send.  The HLSDT variable is defined above and the IVMCT variable is a sequential number incremented by 1. | 
|---|
| 47 | ; | 
|---|
| 48 | ; | 
|---|
| 49 | N DGINC,DGIR,DGREL,I,IVMNTE,IVMPID,IVMSUB,IVMZRD,VAFPID,VAFZEL,FBZFE,IVMZCD,DELETE,NODE,IVMPIEN,TEST,IVMPNODE,TESTTYPE,SEQS,TESTCODE,HARDSHIP,ACTVIEN,IVMZMH,IVMSEQ | 
|---|
| 50 | N EDBMTZ06,ZMHSQ,SETID,OBXCNT,OBXTMP,DGSEC,SEGOCC,ZIOSEG,N101015,RF1SEG | 
|---|
| 51 | ; | 
|---|
| 52 | ; create (PID) Patient Identification segment | 
|---|
| 53 | ; **** Add ICN to 2nd piece PID segment for MPI@HEC. | 
|---|
| 54 | S IVMCMOR="1,2",IVMSEQ=1 | 
|---|
| 55 | ; check to see if site is a legacy site.  If not add ICN to PID segment. | 
|---|
| 56 | I '$D(^PPP(1020.128,"AC",$P($$SITE^VASITE,"^",3))) D | 
|---|
| 57 | . I +$$GETICN^MPIF001(DFN)>0,($$IFLOCAL^MPIF001(DFN)=0) S IVMSEQ=IVMSEQ_",2",IVMCMOR="1,2,3"  ;add SEQ 1 and 2 for PID | 
|---|
| 58 | ; | 
|---|
| 59 | ; send SSN indicating pseudo | 
|---|
| 60 | ; I $P(IVMPID_$G(IVMPID(1)),HLFS,20)["P" D PSEUDO^IVMPTRN1  ; strip 'P' from pseudo SSNs | 
|---|
| 61 | S IVMSEQ=IVMSEQ_",3,5,7,8,11,12,13,14,19" | 
|---|
| 62 | K IVMPID D BLDPID^VAFCQRY1(DFN,1,IVMSEQ,.IVMPID,.HL,.ERROR) | 
|---|
| 63 | S SEGOCC=0 F  S SEGOCC=$O(IVMPID(SEGOCC)) Q:SEGOCC=""  D | 
|---|
| 64 | . S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=IVMPID(SEGOCC) | 
|---|
| 65 | ; | 
|---|
| 66 | ; **** create (PD1) Patient CMOR segment for MPI@HEC. | 
|---|
| 67 | S:'$D(HL("FS")) HL("FS")=HLFS | 
|---|
| 68 | S:'$D(HL("ECH")) HL("ECH")=HLECH | 
|---|
| 69 | S:'$D(HL("Q")) HL("Q")=HLQ | 
|---|
| 70 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLPD1(DFN,IVMCMOR) | 
|---|
| 71 | ; | 
|---|
| 72 | ; create (ZPD) Patient Dependent Info. segment | 
|---|
| 73 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN1^VAFHLZPD(DFN,"1,8,9,11,12,13,17,19,31,32,33,40"),IVMINS=$P(^(IVMCT),HLFS,12) | 
|---|
| 74 | ; | 
|---|
| 75 | ; create (ZTA) Temporary Address segment | 
|---|
| 76 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZTA(DFN,"1,2,3,4,5,6,7,8,9") | 
|---|
| 77 | ; | 
|---|
| 78 | ; create (ZIE) Ineligible segment | 
|---|
| 79 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIE(DFN,"1,2,3",1) | 
|---|
| 80 | ; | 
|---|
| 81 | ; create (ZEL) Eligibility segment(s) | 
|---|
| 82 | ; **** Add 5th piece to ZEL to correct consistency check | 
|---|
| 83 | D EN1^VAFHLZEL(DFN,"1,2,5,6,7,8,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,29,34,35,37,38,39,40",2,.VAFZEL) | 
|---|
| 84 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(VAFZEL(1))  ; Primary Eligibility | 
|---|
| 85 | I $D(VAFZEL(1,1)) S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(VAFZEL(1,1)) | 
|---|
| 86 | ; - other entitled eligibilities | 
|---|
| 87 | F IVMSUB=1:0 S IVMSUB=+$O(VAFZEL(IVMSUB)) Q:'IVMSUB  D | 
|---|
| 88 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(VAFZEL(+IVMSUB)) | 
|---|
| 89 | ; | 
|---|
| 90 | ; create (ZEN) Enrollment segment | 
|---|
| 91 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZEN(DFN) | 
|---|
| 92 | ; | 
|---|
| 93 | ; create (ZCD) Catastrophic Disability segment(s) | 
|---|
| 94 | D BUILD^VAFHLZCD(.IVMZCD,DFN,,HLQ,HLFS) | 
|---|
| 95 | F IVMSUB=0:0 S IVMSUB=+$O(IVMZCD(IVMSUB)) Q:'IVMSUB  D | 
|---|
| 96 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(IVMZCD(+IVMSUB)) | 
|---|
| 97 | ; | 
|---|
| 98 | ; Optionally create (ZMH) Military History segments | 
|---|
| 99 | D ENTER^VAFHLZMH(DFN,"IVMZMH") | 
|---|
| 100 | S (ZMHSQ,SETID)=0 | 
|---|
| 101 | I $D(IVMZMH) F  S ZMHSQ=$O(IVMZMH(ZMHSQ)) Q:ZMHSQ=""  D | 
|---|
| 102 | .Q:$TR($P(IVMZMH(ZMHSQ,0),HLFS,4,5),"""^~")="" | 
|---|
| 103 | .S SETID=SETID+1,IVMCT=IVMCT+1 | 
|---|
| 104 | .S ^TMP("HLS",$J,IVMCT)="ZMH"_HLFS_SETID_HLFS_$P(IVMZMH(ZMHSQ,0),HLFS,3,6) | 
|---|
| 105 | ; | 
|---|
| 106 | ; create (ZRD) Rated Disabilities segment(s) | 
|---|
| 107 | D EN^VAFHLZRD(DFN,"1,2,3,4",HLQ,HLFS,"IVMZRD") | 
|---|
| 108 | F IVMSUB=0:0 S IVMSUB=+$O(IVMZRD(IVMSUB)) Q:'IVMSUB  D | 
|---|
| 109 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$G(IVMZRD(+IVMSUB,0)) | 
|---|
| 110 | ; | 
|---|
| 111 | ; create (ZCT) Emergency Contact segment | 
|---|
| 112 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZCT(DFN,"1,2,3,4,5,6,7,10","",1,1) | 
|---|
| 113 | ; | 
|---|
| 114 | ; create (ZEM) Employment Info. segment for (1) Patient & (2) Spouse | 
|---|
| 115 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZEM(DFN,"1,2,3") | 
|---|
| 116 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZEM(DFN,"1,2,3",2,2) | 
|---|
| 117 | ; | 
|---|
| 118 | ; create (ZGD) Guardian segment for (1) VA & (2) Civil | 
|---|
| 119 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZGD(DFN,"1,2,3,4,5,6,7,8",1) | 
|---|
| 120 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZGD(DFN,"1,2,3,4,5,6,7,8",2) | 
|---|
| 121 | ; | 
|---|
| 122 | ; Income Year requiring transmission from IVM Patient File (301.5) | 
|---|
| 123 | S IVMIY=$S($D(IVMIY):IVMIY,1:(IVMMTDT-10000)) | 
|---|
| 124 | N MTINFO S MTINFO=$$FUT^DGMTU(DFN) | 
|---|
| 125 | I ($E(IVMIY,1,3)+1)=$E($P(MTINFO,U,2),1,3) S IVMMTDT=$P(MTINFO,U,2) | 
|---|
| 126 | ;get the primary test for the income year | 
|---|
| 127 | S TESTTYPE=$$GETTYPE^IVMPTRN9(DFN,IVMMTDT,.TESTCODE,.HARDSHIP,.ACTVIEN) | 
|---|
| 128 | ; | 
|---|
| 129 | ; The following function call returns: | 
|---|
| 130 | ;   - Patient Relation IEN array in DGREL | 
|---|
| 131 | ;   - Individual Annual Income IEN array in DGINC | 
|---|
| 132 | ;   - Income Relation IEN array in DGINR | 
|---|
| 133 | D ALL^DGMTU21(DFN,"VSC",IVMMTDT,"IPR",ACTVIEN) | 
|---|
| 134 | ; | 
|---|
| 135 | S EDBMTZ06=0 I $$VERZ06^EASPTRN1(DFN) S EDBMTZ06=1 | 
|---|
| 136 | ; create (ZIC) Income segment for veteran | 
|---|
| 137 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIC(+$G(DGINC("V")),"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20") | 
|---|
| 138 | I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIC^"_$P(^TMP("HLS",$J,IVMCT),"^",2,3) | 
|---|
| 139 | ;use IVMIY not IVMMTDT. For LTC copay exemption, IVMMTDT is not correct | 
|---|
| 140 | S $P(^TMP("HLS",$J,IVMCT),"^",3)=$$HLDATE^HLFNC(IVMIY) | 
|---|
| 141 | ; | 
|---|
| 142 | ; create (ZIR) Income Relation segment for veteran | 
|---|
| 143 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIR(+$G(DGINR("V")),"1,2,3,4,5,10") | 
|---|
| 144 | I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIR^1" | 
|---|
| 145 | ; | 
|---|
| 146 | ; create (ZDP) Patient Dependent Info. segment for spouse | 
|---|
| 147 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZDP(+$G(DGREL("S")),"1,2,3,4,5,6,7,8,9,10") | 
|---|
| 148 | I $P(^TMP("HLS",$J,IVMCT),HLFS,3)'=HLQ,($P($G(^(IVMCT)),HLFS,6)=HLQ) D | 
|---|
| 149 | .; - pass non-existant SSNs as 0s | 
|---|
| 150 | .S $P(X,HLFS,6)="000000000" | 
|---|
| 151 | ; | 
|---|
| 152 | ; create (ZIC) Income segment for spouse | 
|---|
| 153 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIC(+$G(DGINC("S")),"1,2,3,4,5,6,7,8,9,10,11,12,16,17,18,19,20") | 
|---|
| 154 | I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIC^"_$P(^TMP("HLS",$J,IVMCT),"^",2,3) | 
|---|
| 155 | ; | 
|---|
| 156 | ; create (ZIR) Income Relation segment for spouse | 
|---|
| 157 | S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIR(+$G(DGINR("S")),"1,2,3") | 
|---|
| 158 | I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIR^"_$P(^TMP("HLS",$J,IVMCT),"^",2) | 
|---|
| 159 | ; | 
|---|
| 160 | ; | 
|---|
| 161 | ; create ZDP, ZIC, and ZIR segments for all Means Test dependents | 
|---|
| 162 | F IVMSUB=0:0 S IVMSUB=$O(DGREL("C",IVMSUB)) Q:'IVMSUB  D | 
|---|
| 163 | .; | 
|---|
| 164 | .; - create (ZDP) Dependent Info. segment for dependent child | 
|---|
| 165 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZDP(+$G(DGREL("C",IVMSUB)),"1,2,3,4,5,6,7,9,10") | 
|---|
| 166 | .I $P(^TMP("HLS",$J,IVMCT),HLFS,3)'=HLQ,($P($G(^(IVMCT)),HLFS,6)=HLQ) D | 
|---|
| 167 | ..; - pass non-existant SSNs as 0s | 
|---|
| 168 | ..S $P(X,HLFS,6)="000000000" | 
|---|
| 169 | .; | 
|---|
| 170 | .; - create (ZIC) Income segment for dependent child | 
|---|
| 171 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIC(+$G(DGINC("C",IVMSUB)),"1,2,3,4,5,6,7,8,9,10,11,12,15") | 
|---|
| 172 | .I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIC^"_$P(^TMP("HLS",$J,IVMCT),"^",2,3) | 
|---|
| 173 | .; | 
|---|
| 174 | .; - create (ZIR) Income Relation segment for dependent child | 
|---|
| 175 | .S IVMCT=IVMCT+1,^TMP("HLS",$J,IVMCT)=$$EN^VAFHLZIR(+$G(DGINR("C",IVMSUB)),"1,2,3,6,7,8,9,14") | 
|---|
| 176 | .I EDBMTZ06 S ^TMP("HLS",$J,IVMCT)="ZIR^"_$P(^TMP("HLS",$J,IVMCT),"^",2) | 
|---|
| 177 | .; | 
|---|
| 178 | ; | 
|---|
| 179 | D GOTO^IVMPTRN9 | 
|---|
| 180 | Q | 
|---|