| 1 | PSODRG ;IHS/DSD/JCM-ORDER ENTRY DRUG SELECTION ;03/30/93
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**20,23,36,53,54,46,112,139,207,148,243,268,208**;DEC 1997;Build 39
 | 
|---|
| 3 |  ; Modified from FOIA VISTA,
 | 
|---|
| 4 |  ; Copyright (C) 2007 WorldVistA
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; This program is free software; you can redistribute it and/or modify
 | 
|---|
| 7 |  ; it under the terms of the GNU General Public License as published by
 | 
|---|
| 8 |  ; the Free Software Foundation; either version 2 of the License, or
 | 
|---|
| 9 |  ; (at your option) any later version.
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; This program is distributed in the hope that it will be useful,
 | 
|---|
| 12 |  ; but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|---|
| 13 |  ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|---|
| 14 |  ; GNU General Public License for more details.
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ; You should have received a copy of the GNU General Public License
 | 
|---|
| 17 |  ; along with this program; if not, write to the Free Software
 | 
|---|
| 18 |  ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 | 
|---|
| 19 |  ;Reference ^PSDRUG supported by DBIA 221
 | 
|---|
| 20 |  ;Reference ^PS(50.7 supported by DBIA 2223
 | 
|---|
| 21 |  ;Reference to PSSDIN supported by DBIA 3166
 | 
|---|
| 22 |  ;Reference to $$NDCFMT^PSSNDCUT supported by IA 4707
 | 
|---|
| 23 |  ;----------------------------------------------------------
 | 
|---|
| 24 | START ;
 | 
|---|
| 25 |  S (PSONEW("DFLG"),PSONEW("FIELD"),PSODRG("QFLG"))=0
 | 
|---|
| 26 |  D @($S(+$G(PSOEDIT)=1&('$D(DA)):"SELECT^PSODRGN",1:"SELECT"))
 | 
|---|
| 27 |  G:$G(PSORXED("DFLG")) END ; Select Drug
 | 
|---|
| 28 |  I $G(PSORX("EDIT")),$G(PSOY),$G(PSODRUG("IEN"))=+PSOY D  G:$G(PSORXED("DFLG")) END
 | 
|---|
| 29 |  . N NDC D NDC(+$G(PSORXED("IRXN")),0,+PSOY,.NDC) I $G(NDC)="^" S PSORXED("DFLG")=1 Q
 | 
|---|
| 30 |  . I $G(NDC)'="" S (PSODRUG("NDC"),PSORXED("FLD",27))=NDC
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  I $G(PSORX("EDIT"))]"",'PSONEW("FIELD") D TRADE
 | 
|---|
| 33 |  G:PSONEW("DFLG")!(PSODRG("QFLG"))!($G(PSORXED("DFLG"))) END
 | 
|---|
| 34 |  D SET ; Set various drug information
 | 
|---|
| 35 |  D NFI ; Display dispense drug/orderable item text
 | 
|---|
| 36 |  D:'$G(PSOEDIT) POST I $G(PSORX("DFLG")) S PSONEW("DFLG")=1 K:'$G(PSORX("EDIT")) PSORX("DFLG") ; Do any post selection action
 | 
|---|
| 37 | END ;D EOJ
 | 
|---|
| 38 |  Q
 | 
|---|
| 39 |  ;------------------------------------------------------------
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | SELECT ;
 | 
|---|
| 42 |  K:'$G(PSORXED) CLOZPAT
 | 
|---|
| 43 |  K DIC,X,Y,PSODRUG("TRADE NAME"),PSODRUG("NDC"),PSODRUG("DAW") S:$G(POERR)&($P($G(OR0),"^",9)) Y=$P(^PSDRUG($P(OR0,"^",9),0),"^")
 | 
|---|
| 44 |  I $G(PSODRUG("IEN"))]"" S Y=PSODRUG("NAME"),PSONEW("OLD VAL")=PSODRUG("IEN")
 | 
|---|
| 45 |  W !,"DRUG: "_$S($G(Y)]"":Y_"// ",1:"") R X:$S($D(DTIME):DTIME,1:300) I '$T S DTOUT=1
 | 
|---|
| 46 |  I X="",$G(Y)]"" S:Y X=Y S:'X X=$G(PSODRUG("IEN")) S:X X="`"_X
 | 
