| 1 | LA7VMSG ;DALOI/JMC - LAB ORU (Observation Result) message builder ; 12-12-96
 | 
|---|
| 2 |  ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,50,56,46,64**;Sep 27, 1994
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | ORU ; Bleed the ORU (Observation Result) message queue
 | 
|---|
| 5 |  ; Tasked by LRCAPV2
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N LA7MTYP
 | 
|---|
| 8 |  S LA7MTYP="ORU"
 | 
|---|
| 9 |  D START^LA7VMSG1
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | ORR ; Bleed the ORR (Order Response) message queue
 | 
|---|
| 14 |  ; Called by LRWLST12
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  N LA7MTYP
 | 
|---|
| 17 |  S LA7MTYP="ORR"
 | 
|---|
| 18 |  ;D START^LA7VMSG1
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  Q
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 | SET(LRUID,SITE,RUID,SITEN,ORD,LRNLT,LRIDT,LRSS,LRDFN,ORDT,LA7VCH,LA7MTYP) ; adds entries to LA7V QUEUE file
 | 
|---|
| 24 |  ; Called by LA7SRR, LRVER3, LRWLST12
 | 
|---|
| 25 |  ; variable list
 | 
|---|
| 26 |  ; LRUID - Host Unique ID from the local ACCESSION file (#68)
 | 
|---|
| 27 |  ; SITE  - remote sites IEN in INSTITUTION file (#4)
 | 
|---|
| 28 |  ; RUID  - Remote sites Unique ID from ACCESSION file (#68)
 | 
|---|
| 29 |  ; SITEN - Primary site number of remote site ($$SITE^VASITE)
 | 
|---|
| 30 |  ; ORD   - Free text ordered test name from WKLD CODE file (#64)
 | 
|---|
| 31 |  ; LRNLT - National Laboratory test code from WKLD CODE file (#64)
 | 
|---|
| 32 |  ; LRIDT - Inverse date/time (accession date/time)
 | 
|---|
| 33 |  ; LRSS  - test subscript defined in LABORATORY TEST file (#60)
 | 
|---|
| 34 |  ; LRDFN - IEN in LAB DATA file (#63)
 | 
|---|
| 35 |  ; ORDT  - Order date
 | 
|---|
| 36 |  ; LA7VCH (Optional) - array of Chemistry results
 | 
|---|
| 37 |  ;                     ex. glucose LA7VCH(2)=LR NODE
 | 
|---|
| 38 |  ;                                 LA7VCH(2,1)="C" (corrected results)
 | 
|---|
| 39 |  ; LA7MTYP (Optional) - Message Type (ORU or ORR) defaults to ORU
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  N FDA,LA76248,LA76249,LA7DT,LA7FACID,LA7ERR,LA7RSITE,LA7Y,PORD,PORT,RSITE
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  S LA7ERR=0
 | 
|---|
| 44 |  I $G(LA7MTYP)="" S LA7MTYP="ORU"
 | 
|---|
| 45 |  ; Currently not building ORR when accessioning - JMC/7/11/00
 | 
|---|
| 46 |  I LA7MTYP="ORR" Q
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; Retrieve facility id (VA=station number, DoD=DMIS code, other=local site assigned id)
 | 
|---|
| 49 |  S LA7FACID=$$RETFACID^LA7VHLU2(SITEN,2,1),LA76248=0
 | 
|---|
| 50 |  S LA7RSITE="LA7V COLLECTION "_LA7FACID
 | 
|---|
| 51 |  S LA76248=$O(^LAHM(62.48,"B",LA7RSITE,0))
 | 
|---|
| 52 |  ; No entry in 62.48 - *** Need to add error logging ****
 | 
|---|
| 53 |  I 'LA76248 Q
 | 
|---|
| 54 |  I '$P(^LAHM(62.48,LA76248,0),"^",3) Q  ; not active
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; Create new outgoing entry in 62.49
 | 
|---|
| 57 |  S LA76249=$$INIT6249^LA7VHLU
 | 
|---|
| 58 |  I LA76249<1 D  Q
 | 
|---|
| 59 |  . ; Log entry creation error
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ; Check/validate parameters before storing
 | 
|---|
| 62 |  ; If error store but flag entry with error status.
 | 
|---|
| 63 |  D CHKACC
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ; File data
 | 
|---|
| 66 |  S FDA(1,62.49,LA76249_",",1)="O"
 | 
|---|
| 67 |  S FDA(1,62.49,LA76249_",",.5)=LA76248
 | 
|---|
| 68 |  S FDA(1,62.49,LA76249_",",2)=$S(LA7ERR:"E",1:"P")
 | 
|---|
| 69 |  S FDA(1,62.49,LA76249_",",5)=LA7RSITE_"-O-"_RUID
 | 
|---|
| 70 |  S FDA(1,62.49,LA76249_",",108)=LA7MTYP
 | 
|---|
| 71 |  S FDA(1,62.49,LA76249_",",151)=LRUID
 | 
|---|
| 72 |  S FDA(1,62.49,LA76249_",",152)=SITEN
 | 
|---|
| 73 |  S FDA(1,62.49,LA76249_",",153)=RUID
 | 
|---|
| 74 |  S FDA(1,62.49,LA76249_",",154)=ORD
 | 
|---|
| 75 |  S FDA(1,62.49,LA76249_",",155)=LRNLT
 | 
|---|
| 76 |  S FDA(1,62.49,LA76249_",",156)=LRIDT
 | 
|---|
| 77 |  S FDA(1,62.49,LA76249_",",157)=LRSS
 | 
|---|
| 78 |  S FDA(1,62.49,LA76249_",",158)=LRDFN
 | 
|---|
| 79 |  S FDA(1,62.49,LA76249_",",159)=ORDT
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  D FILE^DIE("","FDA(1)","LA7ERR(1)")
 | 
|---|
| 82 |  D CLEAN^DILF
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  ; Add test to order
 | 
|---|
| 85 |  S LA7Y=0
 | 
|---|
| 86 |  F  S LA7Y=$O(LA7VCH(LA7Y)) Q:'LA7Y  D
 | 
|---|
| 87 |  . N FDAIEN
 | 
|---|
| 88 |  . S FDA(2,62.49162,"+2,"_LA76249_",",.01)=LA7Y
 | 
|---|
| 89 |  . I $G(LA7VCH(LA7Y,1))="C" S FDA(2,62.49162,"+2,"_LA76249_",",.02)="C"
 | 
|---|
| 90 |  . S FDAIEN(1)=LA76249
 | 
|---|
| 91 |  . D UPDATE^DIE("","FDA(2)","FDAIEN","LA7ERR(2)")
 | 
|---|
| 92 |  . D CLEAN^DILF
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ; Release lock on entry.
 | 
|---|
| 95 |  L -^LAHM(62.49,LA76249)
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | CHKACC ; Check/validate parameters passed in before storing in file #62.49
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  N I,LA763,LA768,LA7AA,LA7AD,LA7AN
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  I $G(LRUID)="",$G(RUID)="" Q
 | 
|---|
| 104 |  I LRUID'="",'$D(^LRO(68,"C",LRUID)) D
 | 
|---|
| 105 |  . S LRUID=$G(RUID)
 | 
|---|
| 106 |  . I LRUID'="",'$D(^LRO(68,"C",LRUID)) S LRUID=""
 | 
|---|
| 107 |  I LRUID="" Q
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  S I=$Q(^LRO(68,"C",LRUID)),(LA7AA,LA7AD,LA7AN)=0
 | 
|---|
| 110 |  I I'="",$QS(I,3)=LRUID S LA7AA=$QS(I,4),LA7AD=$QS(I,5),LA7AN=$QS(I,6)
 | 
|---|
| 111 |  F I=0,.2,.3,3 S LA768(I)=$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,I))
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  F I=0,"ORU" S LA763(I)=$G(^LR(LRDFN,LRSS,LRIDT,I))
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 |  ; Mismatch on subscript with file #68
 | 
|---|
| 116 |  I LRSS'=$P(^LRO(68,LA7AA,0),"^",2) S LA7ERR=40 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  ; Mismatch on LRDFN with file #68
 | 
|---|
| 119 |  I LRDFN'=$P(LA768(0),"^") S LA7ERR=41 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ; Mismatch on specimen inverse d/t with file #68
 | 
|---|
| 122 |  I LRIDT'=$P(LA768(3),"^",5) S LA7ERR=42 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ; Mismatch on remote UID with file #68
 | 
|---|
| 125 |  I $G(RUID)'="",RUID'=$P(LA768(.3),"^",5) S LA7ERR=43 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  ; Mismatch on remote UID with file #63
 | 
|---|
| 128 |  I $G(RUID)'="",$P(LA763("ORU"),"^",5)'="",RUID'=$P(LA763("ORU"),"^",5) S LA7ERR=44 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ; Mismatch on UID between file #63 and file #68
 | 
|---|
| 131 |  I $P(LA768(.3),"^")'="",$P(LA763("ORU"),"^")'="",$P(LA768(.3),"^")'=$P(LA763("ORU"),"^") S LA7ERR=45 D CREATE^LA7LOG(LA7ERR)
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | ACK ; ACKnowledgment message processor
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  G ACK^LA7VHL
 | 
|---|
| 139 |  Q
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | TRIGGER(LRAA,LRAD,LRAN,LRTS) ; Call with LRTS by reference
 | 
|---|
| 143 |  ; LRTS array contains a list of verified test.
 | 
|---|
| 144 |  ; Sets the queue for out going messages. ^LAHM(62.49
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  N ERR,LRDFN,LREND,LRIDT,LRNIEN,LRNLT,LRNLTN,LRODT,LRSS,LRTSX
 | 
|---|
| 147 |  N LRORU3,LRX
 | 
|---|
| 148 |  S LRDFN=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),LRODT=+$P(^(0),U,4)
 | 
|---|
| 149 |  S LRIDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,5)
 | 
|---|
| 150 |  S LRSS=$P($G(^LRO(68,LRAA,0)),U,2)
 | 
|---|
| 151 |  S LRORU3=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.3))
 | 
|---|
| 152 |  Q:'$P($G(LRORU3),U,2)!('LRIDT)
 | 
|---|
| 153 |  Q:'$D(^LRO(68,LRAA,1,LRAD,1,LRAN,0))#2
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  S LRX=0 F  S LRX=$O(LRTS(LRX)) Q:'LRX  D
 | 
|---|
| 156 |  . S LRNLT=+$G(^LAB(60,+LRTS(LRX),64)) Q:'LRNLT
 | 
|---|
| 157 |  . Q:'$D(^LAM(LRNLT,0))#2
 | 
|---|
| 158 |  . S LRNLTN=$P(^LAM(LRNLT,0),U),LRNLT=$P(^(0),U,2)
 | 
|---|
| 159 |  . Q:'LRNLT
 | 
|---|
| 160 |  . D SET($P(LRORU3,U,4),$P(LRORU3,U,2),$P(LRORU3,U,5),$P(LRORU3,U,3),LRNLTN,LRNLT,LRIDT,LRSS,LRDFN,LRODT,"","ORU")
 | 
|---|
| 161 |  Q
 | 
|---|