YSCLSRV3 ;DALOI/RLM,HEC/hrubovcak - Clozapine data server ;16 Oct 2019 19:31:54
;;5.01;MENTAL HEALTH;**74,90,92,154**;Dec 30, 1994;Build 48
; Reference to ^%ZOSF supported by IA #10096
; Reference to ^DPT supported by IA #10035
; Reference to ^PS(55 supported by IA #787
; Reference to ^PSDRUG supported by IA #25
; Reference to ^PSRX supported by IA #780
; Reference to ^VA(200 supported by IA #10060
; Reference to ^XUSEC supported by IA #10076
;
D DT^DICRW
K ^TMP($J,"YSCLXMSG"),^TMP($J,"YSRXPTLST") ; message text & patient list
D ADD2TXT^YSCLSERV("This is a list of all active Clozapine prescriptions.")
D ADD2TXT^YSCLSERV("An asterisk in the first column indicates that the prescription is over")
D ADD2TXT^YSCLSERV("28 days old. The second column is the Patient Name. The third is the")
D ADD2TXT^YSCLSERV("Issue Date. The fourth column is the Prescription Number. The final")
D ADD2TXT^YSCLSERV("column is the CLOZAPINE STATUS indicator.")
;
N C,DFN,DRUGIEN,RXPTR,X,YSLN,YSPT,YSRX,YSV
S YSV("t-28")=$$HTFM^XLFDT($H-28) ; 28 days ago
; ^PS(55,D0,P,D1,0)= (#.01) PRESCRIPTION PROFILE [1P:52]
; loop through CLOZAPINE REGISTRATION NUMBER cross-ref
S DFN=0 F S DFN=$O(^PS(55,"ASAND",DFN)) Q:'DFN I $D(^DPT(DFN,0)),$D(^PS(55,DFN,"SAND")) D
. K YSPT S YSPT(55,"SAND")=$G(^PS(55,DFN,"SAND")) S YSPT(0)=$G(^DPT(DFN,0))
. S RXPTR=0 F S RXPTR=$O(^PS(55,DFN,"P",RXPTR)) Q:'RXPTR K DRUGIEN,YSRX S YSRX=+$G(^PS(55,DFN,"P",RXPTR,0)) I YSRX>0,$D(^PSRX(YSRX,0)) D:'$$RXACTV(YSRX)
.. S YSRX(0)=$G(^PSRX(YSRX,0)),DRUGIEN=+$P(YSRX(0),U,6) Q:'($P($G(^PSDRUG(DRUGIEN,"CLOZ1")),U)="PSOCLO1") ; (#17.5) MONITOR ROUTINE [1F]
.. Q:'$D(^PSDRUG(DRUGIEN,"CLOZ")) ; (#17.2) LAB TEST MONITOR [1P:60]
.. S YSLN=$S(YSV("t-28")>$P(YSRX(0),U,13):"*",1:" ")_U_$P(^DPT($P(YSRX(0),U,2),0),U)_U_$$FMTE^XLFDT($P(YSRX(0),U,13))_U_$P(YSRX(0),U)_U_$P(YSPT(55,"SAND"),U,2)
.. S X=$P(YSPT(0),U)_U_DFN,C=$G(^TMP($J,"YSRXPTLST",X,0))+1,^TMP($J,"YSRXPTLST",X,0)=C,^TMP($J,"YSRXPTLST",X,C)=YSLN ; sort by "patient name^DFN"
; add sorted patient list to the message
S X="" F S X=$O(^TMP($J,"YSRXPTLST",X)) Q:X="" S C=0 F S C=$O(^TMP($J,"YSRXPTLST",X,C)) Q:'C D ADD2TXT^YSCLSERV(^TMP($J,"YSRXPTLST",X,C))
K ^TMP($J,"YSRXPTLST")
G EXIT^YSCLSERV
;
RXACTV(YSRXIEN) ; (#100) STATUS [1S], '0' FOR ACTIVE;
N YSFMERR
Q $$GET1^DIQ(52,YSRXIEN_",",100,"I","YSFMERR")
;
DEMOG ;
S YSCLA=0 F S YSCLA=$O(^YSCL(603.01,"C",YSCLA)) Q:'YSCLA D
. I $D(^PS(55,YSCLA,"SAND")),$P(^PS(55,YSCLA,"SAND"),"^",4)=0 S YSCLC=$G(YSCLC)+1
. I $D(^PS(55,YSCLA,"SAND")),$P(^PS(55,YSCLA,"SAND"),"^",4) S $P(^PS(55,YSCLA,"SAND"),"^",4)=0,YSCLB=$G(YSCLB)+1
D ADD2TXT^YSCLSERV(+$G(YSCLB)_" record"_$S(+$G(YSCLB)=1:"",1:"s")_" reset at ("_YSCLST_") "_YSCLSTN)
D ADD2TXT^YSCLSERV(+$G(YSCLC)_" record"_$S(+$G(YSCLC)=1:"",1:"s")_" not reset at ("_YSCLST_") "_YSCLSTN)
G EXIT^YSCLSERV
Q
LOCK ;Lock out ability to dispense Clozapine
X XMREC Q:XMER<0 S X=XMRG
I X="LOCK DOWN ON" S $P(^YSCL(603.03,1,1),"^",1)=1 D ADD2TXT^YSCLSERV("Clozapine dispensing prohibited at "_YSCLST)
I X="LOCK DOWN OFF" S $P(^YSCL(603.03,1,1),"^",1)=0 D ADD2TXT^YSCLSERV("Clozapine dispensing enabled at "_YSCLST)
G EXIT^YSCLSERV
Q
AUTH ;List authorized Clozapine providers
I YSCLSUB["LIST" D G EXIT^YSCLSERV
. D ADD2TXT^YSCLSERV("The following providers are authorized to override Clozapine lockouts (PSOLOCKCLOZ)")
. S YSCLLN=2
. S YSCLA="" F S YSCLA=$O(^XUSEC("PSOLOCKCLOZ",YSCLA)) Q:YSCLA="" D
. . Q:'$D(^VA(200,YSCLA,0))
. . D ADD2TXT^YSCLSERV($P(^VA(200,YSCLA,0),"^",1)_" "_$S($P(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
. D ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" ") ; 3 blank lines
. D ADD2TXT^YSCLSERV("The following providers are authorized to access the Pharmacy Clozapine Manager Menu (PSZ CLOZAPINE)")
. S YSCLA="" F S YSCLA=$O(^XUSEC("PSZ CLOZAPINE",YSCLA)) Q:YSCLA="" D
. . Q:'$D(^VA(200,YSCLA,0))
. . D ADD2TXT^YSCLSERV($P(^VA(200,YSCLA,0),"^",1)_" "_$S($P(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
. D ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" ") ; 3 blank lines
. D ADD2TXT^YSCLSERV("The following providers are authorized to prescribe Clozapine (YSCL AUTHORIZED)")
. S YSCLA=0 F S YSCLA=$O(^XUSEC("YSCL AUTHORIZED",YSCLA)) Q:'YSCLA D ;??? Use FileMan lookup on 200
. . S YSCLDEA=$$DEA^XUSER(1,YSCLA),YSCLYN=1,YSPT("ssn")=$P(^VA(200,YSCLA,1),"^",9)
. . D ADD2TXT^YSCLSERV($P($G(^VA(200,YSCLA,0)),"^",1)_" - "_YSPT("ssn")_" - "_$S(YSCLDEA="":"*NONE*",1:YSCLDEA)_" - "_$S(YSCLYN=1:"Yes",1:"NO"))
;Holders of YSCL AUTHORIZED key
;
;
D ADD2TXT^YSCLSERV("Clinician Authorization Results at "_YSCLST)
K ^TMP("DIERR",$J)
F X XMREC Q:XMER<0 S X=XMRG X ^%ZOSF("UPPERCASE") S X=Y D
. S YSPT("ssn")=$P(X,"^",1),YSCLDEA=$P(X,"^",2),YSCLYN=$P(X,"^",3),YSCLDUZ="",YSCLDEA1="",YSCLIEN=""
. I YSCLLN=""!("YESNO"'[YSCLYN) D ADD2TXT^YSCLSERV("Clinician Authorization instructions invalid ("_YSCLYN_") at "_YSCLST)
. S YSCLYN=$S(YSCLYN="YES":1,1:0)
. I '$D(^VA(200,"BS5",YSPT("ssn"))) D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") does not exist at "_YSCLST) Q
. I $D(^VA(200,"BS5",YSPT("ssn"))) S YSCLAA="" F S YSCLAA=$O(^VA(200,"BS5",YSPT("ssn"),YSCLAA)) Q:YSCLAA="" I $$DEA^XUSER(1,YSCLAA)=YSCLDEA S YSCLDUZ=YSCLAA Q
. I YSCLDUZ="" D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") with DEA# "_YSCLDEA_" does not exist at "_YSCLST) Q
. S YSCLDEA1=$$DEA^XUSER(1,YSCLDUZ)
. I YSCLDEA1="" D ADD2TXT^YSCLSERV("Clinician with DEA# "_YSCLDEA_" does not exist at "_YSCLST) Q
. I YSCLDEA'=YSCLDEA1 D ADD2TXT^YSCLSERV("Clinician SSN ("_YSPT("ssn")_") - DEA ("_YSCLDEA_") mismatch at "_YSCLST) Q
. D OWNSKEY^XUSRB(.RET,"YSCL AUTHORIZED",YSCLDUZ)
. I RET(0),YSCLYN D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") already authorized at "_YSCLST) Q
. I 'RET(0),'YSCLYN D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") not authorized at "_YSCLST) Q
. I 'RET(0),YSCLYN S YSCLDUZ(0)=DUZ,DUZ(0)="@" D S DUZ(0)=YSCLDUZ(0)
. . S YSCLFDA(200,"?1,",.01)="`"_YSCLDUZ
. . S YSCLFDA(200.051,"+2,?1,",.01)="YSCL AUTHORIZED" D UPDATE^DIE("E","YSCLFDA",,"YSCLERR")
. . I $D(YSCLERR) D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization failed at "_YSCLST) Q
. . I '$D(YSCLERR) D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization set to "_$S(YSCLYN=1:"Yes",1:"No")_" at "_YSCLST) Q
. I RET(0),'YSCLYN S YSCLDUZ(0)=DUZ,DUZ(0)="@" D S DUZ(0)=YSCLDUZ(0)
. . S DA=$$FIND1^DIC(200.051,","_YSCLDUZ_",","A","YSCL AUTHORIZE")
. . I DA<1 D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removal failed at "_YSCLST) Q
. . S DA(1)=YSCLDUZ,DIK="^VA(200,"_DA(1)_",51," D ^DIK
. . D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removed at "_YSCLST) Q
G EXIT^YSCLSERV
Q
;
LKUP ; lookup patients in file #603.01
K ^TMP($J,"YSCLXMSG") ; message text
N X,YSFMERR,YSFMRSLT,YSPT,YSXMINST,YSXMY,YSXMZ
S X=$$SITE^VASITE
D ADD2TXT^YSCLSERV("Site "_$P(X,U,2)_" ("_$P(X,U,3)_") inquiry to file #603.01"),ADD2TXT^YSCLSERV(" ")
F X XMREC Q:XMER<0 D:XMRG]"" ; process list of SSNs
. K YSFMERR,YSPT,YSFMRSLT
. S YSPT("ssn")=$TR(XMRG," -","") ; strip spaces and hyphens
. I '(YSPT("ssn")?9N) D ADD2TXT^YSCLSERV("Error: "_XMRG_" is not a valid SSN."),ADD2TXT^YSCLSERV(" ") Q
. D LIST^DIC(2,,".01;.09",,,,YSPT("ssn"),"SSN",,,"YSFMRSLT","YSFMERR")
. S YSPT("name")=$G(YSFMRSLT("DILIST","ID",1,.01))
. I '$L(YSPT("name")) D Q
.. D ADD2TXT^YSCLSERV("Error: SSN "_YSPT("ssn")_" not found in the PATIENT file (#2)"),ADD2TXT^YSCLSERV(" ")
. K YSFMERR,YSFMRSLT
. D LIST^DIC(603.01,,".01E;1E;2E;3E",,,,YSPT("name"),"C",,,"YSFMRSLT","YSFMERR")
. I '$G(YSFMRSLT("DILIST",2,1)) D Q
.. D ADD2TXT^YSCLSERV("SSN "_YSPT("ssn")_" not found in file #603.01"),ADD2TXT^YSCLSERV(" ")
. ; put each entry in the message
. N FLD,YSIEN
. S YSIEN=0 F S YSIEN=$O(YSFMRSLT("DILIST","ID",YSIEN)) Q:'YSIEN D
.. D ADD2TXT^YSCLSERV("IEN in file #603.01: "_YSFMRSLT("DILIST",2,YSIEN)_" for SSN "_YSPT("ssn"))
.. ; send only fields with data
.. S FLD=0 F S FLD=$O(YSFMRSLT("DILIST","ID",YSIEN,FLD)) Q:'FLD D:$L(YSFMRSLT("DILIST","ID",YSIEN,FLD))
... N YSERR,YSLBL
... D FIELD^DID(603.01,FLD,"N","LABEL","YSLBL","YSERR") Q:'$L($G(YSLBL("LABEL")))
... D ADD2TXT^YSCLSERV(YSLBL("LABEL")_": "_YSFMRSLT("DILIST","ID",YSIEN,FLD))
.. ; blank line after each entry
.. D ADD2TXT^YSCLSERV(" ")
; done with lookups
D ADD2TXT^YSCLSERV($J("* END OF REPORT *",35))
S X=$$GET1^DIQ(603.03,1,3,"I") ; debug?
S YSXMSUB=$S(X:"DEBUG ",1:"")_"NCCC PATIENT LOOKUP "_$$FMTE^XLFDT($$NOW^XLFDT)
S X=$$GET1^DIQ(8989.3,1,501,"I") ; production?
S:X YSXMY("G.CLOZAPINE ROLL-UP@DOMAIN.EXT")=""
S:'X YSXMY("G.CLOZAPINE ROLL-UP")=""
S YSXMINST("FROM")="CLOZAPINE SERVER"
; Mail the report
D SENDMSG^XMXAPI(DUZ,YSXMSUB,$NA(^TMP($J,"YSCLXMSG")),.YSXMY,.YSXMINST,.YSXMZ)
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYSCLSRV3 9030 printed Sep 15, 2024@21:37:56 Page 2
YSCLSRV3 ;DALOI/RLM,HEC/hrubovcak - Clozapine data server ;16 Oct 2019 19:31:54
+1 ;;5.01;MENTAL HEALTH;**74,90,92,154**;Dec 30, 1994;Build 48
+2 ; Reference to ^%ZOSF supported by IA #10096
+3 ; Reference to ^DPT supported by IA #10035
+4 ; Reference to ^PS(55 supported by IA #787
+5 ; Reference to ^PSDRUG supported by IA #25
+6 ; Reference to ^PSRX supported by IA #780
+7 ; Reference to ^VA(200 supported by IA #10060
+8 ; Reference to ^XUSEC supported by IA #10076
+9 ;
+10 DO DT^DICRW
+11 ; message text & patient list
KILL ^TMP($JOB,"YSCLXMSG"),^TMP($JOB,"YSRXPTLST")
+12 DO ADD2TXT^YSCLSERV("This is a list of all active Clozapine prescriptions.")
+13 DO ADD2TXT^YSCLSERV("An asterisk in the first column indicates that the prescription is over")
+14 DO ADD2TXT^YSCLSERV("28 days old. The second column is the Patient Name. The third is the")
+15 DO ADD2TXT^YSCLSERV("Issue Date. The fourth column is the Prescription Number. The final")
+16 DO ADD2TXT^YSCLSERV("column is the CLOZAPINE STATUS indicator.")
+17 ;
+18 NEW C,DFN,DRUGIEN,RXPTR,X,YSLN,YSPT,YSRX,YSV
+19 ; 28 days ago
SET YSV("t-28")=$$HTFM^XLFDT($HOROLOG-28)
+20 ; ^PS(55,D0,P,D1,0)= (#.01) PRESCRIPTION PROFILE [1P:52]
+21 ; loop through CLOZAPINE REGISTRATION NUMBER cross-ref
+22 SET DFN=0
FOR
SET DFN=$ORDER(^PS(55,"ASAND",DFN))
if 'DFN
QUIT
IF $DATA(^DPT(DFN,0))
IF $DATA(^PS(55,DFN,"SAND"))
Begin DoDot:1
+23 KILL YSPT
SET YSPT(55,"SAND")=$GET(^PS(55,DFN,"SAND"))
SET YSPT(0)=$GET(^DPT(DFN,0))
+24 SET RXPTR=0
FOR
SET RXPTR=$ORDER(^PS(55,DFN,"P",RXPTR))
if 'RXPTR
QUIT
KILL DRUGIEN,YSRX
SET YSRX=+$GET(^PS(55,DFN,"P",RXPTR,0))
IF YSRX>0
IF $DATA(^PSRX(YSRX,0))
if '$$RXACTV(YSRX)
Begin DoDot:2
+25 ; (#17.5) MONITOR ROUTINE [1F]
SET YSRX(0)=$GET(^PSRX(YSRX,0))
SET DRUGIEN=+$PIECE(YSRX(0),U,6)
if '($PIECE($GET(^PSDRUG(DRUGIEN,"CLOZ1")),U)="PSOCLO1")
QUIT
+26 ; (#17.2) LAB TEST MONITOR [1P:60]
if '$DATA(^PSDRUG(DRUGIEN,"CLOZ"))
QUIT
+27 SET YSLN=$SELECT(YSV("t-28")>$PIECE(YSRX(0),U,13):"*",1:" ")_U_$PIECE(^DPT($PIECE(YSRX(0),U,2),0),U)_U_$$FMTE^XLFDT($PIECE(YSRX(0),U,13))_U_$PIECE(YSRX(0),U)_U_$PIECE(YSPT(55,"SAND"),U,2)
+28 ; sort by "patient name^DFN"
SET X=$PIECE(YSPT(0),U)_U_DFN
SET C=$GET(^TMP($JOB,"YSRXPTLST",X,0))+1
SET ^TMP($JOB,"YSRXPTLST",X,0)=C
SET ^TMP($JOB,"YSRXPTLST",X,C)=YSLN
End DoDot:2
End DoDot:1
+29 ; add sorted patient list to the message
+30 SET X=""
FOR
SET X=$ORDER(^TMP($JOB,"YSRXPTLST",X))
if X=""
QUIT
SET C=0
FOR
SET C=$ORDER(^TMP($JOB,"YSRXPTLST",X,C))
if 'C
QUIT
DO ADD2TXT^YSCLSERV(^TMP($JOB,"YSRXPTLST",X,C))
+31 KILL ^TMP($JOB,"YSRXPTLST")
+32 GOTO EXIT^YSCLSERV
+33 ;
RXACTV(YSRXIEN) ; (#100) STATUS [1S], '0' FOR ACTIVE;
+1 NEW YSFMERR
+2 QUIT $$GET1^DIQ(52,YSRXIEN_",",100,"I","YSFMERR")
+3 ;
DEMOG ;
+1 SET YSCLA=0
FOR
SET YSCLA=$ORDER(^YSCL(603.01,"C",YSCLA))
if 'YSCLA
QUIT
Begin DoDot:1
+2 IF $DATA(^PS(55,YSCLA,"SAND"))
IF $PIECE(^PS(55,YSCLA,"SAND"),"^",4)=0
SET YSCLC=$GET(YSCLC)+1
+3 IF $DATA(^PS(55,YSCLA,"SAND"))
IF $PIECE(^PS(55,YSCLA,"SAND"),"^",4)
SET $PIECE(^PS(55,YSCLA,"SAND"),"^",4)=0
SET YSCLB=$GET(YSCLB)+1
End DoDot:1
+4 DO ADD2TXT^YSCLSERV(+$GET(YSCLB)_" record"_$SELECT(+$GET(YSCLB)=1:"",1:"s")_" reset at ("_YSCLST_") "_YSCLSTN)
+5 DO ADD2TXT^YSCLSERV(+$GET(YSCLC)_" record"_$SELECT(+$GET(YSCLC)=1:"",1:"s")_" not reset at ("_YSCLST_") "_YSCLSTN)
+6 GOTO EXIT^YSCLSERV
+7 QUIT
LOCK ;Lock out ability to dispense Clozapine
+1 XECUTE XMREC
if XMER<0
QUIT
SET X=XMRG
+2 IF X="LOCK DOWN ON"
SET $PIECE(^YSCL(603.03,1,1),"^",1)=1
DO ADD2TXT^YSCLSERV("Clozapine dispensing prohibited at "_YSCLST)
+3 IF X="LOCK DOWN OFF"
SET $PIECE(^YSCL(603.03,1,1),"^",1)=0
DO ADD2TXT^YSCLSERV("Clozapine dispensing enabled at "_YSCLST)
+4 GOTO EXIT^YSCLSERV
+5 QUIT
AUTH ;List authorized Clozapine providers
+1 IF YSCLSUB["LIST"
Begin DoDot:1
+2 DO ADD2TXT^YSCLSERV("The following providers are authorized to override Clozapine lockouts (PSOLOCKCLOZ)")
+3 SET YSCLLN=2
+4 SET YSCLA=""
FOR
SET YSCLA=$ORDER(^XUSEC("PSOLOCKCLOZ",YSCLA))
if YSCLA=""
QUIT
Begin DoDot:2
+5 if '$DATA(^VA(200,YSCLA,0))
QUIT
+6 DO ADD2TXT^YSCLSERV($PIECE(^VA(200,YSCLA,0),"^",1)_" "_$SELECT($PIECE(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
End DoDot:2
+7 ; 3 blank lines
DO ADD2TXT^YSCLSERV(" ")
DO ADD2TXT^YSCLSERV(" ")
DO ADD2TXT^YSCLSERV(" ")
+8 DO ADD2TXT^YSCLSERV("The following providers are authorized to access the Pharmacy Clozapine Manager Menu (PSZ CLOZAPINE)")
+9 SET YSCLA=""
FOR
SET YSCLA=$ORDER(^XUSEC("PSZ CLOZAPINE",YSCLA))
if YSCLA=""
QUIT
Begin DoDot:2
+10 if '$DATA(^VA(200,YSCLA,0))
QUIT
+11 DO ADD2TXT^YSCLSERV($PIECE(^VA(200,YSCLA,0),"^",1)_" "_$SELECT($PIECE(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
End DoDot:2
+12 ; 3 blank lines
DO ADD2TXT^YSCLSERV(" ")
DO ADD2TXT^YSCLSERV(" ")
DO ADD2TXT^YSCLSERV(" ")
+13 DO ADD2TXT^YSCLSERV("The following providers are authorized to prescribe Clozapine (YSCL AUTHORIZED)")
+14 ;??? Use FileMan lookup on 200
SET YSCLA=0
FOR
SET YSCLA=$ORDER(^XUSEC("YSCL AUTHORIZED",YSCLA))
if 'YSCLA
QUIT
Begin DoDot:2
+15 SET YSCLDEA=$$DEA^XUSER(1,YSCLA)
SET YSCLYN=1
SET YSPT("ssn")=$PIECE(^VA(200,YSCLA,1),"^",9)
+16 DO ADD2TXT^YSCLSERV($PIECE($GET(^VA(200,YSCLA,0)),"^",1)_" - "_YSPT("ssn")_" - "_$SELECT(YSCLDEA="":"*NONE*",1:YSCLDEA)_" - "_$SELECT(YSCLYN=1:"Yes",1:"NO"))
End DoDot:2
End DoDot:1
GOTO EXIT^YSCLSERV
+17 ;Holders of YSCL AUTHORIZED key
+18 ;
+19 ;
+20 DO ADD2TXT^YSCLSERV("Clinician Authorization Results at "_YSCLST)
+21 KILL ^TMP("DIERR",$JOB)
+22 FOR
XECUTE XMREC
if XMER<0
QUIT
SET X=XMRG
XECUTE ^%ZOSF("UPPERCASE")
SET X=Y
Begin DoDot:1
+23 SET YSPT("ssn")=$PIECE(X,"^",1)
SET YSCLDEA=$PIECE(X,"^",2)
SET YSCLYN=$PIECE(X,"^",3)
SET YSCLDUZ=""
SET YSCLDEA1=""
SET YSCLIEN=""
+24 IF YSCLLN=""!("YESNO"'[YSCLYN)
DO ADD2TXT^YSCLSERV("Clinician Authorization instructions invalid ("_YSCLYN_") at "_YSCLST)
+25 SET YSCLYN=$SELECT(YSCLYN="YES":1,1:0)
+26 IF '$DATA(^VA(200,"BS5",YSPT("ssn")))
DO ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") does not exist at "_YSCLST)
QUIT
+27 IF $DATA(^VA(200,"BS5",YSPT("ssn")))
SET YSCLAA=""
FOR
SET YSCLAA=$ORDER(^VA(200,"BS5",YSPT("ssn"),YSCLAA))
if YSCLAA=""
QUIT
IF $$DEA^XUSER(1,YSCLAA)=YSCLDEA
SET YSCLDUZ=YSCLAA
QUIT
+28 IF YSCLDUZ=""
DO ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") with DEA# "_YSCLDEA_" does not exist at "_YSCLST)
QUIT
+29 SET YSCLDEA1=$$DEA^XUSER(1,YSCLDUZ)
+30 IF YSCLDEA1=""
DO ADD2TXT^YSCLSERV("Clinician with DEA# "_YSCLDEA_" does not exist at "_YSCLST)
QUIT
+31 IF YSCLDEA'=YSCLDEA1
DO ADD2TXT^YSCLSERV("Clinician SSN ("_YSPT("ssn")_") - DEA ("_YSCLDEA_") mismatch at "_YSCLST)
QUIT
+32 DO OWNSKEY^XUSRB(.RET,"YSCL AUTHORIZED",YSCLDUZ)
+33 IF RET(0)
IF YSCLYN
DO ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") already authorized at "_YSCLST)
QUIT
+34 IF 'RET(0)
IF 'YSCLYN
DO ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") not authorized at "_YSCLST)
QUIT
+35 IF 'RET(0)
IF YSCLYN
SET YSCLDUZ(0)=DUZ
SET DUZ(0)="@"
Begin DoDot:2
+36 SET YSCLFDA(200,"?1,",.01)="`"_YSCLDUZ
+37 SET YSCLFDA(200.051,"+2,?1,",.01)="YSCL AUTHORIZED"
DO UPDATE^DIE("E","YSCLFDA",,"YSCLERR")
+38 IF $DATA(YSCLERR)
DO ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization failed at "_YSCLST)
QUIT
+39 IF '$DATA(YSCLERR)
DO ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization set to "_$SELECT(YSCLYN=1:"Yes",1:"No")_" at "_YSCLST)
QUIT
End DoDot:2
SET DUZ(0)=YSCLDUZ(0)
+40 IF RET(0)
IF 'YSCLYN
SET YSCLDUZ(0)=DUZ
SET DUZ(0)="@"
Begin DoDot:2
+41 SET DA=$$FIND1^DIC(200.051,","_YSCLDUZ_",","A","YSCL AUTHORIZE")
+42 IF DA<1
DO ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removal failed at "_YSCLST)
QUIT
+43 SET DA(1)=YSCLDUZ
SET DIK="^VA(200,"_DA(1)_",51,"
DO ^DIK
+44 DO ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removed at "_YSCLST)
QUIT
End DoDot:2
SET DUZ(0)=YSCLDUZ(0)
End DoDot:1
+45 GOTO EXIT^YSCLSERV
+46 QUIT
+47 ;
LKUP ; lookup patients in file #603.01
+1 ; message text
KILL ^TMP($JOB,"YSCLXMSG")
+2 NEW X,YSFMERR,YSFMRSLT,YSPT,YSXMINST,YSXMY,YSXMZ
+3 SET X=$$SITE^VASITE
+4 DO ADD2TXT^YSCLSERV("Site "_$PIECE(X,U,2)_" ("_$PIECE(X,U,3)_") inquiry to file #603.01")
DO ADD2TXT^YSCLSERV(" ")
+5 ; process list of SSNs
FOR
XECUTE XMREC
if XMER<0
QUIT
if XMRG]""
Begin DoDot:1
+6 KILL YSFMERR,YSPT,YSFMRSLT
+7 ; strip spaces and hyphens
SET YSPT("ssn")=$TRANSLATE(XMRG," -","")
+8 IF '(YSPT("ssn")?9N)
DO ADD2TXT^YSCLSERV("Error: "_XMRG_" is not a valid SSN.")
DO ADD2TXT^YSCLSERV(" ")
QUIT
+9 DO LIST^DIC(2,,".01;.09",,,,YSPT("ssn"),"SSN",,,"YSFMRSLT","YSFMERR")
+10 SET YSPT("name")=$GET(YSFMRSLT("DILIST","ID",1,.01))
+11 IF '$LENGTH(YSPT("name"))
Begin DoDot:2
+12 DO ADD2TXT^YSCLSERV("Error: SSN "_YSPT("ssn")_" not found in the PATIENT file (#2)")
DO ADD2TXT^YSCLSERV(" ")
End DoDot:2
QUIT
+13 KILL YSFMERR,YSFMRSLT
+14 DO LIST^DIC(603.01,,".01E;1E;2E;3E",,,,YSPT("name"),"C",,,"YSFMRSLT","YSFMERR")
+15 IF '$GET(YSFMRSLT("DILIST",2,1))
Begin DoDot:2
+16 DO ADD2TXT^YSCLSERV("SSN "_YSPT("ssn")_" not found in file #603.01")
DO ADD2TXT^YSCLSERV(" ")
End DoDot:2
QUIT
+17 ; put each entry in the message
+18 NEW FLD,YSIEN
+19 SET YSIEN=0
FOR
SET YSIEN=$ORDER(YSFMRSLT("DILIST","ID",YSIEN))
if 'YSIEN
QUIT
Begin DoDot:2
+20 DO ADD2TXT^YSCLSERV("IEN in file #603.01: "_YSFMRSLT("DILIST",2,YSIEN)_" for SSN "_YSPT("ssn"))
+21 ; send only fields with data
+22 SET FLD=0
FOR
SET FLD=$ORDER(YSFMRSLT("DILIST","ID",YSIEN,FLD))
if 'FLD
QUIT
if $LENGTH(YSFMRSLT("DILIST","ID",YSIEN,FLD))
Begin DoDot:3
+23 NEW YSERR,YSLBL
+24 DO FIELD^DID(603.01,FLD,"N","LABEL","YSLBL","YSERR")
if '$LENGTH($GET(YSLBL("LABEL")))
QUIT
+25 DO ADD2TXT^YSCLSERV(YSLBL("LABEL")_": "_YSFMRSLT("DILIST","ID",YSIEN,FLD))
End DoDot:3
+26 ; blank line after each entry
+27 DO ADD2TXT^YSCLSERV(" ")
End DoDot:2
End DoDot:1
+28 ; done with lookups
+29 DO ADD2TXT^YSCLSERV($JUSTIFY("* END OF REPORT *",35))
+30 ; debug?
SET X=$$GET1^DIQ(603.03,1,3,"I")
+31 SET YSXMSUB=$SELECT(X:"DEBUG ",1:"")_"NCCC PATIENT LOOKUP "_$$FMTE^XLFDT($$NOW^XLFDT)
+32 ; production?
SET X=$$GET1^DIQ(8989.3,1,501,"I")
+33 if X
SET YSXMY("G.CLOZAPINE ROLL-UP@DOMAIN.EXT")=""
+34 if 'X
SET YSXMY("G.CLOZAPINE ROLL-UP")=""
+35 SET YSXMINST("FROM")="CLOZAPINE SERVER"
+36 ; Mail the report
+37 DO SENDMSG^XMXAPI(DUZ,YSXMSUB,$NAME(^TMP($JOB,"YSCLXMSG")),.YSXMY,.YSXMINST,.YSXMZ)
+38 QUIT
+39 ;