- PSSDIUTL ;HP/MJE - Drug Interaction Utility ;09/22/11 5:00pm
- ;;1.0;PHARMACY DATA MANAGEMENT;**169,175,199**;9/30/97;Build 2
- ;Reference ^PSDRUG supported by DBIA 221
- ;Reference to XTID is supported DBIS 4631
- ;Reference to IN^PSSHRQ2 supported by DBIA 5369
- CHKFDB ;ping FDB
- N BASE
- S BASE="PINGTST^"_$T(+0)
- K ^TMP($J,BASE),DRGLST
- S ^TMP($J,BASE,"IN","PING")=""
- D IN^PSSHRQ2(BASE)
- D:$G(^TMP($J,BASE,"OUT",0))'=0 Q:$G(^TMP($J,BASE,"OUT",0))'=0
- .S DIR(0)="E",DIR("A",1)="The FDB database is not available at this time!"
- .S DIR("A",2)="Reason: "_$P($G(^TMP($J,BASE,"OUT",0)),"^",2)
- .S DIR("A",4)="Please contact the National Service Desk."
- .S DIR("A",5)=""
- .S DIR("A")="Press Return to continue...",DIR("?")="Press Return to continue"
- .W ! D ^DIR K DIRUT,DUOUT,DIR,X,Y W @IOF
- K ^TMP($J,BASE),BASE
- N NUM,MON,TEXTSTR S DRGLST=0,NUM=1,TEXTSTR="",PSSDGCK=1 N ID,ORTYP,NDF,DRUG,ON,PSONULN,PSONULN2 S $P(PSONULN,"-",60)="-",$P(PSONULN2,"=",60)="="
- K ^TMP($J)
- SELECT ;
- K:'$G(PSORXED) CLOZPAT
- K IT,DIC,X,Y,PSODRUG("TRADE NAME"),PSODRUG("NDC"),PSODRUG("DAW"),PSODRUG("BAD") S:$G(POERR)&($P($G(OR0),"^",9)) Y=$P(^PSDRUG($P(OR0,"^",9),0),"^")
- I $G(PSODRUG("IEN"))]"" S Y=PSODRUG("NAME"),PSONEW("OLD VAL")=PSODRUG("IEN")
- W !,"Drug "_NUM_": "_$S($G(Y)]"":Y_"// ",1:"") R X:$S($D(DTIME):DTIME,1:300) I '$T S DTOUT=1
- I X="",$G(Y)]"" S:Y X=Y S:'X X=$G(PSODRUG("IEN")) S:X X="`"_X
- I X="",DRGLST>1 W !!,"Now Processing Enhanced Order Checks! Please wait...",! H 1 G FDBCALL
- I X="",DRGLST<2 W !!,"A minimum of 2 Drugs are required!",! G SELECT
- I X?1."?" W !!,"Answer with DRUG NUMBER, or GENERIC NAME, or VA PRODUCT NAME, or",!,"NATIONAL DRUG CLASS, or SYNONYM" G SELECT
- I $G(PSORXED),X["^" S PSORXED("DFLG")=1 W ! G SELECTX
- I X="^"!(X["^^")!($D(DTOUT)) W ! G SELECTX
- S DIC=50,DIC(0)="EMQZVT",DIC("T")="",D="B^C^VAPN^VAC"
- S DIC("S")="I $S('$D(^PSDRUG(+Y,""I"")):1,'^(""I""):1,DT'>^(""I""):1,1:0),$$GCN^PSSDIUTL(+Y),$$PKGFLG^PSSDIUTL($P($G(^PSDRUG(+Y,2)),""^"",3)),$D(^PSDRUG(""ASP"",+$G(^(2)),+Y))"
- D MIX^DIC1 K DIC,PKF2,D
- I $D(DTOUT) G SELECTX
- I $D(DUOUT) K DUOUT G SELECT
- I Y<0 G SELECT
- S:$G(PSONEW("OLD VAL"))=+Y&('$G(PSOEDIT)) PSODRG("QFLG")=1
- K PSOY S PSOY=Y,PSOY(0)=Y(0)
- I $P(PSOY(0),"^")="OTHER DRUG"!($P(PSOY(0),"^")="OUTSIDE DRUG") D TRADE
- G:Y<0 SELECT
- F DRGLSTI=0:0 S DRGLSTI=$O(DRGLST(DRGLSTI)) Q:'DRGLSTI D
- .I DRGLSTI=+Y S DRGLSTF=1
- I $D(DRGLSTF) S NUM=DRGLST+1 K DRGLSTF W !!,"You have selected a duplicate drug please enter a different drug.." K DIR,DRGLSTI,Y S DIR(0)="E",DIR("A")="Press Return to Continue..." W ! D ^DIR K DIR G SELECT
- S DRGLST=$G(DRGLST)+1,DRGLST(+Y)=Y_"^"_DRGLST,NUM=NUM+1 G SELECT
- SELECTX K DIC,X,Y,DTOUT,DUOUT,PSONEW("OLD VAL"),DRGLST
- Q
- GCN(PSSIENID) ;Return 0 for not matched, 1 for matched with no GCNSEQNO, 1^1 for matched with a GCNSEQNO
- N PSSNDFID,PSSGCNPT,PSSGCNID
- S PSSNDFID=$P($G(^PSDRUG(PSSIENID,"ND")),"^"),PSSGCNPT=$P($G(^PSDRUG(PSSIENID,"ND")),"^",3)
- I 'PSSNDFID!('PSSGCNPT) Q 0
- S PSSGCNID=$$PROD0^PSNAPIS(PSSNDFID,PSSGCNPT)
- I $P(PSSGCNID,"^",7) Q PSSIENID_";"_PSSNDFID_";"_$P(PSSGCNID,"^",7)
- Q PSSIENID_";"_PSSNDFID
- PKGFLG(PKF2) ;
- I $S(PKF2["O":1,1:0) Q 1
- I $S(PKF2["X":1,1:0) Q 1
- I $S(PKF2["U":1,1:0) Q 1
- I $S(PKF2["I":1,1:0) Q 1
- Q 0
- TRADE ;
- K DIR,DIC,DA,X,Y
- S DIR(0)="52,6.5" S:$G(PSOTRN)]"" DIR("B")=$G(PSOTRN) D ^DIR K DIR,DIC
- I X="@" S Y=X K DIRUT
- I $D(DIRUT) S:$D(DUOUT)!$D(DTOUT)&('$D(PSORX("EDIT"))) PSONEW("DFLG")=1 G TRADEX
- S PSODRUG("TRADE NAME")=Y
- TRADEX I $G(PSORXED("DFLG")),$D(DIRUT) S PSORXED("DFLG")=1
- K DIRUT,DTOUT,DUOUT,X,Y,DA,DR,DIE Q
- FDBCALL S LIST="PSOPEPS",^TMP($J,LIST,"IN","DRUGDRUG")=""
- F I=0:0 S I=$O(DRGLST(I)) Q:'I D
- .S DIEN=$P(DRGLST(I),"^"),DNM=$P(DRGLST(I),"^",2),ON="Z;"_$P(DRGLST(I),"^",3)_";PROSPECTIVE;"_$P(DRGLST(I),"^",3)
- .K ID,P1,P2 S ID=+$$GETVUID^XTID(50.68,,+$P($G(^PSDRUG(DIEN,"ND")),"^",3)_",")
- .S:ID=0 PSODRUG("IEN")=DIEN
- .S P1=$P($G(^PSDRUG(DIEN,"ND")),"^"),P2=$P($G(^("ND")),"^",3),X=$$PROD0^PSNAPIS(P1,P2)
- .S SEQN=$P(X,"^",7)
- .S ^TMP($J,LIST,"IN","PROSPECTIVE",ON)=SEQN_"^"_ID_"^"_DIEN_"^"_DNM K ID
- S ^TMP($J,LIST,"IN","THERAPY")=""
- D IN^PSSHRQ2(LIST)
- S THSW2=0
- I +$G(^TMP($J,LIST,"OUT",0))=1 D PROC
- I '$G(^TMP($J,LIST,"OUT",0)) W !,"No drug interactions or therapeutic duplication occurred." W ! K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR G EXIT
- I +$G(^TMP($J,LIST,"OUT",0))=-1 W !,"Error: "_$P(^TMP($J,"PSOPEPS","OUT",0),"^",2),! G EXIT
- G:'$D(^TMP($J,"PSOPEPS","OUT","THERAPY")) RMON
- W !,PSONULN2 K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- RMON I $G(MON) D MON I $G(X)="" W ! D RMON
- EXIT ;
- K DRGLST,DIC,X,Y,ID,ORTYP,DIEN,DNM,PSONULN,PSSDGCK,MON,^TMP($J),LIST,PSODRUG("IEN") Q
- PROC ;
- I $D(PSODGCK) N PSONULN,PSONULN2,THSW2 S $P(PSONULN,"-",60)="-",$P(PSONULN2,"=",60)="=",THSW2=0
- W @IOF K ^UTILITY($J) I $O(^TMP($J,LIST,"OUT","EXCEPTIONS",""))]"" D EXC^PSODDPR5
- I '$D(^TMP($J,LIST,"OUT","DRUGDRUG"))&'$D(^TMP($J,LIST,"OUT","THERAPY",1)) W !,"No Order Check Warnings Found",! K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- I $D(PSODGCK),'$D(^TMP($J,LIST,"OUT","DRUGDRUG")),$D(^TMP($J,"PSOPEPS","OUT","THERAPY")) G DGCKTHER
- D DELDISC^PSSDIUTX I $D(^TMP($J,LIST,"OUT","DRUGDRUG")) W !,"*** DRUG INTERACTION(S) ***",!,PSONULN2,!
- N DRG,ON,CT,DRGI,PDRG,SEV,SEVH,STX,INT,CLI,PDRG S (ON,DRG,SV)="",CT=0,SEVH="Critical"
- F S SV=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV)) Q:SV="" F S DRG=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG)) Q:DRG="" D
- .F S ON=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON)) Q:ON="" F S CT=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT)) Q:'CT D DUP
- I $D(^TMP($J,LIST,"OUT","DRUGDRUG")) W !,PSONULN2 K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR ;(end of inter data)
- DGCKTHER I $D(^TMP($J,"PSOPEPS","OUT","THERAPY")) W @IOF W PSONULN2,!,"*** THERAPEUTIC DUPLICATION(S) ***",! D THER
- I $D(PSODGCK),'$D(^TMP($J,LIST,"OUT","DRUGDRUG")),$D(^TMP($J,"PSOPEPS","OUT","THERAPY")) K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." W ! D ^DIR K DIR W @IOF Q
- DGCKMON I $D(PSODGCK),$D(^TMP($J,LIST,"OUT","DRUGDRUG")),$G(MON) D MON I $G(X)="" W ! D DGCKMON
- Q
- THER ;
- S (THR,THR1,THR2,TCTR,TCLSTR)="" S TALWNUM=0 N TLN,TLN2 S $P(TLN,"=",60)="",$P(TLN2,"-",60)="" S THSW=0
- F S THR=$O(^TMP($J,LIST,"OUT","THERAPY",THR)) Q:THR="" D
- .S THR1="",TCLSTR=""
- .F S THR1=$O(^TMP($J,LIST,"OUT","THERAPY",THR,THR1)) Q:THR1="" D
- ..S TALWNUM=TALWNUM+$G(^TMP($J,LIST,"OUT","THERAPY",THR,THR1,"ALLOW"))
- ..S TCLSTR=TCLSTR_$G(^TMP($J,LIST,"OUT","THERAPY",THR,THR1,"CLASS"))
- ..S:+$O(^TMP($J,LIST,"OUT","THERAPY",THR,THR1))'=0 TCLSTR=TCLSTR_", "
- .I TALWNUM=0 I ($Y+8)>IOSL,$E(IOST)="C" D
- ..K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- .W:THSW !,TLN2 S THSW=1
- .I TALWNUM=0 D
- ..F S TCTR=$O(^TMP($J,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)) Q:TCTR="" D
- ...W !,?12,"Drug Name: ",$$THOSTAT^PSSCKOS($P($G(^TMP($J,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)),U,3),THR,TCTR)
- ..W !,!,"Duplication Allowance: 0",!,?11,"Drug Class: "
- ..I $L(TCLSTR)>50 D
- ...K BSIG N BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- ...S BBSIG=TCLSTR,(BVAR,BVAR1)="",III=1
- ...S ZNT=0 F NNN=1:1:$L(BBSIG) I $E(BBSIG,NNN)=" "!($L(BBSIG)=NNN) S ZNT=ZNT+1 D I $L(BVAR)>50 S BSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1
- ....S BVAR1=$P(BBSIG," ",(ZNT)),BLIM=BVAR,BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- ...I $G(BVAR)'="" S BSIG(III)=BVAR
- ...I $G(BSIG(1))=""!($G(BSIG(1))=" ") S BSIG(1)=$G(BSIG(2)) K BSIG(2)
- ..I $L(TCLSTR)>50 D
- ...S I=""
- ...F S I=$O(BSIG(I)) Q:'I D
- ....W:I=1 BSIG(I),! W:I>1 ?23,BSIG(I)
- ..E D
- ...W TCLSTR
- .I TALWNUM>0 D
- ..S THR2="",TCLSTR=""
- ..F S THR2=$O(^TMP($J,LIST,"OUT","THERAPY",THR,THR2)) Q:+THR2=0 D
- ...F S TCTR=$O(^TMP($J,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)) Q:TCTR="" D
- ....W !,?12,"Drug Name: ",$$THOSTAT^PSSCKOS($P($G(^TMP($J,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)),U,3),THR,TCTR)
- ...W !,!,"Duplication Allowance: ",$G(^TMP($J,LIST,"OUT","THERAPY",THR,THR2,"ALLOW"))
- ...K TCLSTR S TCLSTR=^TMP($J,LIST,"OUT","THERAPY",THR,THR2,"CLASS")
- ...W !,?11,"Drug Class: "
- ...I $L(TCLSTR)>50 D
- ....K BSIG N BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- ....S BBSIG=TCLSTR,(BVAR,BVAR1)="",III=1
- ....S ZNT=0 F NNN=1:1:$L(BBSIG) I $E(BBSIG,NNN)=" "!($L(BBSIG)=NNN) S ZNT=ZNT+1 D I $L(BVAR)>50 S BSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1
- .....S BVAR1=$P(BBSIG," ",(ZNT)),BLIM=BVAR,BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- ....I $G(BVAR)'="" S BSIG(III)=BVAR
- ....I $G(BSIG(1))=""!($G(BSIG(1))=" ") S BSIG(1)=$G(BSIG(2)) K BSIG(2)
- ...I $L(TCLSTR)>50 D
- ....S I=""
- ....F S I=$O(BSIG(I)) Q:'I D
- .....I ($Y+6)>IOSL,$E(IOST)="C" D
- ......K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- .....W:I=1 BSIG(I),! W:I>1 ?23,BSIG(I),!
- ...E D
- ....W TCLSTR,!
- ...I ($Y+6)>IOSL,$E(IOST)="C" D
- ....K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR
- Q
- DUP ;
- N PDRGN,DRGN S PDRGN="",DRGN=""
- I ($Y+8)>IOSL,$E(IOST)="C" D
- .K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- I $O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"PMON",0)) S MON=1
- S PDRG=$P(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT),"^",4)
- S CLI=$G(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"CLIN"))
- S SEV=$G(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"SEV"))
- S:SEVH'=SEV PSONULN="",$P(PSONULN,"=",60)="="
- I ($Y+6)>IOSL,$E(IOST)="C" D
- .K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR
- W:THSW2 PSONULN,! S THSW2=1
- SET PDRGN=$$POSTAT^PSSCKOS(DRG,PDRG,SV,ON,CT),DRGN=$$OSTAT^PSSCKOS(DRG,ON)
- W "***"_SEV_"*** Drug Interaction with ",!,DRGN_" and" W:SEV="Critical" !,PDRGN,!! W:SEV="Significant" !,PDRGN,!!
- S:SEVH'=SEV PSONULN="",$P(PSONULN,"-",60)="-"
- S SEVH=SEV
- I $L(CLI)>70 D
- .K BSIG N BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- .S BBSIG=CLI,(BVAR,BVAR1)="",III=1
- .S ZNT=0 F NNN=1:1:$L(BBSIG) I $E(BBSIG,NNN)=" "!($L(BBSIG)=NNN) S ZNT=ZNT+1 D I $L(BVAR)>70 S BSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1
- ..S BVAR1=$P(BBSIG," ",(ZNT)),BLIM=BVAR,BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- .I $G(BVAR)'="" S BSIG(III)=BVAR
- .I $G(BSIG(1))=""!($G(BSIG(1))=" ") S BSIG(1)=$G(BSIG(2)) K BSIG(2)
- I $L(CLI)>70 D
- .S I=""
- .F S I=$O(BSIG(I)) Q:'I D
- ..W BSIG(I),!
- E D
- .W CLI,!
- K BSIG,BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- Q
- MON ;
- I '$G(DUOUT) W ! K DIR S DIR("A")="Display Professional Interaction Monograph",DIR("B")="NO",DIR(0)="Y",DIR("?")="Enter Y if you would like to see the Monograph." D ^DIR W !
- I X="^"!(X["^^")!($D(DTOUT)) Q
- K SEL,DIR,DTOUT,DUOUT,DIRUT Q:Y=0
- S MONT=1,SEL=1 K Y D BLD Q:$G(SEL)=0
- K IOP,%ZIS,POP S %ZIS="QM" W ! D ^%ZIS
- I POP K SEL,DIR,DTOUT,DUOUT,DIRUT,MONT W !,"NOTHING PRINTED" G MON
- I $D(IO("Q")) D Q
- .S ZTRTN="OUT^PSOIDPRE",ZTDESC="Monograph Report of Drug Interactions",ZTSAVE("MONT")=""
- .S ZTSAVE("PSONULN")="",ZTSAVE("LIST")="",ZTSAVE("^TMP($J,LIST,""OUT"",""DRUGDRUG"",")="",ZTSAVE("^TMP($J,""PSOMONP"",")=""
- .D ^%ZTLOAD,^%ZISC W !,"Monograph Queued to Print!",! S:$D(ZTQUEUED) ZTREQ="Q"
- D OUT,^%ZISC
- W ! G:Y'=0 MON
- Q
- OUT ;print monograph
- N DRG,ON,CT,DRGI,PDRG,SEV,STX,INT,CLI,PDRG,RNG,QX
- D:MONT=1 PROF D:MONT=2 CON D:MONT=3 PROF
- Q
- BLD ;
- K SEL,X,Y,DRG,ON,CT,RNG,^TMP($J,"PSOMON"),^TMP($J,"PSOMONP") S (DRG,ON,SV)="",CT=0
- F S SV=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV)) Q:SV="" F S DRG=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG)) Q:DRG="" F S ON=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON)) Q:ON="" D
- .F S CT=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT)) Q:'CT I $O(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"PMON",0)) D
- ..S RNG=$G(RNG)+1
- ..S ^TMP($J,"PSOMON",RNG,DRG)=DRG_"^"_ON_"^"_CT_"^"_$P(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT),"^",4)_"^"_$G(^TMP($J,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"SEV"))
- I '$D(^TMP($J,"PSOMON",2)) S Y=1 G ONEMONO
- K DIR S IND=0,DRG=""
- ;F S IND=$O(^TMP($J,"PSOMON",IND)) Q:'IND F S DRG=$O(^TMP($J,"PSOMON",IND,DRG)) Q:DRG="" S DIR("A",IND)=IND_". "_DRG_" and "_$P(^TMP($J,"PSOMON",IND,DRG),"^",4) S DIR("A",IND+1)=""
- F S IND=$O(^TMP($J,"PSOMON",IND)) Q:'IND F S DRG=$O(^TMP($J,"PSOMON",IND,DRG)) Q:DRG="" D
- .I ($Y+6)>IOSL,$E(IOST)="C" D
- ..W ! K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
- .W !,IND_". "_DRG_" and "_$P(^TMP($J,"PSOMON",IND,DRG),"^",4)
- W ! S DIR("A")="Select Monograph for printing by number",DIR(0)="LO^1:"_RNG D ^DIR K DIR
- I $D(DUOUT)!($D(DTOUT))!(X="^")!(X="") S SEL=0 Q
- ONEMONO F G=1:1:$L(Y) Q:$P(Y,",",G)="" S DRG=$O(^TMP($J,"PSOMON",$P(Y,",",G),"")),^TMP($J,"PSOMONP",$P(Y,",",G),0)=^TMP($J,"PSOMON",$P(Y,",",G),DRG)
- K ^TMP($J,"PSOMON")
- Q
- ;
- NEWPG ;new page form feed
- N DIR
- S DIR(0)="E",DIR("A")="Press Return to Continue or ""^"" to Exit"
- D ^DIR Q:($D(DUOUT)!($D(DTOUT)))
- W @IOF,$S($G(MONT)=2:"Consumer",1:"Professional")_" Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- Q
- ;
- FORMAT ; WATCH OUT WITH CHANGES HERE!!!
- K BSIG,XX N BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- I $L(TEXTSTR)'>70 D
- . W ?5,TEXTSTR,!
- I $L(TEXTSTR)>70 D
- .S BBSIG=TEXTSTR,(BVAR,BVAR1)="",III=1
- .S ZNT=0 F NNN=1:1:$L(BBSIG) I $E(BBSIG,NNN)=" "!($L(BBSIG)=NNN) S ZNT=ZNT+1 D I $L(BVAR)>70 S BSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1
- ..S BVAR1=$P(BBSIG," ",(ZNT)),BLIM=BVAR,BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- .I $G(BVAR)'="" S BSIG(III)=BVAR
- .I $G(BSIG(1))=""!($G(BSIG(1))=" ") S BSIG(1)=$G(BSIG(2)) K BSIG(2)
- F XX=0:0 S XX=$O(BSIG(XX)) Q:'XX D Q:($D(DUOUT)!($D(DTOUT)))
- . I $Y+6>IOSL,$E(IOST)="C" D NEWPG Q:($D(DUOUT)!($D(DTOUT)))
- . W ?5,BSIG(XX),!
- K BSIG,BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM S TEXTSTR=""
- Q
- PROF ;
- F I=0:0 S I=$O(^TMP($J,"PSOMONP",I)) Q:'I S DRG=$P(^TMP($J,"PSOMONP",I,0),"^"),ON=$P(^(0),"^",2),CT=$P(^(0),"^",3),PDRG=$P(^(0),"^",4),SEV=$E($P(^(0),"^",5),1,1) D Q:$D(DUOUT)!($D(DTOUT))
- .U IO W @IOF,!,PSONULN,!,"Professional Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- .F QX=0:0 S QX=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"PMON",QX)) Q:'QX D Q:($D(DUOUT)!($D(DTOUT)))
- ..I $Y+6>IOSL,$E(IOST)="C" D NEWPG Q:($D(DUOUT)!($D(DTOUT)))
- ..S TEXTSTR=^TMP($J,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"PMON",QX,0) D FORMAT
- ..I ($Y+6)>IOSL,$E(IOST)="C" W !
- Q:($D(DUOUT)!($D(DTOUT)))
- K DTOUT,DUOUT
- D:MONT=3
- .U IO W @IOF,!,PSONULN,!,"Consumer Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!
- .F QX=0:0 S QX=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX)) Q:'QX D Q:($D(DUOUT)!($D(DTOUT)))
- ..I $Y+6>IOSL,$E(IOST)="C" D NEWPG Q:($D(DUOUT)!($D(DTOUT)))
- ..W !?5,^TMP($J,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX,0)
- W !,PSONULN,!
- K DTOUT,DUOUT I $E(IOST)="C" K DIR S DIR(0)="E" D ^DIR K DIR,DTOUT,DUOUT
- Q
- CON F I=0:0 S I=$O(^TMP($J,"PSOMONP",I)) Q:'I S DRG=$P(^TMP($J,"PSOMONP",I,0),"^"),ON=$P(^(0),"^",2),CT=$P(^(0),"^",3),PDRG=$P(^(0),"^",4),SEV=$P(^(0),"^",5) D Q:$D(DUOUT)!($D(DTOUT))
- .U IO W @IOF,!,"Consumer Monograph",!,PSONULN,!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- .F QX=0:0 S QX=$O(^TMP($J,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX)) Q:'QX D Q:($D(DUOUT)!($D(DTOUT)))
- ..I $Y+6>IOSL,$E(IOST)="C" D NEWPG Q:($D(DUOUT)!($D(DTOUT)))
- ..W !?5,^TMP($J,LIST,"OUT","DRUGDRUG",DRG,ON,CT,"CMON",QX,0)
- I '$G(DUOUT) W !,PSONULN,!
- K DTOUT,DUOUT I $E(IOST)="C" K DIR S DIR(0)="E",DIR("A")="Press Return to Continue..." D ^DIR K DIR,DTOUT,DUOUT
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSSDIUTL 15514 printed Feb 18, 2025@23:56:55 Page 2
- PSSDIUTL ;HP/MJE - Drug Interaction Utility ;09/22/11 5:00pm
- +1 ;;1.0;PHARMACY DATA MANAGEMENT;**169,175,199**;9/30/97;Build 2
- +2 ;Reference ^PSDRUG supported by DBIA 221
- +3 ;Reference to XTID is supported DBIS 4631
- +4 ;Reference to IN^PSSHRQ2 supported by DBIA 5369
- CHKFDB ;ping FDB
- +1 NEW BASE
- +2 SET BASE="PINGTST^"_$TEXT(+0)
- +3 KILL ^TMP($JOB,BASE),DRGLST
- +4 SET ^TMP($JOB,BASE,"IN","PING")=""
- +5 DO IN^PSSHRQ2(BASE)
- +6 if $GET(^TMP($JOB,BASE,"OUT",0))'=0
- Begin DoDot:1
- +7 SET DIR(0)="E"
- SET DIR("A",1)="The FDB database is not available at this time!"
- +8 SET DIR("A",2)="Reason: "_$PIECE($GET(^TMP($JOB,BASE,"OUT",0)),"^",2)
- +9 SET DIR("A",4)="Please contact the National Service Desk."
- +10 SET DIR("A",5)=""
- +11 SET DIR("A")="Press Return to continue..."
- SET DIR("?")="Press Return to continue"
- +12 WRITE !
- DO ^DIR
- KILL DIRUT,DUOUT,DIR,X,Y
- WRITE @IOF
- End DoDot:1
- if $GET(^TMP($JOB,BASE,"OUT",0))'=0
- QUIT
- +13 KILL ^TMP($JOB,BASE),BASE
- +14 NEW NUM,MON,TEXTSTR
- SET DRGLST=0
- SET NUM=1
- SET TEXTSTR=""
- SET PSSDGCK=1
- NEW ID,ORTYP,NDF,DRUG,ON,PSONULN,PSONULN2
- SET $PIECE(PSONULN,"-",60)="-"
- SET $PIECE(PSONULN2,"=",60)="="
- +15 KILL ^TMP($JOB)
- SELECT ;
- +1 if '$GET(PSORXED)
- KILL CLOZPAT
- +2 KILL IT,DIC,X,Y,PSODRUG("TRADE NAME"),PSODRUG("NDC"),PSODRUG("DAW"),PSODRUG("BAD")
- if $GET(POERR)&($PIECE($GET(OR0),"^",9))
- SET Y=$PIECE(^PSDRUG($PIECE(OR0,"^",9),0),"^")
- +3 IF $GET(PSODRUG("IEN"))]""
- SET Y=PSODRUG("NAME")
- SET PSONEW("OLD VAL")=PSODRUG("IEN")
- +4 WRITE !,"Drug "_NUM_": "_$SELECT($GET(Y)]"":Y_"// ",1:"")
- READ X:$SELECT($DATA(DTIME):DTIME,1:300)
- IF '$TEST
- SET DTOUT=1
- +5 IF X=""
- IF $GET(Y)]""
- if Y
- SET X=Y
- if 'X
- SET X=$GET(PSODRUG("IEN"))
- if X
- SET X="`"_X
- +6 IF X=""
- IF DRGLST>1
- WRITE !!,"Now Processing Enhanced Order Checks! Please wait...",!
- HANG 1
- GOTO FDBCALL
- +7 IF X=""
- IF DRGLST<2
- WRITE !!,"A minimum of 2 Drugs are required!",!
- GOTO SELECT
- +8 IF X?1."?"
- WRITE !!,"Answer with DRUG NUMBER, or GENERIC NAME, or VA PRODUCT NAME, or",!,"NATIONAL DRUG CLASS, or SYNONYM"
- GOTO SELECT
- +9 IF $GET(PSORXED)
- IF X["^"
- SET PSORXED("DFLG")=1
- WRITE !
- GOTO SELECTX
- +10 IF X="^"!(X["^^")!($DATA(DTOUT))
- WRITE !
- GOTO SELECTX
- +11 SET DIC=50
- SET DIC(0)="EMQZVT"
- SET DIC("T")=""
- SET D="B^C^VAPN^VAC"
- +12 SET DIC("S")="I $S('$D(^PSDRUG(+Y,""I"")):1,'^(""I""):1,DT'>^(""I""):1,1:0),$$GCN^PSSDIUTL(+Y),$$PKGFLG^PSSDIUTL($P($G(^PSDRUG(+Y,2)),""^"",3)),$D(^PSDRUG(""ASP"",+$G(^(2)),+Y))"
- +13 DO MIX^DIC1
- KILL DIC,PKF2,D
- +14 IF $DATA(DTOUT)
- GOTO SELECTX
- +15 IF $DATA(DUOUT)
- KILL DUOUT
- GOTO SELECT
- +16 IF Y<0
- GOTO SELECT
- +17 if $GET(PSONEW("OLD VAL"))=+Y&('$GET(PSOEDIT))
- SET PSODRG("QFLG")=1
- +18 KILL PSOY
- SET PSOY=Y
- SET PSOY(0)=Y(0)
- +19 IF $PIECE(PSOY(0),"^")="OTHER DRUG"!($PIECE(PSOY(0),"^")="OUTSIDE DRUG")
- DO TRADE
- +20 if Y<0
- GOTO SELECT
- +21 FOR DRGLSTI=0:0
- SET DRGLSTI=$ORDER(DRGLST(DRGLSTI))
- if 'DRGLSTI
- QUIT
- Begin DoDot:1
- +22 IF DRGLSTI=+Y
- SET DRGLSTF=1
- End DoDot:1
- +23 IF $DATA(DRGLSTF)
- SET NUM=DRGLST+1
- KILL DRGLSTF
- WRITE !!,"You have selected a duplicate drug please enter a different drug.."
- KILL DIR,DRGLSTI,Y
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- WRITE !
- DO ^DIR
- KILL DIR
- GOTO SELECT
- +24 SET DRGLST=$GET(DRGLST)+1
- SET DRGLST(+Y)=Y_"^"_DRGLST
- SET NUM=NUM+1
- GOTO SELECT
- SELECTX KILL DIC,X,Y,DTOUT,DUOUT,PSONEW("OLD VAL"),DRGLST
- +1 QUIT
- GCN(PSSIENID) ;Return 0 for not matched, 1 for matched with no GCNSEQNO, 1^1 for matched with a GCNSEQNO
- +1 NEW PSSNDFID,PSSGCNPT,PSSGCNID
- +2 SET PSSNDFID=$PIECE($GET(^PSDRUG(PSSIENID,"ND")),"^")
- SET PSSGCNPT=$PIECE($GET(^PSDRUG(PSSIENID,"ND")),"^",3)
- +3 IF 'PSSNDFID!('PSSGCNPT)
- QUIT 0
- +4 SET PSSGCNID=$$PROD0^PSNAPIS(PSSNDFID,PSSGCNPT)
- +5 IF $PIECE(PSSGCNID,"^",7)
- QUIT PSSIENID_";"_PSSNDFID_";"_$PIECE(PSSGCNID,"^",7)
- +6 QUIT PSSIENID_";"_PSSNDFID
- PKGFLG(PKF2) ;
- +1 IF $SELECT(PKF2["O":1,1:0)
- QUIT 1
- +2 IF $SELECT(PKF2["X":1,1:0)
- QUIT 1
- +3 IF $SELECT(PKF2["U":1,1:0)
- QUIT 1
- +4 IF $SELECT(PKF2["I":1,1:0)
- QUIT 1
- +5 QUIT 0
- TRADE ;
- +1 KILL DIR,DIC,DA,X,Y
- +2 SET DIR(0)="52,6.5"
- if $GET(PSOTRN)]""
- SET DIR("B")=$GET(PSOTRN)
- DO ^DIR
- KILL DIR,DIC
- +3 IF X="@"
- SET Y=X
- KILL DIRUT
- +4 IF $DATA(DIRUT)
- if $DATA(DUOUT)!$DATA(DTOUT)&('$DATA(PSORX("EDIT")))
- SET PSONEW("DFLG")=1
- GOTO TRADEX
- +5 SET PSODRUG("TRADE NAME")=Y
- TRADEX IF $GET(PSORXED("DFLG"))
- IF $DATA(DIRUT)
- SET PSORXED("DFLG")=1
- +1 KILL DIRUT,DTOUT,DUOUT,X,Y,DA,DR,DIE
- QUIT
- FDBCALL SET LIST="PSOPEPS"
- SET ^TMP($JOB,LIST,"IN","DRUGDRUG")=""
- +1 FOR I=0:0
- SET I=$ORDER(DRGLST(I))
- if 'I
- QUIT
- Begin DoDot:1
- +2 SET DIEN=$PIECE(DRGLST(I),"^")
- SET DNM=$PIECE(DRGLST(I),"^",2)
- SET ON="Z;"_$PIECE(DRGLST(I),"^",3)_";PROSPECTIVE;"_$PIECE(DRGLST(I),"^",3)
- +3 KILL ID,P1,P2
- SET ID=+$$GETVUID^XTID(50.68,,+$PIECE($GET(^PSDRUG(DIEN,"ND")),"^",3)_",")
- +4 if ID=0
- SET PSODRUG("IEN")=DIEN
- +5 SET P1=$PIECE($GET(^PSDRUG(DIEN,"ND")),"^")
- SET P2=$PIECE($GET(^("ND")),"^",3)
- SET X=$$PROD0^PSNAPIS(P1,P2)
- +6 SET SEQN=$PIECE(X,"^",7)
- +7 SET ^TMP($JOB,LIST,"IN","PROSPECTIVE",ON)=SEQN_"^"_ID_"^"_DIEN_"^"_DNM
- KILL ID
- End DoDot:1
- +8 SET ^TMP($JOB,LIST,"IN","THERAPY")=""
- +9 DO IN^PSSHRQ2(LIST)
- +10 SET THSW2=0
- +11 IF +$GET(^TMP($JOB,LIST,"OUT",0))=1
- DO PROC
- +12 IF '$GET(^TMP($JOB,LIST,"OUT",0))
- WRITE !,"No drug interactions or therapeutic duplication occurred."
- WRITE !
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- GOTO EXIT
- +13 IF +$GET(^TMP($JOB,LIST,"OUT",0))=-1
- WRITE !,"Error: "_$PIECE(^TMP($JOB,"PSOPEPS","OUT",0),"^",2),!
- GOTO EXIT
- +14 if '$DATA(^TMP($JOB,"PSOPEPS","OUT","THERAPY"))
- GOTO RMON
- +15 WRITE !,PSONULN2
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- RMON IF $GET(MON)
- DO MON
- IF $GET(X)=""
- WRITE !
- DO RMON
- EXIT ;
- +1 KILL DRGLST,DIC,X,Y,ID,ORTYP,DIEN,DNM,PSONULN,PSSDGCK,MON,^TMP($JOB),LIST,PSODRUG("IEN")
- QUIT
- PROC ;
- +1 IF $DATA(PSODGCK)
- NEW PSONULN,PSONULN2,THSW2
- SET $PIECE(PSONULN,"-",60)="-"
- SET $PIECE(PSONULN2,"=",60)="="
- SET THSW2=0
- +2 WRITE @IOF
- KILL ^UTILITY($JOB)
- IF $ORDER(^TMP($JOB,LIST,"OUT","EXCEPTIONS",""))]""
- DO EXC^PSODDPR5
- +3 IF '$DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))&'$DATA(^TMP($JOB,LIST,"OUT","THERAPY",1))
- WRITE !,"No Order Check Warnings Found",!
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- +4 IF $DATA(PSODGCK)
- IF '$DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))
- IF $DATA(^TMP($JOB,"PSOPEPS","OUT","THERAPY"))
- GOTO DGCKTHER
- +5 DO DELDISC^PSSDIUTX
- IF $DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))
- WRITE !,"*** DRUG INTERACTION(S) ***",!,PSONULN2,!
- +6 NEW DRG,ON,CT,DRGI,PDRG,SEV,SEVH,STX,INT,CLI,PDRG
- SET (ON,DRG,SV)=""
- SET CT=0
- SET SEVH="Critical"
- +7 FOR
- SET SV=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV))
- if SV=""
- QUIT
- FOR
- SET DRG=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG))
- if DRG=""
- QUIT
- Begin DoDot:1
- +8 FOR
- SET ON=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON))
- if ON=""
- QUIT
- FOR
- SET CT=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT))
- if 'CT
- QUIT
- DO DUP
- End DoDot:1
- +9 ;(end of inter data)
- IF $DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))
- WRITE !,PSONULN2
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- DGCKTHER IF $DATA(^TMP($JOB,"PSOPEPS","OUT","THERAPY"))
- WRITE @IOF
- WRITE PSONULN2,!,"*** THERAPEUTIC DUPLICATION(S) ***",!
- DO THER
- +1 IF $DATA(PSODGCK)
- IF '$DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))
- IF $DATA(^TMP($JOB,"PSOPEPS","OUT","THERAPY"))
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- WRITE !
- DO ^DIR
- KILL DIR
- WRITE @IOF
- QUIT
- DGCKMON IF $DATA(PSODGCK)
- IF $DATA(^TMP($JOB,LIST,"OUT","DRUGDRUG"))
- IF $GET(MON)
- DO MON
- IF $GET(X)=""
- WRITE !
- DO DGCKMON
- +1 QUIT
- THER ;
- +1 SET (THR,THR1,THR2,TCTR,TCLSTR)=""
- SET TALWNUM=0
- NEW TLN,TLN2
- SET $PIECE(TLN,"=",60)=""
- SET $PIECE(TLN2,"-",60)=""
- SET THSW=0
- +2 FOR
- SET THR=$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR))
- if THR=""
- QUIT
- Begin DoDot:1
- +3 SET THR1=""
- SET TCLSTR=""
- +4 FOR
- SET THR1=$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR1))
- if THR1=""
- QUIT
- Begin DoDot:2
- +5 SET TALWNUM=TALWNUM+$GET(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR1,"ALLOW"))
- +6 SET TCLSTR=TCLSTR_$GET(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR1,"CLASS"))
- +7 if +$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR1))'=0
- SET TCLSTR=TCLSTR_", "
- End DoDot:2
- +8 IF TALWNUM=0
- IF ($Y+8)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:2
- +9 KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- End DoDot:2
- +10 if THSW
- WRITE !,TLN2
- SET THSW=1
- +11 IF TALWNUM=0
- Begin DoDot:2
- +12 FOR
- SET TCTR=$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR))
- if TCTR=""
- QUIT
- Begin DoDot:3
- +13 WRITE !,?12,"Drug Name: ",$$THOSTAT^PSSCKOS($PIECE($GET(^TMP($JOB,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)),U,3),THR,TCTR)
- End DoDot:3
- +14 WRITE !,!,"Duplication Allowance: 0",!,?11,"Drug Class: "
- +15 IF $LENGTH(TCLSTR)>50
- Begin DoDot:3
- +16 KILL BSIG
- NEW BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- +17 SET BBSIG=TCLSTR
- SET (BVAR,BVAR1)=""
- SET III=1
- +18 SET ZNT=0
- FOR NNN=1:1:$LENGTH(BBSIG)
- IF $EXTRACT(BBSIG,NNN)=" "!($LENGTH(BBSIG)=NNN)
- SET ZNT=ZNT+1
- Begin DoDot:4
- +19 SET BVAR1=$PIECE(BBSIG," ",(ZNT))
- SET BLIM=BVAR
- SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- End DoDot:4
- IF $LENGTH(BVAR)>50
- SET BSIG(III)=BLIM_" "
- SET III=III+1
- SET BVAR=BVAR1
- +20 IF $GET(BVAR)'=""
- SET BSIG(III)=BVAR
- +21 IF $GET(BSIG(1))=""!($GET(BSIG(1))=" ")
- SET BSIG(1)=$GET(BSIG(2))
- KILL BSIG(2)
- End DoDot:3
- +22 IF $LENGTH(TCLSTR)>50
- Begin DoDot:3
- +23 SET I=""
- +24 FOR
- SET I=$ORDER(BSIG(I))
- if 'I
- QUIT
- Begin DoDot:4
- +25 if I=1
- WRITE BSIG(I),!
- if I>1
- WRITE ?23,BSIG(I)
- End DoDot:4
- End DoDot:3
- +26 IF '$TEST
- Begin DoDot:3
- +27 WRITE TCLSTR
- End DoDot:3
- End DoDot:2
- +28 IF TALWNUM>0
- Begin DoDot:2
- +29 SET THR2=""
- SET TCLSTR=""
- +30 FOR
- SET THR2=$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR2))
- if +THR2=0
- QUIT
- Begin DoDot:3
- +31 FOR
- SET TCTR=$ORDER(^TMP($JOB,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR))
- if TCTR=""
- QUIT
- Begin DoDot:4
- +32 WRITE !,?12,"Drug Name: ",$$THOSTAT^PSSCKOS($PIECE($GET(^TMP($JOB,LIST,"OUT","THERAPY",THR,"DRUGS",TCTR)),U,3),THR,TCTR)
- End DoDot:4
- +33 WRITE !,!,"Duplication Allowance: ",$GET(^TMP($JOB,LIST,"OUT","THERAPY",THR,THR2,"ALLOW"))
- +34 KILL TCLSTR
- SET TCLSTR=^TMP($JOB,LIST,"OUT","THERAPY",THR,THR2,"CLASS")
- +35 WRITE !,?11,"Drug Class: "
- +36 IF $LENGTH(TCLSTR)>50
- Begin DoDot:4
- +37 KILL BSIG
- NEW BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- +38 SET BBSIG=TCLSTR
- SET (BVAR,BVAR1)=""
- SET III=1
- +39 SET ZNT=0
- FOR NNN=1:1:$LENGTH(BBSIG)
- IF $EXTRACT(BBSIG,NNN)=" "!($LENGTH(BBSIG)=NNN)
- SET ZNT=ZNT+1
- Begin DoDot:5
- +40 SET BVAR1=$PIECE(BBSIG," ",(ZNT))
- SET BLIM=BVAR
- SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- End DoDot:5
- IF $LENGTH(BVAR)>50
- SET BSIG(III)=BLIM_" "
- SET III=III+1
- SET BVAR=BVAR1
- +41 IF $GET(BVAR)'=""
- SET BSIG(III)=BVAR
- +42 IF $GET(BSIG(1))=""!($GET(BSIG(1))=" ")
- SET BSIG(1)=$GET(BSIG(2))
- KILL BSIG(2)
- End DoDot:4
- +43 IF $LENGTH(TCLSTR)>50
- Begin DoDot:4
- +44 SET I=""
- +45 FOR
- SET I=$ORDER(BSIG(I))
- if 'I
- QUIT
- Begin DoDot:5
- +46 IF ($Y+6)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:6
- +47 KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- End DoDot:6
- +48 if I=1
- WRITE BSIG(I),!
- if I>1
- WRITE ?23,BSIG(I),!
- End DoDot:5
- End DoDot:4
- +49 IF '$TEST
- Begin DoDot:4
- +50 WRITE TCLSTR,!
- End DoDot:4
- +51 IF ($Y+6)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:4
- +52 KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +53 QUIT
- DUP ;
- +1 NEW PDRGN,DRGN
- SET PDRGN=""
- SET DRGN=""
- +2 IF ($Y+8)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:1
- +3 KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- End DoDot:1
- +4 IF $ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"PMON",0))
- SET MON=1
- +5 SET PDRG=$PIECE(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT),"^",4)
- +6 SET CLI=$GET(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"CLIN"))
- +7 SET SEV=$GET(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"SEV"))
- +8 if SEVH'=SEV
- SET PSONULN=""
- SET $PIECE(PSONULN,"=",60)="="
- +9 IF ($Y+6)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:1
- +10 KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- End DoDot:1
- +11 if THSW2
- WRITE PSONULN,!
- SET THSW2=1
- +12 SET PDRGN=$$POSTAT^PSSCKOS(DRG,PDRG,SV,ON,CT)
- SET DRGN=$$OSTAT^PSSCKOS(DRG,ON)
- +13 WRITE "***"_SEV_"*** Drug Interaction with ",!,DRGN_" and"
- if SEV="Critical"
- WRITE !,PDRGN,!!
- if SEV="Significant"
- WRITE !,PDRGN,!!
- +14 if SEVH'=SEV
- SET PSONULN=""
- SET $PIECE(PSONULN,"-",60)="-"
- +15 SET SEVH=SEV
- +16 IF $LENGTH(CLI)>70
- Begin DoDot:1
- +17 KILL BSIG
- NEW BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- +18 SET BBSIG=CLI
- SET (BVAR,BVAR1)=""
- SET III=1
- +19 SET ZNT=0
- FOR NNN=1:1:$LENGTH(BBSIG)
- IF $EXTRACT(BBSIG,NNN)=" "!($LENGTH(BBSIG)=NNN)
- SET ZNT=ZNT+1
- Begin DoDot:2
- +20 SET BVAR1=$PIECE(BBSIG," ",(ZNT))
- SET BLIM=BVAR
- SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- End DoDot:2
- IF $LENGTH(BVAR)>70
- SET BSIG(III)=BLIM_" "
- SET III=III+1
- SET BVAR=BVAR1
- +21 IF $GET(BVAR)'=""
- SET BSIG(III)=BVAR
- +22 IF $GET(BSIG(1))=""!($GET(BSIG(1))=" ")
- SET BSIG(1)=$GET(BSIG(2))
- KILL BSIG(2)
- End DoDot:1
- +23 IF $LENGTH(CLI)>70
- Begin DoDot:1
- +24 SET I=""
- +25 FOR
- SET I=$ORDER(BSIG(I))
- if 'I
- QUIT
- Begin DoDot:2
- +26 WRITE BSIG(I),!
- End DoDot:2
- End DoDot:1
- +27 IF '$TEST
- Begin DoDot:1
- +28 WRITE CLI,!
- End DoDot:1
- +29 KILL BSIG,BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- +30 QUIT
- MON ;
- +1 IF '$GET(DUOUT)
- WRITE !
- KILL DIR
- SET DIR("A")="Display Professional Interaction Monograph"
- SET DIR("B")="NO"
- SET DIR(0)="Y"
- SET DIR("?")="Enter Y if you would like to see the Monograph."
- DO ^DIR
- WRITE !
- +2 IF X="^"!(X["^^")!($DATA(DTOUT))
- QUIT
- +3 KILL SEL,DIR,DTOUT,DUOUT,DIRUT
- if Y=0
- QUIT
- +4 SET MONT=1
- SET SEL=1
- KILL Y
- DO BLD
- if $GET(SEL)=0
- QUIT
- +5 KILL IOP,%ZIS,POP
- SET %ZIS="QM"
- WRITE !
- DO ^%ZIS
- +6 IF POP
- KILL SEL,DIR,DTOUT,DUOUT,DIRUT,MONT
- WRITE !,"NOTHING PRINTED"
- GOTO MON
- +7 IF $DATA(IO("Q"))
- Begin DoDot:1
- +8 SET ZTRTN="OUT^PSOIDPRE"
- SET ZTDESC="Monograph Report of Drug Interactions"
- SET ZTSAVE("MONT")=""
- +9 SET ZTSAVE("PSONULN")=""
- SET ZTSAVE("LIST")=""
- SET ZTSAVE("^TMP($J,LIST,""OUT"",""DRUGDRUG"",")=""
- SET ZTSAVE("^TMP($J,""PSOMONP"",")=""
- +10 DO ^%ZTLOAD
- DO ^%ZISC
- WRITE !,"Monograph Queued to Print!",!
- if $DATA(ZTQUEUED)
- SET ZTREQ="Q"
- End DoDot:1
- QUIT
- +11 DO OUT
- DO ^%ZISC
- +12 WRITE !
- if Y'=0
- GOTO MON
- +13 QUIT
- OUT ;print monograph
- +1 NEW DRG,ON,CT,DRGI,PDRG,SEV,STX,INT,CLI,PDRG,RNG,QX
- +2 if MONT=1
- DO PROF
- if MONT=2
- DO CON
- if MONT=3
- DO PROF
- +3 QUIT
- BLD ;
- +1 KILL SEL,X,Y,DRG,ON,CT,RNG,^TMP($JOB,"PSOMON"),^TMP($JOB,"PSOMONP")
- SET (DRG,ON,SV)=""
- SET CT=0
- +2 FOR
- SET SV=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV))
- if SV=""
- QUIT
- FOR
- SET DRG=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG))
- if DRG=""
- QUIT
- FOR
- SET ON=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON))
- if ON=""
- QUIT
- Begin DoDot:1
- +3 FOR
- SET CT=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT))
- if 'CT
- QUIT
- IF $ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"PMON",0))
- Begin DoDot:2
- +4 SET RNG=$GET(RNG)+1
- +5 SET ^TMP($JOB,"PSOMON",RNG,DRG)=DRG_"^"_ON_"^"_CT_"^"_$PIECE(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT),"^",4)_"^"_$GET(^TMP($JOB,LIST,"OUT","DRUGDRUG",SV,DRG,ON,CT,"SEV"))
- End DoDot:2
- End DoDot:1
- +6 IF '$DATA(^TMP($JOB,"PSOMON",2))
- SET Y=1
- GOTO ONEMONO
- +7 KILL DIR
- SET IND=0
- SET DRG=""
- +8 ;F S IND=$O(^TMP($J,"PSOMON",IND)) Q:'IND F S DRG=$O(^TMP($J,"PSOMON",IND,DRG)) Q:DRG="" S DIR("A",IND)=IND_". "_DRG_" and "_$P(^TMP($J,"PSOMON",IND,DRG),"^",4) S DIR("A",IND+1)=""
- +9 FOR
- SET IND=$ORDER(^TMP($JOB,"PSOMON",IND))
- if 'IND
- QUIT
- FOR
- SET DRG=$ORDER(^TMP($JOB,"PSOMON",IND,DRG))
- if DRG=""
- QUIT
- Begin DoDot:1
- +10 IF ($Y+6)>IOSL
- IF $EXTRACT(IOST)="C"
- Begin DoDot:2
- +11 WRITE !
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR
- WRITE @IOF
- End DoDot:2
- +12 WRITE !,IND_". "_DRG_" and "_$PIECE(^TMP($JOB,"PSOMON",IND,DRG),"^",4)
- End DoDot:1
- +13 WRITE !
- SET DIR("A")="Select Monograph for printing by number"
- SET DIR(0)="LO^1:"_RNG
- DO ^DIR
- KILL DIR
- +14 IF $DATA(DUOUT)!($DATA(DTOUT))!(X="^")!(X="")
- SET SEL=0
- QUIT
- ONEMONO FOR G=1:1:$LENGTH(Y)
- if $PIECE(Y,",",G)=""
- QUIT
- SET DRG=$ORDER(^TMP($JOB,"PSOMON",$PIECE(Y,",",G),""))
- SET ^TMP($JOB,"PSOMONP",$PIECE(Y,",",G),0)=^TMP($JOB,"PSOMON",$PIECE(Y,",",G),DRG)
- +1 KILL ^TMP($JOB,"PSOMON")
- +2 QUIT
- +3 ;
- NEWPG ;new page form feed
- +1 NEW DIR
- +2 SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue or ""^"" to Exit"
- +3 DO ^DIR
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +4 WRITE @IOF,$SELECT($GET(MONT)=2:"Consumer",1:"Professional")_" Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- +5 QUIT
- +6 ;
- FORMAT ; WATCH OUT WITH CHANGES HERE!!!
- +1 KILL BSIG,XX
- NEW BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- +2 IF $LENGTH(TEXTSTR)'>70
- Begin DoDot:1
- +3 WRITE ?5,TEXTSTR,!
- End DoDot:1
- +4 IF $LENGTH(TEXTSTR)>70
- Begin DoDot:1
- +5 SET BBSIG=TEXTSTR
- SET (BVAR,BVAR1)=""
- SET III=1
- +6 SET ZNT=0
- FOR NNN=1:1:$LENGTH(BBSIG)
- IF $EXTRACT(BBSIG,NNN)=" "!($LENGTH(BBSIG)=NNN)
- SET ZNT=ZNT+1
- Begin DoDot:2
- +7 SET BVAR1=$PIECE(BBSIG," ",(ZNT))
- SET BLIM=BVAR
- SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
- End DoDot:2
- IF $LENGTH(BVAR)>70
- SET BSIG(III)=BLIM_" "
- SET III=III+1
- SET BVAR=BVAR1
- +8 IF $GET(BVAR)'=""
- SET BSIG(III)=BVAR
- +9 IF $GET(BSIG(1))=""!($GET(BSIG(1))=" ")
- SET BSIG(1)=$GET(BSIG(2))
- KILL BSIG(2)
- End DoDot:1
- +10 FOR XX=0:0
- SET XX=$ORDER(BSIG(XX))
- if 'XX
- QUIT
- Begin DoDot:1
- +11 IF $Y+6>IOSL
- IF $EXTRACT(IOST)="C"
- DO NEWPG
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +12 WRITE ?5,BSIG(XX),!
- End DoDot:1
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +13 KILL BSIG,BBSIG,BVAR,BVAR1,III,ZNT,NNN,BLIM
- SET TEXTSTR=""
- +14 QUIT
- PROF ;
- +1 FOR I=0:0
- SET I=$ORDER(^TMP($JOB,"PSOMONP",I))
- if 'I
- QUIT
- SET DRG=$PIECE(^TMP($JOB,"PSOMONP",I,0),"^")
- SET ON=$PIECE(^(0),"^",2)
- SET CT=$PIECE(^(0),"^",3)
- SET PDRG=$PIECE(^(0),"^",4)
- SET SEV=$EXTRACT($PIECE(^(0),"^",5),1,1)
- Begin DoDot:1
- +2 USE IO
- WRITE @IOF,!,PSONULN,!,"Professional Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- +3 FOR QX=0:0
- SET QX=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"PMON",QX))
- if 'QX
- QUIT
- Begin DoDot:2
- +4 IF $Y+6>IOSL
- IF $EXTRACT(IOST)="C"
- DO NEWPG
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +5 SET TEXTSTR=^TMP($JOB,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"PMON",QX,0)
- DO FORMAT
- +6 IF ($Y+6)>IOSL
- IF $EXTRACT(IOST)="C"
- WRITE !
- End DoDot:2
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- End DoDot:1
- if $DATA(DUOUT)!($DATA(DTOUT))
- QUIT
- +7 if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +8 KILL DTOUT,DUOUT
- +9 if MONT=3
- Begin DoDot:1
- +10 USE IO
- WRITE @IOF,!,PSONULN,!,"Consumer Monograph",!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!
- +11 FOR QX=0:0
- SET QX=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX))
- if 'QX
- QUIT
- Begin DoDot:2
- +12 IF $Y+6>IOSL
- IF $EXTRACT(IOST)="C"
- DO NEWPG
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +13 WRITE !?5,^TMP($JOB,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX,0)
- End DoDot:2
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- End DoDot:1
- +14 WRITE !,PSONULN,!
- +15 KILL DTOUT,DUOUT
- IF $EXTRACT(IOST)="C"
- KILL DIR
- SET DIR(0)="E"
- DO ^DIR
- KILL DIR,DTOUT,DUOUT
- +16 QUIT
- CON FOR I=0:0
- SET I=$ORDER(^TMP($JOB,"PSOMONP",I))
- if 'I
- QUIT
- SET DRG=$PIECE(^TMP($JOB,"PSOMONP",I,0),"^")
- SET ON=$PIECE(^(0),"^",2)
- SET CT=$PIECE(^(0),"^",3)
- SET PDRG=$PIECE(^(0),"^",4)
- SET SEV=$PIECE(^(0),"^",5)
- Begin DoDot:1
- +1 USE IO
- WRITE @IOF,!,"Consumer Monograph",!,PSONULN,!!,"Drug Interaction with ",!,DRG_" and "_PDRG,!!
- +2 FOR QX=0:0
- SET QX=$ORDER(^TMP($JOB,LIST,"OUT","DRUGDRUG",SEV,DRG,ON,CT,"CMON",QX))
- if 'QX
- QUIT
- Begin DoDot:2
- +3 IF $Y+6>IOSL
- IF $EXTRACT(IOST)="C"
- DO NEWPG
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- +4 WRITE !?5,^TMP($JOB,LIST,"OUT","DRUGDRUG",DRG,ON,CT,"CMON",QX,0)
- End DoDot:2
- if ($DATA(DUOUT)!($DATA(DTOUT)))
- QUIT
- End DoDot:1
- if $DATA(DUOUT)!($DATA(DTOUT))
- QUIT
- +5 IF '$GET(DUOUT)
- WRITE !,PSONULN,!
- +6 KILL DTOUT,DUOUT
- IF $EXTRACT(IOST)="C"
- KILL DIR
- SET DIR(0)="E"
- SET DIR("A")="Press Return to Continue..."
- DO ^DIR
- KILL DIR,DTOUT,DUOUT
- +7 QUIT