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

PSSPGXUT.m

Go to the documentation of this file.
PSSPGXUT ;BIR/RTR - PHARMACOGENOMICS UTILITY ROUTINE ;09/20/07
 ;;1.0;PHARMACY DATA MANAGEMENT;**262**;9/30/97;Build 66
 ;
DATA(PSSGNPH,PSSRESUL) ;Validate HDR Gene and Phenotype data to send to vendor
 ;PSSRESUL(N, "GENE") = Gene from HDR ^ Vendor mapped Gene ^ 1 if not map
 ;PSSRESUL(N, "PHENOTYPE") = Pheno type from HDR ^ Vendor mapped Phenotype ^ 1 if not map
 N PSSGNDAT,PSSPHDAT,PSSCTR,PSSINV,PSSELOG,PSSNOFDB
 S PSSCTR="" F  S PSSCTR=$O(PSSGNPH(PSSCTR)) Q:'PSSCTR  D
 .S PSSGNDAT=$G(PSSGNPH(PSSCTR,"GENE")),PSSPHDAT=$G(PSSGNPH(PSSCTR,"PHENOTYPE"))
 .S:PSSGNDAT="" PSSGNDAT="NULL" S:PSSPHDAT="" PSSPHDAT="NULL"
 .S PSSRESUL(PSSCTR,"GENE")=PSSGNDAT_"^"_$$GENE(PSSGNDAT)
 .S PSSRESUL(PSSCTR,"PHENOTYPE")=PSSPHDAT_"^"_$$PHEN(PSSPHDAT) I PSSNOFDB S PSSRESUL(PSSCTR,"NOFDB")=""
 I '$D(PSSINV) Q
 D MESS
 Q
 ;
