| [623] | 1 | PSODRDUP ;BIR/SAB - Dup drug class checker ;11/1/04 3:38pm | 
|---|
|  | 2 | ;;7.0;OUTPATIENT PHARMACY;**11,23,27,32,39,56,130,132,192,207,222,243,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 | ; | 
|---|
|  | 20 | ;External references PSOL and PSOUL^PSSLOCK supported by DBIA 2789 | 
|---|
|  | 21 | I $G(PSOAFYN)="Y" Q  ;vfam No Dup Drug Check by AutoFinish,Rx - VOE | 
|---|
|  | 22 | S $P(PSONULN,"-",79)="-",(STA,DNM)="" K CLS | 
|---|
|  | 23 | F  S STA=$O(PSOSD(STA)) Q:STA=""  F  S DNM=$O(PSOSD(STA,DNM)) Q:DNM=""!$G(PSORX("DFLG"))  I $P(PSOSD(STA,DNM),"^")'=$G(PSORENW("OIRXN")) D  Q:$G(PSORX("DFLG")) | 
|---|
|  | 24 | .I STA="PENDING" D ^PSODRDU1 Q | 
|---|
|  | 25 | .I STA="ZNONVA" D NVA^PSODRDU1 Q | 
|---|
|  | 26 | .D:PSODRUG("NAME")=$P(DNM,"^")&('$D(^XUSEC("PSORPH",DUZ)))  Q:$G(PSORX("DFLG")) | 
|---|
|  | 27 | ..I $P($G(PSOPAR),"^",16) D DUP Q:$G(PSORX("DFLG")) | 
|---|
|  | 28 | ..I $P(PSOPAR,"^",2),'$P($G(PSOPAR),"^",16) D DUP Q:$G(PSORX("DFLG")) | 
|---|
|  | 29 | ..I '$P(PSOPAR,"^",2),'$P($G(PSOPAR),"^",16) D DUP Q:$G(PSORX("DFLG")) | 
|---|
|  | 30 | .D:PSODRUG("NAME")=$P(DNM,"^")&($D(^XUSEC("PSORPH",DUZ))) DUP Q:$G(PSORX("DFLG")) | 
|---|
|  | 31 | .I PSODRUG("VA CLASS")]"",$E(PSODRUG("VA CLASS"),1,4)=$E($P(PSOSD(STA,DNM),"^",5),1,4),PSODRUG("NAME")'=$P(DNM,"^") D CLS | 
|---|
|  | 32 | K ^TMP($J,"DD"),^TMP($J,"DC"),^TMP($J,"DI") | 
|---|
|  | 33 | D REMOTE^PSOCPDUP | 
|---|
|  | 34 | EXIT D ^PSOBUILD K CAN,DA,DIR,DNM,DUPRX0,ISSD,J,LSTFL,MSG,PHYS,PSOCLC,PSONULN,REA,RFLS,RX0,RX2,RXN,RXREC,ST,Y,ZZ,ACT,PSOCLOZ,PSOLR,PSOLDT,PSOCD,SIG | 
|---|
|  | 35 | Q | 
|---|
|  | 36 | DUP S:$P(PSOSD(STA,DNM),"^",2)<10!($P(PSOSD(STA,DNM),"^",2)=16) DUP=1 W !,PSONULN,!,$C(7),"Duplicate Drug "_$P(DNM,"^")_" in Prescription: ",$P(^PSRX(+PSOSD(STA,DNM),0),"^") | 
|---|
|  | 37 | S RXREC=+PSOSD(STA,DNM),MSG="Discontinued During "_$S('$G(PSONV):"New Prescription Entry",1:"Verification")_" - Duplicate Drug" | 
|---|
|  | 38 | DATA S DUPRX0=^PSRX(RXREC,0),RFLS=$P(DUPRX0,"^",9),ISSD=$P(^PSRX(RXREC,0),"^",13),RX0=DUPRX0,RX2=^PSRX(RXREC,2),$P(RX0,"^",15)=+$G(^PSRX(RXREC,"STA")) | 
|---|
|  | 39 | S RXRECLOC=$G(RXREC) | 
|---|
|  | 40 | W !!,$J("Status: ",24) S J=RXREC D STAT^PSOFUNC W ST K RX0,RX2 W ?40,$J("Issued: ",24),$E(ISSD,4,5)_"/"_$E(ISSD,6,7)_"/"_$E(ISSD,2,3) | 
|---|
|  | 41 | S DA=RXREC D ^PSOCMOPA I $G(PSOCMOP)]"" D  K CMOP,PSOTRANS,PSOREL | 
|---|
|  | 42 | .S PSOTRANS=$E($P(PSOCMOP,"^",2),4,5)_"/"_$E($P(PSOCMOP,"^",2),6,7)_"/"_$E($P(PSOCMOP,"^",2),2,3) | 
|---|
|  | 43 | .S PSOREL=$S(CMOP("L")=0:$P($G(^PSRX(DA,2)),"^",13),1:$P(^PSRX(DA,1,CMOP("L"),0),"^",18)) | 
|---|
|  | 44 | .S PSOREL=$E(PSOREL,4,5)_"/"_$E(PSOREL,6,7)_"/"_$E(PSOREL,2,3)_"@"_$E($P(PSOREL,".",2),1,4) | 
|---|
|  | 45 | .W !,$J("CMOP Status: ",24)_$S($P(PSOCMOP,"^")=0!($P(PSOCMOP,"^")=2):"Transmitted to on "_PSOTRANS,$P(PSOCMOP,"^")=1:"Released by CMOP on "_PSOREL,1:"Not Dispensed") | 
|---|
|  | 46 | K FSIG,BSIG I $P($G(^PSRX(RXREC,"SIG")),"^",2) D FSIG^PSOUTLA("R",RXREC,54) F PSREV=1:1 Q:'$D(FSIG(PSREV))  S BSIG(PSREV)=FSIG(PSREV) | 
|---|
|  | 47 | K FSIG,PSREV I '$P($G(^PSRX(RXREC,"SIG")),"^",2) D EN2^PSOUTLA1(RXREC,54) | 
|---|
|  | 48 | W !,$J("SIG: ",24) W $G(BSIG(1)) | 
|---|
|  | 49 | I $O(BSIG(1)) F PSREV=1:0 S PSREV=$O(BSIG(PSREV)) Q:'PSREV  W !?24,$G(BSIG(PSREV)) | 
|---|
|  | 50 | K BSIG,PSREV | 
|---|
|  | 51 | W !,$J("QTY: ",24)_$P(DUPRX0,"^",7),?40,$J("# of refills: ",24)_RFLS S PHYS=$S($D(^VA(200,+$P(DUPRX0,"^",4),0)):$P(^(0),"^"),1:"UNKNOWN") | 
|---|
|  | 52 | W !,$J("Provider: ",24)_PHYS,?40,$J("Refills remaining: ",24),RFLS-$S($D(^PSRX(RXREC,1,0)):$P(^(0),"^",4),1:0) | 
|---|
|  | 53 | S LSTFL=+^PSRX(RXREC,3) W !?40,$J("Last filled on: ",24)_$E(LSTFL,4,5)_"/"_$E(LSTFL,6,7)_"/"_$E(LSTFL,2,3),!?40,$J("Days Supply: ",24)_$P(DUPRX0,"^",8) | 
|---|
|  | 54 | W !,PSONULN,! I $P($G(^PS(53,+$P($G(PSORX("PATIENT STATUS")),"^"),0)),"^")["AUTH ABS"!($G(PSORX("PATIENT STATUS"))["AUTH ABS")&'$P(PSOPAR,"^",5) W !,"PATIENT ON AUTHORIZED ABSENCE!" K RXRECLOC Q | 
|---|
|  | 55 | ASKCAN I $P(PSOSD(STA,DNM),"^",2)>10,$P(PSOSD(STA,DNM),"^",2)'=16 K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR,DTOUT,DUOUT,DIRUT,RXRECLOC Q | 
|---|
|  | 56 | I '$P(PSOPAR,"^",2),'$P(PSOPAR,"^",16),'$D(^XUSEC("PSORPH",DUZ)),'$G(CLS) S PSORX("DFLG")=1 K RXRECLOC Q | 
|---|
|  | 57 | I $P(PSOPAR,"^",2),'$P(PSOPAR,"^",16),'$D(^XUSEC("PSORPH",DUZ)),'$G(CLS) S PSORX("DFLG")=1 K RXRECLOC Q | 
|---|
|  | 58 | I $P(PSOSD(STA,DNM),"^",2)=16,$G(DUP) W !!,"Prescription "_$P($G(^PSRX(+$G(RXRECLOC),0)),"^")_" is on Provider Hold, it cannot be discontinued.",! K DUP,RXRECLOC S PSORX("DFLG")=1 Q | 
|---|
|  | 59 | D PSOL^PSSLOCK(RXRECLOC) I '$G(PSOMSG) D  K PSOMSG,DIR,DUP,RXRECLOC S DIR("A")="Press Return to continue",DIR(0)="E" D ^DIR K DIR S PSORX("DFLG")=1 Q | 
|---|
|  | 60 | .I $P($G(PSOMSG),"^",2)'="" W !!,$P(PSOMSG,"^",2),! Q | 
|---|
|  | 61 | .W !!,"Another person is editing Rx "_$P($G(^PSRX(RXRECLOC,0)),"^"),! | 
|---|
|  | 62 | K PSOMSG S DIR("A")=$S($P(PSOSD(STA,DNM),"^",2)=12:"Reinstate",1:"Discontinue")_" RX # "_$P(^PSRX(+PSOSD(STA,DNM),0),"^"),DIR(0)="Y",DIR("?")="Enter Y to "_$S($P(PSOSD(STA,DNM),"^",2)=12:"reinstate",1:"discontinue")_" this RX." | 
|---|
|  | 63 | D ^DIR K DIR S DA=RXREC S ACT=$S($D(SPCANC):"Reinstated during Rx cancel.",1:$S($P(PSOSD(STA,DNM),"^",2)=12:"Reinstated",1:"Discontinued")_" while "_$S('$G(PSONV):"entering",1:"verifying")_" new RX") | 
|---|
|  | 64 | D CMOP^PSOUTL I $G(CMOP("S"))="L" W !,"A CMOP Rx cannot be discontinued during transmission!",! S Y=0 K CMOP | 
|---|
|  | 65 | I 'Y W $C(7)," -Prescription was not "_$S($P(PSOSD(STA,DNM),"^",2)=12:"reinstated",1:"discontinued")_"..." D  Q | 
|---|
|  | 66 | .S:'$D(PSOCLC) PSOCLC=DUZ S MSG=ACT,REA=$S($P(PSOSD(STA,DNM),"^",2)=12:"R",1:"C") S:$G(DUP) PSORX("DFLG")=1 K DUP D ULRX K RXRECLOC | 
|---|
|  | 67 | .I $D(^TMP("PSORXDC",$J,RXREC,0)) K ^TMP("PSORXDC",$J,RXREC,0) | 
|---|
|  | 68 | I $P(PSOSD(STA,DNM),"^",2)=16,$G(CLS) W !!,"Prescription "_$P($G(^PSRX(+$G(RXRECLOC),0)),"^")_" is on Provider Hold, it cannot be discontinued.",! D ULRX K CLS,DUP,RXRECLOC S PSORX("DFLG")=1 H 2 Q | 
|---|
|  | 69 | S PSOCLC=DUZ,MSG=$S($G(MSG)]"":MSG,1:ACT_" During New RX "_$S('$G(PSONV):"Entry",1:"Verification")_" - Duplicate Rx"),REA=$S($P(PSOSD(STA,DNM),"^",2)=12:"R",1:"C") | 
|---|
|  | 70 | W !!,"Duplicate "_$S($G(CLS):"Class",1:"Drug")_" will be discontinued after the acceptance of the new order.",! | 
|---|
|  | 71 | S ^TMP("PSORXDC",$J,RXREC,0)="52^"_DA_"^"_MSG_"^"_REA_"^"_ACT_"^"_STA_"^"_DNM,PSONOOR="D" | 
|---|
|  | 72 | K RXRECLOC,DUP,CLS,PSONOOR Q | 
|---|
|  | 73 | CLS K DUP | 
|---|
|  | 74 | I $E($G(PSODRUG("VA CLASS")),1,2)="HA",$E($P($G(PSOSD(STA,DNM)),"^",5),1,2)="HA" K PSOELSE Q | 
|---|
|  | 75 | S CLS=1,MSG="Discontinued During "_$S('$G(PSONV):"New Prescription Entry",1:"Verification")_" - Duplicate Class" W !,PSONULN | 
|---|
|  | 76 | W !?5,$C(7),"*** SAME CLASS *** OF DRUG IN RX #"_$P(^PSRX(+PSOSD(STA,DNM),0),"^")_" FOR "_$P(DNM,"^"),!,"CLASS: "_PSODRUG("VA CLASS") | 
|---|
|  | 77 | S CAN=$P(PSOSD(STA,DNM),"^",2)'<11!($P(PSOSD(STA,DNM),"^",2)=1) S RXREC=+PSOSD(STA,DNM) I $P($G(PSOPAR),"^",10) D DATA Q | 
|---|
|  | 78 | E  W !,PSONULN K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR,DTOUT,DUOUT,DIRUT | 
|---|
|  | 79 | K PSOELSE Q | 
|---|
|  | 80 | ULRX ; | 
|---|
|  | 81 | I '$G(RXRECLOC) Q | 
|---|
|  | 82 | D PSOUL^PSSLOCK(RXRECLOC) | 
|---|
|  | 83 | Q | 
|---|
|  | 84 | ; | 
|---|