| 1 | EASEGT2 ;ALB/PJH - PROCESS INCOMING MFN TYPE HL7 MSGS ; 11/27/07 3:03pm | 
|---|
| 2 | ;;1.0;ENROLLMENT APPLICATION SYSTEM;**71**;15-MAR-01;Build 18 | 
|---|
| 3 | ; | 
|---|
| 4 | ; CLONED FROM DGENEGT2 (ESR EVENT DRIVER) | 
|---|
| 5 | ; | 
|---|
| 6 | MFN     ; Description: This entry point is the handler for incoming MFN type | 
|---|
| 7 | ; HL7 messages.  This entry point is called from the PROCESSING ROUTINE | 
|---|
| 8 | ; field of the HL7 MESSAGE (multiple) field of the #771 file entry. | 
|---|
| 9 | ; | 
|---|
| 10 | ;  Input: | 
|---|
| 11 | ;   The following HL7 variables are set when the DHCP Application | 
|---|
| 12 | ;   processing routine is invoked: | 
|---|
| 13 | ;      HLDA - the internal entry number for the entry created in | 
|---|
| 14 | ;             file #772. | 
|---|
| 15 | ;     HLDAN - the name of the receiving application from the HL7 DHCP | 
|---|
| 16 | ;             APPLICATION #771 file | 
|---|
| 17 | ;     HLDAP - ien of the receiving application from the HL7 DHCP | 
|---|
| 18 | ;             APPLICATION #771 file | 
|---|
| 19 | ;      HLDT - date/time message was received in internal fileman format | 
|---|
| 20 | ;     HLDT1 - date/time message was received in HL7 format | 
|---|
| 21 | ;     HLECH - HL7 Encoding Characters from the 'EC' node of file #771 | 
|---|
| 22 | ;      HLFS - HL7 Field Separator from the 'FS' node of file #771 | 
|---|
| 23 | ;     HLMID - HL7 message control ID of the message received | 
|---|
| 24 | ;     HLMTN - 3-7 character message type of the message received | 
|---|
| 25 | ;    HLNDAP - Non-DHCP Application Pointer from file #770 | 
|---|
| 26 | ;   HLNDAP0 - Zero node from file #770 corresponding to HLNDAP | 
|---|
| 27 | ;       HLQ - Double quotes ("") for use in building HL7 segments | 
|---|
| 28 | ;     HLVER - HL7 version number of the HL7 protocol that was used to | 
|---|
| 29 | ;             build the message received | 
|---|
| 30 | ; | 
|---|
| 31 | ;  other HL7 variables used: | 
|---|
| 32 | ;     HLEVN - number of HL7 events included in the HL7 message | 
|---|
| 33 | ;     HLSDT - a flag that indicates that the data to be sent is | 
|---|
| 34 | ;             stored in the ^TMP("HLS") global array. | 
|---|
| 35 | ;   HLTRANS - existence of this variable indicates that the incoming | 
|---|
| 36 | ;             HL7 message is being processed by the HLSERV routine and | 
|---|
| 37 | ;             VA MailMan is the lowere level protocol being used. | 
|---|
| 38 | ; | 
|---|
| 39 | ; | 
|---|
| 40 | N EVENT,MSGID,SEG | 
|---|
| 41 | N CNT,HL,IVMRTN,SEGCNT | 
|---|
| 42 | ; | 
|---|
| 43 | ; SET UP WORK GLOBAL WITH INCOMING MESSAGE | 
|---|
| 44 | S IVMRTN="DGENEGT2" | 
|---|
| 45 | K ^TMP($J,IVMRTN) | 
|---|
| 46 | F SEGCNT=1:1 X HLNEXT Q:HLQUIT'>0  D | 
|---|
| 47 | .S CNT=0 | 
|---|
| 48 | .S ^TMP($J,IVMRTN,SEGCNT,CNT)=HLNODE | 
|---|
| 49 | .F  S CNT=$O(HLNODE(CNT)) Q:'CNT  D | 
|---|
| 50 | ..S ^TMP($J,IVMRTN,SEGCNT,CNT)=HLNODE(CNT) | 
|---|
| 51 | S HLDA=HLMTIEN | 
|---|
| 52 | ; | 
|---|
| 53 | ; INITIALIZE HL7 VARIABLES | 
|---|
| 54 | S HLEID="EAS ESR "_$P($$SITE^VASITE,"^",3)_" MFN-ZEG SERVER" | 
|---|
| 55 | S HLEID=$O(^ORD(101,"B",HLEID,0)) | 
|---|
| 56 | D INIT^HLFNC2(HLEID,.HL) | 
|---|
| 57 | S HLEIDS=$O(^ORD(101,HLEID,775,"B",0)) | 
|---|
| 58 | ; | 
|---|
| 59 | D NXTSEG^DGENUPL(HLDA,0,.SEG) | 
|---|
| 60 | Q:(SEG("TYPE")'="MSH") | 
|---|
| 61 | S EVENT=$P(SEG(9),$E(HLECH),2) | 
|---|
| 62 | ; | 
|---|
| 63 | I EVENT="ZEG" D | 
|---|
| 64 | .S MSGID=SEG(10) | 
|---|
| 65 | .D EGT(HLDA,MSGID) | 
|---|
| 66 | ; | 
|---|
| 67 | K ^TMP($J,IVMRTN) | 
|---|
| 68 | Q | 
|---|
| 69 | ; | 
|---|
| 70 | ; | 
|---|
| 71 | EGT(MSGIEN,MSGID)       ; | 
|---|
| 72 | ; Description:  This procedure is used to process an MFN~ZEG message. | 
|---|
| 73 | ; It uploads the enrollment group threshold (EGT) data. An HL7 | 
|---|
| 74 | ; Master File Acknowledgement (MFK) will be returned. | 
|---|
| 75 | ; | 
|---|
| 76 | ;  Input: | 
|---|
| 77 | ;   MSGIEN - the internal entry number of the HL7 message in the | 
|---|
| 78 | ;            HL7 MESSAGE TEXT (#772) file | 
|---|
| 79 | ;    MSGID - the message control id from the MSH segment | 
|---|
| 80 | ; | 
|---|
| 81 | ; Output: None | 
|---|
| 82 | ; | 
|---|
| 83 | N CURLINE,ERRCOUNT,SEG | 
|---|
| 84 | ; | 
|---|
| 85 | ; initialize HL7 variables | 
|---|
| 86 | S HLSDT="IVMQ"  ; subscript in ^TMP( global for MFK message | 
|---|
| 87 | K ^TMP("HLA",$J) | 
|---|
| 88 | ; | 
|---|
| 89 | ; init variables | 
|---|
| 90 | S ERRCOUNT=0  ; used to indicate error | 
|---|
| 91 | S CURLINE=1 | 
|---|
| 92 | ; | 
|---|
| 93 | ; process master file notification msg | 
|---|
| 94 | D MFNZEG(MSGIEN,MSGID,.CURLINE,.ERRCOUNT) | 
|---|
| 95 | ; | 
|---|
| 96 | ; transmit master file application acknowledgment (MFK) | 
|---|
| 97 | S HLEVN=$S(+$G(ERRCOUNT):+$G(ERRCOUNT),1:1) | 
|---|
| 98 | S HLARYTYP="GM",HLFORMAT=1 | 
|---|
| 99 | D GENACK^HLMA1(HLEID,HLMTIENS,HLEIDS,HLARYTYP,HLFORMAT,.HLRESLTA) | 
|---|
| 100 | ; | 
|---|
| 101 | Q | 
|---|
| 102 | ; | 
|---|
| 103 | ; | 
|---|
| 104 | MFNZEG(MSGIEN,MSGID,CURLINE,ERRCOUNT)   ; | 
|---|
| 105 | ; Description:  This procedure is used to process a MFN~ZEG msg. | 
|---|
| 106 | ; | 
|---|
| 107 | ;  Input: | 
|---|
| 108 | ;     MSGIEN - the internal entry number of the HL7 message in the | 
|---|
| 109 | ;              HL7 MESSAGE TEXT (#772) file | 
|---|
| 110 | ;      MSGID - message control id of HL7 msg in the MSH segment | 
|---|
| 111 | ;    CURLINE - the subscript of the MSH segment of the current message | 
|---|
| 112 | ;              (pass by reference) | 
|---|
| 113 | ; | 
|---|
| 114 | ; Output: | 
|---|
| 115 | ;   CURLINE - upon leaving the procedure this parameter should be set to | 
|---|
| 116 | ;             the end of the current message. (pass by reference) | 
|---|
| 117 | ;  ERRCOUNT - set if error encountered (pass by reference) | 
|---|
| 118 | ; | 
|---|
| 119 | N DGEGT,DGMFI,DGMFE,ERRMSG,OLDEGT | 
|---|
| 120 | ; | 
|---|
| 121 | ; drops out of DO block on error | 
|---|
| 122 | D | 
|---|
| 123 | .; parse the message | 
|---|
| 124 | .Q:'$$PARSE(MSGIEN,MSGID,.CURLINE,.ERRCOUNT,.DGEGT,.DGMFI,.DGMFE) | 
|---|
| 125 | .; | 
|---|
| 126 | .; get the current EGT record if it exists | 
|---|
| 127 | .I $$GET^DGENEGT($$FINDCUR^DGENEGT(),.OLDEGT) | 
|---|
| 128 | .; | 
|---|
| 129 | .; add assumed values to the EGT record containing the update | 
|---|
| 130 | .S DGEGT("ENTDATE")=$$NOW^XLFDT  ; set to currnet date/time | 
|---|
| 131 | .S DGEGT("SOURCE")=1  ; set source of EGT to 'HEC' | 
|---|
| 132 | .; | 
|---|
| 133 | .; perform field validation checks on the EGT record | 
|---|
| 134 | .I '$$VALID^DGENEGT(.DGEGT,.ERRMSG) D  Q | 
|---|
| 135 | ..D ADDERROR(MSGID,ERRMSG,.ERRCOUNT,.DGMFI,.DGMFE) | 
|---|
| 136 | .; | 
|---|
| 137 | .; store enrollment group threshold (EGT) record | 
|---|
| 138 | .D UPLDEGT^DGENEGT3(.DGEGT) | 
|---|
| 139 | .; | 
|---|
| 140 | .; if no error encountered, create an 'AA' MFK | 
|---|
| 141 | .D ACCEPT(MSGID,.DGMFI,.DGMFE) | 
|---|
| 142 | .; | 
|---|
| 143 | .; send local EGT notification msg | 
|---|
| 144 | .D NOTIFY^DGENEGT1(.DGEGT,.OLDEGT) | 
|---|
| 145 | ; | 
|---|
| 146 | Q | 
|---|
| 147 | ; | 
|---|
| 148 | ; | 
|---|
| 149 | PARSE(MSGIEN,MSGID,CURLINE,ERRCOUNT,DGEGT,DGMFI,DGMFE)  ; | 
|---|
| 150 | ; Description: This function is used to parse the HL7 segments of the message. | 
|---|
| 151 | ; | 
|---|
| 152 | ;  Input: | 
|---|
| 153 | ;     MSGIEN - the internal entry number of the HL7 message in the | 
|---|
| 154 | ;              HL7 MESSAGE TEXT (#772) file | 
|---|
| 155 | ;      MSGID - message control id of HL7 msg in the MSH segment | 
|---|
| 156 | ;    CURLINE - the subscript of the MSH segment of the current message | 
|---|
| 157 | ;              (pass by reference) | 
|---|
| 158 | ; | 
|---|
| 159 | ; Output: | 
|---|
| 160 | ;  Function Value: Returns 1 on success, 0 on failure | 
|---|
| 161 | ;     DGEGT - array containing the EGT record (pass by reference) | 
|---|
| 162 | ;     DGMFI - array containing fields of MFI segment needed for | 
|---|
| 163 | ;             MFK (pass by reference) | 
|---|
| 164 | ;     DGMFE - array containing fields of MFE segment needed for | 
|---|
| 165 | ;             MFK (pass by reference) | 
|---|
| 166 | ;  ERRCOUNT - set if error encountered (pass by reference) | 
|---|
| 167 | ; | 
|---|
| 168 | N ERROR,SEG | 
|---|
| 169 | S ERROR=0 | 
|---|
| 170 | ; | 
|---|
| 171 | K DGEGT,DGMFI,DGMFE | 
|---|
| 172 | S (DGMFI,DGMFE)="" | 
|---|
| 173 | ; | 
|---|
| 174 | F SEG="MFI","MFE","ZEG" D  Q:ERROR | 
|---|
| 175 | .D NXTSEG^DGENUPL(MSGIEN,.CURLINE,.SEG) | 
|---|
| 176 | .I SEG("TYPE")=SEG D | 
|---|
| 177 | ..D @(SEG_"^DGENEGT3") | 
|---|
| 178 | .E  D | 
|---|
| 179 | ..D ADDERROR(MSGID,SEG_" SEGMENT MISSING",.ERRCOUNT,.DGMFI,.DGMFE) | 
|---|
| 180 | ..S ERROR=1 | 
|---|
| 181 | ; | 
|---|
| 182 | Q $S(ERROR:0,1:1) | 
|---|
| 183 | ; | 
|---|
| 184 | ; | 
|---|
| 185 | ADDERROR(MSGID,ERRMSG,ERRCOUNT,DGMFI,DGMFE)     ; | 
|---|
| 186 | ; Description - This procedure writes an MFK - Application Error (AE) | 
|---|
| 187 | ; to the global that is used in the transmission of the 'MFK' msg. | 
|---|
| 188 | ; | 
|---|
| 189 | ;  Inputs: | 
|---|
| 190 | ;      MSGID - message control id of HL7 msg in the MSH segment | 
|---|
| 191 | ;     ERRMSG - the error msg text | 
|---|
| 192 | ;   ERRCOUNT - count of errors written (pass by reference) | 
|---|
| 193 | ;      DGMFI - array containing fields of MFI segment received, needed | 
|---|
| 194 | ;              for MFK (pass by reference) | 
|---|
| 195 | ;      DGMFE - array containing fields of MFI segment received, needed | 
|---|
| 196 | ;              for MFK (pass by reference) | 
|---|
| 197 | ; | 
|---|
| 198 | ; Outputs: | 
|---|
| 199 | ;   ^TMP("HLS",$J,I) - global array containing all segments of | 
|---|
| 200 | ;      the HL7 message that the receiving application wishes to send | 
|---|
| 201 | ;      as response. The HLSDT variable is a flag that indicates that | 
|---|
| 202 | ;      the data to be sent is stored in in the ^TMP("HLS") global | 
|---|
| 203 | ;      array. The variable (I) is sequential number. | 
|---|
| 204 | ; | 
|---|
| 205 | S ERRCOUNT=+$G(ERRCOUNT) | 
|---|
| 206 | ; | 
|---|
| 207 | ; MSA segment | 
|---|
| 208 | S ^TMP("HLA",$J,(ERRCOUNT*2)+1)="MSA"_HLFS_"AE"_HLFS_MSGID_HLFS_ERRMSG | 
|---|
| 209 | ; | 
|---|
| 210 | ; MFI segment | 
|---|
| 211 | S ^TMP("HLA",$J,(ERRCOUNT*2)+2)="MFI"_HLFS_$G(DGMFI("MASTERID"))_HLFS_HLFS_$G(DGMFI("EVENT")) | 
|---|
| 212 | ; | 
|---|
| 213 | ; MFA segment | 
|---|
| 214 | S ^TMP("HLA",$J,(ERRCOUNT*2)+3)="MFA"_HLFS_$G(DGMFE("RECEVNT"))_HLFS_$G(DGMFE("CNTRLNUM"))_HLFS_HLFS_"U"_HLFS_$G(DGMFE("PRIMKEY")) | 
|---|
| 215 | S ERRCOUNT=ERRCOUNT+1 | 
|---|
| 216 | Q | 
|---|
| 217 | ; | 
|---|
| 218 | ; | 
|---|
| 219 | ACCEPT(MSGID,DGMFI,DGMFE)       ; | 
|---|
| 220 | ; Description - This procedure writes an MFK - Application Accept (AA) | 
|---|
| 221 | ; to the global that is used in the transmission of the 'MFK' msg. | 
|---|
| 222 | ; | 
|---|
| 223 | ;  Inputs: | 
|---|
| 224 | ;      MSGID - message control id of HL7 msg in the MSH segment | 
|---|
| 225 | ;      DGMFI - array containing fields of MFI segment received, needed | 
|---|
| 226 | ;              for MFK (pass by reference) | 
|---|
| 227 | ;      DGMFE - array containing fields of MFI segment received, needed | 
|---|
| 228 | ;              for MFK (pass by reference) | 
|---|
| 229 | ; | 
|---|
| 230 | ; Outputs: | 
|---|
| 231 | ;   ^TMP("HLS",$J,HLSDT,I) - global array containing all segments of | 
|---|
| 232 | ;      the HL7 message that the receiving application wishes to send | 
|---|
| 233 | ;      as response. The HLSDT variable is a flag that indicates that | 
|---|
| 234 | ;      the data to be sent is stored in in the ^TMP("HLS") global | 
|---|
| 235 | ;      array. The variable (I) is sequential number. | 
|---|
| 236 | ; | 
|---|
| 237 | N DGCOUNT | 
|---|
| 238 | S DGCOUNT=1   ; sequential number used as array subscript | 
|---|
| 239 | ; | 
|---|
| 240 | ; MSA segment | 
|---|
| 241 | S DGCOUNT=DGCOUNT+1 | 
|---|
| 242 | S ^TMP("HLA",$J,DGCOUNT)="MSA"_HLFS_"AA"_HLFS_MSGID | 
|---|
| 243 | ; | 
|---|
| 244 | ; MFI segment | 
|---|
| 245 | S DGCOUNT=DGCOUNT+1 | 
|---|
| 246 | S ^TMP("HLA",$J,DGCOUNT)="MFI"_HLFS_$G(DGMFI("MASTERID"))_HLFS_HLFS_$G(DGMFI("EVENT")) | 
|---|
| 247 | ; | 
|---|
| 248 | ; MFA segment | 
|---|
| 249 | S DGCOUNT=DGCOUNT+1 | 
|---|
| 250 | S ^TMP("HLA",$J,DGCOUNT)="MFA"_HLFS_$G(DGMFE("RECEVNT"))_HLFS_$G(DGMFE("CNTRLNUM"))_HLFS_HLFS_"S"_HLFS_$G(DGMFE("PRIMKEY")) | 
|---|
| 251 | Q | 
|---|