| [613] | 1 | LAGEN ;DALOI/CJS - LAB AUTOMATED DATA ; 1 Feb 2005
 | 
|---|
 | 2 |  ;;5.2;AUTOMATED LAB INSTRUMENTS;**1,17,22,27,47,46,64,67**;Sep 27, 1994
 | 
|---|
 | 3 |  Q
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | LOG ; Run by accession number.
 | 
|---|
 | 6 |  S LINK="",LRDFN=0,DPF=2
 | 
|---|
 | 7 |  I $G(LOG)<1 G LG2
 | 
|---|
 | 8 |  ; If overlay data -> find if accession exists in LAH
 | 
|---|
 | 9 |  I LROVER D  Q:ISQN>0
 | 
|---|
 | 10 |  . N I,X
 | 
|---|
 | 11 |  . S (ISQN,I)=0
 | 
|---|
 | 12 |  . F  S I=$O(^LAH(LWL,1,"C",LOG,I)) Q:I<1  D  Q:ISQN
 | 
|---|
 | 13 |  . . S X=$G(^LAH(LWL,1,I,0))
 | 
|---|
 | 14 |  . . ; Quit if different accession area.
 | 
|---|
 | 15 |  . . I $P(X,"^",3)'=WL Q
 | 
|---|
 | 16 |  . . ; Quit if different accession date and not a rollover accession (same original accession date).
 | 
|---|
 | 17 |  . . I $P(X,"^",4)'=LADT,$P($G(^LRO(68,WL,1,LADT,1,LOG,0)),"^",3)'=$P($G(^LRO(68,WL,1,$P(X,"^",4),1,LOG,0)),"^",3) Q
 | 
|---|
 | 18 |  . . S ISQN=I
 | 
|---|
 | 19 |  . . D UPDT(LWL,ISQN)
 | 
|---|
 | 20 |  I '$D(^LRO(68,WL,1,LADT,1,LOG,0)) S LINK="^^"_+LOG G LG2
 | 
|---|
 | 21 |  S X=^LRO(68,WL,1,LADT,1,LOG,0),LINK=WL_U_LADT_U_LOG,LRDFN=+X,DPF=$P(X,U,2)
 | 
|---|
 | 22 | LG2 D ISQN
 | 
|---|
 | 23 |  I $G(LOG)>0 S ^LAH(LWL,1,"C",LOG,ISQN)="",$P(^LAH(LWL,1,ISQN,0),U,3,5)=LINK
 | 
|---|
 | 24 |  I $G(CENUM)>0 S $P(^LAH(LWL,1,ISQN,0),U,6)=CENUM,^LAH(LWL,1,"D",+CENUM,ISQN)=""
 | 
|---|
 | 25 |  I $D(^LRO(68.2,LWL,1,+TRAY,1,+CUP,0)) S ^(4,ISQN)=""
 | 
|---|
 | 26 |  Q
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 |  ;
 | 
|---|
 | 29 | ISQN ;
 | 
|---|
 | 30 |  L +^LAH(LWL):99999
 | 
|---|
 | 31 |  ;
 | 
|---|
 | 32 |  F  S (^LAH(LWL),ISQN)=1+$G(^LAH(LWL)) Q:'$D(^LAH(LWL,1,ISQN))
 | 
|---|
 | 33 |  ;
 | 
|---|
 | 34 |  S:CUP="" TRAY=1,CUP=ISQN
 | 
|---|
 | 35 |  S ^LAH(LWL,1,ISQN,0)=TRAY_U_CUP_"^^^^^"_METH_"^"_+$G(IDE)
 | 
|---|
 | 36 |  ;
 | 
|---|
 | 37 |  D UPDT(LWL,ISQN)
 | 
|---|
 | 38 |  ;
 | 
|---|
 | 39 |  S ^LAH(LWL,1,"B",(+TRAY)_";"_(+CUP),ISQN)=""
 | 
|---|
 | 40 |  ;
 | 
|---|
 | 41 |  ; IDE xref added to enable correct identifier for CX4/CX5 instruments
 | 
|---|
 | 42 |  S ^LAH(LWL,1,"E",+$G(IDE),ISQN)=""
 | 
|---|
 | 43 |  ;
 | 
|---|
 | 44 |  ; Set UID xref and .3 node, used to verify by unique identifier (UID).
 | 
|---|
 | 45 |  I $G(LA7UID)'="" D UID(LWL,ISQN,LA7UID)
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 |  L -^LAH(LWL)
 | 
