Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: YSCLSRV3

YSCLSRV3.m

Go to the documentation of this file.
  1. 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
  1. ; Reference to ^%ZOSF supported by IA #10096
  1. ; Reference to ^DPT supported by IA #10035
  1. ; Reference to ^PS(55 supported by IA #787
  1. ; Reference to ^PSDRUG supported by IA #25
  1. ; Reference to ^PSRX supported by IA #780
  1. ; Reference to ^VA(200 supported by IA #10060
  1. ; Reference to ^XUSEC supported by IA #10076
  1. ;
  1. D DT^DICRW
  1. K ^TMP($J,"YSCLXMSG"),^TMP($J,"YSRXPTLST") ; message text & patient list
  1. D ADD2TXT^YSCLSERV("This is a list of all active Clozapine prescriptions.")
  1. D ADD2TXT^YSCLSERV("An asterisk in the first column indicates that the prescription is over")
  1. D ADD2TXT^YSCLSERV("28 days old. The second column is the Patient Name. The third is the")
  1. D ADD2TXT^YSCLSERV("Issue Date. The fourth column is the Prescription Number. The final")
  1. D ADD2TXT^YSCLSERV("column is the CLOZAPINE STATUS indicator.")
  1. ;
  1. N C,DFN,DRUGIEN,RXPTR,X,YSLN,YSPT,YSRX,YSV
  1. S YSV("t-28")=$$HTFM^XLFDT($H-28) ; 28 days ago
  1. ; ^PS(55,D0,P,D1,0)= (#.01) PRESCRIPTION PROFILE [1P:52]
  1. ; loop through CLOZAPINE REGISTRATION NUMBER cross-ref
  1. S DFN=0 F S DFN=$O(^PS(55,"ASAND",DFN)) Q:'DFN I $D(^DPT(DFN,0)),$D(^PS(55,DFN,"SAND")) D
  1. . K YSPT S YSPT(55,"SAND")=$G(^PS(55,DFN,"SAND")) S YSPT(0)=$G(^DPT(DFN,0))
  1. . 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)
  1. .. 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]
  1. .. Q:'$D(^PSDRUG(DRUGIEN,"CLOZ")) ; (#17.2) LAB TEST MONITOR [1P:60]
  1. .. 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)
  1. .. 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"
  1. ; add sorted patient list to the message
  1. 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))
  1. K ^TMP($J,"YSRXPTLST")
  1. G EXIT^YSCLSERV
  1. ;
  1. RXACTV(YSRXIEN) ; (#100) STATUS [1S], '0' FOR ACTIVE;
  1. N YSFMERR
  1. Q $$GET1^DIQ(52,YSRXIEN_",",100,"I","YSFMERR")
  1. ;
  1. DEMOG ;
  1. S YSCLA=0 F S YSCLA=$O(^YSCL(603.01,"C",YSCLA)) Q:'YSCLA D
  1. . I $D(^PS(55,YSCLA,"SAND")),$P(^PS(55,YSCLA,"SAND"),"^",4)=0 S YSCLC=$G(YSCLC)+1
  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
  1. D ADD2TXT^YSCLSERV(+$G(YSCLB)_" record"_$S(+$G(YSCLB)=1:"",1:"s")_" reset at ("_YSCLST_") "_YSCLSTN)
  1. D ADD2TXT^YSCLSERV(+$G(YSCLC)_" record"_$S(+$G(YSCLC)=1:"",1:"s")_" not reset at ("_YSCLST_") "_YSCLSTN)
  1. G EXIT^YSCLSERV
  1. Q
  1. LOCK ;Lock out ability to dispense Clozapine
  1. X XMREC Q:XMER<0 S X=XMRG
  1. I X="LOCK DOWN ON" S $P(^YSCL(603.03,1,1),"^",1)=1 D ADD2TXT^YSCLSERV("Clozapine dispensing prohibited at "_YSCLST)
  1. I X="LOCK DOWN OFF" S $P(^YSCL(603.03,1,1),"^",1)=0 D ADD2TXT^YSCLSERV("Clozapine dispensing enabled at "_YSCLST)
  1. G EXIT^YSCLSERV
  1. Q
  1. AUTH ;List authorized Clozapine providers
  1. I YSCLSUB["LIST" D G EXIT^YSCLSERV
  1. . D ADD2TXT^YSCLSERV("The following providers are authorized to override Clozapine lockouts (PSOLOCKCLOZ)")
  1. . S YSCLLN=2
  1. . S YSCLA="" F S YSCLA=$O(^XUSEC("PSOLOCKCLOZ",YSCLA)) Q:YSCLA="" D
  1. . . Q:'$D(^VA(200,YSCLA,0))
  1. . . D ADD2TXT^YSCLSERV($P(^VA(200,YSCLA,0),"^",1)_" "_$S($P(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
  1. . D ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" ") ; 3 blank lines
  1. . D ADD2TXT^YSCLSERV("The following providers are authorized to access the Pharmacy Clozapine Manager Menu (PSZ CLOZAPINE)")
  1. . S YSCLA="" F S YSCLA=$O(^XUSEC("PSZ CLOZAPINE",YSCLA)) Q:YSCLA="" D
  1. . . Q:'$D(^VA(200,YSCLA,0))
  1. . . D ADD2TXT^YSCLSERV($P(^VA(200,YSCLA,0),"^",1)_" "_$S($P(^VA(200,YSCLA,0),"^",7)=1:"Ina",1:"A")_"ctive")
  1. . D ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" "),ADD2TXT^YSCLSERV(" ") ; 3 blank lines
  1. . D ADD2TXT^YSCLSERV("The following providers are authorized to prescribe Clozapine (YSCL AUTHORIZED)")
  1. . S YSCLA=0 F S YSCLA=$O(^XUSEC("YSCL AUTHORIZED",YSCLA)) Q:'YSCLA D ;??? Use FileMan lookup on 200
  1. . . S YSCLDEA=$$DEA^XUSER(1,YSCLA),YSCLYN=1,YSPT("ssn")=$P(^VA(200,YSCLA,1),"^",9)
  1. . . D ADD2TXT^YSCLSERV($P($G(^VA(200,YSCLA,0)),"^",1)_" - "_YSPT("ssn")_" - "_$S(YSCLDEA="":"*NONE*",1:YSCLDEA)_" - "_$S(YSCLYN=1:"Yes",1:"NO"))
  1. ;Holders of YSCL AUTHORIZED key
  1. ;
  1. ;
  1. D ADD2TXT^YSCLSERV("Clinician Authorization Results at "_YSCLST)
  1. K ^TMP("DIERR",$J)
  1. F X XMREC Q:XMER<0 S X=XMRG X ^%ZOSF("UPPERCASE") S X=Y D
  1. . S YSPT("ssn")=$P(X,"^",1),YSCLDEA=$P(X,"^",2),YSCLYN=$P(X,"^",3),YSCLDUZ="",YSCLDEA1="",YSCLIEN=""
  1. . I YSCLLN=""!("YESNO"'[YSCLYN) D ADD2TXT^YSCLSERV("Clinician Authorization instructions invalid ("_YSCLYN_") at "_YSCLST)
  1. . S YSCLYN=$S(YSCLYN="YES":1,1:0)
  1. . I '$D(^VA(200,"BS5",YSPT("ssn"))) D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") does not exist at "_YSCLST) Q
  1. . 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
  1. . I YSCLDUZ="" D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") with DEA# "_YSCLDEA_" does not exist at "_YSCLST) Q
  1. . S YSCLDEA1=$$DEA^XUSER(1,YSCLDUZ)
  1. . I YSCLDEA1="" D ADD2TXT^YSCLSERV("Clinician with DEA# "_YSCLDEA_" does not exist at "_YSCLST) Q
  1. . I YSCLDEA'=YSCLDEA1 D ADD2TXT^YSCLSERV("Clinician SSN ("_YSPT("ssn")_") - DEA ("_YSCLDEA_") mismatch at "_YSCLST) Q
  1. . D OWNSKEY^XUSRB(.RET,"YSCL AUTHORIZED",YSCLDUZ)
  1. . I RET(0),YSCLYN D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") already authorized at "_YSCLST) Q
  1. . I 'RET(0),'YSCLYN D ADD2TXT^YSCLSERV("Clinician ("_YSPT("ssn")_") not authorized at "_YSCLST) Q
  1. . I 'RET(0),YSCLYN S YSCLDUZ(0)=DUZ,DUZ(0)="@" D S DUZ(0)=YSCLDUZ(0)
  1. . . S YSCLFDA(200,"?1,",.01)="`"_YSCLDUZ
  1. . . S YSCLFDA(200.051,"+2,?1,",.01)="YSCL AUTHORIZED" D UPDATE^DIE("E","YSCLFDA",,"YSCLERR")
  1. . . I $D(YSCLERR) D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization failed at "_YSCLST) Q
  1. . . I '$D(YSCLERR) D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization set to "_$S(YSCLYN=1:"Yes",1:"No")_" at "_YSCLST) Q
  1. . I RET(0),'YSCLYN S YSCLDUZ(0)=DUZ,DUZ(0)="@" D S DUZ(0)=YSCLDUZ(0)
  1. . . S DA=$$FIND1^DIC(200.051,","_YSCLDUZ_",","A","YSCL AUTHORIZE")
  1. . . I DA<1 D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removal failed at "_YSCLST) Q
  1. . . S DA(1)=YSCLDUZ,DIK="^VA(200,"_DA(1)_",51," D ^DIK
  1. . . D ADD2TXT^YSCLSERV("Clinician SSN "_YSPT("ssn")_" authorization removed at "_YSCLST) Q
  1. G EXIT^YSCLSERV
  1. Q
  1. ;
  1. LKUP ; lookup patients in file #603.01
  1. K ^TMP($J,"YSCLXMSG") ; message text
  1. N X,YSFMERR,YSFMRSLT,YSPT,YSXMINST,YSXMY,YSXMZ
  1. S X=$$SITE^VASITE
  1. D ADD2TXT^YSCLSERV("Site "_$P(X,U,2)_" ("_$P(X,U,3)_") inquiry to file #603.01"),ADD2TXT^YSCLSERV(" ")
  1. F X XMREC Q:XMER<0 D:XMRG]"" ; process list of SSNs
  1. . K YSFMERR,YSPT,YSFMRSLT
  1. . S YSPT("ssn")=$TR(XMRG," -","") ; strip spaces and hyphens
  1. . I '(YSPT("ssn")?9N) D ADD2TXT^YSCLSERV("Error: "_XMRG_" is not a valid SSN."),ADD2TXT^YSCLSERV(" ") Q
  1. . D LIST^DIC(2,,".01;.09",,,,YSPT("ssn"),"SSN",,,"YSFMRSLT","YSFMERR")
  1. . S YSPT("name")=$G(YSFMRSLT("DILIST","ID",1,.01))
  1. . I '$L(YSPT("name")) D Q
  1. .. D ADD2TXT^YSCLSERV("Error: SSN "_YSPT("ssn")_" not found in the PATIENT file (#2)"),ADD2TXT^YSCLSERV(" ")
  1. . K YSFMERR,YSFMRSLT
  1. . D LIST^DIC(603.01,,".01E;1E;2E;3E",,,,YSPT("name"),"C",,,"YSFMRSLT","YSFMERR")
  1. . I '$G(YSFMRSLT("DILIST",2,1)) D Q
  1. .. D ADD2TXT^YSCLSERV("SSN "_YSPT("ssn")_" not found in file #603.01"),ADD2TXT^YSCLSERV(" ")
  1. . ; put each entry in the message
  1. . N FLD,YSIEN
  1. . S YSIEN=0 F S YSIEN=$O(YSFMRSLT("DILIST","ID",YSIEN)) Q:'YSIEN D
  1. .. D ADD2TXT^YSCLSERV("IEN in file #603.01: "_YSFMRSLT("DILIST",2,YSIEN)_" for SSN "_YSPT("ssn"))
  1. .. ; send only fields with data
  1. .. S FLD=0 F S FLD=$O(YSFMRSLT("DILIST","ID",YSIEN,FLD)) Q:'FLD D:$L(YSFMRSLT("DILIST","ID",YSIEN,FLD))
  1. ... N YSERR,YSLBL
  1. ... D FIELD^DID(603.01,FLD,"N","LABEL","YSLBL","YSERR") Q:'$L($G(YSLBL("LABEL")))
  1. ... D ADD2TXT^YSCLSERV(YSLBL("LABEL")_": "_YSFMRSLT("DILIST","ID",YSIEN,FLD))
  1. .. ; blank line after each entry
  1. .. D ADD2TXT^YSCLSERV(" ")
  1. ; done with lookups
  1. D ADD2TXT^YSCLSERV($J("* END OF REPORT *",35))
  1. S X=$$GET1^DIQ(603.03,1,3,"I") ; debug?
  1. S YSXMSUB=$S(X:"DEBUG ",1:"")_"NCCC PATIENT LOOKUP "_$$FMTE^XLFDT($$NOW^XLFDT)
  1. S X=$$GET1^DIQ(8989.3,1,501,"I") ; production?
  1. S:X YSXMY("G.CLOZAPINE ROLL-UP@DOMAIN.EXT")=""
  1. S:'X YSXMY("G.CLOZAPINE ROLL-UP")=""
  1. S YSXMINST("FROM")="CLOZAPINE SERVER"
  1. ; Mail the report
  1. D SENDMSG^XMXAPI(DUZ,YSXMSUB,$NA(^TMP($J,"YSCLXMSG")),.YSXMY,.YSXMINST,.YSXMZ)
  1. Q
  1. ;