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

PSSPGXT1.m

Go to the documentation of this file.
PSSPGXT1 ;BIR/RTR - PHARMACOGENOMICS TEST OPTION CONTINUED;09/20/07
 ;;1.0;PHARMACY DATA MANAGEMENT;**262**;9/30/97;Build 66
 ;
 ;Reference to BLD^PSOOCPGX is supported by ICR #7527
 ;Reference to EHCHK^PSJORUT2 is supported by ICR #2376
 ;
ASK() ;
 N DIR,DUOUT,DIRUT,DTOUT,X,Y
 S DIR(0)="Y",DIR("?")=" ",DIR("?",1)="Enter 'YES' to use a patients genomic lab data for the input,"
 S DIR("?",2)="enter 'NO' to select genomic data for the input."
 S DIR("A")="Do you want to use a specific patient",DIR("B")="Y"
 D ^DIR K DIR I Y["^"!($D(DUOUT))!($D(DTOUT)) S PSSASKQT=1 Q 0
 Q Y
 ;
ASKPT ;
 N DIR,DUOUT,DIRUT,DTOUT,X,Y
 W ! S DIC=2,DIC(0)="QEAM" D ^DIC I Y'>0!($D(DUOUT))!($D(DTOUT)) Q
 S PSSTESTP=+Y
 Q
 ;
ASKDR ;
 N DIR,DUOUT,DIRUT,DTOUT,X,Y,PSSNVAL,PSSNVA0,PSSNVAC,PSSNVACP,PSSNVADG,PSSPPRF,PSSPPRF1,PSSPPRFP,PSSPPRFC,PSSPPRFA,PSSPPRFL,PSSPPRFZ
 S DIR(0)="Y",DIR("?")=" ",DIR("?",1)="Enter 'YES' to use the patients PGX eligible active drugs as prospective drugs,"
 S DIR("?",2)="enter 'NO' to select prospective drugs."
 S DIR("A",1)="Do you want to use the patient's pharmacogenomic eligible drug(s)",DIR("A")="from their medication profile(s)",DIR("B")="Y"
 D ^DIR K DIR I Y["^"!($D(DUOUT))!($D(DTOUT)) S PSSASKQT=1 Q
 S PSSPDRUG=Y
 I 'PSSPDRUG Q
 K ^TMP($J,"ORDERS") D ENCHK^PSJORUT2(PSSTESTP,0) I $D(^TMP($J,"ORDERS")) D REBUILDI,CHECK
 D BLD^PSOOCPGX(PSSTESTP,90) I $D(^TMP($J,"ORDERS")) D REBUILD,CHECK
 S PSSNVAC=1
 S PSSNVAL="" F  S PSSNVAL=$O(^PS(55,PSSTESTP,"NVA",PSSNVAL)) Q:PSSNVAL=""  D
 .S PSSNVA0=$G(^PS(55,PSSTESTP,"NVA",PSSNVAL,0))
 .I $P(PSSNVA0,"^",6) Q
 .I $P(PSSNVA0,"^",7),$P(PSSNVA0,"^",7)<DT Q
 .I '$P(PSSNVA0,"^"),'$P(PSSNVA0,"^",2) Q
 .S PSSNVADG=$P(PSSNVA0,"^",2)
 .I 'PSSNVADG S PSSNVADG=+$$BDA^PSSPGXOR($P(PSSNVA0,"^"),"X")
 .I 'PSSNVADG Q
 .S PSSNVACP=$G(^PSDRUG(PSSNVADG,"ND"))
 .S ^TMP($J,"ORDERS",PSSNVAC)="^"_$P(PSSNVACP,"^")_"A"_$P(PSSNVACP,"^",3)_"^"_$P($G(^PSDRUG(PSSNVADG,0)),"^")_"^^"_PSSNVAC_"X;O"
 .S PSSNVAC=PSSNVAC+1
 I $D(^TMP($J,"ORDERS")) D CHECK
 W @IOF
 I '$D(PSSPGXDG) W !,"Patient does not have any pharmacogenomic eligible drugs",!,"on their medication profile.",! D PAUSE2^PSSPGXTS Q
 W !!?5,"PGx eligible drugs on the profile:",!
 D AL
 S PSSPPRF1="" F  S PSSPPRF1=$O(PSSLOCZZ(PSSPPRF1)) Q:PSSPPRF1=""!($G(PSSPGXQT))  D
 .S PSSPPRFP=PSSLOCZZ(PSSPPRF1) S PSSPPRFC=0 F PSSPPRFA=1:1:$L(PSSPPRFP) I $E(PSSPPRFP,PSSPPRFA)="^" S PSSPPRFC=PSSPPRFC+1
 .S PSSPPRFC=PSSPPRFC+1
 .S PSSPPRFZ="("
 .F PSSPPRFL=2:1:PSSPPRFC S PSSPPRFZ=PSSPPRFZ_$S(PSSPPRFL>2:", ",1:"")_$P(PSSPPRFP,"^",PSSPPRFL)
 .S PSSPPRFZ=PSSPPRFZ_")"
 .W !,PSSPPRF1_"  "_PSSPPRFZ
 .D PAUSE4^PSSPGXTS
 K PSSLOCZZ
 S PSSASKQT=0
 S DIR(0)="Y",DIR("?")=" ",DIR("?",1)="Enter 'YES' to add additional drugs to the current profile list,"
 S DIR("?",2)="enter 'NO' to use only the profile list for the drug input."
 S DIR("A")="Do you want to add drugs to the list above",DIR("B")="Y"
 W ! D ^DIR K DIR I Y["^"!($D(DUOUT))!($D(DTOUT)) S PSSASKQT=1 Q
 S PSSNOADD=$S(Y:0,1:1)
 Q
 ;
CHECK  ;
 N PSSPXPDX,PSSPXPDA,PSSPXPDC,PSSPXPDW,PSSPXPDN,PSSPXPGC,PSSPXPPK,PSSPXPNM,PSSPXPVP,PSSPXPOD,PSSTMPNM
 S PSSPXPDX="" F  S PSSPXPDX=$O(^TMP($J,"ORDERS",PSSPXPDX)) Q:PSSPXPDX=""  D
 .S PSSPXPDA=$G(^TMP($J,"ORDERS",PSSPXPDX))
 .S PSSPXPPK=$P(PSSPXPDA,"^",5),PSSPXPNM=$P(PSSPXPDA,"^",3)
 .S PSSPXPPK=$S(PSSPXPPK["U;I":"UD",PSSPXPPK["P;I":"Pending Inp.",PSSPXPPK["V;I":"IV",PSSPXPPK["P;O":"Pending Out.",PSSPXPPK["R;O":"Rx",PSSPXPPK["X;O":"Non-VA",1:"")
 .S PSSPXPDC=$P(PSSPXPDA,"^",2),PSSPXPDW=$P(PSSPXPDC,"A"),PSSPXPDN=$P(PSSPXPDC,"A",2)  I 'PSSPXPDN!('PSSPXPDW) Q
 .I '$P($$PGX^PSNAPIS(PSSPXPDX,PSSPXPDN),"^") Q
 .S PSSPXPOD=$$PROD0^PSNAPIS(PSSPXPDX,PSSPXPDN)
 .S PSSPXPGC=+$P(PSSPXPOD,"^",7)
 .S PSSPXPVP=$P(PSSPXPOD,"^")
 .I PSSPXPGC D
 ..I $D(PSSPGXDG(PSSPXPGC,"GCN")) D  S PSSLOCNM(PSSPXPGC,"LOCNAME",PSSTMPNM)=$S(PSSLOCNM(PSSPXPGC,"LOCNAME",PSSTMPNM)[PSSPXPPK:PSSLOCNM(PSSPXPGC,"LOCNAME",PSSTMPNM),1:$G(PSSLOCNM(PSSPXPGC,"LOCNAME",PSSTMPNM))_"^"_PSSPXPPK) Q
 ...S PSSTMPNM=$O(PSSLOCNM(PSSPXPGC,"LOCNAME",""))
 ..S PSSPGXDG(PSSPXPGC,"GCN")=PSSPXPGC
 ..S PSSPGXVA(PSSPXPGC,"VAPROD")=PSSPXPVP
 ..S PSSPGXDG(PSSPXPGC,"DRUGNAME")=$G(PSSPXPNM)
 ..S PSSPGXDG(PSSPXPGC,"VUID")=$$GETVUID^XTID(50.68,,PSSPXPDN_",")
 ..S PSSLOCNM(PSSPXPGC,"LOCNAME",PSSPXPNM)="^"_PSSPXPPK
 K ^TMP($J,"ORDERS")
 Q
 ;
 ;
DISP ;
 N PSSPXL,PSSPTLAB,PSSGTBL,PSSGDT,PSSOUT,RETURN,PSSURL,PSSTXT
 S PSSOUT=$$GETPGXRESULTS^PSSHDPG1(PSSTESTP,.PSSPTLAB)
 I +PSSOUT=-1 W !!,"Pharmacogenomic Lab Data could not be retrieved at this time.",! D PAUSE2^PSSPGXTS Q
 D PTLAB^PSSPGX(.PSSPTLAB)
 D GENETBL^PSSPGX(.PSSGDT)
 I '$D(PSSGTBL) W !!,"Patient has no pharmacogenomic lab results.",! D PAUSE2^PSSPGXTS Q
 F PSSPXL=0:0 S PSSPXL=$O(PSSGTBL(PSSPXL)) Q:'PSSPXL!($G(PSSASKQT))  D
 .W !,PSSGTBL(PSSPXL) D PAUSE
 I '$G(PSSASKQT) W !!,"End of Gene list." D PAUSE2^PSSPGXTS
 S PSSASKQT=0
 Q
PAUSE ;
 I ($Y+5)'>IOSL Q
 W ! K DIR S DIR(0)="E",DIR("A")="Press Return to continue, '^' to exit list" D ^DIR K DIR I 'Y S PSSASKQT=1
 W @IOF
 Q
 ;
CONV ;Convert PSSGENES array to PSSGENE array
 N PSSCVX K PSSGENE
 S PSSCVX="" F  S PSSCVX=$O(PSSGENES(PSSCVX)) Q:PSSCVX=""  D
 .S PSSGENE(PSSCVX,"GENE")=""
 .S PSSGENE(PSSCVX,"ACTIVITY_SCORE")=$G(PSSGENES(PSSCVX,"ACTIVITY_SCORE"))
 .S PSSGENE(PSSCVX,"GENOTYPE")=$G(PSSGENES(PSSCVX,"GENOTYPE"))
 .S PSSGENE(PSSCVX,"PHENOTYPE")=$G(PSSGENES(PSSCVX,"PHENOTYPE"))
 Q
 ;
ACTSCR() ;Activity Score selection
PASS ;
 K DIR S PSSSCORE="",DIR("?")=" "
 S DIR("?",1)=" Enter the Activity Score, 1 to 30 characters. This can be a whole number,"
 S DIR("?",2)=" or a number with a decimal."
 S DIR(0)="FO^1:40",DIR("A")="Enter "_PSSGLP_" Activity Score"
 W ! D ^DIR I X=""!($D(DIRUT)) K X,DIR Q ""
 S X=$$UP^XLFSTR(X)
 I (X'?.N)&(X'?.N1".".N) W !!,"Invalid Activity Score." D PAUSE2^PSSPGXTS K X G PASS
 S PSSSCORE=X
 Q PSSSCORE
 ;
INTRO ;Show PGx eligible drugs
 N PSSINTRA,PSSINTRB,PSSINRC,DIR,X,Y,DTOUT,DUOUT,DIRUT,PSSPGXQL,PSSINTRC
 W !!,"   Drug selection ***Only PGx-eligible drugs are available for selection***",!
 K DIR S DIR(0)="Y",DIR("B")="N",DIR("A")="Do you want to see the PGx eligible drugs" D ^DIR I Y'=1 W ! Q
 W ! K ^TMP($J,"PSSPGXLS") S PSSPGXQL=0
 S PSSINTRA="" F  S PSSINTRA=$O(^PSNDF(50.68,"APGX",PSSINTRA)) Q:PSSINTRA=""  D
 .S PSSINTRB="" F  S PSSINTRB=$O(^PSDRUG("APR",PSSINTRA,PSSINTRB)) Q:PSSINTRB=""  D
 ..S ^TMP($J,"PSSPGXLS",$P(^PSDRUG(PSSINTRB,0),"^"))=""
 S PSSINTRC="" F  S PSSINTRC=$O(^TMP($J,"PSSPGXLS",PSSINTRC)) Q:PSSINTRC=""!(PSSPGXQL)  D
 .I ($Y+5)>IOSL D PAUSEL^PSSPGXTS
 .Q:PSSPGXQL
 .W !?5,PSSINTRC
 I 'PSSPGXQL K DIR W ! S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR
 W !
 K ^TMP($J,"PSSPGXLS")
 Q
 ;
AL ;Convert drug array to alpha sort PSSLOCZZ
 N PSSCALG,PSSCALG1
 K PSSLOCZZ
 S PSSCALG="" F  S PSSCALG=$O(PSSLOCNM(PSSCALG)) Q:PSSCALG=""  D
 .S PSSCALG1=$O(PSSLOCNM(PSSCALG,"LOCNAME",""))
 .;S PSSLOCZZ(PSSCALG1)=""
 .S PSSLOCZZ(PSSCALG1)=PSSLOCNM(PSSCALG,"LOCNAME",PSSCALG1)
 Q
 ;
RESET ;reset variables
 K DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,DIC,DLAYGO,PSSLTXT,PSSGENE,PSSVAR1,PSSVAR2,PSSGCT,PSSPGXRS,PSSPGXDC,PSSLOC,PSSLOCNM,PSSVAR4,PSSDRGCT,PSSERRG1,PSSERRG2,PSSERRG3,PSSERRG4,PSSERRG5,PSSERRG6,PSSERRG7,PSSERRGN,PSSERRGL
 K PSSPGXQT,PSSPGXDG,PSSPGXND,PSSPPROD,PSSDF1C,PSSGAR,PSSGLP,PSS50IEN,PSSDISPD,PSSDISPG,PSSPGXSV,PSSPGXAR,PSSPHAR,PSSPGXVA,PSSGLPH,PSSFDBFG,PSSOPTFG,PSSGTYPE,PSSLFEED,PSSGLOOP,PSSGVAL,PSSGVALT,PSSPHEN,PSSSCORE,PSSPGEND
 K PSSPDRUG,PSSASKQT,PSSTESTP,PSSGENES,PSSPERR,PSSNOADD,PSSLOCZZ,PSSPHDT
 S (PSSASKQT,PSSTESTP,PSSPDRUG,PSSGLOOP)=0
 S PSSPGEND=1
 Q
 ;
REBUILD ;rebuild TMP global for Outpatient
 N PSSWOI1,PSSWOI2,PSSWOI3,PSSWOI4,PSSWOI6,PSSWOI7,PSSWOI8,PSSWOI9,PSSWOIFL,PSSWOIKL,PSSWOIST,PSSWOIDG,PSSWOIND,PSSWOITM
 S PSSWOIFL=0
 S PSSWOI1="" F  S PSSWOI1=$O(^TMP($J,"ORDERS",PSSWOI1)) Q:PSSWOI1=""  D
 .S PSSWOI2=$G(^TMP($J,"ORDERS",PSSWOI1))
 .I $P(PSSWOI2,"^",5)'["P" Q
 .S PSSWOI3=+$P(PSSWOI2,"^",5) I 'PSSWOI3 Q
 .S PSSWOI4=$G(^PS(52.41,PSSWOI3,0))
 .I $P(PSSWOI4,"^",9) Q
 .S PSSWOITM=$P(PSSWOI4,"^",8) Q:'PSSWOITM
 .S PSSWOIFL=1
 .I $D(PSSWOIST(PSSWOITM)) S PSSWOIKL(PSSWOI1)="" Q
 .S PSSWOIST(PSSWOITM)=$$BDA^PSSPGXOR(PSSWOITM,"O")
 .S PSSWOIKL(PSSWOI1)=""
 I 'PSSWOIFL Q
 S PSSWOI6="" F  S PSSWOI6=$O(PSSWOIKL(PSSWOI6)) Q:PSSWOI6=""  K ^TMP($J,"ORDERS",PSSWOI6)
 S PSSWOI7="" F  S PSSWOI7=$O(^TMP($J,"ORDERS",PSSWOI7)) Q:PSSWOI7=""  S PSSWOI8=PSSWOI7
 I '$G(PSSWOI8) S PSSWOI8=0
 S PSSWOI8=PSSWOI8+1
 S PSSWOI9="" F  S PSSWOI9=$O(PSSWOIST(PSSWOI9)) Q:PSSWOI9=""  S PSSWOIDG=+PSSWOIST(PSSWOI9) I PSSWOIDG D
 .S PSSWOIND=$G(^PSDRUG(PSSWOIDG,"ND"))
 .S ^TMP($J,"ORDERS",PSSWOI8)="^"_$P(PSSWOIND,"^")_"A"_$P(PSSWOIND,"^",3)_"^"_$P($G(^PSDRUG(PSSWOIDG,0)),"^")_"^^"_PSSWOI8_"P;O"
 .S PSSWOI8=PSSWOI8+1
 Q
 ;
REBUILDI ;rebuild TMP global for Inpatient
 N PSSBOI1,PSSBOI2,PSSBOI3,PSSBOI6,PSSBOI7,PSSBOI8,PSSBOI9,PSSBOIFL,PSSBOIKL,PSSBOITM,PSSBOIND,PSSBOIDG,PSSBOIST
 S PSSBOIFL=0
 S PSSBOI1="" F  S PSSBOI1=$O(^TMP($J,"ORDERS",PSSBOI1)) Q:PSSBOI1=""  D
 .S PSSBOI2=$G(^TMP($J,"ORDERS",PSSBOI1))
 .I $P(PSSBOI2,"^",5)'["P;I" Q
 .S PSSBOI3=+$P(PSSBOI2,"^",5) I 'PSSBOI3 Q
 .I $P($G(^PS(53.1,PSSBOI3,0)),"^",4)'="U" Q
 .I $O(^PS(53.1,PSSBOI3,1,0)) Q
 .S PSSBOITM=$P($G(^PS(53.1,PSSBOI3,.2)),"^") Q:'PSSBOITM
 .S PSSBOIFL=1
 .I $D(PSSBOIST(PSSBOITM)) S PSSBOIKL(PSSBOI1)="" Q
 .S PSSBOIST(PSSBOITM)=$$BDA^PSSPGXOR(PSSBOITM,"U")
 .S PSSBOIKL(PSSBOI1)=""
 I 'PSSBOIFL Q
 S PSSBOI6="" F  S PSSBOI6=$O(PSSBOIKL(PSSBOI6)) Q:PSSBOI6=""  K ^TMP($J,"ORDERS",PSSBOI6)
 S PSSBOI7="" F  S PSSBOI7=$O(^TMP($J,"ORDERS",PSSBOI7)) Q:PSSBOI7=""  S PSSBOI8=PSSBOI7
 I '$G(PSSBOI8) S PSSBOI8=0
 S PSSBOI8=PSSBOI8+1
 S PSSBOI9="" F  S PSSBOI9=$O(PSSBOIST(PSSBOI9)) Q:PSSBOI9=""  S PSSBOIDG=+PSSBOIST(PSSBOI9) I PSSBOIDG D
 .S PSSBOIND=$G(^PSDRUG(PSSBOIDG,"ND"))
 .S ^TMP($J,"ORDERS",PSSBOI8)="^"_$P(PSSBOIND,"^")_"A"_$P(PSSBOIND,"^",3)_"^"_$P($G(^PSDRUG(PSSBOIDG,0)),"^")_"^^"_PSSBOI8_"P;I"
 .S PSSBOI8=PSSBOI8+1
 Q