| 1 | LR7OF3 ;slc/dcm - Process OBR messages from OE/RR ;8/11/97 | 
|---|
| 2 | ;;5.2;LAB SERVICE;**121,187,223,256**;Sep 27, 1994 | 
|---|
| 3 | ; | 
|---|
| 4 | OBR ;Process OBR part of MSG array | 
|---|
| 5 | ;TEST= Ptr to test in file 60 | 
|---|
| 6 | ;TESTN= Test Name | 
|---|
| 7 | ;TYPE= Collection Sample Type | 
|---|
| 8 | ;SAMP= Ptr to Collection sample in file 62 | 
|---|
| 9 | ;SPEC= Ptr to Specimen in file 61 | 
|---|
| 10 | ;URG= Urgency | 
|---|
| 11 | I '$O(LRXMSG(0)) D | 
|---|
| 12 | . S TEST=+$P($P(LRXMSG,"|",5),"^",4),TESTN=$P($P(LRXMSG,"|",5),"^",6),TYPE=$$LRACTCOD^LR7OU0($P(LRXMSG,"|",12)) | 
|---|
| 13 | . S SPEC=$S($P($P($P(LRXMSG,"|",5),"^",4),"~",2):$P($P($P(LRXMSG,"|",5),"^",4),"~",2),1:$$LRSPEC^LR7OU0($P(LRXMSG,"|",16))) | 
|---|
| 14 | . S URG=$$LRURG^LR7OU0($P($P(LRXMSG,"|",28),"^",6)),SAMP=$$LRSAMP^LR7OU0($P(LRXMSG,"|",16)) | 
|---|
| 15 | I $O(LRXMSG(0)) D | 
|---|
| 16 | . N I,J,X1,CTR | 
|---|
| 17 | . F CTR=1:1:$L(LRXMSG,"|") S X1(CTR)=$P(LRXMSG,"|",CTR) | 
|---|
| 18 | . S J=0 F  S J=$O(LRXMSG(J)) Q:J<1  D | 
|---|
| 19 | .. S I=1 I $E(LRXMSG(J))'="|" S X1(CTR)=X1(CTR)_$P(LRXMSG,"|"),I=I+1 | 
|---|
| 20 | .. F I=I:1:$L(LRXMSG(J),"|") S CTR=CTR+1,X1(CTR)=$P(LRXMSG(J),"|",I) | 
|---|
| 21 | . S TEST=$P(X1(5),"^",4),TESTN=$P(X1(5),"^",6),TYPE=$$LRACTCOD^LR7OU0(X1(12)) | 
|---|
| 22 | . S SPEC=$S($P($P(X1(5),"^",4),"~",2):$P($P(X1(5),"^",4),"~",2),1:$$LRSPEC^LR7OU0(X1(16))) | 
|---|
| 23 | . S URG=$$LRURG^LR7OU0($P(X1(28),"^",6)),SAMP=$$LRSAMP^LR7OU0(X1(16)) | 
|---|
| 24 | I '$L(TEST) D ACK^LR7OF0("DE",LRXORC,"TEST pointer not sent in message") S LREND=1 Q | 
|---|
| 25 | I '$L($G(^LAB(60,+TEST,0))) D ACK^LR7OF0("DE",LRXORC,"Invalid Lab test pointer sent from CPRS: "_TEST) S LREND=1 Q | 
|---|
| 26 | I '$L(TESTN) D ACK^LR7OF0("DE",LRXORC,"Test Name not sent in message") S LREND=1 Q | 
|---|
| 27 | I '$L(TYPE) D ACK^LR7OF0("DE",LRXORC,"Collection type not sent in message") S LREND=1 Q | 
|---|
| 28 | I '$L(SAMP) D ACK^LR7OF0("DE",LRXORC,"Sample pointer not sent in message") S LREND=1 Q | 
|---|
| 29 | I '$L(SPEC) D ACK^LR7OF0("DE",LRXORC,"Specimen not set in file 62: "_SAMP) S LREND=1 Q | 
|---|
| 30 | I '$L(URG) D ACK^LR7OF0("DE",LRXORC,"Urgency not sent in message") S LREND=1 Q | 
|---|
| 31 | I LRXTYPE="XO" D  Q  ;Change order request | 
|---|
| 32 | . D GET^LR7OF2(.LRXORC,LRXORC) | 
|---|
| 33 | . Q:'$G(LRORD) | 
|---|
| 34 | . N TST,FLAG | 
|---|
| 35 | . S FLAG=0 | 
|---|
| 36 | . I 'LRVERZ F  S LRODT=$O(^LRO(69,"C",LRORD,LRODT)) Q:LRODT<1  S LRSN=0 F  S LRSN=$O(^LRO(69,"C",LRORD,LRODT,LRSN)) Q:LRSN<1  I $P(^LRO(69,LRODT,1,LRSN,0),"^",3)=SAMP S FLAG=1 D JAB | 
|---|
| 37 | . I LRVERZ,$D(^LRO(69,LRODT,1,LRSN,0)),$P(^(0),"^",3)=SAMP S FLAG=1 D JAB | 
|---|
| 38 | . I FLAG=0 D ACK^LR7OF0("XO",LRXORC,"Specimen not found") S LREND=1 Q | 
|---|
| 39 | I LRXTYPE="NW" D ST Q  ;New order request | 
|---|
| 40 | Q | 
|---|
| 41 | JAB ;Cancel or Add test | 
|---|
| 42 | I TYPE=3,$D(^LRO(69,LRODT,1,LRSN,2,"B",+TEST)) D DOIT^LR7OF2(LRODT,LRSN,TEST,LRXORC,$G(LRDUZ),$G(REASON)) Q | 
|---|
| 43 | I TYPE="A",'$D(^LRO(69,LRODT,1,LRSN,2,"B",+TEST)) D  Q | 
|---|
| 44 | . I $O(^LRO(69,LRODT,1,LRSN,2,0)),$P(^($O(^(0)),0),"^",3) S LREND=1 D ACK^LR7OF0("UX",LRXORC,"Orders have been accessioned, call lab to add tests to the same order.") Q | 
|---|
| 45 | . S I=$O(^LRO(69,LRODT,1,LRSN,2,99999),-1)+1,^LRO(69,LRODT,1,LRSN,2,I,0)=TEST_"^"_URG,^LRO(69,LRODT,1,LRSN,2,"B",+TEST,I)="" | 
|---|
| 46 | Q | 
|---|
| 47 | ST S LRSX=LRSX+1 | 
|---|
| 48 | I $D(^TMP("OR",$J,"LROT",STARTDT,TYPE,SAMP,SPEC,LRSX)) G ST | 
|---|
| 49 | S ^TMP("OR",$J,"LROT",STARTDT,TYPE,SAMP,SPEC,0)=ORIFN ;_"^"_$S($P($G(^LAB(60,TEST,0)),"^",4)'="CH":1,1:0) ;Setting 2nd piece forces unique order number | 
|---|
| 50 | S ^TMP("OR",$J,"LROT",STARTDT,TYPE,SAMP,SPEC,LRSX)=TEST_"^"_QUANT | 
|---|
| 51 | S ^TMP("OR",$J,"LROT",STARTDT,TYPE,SAMP,SPEC,LRSX,1)=URG | 
|---|
| 52 | Q | 
|---|