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