| 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 | 
|---|