|---|
| 47 |  G:X="" SELECT
 | 
|---|
| 48 |  I X?1."?" W !!,"Answer with DRUG NUMBER, or GENERIC NAME, or VA PRODUCT NAME, or",!,"NATIONAL DRUG CLASS, or SYNONYM" G SELECT
 | 
|---|
| 49 |  I $G(PSORXED),X["^" S PSORXED("DFLG")=1 G SELECTX
 | 
|---|
| 50 |  I X="^"!(X["^^")!($D(DTOUT)) S PSONEW("DFLG")=1 G SELECTX
 | 
|---|
| 51 |  I '$G(POERR),X[U,$L(X)>1 S PSODIR("FLD")=PSONEW("FLD") D JUMP^PSODIR1 S:$G(PSODIR("FIELD")) PSONEW("FIELD")=PSODIR("FIELD") K PSODIR S PSODRG("QFLG")=1 G SELECTX
 | 
|---|
| 52 |  S DIC=50,DIC(0)="EMQZVT",DIC("T")="",D="B^C^VAPN^VAC"
 | 
|---|
| 53 |  S DIC("S")="I $S('$D(^PSDRUG(+Y,""I"")):1,'^(""I""):1,DT'>^(""I""):1,1:0),$S($P($G(^PSDRUG(+Y,2)),""^"",3)'[""O"":0,1:1),$D(^PSDRUG(""ASP"",+$G(^(2)),+Y))"
 | 
|---|
| 54 |  D MIX^DIC1 K DIC,D
 | 
|---|
| 55 |  I $D(DTOUT) S PSONEW("DFLG")=1 G SELECTX
 | 
|---|
| 56 |  I $D(DUOUT) K DUOUT G SELECT
 | 
|---|
| 57 |  I Y<0 G SELECT
 | 
|---|
| 58 |  S:$G(PSONEW("OLD VAL"))=+Y&('$G(PSOEDIT)) PSODRG("QFLG")=1
 | 
|---|
| 59 |  K PSOY S PSOY=Y,PSOY(0)=Y(0)
 | 
|---|
| 60 |  I $P(PSOY(0),"^")="OTHER DRUG"!($P(PSOY(0),"^")="OUTSIDE DRUG") D TRADE
 | 
|---|
| 61 | SELECTX K X,Y,DTOUT,DUOUT,PSONEW("OLD VAL")
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | NDC(RX,RFL,DRG,NDC) ; Editing NDC for ECME Released Rx's
 | 
|---|
| 65 |  S NDC=$S($G(NDC)'="":$G(NDC),1:$$GETNDC^PSONDCUT(RX,.RFL))
 | 
|---|
| 66 |  I $$STATUS^PSOBPSUT(RX,RFL)="" Q
 | 
|---|
| 67 |  I '$$RXRLDT^PSOBPSUT(RX,RFL) Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  S NDC=$S($G(NDC)'="":$G(NDC),1:$$GETNDC^PSONDCUT(RX,.RFL))
 | 
|---|
| 70 |  D NDCEDT^PSONDCUT(RX,.RFL,$G(DRG),$G(PSOSITE),.NDC)
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | TRADE ;
 | 
|---|
| 74 |  K DIR,DIC,DA,X,Y
 | 
|---|
| 75 |  S DIR(0)="52,6.5" S:$G(PSOTRN)]"" DIR("B")=$G(PSOTRN) D ^DIR K DIR,DIC
 | 
|---|
| 76 |  I X="@" S Y=X K DIRUT
 | 
|---|
| 77 |  I $D(DIRUT) S:$D(DUOUT)!$D(DTOUT)&('$D(PSORX("EDIT"))) PSONEW("DFLG")=1 G TRADEX
 | 
|---|
| 78 |  S PSODRUG("TRADE NAME")=Y
 | 
|---|
| 79 | TRADEX I $G(PSORXED("DFLG")),$D(DIRUT) S PSORXED("DFLG")=1
 | 
|---|
| 80 |  K DIRUT,DTOUT,DUOUT,X,Y,DA,DR,DIE
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 | SET ;
 | 
|---|
| 83 |  N STAT S PSODRUG("IEN")=+PSOY,PSODRUG("VA CLASS")=$P(PSOY(0),"^",2)
 | 
|---|
| 84 |  S PSODRUG("NAME")=$P(PSOY(0),"^")
 | 
|---|
| 85 |  S:+$G(^PSDRUG(+PSOY,2)) PSODRUG("OI")=+$G(^(2)),PSODRUG("OIN")=$P(^PS(50.7,+$G(^(2)),0),"^")
 | 
|---|
| 86 |  S PSODRUG("NDF")=$S($G(^PSDRUG(+PSOY,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:0)
 | 
|---|
| 87 |  S PSODRUG("MAXDOSE")=$P(PSOY(0),"^",4),PSODRUG("DEA")=$P(PSOY(0),"^",3)
 | 
|---|
| 88 |  S PSODRUG("CLN")=$S($D(^PSDRUG(+PSOY,"ND")):+$P(^("ND"),"^",6),1:0)
 | 
|---|
| 89 |  S PSODRUG("SIG")=$P(PSOY(0),"^",5)
 | 
|---|
| 90 |  I $G(PSODRUG("NDC"))="" S PSODRUG("NDC")=$$GETNDC^PSSNDCUT(+PSOY,$G(PSOSITE))
 | 
|---|
| 91 |  S PSODRUG("DAW")=+$$GET1^DIQ(50,+PSOY,81)
 | 
|---|
| 92 |  S PSODRUG("STKLVL")=$G(^PSDRUG(+PSOY,660.1))
 | 
|---|
| 93 |  G:$G(^PSDRUG(+PSOY,660))']"" SETX
 | 
|---|
| 94 |  S PSOX1=$G(^PSDRUG(+PSOY,660))
 | 
|---|
| 95 |  S PSODRUG("COST")=$P($G(PSOX1),"^",6)
 | 
|---|
| 96 |  S PSODRUG("UNIT")=$P($G(PSOX1),"^",8)
 | 
|---|
| 97 |  S PSODRUG("EXPIRATION DATE")=$P($G(PSOX1),"^",9)
 | 
|---|
| 98 | SETX K PSOX1,PSOY
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 | NFI ;display restriction/guidelines
 | 
|---|
| 101 |  D EN^PSSDIN(PSODRUG("OI"),PSODRUG("IEN")) S NFI=$$PROMPT^PSSDIN
 | 
|---|
| 102 |  I NFI]"","ODY"[NFI D TD^PSONFI
 | 
|---|
| 103 |  K NFI Q
 | 
|---|
| 104 | POST ;order checks
 | 
|---|
| 105 |  I $G(PSOAFYN)="Y" G POSTX ;vfam - VOE
 | 
|---|
| 106 |  K PSORX("INTERVENE") N STAT,SIG,PTR,NDF,VAP S PSORX("DFLG")=0
 | 
|---|
| 107 |  D ^PSOBUILD
 | 
|---|
| 108 |  D @$S($G(COPY):"^PSOCPDUP",1:"^PSODRDUP") ; Set PSORX("DFLG")=1 if process to stop
 | 
|---|
| 109 |  Q:$G(PSORX("DFLG"))
 | 
|---|
| 110 |  W:$G(PSOFIN)']"" !,"Now doing drug interaction and allergy checks.  Please wait...",!
 | 
|---|
| 111 |  D ^PSODGDGI
 | 
|---|
| 112 |  I $G(PSORX("INTERVENE"))]"" D FULL^VALM1,^PSORXI S VALMBCK="R"
 | 
|---|
| 113 |  G:PSORX("DFLG") POSTX
 | 
|---|
| 114 |  D:$P($G(^PSDRUG(PSODRUG("IEN"),"CLOZ1")),"^")]"" CLOZ G:PSORX("DFLG") POSTX
 | 
|---|
| 115 |  K PSORX("INTERVENE")
 | 
|---|
| 116 |  S PSONOAL="" D ALLERGY^PSOORUT2 D:PSONOAL'="" NOALRGY K PSONOAL
 | 
|---|
| 117 |  G:PSORX("DFLG") POSTX
 | 
|---|
| 118 |  I $D(PSODRUG("NDF")) S NDF=$P(PSODRUG("NDF"),"A"),VAP=$P(PSODRUG("NDF"),"A",2),PTR=NDF_"."_VAP
 | 
|---|
| 119 |  I $G(NDF) D CHK^PSODGAL(PSODFN,"DR",PTR) K NDF,VAP,PTR
 | 
|---|
| 120 |  I $P($G(PSODRUG("NDF")),"A")=0 D CHK1^PSODGAL(PSODFN)
 | 
|---|
| 121 |  I $D(PSODRUG("VA CLASS")) D CLASS^PSODGAL(PSODFN)
 | 
|---|
| 122 | POSTX ;
 | 
|---|
| 123 |  K ^TMP($J,"DI"_PSODFN),^TMP($J,"DI")
 | 
|---|
| 124 |  K PSORX("INTERVENE"),DA
 | 
|---|
| 125 |  Q
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 | EOJ ;
 | 
|---|
| 128 |  K PSODRG
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | CLOZ ;
 | 
|---|
| 132 |  S ANQRTN=$P(^PSDRUG(PSODRUG("IEN"),"CLOZ1"),"^"),ANQX=0
 | 
|---|
| 133 |  S P(5)=PSODRUG("IEN"),DFN=PSODFN,X=ANQRTN
 | 
|---|
| 134 |  X ^%ZOSF("TEST") I  D @("^"_ANQRTN) S:$G(ANQX) PSORX("DFLG")=1
 | 
|---|
| 135 |  K P(5),ANQRTN,ANQX,X
 | 
|---|
| 136 |  Q
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | EN(DRG) ;returns lab test identified for clozapine order checking
 | 
|---|
| 139 |  K LAB I $P($G(^PSDRUG(DRG,"CLOZ1")),"^")'="PSOCLO1" S LAB("NOT")=0 Q
 | 
|---|
| 140 |  I $P($G(^PSDRUG(DRG,"CLOZ1")),"^")="PSOCLO1" D
 | 
|---|
| 141 |  .S (CNT,I)=0 F  S I=$O(^PSDRUG(DRG,"CLOZ2",I)) Q:'I  S CNT=$G(CNT)+1
 | 
|---|
| 142 |  .I CNT'=2 S LAB("BAD TEST")=0 K CNT Q
 | 
|---|
| 143 |  .K CNT F I=0:0 S I=$O(^PSDRUG(DRG,"CLOZ2",I)) Q:'I  D
 | 
|---|
| 144 |  ..S LABT=$S($P(^PSDRUG(DRG,"CLOZ2",I,0),"^",4)=1:"WBC",1:"ANC"),LAB(LABT)=$P(^PSDRUG(DRG,"CLOZ2",I,0),"^")_"^"_$P(^(0),"^",3)_"^"_$P(^(0),"^",4)
 | 
|---|
| 145 |  K LABT,I
 | 
|---|
| 146 |  Q
 | 
|---|
| 147 | NOALRGY ;
 | 
|---|
| 148 |  W $C(7),!,"There is no allergy assessment on file for this patient."
 | 
|---|
| 149 |  W !,"You will be prompted to intervene if you continue with this prescription"
 | 
|---|
| 150 |  K DIR
 | 
|---|
| 151 |  S DIR(0)="SA^1:YES;0:NO",DIR("A")="Do you want to Continue?: ",DIR("B")="N" D ^DIR
 | 
|---|
| 152 |  I 'Y S PSORX("DFLG")=1 Q
 | 
|---|
| 153 |  D ^PSORXI
 | 
|---|
| 154 |  Q
 | 
|---|