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

BADEMRG1.m

Go to the documentation of this file.
  1. BADEMRG1 ;IHS/MSC/MGH/PLS - Dentrix HL7 interface ;28-Jun-2010 16:59;MGH
  1. ;;1.0;DENTAL/EDR INTERFACE;**1**;AUG 22, 2011
  1. Q
  1. ; Build Outbound A40
  1. NEWMSG(FROM,TO,EVNTTYPE) ;EP
  1. N HLPM,HLST,ARY,HLQ,APPARMS,HLPM,HLMSGIEN,HLECH,HLFS,ERR,WHO
  1. N LN,HL1,HRCN,FLD,LP,X,LN
  1. S LN=0
  1. S HLPM("MESSAGE TYPE")="ADT"
  1. S HLPM("EVENT")=EVNTTYPE
  1. S HLPM("VERSION")=2.4
  1. I '$$NEWMSG^HLOAPI(.HLPM,.HLST,.ERR) D NOTIF^BADEHL1(DFN,"Unable to build HL7 message. "_$G(ERR)) Q
  1. S HLFS=HLPM("FIELD SEPARATOR")
  1. S HLECH=HLPM("ENCODING CHARACTERS")
  1. S HL1("ECH")=HLECH
  1. S HL1("FS")=HLFS
  1. S HL1("Q")=""
  1. S HL1("VER")=HLPM("VERSION")
  1. ;Create segments
  1. ;
  1. D EVN^BADEHL1(EVNTTYPE)
  1. I '$D(ERR) D PID^BADEHL1(TO)
  1. I '$D(ERR) D MRG(FROM)
  1. I '$D(ERR) D
  1. .; Define sending and receiving parameters
  1. .S APPARMS("SENDING APPLICATION")="RPMS-DEN"
  1. .S APPARMS("ACCEPT ACK TYPE")="AL" ;Commit ACK type
  1. .S APPARMS("APP ACK RESPONSE")="AACK^BADEHL1" ;Callback when 'application ACK' is received
  1. .S APPARMS("ACCEPT ACK RESPONSE")="CACK^BADEHL1" ;Callback when 'commit ACK' is received
  1. .S APPARMS("APP ACK TYPE")="AL" ;Application ACK type
  1. .S APPARMS("QUEUE")="DENT ADT" ;Incoming QUEUE
  1. .;S APPARMS("RECEIVING APPLICATION")="DENTRIX"
  1. .;S APPARMS("FACILITY LINK NAME")="DENTRIX"
  1. .;S APPARMS("FAILURE RESPONSE")="FAILURE^DENTHL1" ;Callback for transmission failures (i.e. - No 'commit ACK' received or message not sendable.
  1. .S WHO("RECEIVING APPLICATION")="DENTRIX"
  1. .S WHO("FACILITY LINK NAME")="DENTRIX"
  1. .S WHO("STATION NUMBER")=11555 ;Used for testing on external RPMS system
  1. .I '$$SENDONE^HLOAPI1(.HLST,.APPARMS,.WHO,.ERR) D NOTIF^BADEHL1(DFN,"Unable to send HL7 message. "_$G(ERR))
  1. Q
  1. ;
  1. AACK ; EP - Application ACK callback - called when AA, AE or AR is received.
  1. N DATA,AACK,XQAID,XQDATA,XQA,XQAMSG,MSGID
  1. Q:'$G(HLMSGIEN)
  1. S MSGID=$P($G(^HLB(+HLMSGIEN,0)),U)
  1. S AACK=$G(^HLB(HLMSGIEN,4))
  1. I $P(AACK,U,3)'["|AA|" D
  1. .S XQAMSG="EDR message "_MSGID_" did not receive a correct application ack."
  1. .S XQAID="ADEN,"_MSGID_","_50
  1. .S XQDATA=$P(AACK,U,3)
  1. .S XQA("G.RPMS DENTAL")=""
  1. .D SETUP^XQALERT
  1. Q
  1. ;
  1. CACK ; EP - Commit ACK callback - called when CA, CE or CR is received.
  1. N CACK,XQAID,XQAMSG,XQA,XQDATA,MSGID
  1. S MSGID=$P($G(^HLB(+HLMSGIEN,0)),U)
  1. S CACK=$G(^HLB(HLMSGIEN,4))
  1. I $P(CACK,U,3)'["|CA|" D
  1. .S XQAMSG="EDR message "_MSGID_" did not receive a correct commit acknowledgement."
  1. .S XQAID="ADEN,"_MSGID_","_50
  1. .S XQDATA=$P(CACK,U,3)
  1. .S XQA("G.RPMS DENTAL")=""
  1. .D SETUP^XQALERT
  1. Q
  1. ;
  1. ; Send Notification to group
  1. ; Input: DFN = Patient
  1. ; MSG = Main message
  1. NOTIF(TO,FROM,MSG) ;EP
  1. N PNAM,PVDIEN,RET,X,SAVE,FNAME
  1. N XQA,XQAID,XQADATA,XQAMSG
  1. S PNAM=$P($G(^DPT(TO,0)),U,1)
  1. S FNAME=$P($G(^DPT(FROM,0)),U,1)
  1. I $L(PNAM)>15 S PNAM=$E(PNAM,1,15)
  1. I $L(FNAME)>15 S FNAME=$E(FNAME,1,15)
  1. S XQAMSG=PNAM_" "
  1. S XQAMSG=XQAMSG_$G(MSG)
  1. S XQAID="ADEN,"_TO_","_50
  1. S XQDATA="FROM="_FNAME_" TO="_PNAM
  1. S XQA("G.RPMS DENTAL")=""
  1. D SETUP^XQALERT
  1. ;Save the DFN in a parameter for correction
  1. S X=$$GET^XPAR("ALL","BADE EDR MRG PTS ERRORS",1,"E")
  1. S X=X+1
  1. S SAVE="From: "_FROM_" to: "_TO_" "_MSG
  1. D EN^XPAR("SYS","BADE EDR MRG PTS ERRORS",X,SAVE)
  1. Q
  1. ;
  1. ERR ;
  1. Q
  1. MRG(FROM) ;EP
  1. N MRG,NAME,VAL
  1. D SET(.ARY,"MRG",0)
  1. D SET(.ARY,FROM,1)
  1. S NAME=$P(^DPT(FROM,0),U,1)
  1. S FLD=$$HLNAME^XLFNAME(NAME)
  1. F LP=1:1:$L(FLD,$E(HLECH)) S VAL=$P(FLD,$E(HLECH),LP) D
  1. .D SET(.ARY,VAL,7,LP)
  1. S X=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. I $D(ERR) D NOTIF^BADEHL1(DFN,"Can't create MRG. "_ERR)
  1. Q
  1. ; Create MSA segment
  1. MSA ;EP
  1. N MSA
  1. D SET(.ARY,"MSA",0)
  1. D SET(.ARY,"AA",1)
  1. D SET(.ARY,"TODO-MSGID",2)
  1. D SET(.ARY,"Transaction Successful",3)
  1. D SET(.ARY,"todo-010",4)
  1. S MSA=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ; Create MSH segment
  1. ;EP
  1. N MSH
  1. D SET(.ARY,"MSH",0)
  1. S MSH=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. SET(ARY,V,F,C,S,R) ;EP
  1. D SET^HLOAPI(.ARY,.V,.F,.C,.S,.R)
  1. Q