DGENEGT2 ;ALB/KCL - PROCESS INCOMING MFN TYPE HL7 MSGS; 04-MAY-1999 ; 3/7/01 9:14am ;;5.3;Registration;**232,417,363**;Aug 13, 1993 ; ; MFN ; Description: This entry point is the handler for incoming MFN type ; HL7 messages. This entry point is called from the PROCESSING ROUTINE ; field of the HL7 MESSAGE (multiple) field of the #771 file entry. ; ; Input: ; The following HL7 variables are set when the DHCP Application ; processing routine is invoked: ; HLDA - the internal entry number for the entry created in ; file #772. ; HLDAN - the name of the receiving application from the HL7 DHCP ; APPLICATION #771 file ; HLDAP - ien of the receiving application from the HL7 DHCP ; APPLICATION #771 file ; HLDT - date/time message was received in internal fileman format ; HLDT1 - date/time message was received in HL7 format ; HLECH - HL7 Encoding Characters from the 'EC' node of file #771 ; HLFS - HL7 Field Separator from the 'FS' node of file #771 ; HLMID - HL7 message control ID of the message received ; HLMTN - 3-7 character message type of the message received ; HLNDAP - Non-DHCP Application Pointer from file #770 ; HLNDAP0 - Zero node from file #770 corresponding to HLNDAP ; HLQ - Double quotes ("") for use in building HL7 segments ; HLVER - HL7 version number of the HL7 protocol that was used to ; build the message received ; ; other HL7 variables used: ; HLEVN - number of HL7 events included in the HL7 message ; HLSDT - a flag that indicates that the data to be sent is ; stored in the ^TMP("HLS") global array. ; HLTRANS - existence of this variable indicates that the incoming ; HL7 message is being processed by the HLSERV routine and ; VA MailMan is the lowere level protocol being used. ; ; N EVENT,MSGID,SEG N CNT,HL,IVMRTN,SEGCNT ; ; SET UP WORK GLOBAL WITH INCOMING MESSAGE S IVMRTN="DGENEGT2" K ^TMP($J,IVMRTN) F SEGCNT=1:1 X HLNEXT Q:HLQUIT'>0 D .S CNT=0 .S ^TMP($J,IVMRTN,SEGCNT,CNT)=HLNODE .F S CNT=$O(HLNODE(CNT)) Q:'CNT D ..S ^TMP($J,IVMRTN,SEGCNT,CNT)=HLNODE(CNT) S HLDA=HLMTIEN ; ; INITIALIZE HL7 VARIABLES S HLEID="VAMC "_$P($$SITE^VASITE,"^",3)_" MFN-ZEG SERVER" S HLEID=$O(^ORD(101,"B",HLEID,0)) D INIT^HLFNC2(HLEID,.HL) S HLEIDS=$O(^ORD(101,HLEID,775,"B",0)) ; D NXTSEG^DGENUPL(HLDA,0,.SEG) Q:(SEG("TYPE")'="MSH") S EVENT=$P(SEG(9),$E(HLECH),2) ; I EVENT="ZEG" D .S MSGID=SEG(10) .D EGT(HLDA,MSGID) ; K ^TMP($J,IVMRTN) Q ; ; EGT(MSGIEN,MSGID) ; ; Description: This procedure is used to process an MFN~ZEG message. ; It uploads the enrollment group threshold (EGT) data. An HL7 ; Master File Acknowledgement (MFK) will be returned. ; ; Input: ; MSGIEN - the internal entry number of the HL7 message in the ; HL7 MESSAGE TEXT (#772) file ; MSGID - the message control id from the MSH segment ; ; Output: None ; N CURLINE,ERRCOUNT,SEG ; ; initialize HL7 variables S HLSDT="IVMQ" ; subscript in ^TMP( global for MFK message K ^TMP("HLA",$J) ; ; init variables S ERRCOUNT=0 ; used to indicate error S CURLINE=1 ; ; process master file notification msg D MFNZEG(MSGIEN,MSGID,.CURLINE,.ERRCOUNT) ; ; transmit master file application acknowledgment (MFK) S HLEVN=$S(+$G(ERRCOUNT):+$G(ERRCOUNT),1:1) S HLARYTYP="GM",HLFORMAT=1 D GENACK^HLMA1(HLEID,HLMTIENS,HLEIDS,HLARYTYP,HLFORMAT,.HLRESLTA) ; Q ; ; MFNZEG(MSGIEN,MSGID,CURLINE,ERRCOUNT) ; ; Description: This procedure is used to process a MFN~ZEG msg. ; ; Input: ; MSGIEN - the internal entry number of the HL7 message in the ; HL7 MESSAGE TEXT (#772) file ; MSGID - message control id of HL7 msg in the MSH segment ; CURLINE - the subscript of the MSH segment of the current message ; (pass by reference) ; ; Output: ; CURLINE - upon leaving the procedure this parameter should be set to ; the end of the current message. (pass by reference) ; ERRCOUNT - set if error encountered (pass by reference) ; N DGEGT,DGMFI,DGMFE,ERRMSG,OLDEGT ; ; drops out of DO block on error D .; parse the message .Q:'$$PARSE(MSGIEN,MSGID,.CURLINE,.ERRCOUNT,.DGEGT,.DGMFI,.DGMFE) .; .; get the current EGT record if it exists .I $$GET^DGENEGT($$FINDCUR^DGENEGT(),.OLDEGT) .; .; add assumed values to the EGT record containing the update .S DGEGT("ENTDATE")=$$NOW^XLFDT ; set to currnet date/time .S DGEGT("SOURCE")=1 ; set source of EGT to 'HEC' .; .; perform field validation checks on the EGT record .I '$$VALID^DGENEGT(.DGEGT,.ERRMSG) D Q ..D ADDERROR(MSGID,ERRMSG,.ERRCOUNT,.DGMFI,.DGMFE) .; .; store enrollment group threshold (EGT) record .D UPLDEGT^DGENEGT3(.DGEGT) .; .; if no error encountered, create an 'AA' MFK .D ACCEPT(MSGID,.DGMFI,.DGMFE) .; .; send local EGT notification msg .D NOTIFY^DGENEGT1(.DGEGT,.OLDEGT) ; Q ; ; PARSE(MSGIEN,MSGID,CURLINE,ERRCOUNT,DGEGT,DGMFI,DGMFE) ; ; Description: This function is used to parse the HL7 segments of the message. ; ; Input: ; MSGIEN - the internal entry number of the HL7 message in the ; HL7 MESSAGE TEXT (#772) file ; MSGID - message control id of HL7 msg in the MSH segment ; CURLINE - the subscript of the MSH segment of the current message ; (pass by reference) ; ; Output: ; Function Value: Returns 1 on success, 0 on failure ; DGEGT - array containing the EGT record (pass by reference) ; DGMFI - array containing fields of MFI segment needed for ; MFK (pass by reference) ; DGMFE - array containing fields of MFE segment needed for ; MFK (pass by reference) ; ERRCOUNT - set if error encountered (pass by reference) ; N ERROR,SEG S ERROR=0 ; K DGEGT,DGMFI,DGMFE S (DGMFI,DGMFE)="" ; F SEG="MFI","MFE","ZEG" D Q:ERROR .D NXTSEG^DGENUPL(MSGIEN,.CURLINE,.SEG) .I SEG("TYPE")=SEG D ..D @SEG^DGENEGT3 .E D ..D ADDERROR(MSGID,SEG_" SEGMENT MISSING",.ERRCOUNT,.DGMFI,.DGMFE) ..S ERROR=1 ; Q $S(ERROR:0,1:1) ; ; ADDERROR(MSGID,ERRMSG,ERRCOUNT,DGMFI,DGMFE) ; ; Description - This procedure writes an MFK - Application Error (AE) ; to the global that is used in the transmission of the 'MFK' msg. ; ; Inputs: ; MSGID - message control id of HL7 msg in the MSH segment ; ERRMSG - the error msg text ; ERRCOUNT - count of errors written (pass by reference) ; DGMFI - array containing fields of MFI segment received, needed ; for MFK (pass by reference) ; DGMFE - array containing fields of MFI segment received, needed ; for MFK (pass by reference) ; ; Outputs: ; ^TMP("HLS",$J,I) - global array containing all segments of ; the HL7 message that the receiving application wishes to send ; as response. The HLSDT variable is a flag that indicates that ; the data to be sent is stored in in the ^TMP("HLS") global ; array. The variable (I) is sequential number. ; S ERRCOUNT=+$G(ERRCOUNT) ; ; MSA segment S ^TMP("HLA",$J,(ERRCOUNT*2)+1)="MSA"_HLFS_"AE"_HLFS_MSGID_HLFS_ERRMSG ; ; MFI segment S ^TMP("HLA",$J,(ERRCOUNT*2)+2)="MFI"_HLFS_$G(DGMFI("MASTERID"))_HLFS_HLFS_$G(DGMFI("EVENT")) ; ; MFA segment S ^TMP("HLA",$J,(ERRCOUNT*2)+3)="MFA"_HLFS_$G(DGMFE("RECEVNT"))_HLFS_$G(DGMFE("CNTRLNUM"))_HLFS_HLFS_"U"_HLFS_$G(DGMFE("PRIMKEY")) S ERRCOUNT=ERRCOUNT+1 Q ; ; ACCEPT(MSGID,DGMFI,DGMFE) ; ; Description - This procedure writes an MFK - Application Accept (AA) ; to the global that is used in the transmission of the 'MFK' msg. ; ; Inputs: ; MSGID - message control id of HL7 msg in the MSH segment ; DGMFI - array containing fields of MFI segment received, needed ; for MFK (pass by reference) ; DGMFE - array containing fields of MFI segment received, needed ; for MFK (pass by reference) ; ; Outputs: ; ^TMP("HLS",$J,HLSDT,I) - global array containing all segments of ; the HL7 message that the receiving application wishes to send ; as response. The HLSDT variable is a flag that indicates that ; the data to be sent is stored in in the ^TMP("HLS") global ; array. The variable (I) is sequential number. ; N DGCOUNT S DGCOUNT=1 ; sequential number used as array subscript ; ; MSA segment S DGCOUNT=DGCOUNT+1 S ^TMP("HLA",$J,DGCOUNT)="MSA"_HLFS_"AA"_HLFS_MSGID ; ; MFI segment S DGCOUNT=DGCOUNT+1 S ^TMP("HLA",$J,DGCOUNT)="MFI"_HLFS_$G(DGMFI("MASTERID"))_HLFS_HLFS_$G(DGMFI("EVENT")) ; ; MFA segment S DGCOUNT=DGCOUNT+1 S ^TMP("HLA",$J,DGCOUNT)="MFA"_HLFS_$G(DGMFE("RECEVNT"))_HLFS_$G(DGMFE("CNTRLNUM"))_HLFS_HLFS_"S"_HLFS_$G(DGMFE("PRIMKEY")) Q