LRAPRES1 ;DALOI/STAFF - AP ESIG RELEASE REPORT/ALERT ;Jul 06, 2020@18:52
;;5.2;LAB SERVICE;**259,336,369,365,397,413,350,462,482,540**;Sep 27, 1994;Build 4
;
; Reference to FILE^TIUSRVP supported by ICR #3540
; Reference to ^TIULQ supported by ICR #2693
; Reference to LAB^ORB3LAB supported by ICR #4287
; Reference to ^XUSEC supported by ICR #10076
; Reference to GET^XUA4A72 supported by ICR #1625
;
MAIN(LRDFN,LRSS,LRI,LRSF,LRP,LRAC) ;Main subroutine
Q:'$D(LRDFN)!('$D(LRSS))!('$D(LRP))!('$D(LRAC))
;
N DIR,DIRUT,DTOUT,DUOUT,LRDOCS,LRMSG,LRC,LRNUM,LRADL,LRMORE,LRQUIT,LRXQA,X,Y,DIC,XQA,XQAMSG
;
S LRQUIT=0
;
; CPRS alerts only sent for "patients" related to PATIENT file (#2)
I $P($G(^LR(LRDFN,0)),"^",2)'=2 Q
;
D DOCS,MORE
I LRMORE D LOOKUP
D ALERT
;;*
LR7OB1 ;Update CPRS package reference and status of complete
D
. Q:LRSS="AU" ;Do not update CPRS for Autopsy - AU does not update CPRS
. NEW LRX,LR
. S LRX=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,0))
. Q:'$G(LRX)
. S LR(4)=$P(LRX,U,4),LR(5)=$P(LRX,U,5)
. Q:$S('LR(4):1,'LR(5):1,1:0)
. D NEW^LR7OB1(LR(4),LR(5),"RE",,+LRT)
;;;*
Q
;
;
DOCS ; Get ordering provider and PCP/attending to send alert
N LRNUM,LRMSG
S:$G(LRSF)="" LRSF=63
D GETDOCS^LRAPUTL(.LRDOCS,LRDFN,LRSS,$G(LRI),LRSF)
S (LRNUM,LRQUIT)=1,LRC=0
F S LRC=$O(LRDOCS(LRC)) Q:LRC<1 D
. I $D(LRXQA(+LRDOCS(LRC))) S LRXQA(+LRDOCS(LRC))=LRXQA(+LRDOCS(LRC))_"/"_$P(LRDOCS(LRC),"^",3) Q
. S LRXQA(+LRDOCS(LRC))=$P(LRDOCS(LRC),"^",3),LRQUIT=0
;
I 'LRQUIT D
. S LRC=0,LRMSG(LRNUM)="Mandatory Alert will be sent to: ",LRMSG(LRNUM,"F")="!!"
. F S LRC=$O(LRDOCS(LRC)) Q:LRC<1 D
. . S LRNUM=LRNUM+1,LRMSG(LRNUM)=$P(LRDOCS(LRC),"^",2)_" ["_$P(LRDOCS(LRC),"^",3)_"]"
. . S LRMSG(LRNUM,"F")=$S(LRNUM>2:"!",1:"")_"?33"
I LRQUIT S LRMSG(LRNUM)="No Ordering Provider or PCP selected for alert",LRMSG(LRNUM,"F")="!!",LRQUIT=0
D EN^DDIOL(.LRMSG)
Q
;
;
MORE ; Add names or mail groups to the lookup list?
N DIR,DIRUT,DTOUT,DUOUT,X,Y
W !
S LRMORE=1
S DIR(0)="Y"
S DIR("A")="Send the alert to additional recipients and/or mail groups"
S X=$$GET^XPAR("USR^DIV^PKG","LRAPRES1 AP ALERT",1,"Q")
S DIR("B")=$S(X=1:"YES",1:"NO")
S DIR("?")="^D AHELP^LRAPRES1"
D ^DIR
I Y=0 S LRMORE=0 Q
I $D(DUOUT)!($D(DTOUT)) S LRQUIT=1
Q
;
;
LOOKUP ; Add additional names or mail groups to alert list.
N DIC,DIR,DIRUT,DTOUT,DUOUT,LRADL,LRDELETE,X,Y
S LRQUIT=0
F D Q:LRQUIT
. W !
. K DIR
. S LRDELETE=0
. S DIR(0)="FO^3:30^I X["".""&(X'?1""G."".E) K X"
. S DIR("A")="Enter name or mail group"
. S DIR("?",1)="Prefix selection with '-' to delete a recipient"
. S DIR("?",2)="Enter lastname,firstname OR G.mailgroup OR ^ to exit"
. S DIR("?")="Enter '??' for additional help and listing of currently selected recipients."
. S DIR("??")="^D AHELP2^LRAPRES1"
. S DIR("PRE")="I '$D(DTOUT),$E(X)=""-"" S X=$E(X,2,9999),LRDELETE=1"
. D ^DIR
. I $D(DIRUT) S LRQUIT=1 Q
. S LRADL="",Y=$$UP^XLFSTR(Y)
. I Y["." S LRADL=$P(Y,"."),X=$P(Y,".",2)
. K DIC
. S DIC(0)="QEZ"
. S DIC=$S(LRADL="G":3.8,1:200)
. D ^DIC
. Q:Y=-1
. I LRDELETE D
. . I LRADL="" K XQA($P(Y,"^")) Q
. . I LRADL="G" K XQA("G."_$P(Y,"^",2))
. E D
. . I LRADL="",'$D(XQA($P(Y,"^"))) S XQA($P(Y,"^"))="Additional User" Q
. . I LRADL="G" S XQA("G."_$P(Y,"^",2))="Additional Mail Group"
. K LRMSG
. S LRMSG=$S(LRADL="G":"Mail group ",1:"User ")_$P(Y,"^",2)_$S(LRDELETE:" deleted from",1:" added to")_" alert list."
. D EN^DDIOL(LRMSG,"","!!")
Q
;
;
ALERT ; Send the alert
;
M XQA=LRXQA
I '$D(XQA) D EN^DDIOL("Alerts NOT sent - no alert recipients identified!","","!!") Q
;
D LAB^ORB3LAB(DFN,LRDFN,LRI,$G(LRA),LRSS,.XQA)
;
D EN^DDIOL("Alerts have been sent.","","!!")
Q
;
;
AHELP ; Help Frame
N LRI,LRJ,LRMSG
S LRMSG(1)="Enter either 'Y' or 'N'."
S LRMSG(2)="If answered 'Yes', you will also have the opportunity to send alerts",LRMSG(2,"F")="!!"
S LRMSG(3)="to additional recipients and/or mail groups."
S LRMSG(4)="A mandatory alert is sent to the ordering provider/surgeon and the primary care",LRMSG(4,"F")="!!"
S LRMSG(5)="provider/attending that this report has been electronically signed and is now"
S LRMSG(6)="available for viewing."
S LRJ=6
D CHELP
Q
;
AHELP2 ; Help frame entry point for additional recipients selection
;
N LRI,LRJ,LRMSG
S LRMSG(1)="A mandatory alert is sent to the ordering provider/surgeon and the primary care",LRMSG(4,"F")="!!"
S LRMSG(2)="provider/attending that this report has been electronically signed and is now"
S LRMSG(3)="available for viewing."
S LRJ=3
D CHELP
Q
;
;
CHELP ; Display common help
;
I '$D(LRXQA) S LRJ=LRJ+1,LRMSG(LRJ)="No mandatory recipients listed",LRMSG(LRJ,"F")="!!"
E D
. S LRI=0,LRJ=LRJ+1,LRMSG(LRJ)="The current mandatory recipients will be:",LRMSG(LRJ,"F")="!!"
. F S LRI=$O(LRXQA(LRI)) Q:LRI<1 S LRJ=LRJ+1,LRMSG(LRJ)=$$NAME^XUSER(LRI,"F")_" ["_LRXQA(LRI)_"]"
;
I '$D(XQA) S LRJ=LRJ+1,LRMSG(LRJ)="No additional recipients listed",LRMSG(LRJ,"F")="!!"
E D
. S LRI="",LRJ=LRJ+1,LRMSG(LRJ)="The current additional recipients will be:",LRMSG(LRJ,"F")="!!"
. F S LRI=$O(XQA(LRI)) Q:LRI="" S LRJ=LRJ+1,LRMSG(LRJ)=$S(LRI:$$NAME^XUSER(LRI,"F"),1:LRI)_" ["_XQA(LRI)_"]"
;
D EN^DDIOL(.LRMSG)
Q
;
;
RETRACT(LRDFN,LRSS,LRI,LRTIUPTR) ;
; Change prior TIU versions of report to RETRACTED status
N LRROOT,LRIENS,LRFILE,LRTIUP,LRTIUAR,LRERR,LRSTAT,LRTIUX,LREXRR
I LRSS=""!("AUSPEMCY"'[LRSS) S LRPTR=0 Q
I LRSS="AU" D
. S LRROOT="^LR(LRDFN,101,""C""",LRIENS=LRDFN_","
. S LRFILE=63.101
I LRSS'="AU" D
. S LRROOT="^LR(LRDFN,LRSS,LRI,.05,""C"""
. S LRIENS=LRI_","_LRDFN_","
. S LRFILE=$S(LRSS="SP":63.19,LRSS="CY":63.47,LRSS="EM":63.49,1:"")
Q:'$D(@(LRROOT_")"))
S LRTIUP=0,LRTIUX(.05)=15
F S LRTIUP=$O(@(LRROOT_",LRTIUP)")) Q:LRTIUP'>0!(LRTIUP=LRTIUPTR) D
. K LRTIUAR S (LRSTAT,LRERR)=0
. D EXTRACT^TIULQ(LRTIUP,"LRTIUAR",.LRERR,".05",,,"I")
. Q:+LRERR
. M LRSTAT=LRTIUAR(LRTIUP,.05,"I")
. Q:LRSTAT'=7 ;Quit if current status is not COMPLETED
. D FILE^TIUSRVP(.LREXRR,LRTIUP,.LRTIUX)
. ; Update new TIU version of report with previous TIU pointer value
. N LREXRR,LRTIUX
. S LRTIUX(1406)=LRTIUP
. D FILE^TIUSRVP(.LREXRR,LRTIUPTR,.LRTIUX)
Q
;
;
CLSSCHK(DUZ,LREND) ; Determine if user has the proper class settings and PROVIDER key
;
N LRMSG,LRPRCLSS,LRPCEXP,LRVCDE,LRPCSTR,LRMTCH
; First, check for PROVIDER key
I '$D(^XUSEC("PROVIDER",DUZ)) D Q
. D EN^DDIOL($C(7)_"Electronic signature not authorized. Missing PROVIDER key.","","!!")
. S LREND=1
; Next, check the provider class
; PROVIDER CL must contain PHYSICIAN, or CYTOTECH only for CY section
; or DENTIST for ORAL AND MAXILLOFACIAL PATHOLOGY
S LRPRCLSS=$$GET1^DIQ(200,DUZ_",",53.5)
S LRMTCH=0
I LRPRCLSS'["PHYSICIAN",LRPRCLSS'["DENTIST" D
. I LRPRCLSS'["CYTOTECH" S LRMTCH=1
. I LRSS'="CY" S LRMTCH=1
I LRMTCH=1 D Q
. N LRMSG
. S LRMSG(1)=$C(7)_"You are not authorized to electronically sign reports.",LRMSG(1,"F")="!!"
. S LRMSG(2)="PROVIDER CLASS must include PHYSICIAN,"
. S LRMSG(3)=" or CYTOTECHNOLOGIST for CY SECTIONS ONLY,"
. S LRMSG(4)=" or DENTIST for ORAL AND MAXILLOFACIAL PATHOLOGY."
. D EN^DDIOL(.LRMSG)
. S LREND=1
;
; Finally, check the person class
S LRPCSTR=$$GET^XUA4A72(DUZ)
I LRPCSTR<0 D Q
. D EN^DDIOL("PERSON CLASS is inactive or undefined. Electronic signature is not authorized.","","!!")
. S LREND=1
S LRPCEXP=+$P(LRPCSTR,"^",6)
I LRPCEXP,LRPCEXP<DT D Q
. D EN^DDIOL("PERSON CLASS has expired. Electronic signature is not authorized.","","!!")
. S LREND=1
S LRVCDE=$P(LRPCSTR,"^",7),LRMTCH=0
;
; Correct PERSON Class should match PROVIDER Class
I LRPRCLSS["PHYSICIAN" D
. I $E(LRVCDE,1,6)="V11370","123568"[+$E(LRVCDE,7) S LRMTCH=1 Q
. I $E(LRVCDE,1,6)="V11371","03"[+$E(LRVCDE,7) S LRMTCH=1 Q
. I $E(LRVCDE,1,6)="V18240","124579"[+$E(LRVCDE,7) S LRMTCH=1 Q
. I LRVCDE="V182413" S LRMTCH=1
. ;LR*5.2*540: add MOHS person class
. I LRVCDE="V180504" S LRMTCH=1
;
I LRPRCLSS["CYTOTECH",LRVCDE="V150113" S LRMTCH=1
I LRPRCLSS["DENTIST",LRVCDE="V030503" S LRMTCH=1
;
I 'LRMTCH D
. D EN^DDIOL("Invalid PERSON CLASS. Electronic Signature is not authorized.","","!!")
. S LREND=1
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLRAPRES1 8396 printed Oct 16, 2024@18:08:56 Page 2
LRAPRES1 ;DALOI/STAFF - AP ESIG RELEASE REPORT/ALERT ;Jul 06, 2020@18:52
+1 ;;5.2;LAB SERVICE;**259,336,369,365,397,413,350,462,482,540**;Sep 27, 1994;Build 4
+2 ;
+3 ; Reference to FILE^TIUSRVP supported by ICR #3540
+4 ; Reference to ^TIULQ supported by ICR #2693
+5 ; Reference to LAB^ORB3LAB supported by ICR #4287
+6 ; Reference to ^XUSEC supported by ICR #10076
+7 ; Reference to GET^XUA4A72 supported by ICR #1625
+8 ;
MAIN(LRDFN,LRSS,LRI,LRSF,LRP,LRAC) ;Main subroutine
+1 if '$DATA(LRDFN)!('$DATA(LRSS))!('$DATA(LRP))!('$DATA(LRAC))
QUIT
+2 ;
+3 NEW DIR,DIRUT,DTOUT,DUOUT,LRDOCS,LRMSG,LRC,LRNUM,LRADL,LRMORE,LRQUIT,LRXQA,X,Y,DIC,XQA,XQAMSG
+4 ;
+5 SET LRQUIT=0
+6 ;
+7 ; CPRS alerts only sent for "patients" related to PATIENT file (#2)
+8 IF $PIECE($GET(^LR(LRDFN,0)),"^",2)'=2
QUIT
+9 ;
+10 DO DOCS
DO MORE
+11 IF LRMORE
DO LOOKUP
+12 DO ALERT
+13 ;;*
LR7OB1 ;Update CPRS package reference and status of complete
+1 Begin DoDot:1
+2 ;Do not update CPRS for Autopsy - AU does not update CPRS
if LRSS="AU"
QUIT
+3 NEW LRX,LR
+4 SET LRX=$GET(^LRO(68,LRAA,1,LRAD,1,LRAN,0))
+5 if '$GET(LRX)
QUIT
+6 SET LR(4)=$PIECE(LRX,U,4)
SET LR(5)=$PIECE(LRX,U,5)
+7 if $SELECT('LR(4)
QUIT
+8 DO NEW^LR7OB1(LR(4),LR(5),"RE",,+LRT)
End DoDot:1
+9 ;;;*
+10 QUIT
+11 ;
+12 ;
DOCS ; Get ordering provider and PCP/attending to send alert
+1 NEW LRNUM,LRMSG
+2 if $GET(LRSF)=""
SET LRSF=63
+3 DO GETDOCS^LRAPUTL(.LRDOCS,LRDFN,LRSS,$GET(LRI),LRSF)
+4 SET (LRNUM,LRQUIT)=1
SET LRC=0
+5 FOR
SET LRC=$ORDER(LRDOCS(LRC))
if LRC<1
QUIT
Begin DoDot:1
+6 IF $DATA(LRXQA(+LRDOCS(LRC)))
SET LRXQA(+LRDOCS(LRC))=LRXQA(+LRDOCS(LRC))_"/"_$PIECE(LRDOCS(LRC),"^",3)
QUIT
+7 SET LRXQA(+LRDOCS(LRC))=$PIECE(LRDOCS(LRC),"^",3)
SET LRQUIT=0
End DoDot:1
+8 ;
+9 IF 'LRQUIT
Begin DoDot:1
+10 SET LRC=0
SET LRMSG(LRNUM)="Mandatory Alert will be sent to: "
SET LRMSG(LRNUM,"F")="!!"
+11 FOR
SET LRC=$ORDER(LRDOCS(LRC))
if LRC<1
QUIT
Begin DoDot:2
+12 SET LRNUM=LRNUM+1
SET LRMSG(LRNUM)=$PIECE(LRDOCS(LRC),"^",2)_" ["_$PIECE(LRDOCS(LRC),"^",3)_"]"
+13 SET LRMSG(LRNUM,"F")=$SELECT(LRNUM>2:"!",1:"")_"?33"
End DoDot:2
End DoDot:1
+14 IF LRQUIT
SET LRMSG(LRNUM)="No Ordering Provider or PCP selected for alert"
SET LRMSG(LRNUM,"F")="!!"
SET LRQUIT=0
+15 DO EN^DDIOL(.LRMSG)
+16 QUIT
+17 ;
+18 ;
MORE ; Add names or mail groups to the lookup list?
+1 NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
+2 WRITE !
+3 SET LRMORE=1
+4 SET DIR(0)="Y"
+5 SET DIR("A")="Send the alert to additional recipients and/or mail groups"
+6 SET X=$$GET^XPAR("USR^DIV^PKG","LRAPRES1 AP ALERT",1,"Q")
+7 SET DIR("B")=$SELECT(X=1:"YES",1:"NO")
+8 SET DIR("?")="^D AHELP^LRAPRES1"
+9 DO ^DIR
+10 IF Y=0
SET LRMORE=0
QUIT
+11 IF $DATA(DUOUT)!($DATA(DTOUT))
SET LRQUIT=1
+12 QUIT
+13 ;
+14 ;
LOOKUP ; Add additional names or mail groups to alert list.
+1 NEW DIC,DIR,DIRUT,DTOUT,DUOUT,LRADL,LRDELETE,X,Y
+2 SET LRQUIT=0
+3 FOR
Begin DoDot:1
+4 WRITE !
+5 KILL DIR
+6 SET LRDELETE=0
+7 SET DIR(0)="FO^3:30^I X["".""&(X'?1""G."".E) K X"
+8 SET DIR("A")="Enter name or mail group"
+9 SET DIR("?",1)="Prefix selection with '-' to delete a recipient"
+10 SET DIR("?",2)="Enter lastname,firstname OR G.mailgroup OR ^ to exit"
+11 SET DIR("?")="Enter '??' for additional help and listing of currently selected recipients."
+12 SET DIR("??")="^D AHELP2^LRAPRES1"
+13 SET DIR("PRE")="I '$D(DTOUT),$E(X)=""-"" S X=$E(X,2,9999),LRDELETE=1"
+14 DO ^DIR
+15 IF $DATA(DIRUT)
SET LRQUIT=1
QUIT
+16 SET LRADL=""
SET Y=$$UP^XLFSTR(Y)
+17 IF Y["."
SET LRADL=$PIECE(Y,".")
SET X=$PIECE(Y,".",2)
+18 KILL DIC
+19 SET DIC(0)="QEZ"
+20 SET DIC=$SELECT(LRADL="G":3.8,1:200)
+21 DO ^DIC
+22 if Y=-1
QUIT
+23 IF LRDELETE
Begin DoDot:2
+24 IF LRADL=""
KILL XQA($PIECE(Y,"^"))
QUIT
+25 IF LRADL="G"
KILL XQA("G."_$PIECE(Y,"^",2))
End DoDot:2
+26 IF '$TEST
Begin DoDot:2
+27 IF LRADL=""
IF '$DATA(XQA($PIECE(Y,"^")))
SET XQA($PIECE(Y,"^"))="Additional User"
QUIT
+28 IF LRADL="G"
SET XQA("G."_$PIECE(Y,"^",2))="Additional Mail Group"
End DoDot:2
+29 KILL LRMSG
+30 SET LRMSG=$SELECT(LRADL="G":"Mail group ",1:"User ")_$PIECE(Y,"^",2)_$SELECT(LRDELETE:" deleted from",1:" added to")_" alert list."
+31 DO EN^DDIOL(LRMSG,"","!!")
End DoDot:1
if LRQUIT
QUIT
+32 QUIT
+33 ;
+34 ;
ALERT ; Send the alert
+1 ;
+2 MERGE XQA=LRXQA
+3 IF '$DATA(XQA)
DO EN^DDIOL("Alerts NOT sent - no alert recipients identified!","","!!")
QUIT
+4 ;
+5 DO LAB^ORB3LAB(DFN,LRDFN,LRI,$GET(LRA),LRSS,.XQA)
+6 ;
+7 DO EN^DDIOL("Alerts have been sent.","","!!")
+8 QUIT
+9 ;
+10 ;
AHELP ; Help Frame
+1 NEW LRI,LRJ,LRMSG
+2 SET LRMSG(1)="Enter either 'Y' or 'N'."
+3 SET LRMSG(2)="If answered 'Yes', you will also have the opportunity to send alerts"
SET LRMSG(2,"F")="!!"
+4 SET LRMSG(3)="to additional recipients and/or mail groups."
+5 SET LRMSG(4)="A mandatory alert is sent to the ordering provider/surgeon and the primary care"
SET LRMSG(4,"F")="!!"
+6 SET LRMSG(5)="provider/attending that this report has been electronically signed and is now"
+7 SET LRMSG(6)="available for viewing."
+8 SET LRJ=6
+9 DO CHELP
+10 QUIT
+11 ;
AHELP2 ; Help frame entry point for additional recipients selection
+1 ;
+2 NEW LRI,LRJ,LRMSG
+3 SET LRMSG(1)="A mandatory alert is sent to the ordering provider/surgeon and the primary care"
SET LRMSG(4,"F")="!!"
+4 SET LRMSG(2)="provider/attending that this report has been electronically signed and is now"
+5 SET LRMSG(3)="available for viewing."
+6 SET LRJ=3
+7 DO CHELP
+8 QUIT
+9 ;
+10 ;
CHELP ; Display common help
+1 ;
+2 IF '$DATA(LRXQA)
SET LRJ=LRJ+1
SET LRMSG(LRJ)="No mandatory recipients listed"
SET LRMSG(LRJ,"F")="!!"
+3 IF '$TEST
Begin DoDot:1
+4 SET LRI=0
SET LRJ=LRJ+1
SET LRMSG(LRJ)="The current mandatory recipients will be:"
SET LRMSG(LRJ,"F")="!!"
+5 FOR
SET LRI=$ORDER(LRXQA(LRI))
if LRI<1
QUIT
SET LRJ=LRJ+1
SET LRMSG(LRJ)=$$NAME^XUSER(LRI,"F")_" ["_LRXQA(LRI)_"]"
End DoDot:1
+6 ;
+7 IF '$DATA(XQA)
SET LRJ=LRJ+1
SET LRMSG(LRJ)="No additional recipients listed"
SET LRMSG(LRJ,"F")="!!"
+8 IF '$TEST
Begin DoDot:1
+9 SET LRI=""
SET LRJ=LRJ+1
SET LRMSG(LRJ)="The current additional recipients will be:"
SET LRMSG(LRJ,"F")="!!"
+10 FOR
SET LRI=$ORDER(XQA(LRI))
if LRI=""
QUIT
SET LRJ=LRJ+1
SET LRMSG(LRJ)=$SELECT(LRI:$$NAME^XUSER(LRI,"F"),1:LRI)_" ["_XQA(LRI)_"]"
End DoDot:1
+11 ;
+12 DO EN^DDIOL(.LRMSG)
+13 QUIT
+14 ;
+15 ;
RETRACT(LRDFN,LRSS,LRI,LRTIUPTR) ;
+1 ; Change prior TIU versions of report to RETRACTED status
+2 NEW LRROOT,LRIENS,LRFILE,LRTIUP,LRTIUAR,LRERR,LRSTAT,LRTIUX,LREXRR
+3 IF LRSS=""!("AUSPEMCY"'[LRSS)
SET LRPTR=0
QUIT
+4 IF LRSS="AU"
Begin DoDot:1
+5 SET LRROOT="^LR(LRDFN,101,""C"""
SET LRIENS=LRDFN_","
+6 SET LRFILE=63.101
End DoDot:1
+7 IF LRSS'="AU"
Begin DoDot:1
+8 SET LRROOT="^LR(LRDFN,LRSS,LRI,.05,""C"""
+9 SET LRIENS=LRI_","_LRDFN_","
+10 SET LRFILE=$SELECT(LRSS="SP":63.19,LRSS="CY":63.47,LRSS="EM":63.49,1:"")
End DoDot:1
+11 if '$DATA(@(LRROOT_")"))
QUIT
+12 SET LRTIUP=0
SET LRTIUX(.05)=15
+13 FOR
SET LRTIUP=$ORDER(@(LRROOT_",LRTIUP)"))
if LRTIUP'>0!(LRTIUP=LRTIUPTR)
QUIT
Begin DoDot:1
+14 KILL LRTIUAR
SET (LRSTAT,LRERR)=0
+15 DO EXTRACT^TIULQ(LRTIUP,"LRTIUAR",.LRERR,".05",,,"I")
+16 if +LRERR
QUIT
+17 MERGE LRSTAT=LRTIUAR(LRTIUP,.05,"I")
+18 ;Quit if current status is not COMPLETED
if LRSTAT'=7
QUIT
+19 DO FILE^TIUSRVP(.LREXRR,LRTIUP,.LRTIUX)
+20 ; Update new TIU version of report with previous TIU pointer value
+21 NEW LREXRR,LRTIUX
+22 SET LRTIUX(1406)=LRTIUP
+23 DO FILE^TIUSRVP(.LREXRR,LRTIUPTR,.LRTIUX)
End DoDot:1
+24 QUIT
+25 ;
+26 ;
CLSSCHK(DUZ,LREND) ; Determine if user has the proper class settings and PROVIDER key
+1 ;
+2 NEW LRMSG,LRPRCLSS,LRPCEXP,LRVCDE,LRPCSTR,LRMTCH
+3 ; First, check for PROVIDER key
+4 IF '$DATA(^XUSEC("PROVIDER",DUZ))
Begin DoDot:1
+5 DO EN^DDIOL($CHAR(7)_"Electronic signature not authorized. Missing PROVIDER key.","","!!")
+6 SET LREND=1
End DoDot:1
QUIT
+7 ; Next, check the provider class
+8 ; PROVIDER CL must contain PHYSICIAN, or CYTOTECH only for CY section
+9 ; or DENTIST for ORAL AND MAXILLOFACIAL PATHOLOGY
+10 SET LRPRCLSS=$$GET1^DIQ(200,DUZ_",",53.5)
+11 SET LRMTCH=0
+12 IF LRPRCLSS'["PHYSICIAN"
IF LRPRCLSS'["DENTIST"
Begin DoDot:1
+13 IF LRPRCLSS'["CYTOTECH"
SET LRMTCH=1
+14 IF LRSS'="CY"
SET LRMTCH=1
End DoDot:1
+15 IF LRMTCH=1
Begin DoDot:1
+16 NEW LRMSG
+17 SET LRMSG(1)=$CHAR(7)_"You are not authorized to electronically sign reports."
SET LRMSG(1,"F")="!!"
+18 SET LRMSG(2)="PROVIDER CLASS must include PHYSICIAN,"
+19 SET LRMSG(3)=" or CYTOTECHNOLOGIST for CY SECTIONS ONLY,"
+20 SET LRMSG(4)=" or DENTIST for ORAL AND MAXILLOFACIAL PATHOLOGY."
+21 DO EN^DDIOL(.LRMSG)
+22 SET LREND=1
End DoDot:1
QUIT
+23 ;
+24 ; Finally, check the person class
+25 SET LRPCSTR=$$GET^XUA4A72(DUZ)
+26 IF LRPCSTR<0
Begin DoDot:1
+27 DO EN^DDIOL("PERSON CLASS is inactive or undefined. Electronic signature is not authorized.","","!!")
+28 SET LREND=1
End DoDot:1
QUIT
+29 SET LRPCEXP=+$PIECE(LRPCSTR,"^",6)
+30 IF LRPCEXP
IF LRPCEXP<DT
Begin DoDot:1
+31 DO EN^DDIOL("PERSON CLASS has expired. Electronic signature is not authorized.","","!!")
+32 SET LREND=1
End DoDot:1
QUIT
+33 SET LRVCDE=$PIECE(LRPCSTR,"^",7)
SET LRMTCH=0
+34 ;
+35 ; Correct PERSON Class should match PROVIDER Class
+36 IF LRPRCLSS["PHYSICIAN"
Begin DoDot:1
+37 IF $EXTRACT(LRVCDE,1,6)="V11370"
IF "123568"[+$EXTRACT(LRVCDE,7)
SET LRMTCH=1
QUIT
+38 IF $EXTRACT(LRVCDE,1,6)="V11371"
IF "03"[+$EXTRACT(LRVCDE,7)
SET LRMTCH=1
QUIT
+39 IF $EXTRACT(LRVCDE,1,6)="V18240"
IF "124579"[+$EXTRACT(LRVCDE,7)
SET LRMTCH=1
QUIT
+40 IF LRVCDE="V182413"
SET LRMTCH=1
+41 ;LR*5.2*540: add MOHS person class
+42 IF LRVCDE="V180504"
SET LRMTCH=1
End DoDot:1
+43 ;
+44 IF LRPRCLSS["CYTOTECH"
IF LRVCDE="V150113"
SET LRMTCH=1
+45 IF LRPRCLSS["DENTIST"
IF LRVCDE="V030503"
SET LRMTCH=1
+46 ;
+47 IF 'LRMTCH
Begin DoDot:1
+48 DO EN^DDIOL("Invalid PERSON CLASS. Electronic Signature is not authorized.","","!!")
+49 SET LREND=1
End DoDot:1
+50 QUIT