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