|---|
 | 48 |  Q
 | 
|---|
 | 49 |  ;
 | 
|---|
 | 50 |  ;
 | 
|---|
 | 51 | LLIST ;
 | 
|---|
 | 52 |  S LRDFN=0,DPF=2
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 |  I LROVER D  Q:ISQN>0
 | 
|---|
 | 55 |  . S ISQN=+$O(^LAH(LWL,1,"B",(+TRAY)_";"_(+CUP),0))
 | 
|---|
 | 56 |  . I ISQN D UPDT(LWL,ISQN)
 | 
|---|
 | 57 |  ;
 | 
|---|
 | 58 |  ; Run by load/work list number sent.
 | 
|---|
 | 59 |  D ISQN S LINK="^^"
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 |  I $D(^LRO(68.2,LWL,1,TRAY,1,CUP,0)) S LINK=$P(^(0),"^",1,3),^(4,ISQN)=""
 | 
|---|
 | 62 |  ;
 | 
|---|
 | 63 |  S $P(^LAH(LWL,1,ISQN,0),U,3,5)=LINK
 | 
|---|
 | 64 |  ;
 | 
|---|
 | 65 |  S DPF=2
 | 
|---|
 | 66 |  Q:LINK="^^"
 | 
|---|
 | 67 |  S WL=+$P(LINK,"^",1),WDT=+$P(LINK,"^",2),LOG=+$P(LINK,"^",3),^LAH(LWL,1,"C",LOG,ISQN)=""
 | 
|---|
 | 68 |  S X=$S($D(^LRO(68,WL,1,WDT,1,LOG,0)):^(0),1:"0^2"),DPF=+$P(X,U,2),LRDFN=+X
 | 
|---|
 | 69 |  ;
 | 
|---|
 | 70 |  Q
 | 
|---|
 | 71 |  ;
 | 
|---|
 | 72 |  ;
 | 
|---|
 | 73 | SEQN ;
 | 
|---|
 | 74 |  ; Run by the order data received
 | 
|---|
 | 75 |  S CUP=""
 | 
|---|
 | 76 |  D LLIST
 | 
|---|
 | 77 |  Q
 | 
|---|
 | 78 |  ;
 | 
|---|
 | 79 |  ;
 | 
|---|
 | 80 | CENUM ;
 | 
|---|
 | 81 |  S DPF=2,LRDFN=0,LOG=$O(^LRO(68,WL,1,DT,1,"D",+CENUM,0))
 | 
|---|
 | 82 |  G LOG:LOG>0 ;for martinez only
 | 
|---|
 | 83 |  ;IF CENUM?1A.ANP S Y=CENUM D CEPACK I Y?.ANP S DFN=$O(^LAB(62.3,"B",Y,0)) I DFN S DPF=62.3
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 |  D ISQN
 | 
|---|
 | 86 |  ;
 | 
|---|
 | 87 |  S ^LAH(LWL,1,"C",LOG,ISQN)="",^LAH(LWL,1,"D",+CENUM,ISQN)="",$P(^LAH(LWL,1,ISQN,0),U,6)=CENUM
 | 
|---|
 | 88 |  ;
 | 
|---|
 | 89 |  I $D(^LRO(68.2,LWL,1,TRAY,1,CUP,0)) S ^(4,ISQN)=""
 | 
|---|
 | 90 |  Q
 | 
|---|
 | 91 |  ;
 | 
|---|
 | 92 |  ;
 | 
|---|
 | 93 | IDENT ;
 | 
|---|
 | 94 |  S DPF=2,LRDFN=0,LOG=$O(^LRO(68,WL,1,DT,1,"C",IDENT,0))
 | 
|---|
 | 95 |  I LOG>0 D LOG Q
 | 
|---|
 | 96 |  D ISQN
 | 
|---|
 | 97 |  Q
 | 
|---|
 | 98 |  ;
 | 
|---|
 | 99 |  ;
 | 
|---|
 | 100 | POC ; Entry point for POC interfaces to setup LAH using "E" x-ref
 | 
|---|
 | 101 |  ; IDE xref used to identify for POC specimen
 | 
|---|
 | 102 |  I $G(IDE)'="" D  Q:ISQN
 | 
|---|
 | 103 |  . S ISQN=$O(^LAH(LWL,1,"E",IDE,0))
 | 
|---|
 | 104 |  . I ISQN D UPDT(LWL,ISQN) Q
 | 
