BLRAG05D ; IHS/MSC/SAT - SUPPORT FOR LABORATORY ACCESSION GUI RPCS ; 18-Jul-2016 15:43 ; MKK
 ;;5.2;IHS LABORATORY;**1031,1037,1039**;NOV 01, 1997;Build 38
 ;
 ;
LROE2 ;
 I $D(^LRO(69,LRODT,1,DA,1)),$P(^(1),U,4)="C" S LRNONE=2,LRCHK=LRCHK+1
 K LRSN
 S (LRSN,LRSN(DA))=+DA
 I '$D(^LRO(69,LRODT,1,LRSN,0)) Q
 ; S M9=$G(M9)+1,LRZX=^LRO(69,LRODT,1,LRSN,0),LRDFN=+LRZX,LRDPF=$P(^LR(LRDFN,0),U,2),DFN=$P(^(0),U,3) D PT^LRX W !,PNM,?30,SSN S LRWRDS=LRWRD
 ;----- BEGIN IHS MODIFICATIONS LR*5.2*1027
 S M9=$G(M9)+1
 S LRZX=^LRO(69,LRODT,1,LRSN,0)
 S LRDFN=+LRZX
 S LRDPF=$P(^LR(LRDFN,0),U,2)  S DFN=$P(^(0),U,3)
 D PT^LRX
 ;W !,PNM,?30,HRCN
 S LRWRDS=$G(LRWRD)  ;ZSAT: where is this set up?
 ;----- END IHS MODIFICATIONS LR*5.2*1027
 ;W ?45,"Requesting location: ",$P(LRZX,U,7) S Y=$P(LRZX,U,5) D DD^LRX W !,"Date/Time Ordered: ",Y,?45,"By: ",$S($D(^VA(200,+$P(LRZX,U,2),0)):$P(^(0),U),1:"")
 ;S LRSVSN=LRSN D ORDER^LROS S LRSN=LRSVSN
 Q
 ;
YN ;
 Q
 ;
TASK ;
 S IOP=$P($G(^LAB(69.9,1,3.5,+DUZ(2),0)),U,3)
 D ^%ZIS
 S LRLABLIO=ION_";"_IOST_";"_IOM_";"_IOSL
 D ^%ZISC
 ;D CLOSE^%ZISUTL("LRLABEL")
 I $D(LRLABLIO),$D(LRLBL) D
 .S ZTRTN="ENT^LRLABLD",ZTDTH=$H,ZTDESC="LAB LABELS",ZTIO=LRLABLIO,ZTSAVE("LRLBL(")=""
 .D ^%ZTLOAD
 K LRLBL
 D ^%ZISC
 D STOP^LRCAPV K LRCOM,LRSPCDSC,LRCCOM,LRTCOM
 Q
 ;
 ;
END K DIR,DIRUT,GOT
 D ^LRORDK,LROEND^LRORDK,STOP^LRCAPV
 Q
 ;
 ;
GOT(ORD,ODT) ;See if all tests have been canceled
 N I,SN,ODT
 S (GOT,ODT,SN)=0
 F  S ODT=$O(^LRO(69,"C",ORD,ODT)) Q:ODT<1  D
 . S SN=0 F  S SN=$O(^LRO(69,"C",ORD,ODT,SN)) Q:SN<1!(GOT)  D
 . . Q:'$D(^LRO(69,ODT,1,SN,0))
 . . S I=0 F  S I=$O(^LRO(69,ODT,1,SN,2,I)) Q:I<1  I $D(^(I,0)),'$P(^(0),"^",11) S GOT=1 Q
 Q GOT
 ;
 ;
UNL69 ;
 L -^LRO(69,"C",+$G(LRORD))
 TCOMMIT
 Q
UNL69ERR ;
 L -^LRO(69,"C",+$G(LRORD))
 TROLLBACK
 Q
 ;
