| [623] | 1 | PSODIR1 ;IHS/DSD - ASKS DATA FOR RX ORDER ENTRY CONT. ;02/17/93 17:03 | 
|---|
|  | 2 | ;;7.0;OUTPATIENT PHARMACY;**23,46,78,102,121,131,146,166,184,222,268**;DEC 1997;Build 9 | 
|---|
|  | 3 | ;Ext ref ^PS(55-DBIA 2228, ^PSDRUG(-DBIA 221 | 
|---|
|  | 4 | PTSTAT(PSODIR) ; | 
|---|
|  | 5 | PTSTATEN K DIC,DR,DIE S PSODIR("FIELD")=0 | 
|---|
|  | 6 | I $G(PSOTPBFG),$G(PSOFROM)="NEW" K PSORX("PATIENT STATUS"),PSODIR("PATIENT STATUS") N PSOFNDRX,PSOFNDFL,PSOFNDPS D | 
|---|
|  | 7 | .S PSOFNDFL=0 F PSOFNDPS=0:0 S PSOFNDPS=$O(^PS(53,PSOFNDPS)) Q:'PSOFNDPS!(PSOFNDFL)  D | 
|---|
|  | 8 | ..S PSOFNDRX=$P($G(^PS(53,PSOFNDPS,0)),"^") S PSOFNDRX=$$UP^XLFSTR(PSOFNDRX) I PSOFNDRX="NON-VA" S PSOFNDFL=1 S (PSORX("PATIENT STATUS"),DIC("B"))=$P($G(^PS(53,PSOFNDPS,0)),"^") | 
|---|
|  | 9 | I $G(PSOTPBFG),$G(PSOFROM)="NEW",$G(PSORX("PATIENT STATUS"))="" W !,"Could not find a 'NON-VA' Patient Status in the RX PATIENT STATUS file (#53)!" D PSTPB D  S PSODIR("DFLG")=1 G PTSTATX | 
|---|
|  | 10 | .K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR | 
|---|
|  | 11 | I $G(PSOTPBFG),$G(PSOFROM)="NEW" G TPBB | 
|---|
|  | 12 | N PSOX | 
|---|
|  | 13 | S PSOX=$G(^PS(55,PSODFN,"PS")) I PSOX]"" S PSORX("PATIENT STATUS")=$P($G(^PS(53,PSOX,0)),"^"),DIC("B")=PSORX("PATIENT STATUS") | 
|---|
|  | 14 | S:$G(PSODIR("PATIENT STATUS"))]"" DIC("B")=PSODIR("PATIENT STATUS") | 
|---|
|  | 15 | TPBB ; | 
|---|
|  | 16 | D ELIG^VADPT W !,"Eligibility: "_$P(VAEL(1),"^",2)_$S(+VAEL(3):"     SC%: "_$P(VAEL(3),"^",2),1:"") | 
|---|
|  | 17 | S N=0 F  S N=$O(VAEL(1,N)) Q:'N  W !,?10,$P(VAEL(1,N),"^",2) | 
|---|
|  | 18 | S DIC("A")="RX PATIENT STATUS: " | 
|---|
|  | 19 | S DIC(0)="QEAMZ",DIC=53 D ^DIC K DIC | 
|---|
|  | 20 | I $G(PSOTPBFG),$G(PSOFROM)="NEW" N PSOPSDIR,PSOFNDZZ,PSOPSUPA S (PSOPSDIR,PSOPSUPA)=0 D  I PSOPSDIR S:PSOPSUPA PSODIR("DFLG")=1 G:PSOPSUPA PTSTATX W ! D PSTPB G PTSTATEN | 
|---|
|  | 21 | .I +Y'>0!($D(DTOUT))!($D(DUOUT)) S (PSOPSDIR,PSOPSUPA)=1 Q | 
|---|
|  | 22 | .S (PSODIR("PATIENT STATUS"),PSORX("PATIENT STATUS"))=+Y,PSODIR("PTST NODE")=Y(0) | 
|---|
|  | 23 | .S PSOFNDZZ=$P($G(^PS(53,+Y,0)),"^") S PSOFNDZZ=$$UP^XLFSTR(PSOFNDZZ) I PSOFNDZZ'="NON-VA" S PSOPSDIR=1 K PSODIR("PATIENT STATUS"),PSORX("PATIENT STATUS"),PSODIR("PTST NODE") | 
|---|
|  | 24 | I $G(PSOTPBFG),$G(PSOFROM)="NEW" G TPBSC | 
|---|
|  | 25 | I X[U,$L(X)>1 D:'$G(PSOEDIT) JUMP G PTSTATX | 
|---|
|  | 26 | I $D(DUOUT)!$D(DTOUT) S PSODIR("DFLG")=1 G PTSTATX | 
|---|
|  | 27 | I Y=-1 W $C(7)," Required" G PTSTATEN | 
|---|
|  | 28 | N PSOFNDX,PSOFNDXY,PSOFNDXX,PSOFNDYY | 
|---|
|  | 29 | S PSOFNDXY=$G(Y),PSOFNDYY=$G(Y(0)) | 
|---|
|  | 30 | I '$G(PSOTPBFG),$G(PSOFROM)="NEW" S PSOFNDX=$P($G(^PS(53,+Y,0)),"^") S PSOFNDXX=$$UP^XLFSTR(PSOFNDX) I PSOFNDXX="NON-VA" K PSOFNDX,PSOFNDXY,PSOFNDYY,PSOFNDXX,Y W !!,"Cannot select 'NON-VA' Rx Patient Status!",! G PTSTATEN | 
|---|
|  | 31 | S Y=$G(PSOFNDXY),Y(0)=$G(PSOFNDYY) | 
|---|
|  | 32 | K PSOFNDXY,PSOFNDYY,PSOFNDX,PSOFNDXX | 
|---|
|  | 33 | S (PSODIR("PATIENT STATUS"),PSORX("PATIENT STATUS"))=+Y | 
|---|
|  | 34 | S PSODIR("PTST NODE")=Y(0) | 
|---|
|  | 35 | TPBSC ; | 
|---|
|  | 36 | I $G(PSOFDR),$P($G(OR0),"^",17)="C" G PTSTATX | 
|---|
|  | 37 | L +^PS(55,PSODFN):$S(+$G(^DD("DILOCKTM"))>0:+^DD("DILOCKTM"),1:3) I '$T G PTSTATX | 
|---|
|  | 38 | S DIE="55",DR="3////"_+Y,DA=PSODFN D ^DIE K DIE,DA,D0 | 
|---|
|  | 39 | L -^PS(55,PSODFN) | 
|---|
|  | 40 | PTSTATX K DTOUT,DUOUT,X,Y,DA | 
|---|
|  | 41 | Q | 
|---|
|  | 42 | SIG(PSODIR) ; | 
|---|
|  | 43 | I $G(PSOFDR),$G(PSODIR("SIG"))']"" D SIGOK G:$G(SIGOK)!($G(PSODIR("DFLG"))) SIGX | 
|---|
|  | 44 | K DIR,DIC | 
|---|
|  | 45 | S DIR(0)="52,10" | 
|---|
|  | 46 | S:$G(PSODRUG("SIG"))]"" DIR("B")=PSODRUG("SIG") | 
|---|
|  | 47 | S:$G(PSODIR("SIG"))]"" DIR("B")=PSODIR("SIG") | 
|---|
|  | 48 | D DIR G:PSODIR("DFLG")!PSODIR("FIELD") SIGX | 
|---|
|  | 49 | S PSODIR("SIG")=Y,SIGOK=0 K SIG | 
|---|
|  | 50 | SIGX K X,Y | 
|---|
|  | 51 | Q | 
|---|
|  | 52 | QTY(PSODIR) ; | 
|---|
|  | 53 | QTYA K DIR,DIC | 
|---|
|  | 54 | I $G(CLOZPAT)=1 S DIR("A",1)="Patient Eligible for 14 day supply or 7 day supply with 1 refill" | 
|---|
|  | 55 | I $G(CLOZPAT)=2 S DIR("A",1)="Patient Eligible 28 day supply or 14 day supply with 1 refill or 7 day supply with 3 refill" | 
|---|
|  | 56 | S DIR(0)="52,7" S:$G(PSODRUG("IEN")) DIR("A")="QTY ( "_$G(PSODRUG("UNIT"))_" ) "_$S($P($G(^PSDRUG(+PSODRUG("IEN"),5)),"^")]"":$P(^PSDRUG(+PSODRUG("IEN"),5),"^"),1:"") | 
|---|
|  | 57 | K QTYHLD I $G(PSODIR("QTY"))]"" S QTYHLD=PSODIR("QTY") K PSODIR("QTY") | 
|---|
|  | 58 | D:'$G(PSOQTY) QTY^PSOSIG(.PSODIR) | 
|---|
|  | 59 | I '$G(SPEED),$G(QTYHLD),'$G(PSODIR("QTY")) S PSODIR("QTY")=QTYHLD | 
|---|
|  | 60 | K QTYHLD K:'$G(PSODIR("QTY")) PSODIR("QTY") | 
|---|
|  | 61 | I $G(SPEED),$G(PSODIR("QTY"))']"" S PSODIR("QTY")=$P(^PSRX(PSORENW("OIRXN"),0),"^",7) | 
|---|
|  | 62 | S:$G(PSODIR("QTY"))]"" DIR("B")=PSODIR("QTY") | 
|---|
|  | 63 | D DIR G:PSODIR("DFLG")!PSODIR("FIELD") QTYX | 
|---|
|  | 64 | I $G(Y),$G(PSODRUG("MAXDOSE"))]"",$G(PSODIR("DAYS SUPPLY")),(Y/+PSODIR("DAYS SUPPLY")>PSODRUG("MAXDOSE")) D  G:$G(PSODIR("DFLG")) QTYX  G QTYA | 
|---|
|  | 65 | .W !,$C(7)," Greater than Maximum dose of "_PSODRUG("MAXDOSE")_" per day" D DAYSEN | 
|---|
|  | 66 | S PSODIR("QTY")=Y | 
|---|
|  | 67 | QTYX K X,Y | 
|---|
|  | 68 | Q | 
|---|
|  | 69 | COPIES(PSODIR) ; | 
|---|
|  | 70 | K DIR,DIC | 
|---|
|  | 71 | S DIR(0)="52,10.6" | 
|---|
|  | 72 | S DIR("B")=$S($G(PSODIR("COPIES"))]"":PSODIR("COPIES"),1:1) | 
|---|
|  | 73 | D DIR G:PSODIR("DFLG")!PSODIR("FIELD") COPIESX | 
|---|
|  | 74 | S PSODIR("COPIES")=Y | 
|---|
|  | 75 | COPIESX K X,Y | 
|---|
|  | 76 | Q | 
|---|
|  | 77 | DAYS(PSODIR) ; | 
|---|
|  | 78 | DAYSEN K DIR,DIC | 
|---|
|  | 79 | S DIR(0)="N^1:"_$S($G(CLOZPAT)=2:28,$G(CLOZPAT)=1:14,$G(CLOZPAT)=0:7,1:90) | 
|---|
|  | 80 | S DIR("B")=$S($D(CLOZPAT)&('$G(PSODIR("DAYS SUPPLY"))):7,$G(PSODIR("DAYS SUPPLY"))]"":PSODIR("DAYS SUPPLY"),$P($G(PSODIR("PTST NODE")),"^",3):$P(PSODIR("PTST NODE"),"^",3),1:30) | 
|---|
|  | 81 | S DIR("A")="DAYS SUPPLY",DIR("?")="Enter a whole number between 1 and "_$S($G(CLOZPAT)=2:28,$G(CLOZPAT)=1:14,$G(CLOZPAT)=0:7,1:90) | 
|---|
|  | 82 | D DIR G:PSODIR("DFLG")!PSODIR("FIELD") DAYSX | 
|---|
|  | 83 | I $G(Y),$G(PSODRUG("MAXDOSE"))]"",$G(PSODIR("QTY"))]"",(+PSODIR("QTY")/Y>PSODRUG("MAXDOSE")) W !,$C(7)," Greater than Maximum dose of "_PSODRUG("MAXDOSE")_" per day" G DAYSEN | 
|---|
|  | 84 | S PSODIR("DAYS SUPPLY")=Y D:$G(PSOFROM)="NEW" | 
|---|
|  | 85 | .K QTYHLD S:$G(PSODIR("QTY")) QTYHLD=PSODIR("QTY") D QTY^PSOSIG(.PSODIR) | 
|---|
|  | 86 | .I $G(QTYHLD),'$G(PSODIR("QTY")) S PSODIR("QTY")=QTYHLD | 
|---|
|  | 87 | .K QTYHLD K:'$G(PSODIR("QTY")) PSODIR("QTY") | 
|---|
|  | 88 | S:$G(CLOZPAT)=0 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=0 | 
|---|
|  | 89 | D:$G(CLOZPAT)=2 | 
|---|
|  | 90 | .S:PSODIR("DAYS SUPPLY")=28 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=0 | 
|---|
|  | 91 | .S:PSODIR("DAYS SUPPLY")=14 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=1 | 
|---|
|  | 92 | .S:PSODIR("DAYS SUPPLY")=7 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=3 | 
|---|
|  | 93 | D:$G(CLOZPAT)=1 | 
|---|
|  | 94 | .S:PSODIR("DAYS SUPPLY")=14 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=0 | 
|---|
|  | 95 | .S:PSODIR("DAYS SUPPLY")=7 (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=1 | 
|---|
|  | 96 | K QTYHLD S:$G(PSODIR("QTY")) QTYHLD=PSODIR("QTY") D QTY^PSOSIG(.PSODIR) | 
|---|
|  | 97 | I $G(QTYHLD),'$G(PSODIR("QTY")) S PSODIR("QTY")=QTYHLD | 
|---|
|  | 98 | K QTYHLD K:'$G(PSODIR("QTY")) PSODIR("QTY") | 
|---|
|  | 99 | DAYSX K X,Y | 
|---|
|  | 100 | Q | 
|---|
|  | 101 | REFILL(PSODIR) ; | 
|---|
|  | 102 | I $G(OR0) G REFOR | 
|---|
|  | 103 | S PSODIR("CS")=0 K DIR,DIC,PSOX | 
|---|
|  | 104 | F DEA=1:1 Q:$E(PSODRUG("DEA"),DEA)=""  I $E(+PSODRUG("DEA"),DEA)>1,$E(+PSODRUG("DEA"),DEA)<6 S $P(PSODIR("CS"),"^")=1 S:$E(+PSODRUG("DEA"),DEA)=2 $P(PSODIR("CS"),"^",2)=1 | 
|---|
|  | 105 | I PSODIR("CS") D | 
|---|
|  | 106 | .S PSOX=5,PSOX1=$S($P($G(PSODIR("PTST NODE")),"^",4)>PSOX:PSOX,1:$P($G(PSODIR("PTST NODE")),"^",4)),PSOX=$S(PSOX1=5:PSOX,1:PSOX1) | 
|---|
|  | 107 | .S PSOX=$S('PSOX:0,PSODIR("DAYS SUPPLY")=90:1,1:PSOX),PSDY=PSODIR("DAYS SUPPLY"),PSDY1=$S(PSDY<60:5,PSDY'<60&(PSDY'>89):2,PSDY=90:1,1:0) S PSOX=$S(PSOX'>PSDY1:PSOX,1:PSDY1) | 
|---|
|  | 108 | E  D | 
|---|
|  | 109 | .S PSOX=11,PSOX1=$S($P($G(PSODIR("PTST NODE")),"^",4)>PSOX:PSOX,1:$P($G(PSODIR("PTST NODE")),"^",4)),PSOX=$S(PSOX1=11:PSOX,1:PSOX1) | 
|---|
|  | 110 | .S PSDY=PSODIR("DAYS SUPPLY"),PSDY1=$S(PSDY<60:11,PSDY'<60&(PSDY'>89):5,PSDY=90:3,1:0) S PSOX=$S(PSOX'>PSDY1:PSOX,1:PSDY1) | 
|---|
|  | 111 | I '$D(CLOZPAT) I PSODRUG("DEA")["A"&(PSODRUG("DEA")'["B")!(PSODRUG("DEA")["F") D  G REFILLX | 
|---|
|  | 112 | .I PSODRUG("DEA")["A"&(PSODRUG("DEA")'["B")!'$O(^PSRX(+$G(PSODIR("IRXN")),1,0))!('$G(PSOLOKED)) D  Q | 
|---|
|  | 113 | ..S VALMSG="No refills allowed on "_$S(PSODRUG("DEA")["F":"this drug.",1:"Narcotics.") W !,VALMSG,! | 
|---|
|  | 114 | ..S:$D(PSODIR("FIELD")) PSODIR("FIELD")=0 S PSODIR("# OF REFILLS")=0 | 
|---|
|  | 115 | ..Q | 
|---|
|  | 116 | .;reset refills to the # given | 
|---|
|  | 117 | .D RFRSET^PSODIR2 | 
|---|
|  | 118 | .Q | 
|---|
|  | 119 | I $P($G(PSODIR("CS")),"^",2)=1 W !,"No refills allowed on Schedule 2 drugs...",! S:$D(PSODIR("FIELD")) PSODIR("FIELD")=0 S PSODIR("# OF REFILLS")=0 G REFILLX | 
|---|
|  | 120 | I $D(CLOZPAT) S PSOX=$S($G(CLOZPAT)=2&(PSODIR("DAYS SUPPLY")=14):1,$G(CLOZPAT)=2&(PSODIR("DAYS SUPPLY")=7):3,$G(CLOZPAT)=1&(PSODIR("DAYS SUPPLY")=7):1,1:0) | 
|---|
|  | 121 | S DIR(0)="N^"_$S($G(RFTT):RFTT,1:0)_":"_PSOX,DIR("A")="# OF REFILLS" | 
|---|
|  | 122 | S DIR("B")=$S($G(COPY):PSODIR("# OF REFILLS"),$G(PSODIR("N# REF"))]"":PSODIR("N# REF"),$G(PSODIR("# OF REFILLS"))]"":PSODIR("# OF REFILLS"),$G(PSOX1)]""&(PSOX>PSOX1):PSOX1,1:PSOX) | 
|---|
|  | 123 | S DIR("?")="Enter a whole number.  The maximum is set by the DAYS SUPPLY field." | 
|---|
|  | 124 | D DIR G:PSODIR("DFLG")!PSODIR("FIELD") REFILLX | 
|---|
|  | 125 | S (PSODIR("N# REF"),PSODIR("# OF REFILLS"))=Y | 
|---|
|  | 126 | REFILLX S:$G(PSODIR("# OF REFILLS"))']"" PSODIR("# OF REFILLS")=$S($G(PSODIR("N# REF"))]"":PSODIR("N# REF"),$G(PSOX1)]""&($G(PSOX)>PSOX1):PSOX1,1:PSOX) | 
|---|
|  | 127 | K X,Y,PSOX,PSOX1,PSDY,PSDY1,DEA,PSOCS | 
|---|
|  | 128 | Q | 
|---|
|  | 129 | ;OERR CALL | 
|---|
|  | 130 | REFOR ; | 
|---|
|  | 131 | D REFOR^PSODIR3 | 
|---|
|  | 132 | G REFILLX | 
|---|
|  | 133 | Q | 
|---|
|  | 134 | DIR ; | 
|---|
|  | 135 | S (PSODIR("FIELD"),PSODIR("DFLG"))=0 | 
|---|
|  | 136 | G:$G(DIR(0))']"" DIRX | 
|---|
|  | 137 | D ^DIR K DIR,DIE,DIC,DA | 
|---|
|  | 138 | I $D(DUOUT)!($D(DTOUT))!($D(DIROUT)),$L($G(X))'>1!(Y="") S PSODIR("DFLG")=1 G DIRX | 
|---|
|  | 139 | I $D(DIRUT)!($D(DIROUT)),$G(SPEED) S PSODIR("DFLG")=1 G DIRX | 
|---|
|  | 140 | I X[U,$L(X)>1 D JUMP | 
|---|
|  | 141 | DIRX K DIRUT,DTOUT,DUOUT,DIROUT | 
|---|
|  | 142 | Q | 
|---|
|  | 143 | JUMP ; | 
|---|
|  | 144 | I $G(PSOEDIT)!($G(OR0)) S PSODIR("DFLG")=1 Q | 
|---|
|  | 145 | S X=$P(X,"^",2),DIC="^DD(52,",DIC(0)="QM" D ^DIC K DIC | 
|---|
|  | 146 | I Y=-1 S PSODIR("FIELD")=PSODIR("FLD") G JUMPX | 
|---|
|  | 147 | I $G(PSONEW1)=0 D JUMP^PSONEW1 G JUMPX | 
|---|
|  | 148 | I $G(PSOREF1)=0 D JUMP^PSOREF1 G JUMPX | 
|---|
|  | 149 | I $G(PSONEW3)=0 D JUMP^PSONEW3 G JUMPX | 
|---|
|  | 150 | I $G(PSORENW3)=0 D JUMP^PSORENW3 G JUMPX | 
|---|
|  | 151 | JUMPX S X="^"_X | 
|---|
|  | 152 | Q | 
|---|
|  | 153 | SIGOK ;review and decide on oerr sig | 
|---|
|  | 154 | I '$O(SIG(0)) S SIGOK=0 Q | 
|---|
|  | 155 | K SIGOK W !,"SIG: " | 
|---|
|  | 156 | F SIG=0:0 S SIG=$O(SIG(SIG)) W SIG(SIG)_" ",!?5 Q:'$O(SIG(SIG)) | 
|---|
|  | 157 | K DIR,DIRUT,DUOUT,DTOUT S DIR("B")="YES",DIR(0)="Y",DIR("A")="Is this SIG correct" D ^DIR K DIR I $D(DIRUT) S PSODIR("DFLG")=1 K DIRUT,DUOUT,DTOUT Q | 
|---|
|  | 158 | S SIGOK=Y I Y K PSODIR("SIG") | 
|---|
|  | 159 | Q | 
|---|
|  | 160 | PSTPB ; | 
|---|
|  | 161 | W !,"New orders entered through this option must have a Patient Status of 'NON-VA'!",! | 
|---|
|  | 162 | Q | 
|---|