| 1 | PSOVER ;BIR/SAB-verify rx's by clerk ;07/03/95 | 
|---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**16,21,27,117,131,146**;DEC 1997 | 
|---|
| 3 | ;External references L, UL, PSOL, and PSOUL^PSSLOCK supported by DBIA 2789 | 
|---|
| 4 | ;External reference to ^PS(56 supported by DBIA 2229 | 
|---|
| 5 | D:'$D(PSOPAR) ^PSOLSET I '$D(PSOPAR) W $C(7),!!,"Pharmacy Division Must be Selected!",! Q | 
|---|
| 6 | Q:'$D(^XUSEC("PSORPH",DUZ))  S PSOZVER=1 | 
|---|
| 7 | PAT K PSOTT,PSOACT,PSOVER,PSOQUIT W !! S DIC("A")="Enter PATIENT NAME (or ^C to verify for a clerk): ",DIC="^DPT(",DIC("S")="I $D(^PS(52.4,""C"",+Y))",DIC(0)="QEAMZ" D ^DIC K DIC G CLERK:$E(X,1,2)="^C",END:Y'>0 | 
|---|
| 8 | S PSONV=0,(DFN,PSDFN,PSODFN)=+Y,PPL="",PSONAM=$P(^DPT(PSDFN,0),"^") D ^PSOBUILD | 
|---|
| 9 | L1 D PID^VADPT S PSONV=$O(^PS(52.4,"C",PSDFN,PSONV)) I 'PSONV D PACK G PAT | 
|---|
| 10 | F DGDG=0:0 S DGDG=$O(^PS(52.4,"C",PSDFN,DGDG)) S PSONV=DGDG K PSOSIG,PSOTHER Q:'DGDG!($D(PSOQUIT))  D | 
|---|
| 11 | .I $D(^PS(52.4,"ADI",DGDG,1)) S PSONV=DGDG D DGDGI Q | 
|---|
| 12 | .I $D(^PSRX(PSONV,"DRI")) S PSOSIG=1 D DGDGI Q | 
|---|
| 13 | .D:'$D(^PS(52.4,"ADI",PSONV,1))&('$D(^PSRX(PSONV,"DRI"))) DSPL Q | 
|---|
| 14 | G QUIT:$D(PSOSD) | 
|---|
| 15 | ; | 
|---|
| 16 | SHOW I '$D(PSOSD) W !,$C(7),"This patient has no prescriptions on file",!! Q | 
|---|
| 17 | D ^PSODSPL Q | 
|---|
| 18 | ; | 
|---|
| 19 | CLERK D:'$D(PSOPAR) ^PSOLSET I '$D(PSOPAR) W $C(7),!!,"Pharmacy Division Must be Selected!",! G END | 
|---|
| 20 | K PSOVERPL,PSOVERPX,PSOVERPH,PSOVERLX | 
|---|
| 21 | K PSOQUIT,PSOCQ S PSOCLK=1 W ! S DIC="^VA(200,",DIC(0)="AEQM",DIC("S")="I $D(^PS(52.4,""D"",+Y))",DIC("A")="Enter Clerk Name: " D ^DIC K DIC K:Y'>0!($D(DTOUT)) PSORX G END:Y'>0!($D(DTOUT)) S PSOTT=+Y,(PSONV,PSDFN0)=0,PPL="" K PSOVER,PSONAM | 
|---|
| 22 | CL1 F DGDG=0:0 S DGDG=$O(^PS(52.4,"D",PSOTT,DGDG)) Q:'DGDG!($D(PSOQUIT))!($G(PSOCQ))  S (DFN,PSOVERPX,PSDFN,PSODFN)=$P(^PS(52.4,DGDG,0),"^",2),PSONV=DGDG D PATCHK K PSOSIG,PSOTHER S CLFLAG=1 D STAT^PSODGDG2 K CLFLAG D:'$G(FLAGST) | 
|---|
| 23 | .S PSONVXX=PSONV | 
|---|
| 24 | .I $G(PSOVERPH)=$G(PSOVERPX),$G(PSOVERLX) Q | 
|---|
| 25 | .I $G(PSOVERPH)'=$G(PSOVERPX) K PSOVERLX D:$G(PSOVERPH)&('$G(PSOVERPL)) ULP S PSOVERPH=PSOVERPX D LPAT I $G(PSOVERPL) Q | 
|---|
| 26 | .S PSDFN0=PSDFN | 
|---|
| 27 | .D LRX I '$G(PSOMSG) Q | 
|---|
| 28 | .K PSOMSG I $D(^PS(52.4,"ADI",DGDG,1)) S PSONV=DGDG D DGDGI D PSOUL^PSSLOCK(PSONVXX) Q | 
|---|
| 29 | .I $D(^PSRX(PSONV,"DRI")) S PSOSIG=1 D DGDGI D PSOUL^PSSLOCK(PSONVXX) Q | 
|---|
| 30 | .D:'$D(^PS(52.4,"ADI",PSONV,1))&('$D(^PSRX(PSONV,"DRI"))) DSPL D PSOUL^PSSLOCK(PSONVXX) Q | 
|---|
| 31 | D:$G(PSOVERPH)&('$G(PSOVERPL)) ULP | 
|---|
| 32 | CL2 D PACK G CLERK | 
|---|
| 33 | PATCHK I $D(PSOVER),PSDFN0,PSDFN0'=DFN S (DFN,PSDFN)=PSDFN0 D PACK S (DFN,PSDFN)=PSODFN D ^PSOBUILD,PID^VADPT S PSONAM=$P(^DPT(DFN,0),"^") Q | 
|---|
| 34 | I PSDFN0'=DFN D ^PSOBUILD,PID^VADPT S PSONAM=$P(^DPT(DFN,0),"^") | 
|---|
| 35 | Q | 
|---|
| 36 | PACK S PPL="" F J=0:0 S J=$O(PSOVER(J)) Q:'J  S PPL=PPL_J_"," | 
|---|
| 37 | I PPL]"" S PSOOPT=3,PSOTRVV=1 D ^PSORXL K PSOOPT,PSOTRVV | 
|---|
| 38 | K PSD,PSOVER S PPL="" Q | 
|---|
| 39 | QUIT D PACK | 
|---|
| 40 | END K CAN,CLS,DA,DEA1,DEA2,DIC,DIE,DR,DRG,DRGG,DUP,DUPRX,DUPRX0,FLDT,I,ISDT,ISSD,J,LSTFL,PHYS,PPL,PSC,PSD,PSDFN,PSDFN0,PSDNEW,PSDOLD,PSMSG,PSONV,PSOQUIT,PSOTT,PSOVER,PSREA,PSRFLS,PSRX,PSRX1,PSRX2,PSRXREF,PSVERFLG,RFLS,RX0,RX2,RX3,ST,ST0,STAR,X,Y | 
|---|
| 41 | K D0,DQ,N,PHY,RFL,PSI,PSOTHER,PSS,PSOZVER,PI,PTST,SD,PSONAM,PSONULN,RFDATE,RFL1,RXF,Z,DRUG,II,RFLL,DRGX,DIPGM,PSOCNT,A1,C,ST00,FLAGST,STEXT,PSOCLK,PSOCQ,PSOVERPL,PSOVERPX,PSOVERPH,PSOVERLX,VERLFLAG,PSONVXX D KVA^VADPT | 
|---|
| 42 | K PSONOOR,PSOSIG,DIR,DUOUT,DTOUT,DIRUT,DIROUT,INA,MED,SER1 K:'$G(POERR) PSOSD Q | 
|---|
| 43 | DSPL Q:$P(^PSRX(PSONV,"STA"),"^")=13 | 
|---|
| 44 | S DA=PSONV I $P($G(^PSRX(DA,"PKI")),"^") N PKI,PKI1,PKIR,PKIE D CER^PSOPKIV1 | 
|---|
| 45 | D ^PSORXPR W !,"PATIENT STATUS : ",$P(^PS(53,$P(^PSRX(DA,0),"^",3),0),"^") W:+$P(^PSRX(DA,0),"^",18)'=0 ?42,"COPIES : ",$P(^(0),"^",18) W:$D(^PSRX(DA,"MP")) !,"METHOD OF PICKUP : ",^("MP"),! | 
|---|
| 46 | S PSVFLAG=1 D ^PSOVER1 K PSVFLAG | 
|---|
| 47 | Q | 
|---|
| 48 | DGDGI ;process drug interaction for non verified rxs | 
|---|
| 49 | S SER1=$S('$G(PSOSIG):$P(^PS(52.4,PSONV,0),"^",9),1:$P(^PSRX(PSONV,"DRI"),"^")) | 
|---|
| 50 | S MED=$S('$G(PSOSIG):$P(^PS(52.4,PSONV,0),"^",10),1:$P(^PSRX(PSONV,"DRI"),"^",2)) | 
|---|
| 51 | K LOCKARRY,PSOVMSGX S VERLFLAG=0 I $G(MED) F LOCKINA=1:1 S PSOLKVRX=$P(MED,",",LOCKINA) Q:$G(PSOLKVRX)=""!($G(VERLFLAG))  D LK1 | 
|---|
| 52 | I $G(MED) I $G(VERLFLAG) D:$D(LOCKARRY) ULK1 W !!,"Cannot process this prescription, one of the interacting medications is",!,"being edited.",! D  K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR,PSOVMSGX G DONEX | 
|---|
| 53 | .I $G(PSOVMSGX)'="" W PSOVMSGX,! | 
|---|
| 54 | K PSOVMSGX | 
|---|
| 55 | S PSVERFLG=0,IFN=PSONV,INT=^PSRX(IFN,0) F INA=1:1 S PSODFN=DFN Q:$P(SER1,",",INA)=""!($G(MED)="")  S SER=^PS(56,$P(SER1,",",INA),0),RX=^PSRX($P(MED,",",INA),0),STA=+$G(^("STA")),$P(RX,"^",15)=STA S PSOOPT=1 D:STA'=13 PROCESS^PSODGDG1 | 
|---|
| 56 | I 'PSVERFLG I $P(^PSRX(PSONV,"STA"),"^")=4!($P(^("STA"),"^")=1) S $P(^PSRX(PSONV,"STA"),"^")=1 D DSPL G DONE | 
|---|
| 57 | I '$D(^PS(52.4,"ADI",PSONV,1)),$P(^PSRX(PSONV,"STA"),"^")=1 D DSPL G DONE | 
|---|
| 58 | I 'PSVERFLG,$P(^PSRX(PSONV,"STA"),"^")=1 D DSPL | 
|---|
| 59 | DONE I $P(^PSRX(PSONV,"STA"),"^")'=1,$P(^("STA"),"^")'=4 K ^PSRX(PSONV,"DRI") | 
|---|
| 60 | S PSOTHER="" F  S PSOTHER=$O(PSOTHER(PSOTHER)) Q:PSOTHER=""  D | 
|---|
| 61 | .I $G(PSOTHER),$P($G(^PSRX(PSOTHER,"STA")),"^")=1,$P($G(^PS(52.4,PSOTHER,0)),"^",10)="" S PSONV=PSOTHER D DSPL | 
|---|
| 62 | D:$D(LOCKARRY) ULK1 | 
|---|
| 63 | DONEX K PSOOPT,SER,LOCKARRY,LOCKINA,PSOLKVRX Q | 
|---|
| 64 | OERR K PSONOOR,PSOVER I $G(PSONACT) W $C(7),$C(7) S VALMSG="No Pharmacy Orderable Item!",VALMBCK="" Q | 
|---|
| 65 | I $G(PSOTPBFG) N PSOTPPEN,PSOTPPEX,PSOTPPE9 S PSOTPPEN=$P(PSOLST($P(PSLST,",",ORD)),"^",2),PSOTPPEX=0,PSOTPPE9=1 D VOPN^PSOTPCAN I PSOTPPEX S VALMBCK="" K PSOTPPEN,PSOTPPEX,PSOTPPE9 Q | 
|---|
| 66 | K PSOTPPEN,PSOTPPEX,PSOTPPE9 | 
|---|
| 67 | I $G(PSOBEDT) W $C(7),$C(7) S VALMSG="Invalid Action at this time !",VALMBCK="" Q | 
|---|
| 68 | I '$D(^XUSEC("PSORPH",DUZ)) S VALMSG="Unauthorized Action!",VALMBCK="" Q | 
|---|
| 69 | S PSOVRXN=$P(PSOLST($P(PSLST,",",ORD)),"^",2),PSOVDFN=$P($G(^PSRX(PSOVRXN,0)),"^",2) | 
|---|
| 70 | S PSOPLCK=$$L^PSSLOCK(PSOVDFN,0) I '$G(PSOPLCK) S VALMSG=$S($P($G(PSOPLCK),"^",2)'="":$P($G(PSOPLCK),"^",2)_" is working on this patient.",1:"Another person is editing orders for this patient.") S VALMBCK="" K PSOPLCK Q | 
|---|
| 71 | K PSOPLCK D PSOL^PSSLOCK(PSOVRXN) I '$G(PSOMSG) D UL^PSSLOCK(PSOVDFN) S VALMSG=$S($P($G(PSOMSG),"^",2)'="":$P($G(PSOMSG),"^",2),1:"Another person is editing this order.") K PSOMSG S VALMBCK="" Q | 
|---|
| 72 | N PSODFN S (PSOZVER,PSLSTVER)=1 | 
|---|
| 73 | D FULL^VALM1 S (PSONV,X,DA)=$P(PSOLST($P(PSLST,",",ORD)),"^",2) K DIC S DIC(0)="NZ",DIC=52.4 D ^DIC K DIC I Y<1 D  D:'$G(PSLSTVER) ULB Q:'$G(PSLSTVER) | 
|---|
| 74 | .I $P($G(^PSRX(+PSONV,"STA")),"^")'=1,$P($G(^("STA")),"^")'=4 K PSONV,DA,X,Y,PSOZVER,PSLSTVER S VALMSG="Invalid Action Selection!",VALMBCK="" Q | 
|---|
| 75 | .S PSLSTVER=2 | 
|---|
| 76 | .S DIC="^PS(52.4,",DLAYGO=52.4,(DINUM,X)=PSONV,DIC(0)="L" K DD,DO D FILE^DICN K DD,DO,DIC,DINUM,DLAYGO | 
|---|
| 77 | .S ^PS(52.4,PSONV,0)=PSONV_"^"_$P(^PSRX(PSONV,0),"^",2)_"^"_+$P(^(0),"^",16)_"^^"_$E($P($G(^(2)),"^"),1,7)_"^"_PSONV_"^"_$E($P($G(^(2)),"^",6),1,7) | 
|---|
| 78 | .S DIK="^PS(52.4,",DA=PSONV D IX^DIK K DIK S Y(0)=^PS(52.4,PSONV,0),(X,DA)=PSONV | 
|---|
| 79 | D STAT^PSODGDG2 G:FLAGST EOJ | 
|---|
| 80 | N LST S (DFN,PSDFN,PSODFN)=$P(Y(0),"^",2),PPL="",PSONAM=$P(^DPT(PSDFN,0),"^") | 
|---|
| 81 | D PID^VADPT I $D(^PS(52.4,"ADI",PSONV,1)) D DGDGI G:$G(VERLFLAG) EOJ G PPL | 
|---|
| 82 | I $D(^PSRX(PSONV,"DRI")) S PSOSIG=1 D DGDGI G:$G(VERLFLAG) EOJ G PPL | 
|---|
| 83 | D:'$D(^PS(52.4,"ADI",PSONV,1))&('$D(^PSRX(PSONV,"DRI"))) DSPL | 
|---|
| 84 | PPL I $G(PSLSTVER)=2,$D(^PS(52.4,PSONV,0)) S DA=PSONV,DIK="^PS(52.4," D ^DIK K DIK,DA | 
|---|
| 85 | G EOJ:'$O(PSOVER(0)) | 
|---|
| 86 | S PSONVLP="" F  S PSONVLP=$O(PSOVER(PSONVLP)) Q:PSONVLP=""  D | 
|---|
| 87 | .D MARKV^PSOTPCAN | 
|---|
| 88 | .I $G(PSORX("PSOL",1))']"" S PSORX("PSOL",1)=PSONVLP_"," Q | 
|---|
| 89 | .F PSOX1=0:0 S PSOX1=$O(PSORX("PSOL",PSOX1)) Q:'PSOX1  S PSOX2=PSOX1 | 
|---|
| 90 | .I $L(PSORX("PSOL",PSOX2))+$L(PSONVLP)<220 S PSORX("PSOL",PSOX2)=PSORX("PSOL",PSOX2)_PSONVLP_"," | 
|---|
| 91 | .E  S PSORX("PSOL",PSOX2+1)=PSONVLP_"," | 
|---|
| 92 | EOJ D ULB,END K D,DGDG,MW,PSONVLP,P,PCOMX,PDA,PSPRXN,RX,PSD,PSOSTA,PSLSTVER | 
|---|
| 93 | L -^PSRX($P(PSOLST(ORN),"^",2)) | 
|---|
| 94 | Q | 
|---|
| 95 | LPAT ; | 
|---|
| 96 | K PSOVERPL | 
|---|
| 97 | I '$G(PSOVERPX) Q | 
|---|
| 98 | S PSOPLCK=$$L^PSSLOCK(PSOVERPX,0) I '$G(PSOPLCK) D LOCK^PSOORCPY S (PSOVERPL,PSOVERLX)=1 | 
|---|
| 99 | K PSOPLCK | 
|---|
| 100 | Q | 
|---|
| 101 | ULP ; | 
|---|
| 102 | I '$G(PSOVERPH) Q | 
|---|
| 103 | D UL^PSSLOCK(PSOVERPH) K PSOVERPH | 
|---|
| 104 | Q | 
|---|
| 105 | LRX ; | 
|---|
| 106 | K PSOMSG I '$G(PSONV) Q | 
|---|
| 107 | D PSOL^PSSLOCK(PSONV) I '$G(PSOMSG) W !!,$S($P($G(PSOMSG),"^",2)'="":$P($G(PSOMSG),"^",2),1:"Another person is editing this order."),! D  K DIR S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR K DIR | 
|---|
| 108 | .I $G(PSDFN) W "for patient "_$P($G(^DPT(PSDFN,0)),"^")_".",! | 
|---|
| 109 | Q | 
|---|
| 110 | ULRX ; | 
|---|
| 111 | I '$G(PSONV) Q | 
|---|
| 112 | D PSOUL^PSSLOCK(PSONV) | 
|---|
| 113 | Q | 
|---|
| 114 | LK1 ; | 
|---|
| 115 | I '$G(PSOLKVRX) Q | 
|---|
| 116 | D PSOL^PSSLOCK(PSOLKVRX) I '$G(PSOMSG) S VERLFLAG=1,PSOVMSGX=$P($G(PSOMSG),"^",2) Q | 
|---|
| 117 | S LOCKARRY(PSOLKVRX)=PSOLKVRX | 
|---|
| 118 | Q | 
|---|
| 119 | ULK1 ; | 
|---|
| 120 | I '$D(LOCKARRY) Q | 
|---|
| 121 | S PSOVOLK="" F  S PSOVOLK=$O(LOCKARRY(PSOVOLK)) Q:$G(PSOVOLK)=""  D PSOUL^PSSLOCK(PSOVOLK) | 
|---|
| 122 | K PSOVOLK | 
|---|
| 123 | Q | 
|---|
| 124 | ULB ; | 
|---|
| 125 | I $G(PSOVDFN) D UL^PSSLOCK(PSOVDFN) | 
|---|
| 126 | I $G(PSOVRXN) D PSOUL^PSSLOCK(PSOVRXN) | 
|---|
| 127 | K PSOVDFN,PSOVRXN | 
|---|
| 128 | Q | 
|---|