| [613] | 1 | LA7VIN ;DALOI/JMC - Process Incoming Lab HL7 Messages ; Jan 12, 2005 | 
|---|
|  | 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,67**;Sep 27, 1994 | 
|---|
|  | 3 | ; This routine processes incoming messages for various Lab HL7 configurations. | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | EN ; Only one process should run at a time | 
|---|
|  | 7 | N LA76249,LA7I,LA7INTYP,LA7LOOP,LA7X | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | L +^LAHM(62.48,"Z",LA76248):10 | 
|---|
|  | 10 | E  Q | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; Setup DUZ array to 'non-human' user LRLAB,HL | 
|---|
|  | 13 | ; If user not found - send alert to G.LAB MESSAGING | 
|---|
|  | 14 | S LA7X=$$FIND1^DIC(200,"","OX","LRLAB,HL","B","") | 
|---|
|  | 15 | I LA7X<1 D  Q | 
|---|
|  | 16 | . N MSG | 
|---|
|  | 17 | . S MSG="Lab Messaging - Unable to identify user 'LRLAB,HL' in NEW PERSON file" | 
|---|
|  | 18 | . D XQA^LA7UXQA(0,LA76248,0,0,MSG,"",0) | 
|---|
|  | 19 | D DUZ^XUP(LA7X) | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | ; Determine interface type | 
|---|
|  | 22 | S LA7INTYP=+$P(^LAHM(62.48,LA76248,0),"^",9) | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | ; main loop, LA7LOOP reset in GETIN, if no messages for 5 minutes (60x5) then quit | 
|---|
|  | 25 | F LA7LOOP=1:1:60 D  Q:$G(ZTSTOP) | 
|---|
|  | 26 | . ; Check if task has been requested to stop | 
|---|
|  | 27 | . I $$S^%ZTLOAD("Idle - waiting for new messages to process") S ZTSTOP=1 Q | 
|---|
|  | 28 | . D GETIN H 5 | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; Release lock | 
|---|
|  | 31 | L -^LAHM(62.48,"Z",LA76248) | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | ; Clean up taskman | 
|---|
|  | 34 | I $D(ZTQUEUED) S ZTREQ="@" | 
|---|
|  | 35 | ; | 
|---|
|  | 36 | ; Check TaskMan for scheduled lab option | 
|---|
|  | 37 | D CHECKTM | 
|---|
|  | 38 | ; | 
|---|
|  | 39 | K LA76248 | 
|---|
|  | 40 | K CENUM,DPF,ECHOALL,ER,IDE,IDT,LALCT,LANM,LAZZ,LINK,LRTEC,NOW,RMK,T,TC,TP,TSK,WDT | 
|---|
|  | 41 | Q | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | ; | 
|---|
|  | 44 | GETIN ; Check the incoming queue for messages and then call LA7VIN1 to | 
|---|
|  | 45 | ; process the message. | 
|---|
|  | 46 | ; | 
|---|
|  | 47 | ; Check incoming queue | 
|---|
|  | 48 | Q:'$O(^LAHM(62.49,"Q",LA76248,"IQ",0)) | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | ; Reset timeout counter | 
|---|
|  | 51 | S LA7LOOP=1 | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ; Get lock on message, quit if still building, process message then release lock. | 
|---|
|  | 54 | F  S LA76249=$O(^LAHM(62.49,"Q",LA76248,"IQ",0)) Q:'LA76249  D  Q:$G(ZTSTOP) | 
|---|
|  | 55 | . ; Check if task has been requested to stop | 
|---|
|  | 56 | . I $$S^%ZTLOAD("Processing msg #"_LA76249) S ZTSTOP=1 Q | 
|---|
|  | 57 | . L +^LAHM(62.49,LA76249):1 | 
|---|
|  | 58 | . I '$T H 5 Q | 
|---|
|  | 59 | . D NXTMSG^LA7VIN1 | 
|---|
|  | 60 | . L -^LAHM(62.49,LA76249) | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | K ^TMP("LA7TREE",$J) | 
|---|
|  | 63 | ; | 
|---|
|  | 64 | ; If point of care interface then task job(s) to process results in LAH. | 
|---|
|  | 65 | I LA7INTYP>19,LA7INTYP<30,$D(LA7INTYP("LWL")) D | 
|---|
|  | 66 | . I $G(ZTSTOP)=1 Q | 
|---|
|  | 67 | . S LA7I=0 | 
|---|
|  | 68 | . F  S LA7I=$O(LA7INTYP("LWL",LA7I)) Q:'LA7I  D | 
|---|
|  | 69 | . . D QLAH(LA7I) | 
|---|
|  | 70 | . . K LA7INTYP("LWL",LA7I) | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | Q | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | QUE ; Call here to queue this processing routine to run in the background. | 
|---|
|  | 76 | ; Required variables are:  LA76248 = pointer to configuration in 62.48 | 
|---|
|  | 77 | ; | 
|---|
|  | 78 | N ZTDESC,ZTDTH,ZTIO,ZTSAVE,ZTRTN,ZTSK | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | ; See if already running | 
|---|
|  | 81 | L +^LAHM(62.48,"Z",LA76248):1 | 
|---|
|  | 82 | E  Q | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | S ZTRTN="EN^LA7VIN",ZTDTH=$H,ZTIO="" | 
|---|
|  | 85 | S ZTDESC="Processing Routine for "_$P(^LAHM(62.48,LA76248,0),"^") | 
|---|
|  | 86 | S ZTSAVE("LA76248")=LA76248 | 
|---|
|  | 87 | D ^%ZTLOAD | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | L -^LAHM(62.48,"Z",LA76248) | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | Q | 
|---|
|  | 92 | ; | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | QLAH(LWL) ; Call here to queue result processing routine to run in the background. | 
|---|
|  | 95 | ; Call with LWL = pointer to loadlist in file #68.2 | 
|---|
|  | 96 | ; | 
|---|
|  | 97 | N ZTDESC,ZTDTH,ZTIO,ZTSAVE,ZTRTN,ZTSK | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ; See if already running | 
|---|
|  | 100 | L +^LAH("Z",LWL):0 | 
|---|
|  | 101 | E  Q | 
|---|
|  | 102 | L -^LAH("Z",LWL) | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | S ZTRTN="EN^LRVRPOC",ZTDTH=$H,ZTIO="" | 
|---|
|  | 105 | S ZTDESC="Result Processing for "_$P(^LRO(68.2,LWL,0),"^") | 
|---|
|  | 106 | S ZTSAVE("LRLL")=LWL | 
|---|
|  | 107 | D ^%ZTLOAD | 
|---|
|  | 108 | ; | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | Q | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | ; | 
|---|
|  | 113 | CHECKTM ; Check is LA7TASK NIGHTY is scheduled in TaskMan. | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | N LA7TSK,LA7J,MSG,NOW,OK | 
|---|
|  | 116 | S (LA7TSK,OK)=0 | 
|---|
|  | 117 | D OPTSTAT^XUTMOPT("LA7TASK NIGHTY",.LA7TSK) | 
|---|
|  | 118 | ; | 
|---|
|  | 119 | ; If scheduled check to see if for the future | 
|---|
|  | 120 | I LA7TSK>0 D | 
|---|
|  | 121 | . S LA7J=0,NOW=$$NOW^XLFDT | 
|---|
|  | 122 | . F  S LA7J=$O(LA7TSK(LA7J)) Q:'LA7J  I $P(LA7TSK(LA7J),"^",2)>NOW S OK=1 Q | 
|---|
|  | 123 | I OK Q | 
|---|
|  | 124 | ; | 
|---|
|  | 125 | ; Option is not scheduled - send alert to G.LAB MESSAGING | 
|---|
|  | 126 | S MSG="Lab Messaging - Option LA7TASK NIGHTY is not scheduled in TaskMan" | 
|---|
|  | 127 | D XQA^LA7UXQA(0,LA76248,0,0,MSG,"",0) | 
|---|
|  | 128 | Q | 
|---|