| [613] | 1 | LRSRVR ;DALOI/RLM/JMC - LAB DATA SERVER ; Aug 17, 2006 | 
|---|
|  | 2 | ;;5.2;LAB SERVICE;**232,303,346**;Sep 27, 1994;Build 10 | 
|---|
|  | 3 | ; Reference to ^%ZOSF supported by IA #10096 | 
|---|
|  | 4 | ; Reference to $$SITE^VASITE supported by IA #10112 | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | START ; | 
|---|
|  | 7 | N LRSITE,LRST,LRSUB,LRXMZ | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ; Save incoming server message id for cleanup | 
|---|
|  | 10 | S LRXMZ=XMZ | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | K ^TMP($J,"LRDATA"),^TMP($J,"LRDTERR") | 
|---|
|  | 13 | ; Determine station name and number | 
|---|
|  | 14 | S LRSITE=$$SITE^VASITE,LRSTN=$P(LRSITE,"^",2),LRST=$P(LRSITE,"^",3) | 
|---|
|  | 15 | I LRST="" S LRST="???" | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | S LRSUB=$$UP^XLFSTR(XQSUB) | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | ; The first line of the message tells who requested the action and when | 
|---|
|  | 20 | ; The second line tells when the server is activated and no data can be | 
|---|
|  | 21 | ; gathered from the MailMan message.  This line gets replaced if the | 
|---|
|  | 22 | ; server finds something to do. | 
|---|
|  | 23 | S ^TMP($J,"LRDATA",1)=LRSUB_" triggered at "_LRSTN_" by "_XMFROM_" on "_XQDATE | 
|---|
|  | 24 | S LRACTION=$S(LRSUB["CHECKSUM":"Checksums Generated",1:LRSUB) | 
|---|
|  | 25 | S ^TMP($J,"LRDATA",2)="I don't know how to "_LRACTION_" at "_LRSTN | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | ; If the subject contains "CHECKSUM" send a report of the current checksums to the LABTEAM group on RDMAIL | 
|---|
|  | 29 | I LRSUB["CHECKSUM" D CSUM Q | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | ; If the subject contains "LIST" send a report based on the list of routines in the body of the message back to the original sender. | 
|---|
|  | 32 | I LRSUB["LIST" D SUMLST Q | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | ; If the subject equals "LOINC" send the local LOINC data to the national list. | 
|---|
|  | 35 | I LRSUB="LOINC" D LOINC^LRSRVR1 Q | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; If the subject contains "LOCAL REPORT" send the local LOINC data to the sender. | 
|---|
|  | 38 | I LRSUB="LOCAL REPORT" D LOINCL^LRSRVR1 Q | 
|---|
|  | 39 | I LRSUB="LOCAL REPORT DELIMIT" D LOINCLD^LRSRVR3 Q | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | ; Send RELMA mapper formatted message | 
|---|
|  | 42 | I LRSUB="RELMA" D SERVER^LRSRVR2 Q | 
|---|
|  | 43 | ; Process RELMA mapper Packman global message | 
|---|
|  | 44 | ;I LRSUB="RELMA MAPPING" D RMAP^LRSRVR5 Q | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ; Send SNOMED mapping formatted message | 
|---|
|  | 47 | I LRSUB="SNOMED" D SERVER^LRSRVR6 Q | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; Send NLT/CPT mapping formatted message | 
|---|
|  | 50 | I LRSUB="NLT/CPT" D SERVER^LRSRVR7 Q | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | ; If subject not understood by server, send a message to the sender | 
|---|
|  | 53 | ;  that the server can't understand their instructions. | 
|---|
|  | 54 | K XMY | 
|---|
|  | 55 | S XMY(XQSND)="" | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | EXIT ; If all went well, report that too. | 
|---|
|  | 58 | ; Mail the errors and successes back to the Roll-Up group at Forum. | 
|---|
|  | 59 | N LRNOW | 
|---|
|  | 60 | S LRNOW=$$NOW^XLFDT | 
|---|
|  | 61 | S XMDUN="Lab Server",XMDUZ=".5",XMSUB=LRSTN_" LAB SERVER ("_LRNOW_")" | 
|---|
|  | 62 | S XMTEXT="^TMP($J,""LRDATA""," | 
|---|
|  | 63 | I '$D(XMY) S XMY("G.LABTEAM@ISC-DALLAS.VA.GOV")="" | 
|---|
|  | 64 | D ^XMD | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | CLEAN ; Cleanup and exit | 
|---|
|  | 67 | I $D(^TMP($J,"LRDTERR")) D | 
|---|
|  | 68 | . S XMDUN="Lab Server",XMDUZ=".5" | 
|---|
|  | 69 | . S XMSUB=LRSTN_" LAB SERVER ERROR ("_LRNOW_")" | 
|---|
|  | 70 | . S XMTEXT="^TMP($J,""LRDTERR""," | 
|---|
|  | 71 | . S XMY("G.LABTEAM@ISC-DALLAS.VA.GOV")="",XMY(XQSND)="" | 
|---|
|  | 72 | . D ^XMD | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | ; Clean up server message in MailMan | 
|---|
|  | 75 | I $G(LRXMZ)>0 D ZAPSERV^XMXAPI("S.LRLABSERVER",LRXMZ) | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | K %,%DT,%H,D,DD,DIC,DIERR,ERROR,FILL,LINE,LOINCDTA,LOINCDTB,LOINCTAS | 
|---|
|  | 78 | K LRA,LRAA,LRACTION,LRB,LRCLST,LRDA,LRERR,LRFOUND,LRFOUND1,LRI,LRLINE | 
|---|
|  | 79 | K LRNDE,LROUT,LRPNT,LRPNTA,LRPNTB,LRRDT,LRRN,LRROOT,LRST,LRSTN,LRSUB | 
|---|
|  | 80 | K X,XMDUN,XMDUZ,XMER,XMFROM,XMREC,XMRG,XMSUB,XMTEXT,XMY,XMZ,XQDATE | 
|---|
|  | 81 | K XQSND,XQSUB,Y,ZTQUEUED,ZTSK | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | K ^TMP($J,"LRDATA"),^TMP($J,"LRDTERR") | 
|---|
|  | 84 | S:$D(ZTQUEUED) ZTREQ="@" | 
|---|
|  | 85 | Q | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | ; | 
|---|
|  | 88 | CSUM ;Calculate checksum for routines and transmit errors to LABTEAM group | 
|---|
|  | 89 | S X=$T(+0) X ^%ZOSF("RSUM") S ^TMP($J,"LRDATA",2)=X_" at "_LRSTN_" = "_Y | 
|---|
|  | 90 | S LRI=0 | 
|---|
|  | 91 | F  S LRI=$O(^LAB(69.91,1,"ROU",LRI)) Q:'LRI  D | 
|---|
|  | 92 | . S X=$P(^LAB(69.91,1,"ROU",LRI,0),"^") | 
|---|
|  | 93 | . S LRA=$P(^LAB(69.91,1,"ROU",LRI,0),"^",4) | 
|---|
|  | 94 | . X ^%ZOSF("TEST") I '$T S ^TMP($J,"LRDATA",LRI+3)=X_" is missing." Q | 
|---|
|  | 95 | . X ^%ZOSF("RSUM") I +$G(Y)'=LRA S ^TMP($J,"LRDATA",LRI+3)=X_" should be "_LRA_" is "_+$G(Y) | 
|---|
|  | 96 | S XMSUB="Lab Checksum data at "_LRSTN_" run on "_XQDATE | 
|---|
|  | 97 | D EXIT | 
|---|
|  | 98 | Q | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | ; | 
|---|
|  | 101 | SUMLST ;Calculate checksum for routines and transmit to requestor | 
|---|
|  | 102 | K ^TMP($J,"LRDATA"),^TMP($J,"LRDTERR") | 
|---|
|  | 103 | S LRCLST=$P($$SITE^VASITE,"^",2),LINE=2,LINR=1,$P(FILL," ",8)="" | 
|---|
|  | 104 | S ^TMP($J,"LRDATA",1)="Lab Server triggered at "_LRCLST_" by "_XMFROM_" on "_XQDATE | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | ; Check for a plus sign in front of the routine name.  Bypass the | 
|---|
|  | 107 | ; Test to see if the routine exists if it's there. | 
|---|
|  | 108 | ; DSM won't check %routines to make sure they exist, Cache will. | 
|---|
|  | 109 | F  X XMREC Q:XMER<0  S X=XMRG D | 
|---|
|  | 110 | . I X'?1"+".E X ^%ZOSF("TEST") I '$T S ^TMP($J,"LRDATA",LINE)=X_$E(FILL,$L(X),8)_" is missing.",LINE=LINE+1 Q | 
|---|
|  | 111 | . ;Strip off the plus sign so that the checksum routine can find it. | 
|---|
|  | 112 | . S X=$TR(X,"+","") | 
|---|
|  | 113 | . X ^%ZOSF("RSUM") S ^TMP($J,"LRDATA",LINE)=X_$E(FILL,$L(X),8)_" is "_Y,LINE=LINE+1 | 
|---|
|  | 114 | S XMSUB="Checksum data at "_LRCLST_" run on "_XQDATE | 
|---|
|  | 115 | S XMY(XQSND)="" | 
|---|
|  | 116 | D EXIT | 
|---|
|  | 117 | Q | 
|---|