VistA-FOIAVistA/r/REGISTRATION-DGQE-DG-DPT-GR.../DGHTRTX.m

96 lines
3.9 KiB
Mathematica

DGHTRTX ;ALB/JRC - Home Telehealth HL7 Message Monitoring Routine ;10 January 2005 ; 9/14/06 12:52pm
;;5.3;Registration;**644**;Aug 13, 1993;Build 11
;
;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 mnessages 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
;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