LRAPKOE ;DSS/FHS - CRPS AP LAB ORDER ENTRY AND ACCESSION ;Jun 21, 2022@15:03:04
 ;;5.2;LAB SERVICE;**462,479,483,509,553**;Sep 27, 1994;Build 21
 ; Supported calls AI #, 5286,103,3615
EN1 ;
 ; Called from EN^LRAPLG
 ; Process CPRS AP Orders
 N ANS,ANSY,CNT,CONTROL,DA,DIC,DIERR,DIR,DIRUT,DOD,DR
 N DTOUT,DUOUT,ERR,FDA,FDAIEN,FIL,FLD,GOT,IEN,IENX,II
 N LR,LRAA,LRACN,LRACN0,LRAP690,LRAPNT,LRAPSPEC
 N LRAPTST,LRC,LRCAPA,LRCAPLOC,LRCHK
 N LRCOL,LRCOM,LRC5,LRDFN,LRDISC,LRDIE,LRDOC,LRDPF,LREND,LRFDA
 N LRFDAIEN,LRI,LRIDT,LRIEN,LRJ,LRLL,LRLLOC,LRLWC,LRMD,LRMSG
 N LRNATURE,LRNLT,LRNODE69,LRNONE,LROD0,LROD1,LROD3,LRODT,LRODT0
 N LROESTAT,LROLLOC,LRORD,LRORDRR,LROOS,LRORD,LRORDRR
 N LRORIFN,LRORNUM,LRORPOV,LRORTYP,LRORU3,LROS,LROSD,LRPRAC,LRPANEL,LRPHY,LRPL
 N LRPROVL,LRRC,LRROD,LRSAMP,LRSD,LRSIT,LRSN,LRSND
 N LRSP,LRSPCOM,LRSPEC,LRSS,LRSTATUS,LRSUBBY,LRSUBMIT
 N LRSVSN,LRT,LRTM7,LRTSORU,LRTST,LRTSTS,LRUID,LRURG,LRVAL,LRWKCD
 N LRWARD,LRWRDS,LRX,LRXX,LRYI,LRZX,M9,NODE,ODT,ORD
 N PNM,RET,S,SN,SSN,TMPDIAL,VA,VADM,VAIN
 N LREND,LRVAL,LRORPROV,LRSUBBY,X,X3,X4,Y
 ;
 N COBR,COBX,IFN,IFN1,LRA,LRACD,LRANC0,LRAU,LRCS,LRD,LRFIRST
 N LRO,LRP,LRSEL,LRSF,LRSOP,LRSTATI,LRSVC,LRTNAM
 N LRU,LRWARDS,ORBMSG,ORCMSG,SRTN,X10,X5,X6,X7,X9,Z1
 S LREND=0
 D CK^LRAP I Y<0 Q
 N X,Y
 ;;*
 S LRLWC="WC"
 ;;;*
 ; Select peforming laboratory
 I '$G(LRPL) S LRPL=DUZ(2) S LRVAL=$$SELPL^LRVERA(DUZ(2)) D END:LRVAL<1 Q:LRVAL<1  S LRPL=$S(LRVAL'=DUZ(2):LRVAL,1:DUZ(2))
L5 ;
 Q:$G(LREND)