P15 ;from LRVER,LRVR,LRGV  (P15^LROE1)
 N COMB
 ;S E=0 F  S E=$O(^LRO(69,LRODT,1,LRSN,2,E)) Q:'E  W !,$P(^LAB(60,+^(E,0),0),"^")
 ;store estimated date/time of collection
 ;D TIME^LROE Q:LRCDT<1  S LRUN=$P(LRCDT,"^",2),LRTIM=+LRCDT,LRNT=LRTIM S $P(^LRO(69,LRODT,1,LRSN,0),U,8)=LRTIM
 S LRCDT=$G(BLRCDT)_"^"
 S LRUN=$P(LRCDT,"^",2),LRTIM=+LRCDT,LRNT=LRTIM
 S $P(^LRO(69,LRODT,1,LRSN,0),U,8)=LRTIM
 S:$P($G(^LRO(69,LRODT,1,LRSN,1)),U,1)="" $P(^LRO(69,LRODT,1,LRSN,1),U,1)=LRTIM
 S:($P($G(^LRO(69,LRODT,1,LRSN,1)),U,3)="")&$G(BLRCUSR) $P(^LRO(69,LRODT,1,LRSN,1),U,3)=BLRCUSR
 I '$D(LRCDT) S (LRCDT,LRTIM,LRNT)=$P(^LRO(69,LRODT,1,LRSN,0),U,8),LRUN=""
 ;if lab collect and a collection node, set REPORT ROUTING LOCATION and ORDERING LOCATION, then call P15A for more collection storage
 ;I $P(^LRO(69,LRODT,1,LRSN,0),U,4)="LC",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A Q
 I $P(^LRO(69,LRODT,1,LRSN,0),U,4)'="",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A Q
 S COMB=$P($G(^LRO(69,LRODT,1,LRSN,1)),"^",7)
 ;store collection node
 S ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2)
 S:LRSTATUS="C" ^LRO(69,"AA",+$G(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 Q
 ;
P15A ;from LROE1, LRPHEXPT   (P15^LRPHITEM)
 N LRORIFN,LRX712,LRUIDA
 N BLRSETUP
 ;
 Q:'$D(^LRO(69,LRODT,1,LRSN,1))  Q:$L($P(^LRO(69,LRODT,1,LRSN,1),U,4))  S J1=^(1),LRX712=^(0)
 S LRDFN=+LRX712 K LRDPF
 D
 . N LRRB
 . D PT^LRX
 S LROLLOC=$P(LRX712,U,9)
 S LRTREA=+$G(VAIN(3))
 S LRORIFN=$P(LRX712,U,11)
 S LRNT=$$NOW^XLFDT
 ;
 ;S ^LRO(69,LRODT,1,LRSN,1)=$P(J1,U,1,2)_"^"_DUZ_"^"_$P(J1,U,4)_"^^"_$P(J1,U,6)_"^"_$P(J1,U,7)
 S:$P($G(^LRO(69,LRODT,1,LRSN,1)),U,3)="" $P(^LRO(69,LRODT,1,LRSN,1),U,3)=BLRCUSR
 ;
 S $P(^LRO(69,LRODT,1,LRSN,3),U)=LRNT,^LRO(69,LRODT,1,"AC",LRLLOC,LRSN)=""
 S (LRAA,LRAD,LRAN,LRTN)=0
 F  S LRTN=$O(^LRO(69,LRODT,1,LRSN,2,LRTN)) Q:LRTN<1  D
 . I '$D(^LRO(69,LRODT,1,LRSN,2,LRTN,0)) Q
 . S X=^LRO(69,LRODT,1,LRSN,2,LRTN,0),LRAA=+$P(X,U,4),LRAD=+$P(X,U,3),LRAN=+$P(X,U,5),LRORIFN=$P(X,U,7)
 . S:'$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,1) $P(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,1)=$G(BLRCDT),$P(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,5)=9999999-$G(BLRCDT)
 . S BLRSETUP=$$SETUP^BLRAGUT1()
 . S:$G(MSCRLCLA)="" MSCRLCLA=$G(BLRRLCLA)
 . D P15A^LRPHITEM
 . S BLRRLCLA=MSCRLCLA
 . I $D(^LRO(68,LRAA,1,LRAD,1,LRAN,3)) D
 . . S $P(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,3)=LRNT
 . . S ^LRO(68,LRAA,1,LRAD,1,"E",LRNT,LRAN)=""
 ;
 I +$G(LRDPF)=2 D
 . N CONTROL
 . S CONTROL=$S($L(LRORIFN):"SC",1:"SN")
 . D NEW^LR7OB1(LRODT,LRSN,CONTROL,,,6)
 ;
 N LRX
 S LRX=""
 F  S LRX=$O(LRUIDA(LRX)) Q:LRX=""  D EN^LA7ADL(LRX)
 Q
 ;
Q15 ; (^LROE2)
 Q:'$D(^LRO(69,LRODT,1,LRSN,0))
 ;store collection data if not collected
 I $D(^LRO(69,LRODT,1,LRSN,1)),$P(^LRO(69,LRODT,1,LRSN,1),"^",4)="U" D
 .I $G(BLRUNC)'=1 S BLRRET="BLRAG05: This specimen has already been marked as UNCOLLECTED." S BLREF=1 Q  ;ZSAT: 5) Continue if uncollected is OK?
 .I $G(BLRUNC)=1 S ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^^"_BLRCUSR,DA=LRSN,DA(1)=LRODT,DIE="^LRO(69,"_DA(1)_",1,",DR=16 D ^DIE
 Q:BLREF
 ;store patient confirmation data
 D:(BLRPTCM'="")&(BLRPTCU'="") PTCS(LRODT,LRSN,BLRPTCU,$$NOW^XLFDT(),BLRPTCM)
 S DA=DT,LRDFN=+^LRO(69,LRODT,1,LRSN,0),LRDPF=+$P(^LR(LRDFN,0),U,2)
 ;
 ;if no collection node, go make one
 ;IF '$D(^LRO(69,LRODT,1,LRSN,1)) S LRSTATUS="C",DA=LRODT I '$D(LRSND) D P15 Q:LRCDT<1
 ;updates to collection node
 ;I $D(LRSND),$P(^LRO(69,LRODT,1,LRSN,0),U,4)="",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A G PH
 ;I $D(LRSND) N COMB S COMB=$P($G(^LRO(69,LRODT,1,LRSN,1)),"^",7) S ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2) S:LRSTATUS="C" ^LRO(69,"AA",+$G(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 ;
PH G Q16:LRORD Q
Q16 S J=0 D CHECK^LROW2 I J S BLRRET="BLRAG05: The ORDER NUMBER (LRDFN) is in use, contact the site manager.  This order has been CANCELED, you will need to re-order." S BLREF=1 Q
Q16A ;I $D(LRLONG),$D(LRSND) S LRSN=LRSND,^TMP("LROE",$J,"LRORD")=LRORD_U_LRODT_U_LRTIM_U_PNM_U_SSN
 I $D(LRLONG),$D(LRSND) S LRSN=LRSND,^TMP("LROE",$J,"LRORD")=LRORD_U_LRODT_U_LRTIM_U_PNM_U_HRCN  ;IHS/ANMC/CLS 08/18/96
 K DR S LRTSTS=0
 N MSCLRSN
 S LRSN=0 F  S LRSN=$O(LRSN(LRSN)) Q:'LRSN  S MSCLRSN=LRSN D Q17 S LRSN=MSCLRSN
 ;I $D(LRLONG),$D(LRSND) S LRSN=LRSND D LROE^LRFAST S X=^TMP("LROE",$J,"LRORD"),LRORD=+X,LRODT=$P(X,"^",2),LRTIM=$P(X,"^",3),LRLONG="",PNM=$P(X,"^",4),SSN=$P(X,"^",5)
 I 0,$D(LRLONG),$D(LRSND) S LRSN=LRSND D LROE^LRFAST S X=^TMP("LROE",$J,"LRORD"),LRORD=+X,LRODT=$P(X,"^",2),LRTIM=$P(X,"^",3),LRLONG="",PNM=$P(X,"^",4),SSN=$P(X,"^",5),HRCN=$P(X,"^",5)  ;IHS/ANMC/CLS 08/18/96
 Q
Q17 ;S I=$O(^LRO(69,LRODT,1,LRSN,6,0)),J=$O(^(1)) S:'$D(IOM) IOM=80 K LRSPCDSC S:J LRSPCDSC=^(J,0) S:I DA=LRSN,DA(1)=LRODT,DR=6,DIC="^LRO(69,"_LRODT_",1," D EN^DIQ:I D LRSPEC^LROE1
 S I=$O(^LRO(69,LRODT,1,LRSN,6,0)),J=$O(^LRO(69,LRODT,1,LRSN,6,1)) S:'$D(IOM) IOM=80 K LRSPCDSC S:J LRSPCDSC=^LRO(69,LRODT,1,LRSN,6,J,0) S:I DA=LRSN,DA(1)=LRODT,DR=6,DIC="^LRO(69,"_LRODT_",1," D:$D(^LRO(69,LRODT,1,LRSN,0)) LRSPEC^LROE1
 D OLD K ^TMP("LR",$J,"TMP")
 ;store collected status, institution, and xref
 S $P(^LRO(69,LRODT,1,LRSN,1),U,4)="C",$P(^LRO(69,LRODT,1,LRSN,1),U,8)=DUZ(2),^LRO(69,"AA",+$G(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 Q
 ;
OLD ;to allow unchanged routines to still work, from LROE1, LRPHSET1  (OLD^LRORDST)
 N LRNT
 D DT^LRORDST,NOW^%DTC
 S LRNT=%
 I $P(LRPARAM,U,4),'$D(LRNOLABL),'$D(LRTJ),0 D ^BLRAG05A  ;ZSAT
 S LRQUIET=1
 D ^BLRAG05B
 ;
 ;if no collection node, go make one
 IF '$D(^LRO(69,LRODT,1,LRSN,1)) S LRSTATUS="C",DA=LRODT D P15 Q:LRCDT<1
 ;updates to collection node
 I $D(LRSND),$P(^LRO(69,LRODT,1,LRSN,0),U,4)'="",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A Q
 I $D(LRSND) N COMB S COMB=$P($G(^LRO(69,LRODT,1,LRSN,1)),"^",7) S ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2) S:LRSTATUS="C" ^LRO(69,"AA",+$G(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 Q
 ;
 ;----- BEGIN IHS MODIFICATIONS LR*5.2*1021
BLRRL ;EP - cmi/anch/maw 8/4/2004 added to check for shipping manifest and print
 ;cmi/anch/maw REF LAB
 ;cmi/anch/maw 9/28/2004 changed to write only when a shipping manifest
 K BLRINS,BLRDXS  ;cmi/7/1/2010 reference lab ledi variables
 K BLRASFLG  ;P1034
 Q:$G(BLRGUI)
 Q:'$G(^BLRSITE(DUZ(2),"RL"))  ;reference lab not set up
 Q:$P($G(^BLRSITE(DUZ(2),"RL")),U,22)
 ;I $D(^TMP("BLRRL",$J)) D
 I $G(LRORD),$O(^BLRRLO("B",LRORD,0)) D  ;p1034
 . N OI
 . S OI=$O(^BLRRLO("B",LRORD,0))
 . Q:'$D(^BLRRLO(OI,3,0))  ;not accessioned yet
 . ;W !,"Printing Shipping Manifests for Reference Lab..."  ;1036 moved to BLRRLEVN
 . ;D PRT^BLRSHPM
 . D SHIPMAN^BLRRLEVN(LRORD,0,0)  ;ihs/cmi/maw 12/17/2014 p1034 store and forward changes
 K BLRINS,BLRASFLG,BLRDXS  ; ihs/cmi/maw p1037
 Q  ; IHS/MSC/MKK - LR*5.2*1039
 ;----- END IHS MODIFICATIONS cmi/anch/maw end REF LAB LR*5.2*1021
 ;
PTCS(BLRDT,BLRSPN,BLRUSER,BLRDTCF,BLRMETH) ;
 ; BLRDT   = (required) order date in external format - pointer to LAB ORDER ENTRY file 69
 ; BLRSPN  = (required) specimen number - pointer to specimen multiple in LAB ORDER ENTRY file 69
 ; BLRUSER = (required) user that did confirmation - pointer to NEW PERSON file 200
 ; BLRDTCF = (optional) Date/Time of user confirmation in external format - defaults to 'today'
 ; BLRMETH = (optional) method of confirmation - free text
 ;
 ;if confirmation date is null, default to NOW
 I $G(BLRDTCF)="" S BLRDTCF=$$HTFM^XLFDT($H)
 E  D
 .;convert external date to FM format
 .S X=BLRDTCF,%DT="XT" D ^%DT S BLRDTCF=Y
 .;default to 'NOW' if invalid date passed in
 .S:$$FR^XLFDT($G(BLRDTCF)) BLRDTCF=$$HTFM^XLFDT($H)
 K BLRM
 S BLRM=""
 S FDA(69.01,BLRSPN_","_+BLRDT_",",21400)=BLRUSER
 S FDA(69.01,BLRSPN_","_+BLRDT_",",21401)=BLRDTCF
 S FDA(69.01,BLRSPN_","_+BLRDT_",",21402)=BLRMETH
 D FILE^DIE("","FDA","BLRM")
 I $D(BLRM("DIERR")) D ERR^BLRAGUT("BLRAG01: "_BLRM("DIERR",1,"TEXT",1)) L -^LRO(69,BLRDT,1,BLRSPN) TROLLBACK  Q
 Q
 ;
ERROR ; EP
 ; D ENTRYAUD^BLRUTIL("ERROR^BLRAG05D 0.0")   ; Store Error data
 ; NEW ERRORMSG
 ; S ERRORMSG="$"_"Z"_"E=""ERROR^BLRAG05D"""  ; BYPASS SAC Checker
 ; S @ERRORMSG  D ^%ZTER
 ;
 ; D ERR("RPMS Error")
 ;
 ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1039
 NEW ERRSCFL,ERRCODE,LASTGLOR
 S ERRCODE=$$EC^%ZOSV        ; Error Code
 S ERRLGLO=$$LGR^%ZOSV       ; Last Global accessed
 D FORCEIT^BLRUTIL7("ERROR^BLRAG05D")
 D ERR("RPMS Error: "_ERRCODE)
 ; ----- END IHS/MSC/MKK - LR*5.2*1039
 Q
 ;
ERR(BLRERR) ;Error processing
 ; BLRERR = Error text OR error code
 ; BLRAGI   = pointer into return global array
 ;
 D UNL69ERR^BLRAG05D
 I +BLRERR S BLRERR=BLRERR+134234112 ;vbObjectError
 S BLRAGI=BLRAGI+1
 S ^TMP("BLRAG",$J,BLRAGI)=2_U_BLRERR_$C(30)
 S BLRAGI=BLRAGI+1
 S ^TMP("BLRAG",$J,BLRAGI)=$C(31)
 Q
BLRAG05D  ; IHS/MSC/SAT - SUPPORT FOR LABORATORY ACCESSION GUI RPCS ; 18-Jul-2016 15:43 ; MKK
 +1       ;;5.2;IHS LABORATORY;**1031,1037,1039**;NOV 01, 1997;Build 38
 +2       ;
 +3       ;
LROE2     ;
 +1        IF $DATA(^LRO(69,LRODT,1,DA,1))
               IF $PIECE(^(1),U,4)="C"
                   SET LRNONE=2
                   SET LRCHK=LRCHK+1
 +2        KILL LRSN
 +3        SET (LRSN,LRSN(DA))=+DA
 +4        IF '$DATA(^LRO(69,LRODT,1,LRSN,0))
               QUIT 
 +5       ; S M9=$G(M9)+1,LRZX=^LRO(69,LRODT,1,LRSN,0),LRDFN=+LRZX,LRDPF=$P(^LR(LRDFN,0),U,2),DFN=$P(^(0),U,3) D PT^LRX W !,PNM,?30,SSN S LRWRDS=LRWRD
 +6       ;----- BEGIN IHS MODIFICATIONS LR*5.2*1027
 +7        SET M9=$GET(M9)+1
 +8        SET LRZX=^LRO(69,LRODT,1,LRSN,0)
 +9        SET LRDFN=+LRZX
 +10       SET LRDPF=$PIECE(^LR(LRDFN,0),U,2)
           SET DFN=$PIECE(^(0),U,3)
 +11       DO PT^LRX
 +12      ;W !,PNM,?30,HRCN
 +13      ;ZSAT: where is this set up?
           SET LRWRDS=$GET(LRWRD)
 +14      ;----- END IHS MODIFICATIONS LR*5.2*1027
 +15      ;W ?45,"Requesting location: ",$P(LRZX,U,7) S Y=$P(LRZX,U,5) D DD^LRX W !,"Date/Time Ordered: ",Y,?45,"By: ",$S($D(^VA(200,+$P(LRZX,U,2),0)):$P(^(0),U),1:"")
 +16      ;S LRSVSN=LRSN D ORDER^LROS S LRSN=LRSVSN
 +17       QUIT 
 +18      ;
YN        ;
 +1        QUIT 
 +2       ;
TASK      ;
 +1        SET IOP=$PIECE($GET(^LAB(69.9,1,3.5,+DUZ(2),0)),U,3)
 +2        DO ^%ZIS
 +3        SET LRLABLIO=ION_";"_IOST_";"_IOM_";"_IOSL
 +4        DO ^%ZISC
 +5       ;D CLOSE^%ZISUTL("LRLABEL")
 +6        IF $DATA(LRLABLIO)
               IF $DATA(LRLBL)
                   Begin DoDot:1
 +7                    SET ZTRTN="ENT^LRLABLD"
                       SET ZTDTH=$HOROLOG
                       SET ZTDESC="LAB LABELS"
                       SET ZTIO=LRLABLIO
                       SET ZTSAVE("LRLBL(")=""
 +8                    DO ^%ZTLOAD
                   End DoDot:1
 +9        KILL LRLBL
 +10       DO ^%ZISC
 +11       DO STOP^LRCAPV
           KILL LRCOM,LRSPCDSC,LRCCOM,LRTCOM
 +12       QUIT 
 +13      ;
 +14      ;
END        KILL DIR,DIRUT,GOT
 +1        DO ^LRORDK
           DO LROEND^LRORDK
           DO STOP^LRCAPV
 +2        QUIT 
 +3       ;
 +4       ;
GOT(ORD,ODT) ;See if all tests have been canceled
 +1        NEW I,SN,ODT
 +2        SET (GOT,ODT,SN)=0
 +3        FOR 
               SET ODT=$ORDER(^LRO(69,"C",ORD,ODT))
               IF ODT<1
                   QUIT 
               Begin DoDot:1
 +4                SET SN=0
                   FOR 
                       SET SN=$ORDER(^LRO(69,"C",ORD,ODT,SN))
                       IF SN<1!(GOT)
                           QUIT 
                       Begin DoDot:2
 +5                        IF '$DATA(^LRO(69,ODT,1,SN,0))
                               QUIT 
 +6                        SET I=0
                           FOR 
                               SET I=$ORDER(^LRO(69,ODT,1,SN,2,I))
                               IF I<1
                                   QUIT 
                               IF $DATA(^(I,0))
                                   IF '$PIECE(^(0),"^",11)
                                       SET GOT=1
                                       QUIT 
                       End DoDot:2
               End DoDot:1
 +7        QUIT GOT
 +8       ;
 +9       ;
UNL69     ;
 +1        LOCK -^LRO(69,"C",+$GET(LRORD))
 +2        TCOMMIT 
 +3        QUIT 
UNL69ERR  ;
 +1        LOCK -^LRO(69,"C",+$GET(LRORD))
 +2        TROLLBACK 
 +3        QUIT 
 +4       ;
P15       ;from LRVER,LRVR,LRGV  (P15^LROE1)
 +1        NEW COMB
 +2       ;S E=0 F  S E=$O(^LRO(69,LRODT,1,LRSN,2,E)) Q:'E  W !,$P(^LAB(60,+^(E,0),0),"^")
 +3       ;store estimated date/time of collection
 +4       ;D TIME^LROE Q:LRCDT<1  S LRUN=$P(LRCDT,"^",2),LRTIM=+LRCDT,LRNT=LRTIM S $P(^LRO(69,LRODT,1,LRSN,0),U,8)=LRTIM
 +5        SET LRCDT=$GET(BLRCDT)_"^"
 +6        SET LRUN=$PIECE(LRCDT,"^",2)
           SET LRTIM=+LRCDT
           SET LRNT=LRTIM
 +7        SET $PIECE(^LRO(69,LRODT,1,LRSN,0),U,8)=LRTIM
 +8        IF $PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),U,1)=""
               SET $PIECE(^LRO(69,LRODT,1,LRSN,1),U,1)=LRTIM
 +9        IF ($PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),U,3)="")&$GET(BLRCUSR)
               SET $PIECE(^LRO(69,LRODT,1,LRSN,1),U,3)=BLRCUSR
 +10       IF '$DATA(LRCDT)
               SET (LRCDT,LRTIM,LRNT)=$PIECE(^LRO(69,LRODT,1,LRSN,0),U,8)
               SET LRUN=""
 +11      ;if lab collect and a collection node, set REPORT ROUTING LOCATION and ORDERING LOCATION, then call P15A for more collection storage
 +12      ;I $P(^LRO(69,LRODT,1,LRSN,0),U,4)="LC",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A Q
 +13       IF $PIECE(^LRO(69,LRODT,1,LRSN,0),U,4)'=""
               IF $DATA(^(1))
                   SET LRLLOC=$PIECE(^(0),U,7)
                   SET LROLLOC=$PIECE(^(0),U,9)
                   SET LRNT=$SELECT($DATA(LRNT):LRNT,$DATA(LRTIM):LRTIM,$DATA(LRCDT):+LRCDT,1:"")
                   DO P15A
                   QUIT 
 +14       SET COMB=$PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),"^",7)
 +15      ;store collection node
 +16       SET ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2)
 +17       IF LRSTATUS="C"
               SET ^LRO(69,"AA",+$GET(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 +18       QUIT 
 +19      ;
P15A      ;from LROE1, LRPHEXPT   (P15^LRPHITEM)
 +1        NEW LRORIFN,LRX712,LRUIDA
 +2        NEW BLRSETUP
 +3       ;
 +4        IF '$DATA(^LRO(69,LRODT,1,LRSN,1))
               QUIT 
           IF $LENGTH($PIECE(^LRO(69,LRODT,1,LRSN,1),U,4))
               QUIT 
           SET J1=^(1)
           SET LRX712=^(0)
 +5        SET LRDFN=+LRX712
           KILL LRDPF
 +6        Begin DoDot:1
 +7            NEW LRRB
 +8            DO PT^LRX
           End DoDot:1
 +9        SET LROLLOC=$PIECE(LRX712,U,9)
 +10       SET LRTREA=+$GET(VAIN(3))
 +11       SET LRORIFN=$PIECE(LRX712,U,11)
 +12       SET LRNT=$$NOW^XLFDT
 +13      ;
 +14      ;S ^LRO(69,LRODT,1,LRSN,1)=$P(J1,U,1,2)_"^"_DUZ_"^"_$P(J1,U,4)_"^^"_$P(J1,U,6)_"^"_$P(J1,U,7)
 +15       IF $PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),U,3)=""
               SET $PIECE(^LRO(69,LRODT,1,LRSN,1),U,3)=BLRCUSR
 +16      ;
 +17       SET $PIECE(^LRO(69,LRODT,1,LRSN,3),U)=LRNT
           SET ^LRO(69,LRODT,1,"AC",LRLLOC,LRSN)=""
 +18       SET (LRAA,LRAD,LRAN,LRTN)=0
 +19       FOR 
               SET LRTN=$ORDER(^LRO(69,LRODT,1,LRSN,2,LRTN))
               IF LRTN<1
                   QUIT 
               Begin DoDot:1
 +20               IF '$DATA(^LRO(69,LRODT,1,LRSN,2,LRTN,0))
                       QUIT 
 +21               SET X=^LRO(69,LRODT,1,LRSN,2,LRTN,0)
                   SET LRAA=+$PIECE(X,U,4)
                   SET LRAD=+$PIECE(X,U,3)
                   SET LRAN=+$PIECE(X,U,5)
                   SET LRORIFN=$PIECE(X,U,7)
 +22               IF '$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,1)
                       SET $PIECE(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,1)=$GET(BLRCDT)
                       SET $PIECE(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,5)=9999999-$GET(BLRCDT)
 +23               SET BLRSETUP=$$SETUP^BLRAGUT1()
 +24               IF $GET(MSCRLCLA)=""
                       SET MSCRLCLA=$GET(BLRRLCLA)
 +25               DO P15A^LRPHITEM
 +26               SET BLRRLCLA=MSCRLCLA
 +27               IF $DATA(^LRO(68,LRAA,1,LRAD,1,LRAN,3))
                       Begin DoDot:2
 +28                       SET $PIECE(^LRO(68,LRAA,1,LRAD,1,LRAN,3),U,3)=LRNT
 +29                       SET ^LRO(68,LRAA,1,LRAD,1,"E",LRNT,LRAN)=""
                       End DoDot:2
               End DoDot:1
 +30      ;
 +31       IF +$GET(LRDPF)=2
               Begin DoDot:1
 +32               NEW CONTROL
 +33               SET CONTROL=$SELECT($LENGTH(LRORIFN):"SC",1:"SN")
 +34               DO NEW^LR7OB1(LRODT,LRSN,CONTROL,,,6)
               End DoDot:1
 +35      ;
 +36       NEW LRX
 +37       SET LRX=""
 +38       FOR 
               SET LRX=$ORDER(LRUIDA(LRX))
               IF LRX=""
                   QUIT 
               DO EN^LA7ADL(LRX)
 +39       QUIT 
 +40      ;
