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