| 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
 | 
|---|