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

DGHTRTX.m

Go to the documentation of this file.
  1. DGHTRTX ;ALB/JRC - Home Telehealth HL7 Message Monitoring Routine ;10 January 2005 ; 1/17/14 12:02pm
  1. ;;5.3;Registration;**644,859**;Aug 13, 1993;Build 8
  1. ;
  1. ;This routine when tasked will run at predetermined time intervals
  1. ;and check to see if there are any HTH HL7 messages that have not
  1. ;received an application acknowledgment. If it finds messages that
  1. ;have not received AAs, it will retransmit the HL7 messages up to the
  1. ;number of times defined in the "DG HTH # OF RETRANSMITS" parameter.
  1. ;If no AA is received after the 5th try an alert is sent to the
  1. ;DGHTERR mailgroup. After the 5th try an extended wait time is used
  1. ;(12 hours) and the process starts a new.
  1. ;
  1. EN ;entry point from tasked option, $O thru home telehealth file
  1. ;(#391.31) "HTHNOACK" xref and find messages to retransmit
  1. N MSGID,NODE,STATUS,RECORD,TRANS,TYPE,ERROR,RETRANS,DTIME,XTIME
  1. N DGCOUNT,DGDATE,CNT
  1. S (MSGID,NODE,TRANS,ERROR)="",TYPE=1,CNT=0
  1. K ^TMP($J,"DGHT")
  1. ;Get number of allowed retransmissions from parameter file
  1. S RETRANS=$$GET^XPAR("SYS","DG HTH # OF RETRANSMITS")
  1. ;Get time interval parameters, convert them to seconds
  1. S DTIME=$$GET^XPAR("SYS","DG HTH DEFAULT WAIT TIME")*60
  1. S XTIME=$$GET^XPAR("SYS","DG HTH EXTENDED WAIT TIME")*60
  1. ;Resolve record to update using MSGID cross reference
  1. F S MSGID=$O(^DGHT(391.31,"HTHNOACK",MSGID)) Q:MSGID="" D
  1. .S RECORD=$O(^DGHT(391.31,"D",MSGID,0)) Q:'RECORD
  1. .S TRANS=$O(^DGHT(391.31,"D",MSGID,RECORD,0)) Q:'TRANS
  1. .S NODE=$G(^DGHT(391.31,"HTHNOACK",MSGID,RECORD,TRANS))
  1. .Q:NODE=""
  1. .S DGCOUNT=$P(NODE,U,1),DGDATE=$P(NODE,U,2)
  1. .;Check outgoing message status
  1. .; 0 = message doesn't exist
  1. .; 1 = waiting in queue
  1. .; 1.5 = opening connection
  1. .; 1.7 = awaiting response, # of retries
  1. .; 2 = awaiting application ack
  1. .; 3 = successfully completed
  1. .; 4 = error
  1. .; 8 = being generated
  1. .; 9 = awaiting processing
  1. .S STATUS=+$$MSGSTAT^HLUTIL(MSGID)
  1. .;If status=3 kill xref and quit
  1. .I STATUS=3 D KILLXREF^DGHTXREF(MSGID) Q
  1. .D CHKMSG
  1. I $O(^TMP($J,"DGHT",0)) D MESSAGE K ^TMP($J)
  1. Q
  1. ;
  1. RTX ;Retransmit message
  1. N X,DGDATE
  1. S X=$$MSGACT^HLUTIL(MSGID,2)
  1. ;Update counter and trans date
  1. S DGDATE=$$NOW^XLFDT()
  1. D SETXREF^DGHTXREF(MSGID,1,1)
  1. Q
  1. ;
  1. MESSAGE ;Build bulletin and send to mail group
  1. ; Input: Home telehealth patient record
  1. ; Output:
  1. ;
  1. N MSGTEXT,XMTEXT,XMSUB,XMY,XMCHAN,XMZ,XMDUZ,MSGTYPE,NODE0,NODE1
  1. N RECORD,TNODE
  1. ;Get records from ^tmp global
  1. S (RECORD,CNT)=0 F S RECORD=$O(^TMP($J,"DGHT",RECORD)) Q:'RECORD D
  1. .S TRANS=0 F S TRANS=$O(^TMP($J,"DGHT",RECORD,TRANS)) Q:'TRANS D
  1. ..S TNODE=^TMP($J,"DGHT",RECORD,TRANS)
  1. ..S MSGID=$P(TNODE,U,2),ERROR=$P(TNODE,U,2)
  1. ..;Get 0th node and trans nodes
  1. ..S NODE0=$G(^DGHT(391.31,RECORD,0))
  1. ..S NODE1=$G(^DGHT(391.31,RECORD,"TRAN",TRANS,0)),MSGTYPE=$P(NODE1,U,4)
  1. ..S MSGTYPE=$S(MSGTYPE="A":"Sign-up/Activation",MSGTYPE="I":"Inactivation",1:""),CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Home Telehealth "_MSGTYPE_" was REJECTED",CNT=CNT+1
  1. ..S MSGTEXT(CNT)=" ",CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Date: "_$$FMTE^XLFDT($$NOW^XLFDT(),1),CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Patient: "_$$GET1^DIQ(2,$P(NODE0,U,2),.01,"E")
  1. ..S CNT=CNT+1,MSGTEXT(CNT+1)="Message ID: "_MSGID,CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Error Code: "_ERROR,CNT=CNT+1
  1. ..S MSGTEXT(CNT)="",CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Message ID: "_$P(TNODE,U,1),CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Activation Date: "_$$GET1^DIQ(391.31,RECORD,5),CNT=CNT+1
  1. ..S MSGTEXT(CNT)="Vendor: "_$$GET1^DIQ(391.31,RECORD,2),CNT=CNT+1
  1. ;Send message to mail group
  1. S XMSUB="Home Telehealth Patient "_MSGTYPE_" Reject"
  1. S XMTEXT="MSGTEXT("
  1. S XMY("G.DGHTERR")=""
  1. S XMCHAN=1
  1. S XMDUZ="Home Telehealth Patient "_MSGTYPE
  1. D ^XMD
  1. Q
  1. ;
  1. CHKMSG ;Check message for retransmission
  1. N DIFF
  1. S DIFF=$$FMDIFF^XLFDT($$NOW^XLFDT(),DGDATE,2)
  1. I DGCOUNT<RETRANS D Q
  1. .I DIFF>DTIME D RTX I (DGCOUNT+1)=RETRANS D Q
  1. ..S ERROR=$S('STATUS:"HL7 MESSAGE DOES NOT EXIST. REQUIRES MANUAL RETRANSMISSION",1:"DEFAULT MAXIMUM RETRANSMISSIONS REACHED")
  1. ..S ^TMP($J,"DGHT",RECORD,TRANS)=MSGID_U_ERROR
  1. I DIFF>XTIME S DGCOUNT=0 D RTX Q
  1. Q