|---|
 | 105 |  D LOG
 | 
|---|
 | 106 |  Q
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 | CONTROL ; Verify control's
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  Q:'$D(^LRO(68,WL,1,DT,1,LOG,0))  Q:$P(^(0),U,2)'=62.3
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  S LRDFN=+^LRO(68,WL,1,DT,1,LOG,0)
 | 
|---|
 | 114 |  S IDT=+$P($G(^LRO(68,WL,1,DT,1,LOG,3)),"^",3)
 | 
|---|
 | 115 |  I IDT<1 Q
 | 
|---|
 | 116 |  I '$D(^LR(LRDFN,"CH",IDT,0)) Q
 | 
|---|
 | 117 |  S $P(^LRO(68,WL,1,DT,1,LOG,3),U,4)=NOW
 | 
|---|
 | 118 |  S $P(^LR(LRDFN,"CH",IDT,0),U,3)=NOW
 | 
|---|
 | 119 |  ;
 | 
|---|
 | 120 |  F I=1:0 S I=$O(^LAH(LWL,1,ISQN,I)) Q:I<1  S ^LR(LRDFN,"CH",IDT,I)=^LAH(LWL,1,ISQN,I)
 | 
|---|
 | 121 |  ;
 | 
|---|
 | 122 |  S:'$D(LRTEC) LRTEC=$P(^VA(200,DUZ,0),U,2)
 | 
|---|
 | 123 |  ;
 | 
