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

PSSPGXOR.m

Go to the documentation of this file.
PSSPGXOR ;BIR/RTR - PHARMACOGENOMICS CPRS API ;09/20/07
 ;;1.0;PHARMACY DATA MANAGEMENT;**262**;9/30/97;Build 66
 ;
PGX(PSSORPT,PSSOLIST,PSSORPKG,PSSORDRG,PSSORDNM,PSSORSUP) ; CPRS API for pharmacogenomic order check
 ;PSSORPT = Patient IEN
 ;PSSOLIST - LITERAL
 ;PSSORPKG = Package, may not be needed since it was passed into BDA to get drug
 ;PSSORDRG = Drug (#50) IEN
 ;PSSORDNM = Order Number
 ;PSSORSUP = Suppress flag - 'M' to suppress Moderate checks, 'H' to suppress High checks, 'N' for no suppression
 ;Update parameters to allow multiple entries, and add order number for CPRS display
 N PSSPGXOR,PSSOROI,PSSDRGOI,PSSORRET,PSSORPGX
 S PSSPGXOR=1
 S PSSOROI=$P($G(^PS(50.7,+$P($G(^PSDRUG(PSSORDRG,2)),"^"),0)),"^")_" "_$P($G(^PS(50.606,+$P($G(^(0)),"^",2),0)),"^")
 S PSSDRGOI(PSSORDRG)=""
 S PSSDRGOI(PSSORDRG,"DRUGNAME")=PSSOROI
 D PGXOC^PSSPGX("PSSORPGX",PSSORPT,.PSSDRGOI,.PSSORRET,PSSORPKG)
 Q
 ;
 ;
 ;Best Drug available
 ;Input:
 ;PSSBDAOI = Pharmacy Orderable Item
 ;PSSBDAPK = O for Outpatient, U for Unit Dose, I for IV, X for Non-VA Med
 ;Output:
 ;Null if no PGx eligible  VA Product available or:
 ;File 50 IEN^GCNSEQNO^VUID
BDA(PSSBDAOI,PSSBDAPK) ; Find best drug available for PGx order check
 N PSSBDL,PSSBDZ,PSSBDND,PSSBDND1,PSSBDND3,PSSBDGCN,PSSBDAR,PSSBDRSL,PSSBDCNT,PSSBDARP,PSSBDDAT,PSSBDEAR,PSSLA2,PSSLA3,PSSAPUSE,PSSBDRS2,PSSBDRS3,PSSAPFLG,PSSAPLP
 I '$G(PSSBDAOI) Q ""
 I $G(PSSBDAPK)'="O",$G(PSSBDAPK)'="U",$G(PSSBDAPK)'="I",$G(PSSBDAPK)'="X" Q ""
 S (PSSBDCNT,PSSBDRSL)=0
 S PSSBDL="" F  S PSSBDL=$O(^PSDRUG("ASP",PSSBDAOI,PSSBDL)) Q:'PSSBDL!(PSSBDRSL)  D
 .S PSSBDZ=$G(^PSDRUG(PSSBDL,0)),PSSBDND=$G(^("ND"))
 .S PSSAPUSE=$P($G(^PSDRUG(PSSBDL,2)),"^",3)
 .S PSSBDND1=$P(PSSBDND,"^"),PSSBDND3=$P(PSSBDND,"^",3)
 .I 'PSSBDND1!('PSSBDND3) Q
 .I '$$PGX^PSNAPIS(PSSBDND1,PSSBDND3) Q
 .I $P(PSSBDZ,"^",3)["S"!($E($P(PSSBDZ,"^",2),1,2)="XA") Q
 .S PSSBDGCN=$P($$PROD0^PSNAPIS(PSSBDND1,PSSBDND3),"^",7) I PSSBDGCN="" Q
 .S PSSBDAR(PSSBDL)=PSSBDGCN_"^"_PSSAPUSE_"^"_$P($G(^PSDRUG(PSSBDL,"I")),"^")_"^"_$$VUID(PSSBDND3),PSSBDCNT=1
 .S PSSBDDAT=$S($P($G(^PSDRUG(PSSBDL,"I")),"^"):$P($G(^PSDRUG(PSSBDL,"I")),"^"),1:9999999)
 .S PSSAPFLG=0
 .I $P(PSSBDAR(PSSBDL),"^",2)["O" S PSSBDARP("O",PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .I $P(PSSBDAR(PSSBDL),"^",2)["I" S PSSBDARP("I",PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .I $P(PSSBDAR(PSSBDL),"^",2)["U" S PSSBDARP("U",PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .I $P(PSSBDAR(PSSBDL),"^",2)["X" S PSSBDARP("X",PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .I 'PSSAPFLG S PSSBDARP("Z",PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .S PSSBDEAR(PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 .I $P(PSSBDAR(PSSBDL),"^",2)[PSSBDAPK,('$P(PSSBDAR(PSSBDL),"^",3)) S PSSBDRSL=PSSBDL Q
 .I $P(PSSBDAR(PSSBDL),"^",2)[PSSBDAPK,($P(PSSBDAR(PSSBDL),"^",3)>DT) S PSSBDRS2(PSSBDAPK,PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3) Q
 .I '$P(PSSBDAR(PSSBDL),"^",3)!($P(PSSBDAR(PSSBDL),"^",3)>DT) D
 ..S PSSAPUSE=PSSAPUSE_"Z" F PSSAPLP=1:1:$L(PSSAPUSE) D
 ...S PSSBDRS3($E(PSSAPUSE,PSSAPLP),PSSBDDAT,PSSBDL)=PSSBDGCN_"^"_$$VUID(PSSBDND3)
 I 'PSSBDCNT Q ""
 I PSSBDRSL Q PSSBDRSL_"^"_$P(PSSBDAR(PSSBDRSL),"^")_"^"_$P(PSSBDAR(PSSBDRSL),"^",4)
 I $D(PSSBDRS2) D  S PSSBDRSL=$O(PSSBDRS2(PSSBDAPK,PSSLA3,"")) Q PSSBDRSL_"^"_$G(PSSBDARP(PSSBDAPK,PSSLA3,PSSBDRSL))
 .S PSSLA3="" F  S PSSLA3=$O(PSSBDRS2(PSSBDAPK,PSSLA3)) I '$O(PSSBDRS2(PSSBDAPK,PSSLA3)) Q
 ;Left with multiple entries that either do not match package, have an inactive date, or both
 I PSSBDAPK="O" D  I PSSBDRSL Q PSSBDRSL
 .S PSSBDL=$$LASTP("UIXZ") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("O") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("U") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("I") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("X") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("Z") I PSSBDL S PSSBDRSL=PSSBDL Q
 I PSSBDAPK="U" D  I PSSBDRSL Q PSSBDRSL
 .S PSSBDL=$$LASTP("IOXZ") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("U") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("I") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("O") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("X") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("Z") I PSSBDL S PSSBDRSL=PSSBDL Q
 I PSSBDAPK="I" D  I PSSBDRSL Q PSSBDRSL
 .S PSSBDL=$$LASTP("UOXZ") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("I") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("U") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("O") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("X") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("Z") I PSSBDL S PSSBDRSL=PSSBDL Q
 I PSSBDAPK="X" D  I PSSBDRSL Q PSSBDRSL
 .S PSSBDL=$$LASTP("OUIZ") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("X") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("O") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("U") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("I") I PSSBDL S PSSBDRSL=PSSBDL Q
 .S PSSBDL=$$LAST("Z") I PSSBDL S PSSBDRSL=PSSBDL Q
 S PSSLA2="" F  S PSSLA2=$O(PSSBDEAR(PSSLA2)) I '$O(PSSBDEAR(PSSLA2)) Q
 I PSSLA2="" Q ""
 S PSSBDL=$O(PSSBDEAR(PSSLA2,"")) I PSSBDL Q PSSBDL_"^"_$P(PSSBDEAR(PSSLA2,PSSBDL),"^")_"^"_$P(PSSBDEAR(PSSLA2,PSSBDL),"^",2)
 Q ""
 ;
VUID(PSSNDF3) ;Return VUID
 N PSSVUID
 I 'PSSNDF3 Q ""
 S PSSVUID=$$GETVUID^XTID(50.68,,+PSSNDF3_",")
 Q PSSVUID
 ;
LAST(PSSPK) ;
 N PSSLA1,PSSLAL1,PSSLALF,PSSLALD
 S (PSSLA1,PSSLALF,PSSLALD)="" F  S PSSLA1=$O(PSSBDARP(PSSPK,PSSLA1)) Q:PSSLA1=""  D
 .S PSSLAL1="" F  S PSSLAL1=$O(PSSBDARP(PSSPK,PSSLA1,PSSLAL1)) I '$O(PSSBDARP(PSSPK,PSSLA1,PSSLAL1)) D  Q
 ..S PSSLALD=PSSLAL1_"^"_$G(PSSBDARP(PSSPK,PSSLA1,PSSLAL1)),PSSLALF=1
 Q PSSLALD
 ;
LASTP(PSSLA4) ;
 N PSSLARES,PSSLA5,PSSLA6,PSSLA7,PSSLA8,PSSLAZ,PSSLAV2,PSSLAV3 S PSSLARES=0
 S PSSLA5=$E(PSSLA4,1),PSSLA6=$E(PSSLA4,2),PSSLA7=$E(PSSLA4,3),PSSLAZ=$E(PSSLA4,4)
 F PSSLA8=PSSLA5,PSSLA6,PSSLA7,PSSLAZ Q:PSSLARES  D
 .S PSSLAV2="" F  S PSSLAV2=$O(PSSBDRS3(PSSLA8,PSSLAV2)) Q:'PSSLAV2  D
 ..S PSSLAV3="" F  S PSSLAV3=$O(PSSBDRS3(PSSLA8,PSSLAV2,PSSLAV3)) I '$O(PSSBDRS3(PSSLA8,PSSLAV2,PSSLAV3)) D  Q
 ...S PSSLARES=PSSLAV3_"^"_$G(PSSBDRS3(PSSLA8,PSSLAV2,PSSLAV3))
 Q PSSLARES
 ;
SETOR ;Set data for CPRS PGX check from PSSPHAR array
 ;Set ^TMP($J,LIST,ORDER NUMBER,COUNTER,"TEXT")
 ;Set ^TMP($J,LIST,ORDER NUMBER,COUNTER,"SEV")
 N PSSXL,PSSXCT,PSSACT,PSSTEMPX,PSSSUB2,PSSQLRF,PSSGNW,PSSCREEN,PSSPUNC,PSSPUNCT,PSSORCTR,PSSMCT,PSSORVAG,PSSORVGN,PSSGVAL1,PSSGVAL2,PSSGVAL3,PSSGVAL4,PSSGVAL5,PSSORURL
 S PSSORURL=$S($G(PSSURL)'="":$G(PSSURL),1:$P($G(^PS(59.7,1,"PGX")),"^"))
 I $G(PSSHDRFG) D HDRDOWN Q
 S PSSORCTR=0
 S PSSSUB1="" F  S PSSSUB1=$O(PSSPHAR(PSSSUB1)) Q:PSSSUB1=""  D
 .S PSSXL="" F  S PSSXL=$O(PSSPHAR(PSSSUB1,PSSXL)) Q:PSSXL=""  S PSSXCT=1,PSSORCTR=PSSORCTR+1 D
 ..S PSSCREEN=$S($G(PSSPHAR(PSSSUB1,PSSXL,"ACTION LONG"))=""&($G(PSSPHAR(PSSSUB1,PSSXL,"MONITORING LONG"))=""):1,1:0)
 ..S PSSACT=$S($G(PSSPHAR(PSSSUB1,PSSXL,"DISPLAY ACTION"))="Informational":"MEDIUM",$G(PSSPHAR(PSSSUB1,PSSXL,"DISPLAY ACTION"))="Interruptive":"HIGH",1:"NONE")
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"SEV")=PSSACT
 ..I PSSCREEN D  Q
 ...S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")="Please perform a manual PGx Order check by using the Check Pharmacogenomic Interaction option for Drug: "
 ...S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_PSSOROI_"."_" Reason(s): "_$G(PSSPHAR(PSSSUB1,PSSXL,"SCREEN"))
 ...S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" For more details on VA National Pharmacogenomics Program go to: "_PSSORURL
 ..S PSSPUNC=$G(PSSPHAR(PSSSUB1,PSSXL,"DXID")),PSSPUNCT=0
 ..I $G(PSSPUNC)'="",$E(PSSPUNC,$L(PSSPUNC))'="." S PSSPUNCT=1
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")="Pharmacogenomic "_$S(PSSACT="NONE":"Order Check:",1:PSSACT_" Order Check: ")_PSSOROI
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" and "_$G(PSSPHAR(PSSSUB1,PSSXL,"DXID"))_$S(PSSPUNCT:".",1:"")
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" ACTION: "_$G(PSSPHAR(PSSSUB1,PSSXL,"ACTION LONG"))
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" MONITORING: "_$G(PSSPHAR(PSSSUB1,PSSXL,"MONITORING LONG"))
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" VA National Pharmacogenomics Program: "_PSSORURL
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")=^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"TEXT")_" - Monograph Available"
 ..D ADDINFO^PSSPGXPR M ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"PGXMON")=^TMP($J,"PSSXWARN",PSSACT,PSSXL,"AI")
 ..S PSSORVGN="" S PSSORVAG=$P($G(^PSDRUG(PSSORDRG,"ND")),"^")
 ..I PSSORVAG S PSSORVGN=$$VAGN^PSNAPIS(PSSORVAG)
 ..K PSSGVAL3,PSSGVAL5 S PSSGVAL4=0 F PSSGVAL1=1:1 Q:'$D(PSSPHAR(PSSSUB1,PSSXL,"GENE",PSSGVAL1))  D
 ...S PSSGVAL2=$G(PSSPHAR(PSSSUB1,PSSXL,"GENE",PSSGVAL1,"GENE")) Q:PSSGVAL2=""!($D(PSSGVAL3(PSSGVAL2)))
 ...S PSSGVAL5=$S('PSSGVAL4:PSSGVAL2,1:PSSGVAL5_"/"_PSSGVAL2) S PSSGVAL4=1,PSSGVAL3(PSSGVAL2)=""
 ..S ^TMP($J,PSSOLIST,PSSORDNM,PSSORCTR,"PGXTITLE")=$G(PSSGVAL5)_" // "_$G(PSSORVGN)
 Q
 ;
HDRDOWN ;Can't retrieve patient's gene data
 NEW PSSTXT,PSSTXT1,PSSSUB1,PSSSUB2,PSSGENE
 S PSSGENE=""
 S PSSTXT="Pharmacogenomic lab data could not be retrieved at this time. "_PSSOROI
 S PSSTXT1=" VA National Pharmacogenomics Program go to: "_$P($G(^PS(59.7,1,"PGX")),"^")
 ;S ^TMP($J,PSSOLIST,1,1,"SEV")=""
 I +$D(PSSPHAR) S PSSSUB1="" F  S PSSSUB1=$O(PSSPHAR("HIGH",PSSSUB1)) Q:PSSSUB1=""  D  Q
 . S PSSSUB2="" F  S PSSSUB2=$O(PSSPHAR("HIGH",PSSSUB1,"GENE",PSSSUB2)) Q:PSSSUB2=""  D
 ..S PSSGENE=PSSGENE_$S(PSSGENE="":"",1:", ")_$G(PSSPHAR("HIGH",PSSSUB1,"GENE",PSSSUB2,"GENE"))
 .S PSSTXT=PSSTXT_$S(PSSGENE="":"",1:" and ")_PSSGENE_". "
 .S PSSTXT=PSSTXT_"ACTION: "_$G(PSSPHAR("HIGH",PSSSUB1,"ACTION LONG"))_" MONITORING: "_$G(PSSPHAR("HIGH",PSSSUB1,"MONITORING LONG"))
 .S ^TMP($J,PSSOLIST,1,1,"TEXT")=PSSTXT_PSSTXT1
 .S ^TMP($J,PSSOLIST,1,1,"SEV")="HIGH"
 ;
 I '+$D(PSSPHAR) D
 .S ^TMP($J,PSSOLIST,1,1,"SEV")=""
 .S PSSGENE=$$GENE^PSSPGXU2()
 .S ^TMP($J,PSSOLIST,1,1,"TEXT")=PSSTXT_$S(PSSGENE]"":" and ",1:"")_PSSGENE_"."_PSSTXT1
 Q
 ;
INC ;
 S PSSXCT=PSSXCT+1
 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
 I $G(PSSQLRF) S PSSQLC=1 D
 .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)=$S(PSSQLC=1:"        GENOMIC FINDING: ",1:"                         ")_$G(^UTILITY($J,"W",PSSW1,PSSW2,0)) S PSSQLC=PSSQLC+1 D INC
 I '$G(PSSQLRF) 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
 K ^UTILITY($J,"W"),PSSTEMPX
 I '$G(PSSQLRF) S ^TMP($J,"PSSXWARN",PSSACT,PSSXL,PSSXCT)="" D INC
 Q