Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: MHV7R7

MHV7R7.m

Go to the documentation of this file.
  1. MHV7R7 ;KUM - HL7 RECEIVER FOR ADMIN QUERIES ; 6/7/10 10:34am
  1. ;;1.0;My HealtheVet;**11**;Aug 23, 2005;Build 61
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; Integration Agreements:
  1. ; 10104 : $$UP^XLFSTR
  1. ; 10104 : $$REPLACE^XLFSTR
  1. Q
  1. ;
  1. DFTP03 ;Process DFT^P03 messages from the MHVSM DFT-P03 Subscriber protocol
  1. ;
  1. ; This routine and subroutines assume that all VistA HL7 environment
  1. ; variables are properly initialized and will produce a fatal error
  1. ; if they are missing.
  1. ;
  1. ; The message will be checked to see if it is a valid query.
  1. ; If not a negative acknowledgement will be sent. If the query is an
  1. ; immediate mode or synchronous query, the realtime request manager
  1. ; is called to handle the query. This means the query will be
  1. ; processed and a response generated immediately.
  1. ; In the future deferred mode queries may be filed in a database for
  1. ; later processing, or transmission.
  1. ;
  1. ; Input:
  1. ; HL7 environment variables
  1. ;
  1. ; Output:
  1. ; Processed query or negative acknowledgement
  1. ; If handled real-time the query response is generated
  1. ;
  1. ; Integration Agreements
  1. ;
  1. ; 10104 UP^XLFSTR
  1. ;
  1. N MSGROOT,QRY,XMT,ERR,RNAME
  1. S (QRY,XMT,ERR)=""
  1. ; Inbound query messages are small enough to be held in a local.
  1. ; The following lines commented out support use of global and are
  1. ; left in case use a global becomes necessary.
  1. ;S MSGROOT="^TMP(""MHV7"",$J)"
  1. ;K @MSGROOT
  1. S MSGROOT="MHV7MSG"
  1. N MHV7MSG
  1. D LOADXMT^MHV7U(.XMT) ;Load inbound message information
  1. ;
  1. S RNAME=XMT("MESSAGE TYPE")_"-"_XMT("EVENT TYPE")_" RECEIVER"
  1. D LOG^MHVUL2(RNAME,"BEGIN","S","TRACE")
  1. ;
  1. D LOADMSG^MHV7U(MSGROOT)
  1. D LOG^MHVUL2("LOAD",MSGROOT,"I","DEBUG")
  1. ;
  1. D PARSEMSG^MHV7U(MSGROOT,.HL)
  1. D LOG^MHVUL2("PARSE",MSGROOT,"I","DEBUG")
  1. ;
  1. I '$$VALIDMSG(MSGROOT,.QRY,.XMT,.ERR) D Q
  1. . D LOG^MHVUL2("MSG CHECK","INVALID^"_ERR,"S","ERROR")
  1. . D XMIT^MHV7T(.QRY,.XMT,ERR,"",.HL)
  1. D LOG^MHVUL2("MSG CHECK","VALID","S","TRACE")
  1. ;
  1. ; Immediate Mode
  1. ; Deferred mode queries are not supported at this time
  1. D REALTIME^MHVRQI(.QRY,.XMT,.HL)
  1. ;
  1. D LOG^MHVUL2(RNAME,"END","S","TRACE")
  1. D RESET^MHVUL2 ;Clean up TMP used by logging
  1. ;K @MSGROOT
  1. ;
  1. Q
  1. ;
  1. VALIDMSG(MSGROOT,QRY,XMT,ERR) ;Validate message
  1. ;
  1. ; Messages handled: DFT^P03
  1. ;
  1. ; QBP query messages must contain FT1, EVN, PID, PV1, ZEL segments
  1. ; Any additional segments are ignored
  1. ;
  1. ; Input:
  1. ; MSGROOT - Root of array holding message
  1. ; XMT - Transmission parameters
  1. ;
  1. ; Output:
  1. ; QRY - Query Array
  1. ; XMT - Transmission parameters
  1. ; ERR - segment^sequence^field^code^ACK type^error text
  1. ;
  1. N MSH,PID,STF,QPD,RCP,REQFLDS,REQID,REQTYPE,FROMDT,TODT,PRI,QTAG,QNAME,MHVCSIE
  1. N SEGTYPE,CNT,OCNT,RXNUM,QTY,UNIT,REQFLDS,CHKSEG
  1. K QRY,ERR
  1. S MHVCSIE=""
  1. S ERR=""
  1. ;
  1. ; Set up basics for responding to message.
  1. ;-----------------------------------------
  1. S QRY("MID")=XMT("MID") ;Message ID
  1. S QRY("QPD")=""
  1. ;
  1. ; Validate message is a well-formed DFT query message.
  1. ;-----------------------------------------------------------
  1. ; Must have MSH first, followed by FT1,EVN,PID,PV1,ZEL in any order
  1. ; are optional. All other segments are ignored.
  1. ;
  1. I $G(@MSGROOT@(1,0))="MSH" M MSH=@MSGROOT@(1)
  1. E S ERR="MSH^1^^100^AE^Missing MSH segment" Q 0
  1. ;
  1. S CNT=2,OCNT=0
  1. F Q:'$D(@MSGROOT@(CNT)) D S CNT=CNT+1
  1. . S SEGTYPE=$G(@MSGROOT@(CNT,0))
  1. . I SEGTYPE="FT1" M FT1=@MSGROOT@(CNT),QRY("FT1")=FT1 Q
  1. . I SEGTYPE="EVN" M EVN=@MSGROOT@(CNT),QRY("EVN")=EVN Q
  1. . I SEGTYPE="PID" M PID=@MSGROOT@(CNT),QRY("PID")=PID Q
  1. . I SEGTYPE="PV1" M PV1=@MSGROOT@(CNT),QRY("PV1")=PV1 Q
  1. . I SEGTYPE="ZEL" M ZEL=@MSGROOT@(CNT),QRY("ZEL")=ZEL Q
  1. . Q
  1. ;
  1. I '$D(FT1) S ERR="FT1^1^^100^AE^Missing FT1 segment" Q 0
  1. I '$D(EVN) S ERR="EVN^1^^100^AE^Missing EVN segment" Q 0
  1. I '$D(PID) S ERR="PID^1^^100^AE^Missing PID segment" Q 0
  1. I '$D(PV1) S ERR="PV1^1^^100^AE^Missing PV1 segment" Q 0
  1. I '$D(ZEL) S ERR="ZEL^1^^100^AE^Missing ZEL segment" Q 0
  1. ;
  1. S (QRY("ECFILE"),QRY("ECL"),QRY("ECD"),QRY("ECC"),QRY("ECDT"),QRY("ECP"),QRY("ECICN"),QRY("ECMN"),QRY("ECDUZ"))=""
  1. S (QRY("ECPTSTAT"),QRY("ECP"),QRY("ECDX"),QRY("EC4"),QRY("ECELCL"))=""
  1. ;
  1. S REQTYPE="SMFiler"
  1. I REQTYPE="" S ERR="MSH^1^3^101^AE^Missing Request Type" Q 0
  1. I '$$VALRTYPE^MHV7RU(REQTYPE,.QRY,.ERR) S ERR="FT1^1^3^"_ERR Q 0
  1. ;
  1. I ERR Q 0
  1. ;
  1. I $D(FT1) D
  1. .S QRY("ECFILE")=$G(FT1(6)) ;File Number
  1. .S QRY("ECD")=$G(FT1(13)) ; DSS Unit IEN
  1. .S QRY("ECP")=$G(FT1(25,1,2)) ;Procedure
  1. .; Diagnosis codes are seperated by ^. make change from ^ to ;
  1. .S MHVSPEC("^")=";"
  1. .S QRY("ECDX")=$$REPLACE^XLFSTR($G(FT1(19)),.MHVSPEC)
  1. I $D(EVN) D
  1. .S QRY("ECL")=$G(EVN(7,1,2)) ;Location IEN
  1. .S QRY("ECDT")=$G(EVN(2)) ;Procedure Date and Time
  1. .S QRY("ECDUZ")=$G(EVN(5)) ;Enter/Edited By
  1. I $D(PID) D
  1. .S QRY("ECICN")=$G(PID(3)) ;Patient ICN
  1. I $D(PV1) D
  1. .S QRY("ECMN")=$G(PV1(10)) ;Ordering Section
  1. .; Providers are seperated by ^. Please make change from ^ to ;.
  1. .S MHVSPEC("^")=";"
  1. .S QRY("ECU")=$$REPLACE^XLFSTR($G(PV1(7)),.MHVSPEC)
  1. .S QRY("EC4")=$G(PV1(3,1,4,2)) ;Associated Clinic
  1. I $D(ZEL) D
  1. .S QRY("ECPTSTAT")=$G(ZEL(9)) ;Patient Status
  1. .; File classification AO^IR^SC^EC^MST^HNC^C^Project SHAD
  1. .S QRY("ECELCL")=$G(ZEL(2))_";"_$G(ZEL(18))_";"_$G(ZEL(19))_";"_$G(ZEL(31))_";"_$G(ZEL(20))_";"_$G(ZEL(23))_";"
  1. .S QRY("ECELCL")=QRY("ECELCL")_$G(ZEL(42))_";"_$G(ZEL(37))_";"_$G(ZEL(44))
  1. S QRY("ECC")=0
  1. ; All validations should be in Validation routine.
  1. S MHVSTR=$G(QRY("ECFILE"))_"^"_$G(QRY("ECL"))_"^"_$G(QRY("ECD"))_"^"_$G(QRY("ECC"))_"^"_$G(QRY("ECDT"))_"^"
  1. S MHVSTR=MHVSTR_$G(QRY("ECP"))_"^"_$G(QRY("ECICN"))_"^"_$G(QRY("ECMN"))_"^"_$G(QRY("ECDUZ"))_"^"_$G(QRY("ECPTSTAT"))_"^"
  1. S MHVSTR=MHVSTR_$G(QRY("ECU"))_"^"_$G(QRY("ECDX"))_"^"_$G(QRY("EC4"))_"^"_$G(QRY("ECELCL"))
  1. ;
  1. ;Validations for SMFiler input parameters are in ECFLRPC as they are complex and more
  1. ;
  1. I ERR'="" Q 0
  1. ;
  1. Q 1
  1. ;