| 1 | LAXSYMBL ;MLD/ABBOTT/SLC/RAF - ABBOTT AxSYM BUILD 'DWNLD' FILE ; 6/12/96 0900; | 
|---|
| 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**11,19**;Sep 27, 1994 | 
|---|
| 3 | ; | 
|---|
| 4 | Q  ; call line tag | 
|---|
| 5 | ; | 
|---|
| 6 | BLDLST ; Build the worklist in prep for dwnlding to AxSYM | 
|---|
| 7 | ;  Called from LADOWN with the following set: | 
|---|
| 8 | ;   LRLL           = load list pointer | 
|---|
| 9 | ;   LRCUP1         = starting cup # | 
|---|
| 10 | ;   LRTRAY,LRTRAY1 = starting tray # | 
|---|
| 11 | ;   LRINST         = Auto Instrument pointer | 
|---|
| 12 | ;   LRFORCE        = 1 if send tray and cup | 
|---|
| 13 | ; | 
|---|
| 14 | N I,D,H,P,O,L,X,STX,ETX,CR,LF,CNT,LATEST,LRAN,LRACC,LRAD,LRFRM,SSN | 
|---|
| 15 | N LRFRAME,LRDFN,LRNAME,INST,LANM,LRTEST | 
|---|
| 16 | ; | 
|---|
| 17 | L +^LA(LRINST,"O") ; get global 1st! | 
|---|
| 18 | S D="|",STX=$C(2),ETX=$C(3),LF=$C(10),CR=$C(13),INST=LRINST | 
|---|
| 19 | S X="ERR^LAXSYMBL",@^%ZOSF("TRAP"),(LRTEST,LRFRAME,I)=0 | 
|---|
| 20 | S LRCUP=LRCUP1-1 ; reset for $ORDER | 
|---|
| 21 | ; LATEST array | 
|---|
| 22 | F  S I=$O(^LAB(62.4,INST,3,I)) Q:'I  S X=$G(^(I,0)) S LATEST(+X)=$P(X,U,4) | 
|---|
| 23 | ; | 
|---|
| 24 | ; Main Loop thru Load/Work List file | 
|---|
| 25 | F  S LRCUP=$O(^LRO(68.2,LRLL,1,LRTRAY1,1,LRCUP)) Q:'LRCUP  D GETACCN | 
|---|
| 26 | ; | 
|---|
| 27 | K LRCUP1,LRCUP2,LRTRAY1 ; not killed in calling routine (LADOWN) | 
|---|
| 28 | L -^LA(INST,"O") ; release lock | 
|---|
| 29 | S LREND=1,^LA(INST,"Q")="" ; set dwnld-ready flag | 
|---|
| 30 | ; | 
|---|
| 31 | QUIT | 
|---|
| 32 | ; | 
|---|
| 33 | GETACCN ; Get and save work/load list data to downlaod to AxSYM | 
|---|
| 34 | N LRAA | 
|---|
| 35 | S LRAA=$G(^LRO(68.2,LRLL,1,LRTRAY1,1,LRCUP,0)) Q:LRAA="" | 
|---|
| 36 | S LRAN=$P(LRAA,U,3) Q:LRAN=""  ; no accn num | 
|---|
| 37 | S LRAD=$P(LRAA,U,2) Q:LRAD=""  ; no accn date | 
|---|
| 38 | D PNM Q:LRACC=""  ; no accn | 
|---|
| 39 | S LRAN=$E("0000",$L(LRAN),4)_LRAN ; pad with zeros to 4 digits | 
|---|
| 40 | D FRAME | 
|---|
| 41 | Q | 
|---|
| 42 | ; | 
|---|
| 43 | PNM ; Get patient name and last 4 from an accession. | 
|---|
| 44 | N DFN,X,PT S (LRACC,DFN,LRNAME)="" | 
|---|
| 45 | S X=$G(^LRO(68,+LRAA,1,LRAD,1,+LRAN,0)) Q:X=""  ; no accn on file | 
|---|
| 46 | S LRACC=$G(^(.2)),X=^LR(+X,0) ;Q:$P(X,U,2)'=2 ; Naked Ref=^LRO(68,LRAA,1,LRAD,1,+LRAN,.2) & ^LRO(68,LRAA,1,LRAD,1,+LRAN,X,0) | 
|---|
| 47 | ; "patient" could be in one of several files: 2, 62.3, 67, 67.1 etc. | 
|---|
| 48 | S DFN=$P(X,U,3),PT=$G(^DIC(+$P(X,U,2),0,"GL")) | 
|---|
| 49 | Q:PT=""  ; could not find global ref | 
|---|
| 50 | S PT=PT_+DFN_",0)",PT=$G(@PT),LRNAME=$P(PT,U),SSN=$P(PT,U,9) | 
|---|
| 51 | Q | 
|---|
| 52 | ; | 
|---|
| 53 | FRAME ; Build frame to transmit to AxSYM (stored in ^LA(INST,"O",CNT) nodes) | 
|---|
| 54 | N I,FRM | 
|---|
| 55 | F I="H","P","O","L" D  ; loop thru frame types | 
|---|
| 56 | .S LRFRM=$G(LRFRM)+1 S:(LRFRM=8) LRFRM=0 ; increment frame cntr | 
|---|
| 57 | .S FRM=LRFRM_$S(I="H":$$H,I="P":$$P,I="O":$$O,1:$$L)_CR_ETX | 
|---|
| 58 | .S CKSM=$$CKSUM^LAXSYMU(FRM) ; CR_ETX is counted in chksum | 
|---|
| 59 | .; * build msg frame: <STX>~|~msg text~|~<CR><ETX>~checksum~<CR><LF> | 
|---|
| 60 | .S FRM=STX_FRM_CKSM_CR_LF | 
|---|
| 61 | .; set frame to ^LA( "O"utput node | 
|---|
| 62 | .S CNT=$G(^LA(INST,"O"))+1,^LA(INST,"O")=CNT,^LA(INST,"O",CNT)=FRM | 
|---|
| 63 | ; | 
|---|
| 64 | Q | 
|---|
| 65 | ; | 
|---|
| 66 | H() ; Build hdr frame | 
|---|
| 67 | N H S H="H|\^&",$P(H,D,12,13)="P|1" | 
|---|
| 68 | Q H | 
|---|
| 69 | ; | 
|---|
| 70 | P() ; Build Patient frame | 
|---|
| 71 | N P S P="P|1" | 
|---|
| 72 | ; 20 chars is size limit for rev 1.xx  15 will be limit for rev.2! | 
|---|
| 73 | S $P(P,D,4)=$E(LRACC,1,15)_"^" ; see above re: size limits | 
|---|
| 74 | S $P(P,D,5)=$G(SSN) | 
|---|
| 75 | S $P(P,D,6)=$E($P(LRNAME,","),1,20)_U_$E($P($P(LRNAME,",",2)," "),1,20)_U_$E($P(LRNAME," ",2)) | 
|---|
| 76 | Q P | 
|---|
| 77 | ; | 
|---|
| 78 | O() ; Build Order frame  NOTE: | 
|---|
| 79 | ; a. 10 chars is size limit for rev 1.xx  15 will be limit for rev 2 | 
|---|
| 80 | ; b. Potential for REPEAT (multiple) tests to cause the Order frame | 
|---|
| 81 | ;    to exceed 247 chars!  However, if the AxSYM doesn't offer more | 
|---|
| 82 | ;    than about 25 tests, this should not be a problem. | 
|---|
| 83 | ; | 
|---|
| 84 | B  N O,CNT,DLM,PRI,LRPRI,LRTEST,LRTST | 
|---|
| 85 | S (CNT,PRI,LRTEST)=0,LRPRI=9,$P(O,D,5)="" | 
|---|
| 86 | F  S LRTEST=$O(^LRO(68.2,LRLL,1,LRTRAY1,1,LRCUP,1,LRTEST)) Q:'LRTEST  D | 
|---|
| 87 | .S CNT=CNT+1 S DLM=$S(CNT>1:"\",1:"") | 
|---|
| 88 | .S LRTST=$$PNL ; get AxSYM's internal tst # | 
|---|
| 89 | .S:LRTST="" CNT=CNT-1 | 
|---|
| 90 | .Q:LRTST=""  ; test not in Auto Inst file | 
|---|
| 91 | .S $P(O,D,5)=$P(O,D,5)_DLM_"^^^"_LRTST ; 'repeat' tests use '\' | 
|---|
| 92 | .S PRI=+$P($G(^LRO(68.2,LRLL,1,LRTRAY1,1,LRCUP,1,LRTEST,0)),U,2) | 
|---|
| 93 | .I PRI,(PRI<LRPRI) S LRPRI=PRI ; take 'highest' prio | 
|---|
| 94 | ; | 
|---|
| 95 | S LRPRI=$E($P($G(^LAB(62.05,LRPRI,0)),U)) S:LRPRI="" LRPRI="R" | 
|---|
| 96 | ; 2nd pc is (hardcoded) # of 'O' frames.  Change if loop is needed | 
|---|
| 97 | S $P(O,D,1,3)="O|1|"_LRAN | 
|---|
| 98 | S $P(O,D,6)=LRPRI,$P(O,D,12)="A",$P(O,D,26)="O" | 
|---|
| 99 | Q O | 
|---|
| 100 | ; | 
|---|
| 101 | L() ; Build Last (termination) frame | 
|---|
| 102 | Q "L|1" | 
|---|
| 103 | ; | 
|---|
| 104 | PNL() ; Expand panel from load/work list | 
|---|
| 105 | N CT,I,T,TST,DLM S (CT,I,T)=0,TST="" | 
|---|
| 106 | Q:$D(LATEST(LRTEST)) LATEST(LRTEST) ; return single test | 
|---|
| 107 | ; expand panel | 
|---|
| 108 | F  S I=$O(^LAB(60,LRTEST,2,I)) Q:'I  S T=+$G(^(I,0)) D:T | 
|---|
| 109 | .S CT=CT+1 S DLM=$S(CT>1:"\^^^",1:"") | 
|---|
| 110 | .I $D(LATEST(T)) S TST=TST_DLM_LATEST(T) | 
|---|
| 111 | .I '$D(LATEST(T)) S CT=CT-1 | 
|---|
| 112 | .Q | 
|---|
| 113 | ; Return panel tests that should look like: 321\^^^678\^^^452 | 
|---|
| 114 | Q TST | 
|---|
| 115 | ; | 
|---|
| 116 | ERR ; Error Trap | 
|---|
| 117 | D ^LABERR H 1 | 
|---|
| 118 | K ^LA(INST,"O") ; remove incomplete list | 
|---|
| 119 | L -^LA(INST,"O") | 
|---|
| 120 | Q | 
|---|