GENE(PSSGNE) ;Find vendor gene equivalent
 ;PSSGRSLT=GENE^FLAG(if can't map)
 N PSSCR,PSSGIEN,PSSGRSLT,PSSGNEC
 S PSSGIEN=0
 I $G(PSSGNE)="NULL" S PSSINV("G",PSSCTR)="" Q $G(PSSGNE)_"^1"
 S PSSGNEC=$$UP^XLFSTR(PSSGNE)
 F PSSCR="C","B","D" Q:PSSGIEN  S PSSGIEN=$O(^PS(51.26,PSSCR,PSSGNEC,0))
 I 'PSSGIEN S PSSINV("G",PSSCTR)="" Q $G(PSSGNE)_"^1"
 S PSSGRSLT=$P($G(^PS(51.26,PSSGIEN,0)),"^",2) I PSSGRSLT="" S PSSINV("G",PSSCTR)="" Q $G(PSSGNE)_"^1"
 Q PSSGRSLT_"^"
 ;
PHEN(PSSPNT) ;Find vendor phenotype equivalent
 ;PSSPRSLT=PHENO^FLAG(if can't map)
 N PSSCRT,PSSPIEN,PSSPRSLT,PSSPNTC
 S (PSSPIEN,PSSNOFDB)=0
 I $G(PSSPNT)="NULL" S PSSINV("P",PSSCTR)="" Q $G(PSSPNT)_"^1"
 S PSSPNTC=$$UP^XLFSTR(PSSPNT)
 F PSSCRT="C","B","D" Q:PSSPIEN  S PSSPIEN=$O(^PS(51.28,PSSCRT,PSSPNTC,0))
 I 'PSSPIEN S PSSINV("P",PSSCTR)="" Q $G(PSSPNT)_"^1"
 S PSSPRSLT=$P($G(^PS(51.28,PSSPIEN,0)),"^",2) I PSSPRSLT="" S PSSINV("P",PSSCTR)="",PSSNOFDB=1 Q $G(PSSPNT)_"^1"
 Q PSSPRSLT_"^"
 ;
MESS ;Send message of unresolvable genes/phenotypes to Pharmacy Benefits Management
 N PSSPGXST,PSSINLP,PSSICT,PSSXTEXT,XMTEXT,XMY,XMSUB,XMDUZ,XMMG,XMSTRIP,XMROU,XMYBLOB,XMZ
 Q:'$$PGXEMAIL^PSSPGXU2(PSSDFN,PSSICN,.PSSRESUL,.PSSINV)
 S PSSPGXST=$$SITE^VASITE,PSSICT=1
 S XMDUZ="UNRESOLVABLE PGX DATA"
 S XMSUB="UNRESOLVABLE PGX DATA FROM "_$P(PSSPGXST,"^",2)_" "_$P(PSSPGXST,"^",3)
 S PSSINLP="" F  S PSSINLP=$O(PSSINV("G",PSSINLP)) Q:'PSSINLP  D
 .D ADDLN
 .S PSSXTEXT(PSSICT)="The following Patient Specific Gene that is available for use in the PGx Order Check could not be found in the Gene file in Vista:"
 .D ADDLN
 .S PSSXTEXT(PSSICT)="Unresolvable Gene: "_$S($P($G(PSSRESUL(PSSINLP,"GENE")),"^")'="NULL":$P($G(PSSRESUL(PSSINLP,"GENE")),"^"),1:"") D ADD
 .D COMM
 S PSSINLP="" F  S PSSINLP=$O(PSSINV("P",PSSINLP)) Q:'PSSINLP  D
 .D ADDLN
 .S PSSXTEXT(PSSICT)="The following Patient Specific Phenotype that is available for use in the PGx Order Check could not be found in the Phenotype file in Vista:"
 .D ADDLN
 .S PSSXTEXT(PSSICT)="Unresolvable Phenotype: "_$S($P($G(PSSRESUL(PSSINLP,"PHENOTYPE")),"^")'="NULL":$P($G(PSSRESUL(PSSINLP,"PHENOTYPE")),"^"),1:"") D ADD
 .S PSSXTEXT(PSSICT)="Gene: "_$P($G(PSSRESUL(PSSINLP,"GENE")),"^") D ADD
 .D COMM
 D WRT^PSSPGXU2(.PSSELOG,PSSDFN,$G(PSSGNPH(1,"FULL_ICN")))
 S XMTEXT="PSSXTEXT("
 S XMY("VHAPBMCDSPGX@domain.ext")=""
 N DIFROM,DUZ D ^XMD
 Q
 ;
COMM ;
 NEW PSSEDT,PSSGENEX,PSSPTPEX,PSSICN,PSSRDT,PSSPGXID,PSSLOC,PSSX,PSSGPFLG,PSSPKG,PSSGENEZ,PSSTENEZ
 S PSSX=$G(PSSRESUL(PSSINLP,"GENE"))
 S PSSGENE=$P(PSSX,"^"),PSSGENEZ=$P(PSSX,"^",3)
 S PSSGENEX=$S(+$P(PSSX,"^",3):$P(PSSX,"^"),1:"")
 S PSSX=$G(PSSRESUL(PSSINLP,"PHENOTYPE"))
 S PSSPTYPE=$P(PSSX,"^"),PSSTENEZ=$P(PSSX,"^",3)
 S PSSPTPEX=$S(+$P(PSSX,"^",3):$P(PSSX,"^"),1:"")
 S PSSEDT=$$EMAILDT^PSSPGXU2(PSSDFN,PSSGENEX,PSSPTPEX)
 S PSSICN=$G(PSSGNPH(PSSINLP,"FULL_ICN"))
 S PSSRDT=$G(PSSGNPH(PSSINLP,"RESULT_DATE"))
 S PSSPGXID=$G(PSSGNPH(PSSINLP,"PGXSID"))
 S PSSLOC=$P(PSSPGXST,"^",2)_" "_$P(PSSPGXST,"^",3)
 ;
 S PSSXTEXT(PSSICT)="Patient ICN: "_PSSICN D ADD
 S PSSXTEXT(PSSICT)="Result Date: "_PSSRDT D ADD
 S:PSSEDT]"" PSSXTEXT(PSSICT)="Previous Email sent on: "_PSSEDT D ADD
 S PSSXTEXT(PSSICT)="pgxSID: "_PSSPGXID D ADD
 S PSSXTEXT(PSSICT)="Location: "_PSSLOC D ADD
 ;Save data for ^PS(51.29 file
 ;P1=PHENOTYPE, P2=UNRESOLVED FLAG, P3=EMAIL DATE, P4=LOCATION, P5=PACKAGE
 S PSSGPFLG=$S($G(PSSGENEZ)&($G(PSSTENEZ)):"B",$G(PSSTENEZ):"P",1:"G")
 S PSSPKG=$S($G(XQY0)["PSO":"O",$G(XQY0)["PSJ":"I",$G(XQY0)["OR CPRS":"C",1:"")
 S PSSELOG(PSSGENE)=$S(PSSGPFLG="G":"",1:PSSPTYPE)_"^"_PSSGPFLG_"^"_DT_"^"_PSSLOC_"^"_PSSPKG
 Q
 ;
ADD ;
 S PSSICT=PSSICT+1
 Q
 ;
ADDLN ;
 S PSSICT=PSSICT+1
 S PSSXTEXT(PSSICT)=""
 S PSSICT=PSSICT+1
 Q
 ;
ERR ; Check for HDR & Vender errors
 N PSSERRDR,PSSEL,PSSELCT,PSSELDNM,PSSTEMPX,PSSXL,PSSXCT,PSSACT
 I $G(PSSHDRFG),$G(PSSFDBFG) D NOCONN Q
 I $G(PSSHDRFG) D HDRERR
 I $G(PSSFDBFG) D FDBERR
 Q
 ;
SETDGR ;Set drugGeneReference data for Additional Information output
 S PSSPH6="" F  S PSSPH6=$O(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH5,"C",PSSPH6)) Q:PSSPH6=""  D
 .S PSSCAT2=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH5,"C",PSSPH6))
 .I PSSCAT2="title" S PSSXDATA("TITLE")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="typeDescription" S PSSXDATA("TYPE")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="author" S PSSXDATA("AUTHOR")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="name" S PSSXDATA("NAME")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="location" S PSSXDATA("LOCATION")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="issueDate" S PSSXDATA("ISSUEDT")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="volume" S PSSXDATA("VOLUME")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="issue" S PSSXDATA("ISSUE")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="page" S PSSXDATA("PAGE")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="pubMedId" S PSSXDATA("PUBMEDID")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 .I PSSCAT2="url" S PSSXDATA("URL")=$G(^TMP("PSSPGXBS",$J,PSSPH1,PSSPH6,"T",1))
 Q
 ;
HDRERR ;Unable to retrieve Lab results from the HDR
 S PSSACT="ERROR",(PSSXL,PSSXCT)=1
 S PSSTEMPX="Please perform a manual PGx Order check by using the Check Pharmacogenomic Interaction option for "
 D SETERR(PSSTEMPX,PSSACT,.PSSXCT,.PSSXL)
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="  Reason(s): Pharmacogenomic Lab Data could not be retrieved at this time." D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)=""
 Q
 ;
FDBERR ;Unexpected error from vendor database
 S PSSACT="ERROR"
 S PSSXCT=$G(PSSXCT)+1,PSSXL=1
 S PSSTEMPX="Pharmacogenomic Order Checks cannot be performed for "
 D SETERR(PSSTEMPX,PSSACT,.PSSXCT,.PSSXL)
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="  Reason(s):  "_$S(PSSFDBFG=1:"Vendor database cannot be reached.",1:"An unexpected error has occurred.") D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="" D INC^PSSPGXPR
 I '$G(PSSHDRFG) D GENETBL^PSSPGX(.PSSGDT),LABRSLT
 Q
 ;
SETERR(PSSTEMPX,PSSACT,PSSXCT,PSSXL) ;Unable to retrieve Lab results from the HDR
 Q:$G(PSSTEMPX)=""
 S:'+$G(PSSXCT) PSSXCT=1
 S:'+$G(PSSXL) PSSXL=1
 S:$G(PSSACT)="" PSSACT="ERROR"
 S PSSTEMPX=$$DRGLST(PSSTEMPX)
 D FORMAT(PSSTEMPX)
 Q
FORMAT(X) ; 
 N PSSW1,PSSW2,PSSQLC
 S DIWL=1,DIWR=79,DIWF="" I $G(PSSQLRF) S DIWR=55
 K ^UTILITY($J,"W")
 D ^DIWP
 S PSSW1="" F  S PSSW1=$O(^UTILITY($J,"W",PSSW1)) Q:PSSW1=""  D
 .S PSSW2="" F  S PSSW2=$O(^UTILITY($J,"W",PSSW1,PSSW2)) Q:PSSW2=""  D
 ..S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)=$G(^UTILITY($J,"W",PSSW1,PSSW2,0)) D INC^PSSPGXPR
 K ^UTILITY($J,"W"),PSSTEMPX
 Q
 ;
DRGLST(PSSTEMPX) ;Compile drug names for into text
 NEW PSSELCT,PSSELDNM,PSSERRDR
 S PSSELCT=0 S (PSSERRDR,PSSEL)="" F  S PSSEL=$O(PSSPGXDG(PSSEL)) Q:PSSEL=""  D
 .S PSSELDNM=$G(PSSPGXDG(PSSEL,"DRUGNAME"))
 .I PSSELDNM'="" S PSSELCT=PSSELCT+1,PSSERRDR=$S(PSSELCT=1:PSSELDNM,1:PSSERRDR_", "_PSSELDNM)
 S PSSTEMPX=$G(PSSTEMPX)_$S(PSSELCT<2:"Drug: ",1:"Drugs: ")_PSSERRDR
 Q PSSTEMPX
 ;
LABRSLT ;Set PGx lab result in ^TMP
 NEW PSSCNT
 I '+$G(PSSOPTFG) D
 . S:'$D(PSSGTBL) ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="Patient has no pharmacogenomic lab results" D INC^PSSPGXPR
 . I $D(PSSGTBL) F PSSCNT=0:0 S PSSCNT=$O(PSSGTBL(PSSCNT)) Q:'PSSCNT  D
 .. S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)=PSSGTBL(PSSCNT) D INC^PSSPGXPR
 . S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="" D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="For more details on VA National Pharmacogenomic Program go to:" D INC^PSSPGXPR
 S:$G(PSSURL)="" PSSURL=$P($G(^PS(59.7,1,"PGX")),"^")
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)=PSSURL D INC^PSSPGXPR
 Q
 ;
