1 | ORRDI2 ; SLC/JMH - RDI routine for user interface and data cleanup; 3/24/05 2:31 ; 1/11/07 8:12am
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**232**;Dec 17, 1997;Build 19
|
---|
3 | ;
|
---|
4 | SET ;utility to set RDI related parameters
|
---|
5 | I '$$PATCH^XPDUTL("OR*3.0*238") D Q
|
---|
6 | . W !,"This menu is locked until patch OR*3.0*238 is installed."
|
---|
7 | N QUIT,QUITALL
|
---|
8 | W !!,"Sets System wide parameters to control order checking against"
|
---|
9 | W !," remote data",!
|
---|
10 | F Q:$G(QUIT)!($G(QUITALL)) D
|
---|
11 | . N VAL,VALEXT,DIR,DTOUT,Y
|
---|
12 | . S VAL=$$GET^XPAR("SYS","OR RDI HAVE HDR")
|
---|
13 | . S VALEXT="NO" I VAL=1 S VALEXT="YES"
|
---|
14 | . S DIR("A")="HAVE AN HDR"
|
---|
15 | . S DIR("B")=VALEXT
|
---|
16 | . S DIR("?")="^D HELP1^ORRDI2"
|
---|
17 | . S DIR(0)="Y"
|
---|
18 | . D ^DIR
|
---|
19 | . I $G(Y)="^"!($G(DTOUT)) S QUITALL=1
|
---|
20 | . I $G(Y)=1!($G(Y)=0) S QUIT=1 D
|
---|
21 | . . D EN^XPAR("SYS","OR RDI HAVE HDR",,Y)
|
---|
22 | I $G(QUITALL) Q
|
---|
23 | I '$$GET^XPAR("SYS","OR RDI HAVE HDR") Q
|
---|
24 | S QUIT=0
|
---|
25 | F Q:$G(QUIT)!($G(QUITALL)) D
|
---|
26 | . N VAL,VALEXT,DIR,DTOUT,Y
|
---|
27 | . S VAL=$$GET^XPAR("SYS","OR RDI CACHE TIME")
|
---|
28 | . S VALEXT=$G(VAL,0)
|
---|
29 | . S DIR("A")="CACHE TIME (Minutes)"
|
---|
30 | . S DIR("B")=VALEXT
|
---|
31 | . S DIR("?")="^D HELP3^ORRDI2"
|
---|
32 | . S DIR(0)="N^0:9999:0"
|
---|
33 | . D ^DIR
|
---|
34 | . I $G(Y)="^"!($G(DTOUT)) S QUITALL=1
|
---|
35 | . I $G(Y)>-1 S QUIT=1 D
|
---|
36 | . . D EN^XPAR("SYS","OR RDI CACHE TIME",,Y)
|
---|
37 | Q
|
---|
38 | HELP1 ;
|
---|
39 | W "Set this to ""YES"" if this system has an HDR system that"
|
---|
40 | W !," it uses to access remote data."
|
---|
41 | Q
|
---|
42 | HELP3 ;
|
---|
43 | W "Set this to the number of minutes that the retrieved data is "
|
---|
44 | W !," to be considered valid for order checking purposes."
|
---|
45 | Q
|
---|
46 | LIST ;
|
---|
47 | W !
|
---|
48 | W $$GET^XPAR("SYS","OR RDI HAVE HDR")," "
|
---|
49 | W $$GET^XPAR("SYS","OR RDI CACHE TIME")
|
---|
50 | Q
|
---|
51 | CLEANUP ;
|
---|
52 | N VAL,NOW,THRESH,DOM,DFN,TIME
|
---|
53 | S VAL=$$GET^XPAR("SYS","OR RDI CACHE TIME")
|
---|
54 | S NOW=$$NOW^XLFDT
|
---|
55 | S THRESH=$$FMADD^XLFDT(NOW,,,-VAL)
|
---|
56 | S DFN=0
|
---|
57 | F DOM="PSOO","ART" F S DFN=$O(^XTMP("ORRDI",DOM,DFN)) Q:'DFN D
|
---|
58 | . S TIME=$G(^XTMP("ORRDI",DOM,DFN,0))
|
---|
59 | . I TIME<THRESH K ^XTMP("ORRDI",DOM,DFN)
|
---|
60 | ; checking if OUTAGE task crashed or hasn't completed successfully
|
---|
61 | I $$DOWNXVAL D
|
---|
62 | .I $$FMDIFF^XLFDT($$NOW^XLFDT,$$PINGXVAL,2)>($$PINGPVAL*2) D SPAWN^ORRDI2
|
---|
63 | Q
|
---|
64 | PIECEOUT(Y,DATA,DEL) ;
|
---|
65 | K Y
|
---|
66 | N I,J,COUNT
|
---|
67 | S I="",COUNT=0 F S I=$O(DATA(I)) Q:I="" D
|
---|
68 | . S J=0 F S J=J+1 Q:J>$L(DATA(I),DEL) D
|
---|
69 | .. I COUNT>0,J=1 S Y(COUNT)=Y(COUNT)_$P(DATA(I),DEL,J) Q
|
---|
70 | .. S COUNT=COUNT+1,Y(COUNT)=$P(DATA(I),DEL,J)
|
---|
71 | Q
|
---|
72 | DOWNRPC(ORY) ;can be used in an RPC to check if RDI is in an OUTAGE state (HDR DOWN)
|
---|
73 | S ORY=$$DOWNXVAL
|
---|
74 | Q
|
---|
75 | DICNPVAL() ;parameter value for dummy patient ICN
|
---|
76 | Q $$GET^XPAR("ALL","ORRDI DUMMY ICN")
|
---|
77 | FAILPVAL() ;parameter value for failure threshold
|
---|
78 | Q $$GET^XPAR("ALL","ORRDI FAIL THRESH")
|
---|
79 | SUCCPVAL() ;parameter value for success threshold
|
---|
80 | Q $$GET^XPAR("ALL","ORRDI SUCCEED THRESH")
|
---|
81 | PINGPVAL() ;parameter value for ping frequency
|
---|
82 | Q $$GET^XPAR("ALL","ORRDI PING FREQ")
|
---|
83 | DOWNXVAL() ;xtmp value for OUTAGE state
|
---|
84 | Q $G(^XTMP("ORRDI","OUTAGE INFO","DOWN"))
|
---|
85 | FAILXVAL() ;xtmp value for number of failed reads
|
---|
86 | Q $G(^XTMP("ORRDI","OUTAGE INFO","FAILURES"))
|
---|
87 | SUCCXVAL() ;xtmp value for number of successful reads
|
---|
88 | Q $G(^XTMP("ORRDI","OUTAGE INFO","SUCCEEDS"))
|
---|
89 | PINGXVAL() ;xtmp value for last ping time
|
---|
90 | Q $G(^XTMP("ORRDI","OUTAGE INFO","DOWN","LAST PING"))
|
---|
91 | LDPTTVAL(DFN) ;tmp value for if the local data only message has been shown to the user during ordering session
|
---|
92 | Q $G(^TMP($J,"ORRDI",DFN))
|
---|
93 | SPAWN ;subroutine to spawn the DOWNTSK task
|
---|
94 | K ^XTMP("ORRDI","ART"),^XTMP("ORRDI","PSOO")
|
---|
95 | N ZTDESC,ZTRTN,ZTSAVE,ZTIO,ZTSK,ZTDTH
|
---|
96 | S ZTDESC="RDI TASK TO CHECK IF HDR IS UP"
|
---|
97 | S ZTRTN="DOWNTSK^ORRDI2"
|
---|
98 | S ZTIO=""
|
---|
99 | S ZTDTH=$$NOW^XLFDT+.000001
|
---|
100 | D ^%ZTLOAD
|
---|
101 | Q
|
---|
102 | DOWNTSK ;subroutine to check if HDR is back up
|
---|
103 | F Q:(($$SUCCXVAL'<$$SUCCPVAL)!('$$DOWNXVAL)) D
|
---|
104 | .N WAIT,RSLT
|
---|
105 | .S WAIT=$$FMDIFF^XLFDT($$NOW^XLFDT,$$PINGXVAL,2)
|
---|
106 | .S WAIT=$$PINGPVAL-WAIT
|
---|
107 | .;wait until the proper # of seconds has expired before retrying
|
---|
108 | .I WAIT>0 H WAIT
|
---|
109 | .S ^XTMP("ORRDI","OUTAGE INFO","DOWN","LAST PING")=$$NOW^XLFDT
|
---|
110 | .;send dummy message
|
---|
111 | .S RSLT=$$TESTCALL
|
---|
112 | .;if successful increment success counter
|
---|
113 | .I RSLT S ^XTMP("ORRDI","OUTAGE INFO","SUCCEEDS")=1+$$SUCCXVAL
|
---|
114 | .;if failure set success counter to 0
|
---|
115 | .I 'RSLT S ^XTMP("ORRDI","OUTAGE INFO","SUCCEEDS")=0
|
---|
116 | K ^XTMP("ORRDI","OUTAGE INFO")
|
---|
117 | Q
|
---|
118 | TESTCALL() ;call to send a test call to CDS...returns 1 if successful, 0 if not
|
---|
119 | N START,END,HLL,HLA,ORFS,ORCS,ORRS,ORES,ORSS
|
---|
120 | N Y,ORRSLT,ICN,WHATOUT,HLNEXT,HLNODE,HLQUIT,ORHLP,RET,HL,HLDOM,HLDONE1,HLECH,HLFS,HLINSTN,HLMTIEN,HLPARAM,HLQ,STATUS,PRE
|
---|
121 | S (ORFS,ORCS,ORRS,ORES,ORSS)=""
|
---|
122 | S START=$P($$NOW^XLFDT,".")
|
---|
123 | ;build HLA array with request HL7
|
---|
124 | S HLA("HLS",1)="SPR^XWBDRPC845-569716_0^T^ZREMOTE RPC^@SPR.4.2~003RPC017ORWRP REPORT TEXT&006RPCVER0010&007XWBPCNT0017&007XWBESSO066321214321\F\\F\\F\657\F"
|
---|
125 | S HLA("HLS",1,1)="\48102&007XWBDVER0011&006XWBSEC0043.14&002P10187369543;"_$$DICNPVAL_"&002P2039OC_AL:ALLERGIES;1\S\RXOP;ORDV06;28;200&002P3000&002P4000&002P5000&002P600"_$L($G(START))_$G(START)_"&002P700"_$L($G(END))_$G(END)
|
---|
126 | S HLA("HLS",2)="RDF^1^@DSP.3~TX~300"
|
---|
127 | ;set HLL("LINKS") node to specify receiver location
|
---|
128 | S HLL("LINKS",1)="ORRDI SUBSCRIBER^ORHDR"
|
---|
129 | S ORHLP("OPEN TIMEOUT")=10
|
---|
130 | S ORHLP("SUBSCRIBER")="^OR RDI SENDER^"_$P($$SITE^VASITE,U,3)_"^OR RDI RECEIVER^^^"
|
---|
131 | ;call DIRECT^HLMA to send request
|
---|
132 | D DIRECT^HLMA("ORRDI EVENT","LM",1,.ORRSLT,,.ORHLP)
|
---|
133 | ;check if call failed
|
---|
134 | I $P($G(ORRSLT),U,2) Q 0
|
---|
135 | Q 1
|
---|