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