NOCONN ;Both HDR & FDB are not connecting
 S PSSACT="ERROR"
 S PSSXCT=$G(PSSXCT)+1,PSSXL=1
 S PSSTEMPX="Pharmacogenomic Order Checks cannot be performed for "
 D SETERR(PSSTEMPX,PSSACT,.PSSXCT,.PSSXL)
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="  Reason(s): Pharmacogenomic Lab Data could not be retrieved at this time." D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="             Vendor database cannot be reached." ;D INC^PSSPGXPR
 Q
 ;
PGXCHK() ; check pgx called from PSSHRIT - pss*1*262
 ; Return 1 if OK, 0 if not OK.
 N VAL,DRGIEN,GENE,INFO,INTRO,BASE,DRUG,DRGNM,GENES,X1,PSSDS1,PSSDX,PSSDXC
 N PSSLEFT S PSSLEFT=4     ; left margin for results
 ;
 S DRGNM="CLOPIDOGREL BISULFATE 75MG TAB"
 S GENE="CYP2C19",PSSDXC=1
 ;
 S BASE=$T(+0)_" PGXCHK"
 S GENES(GENE,"GENE")="",GENES(GENE,"PHENOTYPE")="INTERMEDIATE METABOLIZER"
 S X1(1,"DRUGNAME")=DRGNM
 S X1(1,"GCN")=38164
 S X1(1,"VUID")=4013159
 D PGXMAIN^PSSPGX1(.BASE,.GENES,.X1)
 ;
 S INTRO="Performing Pharmacogenomic Order Check for "_GENE_" intermediate metabolizer and "_$G(DRGNM)
 S INTRO=INTRO_$S('$D(^TMP($J,"PSSXWARN","ERROR"))&($D(^TMP($J,"PSSXWARN"))):"...OK",1:"...Not OK")
 ;
 I $D(^TMP($J,"PSSXWARN","ERROR")) D
 .D OUTPUT^PSSHRIT(INTRO)
 .W ! D OUTPUT^PSSHRIT("Pharmacogenomic Order Check could not be performed.",PSSLEFT)
 E  D
 .D OUTPUT^PSSHRIT(INTRO)
 .S PSSDS1="" F  S PSSDS1=$O(^TMP($J,"PSSXWARN",PSSDS1)) Q:PSSDS1=""  D
 ..S PSSDX="" F  S PSSDX=$O(^TMP($J,"PSSXWARN",PSSDS1,PSSDX)) Q:PSSDX=""  D
 ...F  S PSSDXC=$O(^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)) Q:'PSSDXC!(^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)["For more details")  D
 ....I ^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)="" K ^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)
 ....E  I ^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)["MONITORING" W !!,^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)
 ....E  I ^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)'["    " W !,^TMP($J,"PSSXWARN",PSSDS1,PSSDX,PSSDXC)
 .W !
 Q $S($D(^TMP($J,"PSSXWARN","ERROR")):0,1:1)
 ;
URL ;Set URL info for PGx check
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="For more details on VA National Pharmacogenomics Program go to:" D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)=$S($G(PSSURL)]"":PSSURL,1:$P($G(^PS(59.7,1,"PGX")),"^")) D INC^PSSPGXPR
 S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="" D INC^PSSPGXPR
 Q
 ;
SUPP() ;Suppress if disabled in CPRS - called from PSSPGXPR
 S PSSSUPFL=0 D  I PSSSUPFL Q 1
 .I $G(PSSORSUP)="H",$G(PSSTCNTV)="Interruptive" S PSSSUPFL=1 Q
 .I $G(PSSORSUP)="M",$G(PSSTCNTV)="Informational" S PSSSUPFL=1
 Q 0