Q15       ; (^LROE2)
 +1        IF '$DATA(^LRO(69,LRODT,1,LRSN,0))
               QUIT 
 +2       ;store collection data if not collected
 +3        IF $DATA(^LRO(69,LRODT,1,LRSN,1))
               IF $PIECE(^LRO(69,LRODT,1,LRSN,1),"^",4)="U"
                   Begin DoDot:1
 +4       ;ZSAT: 5) Continue if uncollected is OK?
                       IF $GET(BLRUNC)'=1
                           SET BLRRET="BLRAG05: This specimen has already been marked as UNCOLLECTED."
                           SET BLREF=1
                           QUIT 
 +5                    IF $GET(BLRUNC)=1
                           SET ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^^"_BLRCUSR
                           SET DA=LRSN
                           SET DA(1)=LRODT
                           SET DIE="^LRO(69,"_DA(1)_",1,"
                           SET DR=16
                           DO ^DIE
                   End DoDot:1
 +6        IF BLREF
               QUIT 
 +7       ;store patient confirmation data
 +8        IF (BLRPTCM'="")&(BLRPTCU'="")
               DO PTCS(LRODT,LRSN,BLRPTCU,$$NOW^XLFDT(),BLRPTCM)
 +9        SET DA=DT
           SET LRDFN=+^LRO(69,LRODT,1,LRSN,0)
           SET LRDPF=+$PIECE(^LR(LRDFN,0),U,2)
 +10      ;
 +11      ;if no collection node, go make one
 +12      ;IF '$D(^LRO(69,LRODT,1,LRSN,1)) S LRSTATUS="C",DA=LRODT I '$D(LRSND) D P15 Q:LRCDT<1
 +13      ;updates to collection node
 +14      ;I $D(LRSND),$P(^LRO(69,LRODT,1,LRSN,0),U,4)="",$D(^(1)) S LRLLOC=$P(^(0),U,7),LROLLOC=$P(^(0),U,9),LRNT=$S($D(LRNT):LRNT,$D(LRTIM):LRTIM,$D(LRCDT):+LRCDT,1:"") D P15A G PH
 +15      ;I $D(LRSND) N COMB S COMB=$P($G(^LRO(69,LRODT,1,LRSN,1)),"^",7) S ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2) S:LRSTATUS="C" ^LRO(69,"AA",+$G(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 +16      ;
PH         IF LRORD
               GOTO Q16
           QUIT 
Q16        SET J=0
           DO CHECK^LROW2
           IF J
               SET BLRRET="BLRAG05: The ORDER NUMBER (LRDFN) is in use, contact the site manager.  This order has been CANCELED, you will need to re-order."
               SET BLREF=1
               QUIT 
Q16A      ;I $D(LRLONG),$D(LRSND) S LRSN=LRSND,^TMP("LROE",$J,"LRORD")=LRORD_U_LRODT_U_LRTIM_U_PNM_U_SSN
 +1       ;IHS/ANMC/CLS 08/18/96
           IF $DATA(LRLONG)
               IF $DATA(LRSND)
                   SET LRSN=LRSND
                   SET ^TMP("LROE",$JOB,"LRORD")=LRORD_U_LRODT_U_LRTIM_U_PNM_U_HRCN
 +2        KILL DR
           SET LRTSTS=0
 +3        NEW MSCLRSN
 +4        SET LRSN=0
           FOR 
               SET LRSN=$ORDER(LRSN(LRSN))
               IF 'LRSN
                   QUIT 
               SET MSCLRSN=LRSN
               DO Q17
               SET LRSN=MSCLRSN
 +5       ;I $D(LRLONG),$D(LRSND) S LRSN=LRSND D LROE^LRFAST S X=^TMP("LROE",$J,"LRORD"),LRORD=+X,LRODT=$P(X,"^",2),LRTIM=$P(X,"^",3),LRLONG="",PNM=$P(X,"^",4),SSN=$P(X,"^",5)
 +6       ;IHS/ANMC/CLS 08/18/96
           IF 0
               IF $DATA(LRLONG)
                   IF $DATA(LRSND)
                       SET LRSN=LRSND
                       DO LROE^LRFAST
                       SET X=^TMP("LROE",$JOB,"LRORD")
                       SET LRORD=+X
                       SET LRODT=$PIECE(X,"^",2)
                       SET LRTIM=$PIECE(X,"^",3)
                       SET LRLONG=""
                       SET PNM=$PIECE(X,"^",4)
                       SET SSN=$PIECE(X,"^",5)
                       SET HRCN=$PIECE(X,"^",5)
 +7        QUIT 
Q17       ;S I=$O(^LRO(69,LRODT,1,LRSN,6,0)),J=$O(^(1)) S:'$D(IOM) IOM=80 K LRSPCDSC S:J LRSPCDSC=^(J,0) S:I DA=LRSN,DA(1)=LRODT,DR=6,DIC="^LRO(69,"_LRODT_",1," D EN^DIQ:I D LRSPEC^LROE1
 +1        SET I=$ORDER(^LRO(69,LRODT,1,LRSN,6,0))
           SET J=$ORDER(^LRO(69,LRODT,1,LRSN,6,1))
           IF '$DATA(IOM)
               SET IOM=80
           KILL LRSPCDSC
           IF J
               SET LRSPCDSC=^LRO(69,LRODT,1,LRSN,6,J,0)
           IF I
               SET DA=LRSN
               SET DA(1)=LRODT
               SET DR=6
               SET DIC="^LRO(69,"_LRODT_",1,"
           IF $DATA(^LRO(69,LRODT,1,LRSN,0))
               DO LRSPEC^LROE1
 +2        DO OLD
           KILL ^TMP("LR",$JOB,"TMP")
 +3       ;store collected status, institution, and xref
 +4        SET $PIECE(^LRO(69,LRODT,1,LRSN,1),U,4)="C"
           SET $PIECE(^LRO(69,LRODT,1,LRSN,1),U,8)=DUZ(2)
           SET ^LRO(69,"AA",+$GET(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 +5        QUIT 
 +6       ;
OLD       ;to allow unchanged routines to still work, from LROE1, LRPHSET1  (OLD^LRORDST)
 +1        NEW LRNT
 +2        DO DT^LRORDST
           DO NOW^%DTC
 +3        SET LRNT=%
 +4       ;ZSAT
           IF $PIECE(LRPARAM,U,4)
               IF '$DATA(LRNOLABL)
                   IF '$DATA(LRTJ)
                       IF 0
                           DO ^BLRAG05A
 +5        SET LRQUIET=1
 +6        DO ^BLRAG05B
 +7       ;
 +8       ;if no collection node, go make one
 +9        IF '$DATA(^LRO(69,LRODT,1,LRSN,1))
               SET LRSTATUS="C"
               SET DA=LRODT
               DO P15
               IF LRCDT<1
                   QUIT 
 +10      ;updates to collection node
 +11       IF $DATA(LRSND)
               IF $PIECE(^LRO(69,LRODT,1,LRSN,0),U,4)'=""
                   IF $DATA(^(1))
                       SET LRLLOC=$PIECE(^(0),U,7)
                       SET LROLLOC=$PIECE(^(0),U,9)
                       SET LRNT=$SELECT($DATA(LRNT):LRNT,$DATA(LRTIM):LRTIM,$DATA(LRCDT):+LRCDT,1:"")
                       DO P15A
                       QUIT 
 +12       IF $DATA(LRSND)
               NEW COMB
               SET COMB=$PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),"^",7)
               SET ^LRO(69,LRODT,1,LRSN,1)=LRTIM_"^"_LRUN_"^"_BLRCUSR_"^"_LRSTATUS_"^^^"_COMB_"^"_DUZ(2)
               IF LRSTATUS="C"
                   SET ^LRO(69,"AA",+$GET(^LRO(69,LRODT,1,LRSN,.1)),LRODT_"|"_LRSN)=""
 +13       QUIT 
 +14      ;
 +15      ;----- BEGIN IHS MODIFICATIONS LR*5.2*1021
BLRRL     ;EP - cmi/anch/maw 8/4/2004 added to check for shipping manifest and print
 +1       ;cmi/anch/maw REF LAB
 +2       ;cmi/anch/maw 9/28/2004 changed to write only when a shipping manifest
 +3       ;cmi/7/1/2010 reference lab ledi variables
           KILL BLRINS,BLRDXS
 +4       ;P1034
           KILL BLRASFLG
 +5        IF $GET(BLRGUI)
               QUIT 
 +6       ;reference lab not set up
           IF '$GET(^BLRSITE(DUZ(2),"RL"))
               QUIT 
 +7        IF $PIECE($GET(^BLRSITE(DUZ(2),"RL")),U,22)
               QUIT 
 +8       ;I $D(^TMP("BLRRL",$J)) D
 +9       ;p1034
           IF $GET(LRORD)
               IF $ORDER(^BLRRLO("B",LRORD,0))
                   Begin DoDot:1
 +10                   NEW OI
 +11                   SET OI=$ORDER(^BLRRLO("B",LRORD,0))
 +12      ;not accessioned yet
                       IF '$DATA(^BLRRLO(OI,3,0))
                           QUIT 
 +13      ;W !,"Printing Shipping Manifests for Reference Lab..."  ;1036 moved to BLRRLEVN
 +14      ;D PRT^BLRSHPM
 +15      ;ihs/cmi/maw 12/17/2014 p1034 store and forward changes
                       DO SHIPMAN^BLRRLEVN(LRORD,0,0)
                   End DoDot:1
 +16      ; ihs/cmi/maw p1037
           KILL BLRINS,BLRASFLG,BLRDXS
 +17      ; IHS/MSC/MKK - LR*5.2*1039
           QUIT 
 +18      ;----- END IHS MODIFICATIONS cmi/anch/maw end REF LAB LR*5.2*1021
 +19      ;
PTCS(BLRDT,BLRSPN,BLRUSER,BLRDTCF,BLRMETH) ;
 +1       ; BLRDT   = (required) order date in external format - pointer to LAB ORDER ENTRY file 69
 +2       ; BLRSPN  = (required) specimen number - pointer to specimen multiple in LAB ORDER ENTRY file 69
 +3       ; BLRUSER = (required) user that did confirmation - pointer to NEW PERSON file 200
 +4       ; BLRDTCF = (optional) Date/Time of user confirmation in external format - defaults to 'today'
 +5       ; BLRMETH = (optional) method of confirmation - free text
 +6       ;
 +7       ;if confirmation date is null, default to NOW
 +8        IF $GET(BLRDTCF)=""
               SET BLRDTCF=$$HTFM^XLFDT($HOROLOG)
 +9       IF '$TEST
               Begin DoDot:1
 +10      ;convert external date to FM format
 +11               SET X=BLRDTCF
                   SET %DT="XT"
                   DO ^%DT
                   SET BLRDTCF=Y
 +12      ;default to 'NOW' if invalid date passed in
 +13               IF $$FR^XLFDT($GET(BLRDTCF))
                       SET BLRDTCF=$$HTFM^XLFDT($HOROLOG)
               End DoDot:1
 +14       KILL BLRM
 +15       SET BLRM=""
 +16       SET FDA(69.01,BLRSPN_","_+BLRDT_",",21400)=BLRUSER
 +17       SET FDA(69.01,BLRSPN_","_+BLRDT_",",21401)=BLRDTCF
 +18       SET FDA(69.01,BLRSPN_","_+BLRDT_",",21402)=BLRMETH
 +19       DO FILE^DIE("","FDA","BLRM")
 +20       IF $DATA(BLRM("DIERR"))
               DO ERR^BLRAGUT("BLRAG01: "_BLRM("DIERR",1,"TEXT",1))
               LOCK -^LRO(69,BLRDT,1,BLRSPN)
               TROLLBACK 
               QUIT 
 +21       QUIT 
 +22      ;
ERROR     ; EP
 +1       ; D ENTRYAUD^BLRUTIL("ERROR^BLRAG05D 0.0")   ; Store Error data
 +2       ; NEW ERRORMSG
 +3       ; S ERRORMSG="$"_"Z"_"E=""ERROR^BLRAG05D"""  ; BYPASS SAC Checker
 +4       ; S @ERRORMSG  D ^%ZTER
 +5       ;
 +6       ; D ERR("RPMS Error")
 +7       ;
 +8       ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1039
 +9        NEW ERRSCFL,ERRCODE,LASTGLOR
 +10      ; Error Code
           SET ERRCODE=$$EC^%ZOSV
 +11      ; Last Global accessed
           SET ERRLGLO=$$LGR^%ZOSV
 +12       DO FORCEIT^BLRUTIL7("ERROR^BLRAG05D")
 +13       DO ERR("RPMS Error: "_ERRCODE)
 +14      ; ----- END IHS/MSC/MKK - LR*5.2*1039
 +15       QUIT 
 +16      ;
ERR(BLRERR) ;Error processing
 +1       ; BLRERR = Error text OR error code
 +2       ; BLRAGI   = pointer into return global array
 +3       ;
 +4        DO UNL69ERR^BLRAG05D
 +5       ;vbObjectError
           IF +BLRERR
               SET BLRERR=BLRERR+134234112
 +6        SET BLRAGI=BLRAGI+1
 +7        SET ^TMP("BLRAG",$JOB,BLRAGI)=2_U_BLRERR_$CHAR(30)
 +8        SET BLRAGI=BLRAGI+1
 +9        SET ^TMP("BLRAG",$JOB,BLRAGI)=$CHAR(31)
 +10       QUIT