|---|
 | 124 |  F I=0:0 S I=$O(^LRO(68,WL,1,DT,1,LOG,4,I)) Q:I<1  I +$P(^(I,0),U,3)[LWL,'$P(^(0),U,5) S $P(^(0),U,5)=NOW,$P(^(0),U,4)=LRTEC,^LRO(68,WL,1,DT,1,"AC",NOW,LOG)="",^LRO(68,WL,1,DT,1,"AD",NOW\1,LOG)=""
 | 
|---|
 | 125 |  D CONTXREF
 | 
|---|
 | 126 |  K:$G(LOG) ^LAH(LWL,1,"C",+LOG)
 | 
|---|
 | 127 |  K ^LAH(LWL,1,"B",(+TRAY)_";"_(+CUP)),^LAH(LWL,1,ISQN)
 | 
|---|
 | 128 |  ;
 | 
|---|
 | 129 |  Q
 | 
|---|
 | 130 |  ;
 | 
|---|
 | 131 |  ;
 | 
|---|
 | 132 | CEPACK S Y=$P(Y,"\",1),YY="" F I=1:1:$L(Y) S:$A(Y,I)>32 YY=YY_$E(Y,I)
 | 
|---|
 | 133 |  S Y=YY
 | 
|---|
 | 134 |  K YY
 | 
|---|
 | 135 |  Q
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 |  ;
 | 
|---|
 | 138 | CONTXREF ; Set up verification X-Ref for controls
 | 
|---|
 | 139 |  ;
 | 
|---|
 | 140 |  N DA,LRTEST,LRTN,I,LRGTN,X1,X,S1,J,J1
 | 
|---|
 | 141 |  ;
 | 
|---|
 | 142 |  S LRTEST=""
 | 
|---|
 | 143 |  F LRTN=0:0 S LRTN=$O(^LRO(68,WL,1,DT,1,LOG,4,LRTN)) Q:LRTN<1  I $D(^(LRTN,0)),+$P(^(0),U,3)[LWL,+$P(^(0),U,5) S:LRTEST'="" LRTEST=LRTEST_"^"_LRTN S:LRTEST="" LRTEST=LRTN
 | 
|---|
 | 144 | AC ;
 | 
|---|
 | 145 |  K ^TMP("LR",$J,"T")
 | 
|---|
 | 146 |  D ^LREXPD
 | 
|---|
 | 147 |  F X=0:0 S X=$O(^TMP("LR",$J,"T",X)) Q:X<1  S X1=$P(^(X),";",2) I X1,$D(^LR(LRDFN,"CH",IDT,X1)) S:'$D(^LRO(68,"AC",LRDFN,IDT,X1)) ^(X1)=""
 | 
|---|
 | 148 |  K ^TMP("LR",$J,"T")
 | 
|---|
 | 149 |  Q
 | 
|---|
 | 150 |  ;
 | 
|---|
 | 151 |  ;
 | 
|---|
 | 152 | UPDT(LWL,ISQN) ; Set/update date/time this entry in LAH has data added.
 | 
|---|
 | 153 |  ; Used by clear instrument data option to allow selective clearing based on date/time criteria.
 | 
|---|
 | 154 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 155 |  ;          ISQN = ien of sequence
 | 
|---|
 | 156 |  N LANOW,LAX
 | 
|---|
 | 157 |  ;
 | 
|---|
 | 158 |  S LANOW=$$NOW^XLFDT
 | 
|---|
 | 159 |  S LAX=$P($G(^LAH(LWL,1,ISQN,0)),"^",10,11)
 | 
|---|
 | 160 |  ;
 | 
|---|
 | 161 |  ; Created date/time_"^"_update date/time.
 | 
|---|
 | 162 |  S LAX=$S($P(LAX,"^",1):$P(LAX,"^",1),1:LANOW)_"^"_LANOW
 | 
|---|
 | 163 |  S $P(^LAH(LWL,1,ISQN,0),"^",10,11)=LAX
 | 
|---|
 | 164 |  Q
 | 
|---|
 | 165 |  ;
 | 
|---|
 | 166 |  ;
 | 
|---|
 | 167 | UID(LWL,ISQN,UID) ; Set .3 node and "U" xref with accession's UID.
 | 
|---|
 | 168 |  ; Used to verify by unique identifier (UID).
 | 
|---|
 | 169 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 170 |  ;          ISQN = ien of sequence
 | 
|---|
 | 171 |  ;           UID = accession's UID
 | 
|---|
 | 172 |  ; Called from above, LRVR1, LRVRW
 | 
|---|
 | 173 |  ;
 | 
|---|
 | 174 |  N X
 | 
|---|
 | 175 |  ;
 | 
|---|
 | 176 |  S X=$P($G(^LAH(LWL,1,ISQN,.3)),"^")
 | 
|---|
 | 177 |  ; Kill x-ref if existing value different than new value.
 | 
|---|
 | 178 |  I X]"",X'=UID K ^LAH(LWL,1,"U",X,ISQN)
 | 
|---|
 | 179 |  ;
 | 
|---|
 | 180 |  S $P(^LAH(LWL,1,ISQN,.3),"^")=UID
 | 
|---|
 | 181 |  S ^LAH(LWL,1,"U",UID,ISQN)=""
 | 
|---|
 | 182 |  Q
 | 
|---|
 | 183 |  ;
 | 
|---|
 | 184 |  ;
 | 
|---|
 | 185 | POI(LWL,ISQN,NODE,LAID) ; Set .1 node with patient/order info
 | 
|---|
 | 186 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 187 |  ;          ISQN = ien of sequence
 | 
|---|
 | 188 |  ;          NODE = node to store data on (PID, OBR)
 | 
|---|
 | 189 |  ;          LAID = array containing values
 | 
|---|
 | 190 |  ;                 PID - "DFN","DOB","ICN","LRDFN","LRTDFN","PNM","SEX","SSN"
 | 
|---|
 | 191 |  ;                 OBR - "EOL","FID","ORCDT","ORDNLT","ORDP","PON","SID","PEB","PVB"
 | 
|---|
 | 192 |  ;
 | 
|---|
 | 193 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","EOL") = enterer's ordering location
 | 
|---|
 | 194 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","FID") = filler specimen id
 | 
|---|
 | 195 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","ORCDT") = order date/time (FileMan d/t)
 | 
|---|
 | 196 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","ORDNLT") = order NLT (multiple separated by "^")
 | 
|---|
 | 197 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","ORDP") = ordering provider (DUZ or id^last name, first name, mi [id])
 | 
|---|
 | 198 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","PEB") = placer entered by (DUZ or id^last name, first name, mi [id])
 | 
|---|
 | 199 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","PON") = placer order number
 | 
|---|
 | 200 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","PVB") = placer verified by (DUZ or id^last name, first name, mi [id])
 | 
|---|
 | 201 |  ; ^LAH(LWL,1,ISQN,.1,"OBR","SID") = placer specimen id
 | 
|---|
 | 202 |  ; ^LAH(LWL,1,ISQN,.1,"PID","DFN") = patient's DFN in file #2
 | 
|---|
 | 203 |  ; ^LAH(LWL,1,ISQN,.1,"PID","DOB") = date of birth (FileMan d/t)
 | 
|---|
 | 204 |  ; ^LAH(LWL,1,ISQN,.1,"PID","ICN") = patient's ICN
 | 
|---|
 | 205 |  ; ^LAH(LWL,1,ISQN,.1,"PID","LRDFN") = patient's LRDFN in file #63
 | 
|---|
 | 206 |  ; ^LAH(LWL,1,ISQN,.1,"PID","LRTDFN") = patient's LRTDFN in file #67
 | 
|---|
 | 207 |  ; ^LAH(LWL,1,ISQN,.1,"PID","PNM") = patient's name
 | 
|---|
 | 208 |  ; ^LAH(LWL,1,ISQN,.1,"PID","SEX") = patient's sex
 | 
|---|
 | 209 |  ; ^LAH(LWL,1,ISQN,.1,"PID","SSN") = patient's SSN
 | 
|---|
 | 210 |  ;
 | 
|---|
 | 211 |  N LAX,LAY,LAZ
 | 
|---|
 | 212 |  ;
 | 
|---|
 | 213 |  S LAX=""
 | 
|---|
 | 214 |  F  S LAX=$O(LAID(LAX)) Q:LAX=""  D
 | 
|---|
 | 215 |  . S LAY=LAID(LAX)
 | 
|---|
 | 216 |  . I LAY="" Q
 | 
|---|
 | 217 |  . S LAZ=$G(^LAH(LWL,1,ISQN,.1,NODE,LAX))
 | 
|---|
 | 218 |  . I LAY=LAZ Q
 | 
|---|
 | 219 |  . ; Remove old data and cross-references.
 | 
|---|
 | 220 |  . I LAZ'="" D
 | 
|---|
 | 221 |  . . K ^LAH(LWL,1,ISQN,.1,NODE,LAX)
 | 
|---|
 | 222 |  . . I $P(LAZ,"^")]"" K ^LAH(LWL,1,"A"_LAX,$P(LAZ,"^"),ISQN)
 | 
|---|
 | 223 |  . ; Set new values and cross-references.
 | 
|---|
 | 224 |  . S ^LAH(LWL,1,ISQN,.1,NODE,LAX)=LAY
 | 
|---|
 | 225 |  . I $P(LAY,"^")'="" S ^LAH(LWL,1,"A"_LAX,$P(LAY,"^"),ISQN)=""
 | 
|---|
 | 226 |  ;
 | 
|---|
 | 227 |  Q
 | 
|---|
 | 228 |  ;
 | 
|---|
 | 229 |  ;
 | 
|---|
 | 230 | LATYP(LWL,ISQN,LAX) ; Set type of interface for this entry
 | 
|---|
 | 231 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 232 |  ;          ISQN = ien of sequence
 | 
|---|
 | 233 |  ;           LAX = type of interface
 | 
|---|
 | 234 |  ; 
 | 
|---|
 | 235 |  S $P(^LAH(LWL,1,ISQN,0),"^",12)=LAX
 | 
|---|
 | 236 |  Q
 | 
|---|
 | 237 |  ;
 | 
|---|
 | 238 |  ;
 | 
|---|
 | 239 | LAMSGID(LWL,ISQN,LAX) ; Set pointer to file #62.49 for this entry.
 | 
|---|
 | 240 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 241 |  ;          ISQN = ien of sequence
 | 
|---|
 | 242 |  ;           LAX = ien of entry in file #62.49 that is source of these results
 | 
|---|
 | 243 |  ; 
 | 
|---|
 | 244 |  S $P(^LAH(LWL,1,ISQN,0),"^",13)=LAX
 | 
|---|
 | 245 |  S ^LAH(LWL,1,ISQN,.01,LAX)=""
 | 
|---|
 | 246 |  Q
 | 
|---|
 | 247 |  ;
 | 
|---|
 | 248 |  ;
 | 
|---|
 | 249 | METH(LWL,ISQN,LAX) ; Save instrument name/method for this entry
 | 
|---|
 | 250 |  ; Call with LWL = ien of load/list in LAH
 | 
|---|
 | 251 |  ;          ISQN = ien of sequence
 | 
|---|
 | 252 |  ;           LAX = method text
 | 
|---|
 | 253 |  ;
 | 
|---|
 | 254 |  N X
 | 
|---|
 | 255 |  S X=$P(^LAH(LWL,1,ISQN,0),"^",7)
 | 
|---|
 | 256 |  I X'[LAX S X=LAX_";"_X,$P(^LAH(LWL,1,ISQN,0),"^",7)=X
 | 
|---|
 | 257 |  Q
 | 
|---|