[613] | 1 | DGHTRTX ;ALB/JRC - Home Telehealth HL7 Message Monitoring Routine ;10 January 2005 ; 9/14/06 12:52pm
|
---|
| 2 | ;;5.3;Registration;**644**;Aug 13, 1993;Build 11
|
---|
| 3 | ;
|
---|
| 4 | ;This routine when tasked will run at predetermined time intervals
|
---|
| 5 | ;and check to see if there are any HTH HL7 messages that have not
|
---|
| 6 | ;received an application acknowledgment. If it finds messages that
|
---|
| 7 | ;have not received AAs, it will retransmit the HL7 messages up to the
|
---|
| 8 | ;number of times defined in the "DG HTH # OF RETRANSMITS" parameter.
|
---|
| 9 | ;If no AA is received after the 5th try an alert is sent to the
|
---|
| 10 | ;DGHTERR mailgroup. After the 5th try an extended wait time is used
|
---|
| 11 | ;(12 hours) and the process starts a new.
|
---|
| 12 | ;
|
---|
| 13 | EN ;entry point from tasked option, $O thru home telehealth file
|
---|
| 14 | ;(#391.31) "HTHNOACK" xref and find mnessages to retransmit
|
---|
| 15 | N MSGID,NODE,STATUS,RECORD,TRANS,TYPE,ERROR,RETRANS,DTIME,XTIME
|
---|
| 16 | N DGCOUNT,DGDATE,CNT
|
---|
| 17 | S (MSGID,NODE,TRANS,ERROR)="",TYPE=1,CNT=0
|
---|
| 18 | K ^TMP($J,"DGHT")
|
---|
| 19 | ;Get number of allowed retransmissions from parameter file
|
---|
| 20 | S RETRANS=$$GET^XPAR("SYS","DG HTH # OF RETRANSMITS")
|
---|
| 21 | ;Get time interval parameters, convert them to seconds
|
---|
| 22 | S DTIME=$$GET^XPAR("SYS","DG HTH DEFAULT WAIT TIME")*60
|
---|
| 23 | S XTIME=$$GET^XPAR("SYS","DG HTH EXTENDED WAIT TIME")*60
|
---|
| 24 | ;Resolve record to update using MSGID cross reference
|
---|
| 25 | F S MSGID=$O(^DGHT(391.31,"HTHNOACK",MSGID)) Q:MSGID="" D
|
---|
| 26 | .S RECORD=$O(^DGHT(391.31,"D",MSGID,0)) Q:'RECORD
|
---|
| 27 | .S TRANS=$O(^DGHT(391.31,"D",MSGID,RECORD,0)) Q:'TRANS
|
---|
| 28 | .S NODE=$G(^DGHT(391.31,"HTHNOACK",MSGID,RECORD,TRANS))
|
---|
| 29 | .Q:NODE=""
|
---|
| 30 | .S DGCOUNT=$P(NODE,U,1),DGDATE=$P(NODE,U,2)
|
---|
| 31 | .;Check outgoing message status
|
---|
| 32 | .; 0 = message doesn't exist
|
---|
| 33 | .; 1 = waiting in queue
|
---|
| 34 | .; 1.5 = opening connection
|
---|
| 35 | .; 1.7 = awaiting response, # of retries
|
---|
| 36 | .; 2 = awaiting application ack
|
---|
| 37 | .; 3 = successfully completed
|
---|
| 38 | .; 4 = error
|
---|
| 39 | .; 8 = being generated
|
---|
| 40 | .; 9 = awaiting processing
|
---|
| 41 | .S STATUS=+$$MSGSTAT^HLUTIL(MSGID)
|
---|
| 42 | .;If status=3 kill xref and quit
|
---|
| 43 | .I STATUS=3 D KILLXREF^DGHTXREF(MSGID) Q
|
---|
| 44 | .D CHKMSG
|
---|
| 45 | I $O(^TMP($J,"DGHT",0)) D MESSAGE K ^TMP($J)
|
---|
| 46 | Q
|
---|
| 47 | ;
|
---|
| 48 | RTX ;Retransmit message
|
---|
| 49 | N X,DGDATE
|
---|
| 50 | S X=$$MSGACT^HLUTIL(MSGID,2)
|
---|
| 51 | ;Update counter and trans date
|
---|
| 52 | S DGDATE=$$NOW^XLFDT()
|
---|
| 53 | D SETXREF^DGHTXREF(MSGID,1,1)
|
---|
| 54 | Q
|
---|
| 55 | ;
|
---|
| 56 | MESSAGE ;Build bulletin and send to mail group
|
---|
| 57 | ; Input: Home telehealth patient record
|
---|
| 58 | ; Output:
|
---|
| 59 | ;
|
---|
| 60 | N MSGTEXT,XMTEXT,XMSUB,XMY,XMCHAN,XMZ,XMDUZ,MSGTYPE,NODE0,NODE1
|
---|
| 61 | N RECORD,TNODE
|
---|
| 62 | ;Get records from ^tmp global
|
---|
| 63 | S (RECORD,CNT)=0 F S RECORD=$O(^TMP($J,"DGHT",RECORD)) Q:'RECORD D
|
---|
| 64 | .S TRANS=0 F S TRANS=$O(^TMP($J,"DGHT",RECORD,TRANS)) Q:'TRANS D
|
---|
| 65 | ..S TNODE=^TMP($J,"DGHT",RECORD,TRANS)
|
---|
| 66 | ..S MSGID=$P(TNODE,U,2),ERROR=$P(TNODE,U,2)
|
---|
| 67 | ..;Get 0th node and trans nodes
|
---|
| 68 | ..S NODE0=$G(^DGHT(391.31,RECORD,0))
|
---|
| 69 | ..S NODE1=$G(^DGHT(391.31,RECORD,"TRAN",TRANS,0)),MSGTYPE=$P(NODE1,U,4)
|
---|
| 70 | ..S MSGTYPE=$S(MSGTYPE="A":"Sign-up/Activation",MSGTYPE="I":"Inactivation",1:""),CNT=CNT+1
|
---|
| 71 | ..S MSGTEXT(CNT)="Home Telehealth "_MSGTYPE_" was REJECTED",CNT=CNT+1
|
---|
| 72 | ..S MSGTEXT(CNT)=" ",CNT=CNT+1
|
---|
| 73 | ..S MSGTEXT(CNT)="Date: "_$$FMTE^XLFDT($$NOW^XLFDT(),1),CNT=CNT+1
|
---|
| 74 | ..S MSGTEXT(CNT)="Patient: "_$$GET1^DIQ(2,$P(NODE0,U,2),.01,"E")
|
---|
| 75 | ..S CNT=CNT+1,MSGTEXT(CNT+1)="Message ID: "_MSGID,CNT=CNT+1
|
---|
| 76 | ..S MSGTEXT(CNT)="Error Code: "_ERROR,CNT=CNT+1
|
---|
| 77 | ..S MSGTEXT(CNT)="",CNT=CNT+1
|
---|
| 78 | ;Send message to mail group
|
---|
| 79 | S XMSUB="Home Telehealth Patient "_MSGTYPE_" Reject"
|
---|
| 80 | S XMTEXT="MSGTEXT("
|
---|
| 81 | S XMY("G.DGHTERR")=""
|
---|
| 82 | S XMCHAN=1
|
---|
| 83 | S XMDUZ="Home Telehealth Patient "_MSGTYPE
|
---|
| 84 | D ^XMD
|
---|
| 85 | Q
|
---|
| 86 | ;
|
---|
| 87 | CHKMSG ;Check message for retransmission
|
---|
| 88 | N DIFF
|
---|
| 89 | S DIFF=$$FMDIFF^XLFDT($$NOW^XLFDT(),DGDATE,2)
|
---|
| 90 | I DGCOUNT<RETRANS D Q
|
---|
| 91 | .I DIFF>DTIME D RTX I (DGCOUNT+1)=RETRANS D Q
|
---|
| 92 | ..S ERROR=$S('STATUS:"HL7 MESSAGE DOES NOT EXIST. REQUIRES MANUAL RETRANSMISSION",1:"DEFAULT MAXIMUM RETRANSMISSIONS REACHED")
|
---|
| 93 | ..S ^TMP($J,"DGHT",RECORD,TRANS)=MSGID_U_ERROR
|
---|
| 94 | I DIFF>XTIME S DGCOUNT=0 D RTX Q
|
---|
| 95 | Q
|
---|