PSIVPGE ;BIR/PR-PURGE IV ORDERS ;05 DEC 97 / 8:44 AM
;;5.0; INPATIENT MEDICATIONS ;;16 DEC 97
;
EN ;
N XQUIT D ^PSIVXU Q:$D(PSIVXU) D VW
Q W:'$D(PSIVPR)&($Y) @IOF S:$D(ZTQUEUED) ZTREQ="@" K DFN,N,ON,P,P17,PS,PSIVDT,PSIVLAB,PSIVLOG,PSIVPN,PSIVRD,PSIVREA,PSIVPDT,PSIVVO,PSJACNWP,Z,ZTSK D ENIVKV^PSGSETU
Q
VW ;Ask user to view order.
S (PSIVLOG,PSIVLAB)=0 W !!,"View orders before purged" S %=1 D YN^DICN G:%=-1 Q I %=0 S HELP="PRTVW" D ^PSIVHLP1 G VW
S PSIVVO=%[1 I PSIVVO,PSIVPR=ION W $C(7),!!,"WARNING -- YOU HAVE NOT SELECTED A PRINTER PROFILE DEVICE !!"
;
VW1 ;Ask user to view activity log.
I PSIVVO W !,"View activity logs before purged" S %=1 D YN^DICN G:%=-1 Q S PSIVLOG=%[1 I %=0 S HELP="PRTAVW" D ^PSIVHLP1 G VW1
;
VW2 ;Ask to view label log
I PSIVVO W !,"View label logs before purged" S %=1 D YN^DICN G:%=-1 Q S PSIVLAB=%[1 I %=0 S HELP="LABLOG" D ^PSIVHLP2 G VW2
BEG ;Start purge
S HELP="PURGE" D ^PSIVHLP W ! S %DT="ETA",%DT("A")="Purge orders older than what date: " D ^%DT G:Y<0 Q
S PSIVPDT=Y D NOW^%DTC S Y=% S X1=Y,X2=PSIVPDT D ^%DTC I X<30 W $C(7),!,"Enter a date greater than 30 days ago.",! G BEG
;
YN ;Make sure it is ok to start purge.
W !!,"Will purge expired IV orders from " S Y=PSIVPDT X ^DD("DD") W $P(Y,"@")," ",$P(Y,"@",2),"back.",!,"Ok to start purge" S %=2 D YN^DICN I %=0 S HELP="YNPRG" D ^PSIVHLP1 G YN
G:%=-1!(%=2) Q
I PSIVPR'=ION S ZTDESC="PURGE IV ORDERS",ZTRTN="DEQ^PSIVPGE",(ZTSAVE("PSIVLOG"),ZTSAVE("PSIVLAB"),ZTSAVE("PSIVSITE"),ZTSAVE("PSIVPDT"),ZTSAVE("PSIVVO"),ZTSAVE("PSIVSN"),ZTSAVE("PSJSYSW0"),ZTSAVE("PSJSYSU"))="",ZTIO=PSIVPR D ^%ZTLOAD G Q
;
DEQ W:$Y @IOF S PSIVPN=0,Y=PSIVPDT,PSIVSLV=IO'=IO(0)!(IOST'["C-") X ^DD("DD") W:PSIVSLV !,"Purge expired IV orders from ",$P(Y,"@")," ",$P(Y,"@",2)," back.",!,"Time started: "
D NOW^%DTC S Y=$E(%,1,12) X ^DD("DD") W:PSIVSLV $P(Y,"@")," ",$P(Y,"@",2),!!
S PSIVPDT=PSIVPDT+1,PSIVRD=1
F PSIVDT=0:0 S PSIVDT=$O(^PS(55,"AIV",PSIVDT)) Q:PSIVDT>PSIVPDT!('PSIVDT)!$D(DIRUT) D
.F DFN=0:0 S DFN=$O(^PS(55,"AIV",PSIVDT,DFN)) Q:'DFN!$D(DIRUT) D:PSIVVO&(PSIVDT>1) ENNA^PSIVACT S PSJACNWP=1 D ENIV^PSJAC F ON=0:0 S ON=$O(^PS(55,"AIV",PSIVDT,DFN,ON)) Q:'ON!$D(DIRUT) D PRGE
I '$D(DIRUT) W !!,"Time finished: " D NOW^%DTC S Y=% X ^DD("DD") W $P(Y,"@")," ",$P(Y,"@",2) W !,"Number of IV ORDERS purged is: ",PSIVPN,!!
D Q
Q
PRGE ;
I $D(^PS(55,DFN,"IV",ON,2)) I $P(^(2),"^",2)'=PSIVSN&$P(^(2),"^",2)!(^(2)>PSIVPDT&($P(^PS(55,DFN,"IV",ON,0),"^",3)'=1)) Q
I $G(^PS(55,DFN,"IV",ON,"ADC")) S TDC=+^("ADC") K ^PS(55,"ADC",TDC,DFN,ON),TDC
I PSIVVO,$D(^PS(55,DFN,"IV",ON,0)),PSIVDT>1 S (P("PON"),ON55)=ON_"V" D GT55^PSIVORFB,ENNONUM^PSIVORV2(DFN,ON) S PSIVPN=PSIVPN+1 D PAUSE Q:$D(DIRUT)
I 'PSIVVO,$D(^PS(55,DFN,"IV",ON,0)),PSIVDT>1 S PSIVPN=PSIVPN+1 W:'(PSIVPN#100) "."
I PSIVLOG,$D(^PS(55,DFN,"IV",ON,0)),PSIVDT>1 S PSJORD=ON55 D ENLOG^PSIVVW1,PAUSE Q:$D(DIRUT)
S ON=+ON ;* ^PSIVVW1 set ON=PSJORD and PSJORD is concatenated to "V"
I PSIVLAB,$D(^PS(55,DFN,"IV",ON,0)),PSIVDT>1 D DATA^PSIVLTR1(DFN,ON),PAUSE Q:$D(DIRUT)
D DCNV^PSIVOE S X=$G(^PS(55,DFN,"IV",ON,0)) Q:'X
K ^PS(55,"PSIVSUS",PSIVSN,DFN,ON),^PS(55,"AIV",PSIVDT,DFN,ON),^PS(55,DFN,"IV",ON),^PS(55,DFN,"IV","B",ON)
K:$D(^PS(55,DFN,"IV","AIT",$P(X,U,4),$P(X,U,3),ON)) ^PS(55,DFN,"IV","AIT",$P(X,U,4),$P(X,U,3),ON)
K:$D(^PS(55,DFN,"IV","AIS",$P(X,U,3),ON)) ^PS(55,DFN,"IV","AIS",$P(X,U,3),ON)
I $D(^PS(55,DFN,"IV",0)),$P(^(0),"^",4) S $P(^(0),"^",4)=$P(^(0),"^",4)-1
Q
;
PAUSE ;
I 'PSIVSLV K DIR S DIR(0)="E" D ^DIR
Q
;
ENT ;Will let user delete an IV order if no doses printed.
D FULL^VALM1
S PSJORD=ON D ENNH^PSIVORV2(ON)
D A,PAUSE^PSJLMUTL
Q
A W !,"Delete this order" S %=2 D YN^DICN I %=0 S HELP="OPUR" D ^PSIVHLP1 G A
I %=-1!(%=2) W $C(7)," Order not deleted." Q
S ON=+ON55 I $D(^PS(55,DFN,"IV",ON,9)) S Y=^(9) I $P(Y,"^",2) W !,"Order # ",ON," ... Not deleted ",$P(Y,"^",2)," dose(s) given " S Y=+Y X ^DD("DD") W $P(Y,"@")," ",$P(Y,"@",2) Q
D ENDEL W " Order deleted." Q
ENDEL ;D DCNV^PSIVOE S X=^PS(55,DFN,"IV",ON,0) S $P(X,U,17)="P" K:$P(X,U,3)]"" ^PS(55,"AIV",$P(X,U,3),DFN,ON) S $P(X,U,3)=1,^PS(55,DFN,"IV",ON,0)=X,^PS(55,"AIV",1,DFN,ON)="" I $D(^PS(55,DFN,"IV",ON,"ADC")) S TC=^("ADC") K ^PS(55,"ADC",TC,DFN,ON)
D DCNV^PSIVOE S X=$G(^PS(55,DFN,"IV",ON,0)) Q:'X S $P(X,U,17)="P"
K:$P(X,U,3)]"" ^PS(55,"AIV",$P(X,U,3),DFN,ON)
K:$D(^PS(55,DFN,"IV","AIT",$P(X,U,4),$P(X,U,3),ON)) ^PS(55,DFN,"IV","AIT",$P(X,U,4),$P(X,U,3),ON)
K:$D(^PS(55,DFN,"IV","AIS",$P(X,U,3),ON)) ^PS(55,DFN,"IV","AIS",$P(X,U,3),ON)
S $P(X,U,3)=1,^PS(55,DFN,"IV",ON,0)=X,^PS(55,"AIV",1,DFN,ON)="",^PS(55,DFN,"IV","AIT",$P(X,U,4),1,ON)="",^PS(55,DFN,"IV","AIS",1,ON)=""
I $D(^PS(55,DFN,"IV",ON,"ADC")) S TC=^("ADC") K ^PS(55,"ADC",TC,DFN,ON)
PSIVPGE ;BIR/PR-PURGE IV ORDERS ;05 DEC 97 / 8:44 AM
+1 ;;5.0; INPATIENT MEDICATIONS ;;16 DEC 97
+2 ;
EN ;
+1 NEW XQUIT
DO ^PSIVXU
IF $DATA(PSIVXU)
QUIT
DO VW
Q IF '$DATA(PSIVPR)&($Y)
WRITE @IOF
IF $DATA(ZTQUEUED)
SET ZTREQ="@"
KILL DFN,N,ON,P,P17,PS,PSIVDT,PSIVLAB,PSIVLOG,PSIVPN,PSIVRD,PSIVREA,PSIVPDT,PSIVVO,PSJACNWP,Z,ZTSK
DO ENIVKV^PSGSETU
+1 QUIT
VW ;Ask user to view order.
+1 SET (PSIVLOG,PSIVLAB)=0
WRITE !!,"View orders before purged"
SET %=1
DO YN^DICN
IF %=-1
GOTO Q
IF %=0
SET HELP="PRTVW"
DO ^PSIVHLP1
GOTO VW
+2 SET PSIVVO=%[1
IF PSIVVO
IF PSIVPR=ION
WRITE $CHAR(7),!!,"WARNING -- YOU HAVE NOT SELECTED A PRINTER PROFILE DEVICE !!"
+3 ;
VW1 ;Ask user to view activity log.
+1 IF PSIVVO
WRITE !,"View activity logs before purged"
SET %=1
DO YN^DICN
IF %=-1
GOTO Q
SET PSIVLOG=%[1
IF %=0
SET HELP="PRTAVW"
DO ^PSIVHLP1
GOTO VW1
+2 ;
VW2 ;Ask to view label log
+1 IF PSIVVO
WRITE !,"View label logs before purged"
SET %=1
DO YN^DICN
IF %=-1
GOTO Q
SET PSIVLAB=%[1
IF %=0
SET HELP="LABLOG"
DO ^PSIVHLP2
GOTO VW2
BEG ;Start purge
+1 SET HELP="PURGE"
DO ^PSIVHLP
WRITE !
SET %DT="ETA"
SET %DT("A")="Purge orders older than what date: "
DO ^%DT
IF Y<0
GOTO Q
+2 SET PSIVPDT=Y
DO NOW^%DTC
SET Y=%
SET X1=Y
SET X2=PSIVPDT
DO ^%DTC
IF X<30
WRITE $CHAR(7),!,"Enter a date greater than 30 days ago.",!
GOTO BEG
+3 ;
YN ;Make sure it is ok to start purge.
+1 WRITE !!,"Will purge expired IV orders from "
SET Y=PSIVPDT
XECUTE ^DD("DD")
WRITE $PIECE(Y,"@")," ",$PIECE(Y,"@",2),"back.",!,"Ok to start purge"
SET %=2
DO YN^DICN
IF %=0
SET HELP="YNPRG"
DO ^PSIVHLP1
GOTO YN
+2 IF %=-1!(%=2)
GOTO Q
+3 IF PSIVPR'=ION
SET ZTDESC="PURGE IV ORDERS"
SET ZTRTN="DEQ^PSIVPGE"
SET (ZTSAVE("PSIVLOG"),ZTSAVE("PSIVLAB"),ZTSAVE("PSIVSITE"),ZTSAVE("PSIVPDT"),ZTSAVE("PSIVVO"),ZTSAVE("PSIVSN"),ZTSAVE("PSJSYSW0"),ZTSAVE("PSJSYSU"))=""
SET ZTIO=PSIVPR
DO ^%ZTLOAD
GOTO Q
+4 ;
DEQ IF $Y
WRITE @IOF
SET PSIVPN=0
SET Y=PSIVPDT
SET PSIVSLV=IO'=IO(0)!(IOST'["C-")
XECUTE ^DD("DD")
IF PSIVSLV
WRITE !,"Purge expired IV orders from ",$PIECE(Y,"@")," ",$PIECE(Y,"@",2)," back.",!,"Time started: "
+1 DO NOW^%DTC
SET Y=$EXTRACT(%,1,12)
XECUTE ^DD("DD")
IF PSIVSLV
WRITE $PIECE(Y,"@")," ",$PIECE(Y,"@",2),!!
+2 SET PSIVPDT=PSIVPDT+1
SET PSIVRD=1
+3 FOR PSIVDT=0:0
SET PSIVDT=$ORDER(^PS(55,"AIV",PSIVDT))
IF PSIVDT>PSIVPDT!('PSIVDT)!$DATA(DIRUT)
QUIT
Begin DoDot:1
+4 FOR DFN=0:0
SET DFN=$ORDER(^PS(55,"AIV",PSIVDT,DFN))
IF 'DFN!$DATA(DIRUT)
QUIT
IF PSIVVO&(PSIVDT>1)
DO ENNA^PSIVACT
SET PSJACNWP=1
DO ENIV^PSJAC
FOR ON=0:0
SET ON=$ORDER(^PS(55,"AIV",PSIVDT,DFN,ON))
IF 'ON!$DATA(DIRUT)
QUIT
DO PRGE
End DoDot:1
+5 IF '$DATA(DIRUT)
WRITE !!,"Time finished: "
DO NOW^%DTC
SET Y=%
XECUTE ^DD("DD")
WRITE $PIECE(Y,"@")," ",$PIECE(Y,"@",2)
WRITE !,"Number of IV ORDERS purged is: ",PSIVPN,!!
+6 DO Q
+7 QUIT
PRGE ;
+1 IF $DATA(^PS(55,DFN,"IV",ON,2))
IF $PIECE(^(2),"^",2)'=PSIVSN&$PIECE(^(2),"^",2)!(^(2)>PSIVPDT&($PIECE(^PS(55,DFN,"IV",ON,0),"^",3)'=1))
QUIT
+2 IF $GET(^PS(55,DFN,"IV",ON,"ADC"))
SET TDC=+^("ADC")
KILL ^PS(55,"ADC",TDC,DFN,ON),TDC
+3 IF PSIVVO
IF $DATA(^PS(55,DFN,"IV",ON,0))
IF PSIVDT>1
SET (P("PON"),ON55)=ON_"V"
DO GT55^PSIVORFB
DO ENNONUM^PSIVORV2(DFN,ON)
SET PSIVPN=PSIVPN+1
DO PAUSE
IF $DATA(DIRUT)
QUIT
+4 IF 'PSIVVO
IF $DATA(^PS(55,DFN,"IV",ON,0))
IF PSIVDT>1
SET PSIVPN=PSIVPN+1
IF '(PSIVPN#100)
WRITE "."
+5 IF PSIVLOG
IF $DATA(^PS(55,DFN,"IV",ON,0))
IF PSIVDT>1
SET PSJORD=ON55
DO ENLOG^PSIVVW1
DO PAUSE
IF $DATA(DIRUT)
QUIT
+6 ;* ^PSIVVW1 set ON=PSJORD and PSJORD is concatenated to "V"
SET ON=+ON
+7 IF PSIVLAB
IF $DATA(^PS(55,DFN,"IV",ON,0))
IF PSIVDT>1
DO DATA^PSIVLTR1(DFN,ON)
DO PAUSE
IF $DATA(DIRUT)
QUIT
+8 DO DCNV^PSIVOE
SET X=$GET(^PS(55,DFN,"IV",ON,0))
IF 'X
QUIT
+9 KILL ^PS(55,"PSIVSUS",PSIVSN,DFN,ON),^PS(55,"AIV",PSIVDT,DFN,ON),^PS(55,DFN,"IV",ON),^PS(55,DFN,"IV","B",ON)
+10 IF $DATA(^PS(55,DFN,"IV","AIT",$PIECE(X,U,4),$PIECE(X,U,3),ON))
KILL ^PS(55,DFN,"IV","AIT",$PIECE(X,U,4),$PIECE(X,U,3),ON)
+11 IF $DATA(^PS(55,DFN,"IV","AIS",$PIECE(X,U,3),ON))
KILL ^PS(55,DFN,"IV","AIS",$PIECE(X,U,3),ON)
+12 IF $DATA(^PS(55,DFN,"IV",0))
IF $PIECE(^(0),"^",4)
SET $PIECE(^(0),"^",4)=$PIECE(^(0),"^",4)-1
+13 QUIT
+14 ;
PAUSE ;
+1 IF 'PSIVSLV
KILL DIR
SET DIR(0)="E"
DO ^DIR
+2 QUIT
+3 ;
ENT ;Will let user delete an IV order if no doses printed.
+1 DO FULL^VALM1
+2 SET PSJORD=ON
DO ENNH^PSIVORV2(ON)
+3 DO A
DO PAUSE^PSJLMUTL
+4 QUIT
A WRITE !,"Delete this order"
SET %=2
DO YN^DICN
IF %=0
SET HELP="OPUR"
DO ^PSIVHLP1
GOTO A
+1 IF %=-1!(%=2)
WRITE $CHAR(7)," Order not deleted."
QUIT
+2 SET ON=+ON55
IF $DATA(^PS(55,DFN,"IV",ON,9))
SET Y=^(9)
IF $PIECE(Y,"^",2)
WRITE !,"Order # ",ON," ... Not deleted ",$PIECE(Y,"^",2)," dose(s) given "
SET Y=+Y
XECUTE ^DD("DD")
WRITE $PIECE(Y,"@")," ",$PIECE(Y,"@",2)
QUIT
+3 DO ENDEL
WRITE " Order deleted."
QUIT
ENDEL ;D DCNV^PSIVOE S X=^PS(55,DFN,"IV",ON,0) S $P(X,U,17)="P" K:$P(X,U,3)]"" ^PS(55,"AIV",$P(X,U,3),DFN,ON) S $P(X,U,3)=1,^PS(55,DFN,"IV",ON,0)=X,^PS(55,"AIV",1,DFN,ON)="" I $D(^PS(55,DFN,"IV",ON,"ADC")) S TC=^("ADC") K ^PS(55,"ADC",TC,DFN,ON)
+1 DO DCNV^PSIVOE
SET X=$GET(^PS(55,DFN,"IV",ON,0))
IF 'X
QUIT
SET $PIECE(X,U,17)="P"
+2 IF $PIECE(X,U,3)]""
KILL ^PS(55,"AIV",$PIECE(X,U,3),DFN,ON)
+3 IF $DATA(^PS(55,DFN,"IV","AIT",$PIECE(X,U,4),$PIECE(X,U,3),ON))
KILL ^PS(55,DFN,"IV","AIT",$PIECE(X,U,4),$PIECE(X,U,3),ON)
+4 IF $DATA(^PS(55,DFN,"IV","AIS",$PIECE(X,U,3),ON))
KILL ^PS(55,DFN,"IV","AIS",$PIECE(X,U,3),ON)
+5 SET $PIECE(X,U,3)=1
SET ^PS(55,DFN,"IV",ON,0)=X
SET ^PS(55,"AIV",1,DFN,ON)=""
SET ^PS(55,DFN,"IV","AIT",$PIECE(X,U,4),1,ON)=""
SET ^PS(55,DFN,"IV","AIS",1,ON)=""
+6 IF $DATA(^PS(55,DFN,"IV",ON,"ADC"))
SET TC=^("ADC")
KILL ^PS(55,"ADC",TC,DFN,ON)