PSOSUCHG ;BIR/RTR-CHANGE SUSPENSE AND FILL AND REFILL DATES ;4/29/93
;;7.0;OUTPATIENT PHARMACY;**20,26,130,235,148,561**;DEC 1997;Build 41
;External reference A^PSXCH is supported by DBIA 2205
;External references PSOL and PSOUL^PSSLOCK supported by DBIA 2789
;External reference P^PSXCH is supported by DBIA 2205
;External reference to ^PS(55 supported by DBIA 2228
;External reference to ^DPT supported by DBIA 10035
I '$D(PSOPAR) D ^PSOLSET I '$D(PSOPAR) D WARN^PSOSUDCN Q
LU N PSOSDLK,PSOLKQT,PSODELLK,PSOSSTP W !! S DIR("A")="Change a specific Rx# or all Rx's for one patient",DIR(0)="SBO^S:SPECIFIC RX;A:ALL RXs FOR ONE PATIENT"
S DIR("?",1)="Enter 'S' to change a single prescription suspense date.",DIR("?")="Enter 'A' to change all of the prescription suspense dates for one patient."
D ^DIR K DIR G:$G(DIRUT)!(Y="") EXIT S ACT=Y D:ACT="A" ALL D:ACT="S" SPEC D ULK G LU
EXIT D ULK K ISFLAG,ACT,BC,BCNUM,CBD,CNT,COM,D1,DA,DEAD,DEL,DELCNT,DFN,DIRUT,DR,DTOUT,DUOUT,HDSFN,I,II,INDT,OLD,OUT,PSPOP,RF,RFCNT,RX,RXDATE,RXREC,SFN,STOP,SUB,SUSCNT,VADM,WARN,X,Y,XOK,SRXPAR,SRXREC,SUSDOD,RECORD,PSOPOPUP,PSOSDLK,DELFLAG
K VADM,VA("PID"),VA("BID"),PSDIVCHK,PSOMSG,PSOLKQT,PSODELLK,PSOSSTP Q
SPEC D ULK K INDT S (DELCNT,WARN,PSPOP,OUT)=0 W ! S DIR("A")="Select SUSPENDED Rx #: ",DIR(0)="FOA",DIR("?")="Enter the prescription# or wand the barcode. To obtain a list of suspense prescriptions, type '??'",DIR("??")="^D LISTSUS^PSOSUCH1"
D ^DIR K DIR Q:$D(DIRUT) D:Y["-" PSOINST^PSOSUPAT G:$G(OUT) SPEC D W ! S DIC("S")="I $D(^PSRX(+$P(^PS(52.5,+Y,0),""^""),0))",DIC="^PS(52.5,",DIC(0)="ZQE" D ^DIC K DIC W ! Q:$D(DTOUT)!($D(DUOUT))
.I Y["-" S Y=$P(Y,"-",2),X=+$P($G(^PSRX(Y,0)),"^") Q
.S X=Y
G:Y<0 SPEC S DEAD=0,(SFN,DA)=+Y,RXREC=+Y(0),DFN=$P(^PS(52.5,SFN,0),"^",3),RXDATE=$P(Y(0),"^",2),STOP=$P(^PSRX(RXREC,2),"^",6),STAT=$P($G(^("STA")),"^") D Q:$G(PSOLKQT) D TST G:$T P^PSXCH
.K PSOMSG,PSOLKQT D PSOL^PSSLOCK(RXREC) I '$G(PSOMSG) W !,"Rx number: "_$P($G(^PSRX(RXREC,0)),"^")_" cannot be changed because" D LMES,PAUSE S PSOLKQT=1 K PSOMSG Q
.K PSOMSG S PSOSDLK(RXREC)=""
;
RTN I STAT=11!(STOP<DT)!(STAT=12) D EXPCAN Q
D:$P($G(^PSRX(RXREC,"STA")),"^")<9 CHKDEAD^PSOSUCH1 Q:DEAD I $G(PSODIV),+$P($G(^PS(52.5,SFN,0)),"^",6)'=PSOSITE S PSPOP=0 D CKDIV^PSOSUPAT Q:PSPOP
;
; Display a message to the user if the Bypass 3/4 Day Supply flag is set.
;
N PSOFILL
S PSOFILL=$O(^PSRX(RXREC,1,"A"),-1)
I PSOFILL="" S PSOFILL=0
I $$FLAG^PSOBPSU4(RXREC,PSOFILL)="YES" D
. W !!,"Currently, Bypass 3/4 Day Supply is set to YES. If you continue, the"
. W !,"prescription fill will transmit to CMOP on the new Suspense Date entered.",!
. Q
;
S DA=SFN,DIE=52.5,DR=".02;S INDT=X" D ^DIE K DIE D Q:$D(Y) W !
.I $D(INDT),INDT'=RXDATE,INDT<+$P($G(^PSRX(RXREC,0)),"^",13) S DA=SFN,DIE=52.5,DR=".02///"_RXDATE D ^DIE K DIE S Y="" W !!,"Suspense date cannot be before Issue Date of Rx!",!
I $D(X),X'=RXDATE S DA=RXREC D CHANGE^PSOSUCH1(RXREC)
D DEL G:ACT="A" ALL G:ACT="S" SPEC
;
ALL D ULK K INDT S (DELCNT,PSDIVCHK,DELFLAG,PSPOP,PSOPOPUP,WARN,SUSCNT)=0 W ! S DIR("A")="Are you entering the patient name or barcode?",DIR(0)="SBO^P:Patient Name;B:Barcode"
S DIR("?")="Enter 'P' if you are going to enter the patient name. Enter 'B' to enter or wand the barcode." D ^DIR K DIR Q:$D(DIRUT) S BC=Y
BC S OUT=0 I BC="B" W ! S DIR("A")="Enter/wand barcode",DIR(0)="FO^5:20",DIR("?")="Enter the barcode number or wand the barcode to change all of the prescription suspense dates for one patient" D ^DIR K DIR G:$G(DIRUT) ALL S BCNUM=Y D
.S RX=$P(BCNUM,"-",2) I '$G(RX) S OUT=1 W $C(7),!!?5,"Invalid Barcode!" Q
.I $D(^PSRX(RX,0)) D PSOINST^PSOSUPAT Q:OUT S DFN=$P(^PSRX(RX,0),"^",2) W " ",$P($G(^DPT(DFN,0)),"^")
G:OUT BC
I BC="B",'$D(^PSRX(RX,0)) W $C(7),!!?5,"Invalid Barcode!",! G BC
I BC="B",'$D(^PS(52.5,"AC",DFN)) W !!?3,"This patient has no Rx's in suspense that have not already been printed!",! G BC
;
NAM I BC="P" W ! S DIC(0)="AEMZQ",DIC="^DPT(",DIC("S")="I $D(^PS(52.5,""AC"",+Y))!($D(^PS(52.5,""AG"",+Y)))" D ^DIC K DIC G:$D(DTOUT)!($D(DUOUT))!(Y<0) ALL S DFN=+Y
;
; For each of the patient's prescriptions, check whether the Bypass 3/4 Day
; Supply flag is set. If it is, display a message.
;
N PSOCNT,PSOFILL,PSOPP
S PSOCNT=0
S PSOPP=0
F S PSOPP=$O(^PS(55,DFN,"P",PSOPP)) Q:'PSOPP D
. S RXREC=$G(^PS(55,DFN,"P",PSOPP,0)) ; Rx#
. I $P($$SUSPFILL^PSOBPSU4(RXREC),"^",1)="" Q ; Skip if not on suspense queue
. S PSOFILL=$O(^PSRX(RXREC,1,"A"),-1) ; Fill#
. I PSOFILL="" S PSOFILL=0
. I $$FLAG^PSOBPSU4(RXREC,PSOFILL)="YES" D
. . S PSOCNT=PSOCNT+1
. . I PSOCNT=1 W !
. . W !,"Rx #: ",$$GET1^DIQ(52,RXREC,.01,"E")
. . Q
. Q
I PSOCNT D
. W !,"Currently, Bypass 3/4 Day Supply is set to YES. If you continue, the"
. W !,"prescription fill(s) will transmit to CMOP on the new Suspense Date entered.",!
. Q
;
F CBD=0:0 S CBD=$O(^PS(55,DFN,"P",CBD)) Q:CBD'>0!($G(PSOPOPUP)) S:$D(^PS(55,DFN,"P",CBD,0)) RXREC=+^(0) D:$D(^PS(52.5,"B",RXREC)) TEST D ULK
G:ACT="A" ALL G:ACT="S" SPEC
;
TEST S SFN=+$O(^PS(52.5,"B",RXREC,0)) Q:'SFN Q:$P($G(^PS(52.5,SFN,"P")),"^")'=0 S STOP=$P(^PSRX(RXREC,2),"^",6),STAT=$P($G(^("STA")),"^") D Q:$G(PSOLKQT) D TST D:$T A^PSXCH Q:$G(XOK)=0 I STAT=11!(STOP<DT)!(STAT=12) D EXPCAN Q
.K PSOMSG,PSOLKQT D PSOL^PSSLOCK(RXREC) I '$G(PSOMSG) W !!,"Rx number: "_$P($G(^PSRX(RXREC,0)),"^")_" cannot be changed because" D LMES,PAUSE S PSOLKQT=1 K PSOMSG Q
.K PSOMSG S PSOSDLK(RXREC)=""
S PSPOP=0 D:PSODIV&('$G(PSDIVCHK)) DIV^PSOSUPAT S PSDIVCHK=1 S:PSPOP PSOPOPUP=1 I 'PSPOP D:$P($G(^PSRX(RXREC,"STA")),"^")<9 CHKDEAD^PSOSUCH1 Q:DEAD D BEG
Q
BEG S RXDATE=$P(^PS(52.5,SFN,0),"^",2),ISFLAG=0
I 'SUSCNT S DA=SFN,DIE=52.5,DR=".02;S INDT=X" D ^DIE D SI Q:ISFLAG K:$G(^PS(52.5,SFN,"P"))=1 ^PS(52.5,"AC",DFN,+$P(^PS(52.5,SFN,0),"^",2),SFN) S:$D(Y) PSOPOPUP=1 Q:X=""!($D(DTOUT))!($G(PSOPOPUP)) S SUSCNT=1
I SUSCNT D IS Q:$G(ISFLAG) S DA=SFN,DIE=52.5,DR=".02///"_INDT D ^DIE K DIE K:$G(^PS(52.5,SFN,"P"))=1 ^PS(52.5,"AC",DFN,+$P($G(^PS(52.5,SFN,0)),"^",2),SFN) I $D(DTOUT)!($D(DUOUT))!($D(Y)) S PSOPOPUP=1 Q
D CHANGE^PSOSUCH1(RXREC)
DEL I 'DELCNT W !! S DIR("A")="Do you want to delete"_$S($G(ACT)="S":" this Rx ",1:" Rx's ")_"from suspense"_$S($G(ACT)="A":" for this patient",1:""),DIR("B")="N",DIR(0)="Y" D ^DIR K DIR S DELCNT=1 S DEL=Y Q:'Y I $D(DIRUT) S PSOPOPUP=1 Q
I $G(ACT)="A",DELCNT,$G(DEL),'$G(DELFLAG) W !!,"Deleting Rx's from suspense..",! S DELFLAG=1 D DEL1 Q
Q:'DEL
I '$D(PSOSDLK(RXREC)) D Q:$G(PSODELLK)
.K PSOMSG,PSODELLK D PSOL^PSSLOCK(RXREC) I '$G(PSOMSG) W !,"Rx number: "_$P($G(^PSRX(RXREC,0)),"^")_" cannot be deleted from suspense because" D LMES,PAUSE S PSODELLK=1 K PSOMSG Q
.K PSOMSG S PSOSDLK(RXREC)=""
I DEL S DA=$O(^PS(52.5,"B",RXREC,0)) D RF S DIK="^PS(52.5," D ^DIK K DIK D:$P(^PSRX(RXREC,"STA"),"^")=5 W:$G(ACT)="S" !!,"Rx# ",$P($G(^PSRX(RXREC,0)),"^")," has been deleted from suspense!",!
.S $P(^PSRX(RXREC,"STA"),"^")=0
.N PSOZZD S PSOZZD="Removed from suspense" D EN^PSOHLSN1(RXREC,"SC","ZU",PSOZZD) K PSOZZD Q
Q
EXPCAN S DIK="^PS(52.5,",DA=SFN D ^DIK K DIK S Y=STOP D DD^%DT S PSOSSTP=Y I STOP<DT!(STAT=11) D:STAT'=11 W $C(7),!,"Rx# "_$P($G(^PSRX(RXREC,0)),"^")_" expired "_$G(PSOSSTP)_"."
.S $P(^PSRX(RXREC,"STA"),"^")=11
.N PSOZZD S PSOZZD="Expired while suspended" D EN^PSOHLSN1(RXREC,"SC","ZE",PSOZZD) K PSOZZD
W:STAT=12 $C(7),!,"Rx# "_$P(^PSRX(RXREC,0),"^")_" was discontinued "_Y_"." K STAT,STOP Q
TST N X S X="PSXCH" X ^%ZOSF("TEST") K X Q
;
RF ;
S PSSHLDDA=DA,PSODFS=0
S SNODE=$G(^PS(52.5,DA,0)),PSINN=+SNODE D DAREC^PSOSUCH1 I '$G(PSINN)!($P(SNODE,"^",5)) K PSINN,SNODE,PSODFS S DA=PSSHLDDA Q
S PSIFN=0 F S PSIFN=$O(^PSRX(PSINN,1,PSIFN)) Q:'PSIFN D
.I $P($G(^PSRX(PSINN,1,PSIFN,0)),"^")=$P(SNODE,"^",2),'$P($G(^PSRX(PSINN,1,PSIFN,0)),"^",18),$P($G(^PS(52.5,+$G(PSSHLDDA),"P")),"^")=0 D
..N DIK,DA S DIK="^PSRX("_PSINN_",1,",DA(1)=PSINN,DA=PSIFN D ^DIK
..S PSODFS=1,PSUSD=$P(SNODE,"^",2) D DATE
I '$G(PSODFS) G RFPS
S PSIFN=0 F S PSIFN=$O(^PSRX(PSINN,1,PSIFN)) Q:'PSIFN I '$O(^PSRX(PSINN,1,PSIFN)) S $P(^PSRX(PSINN,3),"^")=+$P(^PSRX(PSINN,1,PSIFN,0),"^")
I '$O(^PSRX(PSINN,1,0)) S $P(^PSRX(PSINN,3),"^")=$P(^PSRX(PSINN,2),"^",2)
S PSOX("IRXN")=PSINN D NEXT^PSOUTIL(.PSOX) S PSONEXT=$P(PSOX("RX3"),"^",2),DA=PSINN,DIE=52,DR="102///"_PSONEXT D ^DIE K DIE K PSONEXT,PSOX
RFPS K PSODFS,ZZZ,PSINN,PSIFN,PSUSD,PNOD,SNODE S DA=PSSHLDDA K PSSHLDDA Q
DATE S PNOD=0 F ZZZ=0:0 S ZZZ=$O(^PSRX(PSINN,1,ZZZ)) Q:'ZZZ S PNOD=ZZZ
I PNOD=1 S $P(^PSRX(PSINN,3),"^",4)=$P(^PSRX(PSINN,2),"^",2) Q
DATEX I $G(PNOD) S PNOD=PNOD-1 G:'$D(^PSRX(PSINN,1,PNOD,0)) DATEX
I PNOD=0 S $P(^PSRX(PSINN,3),"^",4)=$P(^PSRX(PSINN,2),"^",2) Q
S $P(^PSRX(PSINN,3),"^",4)=$P(^PSRX(PSINN,1,PNOD,0),"^") Q
Q
IS K DIE I $G(INDT),$G(INDT)<+$P($G(^PSRX(RXREC,0)),"^",13) S DIE=52.5,DA=SFN,DR=".02///"_RXDATE D ^DIE K DIE W !!,"Suspense date cannot be before Issue Date for Rx# ",$P($G(^PSRX(RXREC,0)),"^") S ISFLAG=1
Q
SI ;
S SUSCNT=1
I $D(Y) S (ISFLAG,PSOPOPUP)=1
G IS
DEL1 ;
S PSOSUPOP=1
F WW=0:0 S WW=$O(^PS(55,DFN,"P",WW)) Q:WW'>0 S:$D(^PS(55,DFN,"P",WW,0)) RXREC=+^(0) D:$D(^PS(52.5,"B",+$G(RXREC)))
.I '$D(PSOSDLK(RXREC)) K PSODELLK D DELONE Q:$G(PSODELLK)
.I $P($G(^PSRX(RXREC,"STA")),"^")=11!($P($G(^PSRX(RXREC,2)),"^",6)<DT) D EXPCAN1 Q
.S DA=$O(^PS(52.5,"B",RXREC,0)) D RF S DIK="^PS(52.5," D ^DIK K DIK D:$P(^PSRX(RXREC,"STA"),"^")=5 W:$G(ACT)="S" !!,"Rx# ",$P($G(^PSRX(RXREC,0)),"^")," has been deleted from suspense!",!
..S $P(^PSRX(RXREC,"STA"),"^")=0
..N PSOZZD S PSOZZD="Removed from suspense" D EN^PSOHLSN1(RXREC,"SC","ZU",PSOZZD) K PSOZZD Q
Q
ULK ;Unlock prescriptions
I '$O(PSOSDLK("")) Q
N PSOSDLKR S PSOSDLKR="" F S PSOSDLKR=$O(PSOSDLK(PSOSDLKR)) Q:PSOSDLKR="" D PSOUL^PSSLOCK(PSOSDLKR)
K PSOSDLK
Q
PAUSE ;
W ! K DIR S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR K DIR W !
Q
LMES ;
W !,$S($P($G(PSOMSG),"^",2)'="":$P($G(PSOMSG),"^",2),1:"Another person is editing this order.")
Q
DELONE ;
K PSOMSG,PSODELLK D PSOL^PSSLOCK(RXREC) I '$G(PSOMSG) W !,"Rx number: "_$P($G(^PSRX(RXREC,0)),"^")_" cannot be deleted from suspense because" D LMES,PAUSE S PSODELLK=1 K PSOMSG Q
K PSOMSG S PSOSDLK(RXREC)=""
Q
EXPCAN1 ;
N SFN,Y,PSOSSTP,STAT,STOP
S STAT=$P($G(^PSRX(RXREC,"STA")),"^"),STOP=$P($G(^PSRX(RXREC,2)),"^",6)
S SFN=+$O(^PS(52.5,"B",RXREC,0)) Q:'SFN
S DIK="^PS(52.5,",DA=SFN D ^DIK K DIK S Y=STOP D DD^%DT S PSOSSTP=Y I STOP<DT!(STAT=11) D:STAT'=11 W $C(7),!,"Rx# "_$P($G(^PSRX(RXREC,0)),"^")_" expired "_$G(PSOSSTP)_"."
.S $P(^PSRX(RXREC,"STA"),"^")=11
.N PSOZZD S PSOZZD="Expired while suspended" D EN^PSOHLSN1(RXREC,"SC","ZE",PSOZZD) K PSOZZD
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOSUCHG 10775 printed Oct 16, 2024@18:35:58 Page 2
PSOSUCHG ;BIR/RTR-CHANGE SUSPENSE AND FILL AND REFILL DATES ;4/29/93
+1 ;;7.0;OUTPATIENT PHARMACY;**20,26,130,235,148,561**;DEC 1997;Build 41
+2 ;External reference A^PSXCH is supported by DBIA 2205
+3 ;External references PSOL and PSOUL^PSSLOCK supported by DBIA 2789
+4 ;External reference P^PSXCH is supported by DBIA 2205
+5 ;External reference to ^PS(55 supported by DBIA 2228
+6 ;External reference to ^DPT supported by DBIA 10035
+7 IF '$DATA(PSOPAR)
DO ^PSOLSET
IF '$DATA(PSOPAR)
DO WARN^PSOSUDCN
QUIT
LU NEW PSOSDLK,PSOLKQT,PSODELLK,PSOSSTP
WRITE !!
SET DIR("A")="Change a specific Rx# or all Rx's for one patient"
SET DIR(0)="SBO^S:SPECIFIC RX;A:ALL RXs FOR ONE PATIENT"
+1 SET DIR("?",1)="Enter 'S' to change a single prescription suspense date."
SET DIR("?")="Enter 'A' to change all of the prescription suspense dates for one patient."
+2 DO ^DIR
KILL DIR
if $GET(DIRUT)!(Y="")
GOTO EXIT
SET ACT=Y
if ACT="A"
DO ALL
if ACT="S"
DO SPEC
DO ULK
GOTO LU
EXIT DO ULK
KILL ISFLAG,ACT,BC,BCNUM,CBD,CNT,COM,D1,DA,DEAD,DEL,DELCNT,DFN,DIRUT,DR,DTOUT,DUOUT,HDSFN,I,II,INDT,OLD,OUT,PSPOP,RF,RFCNT,RX,RXDATE,RXREC,SFN,STOP,SUB,SUSCNT,VADM,WARN,X,Y,XOK,SRXPAR,SRXREC,SUSDOD,RECORD,PSOPOPUP,PSOSDLK,DELFLAG
+1 KILL VADM,VA("PID"),VA("BID"),PSDIVCHK,PSOMSG,PSOLKQT,PSODELLK,PSOSSTP
QUIT
SPEC DO ULK
KILL INDT
SET (DELCNT,WARN,PSPOP,OUT)=0
WRITE !
SET DIR("A")="Select SUSPENDED Rx #: "
SET DIR(0)="FOA"
SET DIR("?")="Enter the prescription# or wand the barcode. To obtain a list of suspense prescriptions, type '??'"
SET DIR("??")="^D LISTSUS^PSOSUCH1"
+1 DO ^DIR
KILL DIR
if $DATA(DIRUT)
QUIT
if Y["-"
DO PSOINST^PSOSUPAT
if $GET(OUT)
GOTO SPEC
Begin DoDot:1
+2 IF Y["-"
SET Y=$PIECE(Y,"-",2)
SET X=+$PIECE($GET(^PSRX(Y,0)),"^")
QUIT
+3 SET X=Y
End DoDot:1
WRITE !
SET DIC("S")="I $D(^PSRX(+$P(^PS(52.5,+Y,0),""^""),0))"
SET DIC="^PS(52.5,"
SET DIC(0)="ZQE"
DO ^DIC
KILL DIC
WRITE !
if $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+4 if Y<0
GOTO SPEC
SET DEAD=0
SET (SFN,DA)=+Y
SET RXREC=+Y(0)
SET DFN=$PIECE(^PS(52.5,SFN,0),"^",3)
SET RXDATE=$PIECE(Y(0),"^",2)
SET STOP=$PIECE(^PSRX(RXREC,2),"^",6)
SET STAT=$PIECE($GET(^("STA")),"^")
Begin DoDot:1
+5 KILL PSOMSG,PSOLKQT
DO PSOL^PSSLOCK(RXREC)
IF '$GET(PSOMSG)
WRITE !,"Rx number: "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" cannot be changed because"
DO LMES
DO PAUSE
SET PSOLKQT=1
KILL PSOMSG
QUIT
+6 KILL PSOMSG
SET PSOSDLK(RXREC)=""
End DoDot:1
if $GET(PSOLKQT)
QUIT
DO TST
if $TEST
GOTO P^PSXCH
+7 ;
RTN IF STAT=11!(STOP<DT)!(STAT=12)
DO EXPCAN
QUIT
+1 if $PIECE($GET(^PSRX(RXREC,"STA")),"^")<9
DO CHKDEAD^PSOSUCH1
if DEAD
QUIT
IF $GET(PSODIV)
IF +$PIECE($GET(^PS(52.5,SFN,0)),"^",6)'=PSOSITE
SET PSPOP=0
DO CKDIV^PSOSUPAT
if PSPOP
QUIT
+2 ;
+3 ; Display a message to the user if the Bypass 3/4 Day Supply flag is set.
+4 ;
+5 NEW PSOFILL
+6 SET PSOFILL=$ORDER(^PSRX(RXREC,1,"A"),-1)
+7 IF PSOFILL=""
SET PSOFILL=0
+8 IF $$FLAG^PSOBPSU4(RXREC,PSOFILL)="YES"
Begin DoDot:1
+9 WRITE !!,"Currently, Bypass 3/4 Day Supply is set to YES. If you continue, the"
+10 WRITE !,"prescription fill will transmit to CMOP on the new Suspense Date entered.",!
+11 QUIT
End DoDot:1
+12 ;
+13 SET DA=SFN
SET DIE=52.5
SET DR=".02;S INDT=X"
DO ^DIE
KILL DIE
Begin DoDot:1
+14 IF $DATA(INDT)
IF INDT'=RXDATE
IF INDT<+$PIECE($GET(^PSRX(RXREC,0)),"^",13)
SET DA=SFN
SET DIE=52.5
SET DR=".02///"_RXDATE
DO ^DIE
KILL DIE
SET Y=""
WRITE !!,"Suspense date cannot be before Issue Date of Rx!",!
End DoDot:1
if $DATA(Y)
QUIT
WRITE !
+15 IF $DATA(X)
IF X'=RXDATE
SET DA=RXREC
DO CHANGE^PSOSUCH1(RXREC)
+16 DO DEL
if ACT="A"
GOTO ALL
if ACT="S"
GOTO SPEC
+17 ;
ALL DO ULK
KILL INDT
SET (DELCNT,PSDIVCHK,DELFLAG,PSPOP,PSOPOPUP,WARN,SUSCNT)=0
WRITE !
SET DIR("A")="Are you entering the patient name or barcode?"
SET DIR(0)="SBO^P:Patient Name;B:Barcode"
+1 SET DIR("?")="Enter 'P' if you are going to enter the patient name. Enter 'B' to enter or wand the barcode."
DO ^DIR
KILL DIR
if $DATA(DIRUT)
QUIT
SET BC=Y
BC SET OUT=0
IF BC="B"
WRITE !
SET DIR("A")="Enter/wand barcode"
SET DIR(0)="FO^5:20"
SET DIR("?")="Enter the barcode number or wand the barcode to change all of the prescription suspense dates for one patient"
DO ^DIR
KILL DIR
if $GET(DIRUT)
GOTO ALL
SET BCNUM=Y
Begin DoDot:1
+1 SET RX=$PIECE(BCNUM,"-",2)
IF '$GET(RX)
SET OUT=1
WRITE $CHAR(7),!!?5,"Invalid Barcode!"
QUIT
+2 IF $DATA(^PSRX(RX,0))
DO PSOINST^PSOSUPAT
if OUT
QUIT
SET DFN=$PIECE(^PSRX(RX,0),"^",2)
WRITE " ",$PIECE($GET(^DPT(DFN,0)),"^")
End DoDot:1
+3 if OUT
GOTO BC
+4 IF BC="B"
IF '$DATA(^PSRX(RX,0))
WRITE $CHAR(7),!!?5,"Invalid Barcode!",!
GOTO BC
+5 IF BC="B"
IF '$DATA(^PS(52.5,"AC",DFN))
WRITE !!?3,"This patient has no Rx's in suspense that have not already been printed!",!
GOTO BC
+6 ;
NAM IF BC="P"
WRITE !
SET DIC(0)="AEMZQ"
SET DIC="^DPT("
SET DIC("S")="I $D(^PS(52.5,""AC"",+Y))!($D(^PS(52.5,""AG"",+Y)))"
DO ^DIC
KILL DIC
if $DATA(DTOUT)!($DATA(DUOUT))!(Y<0)
GOTO ALL
SET DFN=+Y
+1 ;
+2 ; For each of the patient's prescriptions, check whether the Bypass 3/4 Day
+3 ; Supply flag is set. If it is, display a message.
+4 ;
+5 NEW PSOCNT,PSOFILL,PSOPP
+6 SET PSOCNT=0
+7 SET PSOPP=0
+8 FOR
SET PSOPP=$ORDER(^PS(55,DFN,"P",PSOPP))
if 'PSOPP
QUIT
Begin DoDot:1
+9 ; Rx#
SET RXREC=$GET(^PS(55,DFN,"P",PSOPP,0))
+10 ; Skip if not on suspense queue
IF $PIECE($$SUSPFILL^PSOBPSU4(RXREC),"^",1)=""
QUIT
+11 ; Fill#
SET PSOFILL=$ORDER(^PSRX(RXREC,1,"A"),-1)
+12 IF PSOFILL=""
SET PSOFILL=0
+13 IF $$FLAG^PSOBPSU4(RXREC,PSOFILL)="YES"
Begin DoDot:2
+14 SET PSOCNT=PSOCNT+1
+15 IF PSOCNT=1
WRITE !
+16 WRITE !,"Rx #: ",$$GET1^DIQ(52,RXREC,.01,"E")
+17 QUIT
End DoDot:2
+18 QUIT
End DoDot:1
+19 IF PSOCNT
Begin DoDot:1
+20 WRITE !,"Currently, Bypass 3/4 Day Supply is set to YES. If you continue, the"
+21 WRITE !,"prescription fill(s) will transmit to CMOP on the new Suspense Date entered.",!
+22 QUIT
End DoDot:1
+23 ;
+24 FOR CBD=0:0
SET CBD=$ORDER(^PS(55,DFN,"P",CBD))
if CBD'>0!($GET(PSOPOPUP))
QUIT
if $DATA(^PS(55,DFN,"P",CBD,0))
SET RXREC=+^(0)
if $DATA(^PS(52.5,"B",RXREC))
DO TEST
DO ULK
+25 if ACT="A"
GOTO ALL
if ACT="S"
GOTO SPEC
+26 ;
TEST SET SFN=+$ORDER(^PS(52.5,"B",RXREC,0))
if 'SFN
QUIT
if $PIECE($GET(^PS(52.5,SFN,"P")),"^")'=0
QUIT
SET STOP=$PIECE(^PSRX(RXREC,2),"^",6)
SET STAT=$PIECE($GET(^("STA")),"^")
Begin DoDot:1
+1 KILL PSOMSG,PSOLKQT
DO PSOL^PSSLOCK(RXREC)
IF '$GET(PSOMSG)
WRITE !!,"Rx number: "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" cannot be changed because"
DO LMES
DO PAUSE
SET PSOLKQT=1
KILL PSOMSG
QUIT
+2 KILL PSOMSG
SET PSOSDLK(RXREC)=""
End DoDot:1
if $GET(PSOLKQT)
QUIT
DO TST
if $TEST
DO A^PSXCH
if $GET(XOK)=0
QUIT
IF STAT=11!(STOP<DT)!(STAT=12)
DO EXPCAN
QUIT
+3 SET PSPOP=0
if PSODIV&('$GET(PSDIVCHK))
DO DIV^PSOSUPAT
SET PSDIVCHK=1
if PSPOP
SET PSOPOPUP=1
IF 'PSPOP
if $PIECE($GET(^PSRX(RXREC,"STA")),"^")<9
DO CHKDEAD^PSOSUCH1
if DEAD
QUIT
DO BEG
+4 QUIT
BEG SET RXDATE=$PIECE(^PS(52.5,SFN,0),"^",2)
SET ISFLAG=0
+1 IF 'SUSCNT
SET DA=SFN
SET DIE=52.5
SET DR=".02;S INDT=X"
DO ^DIE
DO SI
if ISFLAG
QUIT
if $GET(^PS(52.5,SFN,"P"))=1
KILL ^PS(52.5,"AC",DFN,+$PIECE(^PS(52.5,SFN,0),"^",2),SFN)
if $DATA(Y)
SET PSOPOPUP=1
if X=""!($DATA(DTOUT))!($GET(PSOPOPUP))
QUIT
SET SUSCNT=1
+2 IF SUSCNT
DO IS
if $GET(ISFLAG)
QUIT
SET DA=SFN
SET DIE=52.5
SET DR=".02///"_INDT
DO ^DIE
KILL DIE
if $GET(^PS(52.5,SFN,"P"))=1
KILL ^PS(52.5,"AC",DFN,+$PIECE($GET(^PS(52.5,SFN,0)),"^",2),SFN)
IF $DATA(DTOUT)!($DATA(DUOUT))!($DATA(Y))
SET PSOPOPUP=1
QUIT
+3 DO CHANGE^PSOSUCH1(RXREC)
DEL IF 'DELCNT
WRITE !!
SET DIR("A")="Do you want to delete"_$SELECT($GET(ACT)="S":" this Rx ",1:" Rx's ")_"from suspense"_$SELECT($GET(ACT)="A":" for this patient",1:"")
SET DIR("B")="N"
SET DIR(0)="Y"
DO ^DIR
KILL DIR
SET DELCNT=1
SET DEL=Y
if 'Y
QUIT
IF $DATA(DIRUT)
SET PSOPOPUP=1
QUIT
+1 IF $GET(ACT)="A"
IF DELCNT
IF $GET(DEL)
IF '$GET(DELFLAG)
WRITE !!,"Deleting Rx's from suspense..",!
SET DELFLAG=1
DO DEL1
QUIT
+2 if 'DEL
QUIT
+3 IF '$DATA(PSOSDLK(RXREC))
Begin DoDot:1
+4 KILL PSOMSG,PSODELLK
DO PSOL^PSSLOCK(RXREC)
IF '$GET(PSOMSG)
WRITE !,"Rx number: "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" cannot be deleted from suspense because"
DO LMES
DO PAUSE
SET PSODELLK=1
KILL PSOMSG
QUIT
+5 KILL PSOMSG
SET PSOSDLK(RXREC)=""
End DoDot:1
if $GET(PSODELLK)
QUIT
+6 IF DEL
SET DA=$ORDER(^PS(52.5,"B",RXREC,0))
DO RF
SET DIK="^PS(52.5,"
DO ^DIK
KILL DIK
if $PIECE(^PSRX(RXREC,"STA"),"^")=5
Begin DoDot:1
+7 SET $PIECE(^PSRX(RXREC,"STA"),"^")=0
+8 NEW PSOZZD
SET PSOZZD="Removed from suspense"
DO EN^PSOHLSN1(RXREC,"SC","ZU",PSOZZD)
KILL PSOZZD
QUIT
End DoDot:1
if $GET(ACT)="S"
WRITE !!,"Rx# ",$PIECE($GET(^PSRX(RXREC,0)),"^")," has been deleted from suspense!",!
+9 QUIT
EXPCAN SET DIK="^PS(52.5,"
SET DA=SFN
DO ^DIK
KILL DIK
SET Y=STOP
DO DD^%DT
SET PSOSSTP=Y
IF STOP<DT!(STAT=11)
if STAT'=11
Begin DoDot:1
+1 SET $PIECE(^PSRX(RXREC,"STA"),"^")=11
+2 NEW PSOZZD
SET PSOZZD="Expired while suspended"
DO EN^PSOHLSN1(RXREC,"SC","ZE",PSOZZD)
KILL PSOZZD
End DoDot:1
WRITE $CHAR(7),!,"Rx# "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" expired "_$GET(PSOSSTP)_"."
+3 if STAT=12
WRITE $CHAR(7),!,"Rx# "_$PIECE(^PSRX(RXREC,0),"^")_" was discontinued "_Y_"."
KILL STAT,STOP
QUIT
TST NEW X
SET X="PSXCH"
XECUTE ^%ZOSF("TEST")
KILL X
QUIT
+1 ;
RF ;
+1 SET PSSHLDDA=DA
SET PSODFS=0
+2 SET SNODE=$GET(^PS(52.5,DA,0))
SET PSINN=+SNODE
DO DAREC^PSOSUCH1
IF '$GET(PSINN)!($PIECE(SNODE,"^",5))
KILL PSINN,SNODE,PSODFS
SET DA=PSSHLDDA
QUIT
+3 SET PSIFN=0
FOR
SET PSIFN=$ORDER(^PSRX(PSINN,1,PSIFN))
if 'PSIFN
QUIT
Begin DoDot:1
+4 IF $PIECE($GET(^PSRX(PSINN,1,PSIFN,0)),"^")=$PIECE(SNODE,"^",2)
IF '$PIECE($GET(^PSRX(PSINN,1,PSIFN,0)),"^",18)
IF $PIECE($GET(^PS(52.5,+$GET(PSSHLDDA),"P")),"^")=0
Begin DoDot:2
+5 NEW DIK,DA
SET DIK="^PSRX("_PSINN_",1,"
SET DA(1)=PSINN
SET DA=PSIFN
DO ^DIK
+6 SET PSODFS=1
SET PSUSD=$PIECE(SNODE,"^",2)
DO DATE
End DoDot:2
End DoDot:1
+7 IF '$GET(PSODFS)
GOTO RFPS
+8 SET PSIFN=0
FOR
SET PSIFN=$ORDER(^PSRX(PSINN,1,PSIFN))
if 'PSIFN
QUIT
IF '$ORDER(^PSRX(PSINN,1,PSIFN))
SET $PIECE(^PSRX(PSINN,3),"^")=+$PIECE(^PSRX(PSINN,1,PSIFN,0),"^")
+9 IF '$ORDER(^PSRX(PSINN,1,0))
SET $PIECE(^PSRX(PSINN,3),"^")=$PIECE(^PSRX(PSINN,2),"^",2)
+10 SET PSOX("IRXN")=PSINN
DO NEXT^PSOUTIL(.PSOX)
SET PSONEXT=$PIECE(PSOX("RX3"),"^",2)
SET DA=PSINN
SET DIE=52
SET DR="102///"_PSONEXT
DO ^DIE
KILL DIE
KILL PSONEXT,PSOX
RFPS KILL PSODFS,ZZZ,PSINN,PSIFN,PSUSD,PNOD,SNODE
SET DA=PSSHLDDA
KILL PSSHLDDA
QUIT
DATE SET PNOD=0
FOR ZZZ=0:0
SET ZZZ=$ORDER(^PSRX(PSINN,1,ZZZ))
if 'ZZZ
QUIT
SET PNOD=ZZZ
+1 IF PNOD=1
SET $PIECE(^PSRX(PSINN,3),"^",4)=$PIECE(^PSRX(PSINN,2),"^",2)
QUIT
DATEX IF $GET(PNOD)
SET PNOD=PNOD-1
if '$DATA(^PSRX(PSINN,1,PNOD,0))
GOTO DATEX
+1 IF PNOD=0
SET $PIECE(^PSRX(PSINN,3),"^",4)=$PIECE(^PSRX(PSINN,2),"^",2)
QUIT
+2 SET $PIECE(^PSRX(PSINN,3),"^",4)=$PIECE(^PSRX(PSINN,1,PNOD,0),"^")
QUIT
+3 QUIT
IS KILL DIE
IF $GET(INDT)
IF $GET(INDT)<+$PIECE($GET(^PSRX(RXREC,0)),"^",13)
SET DIE=52.5
SET DA=SFN
SET DR=".02///"_RXDATE
DO ^DIE
KILL DIE
WRITE !!,"Suspense date cannot be before Issue Date for Rx# ",$PIECE($GET(^PSRX(RXREC,0)),"^")
SET ISFLAG=1
+1 QUIT
SI ;
+1 SET SUSCNT=1
+2 IF $DATA(Y)
SET (ISFLAG,PSOPOPUP)=1
+3 GOTO IS
DEL1 ;
+1 SET PSOSUPOP=1
+2 FOR WW=0:0
SET WW=$ORDER(^PS(55,DFN,"P",WW))
if WW'>0
QUIT
if $DATA(^PS(55,DFN,"P",WW,0))
SET RXREC=+^(0)
if $DATA(^PS(52.5,"B",+$GET(RXREC)))
Begin DoDot:1
+3 IF '$DATA(PSOSDLK(RXREC))
KILL PSODELLK
DO DELONE
if $GET(PSODELLK)
QUIT
+4 IF $PIECE($GET(^PSRX(RXREC,"STA")),"^")=11!($PIECE($GET(^PSRX(RXREC,2)),"^",6)<DT)
DO EXPCAN1
QUIT
+5 SET DA=$ORDER(^PS(52.5,"B",RXREC,0))
DO RF
SET DIK="^PS(52.5,"
DO ^DIK
KILL DIK
if $PIECE(^PSRX(RXREC,"STA"),"^")=5
Begin DoDot:2
+6 SET $PIECE(^PSRX(RXREC,"STA"),"^")=0
+7 NEW PSOZZD
SET PSOZZD="Removed from suspense"
DO EN^PSOHLSN1(RXREC,"SC","ZU",PSOZZD)
KILL PSOZZD
QUIT
End DoDot:2
if $GET(ACT)="S"
WRITE !!,"Rx# ",$PIECE($GET(^PSRX(RXREC,0)),"^")," has been deleted from suspense!",!
End DoDot:1
+8 QUIT
ULK ;Unlock prescriptions
+1 IF '$ORDER(PSOSDLK(""))
QUIT
+2 NEW PSOSDLKR
SET PSOSDLKR=""
FOR
SET PSOSDLKR=$ORDER(PSOSDLK(PSOSDLKR))
if PSOSDLKR=""
QUIT
DO PSOUL^PSSLOCK(PSOSDLKR)
+3 KILL PSOSDLK
+4 QUIT
PAUSE ;
+1 WRITE !
KILL DIR
SET DIR(0)="E"
SET DIR("A")="Press Return to Continue"
DO ^DIR
KILL DIR
WRITE !
+2 QUIT
LMES ;
+1 WRITE !,$SELECT($PIECE($GET(PSOMSG),"^",2)'="":$PIECE($GET(PSOMSG),"^",2),1:"Another person is editing this order.")
+2 QUIT
DELONE ;
+1 KILL PSOMSG,PSODELLK
DO PSOL^PSSLOCK(RXREC)
IF '$GET(PSOMSG)
WRITE !,"Rx number: "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" cannot be deleted from suspense because"
DO LMES
DO PAUSE
SET PSODELLK=1
KILL PSOMSG
QUIT
+2 KILL PSOMSG
SET PSOSDLK(RXREC)=""
+3 QUIT
EXPCAN1 ;
+1 NEW SFN,Y,PSOSSTP,STAT,STOP
+2 SET STAT=$PIECE($GET(^PSRX(RXREC,"STA")),"^")
SET STOP=$PIECE($GET(^PSRX(RXREC,2)),"^",6)
+3 SET SFN=+$ORDER(^PS(52.5,"B",RXREC,0))
if 'SFN
QUIT
+4 SET DIK="^PS(52.5,"
SET DA=SFN
DO ^DIK
KILL DIK
SET Y=STOP
DO DD^%DT
SET PSOSSTP=Y
IF STOP<DT!(STAT=11)
if STAT'=11
Begin DoDot:1
+5 SET $PIECE(^PSRX(RXREC,"STA"),"^")=11
+6 NEW PSOZZD
SET PSOZZD="Expired while suspended"
DO EN^PSOHLSN1(RXREC,"SC","ZE",PSOZZD)
KILL PSOZZD
End DoDot:1
WRITE $CHAR(7),!,"Rx# "_$PIECE($GET(^PSRX(RXREC,0)),"^")_" expired "_$GET(PSOSSTP)_"."
+7 QUIT