IBCNEHLI ;DAOU/ALA - Incoming HL7 messages ;16-JUN-2002
 ;;2.0;INTEGRATED BILLING;**184,252,251,271,300**;21-MAR-94
 ;;Per VHA Directive 10-93-142, this routine should not be modified.
 ;
 ;**Program Description**
 ;  This program parses each incoming HL7 message.
 ;
EN ;  Starting point - put message into a TMP global
 ;
 N ACK,BUFF,DFN,ERACT,ERCON,ERFLG,ERTXT,EVENT,HCT,HLECH,HLEID
 N HLEIDS,HLFS,HLQ,IBPRTCL,IDUZ,MGRP,MSGID,RDAT0,RIEN,SBDEP,SEG
 N SEGMT,SEGMT2,TAG,TQN,TRACE,VRFDT,DISYS,IPCT,PAYRID,PIEN,CNT
 N ERROR,IRIEN,RSTYPE,SUBID,TQIEN
 N DA,EBDA,IBFDA,II,MSGP,SYMBOL,IBSEG,PP,PRIEN,QFL,IBIEN,TQDATA,IBQFL
 N DATAMFK,EPHARM
 ;
 K ^TMP($J,"IBCNEHLI")
 F SEGCNT=1:1 X HLNEXT Q:HLQUIT'>0  D
 . S CNT=0
 . S ^TMP($J,"IBCNEHLI",SEGCNT,CNT)=HLNODE
 . F  S CNT=$O(HLNODE(CNT)) Q:'CNT  D
 .. S ^TMP($J,"IBCNEHLI",SEGCNT,CNT)=HLNODE(CNT)
 ;
 ;  Get the IIV user
 S IDUZ=$$FIND1^DIC(200,"","X","INTERFACE,IB IIV")
 ;   Determine which protocol to use
 S SEGMT=$G(^TMP($J,"IBCNEHLI",1,0))
 I $E(SEGMT,1,3)'="MSH" D  D ERR Q
 . S MSG(1)="MSH Segment is not the first segment found"
 . S MSG(2)="Please log a NOIS for this problem."
 S HLFS=$E(SEGMT,4)
 S EVENT=$P(SEGMT,HLFS,9),IBPRTCL=""
 ;
 ;  The event type determines protocol
 I EVENT="MFN^M01" S TAG="TBL",IBPRTCL="IBCNE IIV MFN IN"
 I EVENT="RPI^I01" S TAG="RSP",IBPRTCL="IBCNE IIV IN" I '$$HL7VAL G XIT
 I EVENT="MFK^M01" S TAG="ACK",IBPRTCL="IBCNE IIV REGISTER"
 I IBPRTCL="" S MSG(1)="Unable to find a protocol for Event = "_EVENT D ERR G XIT
 ; S HLEID=$$HLP^IBCNEHLU(IBPRTCL)
 ;
 ;  Initialize the HL7 variables
 D INIT^HLFNC2(IBPRTCL,.HL)
 ; S HLEIDS=$O(^ORD(101,HLEID,775,"B",0))
 ;
 ;  Call the event tag
 D @TAG
 ;
XIT K ^TMP($J,"IBCNEHLI"),HL,HLNEXT,HLNODE,HLQUIT,SEGCNT
 Q
 ;
TBL ;  Table Update Processing
 D ^IBCNEHLT
 ;
 I ERFLG D ERR
 K ERFLG
 ;
 ; Send MFK Message (Application Acknowledgement)?
 I HL("APAT")="AL",$G(EPHARM) D ^IBCNRMFK
 Q
 ;
RSP ;  Response Processing
 D ^IBCNEHL1
 ;
 K ACK,BUFF,DFN,ERACT,ERCON,ERFLG,ERTXT,EVENT,HCT,HL,HLECH,HLEID
 K HLEIDS,HLFS,HLQ,IBPRTCL,IDUZ,MGRP,MSGID,RDAT0,RIEN,SBDEP,SEG
 K SEGMT,SEGMT2,TAG,TQN,TRACE,VRFDT,DISYS,IPCT,PAYRID,PIEN
 K ERROR,IRIEN,RSTYPE,SUBID,TQIEN
 K DA,EBDA,IBFDA,II,MSGP,SYMBOL,IBSEG,PP,PRIEN,QFL
 Q
 ;
ACK ;  Acknowledgement Processing
 D ^IBCNEHLK
 ;
 Q
 ;
ERR ; Process an error
 S MGRP=$$MGRP^IBCNEUT5()
 D MSG^IBCNEUT5(MGRP,"INCOMING IIV HL7 PROBLEM","MSG(")
 K MSG,MGRP
 Q
 ; 
HL7VAL() ; Check for valid post 300 response
 N X,HCT
 S X=0,HCT=0
 F  S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT=""  D SPAR^IBCNEHLU I $G(IBSEG(1))="PRD" S X=1 Q
 Q X