NEXT ;from LROE1
 N LRVIDO,LRVIDOF D VIDEO^LRPARAM ; needed below - P509 PMK 5/22/17
 K DIR,LRYI,LRAPTST,GOT,LRAPDIAL,LRNODE69,LRSUBMIT,LRPHY,LRAD,LRAA,LRLLOC,LROLLOC,LRSUBBY,LRORPROV D KVAR^LRX
 I $D(LROESTAT) D:$P(LRPARAM,U,14) ^LRCAPV I $G(LREND) K LRLONG,LRPANEL Q
 S (LRODT,X,DT)=$$DT^XLFDT(),LRODT0=$$FMTE^XLFDT(DT,5)
 I '$D(^LRO(69,DT,1,0)) S ^LRO(69,DT,0)=DT,^LRO(69,DT,1,0)="^69.01PA^^",^LRO(69,"B",DT,DT)=""
 I $D(^LAB(69.9,1,"RO")),+$H'=+$P(^("RO"),U) D
 . W $C(7),!,"ROLLOVER ",$S($P(^("RO"),U,2):"IS RUNNING.",1:"HAS NOT RUN.")," ACCESSIONING SHOULDN'T BE DONE NOW.",$C(7),!
 . S DIR("A")="  Are you sure you want to continue",DIR(0)="Y",DIR("B")="No"
 I $T D ^DIR D END:$D(DIRUT) I Y'=1 W !,"OK, try later." D EN1
 S X="T-7",%DT="" D ^%DT S LRTM7=+Y
 K DIC,LRSND,LRSN,LRAPDIAL
 W !!,"Select Order number: " R LRORD:DTIME I LRORD["."!($D(LRLONG)&(LRORD="")) W !,"Wrong format" G EN1
 W @IOF S M9=0 G END:LRORD="^"  I LRORD="" W !?5,"No Order Number entered use standard Specimen Log-in process",! Q
 I $L(LRORD)>8 W !,"The order number entered is too long." H 1 G EN1
 S:LRORD?.N LRORD=+LRORD IF LRORD'?.N D QMSG G EN1
 I '$D(^LRO(69,"C",LRORD)) W !!?10,LRORD_" Does not exist, select another ",$C(7),! G EN1
 L +^LRO(69,"C",LRORD):$G(DILOCKTM,3)
 I '$T W !?5,"Someone else is editing this Order",!!,$C(7) G EN1
 S (LRCHK,LRNONE)=1,(M9,LRODT)=0
 F  S LRODT=+$O(^LRO(69,"C",LRORD,LRODT)) Q:LRODT<1  D
 . S DA=0 F  S DA=$O(^LRO(69,"C",LRORD,LRODT,DA)) Q:DA<1  S LRCHK=LRCHK-1 S:LRNONE'=2 LRNONE=0 D LROE2
 I $G(LREND) D UNLOCK G EN1
 I DOD'="" S Y=DOD D DD^LRX W !,!,?5,@LRVIDO,"Patient ",PNM," died on: ",Y,@LRVIDOF W !
 D  I Y=0!($D(DIRUT)) K DIRUT,DTOUT,DUOUT,Y D KVAR^LRX,UNLOCK G EN1
 . K Y
 . S DIR(0)="Y"
 . S DIR("A")="Do you wish to continue with this accession [Yes/No]"
 . S DIR("T")=120
 . D ^DIR K DIR
 I LRNONE=2,LRCHK<1 W !,"The order has already been partially accessioned." H 1
 I LRNONE=2,LRCHK>0 W !,"The order has already been accessioned." H 1 D UNLOCK G NEXT
 I LRNONE=1 W !,"No order exists with that number." H 1 D UNLOCK G NEXT
 I '$$GOT(LRORD) W !!,"All tests for this order have been canceled.",! D UNLOCK G NEXT
 S LRODT=$O(^LRO(69,"C",LRORD,0)),LRSN=$O(^LRO(69,"C",LRORD,LRODT,0))
 I $P($G(^LRO(69,LRODT,1,LRSN,1)),U,4)'="" W !?5,"Specimen already processed" D UNLOCK,END G EN1
 ; made PATHOLOGIST optional like legacy AP log-in - P509 PMK 5/25/17
 K LRPHY D DOC(.LRPHY,"PATHOLOGIST") I $G(LREND) W !,"No Pathologist selected" D UNLOCK,END G EN1
 S (LRPROVL,X)=+LRPHY D D^LRUA S LRPRAC(1)=X
 D DATE(.LRCDT,"COLLECTION DATE/TIME") I $G(LRCDT)<1 D UNLOCK,END G EN1
 S LRURG=9,LRAD=DT
 S LRNODE69=^LRO(69,LRODT,1,LRSN,0)
 S LRSUBBY="" I $D(^LRO(69,LRODT,1,LRSN,12))#2 S LRSUBBY=^(12) ;SUBMITTED BY
 S LRORNUM=$G(^LRO(69,LRODT,1,LRSN,.1))
 S LRSUBMIT=$P(LRNODE69,U,2),LRSUBMIT=$P(^VA(200,LRSUBMIT,0),U)_U_LRSUBMIT
 S LRORIFN=$P(LRNODE69,U,11),LRORTYP=$P(LRNODE69,U,4)
 S LRORPROV=+$P($G(^LRO(69,LRODT,1,LRSN,11)),U,3) ;Ordering Provider Optional
NEXT2 ;
 S LRAPSPEC="",LRI=0
 F  S LRI=$O(^LRO(69,LRODT,1,LRSN,4,1,1,LRI)) Q:LRI<1  S LRAPSPEC(LRI)=^(LRI,0)
 S LRLLOC=$P(LRNODE69,U,7),LROLLOC=$P(LRNODE69,U,9) S:LRLLOC="" LRLLOC="NO ABRV"
 K LRCOM S LRCOM=""
 N LRYI S LRYI=0 F  S LRYI=$O(^LRO(69,LRODT,1,LRSN,2,1,1,LRYI)) Q:LRYI<1  D
 . S LRCOM(LRYI)=(^(LRYI,0))
 K LRYI K LRAPDIAL
 F LRYI=13,14,15,16 M LRAPDIAL(".0"_LRYI)=^LRO(69,LRODT,1,LRSN,LRYI) K LRAPDIAL(".0"_LRYI,0)
 K LRYI,LRAPTST,LRTST
 S (LRAA,LRSS)=""
 S LRYI=0 F  S LRYI=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRYI)) Q:LRYI<1  S (LRTSORU,LRTST)=LRYI,LRAPTST(LRYI)="" D
 . S LRWKCD=+$G(^LAB(60,+LRTST,64)),LRNLT=$P($G(^LAM(LRWKCD,0)),"^",2),II=1
 . ;Get accession area for institution
 . S LRAA=+$P($G(^LAB(60,LRTST,8,+$G(LRPL),0)),U,2)
 . I 'LRAA D  Q
 . . S LRERR="[ "_$P($G(^LAB(60,LRTST,0)),U)_"]  DOES NOT HAVE AN APPROPRIATE ACCESSION AREA DEFINED"
 . . W !!,$$CJ^XLFSTR(LRERR,IOM)
 . . W !,$$CJ^XLFSTR("Log-in Aborted",IOM),!
 . . S LREND=1
 . I LRAA S LRSS=$P(^LAB(60,LRTST,0),U,4)
 . N LRI
 . S LRI=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRYI,0))
 . S LRAPTST(LRYI)=$P(^LRO(69,LRODT,1,LRSN,2,LRI,0),U,7)
 ;;;*
 I $G(LREND) K LRERR,LREND D UNLOCK,END G EN1
 K LRDPF D PT^LRX
 K LRYI D KVA^VADPT
 S LRAPDIAL=1,LRAP690=$G(LROD0),LRSTATUS="C"
 ;;*
 S LROUTINE=9
 S X=$P(^LRO(68,LRAA,0),U) D ^LRUTL
 S (Y,LRAD)=DT D LRAD^LRU
 ;;;*
 D GETLOCK^LRWLST1(LRAA,LRAD)
 D CHECK68^LRWLST1(LRAA,LRAD)
 S:'$D(^LRO(68,LRAA,1,LRAD,1,0)) ^LRO(68,LRAA,1,LRAD,1,0)="^68.02PA^"
 S LRAN=+$P(^LRO(68,LRAA,1,LRAD,1,0),U,3)
 F  Q:'$D(^LRO(68,LRAA,1,LRAD,1,LRAN))  S LRAN=LRAN+1
 S LRAC=$P(^LRO(68,LRAA,0),U,11)_" "_$S(LRAD["0000":$E(LRAD,2,3),1:$E(LRAD,4,7))_" "_LRAN
 D CRE863^LRAPLG1
 K LRXX S LRXX(LRTST)="" D ORDTST
 D MOVE(LRDFN,LRSS,LRIDT)
 ;
SET68 ;Setup ^LRO(68,LRAA,1,LRAD,1,LRAN
 I LRSS'="AU" D
 . K LRDIE D CRE868^LRAPLG1
 . S X=^LR(LRDFN,LRSS,LRI,0),LRIDT=LRI,LRCAPLOC=""
 . S LRSD=$P(X,U),LRRC=$P(X,U,10),LRACC=$P(X,U,6),LRMD(1)=$P(X,U,7),LRPRAC=$P(X,U,7),LRSIT=$P(X,U,5),LRCS=$P(X,U,11),LRLLOC=$P(X,U,8),LRC(5)=""
 . K LRDIE D EN^LRUWLF
 D UPD68
 L -^LRO(68,LRAA,1,LRAD,1,0)
 D UNLOCK
 Q
 ;
MOVE(LRDFN,LRSS,LRI) ;Move CPRS AP Dialog to ^LR(LRDFN,LRSS,LRI)
 ;Check to see if Surgery Package Dialog is available
 D ^LRAPKLG
 ;
 N ANS,X,Y,ERR,IEN,FDA,FIL,LRX
 S FIL=63.08,FLD=.013
 S IEN=LRI_","_LRDFN_","
 S:LRSS="SP" FIL=63.08
 S:LRSS="CY" FIL=63.09
 S:LRSS="EM" FIL=63.02
 S LRX=0 F  S LRX=$O(LRAPDIAL(LRX)) Q:LRX=""  D
 . K ERR D WP^DIE(FIL,IEN,LRX,"A","LRAPDIAL("_LRX_")","ERR")
 Q
 ;
ORDTST ; Ordered test
 N XX
 S LRWKCD=+$G(^LAB(60,+$G(LRTST),64)),LRNLT=$P($G(^LAM(LRWKCD,0)),"^",2),II=1
 S XX=0
 F  S XX=$O(LRXX(XX)) Q:'XX  S $P(LRXX(XX),"^",2)=LRNLT_"^"_+LRTST
 Q
 ;
LROE2 ;
 S LREND=0 I '$D(^LRO(69,LRODT,1,DA,0)) Q
 N IEN,FLD,FIL,ANS
 S FIL=69.01,FLD=13,IEN=DA_","_LRODT_","
 S ANS=$$GET1^DIQ(FIL,IEN,13,,"ANS","ERR")
 I $L(ANS) D  Q
 . W !,$$CJ^XLFSTR("The order# "_LRORD_" has been "_ANS,IOM),!
 . W $$CJ^XLFSTR("Select another order",IOM),!
 . S LREND=1
 I $D(^LRO(69,LRODT,1,DA,1)) D
 . I $P(^LRO(69,LRODT,1,DA,1),U,4)="C" S LRNONE=2,LRCHK=LRCHK+1 Q
 . I $P(^LRO(69,LRODT,1,DA,0),U,4)="LC",$P(^LRO(69,LRODT,1,DA,1),U,4)="" S LRNONE=2,LRCHK=LRCHK+1
 ;
 K LRSN
 S (LRSN,LRSN(DA))=+DA,LREND=0
 I '$D(^LRO(69,LRODT,1,LRSN,0)) Q
 I '$O(^LRO(69,LRODT,1,LRSN,13,0)) W !?5,"No AP Dialog for this order" S LREND=1 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
 I $G(VA("MRN"))]"" D
 .W !,PNM,?30,$G(VA("MRN",0))_": "_SSN
 .W !,?30,"DOB: "_$P($G(VADM(3)),U,2) S LRWRDS=LRWRD
 E  W !,PNM,?30,SSN S LRWRDS=LRWRD
 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
 ;
 ;
QMSG W !,"Enter the order entry number assigned when the test was ordered."
 W:'$D(LRLONG) !,"If the test has not been ordered, type the RETURN key to exit."
 W !,"To exit, type the ""^"" key and RETURN key."
 Q
 ;
 ;
END K DIR,DIRUT,GOT
 D ^LRORDK,LROEND^LRORDK,STOP^LRCAPV,CLEAN D KVAR^LRX
 S LREND=1
 Q
 ;
 ;
GOT(ORD) ;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
 ;
UPD68 ; Update #68 with required test data
 N LRFILE,ERR,IEN,LRI,LRIEN,LRCNT
 S LRFILE=68.04,IEN(1)=LRTST
 S LRIEN="?+1,"_LRAN_","_LRAD_","_LRAA_","
 S FDA(3,LRFILE,LRIEN,.01)=LRTST
 S FDA(3,LRFILE,LRIEN,1)=LROUTINE
 S FDA(3,LRFILE,LRIEN,8.1)=LRTST
 D UPDATE^DIE("","FDA(3)","IEN","ERR(3)")
 ;
 ;
SPEC68 ; Update #68 with specimen data
 S (LRI,LRCNT)=0 F  S LRI=$O(LRAPSPEC(LRI)) Q:LRI<1  D
 . K LRFILE,FDAIEN,IEN
 . S LRFILE=68.05,LRCNT=LRCNT+1
 . S LRSPEC=$P(LRAPSPEC(LRI),U,6)
 . S LRSAMP=$P(LRAPSPEC(LRI),U,7)
 . S FDAIEN="?+"_LRCNT_","_LRAN_","_LRAD_","_LRAA_","
 . S FDA(31,LRFILE,FDAIEN,.01)=LRSPEC
 . S FDA(31,LRFILE,FDAIEN,1)=LRSAMP
 . D UPDATE^DIE("","FDA(31)","IEN","LRERR(31)")
 ;
 S LRCAPA=$P(^LAB(69.9,1,0),"^",14)&($P(^LRO(68,LRAA,0),"^",16))
 I $G(LRCAPA) D WKLD ; Stuff workload data into accession.
 ;
 D LR7OB1 ;;Update CPRS to active status
 ;
 D LR7OFAO ;Update ^LRO(69 with accession data.
 ;
 D SPEC63(LRDFN,LRSS,LRIDT,.LRAPSPEC) ;Load AP Specimens into ^LR(
 ;
 D LRCOM(LRDFN,LRSS,LRIDT,.LRCOM) ; Store comments into ^LR(
 ;
 D SLRSS^LRWLST11 ;Populate the ^LR(LRDFN,LRSS,LRIDT,"ORU" with UID
 ;
 D ORUT^LRWLST11 ;Populate the ^LR(LRDFN,LRSS,LRIDT,"ORUT" with test data
 ;
 D DIS63(LRDFN,LRSS,LRIDT) ; Display ^LR(LRDFN,LRSS,LRIDT) data.
 ;
 W !,$$CJ^XLFSTR("****  Enter Next Order ****",IOM),!
 Q
DOC(RET,LABEL) ; Return provider
 ;IN = RET by reference
 ;     Label is the prompt the user will see
 ;OUT = LREND=1 if user fails to answer the prompt correctly
 ;      RET = +y
 ;      RET(0) = IEN^.01 FIELD
 N DIR,X,Y,DIRUT,DTOUT,DUOUT
 ; made PATHOLOGIST optional like legacy AP log-in - P509 PMK 5/25/17
 S DIR(0)="PO^200:EQMF",LREND=0 ; PATHOLOGIST is optional
 S DIR("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U)))"
 S DIR("A")=LABEL
 D ^DIR
 I $G(DIRUT),((Y["^")!(Y="")) S LREND=1 Q
 I Y=-1 S Y=""
 S RET=+Y,RET(0)=Y
 Q
DATE(RET,LABEL) ;
 ;
 ;IN = RET by reference
 ;     Label is the prompt the user will see
 ;OUT = LREND=1 if user fails to answer the prompt correctly
 ;      RET = Y
 N DIR,X,Y,DIRUT,DTOUT,DUOUT
 S LREND=0,DIR("A")=LABEL,DIR("?")="Date can not be in the future"
 S DIR(0)="D^:-NOW:EXT"
 D ^DIR
 I Y<1 S LREND=1
 S RET=Y
 Q
DA(Y) ; Returns date in eye-readable month format
 Q $$FMTE^XLFDT(Y,"M")
 Q
LR7OB1 ;Update CPRS to active status
 K DIERR,IEN,LRFDA,ERR
 K ERR
 S LRORD=+$G(^LRO(69,LRODT,1,LRSN,.1))
 S IEN=LRSN_","_LRODT_","
 I '$G(^LRO(69,LRODT,1,LRSN,1)) D
 . S LRFDA(1,69.01,IEN,10)=+$G(LRCDT,$$NOW^XLFDT)
 . S LRFDA(1,69.01,IEN,12)=DUZ
 . S LRFDA(1,69.01,IEN,13)="C"
 . I $G(LRPL) S LRFDA(1,69.01,IEN,25)=+$G(LRPL)
 . S LRFDA(1,69.01,IEN,20)=LRNT
 . D UPDATE^DIE("KS","LRFDA(1)","IEN","ERR")
 K ^LRO(69,"AA",LRODT_"|"_LRSN) ;DD 69.01,13 is incorrect
 S ^LRO(69,"AA",LRORD,LRODT_"|"_LRSN)=""
 ;Update status in OR(100,
 S LRORIFN=+$P($G(^LRO(69,LRODT,1,LRSN,2,1,0)),"^",7) D
 . S CONTROL=$S($G(LRORIFN):"SC",1:"SN")
 . D NEW^LR7OB1(LRODT,LRSN,CONTROL,,,6)
 Q
LR7OFAO ;Update ^LRO(69 with accession data.
   ;
 K IEN,LRFDA,LRFDAIEN,LRMSG,DIERR
 S IEN="?+1,"_LRSN_","_LRODT_","
 S LRFDA(6,69.03,IEN,.01)=LRTST
 I $G(LROUTINE) S LRFDA(6,69.03,IEN,1)=LROUTINE
 S LRFDA(6,69.03,IEN,2)=LRAD
 S LRFDA(6,69.03,IEN,3)=LRAA
 S LRFDA(6,69.03,IEN,4)=LRAN
 S LRFDA(6,69.03,IEN,13)=LRUID
 S LRFDA(6,69.03,IEN,8)="IP"
 S LRFDA(6,69.03,IEN,9)="L"
 D UPDATE^DIE("","LRFDA(6)","LRFDAIEN","LRMSG")
 Q
DIS63(LRDFN,LRSS,LRIDT) ;Display ^LR(LRDFN,LRSS,LRIDT data
 Q:'$G(^LR(LRDFN,LRSS,LRIDT,0))
 W @IOF,!!,$$CJ^XLFSTR("-------------------------------------",IOM),!
 W $$CJ^XLFSTR("Display of CPRS data in LAB DATA file",IOM),!
 N ANS,DIC,DA,DR,ERR,CNT,ID,IEN,LREND,LRFILE,LRPAGE,S
 S DA=LRIDT,DA(1)=LRDFN,LREND=0
 S DIC="^LR("_LRDFN_","_""""_LRSS_""""_",",DR=0,S=1
 D EN^DIQ S LRPAGE=S
 S LRFILE=$S(LRSS="SP":63.08,LRSS="CY":63.09,LRSS="EM":63.02,1:0)
 S IEN=DA_","_DA(1)_","
 D GETS^DIQ(LRFILE,IEN,".01:16","ERRZ","ANS","ERR")
 F ID="BRIEF CLINICAL HISTORY","PREOPERATIVE DIAGNOSIS","OPERATIVE FINDINGS","POSTOPERATIVE DIAGNOSIS" Q:$G(LREND)  D
 . I $O(ANS(LRFILE,IEN,ID,0)) W !?5,ID_":" D PAGE Q:$G(LREND)  D
 . . S CNT=0 F  S CNT=$O(ANS(LRFILE,IEN,ID,CNT)) Q:CNT<1!($G(LREND))  D
 . . . W !,ANS(LRFILE,IEN,ID,CNT,0) D PAGE
 W:'$G(LREND) !!,$$CJ^XLFSTR("--- End of CPRS data in LAB DATA file ---",IOM),!
 ;
 ; VistA Imaging changes - P509 PMK 5/10/17
 I $T(ADD^MAGTP005)'="" D ADD^MAGTP005(LRAC) ; add case to file #2005.42
 N LRI S LRI=LRIDT  ; LRI is used in MAGT7MA instead of LRIDT
 I $T(NEW^MAGT7MA)'="" D NEW^MAGT7MA ; invoke Imaging HL7 routine
 Q
 ;
SPEC63(LRDFN,LRSS,LRIDT,LRAPSPEC) ;Load AP Specimens into ^LR(
    ; INPUT  LRAPSPEC(1)="CERVICAL CYTOLOGIC MATERIAL,Thin Prep^^^^^6242^55"
 ;
 K LRFDA,IEN,IENX,ERR,ERR2,WPIEN68,NODE,ANS,ANSY,LRSP,LRCOL
 K LRJ,NODE,LRFILE,LRSPCOM,LRSPEC,LRSAMP
 ;
 Q:LRSS="AU"!(LRSS="BB")
 S LRFILE=$S(LRSS="SP":63.812,LRSS="CY":63.902,LRSS="EM":63.202,1:0)
 S IEN="+1,"_LRIDT_","_LRDFN_","
 S:'$G(IENX) IENX=0 F  S IENX=$O(LRAPSPEC(IENX)) Q:IENX<1  D
 . S NODE=LRAPSPEC(IENX),LRSPCOM=$P(NODE,U),LRSPEC=+$P(NODE,U,6),LRSAMP=$P(NODE,U,7)
 . Q:$S('LRSPEC:1,'LRSAMP:1,1:0)
 . K LRFDA,ERR,ANSY
 . S LRFDA(2,LRFILE,IEN,.01)=LRSPCOM ;Specimen Description
 . S LRFDA(2,LRFILE,IEN,.06)=LRSPEC ;Specimen  ^LAB(61,LRSP
 . S LRFDA(2,LRFILE,IEN,.07)=LRSAMP ; Collection Sample ^LAB(62,LRCOL
 . D UPDATE^DIE("KS","LRFDA(2)","ANSY(1)","ERR")
 Q
LRCOM(LRDFN,LRSS,LRIDT,LRCOM) ;Store Comments into ^LR(
 ;IN   LRCOM(1)="~For Test: GYNECOLOGY"
 K LRFILE,LRFDA,IEN,CNT
 S LRFILE=$S(LRSS="CH":63.041,LRSS="MI":63.05,LRSS="SP":63.98,LRSS="CY":63.908,LRSS="EM":63.208,1:"")
 Q:'LRFILE
 S IEN="+1,"_LRIDT_","_LRDFN_",",CNT=0
 F  S CNT=$O(LRCOM(CNT)) Q:CNT<1  D
 . K LRFDA,ERR
 . S LRFDA(9,LRFILE,IEN,.01)=LRCOM(CNT)
 . D UPDATE^DIE("KS","LRFDA(9)","","ERR")
 Q
CLEAN ;Kill variable
 Q
WKLD ;Setup workload info
 ;
 N LR,LRI,LRK,LRRC,LRT,LRW
 S LRI=LRIDT
 S LRRC=$S($G(LRCDT):LRCDT,1:$$NOW^XLFDT)
 S LRCAPA=$P(^LAB(69.9,1,0),"^",14)&($P(^LRO(68,LRAA,0),"^",16))
 ;
 S LR("L")=LRSS_"^LRAP" I LRCAPA,"AUSP"[LRSS S X=$S(LRSS="SP":"H & E STAIN",1:"AUTOPSY H & E") D X^LRUWK I $D(X) S LRW("H&E")=LRT D ^LRAPSWK
 ;
 I LRCAPA,LRSS="EM" S X="THICK SECTION EM" D X^LRUWK I $D(X) S X=11 D SET1 S LRW("SS")=LRT_U_X S X="GRID EM" D X^LRUWK I $D(X) S X=12 D SET1 S LRW("G")=LRT_U_X D ^LRAPSWK
 ;
 I LRCAPA D
 . K LRT S LRT=0 F  S LRT=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRT)) Q:LRT<1  D
 . . Q:$P(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRT,0),U,2)>49
 . . I LRSS="CY" D ^LRAPCWK
 . . I LRSS?1(1"SP",1"EM") D ^LRAPSWK,^LRSPGD
 ;
 Q
SET1 S X=$P($G(^LRO(69.2,LRAA,0)),"^",X) S:'X X=1
 Q
PAGE ;Page Prompt
 Q:$E(IOST,1)'="C"
 S LRPAGE=$G(LRPAGE)+1,LREND=0 Q:LRPAGE<(IOSL-2)
 S DIR(0)="E" D ^DIR K DIR I $G(Y)=0 S LREND=1 Q
 S LRPAGE=2 W @IOF
 Q
 ;
UNLOCK ;
 I $G(LRORD)'="" L -^LRO(69,"C",LRORD)
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLRAPKOE   15978     printed  Sep 23, 2025@19:43:13                                                                                                                                                                                                    Page 2
LRAPKOE   ;DSS/FHS - CRPS AP LAB ORDER ENTRY AND ACCESSION ;Jun 21, 2022@15:03:04
 +1       ;;5.2;LAB SERVICE;**462,479,483,509,553**;Sep 27, 1994;Build 21
 +2       ; Supported calls AI #, 5286,103,3615
EN1       ;
 +1       ; Called from EN^LRAPLG
 +2       ; Process CPRS AP Orders
 +3        NEW ANS,ANSY,CNT,CONTROL,DA,DIC,DIERR,DIR,DIRUT,DOD,DR
 +4        NEW DTOUT,DUOUT,ERR,FDA,FDAIEN,FIL,FLD,GOT,IEN,IENX,II
 +5        NEW LR,LRAA,LRACN,LRACN0,LRAP690,LRAPNT,LRAPSPEC
 +6        NEW LRAPTST,LRC,LRCAPA,LRCAPLOC,LRCHK
 +7        NEW LRCOL,LRCOM,LRC5,LRDFN,LRDISC,LRDIE,LRDOC,LRDPF,LREND,LRFDA
 +8        NEW LRFDAIEN,LRI,LRIDT,LRIEN,LRJ,LRLL,LRLLOC,LRLWC,LRMD,LRMSG
 +9        NEW LRNATURE,LRNLT,LRNODE69,LRNONE,LROD0,LROD1,LROD3,LRODT,LRODT0
 +10       NEW LROESTAT,LROLLOC,LRORD,LRORDRR,LROOS,LRORD,LRORDRR
 +11       NEW LRORIFN,LRORNUM,LRORPOV,LRORTYP,LRORU3,LROS,LROSD,LRPRAC,LRPANEL,LRPHY,LRPL
 +12       NEW LRPROVL,LRRC,LRROD,LRSAMP,LRSD,LRSIT,LRSN,LRSND
 +13       NEW LRSP,LRSPCOM,LRSPEC,LRSS,LRSTATUS,LRSUBBY,LRSUBMIT
 +14       NEW LRSVSN,LRT,LRTM7,LRTSORU,LRTST,LRTSTS,LRUID,LRURG,LRVAL,LRWKCD
 +15       NEW LRWARD,LRWRDS,LRX,LRXX,LRYI,LRZX,M9,NODE,ODT,ORD
 +16       NEW PNM,RET,S,SN,SSN,TMPDIAL,VA,VADM,VAIN
 +17       NEW LREND,LRVAL,LRORPROV,LRSUBBY,X,X3,X4,Y
 +18      ;
 +19       NEW COBR,COBX,IFN,IFN1,LRA,LRACD,LRANC0,LRAU,LRCS,LRD,LRFIRST
 +20       NEW LRO,LRP,LRSEL,LRSF,LRSOP,LRSTATI,LRSVC,LRTNAM
 +21       NEW LRU,LRWARDS,ORBMSG,ORCMSG,SRTN,X10,X5,X6,X7,X9,Z1
 +22       SET LREND=0
 +23       DO CK^LRAP
           IF Y<0
               QUIT 
 +24       NEW X,Y
 +25      ;;*
 +26       SET LRLWC="WC"
 +27      ;;;*
 +28      ; Select peforming laboratory
 +29       IF '$GET(LRPL)
               SET LRPL=DUZ(2)
               SET LRVAL=$$SELPL^LRVERA(DUZ(2))
               if LRVAL<1
                   DO END
               if LRVAL<1
                   QUIT 
               SET LRPL=$SELECT(LRVAL'=DUZ(2):LRVAL,1:DUZ(2))
L5        ;
 +1        if $GET(LREND)
               QUIT 
NEXT      ;from LROE1
 +1       ; needed below - P509 PMK 5/22/17
           NEW LRVIDO,LRVIDOF
           DO VIDEO^LRPARAM
 +2        KILL DIR,LRYI,LRAPTST,GOT,LRAPDIAL,LRNODE69,LRSUBMIT,LRPHY,LRAD,LRAA,LRLLOC,LROLLOC,LRSUBBY,LRORPROV
           DO KVAR^LRX
 +3        IF $DATA(LROESTAT)
               if $PIECE(LRPARAM,U,14)
                   DO ^LRCAPV
               IF $GET(LREND)
                   KILL LRLONG,LRPANEL
                   QUIT 
 +4        SET (LRODT,X,DT)=$$DT^XLFDT()
           SET LRODT0=$$FMTE^XLFDT(DT,5)
 +5        IF '$DATA(^LRO(69,DT,1,0))
               SET ^LRO(69,DT,0)=DT
               SET ^LRO(69,DT,1,0)="^69.01PA^^"
               SET ^LRO(69,"B",DT,DT)=""
 +6        IF $DATA(^LAB(69.9,1,"RO"))
               IF +$HOROLOG'=+$PIECE(^("RO"),U)
                   Begin DoDot:1
 +7                    WRITE $CHAR(7),!,"ROLLOVER ",$SELECT($PIECE(^("RO"),U,2):"IS RUNNING.",1:"HAS NOT RUN.")," ACCESSIONING SHOULDN'T BE DONE NOW.",$CHAR(7),!
 +8                    SET DIR("A")="  Are you sure you want to continue"
                       SET DIR(0)="Y"
                       SET DIR("B")="No"
                   End DoDot:1
 +9        IF $TEST
               DO ^DIR
               if $DATA(DIRUT)
                   DO END
               IF Y'=1
                   WRITE !,"OK, try later."
                   DO EN1
 +10       SET X="T-7"
           SET %DT=""
           DO ^%DT
           SET LRTM7=+Y
 +11       KILL DIC,LRSND,LRSN,LRAPDIAL
 +12       WRITE !!,"Select Order number: "
           READ LRORD:DTIME
           IF LRORD["."!($DATA(LRLONG)&(LRORD=""))
               WRITE !,"Wrong format"
               GOTO EN1
 +13       WRITE @IOF
           SET M9=0
           if LRORD="^"
               GOTO END
           IF LRORD=""
               WRITE !?5,"No Order Number entered use standard Specimen Log-in process",!
               QUIT 
 +14       IF $LENGTH(LRORD)>8
               WRITE !,"The order number entered is too long."
               HANG 1
               GOTO EN1
 +15       if LRORD?.N
               SET LRORD=+LRORD
           IF LRORD'?.N
               DO QMSG
               GOTO EN1
 +16       IF '$DATA(^LRO(69,"C",LRORD))
               WRITE !!?10,LRORD_" Does not exist, select another ",$CHAR(7),!
               GOTO EN1
 +17       LOCK +^LRO(69,"C",LRORD):$GET(DILOCKTM,3)
 +18       IF '$TEST
               WRITE !?5,"Someone else is editing this Order",!!,$CHAR(7)
               GOTO EN1
 +19       SET (LRCHK,LRNONE)=1
           SET (M9,LRODT)=0
 +20       FOR 
               SET LRODT=+$ORDER(^LRO(69,"C",LRORD,LRODT))
               if LRODT<1
                   QUIT 
               Begin DoDot:1
 +21               SET DA=0
                   FOR 
                       SET DA=$ORDER(^LRO(69,"C",LRORD,LRODT,DA))
                       if DA<1
                           QUIT 
                       SET LRCHK=LRCHK-1
                       if LRNONE'=2
                           SET LRNONE=0
                       DO LROE2
               End DoDot:1
 +22       IF $GET(LREND)
               DO UNLOCK
               GOTO EN1
 +23       IF DOD'=""
               SET Y=DOD
               DO DD^LRX
               WRITE !,!,?5,@LRVIDO,"Patient ",PNM," died on: ",Y,@LRVIDOF
               WRITE !
 +24       Begin DoDot:1
 +25           KILL Y
 +26           SET DIR(0)="Y"
 +27           SET DIR("A")="Do you wish to continue with this accession [Yes/No]"
 +28           SET DIR("T")=120
 +29           DO ^DIR
               KILL DIR
           End DoDot:1
           IF Y=0!($DATA(DIRUT))
               KILL DIRUT,DTOUT,DUOUT,Y
               DO KVAR^LRX
               DO UNLOCK
               GOTO EN1
 +30       IF LRNONE=2
               IF LRCHK<1
                   WRITE !,"The order has already been partially accessioned."
                   HANG 1
 +31       IF LRNONE=2
               IF LRCHK>0
                   WRITE !,"The order has already been accessioned."
                   HANG 1
                   DO UNLOCK
                   GOTO NEXT
 +32       IF LRNONE=1
               WRITE !,"No order exists with that number."
               HANG 1
               DO UNLOCK
               GOTO NEXT
 +33       IF '$$GOT(LRORD)
               WRITE !!,"All tests for this order have been canceled.",!
               DO UNLOCK
               GOTO NEXT
 +34       SET LRODT=$ORDER(^LRO(69,"C",LRORD,0))
           SET LRSN=$ORDER(^LRO(69,"C",LRORD,LRODT,0))
 +35       IF $PIECE($GET(^LRO(69,LRODT,1,LRSN,1)),U,4)'=""
               WRITE !?5,"Specimen already processed"
               DO UNLOCK
               DO END
               GOTO EN1
 +36      ; made PATHOLOGIST optional like legacy AP log-in - P509 PMK 5/25/17
 +37       KILL LRPHY
           DO DOC(.LRPHY,"PATHOLOGIST")
           IF $GET(LREND)
               WRITE !,"No Pathologist selected"
               DO UNLOCK
               DO END
               GOTO EN1
 +38       SET (LRPROVL,X)=+LRPHY
           DO D^LRUA
           SET LRPRAC(1)=X
 +39       DO DATE(.LRCDT,"COLLECTION DATE/TIME")
           IF $GET(LRCDT)<1
               DO UNLOCK
               DO END
               GOTO EN1
 +40       SET LRURG=9
           SET LRAD=DT
 +41       SET LRNODE69=^LRO(69,LRODT,1,LRSN,0)
 +42      ;SUBMITTED BY
           SET LRSUBBY=""
           IF $DATA(^LRO(69,LRODT,1,LRSN,12))#2
               SET LRSUBBY=^(12)
 +43       SET LRORNUM=$GET(^LRO(69,LRODT,1,LRSN,.1))
 +44       SET LRSUBMIT=$PIECE(LRNODE69,U,2)
           SET LRSUBMIT=$PIECE(^VA(200,LRSUBMIT,0),U)_U_LRSUBMIT
 +45       SET LRORIFN=$PIECE(LRNODE69,U,11)
           SET LRORTYP=$PIECE(LRNODE69,U,4)
 +46      ;Ordering Provider Optional
           SET LRORPROV=+$PIECE($GET(^LRO(69,LRODT,1,LRSN,11)),U,3)
NEXT2     ;
 +1        SET LRAPSPEC=""
           SET LRI=0
 +2        FOR 
               SET LRI=$ORDER(^LRO(69,LRODT,1,LRSN,4,1,1,LRI))
               if LRI<1
                   QUIT 
               SET LRAPSPEC(LRI)=^(LRI,0)
 +3        SET LRLLOC=$PIECE(LRNODE69,U,7)
           SET LROLLOC=$PIECE(LRNODE69,U,9)
           if LRLLOC=""
               SET LRLLOC="NO ABRV"
 +4        KILL LRCOM
           SET LRCOM=""
 +5        NEW LRYI
           SET LRYI=0
           FOR 
               SET LRYI=$ORDER(^LRO(69,LRODT,1,LRSN,2,1,1,LRYI))
               if LRYI<1
                   QUIT 
               Begin DoDot:1
 +6                SET LRCOM(LRYI)=(^(LRYI,0))
               End DoDot:1
 +7        KILL LRYI
           KILL LRAPDIAL
 +8        FOR LRYI=13,14,15,16
               MERGE LRAPDIAL(".0"_LRYI)=^LRO(69,LRODT,1,LRSN,LRYI)
               KILL LRAPDIAL(".0"_LRYI,0)
 +9        KILL LRYI,LRAPTST,LRTST
 +10       SET (LRAA,LRSS)=""
 +11       SET LRYI=0
           FOR 
               SET LRYI=$ORDER(^LRO(69,LRODT,1,LRSN,2,"B",LRYI))
               if LRYI<1
                   QUIT 
               SET (LRTSORU,LRTST)=LRYI
               SET LRAPTST(LRYI)=""
               Begin DoDot:1
 +12               SET LRWKCD=+$GET(^LAB(60,+LRTST,64))
                   SET LRNLT=$PIECE($GET(^LAM(LRWKCD,0)),"^",2)
                   SET II=1
 +13      ;Get accession area for institution
 +14               SET LRAA=+$PIECE($GET(^LAB(60,LRTST,8,+$GET(LRPL),0)),U,2)
 +15               IF 'LRAA
                       Begin DoDot:2
 +16                       SET LRERR="[ "_$PIECE($GET(^LAB(60,LRTST,0)),U)_"]  DOES NOT HAVE AN APPROPRIATE ACCESSION AREA DEFINED"
 +17                       WRITE !!,$$CJ^XLFSTR(LRERR,IOM)
 +18                       WRITE !,$$CJ^XLFSTR("Log-in Aborted",IOM),!
 +19                       SET LREND=1
                       End DoDot:2
                       QUIT 
 +20               IF LRAA
                       SET LRSS=$PIECE(^LAB(60,LRTST,0),U,4)
 +21               NEW LRI
 +22               SET LRI=$ORDER(^LRO(69,LRODT,1,LRSN,2,"B",LRYI,0))
 +23               SET LRAPTST(LRYI)=$PIECE(^LRO(69,LRODT,1,LRSN,2,LRI,0),U,7)
               End DoDot:1
 +24      ;;;*
 +25       IF $GET(LREND)
               KILL LRERR,LREND
               DO UNLOCK
               DO END
               GOTO EN1
 +26       KILL LRDPF
           DO PT^LRX
 +27       KILL LRYI
           DO KVA^VADPT
 +28       SET LRAPDIAL=1
           SET LRAP690=$GET(LROD0)
           SET LRSTATUS="C"
 +29      ;;*
 +30       SET LROUTINE=9
 +31       SET X=$PIECE(^LRO(68,LRAA,0),U)
           DO ^LRUTL
 +32       SET (Y,LRAD)=DT
           DO LRAD^LRU
 +33      ;;;*
 +34       DO GETLOCK^LRWLST1(LRAA,LRAD)
 +35       DO CHECK68^LRWLST1(LRAA,LRAD)
 +36       if '$DATA(^LRO(68,LRAA,1,LRAD,1,0))
               SET ^LRO(68,LRAA,1,LRAD,1,0)="^68.02PA^"
 +37       SET LRAN=+$PIECE(^LRO(68,LRAA,1,LRAD,1,0),U,3)
 +38       FOR 
               if '$DATA(^LRO(68,LRAA,1,LRAD,1,LRAN))
                   QUIT 
               SET LRAN=LRAN+1
 +39       SET LRAC=$PIECE(^LRO(68,LRAA,0),U,11)_" "_$SELECT(LRAD["0000":$EXTRACT(LRAD,2,3),1:$EXTRACT(LRAD,4,7))_" "_LRAN
 +40       DO CRE863^LRAPLG1
 +41       KILL LRXX
           SET LRXX(LRTST)=""
           DO ORDTST
 +42       DO MOVE(LRDFN,LRSS,LRIDT)
 +43      ;
SET68     ;Setup ^LRO(68,LRAA,1,LRAD,1,LRAN
 +1        IF LRSS'="AU"
               Begin DoDot:1
 +2                KILL LRDIE
                   DO CRE868^LRAPLG1
 +3                SET X=^LR(LRDFN,LRSS,LRI,0)
                   SET LRIDT=LRI
                   SET LRCAPLOC=""
 +4                SET LRSD=$PIECE(X,U)
                   SET LRRC=$PIECE(X,U,10)
                   SET LRACC=$PIECE(X,U,6)
                   SET LRMD(1)=$PIECE(X,U,7)
                   SET LRPRAC=$PIECE(X,U,7)
                   SET LRSIT=$PIECE(X,U,5)
                   SET LRCS=$PIECE(X,U,11)
                   SET LRLLOC=$PIECE(X,U,8)
                   SET LRC(5)=""
 +5                KILL LRDIE
                   DO EN^LRUWLF
               End DoDot:1
 +6        DO UPD68
 +7        LOCK -^LRO(68,LRAA,1,LRAD,1,0)
 +8        DO UNLOCK
 +9        QUIT 
 +10      ;
MOVE(LRDFN,LRSS,LRI) ;Move CPRS AP Dialog to ^LR(LRDFN,LRSS,LRI)
 +1       ;Check to see if Surgery Package Dialog is available
 +2        DO ^LRAPKLG
 +3       ;
 +4        NEW ANS,X,Y,ERR,IEN,FDA,FIL,LRX
 +5        SET FIL=63.08
           SET FLD=.013
 +6        SET IEN=LRI_","_LRDFN_","
 +7        if LRSS="SP"
               SET FIL=63.08
 +8        if LRSS="CY"
               SET FIL=63.09
 +9        if LRSS="EM"
               SET FIL=63.02
 +10       SET LRX=0
           FOR 
               SET LRX=$ORDER(LRAPDIAL(LRX))
               if LRX=""
                   QUIT 
               Begin DoDot:1
 +11               KILL ERR
                   DO WP^DIE(FIL,IEN,LRX,"A","LRAPDIAL("_LRX_")","ERR")
               End DoDot:1
 +12       QUIT 
 +13      ;
ORDTST    ; Ordered test
 +1        NEW XX
 +2        SET LRWKCD=+$GET(^LAB(60,+$GET(LRTST),64))
           SET LRNLT=$PIECE($GET(^LAM(LRWKCD,0)),"^",2)
           SET II=1
 +3        SET XX=0
 +4        FOR 
               SET XX=$ORDER(LRXX(XX))
               if 'XX
                   QUIT 
               SET $PIECE(LRXX(XX),"^",2)=LRNLT_"^"_+LRTST
 +5        QUIT 
 +6       ;
LROE2     ;
 +1        SET LREND=0
           IF '$DATA(^LRO(69,LRODT,1,DA,0))
               QUIT 
 +2        NEW IEN,FLD,FIL,ANS
 +3        SET FIL=69.01
           SET FLD=13
           SET IEN=DA_","_LRODT_","
 +4        SET ANS=$$GET1^DIQ(FIL,IEN,13,,"ANS","ERR")
 +5        IF $LENGTH(ANS)
               Begin DoDot:1
 +6                WRITE !,$$CJ^XLFSTR("The order# "_LRORD_" has been "_ANS,IOM),!
 +7                WRITE $$CJ^XLFSTR("Select another order",IOM),!
 +8                SET LREND=1
               End DoDot:1
               QUIT 
 +9        IF $DATA(^LRO(69,LRODT,1,DA,1))
               Begin DoDot:1
 +10               IF $PIECE(^LRO(69,LRODT,1,DA,1),U,4)="C"
                       SET LRNONE=2
                       SET LRCHK=LRCHK+1
                       QUIT 
 +11               IF $PIECE(^LRO(69,LRODT,1,DA,0),U,4)="LC"
                       IF $PIECE(^LRO(69,LRODT,1,DA,1),U,4)=""
                           SET LRNONE=2
                           SET LRCHK=LRCHK+1
               End DoDot:1
 +12      ;
 +13       KILL LRSN
 +14       SET (LRSN,LRSN(DA))=+DA
           SET LREND=0
 +15       IF '$DATA(^LRO(69,LRODT,1,LRSN,0))
               QUIT 
 +16       IF '$ORDER(^LRO(69,LRODT,1,LRSN,13,0))
               WRITE !?5,"No AP Dialog for this order"
               SET LREND=1
               QUIT 
 +17       SET M9=$GET(M9)+1
           SET LRZX=^LRO(69,LRODT,1,LRSN,0)
           SET LRDFN=+LRZX
           SET LRDPF=$PIECE(^LR(LRDFN,0),U,2)
           SET DFN=$PIECE(^(0),U,3)
 +18       DO PT^LRX
 +19       IF $GET(VA("MRN"))]""
               Begin DoDot:1
 +20               WRITE !,PNM,?30,$GET(VA("MRN",0))_": "_SSN
 +21               WRITE !,?30,"DOB: "_$PIECE($GET(VADM(3)),U,2)
                   SET LRWRDS=LRWRD
               End DoDot:1
 +22      IF '$TEST
               WRITE !,PNM,?30,SSN
               SET LRWRDS=LRWRD
 +23       WRITE ?45,"Requesting location: ",$PIECE(LRZX,U,7)
           SET Y=$PIECE(LRZX,U,5)
           DO DD^LRX
           WRITE !,"Date/Time Ordered: ",Y,?45,"By: ",$SELECT($DATA(^VA(200,+$PIECE(LRZX,U,2),0)):$PIECE(^(0),U),1:"")
 +24       SET LRSVSN=LRSN
           DO ORDER^LROS
           SET LRSN=LRSVSN
 +25       QUIT 
 +26      ;
 +27      ;
QMSG       WRITE !,"Enter the order entry number assigned when the test was ordered."
 +1        if '$DATA(LRLONG)
               WRITE !,"If the test has not been ordered, type the RETURN key to exit."
 +2        WRITE !,"To exit, type the ""^"" key and RETURN key."
 +3        QUIT 
 +4       ;
 +5       ;
END        KILL DIR,DIRUT,GOT
 +1        DO ^LRORDK
           DO LROEND^LRORDK
           DO STOP^LRCAPV
           DO CLEAN
           DO KVAR^LRX
 +2        SET LREND=1
 +3        QUIT 
 +4       ;
 +5       ;
GOT(ORD)  ;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       ;
UPD68     ; Update #68 with required test data
 +1        NEW LRFILE,ERR,IEN,LRI,LRIEN,LRCNT
 +2        SET LRFILE=68.04
           SET IEN(1)=LRTST
 +3        SET LRIEN="?+1,"_LRAN_","_LRAD_","_LRAA_","
 +4        SET FDA(3,LRFILE,LRIEN,.01)=LRTST
 +5        SET FDA(3,LRFILE,LRIEN,1)=LROUTINE
 +6        SET FDA(3,LRFILE,LRIEN,8.1)=LRTST
 +7        DO UPDATE^DIE("","FDA(3)","IEN","ERR(3)")
 +8       ;
 +9       ;
SPEC68    ; Update #68 with specimen data
 +1        SET (LRI,LRCNT)=0
           FOR 
               SET LRI=$ORDER(LRAPSPEC(LRI))
               if LRI<1
                   QUIT 
               Begin DoDot:1
 +2                KILL LRFILE,FDAIEN,IEN
 +3                SET LRFILE=68.05
                   SET LRCNT=LRCNT+1
 +4                SET LRSPEC=$PIECE(LRAPSPEC(LRI),U,6)
 +5                SET LRSAMP=$PIECE(LRAPSPEC(LRI),U,7)
 +6                SET FDAIEN="?+"_LRCNT_","_LRAN_","_LRAD_","_LRAA_","
 +7                SET FDA(31,LRFILE,FDAIEN,.01)=LRSPEC
 +8                SET FDA(31,LRFILE,FDAIEN,1)=LRSAMP
 +9                DO UPDATE^DIE("","FDA(31)","IEN","LRERR(31)")
               End DoDot:1
 +10      ;
 +11       SET LRCAPA=$PIECE(^LAB(69.9,1,0),"^",14)&($PIECE(^LRO(68,LRAA,0),"^",16))
 +12      ; Stuff workload data into accession.
           IF $GET(LRCAPA)
               DO WKLD
 +13      ;
 +14      ;;Update CPRS to active status
           DO LR7OB1
 +15      ;
 +16      ;Update ^LRO(69 with accession data.
           DO LR7OFAO
 +17      ;
 +18      ;Load AP Specimens into ^LR(
           DO SPEC63(LRDFN,LRSS,LRIDT,.LRAPSPEC)
 +19      ;
 +20      ; Store comments into ^LR(
           DO LRCOM(LRDFN,LRSS,LRIDT,.LRCOM)
 +21      ;
 +22      ;Populate the ^LR(LRDFN,LRSS,LRIDT,"ORU" with UID
           DO SLRSS^LRWLST11
 +23      ;
 +24      ;Populate the ^LR(LRDFN,LRSS,LRIDT,"ORUT" with test data
           DO ORUT^LRWLST11
 +25      ;
 +26      ; Display ^LR(LRDFN,LRSS,LRIDT) data.
           DO DIS63(LRDFN,LRSS,LRIDT)
 +27      ;
 +28       WRITE !,$$CJ^XLFSTR("****  Enter Next Order ****",IOM),!
 +29       QUIT 
DOC(RET,LABEL) ; Return provider
 +1       ;IN = RET by reference
 +2       ;     Label is the prompt the user will see
 +3       ;OUT = LREND=1 if user fails to answer the prompt correctly
 +4       ;      RET = +y
 +5       ;      RET(0) = IEN^.01 FIELD
 +6        NEW DIR,X,Y,DIRUT,DTOUT,DUOUT
 +7       ; made PATHOLOGIST optional like legacy AP log-in - P509 PMK 5/25/17
 +8       ; PATHOLOGIST is optional
           SET DIR(0)="PO^200:EQMF"
           SET LREND=0
 +9        SET DIR("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U)))"
 +10       SET DIR("A")=LABEL
 +11       DO ^DIR
 +12       IF $GET(DIRUT)
               IF ((Y["^")!(Y=""))
                   SET LREND=1
                   QUIT 
 +13       IF Y=-1
               SET Y=""
 +14       SET RET=+Y
           SET RET(0)=Y
 +15       QUIT 
DATE(RET,LABEL) ;
 +1       ;
 +2       ;IN = RET by reference
 +3       ;     Label is the prompt the user will see
 +4       ;OUT = LREND=1 if user fails to answer the prompt correctly
 +5       ;      RET = Y
 +6        NEW DIR,X,Y,DIRUT,DTOUT,DUOUT
 +7        SET LREND=0
           SET DIR("A")=LABEL
           SET DIR("?")="Date can not be in the future"
 +8        SET DIR(0)="D^:-NOW:EXT"
 +9        DO ^DIR
 +10       IF Y<1
               SET LREND=1
 +11       SET RET=Y
 +12       QUIT 
DA(Y)     ; Returns date in eye-readable month format
 +1        QUIT $$FMTE^XLFDT(Y,"M")
 +2        QUIT 
LR7OB1    ;Update CPRS to active status
 +1        KILL DIERR,IEN,LRFDA,ERR
 +2        KILL ERR
 +3        SET LRORD=+$GET(^LRO(69,LRODT,1,LRSN,.1))
 +4        SET IEN=LRSN_","_LRODT_","
 +5        IF '$GET(^LRO(69,LRODT,1,LRSN,1))
               Begin DoDot:1
 +6                SET LRFDA(1,69.01,IEN,10)=+$GET(LRCDT,$$NOW^XLFDT)
 +7                SET LRFDA(1,69.01,IEN,12)=DUZ
 +8                SET LRFDA(1,69.01,IEN,13)="C"
 +9                IF $GET(LRPL)
                       SET LRFDA(1,69.01,IEN,25)=+$GET(LRPL)
 +10               SET LRFDA(1,69.01,IEN,20)=LRNT
 +11               DO UPDATE^DIE("KS","LRFDA(1)","IEN","ERR")
               End DoDot:1
 +12      ;DD 69.01,13 is incorrect
           KILL ^LRO(69,"AA",LRODT_"|"_LRSN)
 +13       SET ^LRO(69,"AA",LRORD,LRODT_"|"_LRSN)=""
 +14      ;Update status in OR(100,
 +15       SET LRORIFN=+$PIECE($GET(^LRO(69,LRODT,1,LRSN,2,1,0)),"^",7)
           Begin DoDot:1
 +16           SET CONTROL=$SELECT($GET(LRORIFN):"SC",1:"SN")
 +17           DO NEW^LR7OB1(LRODT,LRSN,CONTROL,,,6)
           End DoDot:1
 +18       QUIT 
LR7OFAO   ;Update ^LRO(69 with accession data.
 +1       ;
 +2        KILL IEN,LRFDA,LRFDAIEN,LRMSG,DIERR
 +3        SET IEN="?+1,"_LRSN_","_LRODT_","
 +4        SET LRFDA(6,69.03,IEN,.01)=LRTST
 +5        IF $GET(LROUTINE)
               SET LRFDA(6,69.03,IEN,1)=LROUTINE
 +6        SET LRFDA(6,69.03,IEN,2)=LRAD
 +7        SET LRFDA(6,69.03,IEN,3)=LRAA
 +8        SET LRFDA(6,69.03,IEN,4)=LRAN
 +9        SET LRFDA(6,69.03,IEN,13)=LRUID
 +10       SET LRFDA(6,69.03,IEN,8)="IP"
 +11       SET LRFDA(6,69.03,IEN,9)="L"
 +12       DO UPDATE^DIE("","LRFDA(6)","LRFDAIEN","LRMSG")
 +13       QUIT 
DIS63(LRDFN,LRSS,LRIDT) ;Display ^LR(LRDFN,LRSS,LRIDT data
 +1        if '$GET(^LR(LRDFN,LRSS,LRIDT,0))
               QUIT 
 +2        WRITE @IOF,!!,$$CJ^XLFSTR("-------------------------------------",IOM),!
 +3        WRITE $$CJ^XLFSTR("Display of CPRS data in LAB DATA file",IOM),!
 +4        NEW ANS,DIC,DA,DR,ERR,CNT,ID,IEN,LREND,LRFILE,LRPAGE,S
 +5        SET DA=LRIDT
           SET DA(1)=LRDFN
           SET LREND=0
 +6        SET DIC="^LR("_LRDFN_","_""""_LRSS_""""_","
           SET DR=0
           SET S=1
 +7        DO EN^DIQ
           SET LRPAGE=S
 +8        SET LRFILE=$SELECT(LRSS="SP":63.08,LRSS="CY":63.09,LRSS="EM":63.02,1:0)
 +9        SET IEN=DA_","_DA(1)_","
 +10       DO GETS^DIQ(LRFILE,IEN,".01:16","ERRZ","ANS","ERR")
 +11       FOR ID="BRIEF CLINICAL HISTORY","PREOPERATIVE DIAGNOSIS","OPERATIVE FINDINGS","POSTOPERATIVE DIAGNOSIS"
               if $GET(LREND)
                   QUIT 
               Begin DoDot:1
 +12               IF $ORDER(ANS(LRFILE,IEN,ID,0))
                       WRITE !?5,ID_":"
                       DO PAGE
                       if $GET(LREND)
                           QUIT 
                       Begin DoDot:2
 +13                       SET CNT=0
                           FOR 
                               SET CNT=$ORDER(ANS(LRFILE,IEN,ID,CNT))
                               if CNT<1!($GET(LREND))
                                   QUIT 
                               Begin DoDot:3
 +14                               WRITE !,ANS(LRFILE,IEN,ID,CNT,0)
                                   DO PAGE
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +15       if '$GET(LREND)
               WRITE !!,$$CJ^XLFSTR("--- End of CPRS data in LAB DATA file ---",IOM),!
 +16      ;
 +17      ; VistA Imaging changes - P509 PMK 5/10/17
 +18      ; add case to file #2005.42
           IF $TEXT(ADD^MAGTP005)'=""
               DO ADD^MAGTP005(LRAC)
 +19      ; LRI is used in MAGT7MA instead of LRIDT
           NEW LRI
           SET LRI=LRIDT
 +20      ; invoke Imaging HL7 routine
           IF $TEXT(NEW^MAGT7MA)'=""
               DO NEW^MAGT7MA
 +21       QUIT 
 +22      ;
SPEC63(LRDFN,LRSS,LRIDT,LRAPSPEC) ;Load AP Specimens into ^LR(
 +1       ; INPUT  LRAPSPEC(1)="CERVICAL CYTOLOGIC MATERIAL,Thin Prep^^^^^6242^55"
 +2       ;
 +3        KILL LRFDA,IEN,IENX,ERR,ERR2,WPIEN68,NODE,ANS,ANSY,LRSP,LRCOL
 +4        KILL LRJ,NODE,LRFILE,LRSPCOM,LRSPEC,LRSAMP
 +5       ;
 +6        if LRSS="AU"!(LRSS="BB")
               QUIT 
 +7        SET LRFILE=$SELECT(LRSS="SP":63.812,LRSS="CY":63.902,LRSS="EM":63.202,1:0)
 +8        SET IEN="+1,"_LRIDT_","_LRDFN_","
 +9        if '$GET(IENX)
               SET IENX=0
           FOR 
               SET IENX=$ORDER(LRAPSPEC(IENX))
               if IENX<1
                   QUIT 
               Begin DoDot:1
 +10               SET NODE=LRAPSPEC(IENX)
                   SET LRSPCOM=$PIECE(NODE,U)
                   SET LRSPEC=+$PIECE(NODE,U,6)
                   SET LRSAMP=$PIECE(NODE,U,7)
 +11               if $SELECT('LRSPEC
                       QUIT 
 +12               KILL LRFDA,ERR,ANSY
 +13      ;Specimen Description
                   SET LRFDA(2,LRFILE,IEN,.01)=LRSPCOM
 +14      ;Specimen  ^LAB(61,LRSP
                   SET LRFDA(2,LRFILE,IEN,.06)=LRSPEC
 +15      ; Collection Sample ^LAB(62,LRCOL
                   SET LRFDA(2,LRFILE,IEN,.07)=LRSAMP
 +16               DO UPDATE^DIE("KS","LRFDA(2)","ANSY(1)","ERR")
               End DoDot:1
 +17       QUIT 
LRCOM(LRDFN,LRSS,LRIDT,LRCOM) ;Store Comments into ^LR(
 +1       ;IN   LRCOM(1)="~For Test: GYNECOLOGY"
 +2        KILL LRFILE,LRFDA,IEN,CNT
 +3        SET LRFILE=$SELECT(LRSS="CH":63.041,LRSS="MI":63.05,LRSS="SP":63.98,LRSS="CY":63.908,LRSS="EM":63.208,1:"")
 +4        if 'LRFILE
               QUIT 
 +5        SET IEN="+1,"_LRIDT_","_LRDFN_","
           SET CNT=0
 +6        FOR 
               SET CNT=$ORDER(LRCOM(CNT))
               if CNT<1
                   QUIT 
               Begin DoDot:1
 +7                KILL LRFDA,ERR
 +8                SET LRFDA(9,LRFILE,IEN,.01)=LRCOM(CNT)
 +9                DO UPDATE^DIE("KS","LRFDA(9)","","ERR")
               End DoDot:1
 +10       QUIT 
CLEAN     ;Kill variable
 +1        QUIT 
WKLD      ;Setup workload info
 +1       ;
 +2        NEW LR,LRI,LRK,LRRC,LRT,LRW
 +3        SET LRI=LRIDT
 +4        SET LRRC=$SELECT($GET(LRCDT):LRCDT,1:$$NOW^XLFDT)
 +5        SET LRCAPA=$PIECE(^LAB(69.9,1,0),"^",14)&($PIECE(^LRO(68,LRAA,0),"^",16))
 +6       ;
 +7        SET LR("L")=LRSS_"^LRAP"
           IF LRCAPA
               IF "AUSP"[LRSS
                   SET X=$SELECT(LRSS="SP":"H & E STAIN",1:"AUTOPSY H & E")
                   DO X^LRUWK
                   IF $DATA(X)
                       SET LRW("H&E")=LRT
                       DO ^LRAPSWK
 +8       ;
 +9        IF LRCAPA
               IF LRSS="EM"
                   SET X="THICK SECTION EM"
                   DO X^LRUWK
                   IF $DATA(X)
                       SET X=11
                       DO SET1
                       SET LRW("SS")=LRT_U_X
                       SET X="GRID EM"
                       DO X^LRUWK
                       IF $DATA(X)
                           SET X=12
                           DO SET1
                           SET LRW("G")=LRT_U_X
                           DO ^LRAPSWK
 +10      ;
 +11       IF LRCAPA
               Begin DoDot:1
 +12               KILL LRT
                   SET LRT=0
                   FOR 
                       SET LRT=$ORDER(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRT))
                       if LRT<1
                           QUIT 
                       Begin DoDot:2
 +13                       if $PIECE(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRT,0),U,2)>49
                               QUIT 
 +14                       IF LRSS="CY"
                               DO ^LRAPCWK
 +15                       IF LRSS?1(1"SP",1"EM")
                               DO ^LRAPSWK
                               DO ^LRSPGD
                       End DoDot:2
               End DoDot:1
 +16      ;
 +17       QUIT 
SET1       SET X=$PIECE($GET(^LRO(69.2,LRAA,0)),"^",X)
           if 'X
               SET X=1
 +1        QUIT 
PAGE      ;Page Prompt
 +1        if $EXTRACT(IOST,1)'="C"
               QUIT 
 +2        SET LRPAGE=$GET(LRPAGE)+1
           SET LREND=0
           if LRPAGE<(IOSL-2)
               QUIT 
 +3        SET DIR(0)="E"
           DO ^DIR
           KILL DIR
           IF $GET(Y)=0
               SET LREND=1
               QUIT 
 +4        SET LRPAGE=2
           WRITE @IOF
 +5        QUIT 
 +6       ;
UNLOCK    ;
 +1        IF $GET(LRORD)'=""
               LOCK -^LRO(69,"C",LRORD)
 +2        QUIT