PSGPO ;BIR/CML3-PURGE PATIENT'S ORDERS ; 15 May 98 / 10:42 AM
;;5.0; INPATIENT MEDICATIONS ;**3**;16 DEC 97
D ENCV^PSGSETU Q:$D(XQUIT) S POD=$O(^PS(55,"AUDDD",0)) I 'POD K POD W !!,"THERE ARE NO ORDERS TO PURGE AT THIS TIME." Q
S EDATE=4000000 D:$S($D(^PS(53.5,"AB")):1,1:$D(^("AF"))) EDATE I EDATE<4000000 S X1=EDATE\1,X2=-31 D C^%DTC S EDATE=X I POD>EDATE W !!,"THERE ARE PICK LISTS THAT NEED TO BE FILED AWAY THAT MAY CONTAIN THESE ORDERS.",! G DONE
S PSGOD=$$ENDTC^PSGMI(POD),Y=-1
F K %DT S %DT="EPTX" S:EDATE<4000000 %DT(0)=-EDATE R !!,"PURGE ORDERS FOR PATIENTS DISCHARGED BEFORE WHAT DATE: ",X:DTIME W:'$T $C(7) S:'$T X="^" D DTM:X?1."?",^%DT:"^"'[X I Y>0!("^"[X) W:Y'>0 !,"No date chosen for order purge.",! Q
G:Y'>0 DONE W !!,"This purge will automatically be queued." K %ZIS,IO("Q"),IOP S PSGION=ION,%ZIS="NQ",%ZIS("B")="",%ZIS("A")="Please select a DEVICE for the PURGE REPORT: " D ^%ZIS
I POP S IOP=PSGION D ^%ZIS W !?3,"No device selected for purge run." G DONE
S PSGPOD=Y,PSGPOIO=ION K ZTSAVE S ZTDESC="PATIENT ORDER PURGE",PSGTIR="ENQ^PSGPO",(ZTIO,ZTSAVE("PSGPOIO"),ZTSAVE("PSGPOD"))="" D ENTSK^PSGTI W:$D(ZTSK) !,"Purge queued. (It may take a while to run.)",! G DONE
;
ENQ ;
F L +^PS(53.43,1,1,0):0 I S ND=$G(^PS(53.43,1,1,0)) S:ND="" ND="^53.4301A" Q
F RDA=$P(ND,"^",3)+1:1 W "." I '$D(^PS(53.43,1,1,RDA)) S ^PS(53.43,1,1,RDA,0)=RDA,$P(ND,"^",3)=RDA,$P(ND,"^",4)=$P(ND,"^",4)+1,^PS(53.43,1,1,0)=ND Q
L -^PS(53.43,1,1,0)
F PSGPO=0:0 S PSGPO=$O(^PS(55,"AUDDD",PSGPO)) Q:'PSGPO!(PSGPO'<PSGPOD) F DA(1)=0:0 S DA(1)=$O(^PS(55,"AUDDD",PSGPO,DA(1))) Q:'DA(1) F DA=0:0 S DA=$O(^PS(55,"AUDDD",PSGPO,DA(1),DA)) Q:'DA D:"DE"[$P(^PS(55,DA(1),5,DA,0),"^",9) DIK
K %ZIS,ZTSAVE S H=ZTSK,IOP=PSGPOIO,%ZIS="NQ",PSGJ=RDA,PSGTIR="^PSGPOR",ZTDESC="PATIENT ORDER PURGE REPORT",PSGTID=$H,(ZTSAVE("PSGPOD"),ZTSAVE("PSGJ"))="" D ^%ZIS,ENTSK^PSGTI S ZTSK=H
;
DONE ;
D ENKV^PSGSETU K AM,EDATE,H,POD,PSGJ,PSGPO,PSGPOD,PSGPOIO,ST,TRTN,ZTOUT Q
;
DIK ;
S DIK="^PS(55,"_DA(1)_",5," D ^DIK K ^PS(55,DA(1),5,"B",DA,DA),^PS(55,"AUDDD",PSGPO,DA(1),DA),^PS(55,"AUE",DA(1),DA) S ^(0)=DA(1)_"^"_$S($D(^PS(53.43,1,1,RDA,1,DA(1),0)):$P(^(0),"^",2)+1,1:1) Q
;
DTM ;
W !!," If a date is entered here, all orders for patients discharged before the date entered will be purged (deleted) from the computer. Please note that any orders for any patients admitted after the date entered will NOT be affected."
W !," The earliest discharge date found is ",PSGOD,! Q
;
EDATE ;
F X=0:0 S X=$O(^PS(53.5,"AB",X)) Q:'X S Y=$O(^(X,0)) I Y,Y<EDATE S EDATE=Y
F X=0:0 S X=$O(^PS(53.5,"AF",X)) Q:'X I $D(^PS(53.5,X,0)) S Y=$P(^(0),"^",3) I Y,Y<EDATE S EDATE=Y
Q
;
ENRX ; re-index 55 to be able to purge UD orders (AUDDD x-ref)
K ^PS(55,"AUDDD") D NOW^%DTC F P=0:0 S P=$O(^PS(55,P)) Q:'P I $D(^(P,5)) D RX1
K A Q
;
RX1 ;
F ON=0:0 S ON=$O(^PS(55,P,5,ON)) Q:'ON S:$P($G(^(+ON,0)),U,20) ^PS(55,"AUDDD",$P(^(0),U,20),P,+ON)=""
Q
;S (D1,DL)=0,X=$O(^DGPM("ATID3",P,"")) I X S X=$O(^(+X,0)) I X S X=$G(^DGPM(X,0)),D2=+X,AD=+$G(^DGPM(+$P(X,U,14),0)) S:'D2 DL=AD I D2>+D1 S D1=D2
;S (D1,DL)=0 F Q=0:0 S Q=$O(^DPT(P,"DA",Q)) Q:'Q S AD=$S($D(^(Q,0)):+^(0),1:0),D2=$S($D(^(1)):+^(1),1:0) S:'D2 DL=AD I D2>+D1 S D1=D2_"^"_Q_"^"_AD
Q:'D1 D NOW^%DTC S:'DL DL=% F Q=0:0 S Q=$O(^PS(55,P,5,"AUS",Q)) Q:'Q Q:Q>DL F QQ=0:0 S QQ=$O(^PS(55,P,5,"AUS",Q,QQ)) Q:'QQ S $P(^PS(55,P,5,QQ,0),"^",20)=+D1,^PS(55,"AUDDD",+D1,P,QQ)=""
S:$D(^PS(55,"AUDDD",+D1,P)) ^(P)=$P(D1,"^",2,3) Q
;
ENDS ; delete single order
F R !!,"DO YOU WANT TO DISCONTINUE THIS ORDER" S %=1 D YN^DICN Q:% W !!?2,"Answer 'Y' to d/c this order now. (It will be deleted immediately.)",!,"Answer 'N' (or '^') to not d/c the order."
I %=1 D
.;N DA,DIK,PSGPO I $P($G(^PS(55,PSGP,5,+PSGORD,0)),U,21) S X=$O(^ORD(101,"B","PS EVSEND OR",0))_";ORD(101,",PSJORDER=$$ORDER^PSJHLU(PSGORD),PSOC="OD",PSREASON="ORDER DISCONTINUED" D EN1^XQOR:X K X W !?3,"...one moment, please..."
.N DA,DIK,PSGPO I $P($G(^PS(55,PSGP,5,+PSGORD,0)),U,21) D EN1^PSJHL2(PSGP,"OD",PSGORD,"ORDER DISCONTINUED") W !?3,"...one moment, please..."
.S PSGCANFL=1,DA(1)=PSGP,DA=+PSGORD,DIK="^PS(55,"_PSGP_",5,",PSGPO=1 D ^DIK W ".DONE!"
K %,%Y Q
PSGPO ;BIR/CML3-PURGE PATIENT'S ORDERS ; 15 May 98 / 10:42 AM
+1 ;;5.0; INPATIENT MEDICATIONS ;**3**;16 DEC 97
+2 DO ENCV^PSGSETU
IF $DATA(XQUIT)
QUIT
SET POD=$ORDER(^PS(55,"AUDDD",0))
IF 'POD
KILL POD
WRITE !!,"THERE ARE NO ORDERS TO PURGE AT THIS TIME."
QUIT
+3 SET EDATE=4000000
IF $SELECT($DATA(^PS(53.5,"AB"))
DO EDATE
IF EDATE<4000000
SET X1=EDATE\1
SET X2=-31
DO C^%DTC
SET EDATE=X
IF POD>EDATE
WRITE !!,"THERE ARE PICK LISTS THAT NEED TO BE FILED AWAY THAT MAY CONTAIN THESE ORDERS.",!
GOTO DONE
+4 SET PSGOD=$$ENDTC^PSGMI(POD)
SET Y=-1
+5 FOR
KILL %DT
SET %DT="EPTX"
IF EDATE<4000000
SET %DT(0)=-EDATE
READ !!,"PURGE ORDERS FOR PATIENTS DISCHARGED BEFORE WHAT DATE: ",X:DTIME
IF '$TEST
WRITE $CHAR(7)
IF '$TEST
SET X="^"
IF X?1."?"
DO DTM
IF "^"'[X
DO ^%DT
IF Y>0!("^"[X)
IF Y'>0
WRITE !,"No date chosen for order purge.",!
QUIT
+6 IF Y'>0
GOTO DONE
WRITE !!,"This purge will automatically be queued."
KILL %ZIS,IO("Q"),IOP
SET PSGION=ION
SET %ZIS="NQ"
SET %ZIS("B")=""
SET %ZIS("A")="Please select a DEVICE for the PURGE REPORT: "
DO ^%ZIS
+7 IF POP
SET IOP=PSGION
DO ^%ZIS
WRITE !?3,"No device selected for purge run."
GOTO DONE
+8 SET PSGPOD=Y
SET PSGPOIO=ION
KILL ZTSAVE
SET ZTDESC="PATIENT ORDER PURGE"
SET PSGTIR="ENQ^PSGPO"
SET (ZTIO,ZTSAVE("PSGPOIO"),ZTSAVE("PSGPOD"))=""
DO ENTSK^PSGTI
IF $DATA(ZTSK)
WRITE !,"Purge queued. (It may take a while to run.)",!
GOTO DONE
+9 ;
ENQ ;
+1 FOR
LOCK +^PS(53.43,1,1,0):0
IF $TEST
SET ND=$GET(^PS(53.43,1,1,0))
IF ND=""
SET ND="^53.4301A"
QUIT
+2 FOR RDA=$PIECE(ND,"^",3)+1:1
WRITE "."
IF '$DATA(^PS(53.43,1,1,RDA))
SET ^PS(53.43,1,1,RDA,0)=RDA
SET $PIECE(ND,"^",3)=RDA
SET $PIECE(ND,"^",4)=$PIECE(ND,"^",4)+1
SET ^PS(53.43,1,1,0)=ND
QUIT
+3 LOCK -^PS(53.43,1,1,0)
+4 FOR PSGPO=0:0
SET PSGPO=$ORDER(^PS(55,"AUDDD",PSGPO))
IF 'PSGPO!(PSGPO'<PSGPOD)
QUIT
FOR DA(1)=0:0
SET DA(1)=$ORDER(^PS(55,"AUDDD",PSGPO,DA(1)))
IF 'DA(1)
QUIT
FOR DA=0:0
SET DA=$ORDER(^PS(55,"AUDDD",PSGPO,DA(1),DA))
IF 'DA
QUIT
IF "DE"[$PIECE(^PS(55,DA(1),5,DA,0),"^",9)
DO DIK
+5 KILL %ZIS,ZTSAVE
SET H=ZTSK
SET IOP=PSGPOIO
SET %ZIS="NQ"
SET PSGJ=RDA
SET PSGTIR="^PSGPOR"
SET ZTDESC="PATIENT ORDER PURGE REPORT"
SET PSGTID=$HOROLOG
SET (ZTSAVE("PSGPOD"),ZTSAVE("PSGJ"))=""
DO ^%ZIS
DO ENTSK^PSGTI
SET ZTSK=H
+6 ;
DONE ;
+1 DO ENKV^PSGSETU
KILL AM,EDATE,H,POD,PSGJ,PSGPO,PSGPOD,PSGPOIO,ST,TRTN,ZTOUT
QUIT
+2 ;
DIK ;
+1 SET DIK="^PS(55,"_DA(1)_",5,"
DO ^DIK
KILL ^PS(55,DA(1),5,"B",DA,DA),^PS(55,"AUDDD",PSGPO,DA(1),DA),^PS(55,"AUE",DA(1),DA)
SET ^(0)=DA(1)_"^"_$SELECT($DATA(^PS(53.43,1,1,RDA,1,DA(1),0)):$PIECE(^(0),"^",2)+1,1:1)
QUIT
+2 ;
DTM ;
+1 WRITE !!," If a date is entered here, all orders for patients discharged before the date entered will be purged (deleted) from the computer. Please note that any orders for any patients admitted after the date entered will NOT be affected."
+2 WRITE !," The earliest discharge date found is ",PSGOD,!
QUIT
+3 ;
EDATE ;
+1 FOR X=0:0
SET X=$ORDER(^PS(53.5,"AB",X))
IF 'X
QUIT
SET Y=$ORDER(^(X,0))
IF Y
IF Y<EDATE
SET EDATE=Y
+2 FOR X=0:0
SET X=$ORDER(^PS(53.5,"AF",X))
IF 'X
QUIT
IF $DATA(^PS(53.5,X,0))
SET Y=$PIECE(^(0),"^",3)
IF Y
IF Y<EDATE
SET EDATE=Y
+3 QUIT
+4 ;
ENRX ; re-index 55 to be able to purge UD orders (AUDDD x-ref)
+1 KILL ^PS(55,"AUDDD")
DO NOW^%DTC
FOR P=0:0
SET P=$ORDER(^PS(55,P))
IF 'P
QUIT
IF $DATA(^(P,5))
DO RX1
+2 KILL A
QUIT
+3 ;
RX1 ;
+1 FOR ON=0:0
SET ON=$ORDER(^PS(55,P,5,ON))
IF 'ON
QUIT
IF $PIECE($GET(^(+ON,0)),U,20)
SET ^PS(55,"AUDDD",$PIECE(^(0),U,20),P,+ON)=""
+2 QUIT
+3 ;S (D1,DL)=0,X=$O(^DGPM("ATID3",P,"")) I X S X=$O(^(+X,0)) I X S X=$G(^DGPM(X,0)),D2=+X,AD=+$G(^DGPM(+$P(X,U,14),0)) S:'D2 DL=AD I D2>+D1 S D1=D2
+4 ;S (D1,DL)=0 F Q=0:0 S Q=$O(^DPT(P,"DA",Q)) Q:'Q S AD=$S($D(^(Q,0)):+^(0),1:0),D2=$S($D(^(1)):+^(1),1:0) S:'D2 DL=AD I D2>+D1 S D1=D2_"^"_Q_"^"_AD
+5 IF 'D1
QUIT
DO NOW^%DTC
IF 'DL
SET DL=%
FOR Q=0:0
SET Q=$ORDER(^PS(55,P,5,"AUS",Q))
IF 'Q
QUIT
IF Q>DL
QUIT
FOR QQ=0:0
SET QQ=$ORDER(^PS(55,P,5,"AUS",Q,QQ))
IF 'QQ
QUIT
SET $PIECE(^PS(55,P,5,QQ,0),"^",20)=+D1
SET ^PS(55,"AUDDD",+D1,P,QQ)=""
+6 IF $DATA(^PS(55,"AUDDD",+D1,P))
SET ^(P)=$PIECE(D1,"^",2,3)
QUIT
+7 ;
ENDS ; delete single order
+1 FOR
READ !!,"DO YOU WANT TO DISCONTINUE THIS ORDER"
SET %=1
DO YN^DICN
IF %
QUIT
WRITE !!?2,"Answer 'Y' to d/c this order now. (It will be deleted immediately.)",!,"Answer 'N' (or '^') to not d/c the order."
+2 IF %=1
Begin DoDot:1
+3 ;N DA,DIK,PSGPO I $P($G(^PS(55,PSGP,5,+PSGORD,0)),U,21) S X=$O(^ORD(101,"B","PS EVSEND OR",0))_";ORD(101,",PSJORDER=$$ORDER^PSJHLU(PSGORD),PSOC="OD",PSREASON="ORDER DISCONTINUED" D EN1^XQOR:X K X W !?3,"...one moment, please..."
+4 NEW DA,DIK,PSGPO
IF $PIECE($GET(^PS(55,PSGP,5,+PSGORD,0)),U,21)
DO EN1^PSJHL2(PSGP,"OD",PSGORD,"ORDER DISCONTINUED")
WRITE !?3,"...one moment, please..."
+5 SET PSGCANFL=1
SET DA(1)=PSGP
SET DA=+PSGORD
SET DIK="^PS(55,"_PSGP_",5,"
SET PSGPO=1
DO ^DIK
WRITE ".DONE!"
End DoDot:1
+6 KILL %,%Y
QUIT