[613] | 1 | IBCNEHLI ;DAOU/ALA - Incoming HL7 messages ;16-JUN-2002
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**184,252,251,271,300**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ;**Program Description**
|
---|
| 6 | ; This program parses each incoming HL7 message.
|
---|
| 7 | ;
|
---|
| 8 | EN ; Starting point - put message into a TMP global
|
---|
| 9 | ;
|
---|
| 10 | N ACK,BUFF,DFN,ERACT,ERCON,ERFLG,ERTXT,EVENT,HCT,HLECH,HLEID
|
---|
| 11 | N HLEIDS,HLFS,HLQ,IBPRTCL,IDUZ,MGRP,MSGID,RDAT0,RIEN,SBDEP,SEG
|
---|
| 12 | N SEGMT,SEGMT2,TAG,TQN,TRACE,VRFDT,DISYS,IPCT,PAYRID,PIEN,CNT
|
---|
| 13 | N ERROR,IRIEN,RSTYPE,SUBID,TQIEN
|
---|
| 14 | N DA,EBDA,IBFDA,II,MSGP,SYMBOL,IBSEG,PP,PRIEN,QFL,IBIEN,TQDATA,IBQFL
|
---|
| 15 | N DATAMFK,EPHARM
|
---|
| 16 | ;
|
---|
| 17 | K ^TMP($J,"IBCNEHLI")
|
---|
| 18 | F SEGCNT=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
| 19 | . S CNT=0
|
---|
| 20 | . S ^TMP($J,"IBCNEHLI",SEGCNT,CNT)=HLNODE
|
---|
| 21 | . F S CNT=$O(HLNODE(CNT)) Q:'CNT D
|
---|
| 22 | .. S ^TMP($J,"IBCNEHLI",SEGCNT,CNT)=HLNODE(CNT)
|
---|
| 23 | ;
|
---|
| 24 | ; Get the IIV user
|
---|
| 25 | S IDUZ=$$FIND1^DIC(200,"","X","INTERFACE,IB IIV")
|
---|
| 26 | ; Determine which protocol to use
|
---|
| 27 | S SEGMT=$G(^TMP($J,"IBCNEHLI",1,0))
|
---|
| 28 | I $E(SEGMT,1,3)'="MSH" D D ERR Q
|
---|
| 29 | . S MSG(1)="MSH Segment is not the first segment found"
|
---|
| 30 | . S MSG(2)="Please log a NOIS for this problem."
|
---|
| 31 | S HLFS=$E(SEGMT,4)
|
---|
| 32 | S EVENT=$P(SEGMT,HLFS,9),IBPRTCL=""
|
---|
| 33 | ;
|
---|
| 34 | ; The event type determines protocol
|
---|
| 35 | I EVENT="MFN^M01" S TAG="TBL",IBPRTCL="IBCNE IIV MFN IN"
|
---|
| 36 | I EVENT="RPI^I01" S TAG="RSP",IBPRTCL="IBCNE IIV IN" I '$$HL7VAL G XIT
|
---|
| 37 | I EVENT="MFK^M01" S TAG="ACK",IBPRTCL="IBCNE IIV REGISTER"
|
---|
| 38 | I IBPRTCL="" S MSG(1)="Unable to find a protocol for Event = "_EVENT D ERR G XIT
|
---|
| 39 | ; S HLEID=$$HLP^IBCNEHLU(IBPRTCL)
|
---|
| 40 | ;
|
---|
| 41 | ; Initialize the HL7 variables
|
---|
| 42 | D INIT^HLFNC2(IBPRTCL,.HL)
|
---|
| 43 | ; S HLEIDS=$O(^ORD(101,HLEID,775,"B",0))
|
---|
| 44 | ;
|
---|
| 45 | ; Call the event tag
|
---|
| 46 | D @TAG
|
---|
| 47 | ;
|
---|
| 48 | XIT K ^TMP($J,"IBCNEHLI"),HL,HLNEXT,HLNODE,HLQUIT,SEGCNT
|
---|
| 49 | Q
|
---|
| 50 | ;
|
---|
| 51 | TBL ; Table Update Processing
|
---|
| 52 | D ^IBCNEHLT
|
---|
| 53 | ;
|
---|
| 54 | I ERFLG D ERR
|
---|
| 55 | K ERFLG
|
---|
| 56 | ;
|
---|
| 57 | ; Send MFK Message (Application Acknowledgement)?
|
---|
| 58 | I HL("APAT")="AL",$G(EPHARM) D ^IBCNRMFK
|
---|
| 59 | Q
|
---|
| 60 | ;
|
---|
| 61 | RSP ; Response Processing
|
---|
| 62 | D ^IBCNEHL1
|
---|
| 63 | ;
|
---|
| 64 | K ACK,BUFF,DFN,ERACT,ERCON,ERFLG,ERTXT,EVENT,HCT,HL,HLECH,HLEID
|
---|
| 65 | K HLEIDS,HLFS,HLQ,IBPRTCL,IDUZ,MGRP,MSGID,RDAT0,RIEN,SBDEP,SEG
|
---|
| 66 | K SEGMT,SEGMT2,TAG,TQN,TRACE,VRFDT,DISYS,IPCT,PAYRID,PIEN
|
---|
| 67 | K ERROR,IRIEN,RSTYPE,SUBID,TQIEN
|
---|
| 68 | K DA,EBDA,IBFDA,II,MSGP,SYMBOL,IBSEG,PP,PRIEN,QFL
|
---|
| 69 | Q
|
---|
| 70 | ;
|
---|
| 71 | ACK ; Acknowledgement Processing
|
---|
| 72 | D ^IBCNEHLK
|
---|
| 73 | ;
|
---|
| 74 | Q
|
---|
| 75 | ;
|
---|
| 76 | ERR ; Process an error
|
---|
| 77 | S MGRP=$$MGRP^IBCNEUT5()
|
---|
| 78 | D MSG^IBCNEUT5(MGRP,"INCOMING IIV HL7 PROBLEM","MSG(")
|
---|
| 79 | K MSG,MGRP
|
---|
| 80 | Q
|
---|
| 81 | ;
|
---|
| 82 | HL7VAL() ; Check for valid post 300 response
|
---|
| 83 | N X,HCT
|
---|
| 84 | S X=0,HCT=0
|
---|
| 85 | F S HCT=$O(^TMP($J,"IBCNEHLI",HCT)) Q:HCT="" D SPAR^IBCNEHLU I $G(IBSEG(1))="PRD" S X=1 Q
|
---|
| 86 | Q X
|
---|