PSIVSPDC ;BIR/PR,MV-SPEED DC IV ORDERS ;02 Mar 99 / 9:27 AM
;;5.0; INPATIENT MEDICATIONS ;**23,29,38,58,110**;16 DEC 97
;
; Reference to ^PS(55 is supported by DBIA# 2191.
; Reference to ^PSSLOCK is supported by DBIA #2789
;
EN ;Loop thru to find IV ien to DC
I $S(+PSJSYSU=3:0,+PSJSYSU=1:0,1:1) D Q
. W !,"You're not allowed to DC orders." D PAUSE^VALM1
NEW ON,ON55,PSIVX,SORT,NAT,PSIVAL,PSJORD,PSGODDD,DIR
S PSGLMT=$O(^TMP("PSIV",$J,"XB",0))-1
S:PSGLMT<1 PSGLMT=$G(^TMP("PSJPRO",$J,0))
Q:'+PSGLMT
S DIR("?")="Enter the order number(s) to be Discontinued"
S DIR(0)="L^1:"_PSGLMT,DIR("A")="DISCONTINUE which orders" D ^DIR
S PSGODDD=Y Q:$D(DIRUT)
;prompt for nature of order and requesting provider
D NATURE^PSIVOREN I '$D(P("NAT"))!'$$REQPROV^PSGOEC W !,$C(7),"No order(s) was DC." H 2 Q
S NAT=P("NAT") D COMMENT
N COMFLG,PSJCOM S PSJCOM=0
S SORT="" F S SORT=$O(^TMP("PSIV",$J,SORT)) Q:SORT="" F PSIVX=0:0 S PSIVX=$O(^TMP("PSIV",$J,SORT,PSIVX)) Q:'PSIVX I PSGODDD[PSIVX S ON=^(PSIVX),ON=(9999999999-ON)_$E(ON,11,11) D
. D CHKCOM I COMFLG D PRNT Q
. D:'PSJCOM SPDCIV
Q
SPDCIV ;Speed DC orders
S (PSJORD,ON55)=ON
I ON["V",$P($G(^PS(55,DFN,"IV",+ON55,.2)),U,4)="D" W !," ***** DONE ORDER *****" D PRNT Q
I '$$LS^PSSLOCK(DFN,ON) D PRNT Q
I ON["V" D Q
. S P(3)=$P($G(^PS(55,DFN,"IV",+ON55,0)),U,3)
. D NOW^%DTC Q:P(3)<%
. D D1^PSIVOPT2
. S PSIVALT=1,PSIVALCK="STOP",PSIVREA="D",ON=ON55 D LOG
. S:'$D(P("NAT")) P("NAT")=$G(PSJNOO) D HL^PSIVORA
. D UNL^PSSLOCK(DFN,ON)
.;;I $D(PSJNOO) S P("NAT")=PSJNOO D EN1^PSJHL2(DFN,"OC",PSJORD,"ORDER CANCELED")
N DA,DR,DIE,PSJND S DA=+PSJORD,PSJND=$G(^PS(53.1,DA,0)),P("OLDON")=$P(PSJND,U,25),DIE="^PS(53.1,",DR="28///"_$S($P(PSJND,U,27)="E":"DE",1:"D") D ^DIE
D HL^PSIVORA
D UNL^PSSLOCK(DFN,ON)
Q
I $G(PSIVALT)=1,'$G(PSJUNDC) K DA,DIR S DIR(0)="55.04,.04" D ^DIR K DA,DIR S PSIVAL=$S($D(DIRUT):"",1:Y)
Q
LOG ;Record activity log comments.
S:$G(PSIVALT)=2 PSIVAL="Action taken using OE/RR options." D ENTACT^PSIVAL
K DA,DIE,DR S DA(2)=DFN,DA(1)=+ON55,DA=PSIVLN,DIE="^PS(55,"_DFN_",""IV"","_+ON55_",""A"",",DR=".02////"_PSIVREA_";.03////"_$P(^VA(200,DUZ,0),U)_";.04////^S X=$G(PSIVAL)"_";.06////"_DUZ D ^DIE
D STOP^PSIVORAL ;* Record the stop dates
Q
PRNT ; DISPLAY IV ORDER AND PRINT MESSAGE
N PSJLINE,PSJOC S PSJLINE=1
D DSPLORDV^PSJLMUT1(DFN,ON)
F X=0:0 S X=$O(PSJOC(ON,X)) Q:'X D
.W !,$G(PSJOC(ON,X))
W !," ***** NO ACTION TAKEN ON ORDER *****",!
Q
CHKCOM ;Check to see if order is part of complex order series.
N PSJSTAT
S PSJCOM=$P($G(^PS(55,PSGP,"IV",+ON,.2)),U,8),COMFLG=0,PSJSTAT=$P($G(^(0)),"^",17)
Q:'PSJCOM I "DE"[PSJSTAT Q
N PSJLINE,PSJOC S PSJLINE=1
D DSPLORDV^PSJLMUT1(DFN,ON)
W ! F X=0:0 S X=$O(PSJOC(ON,X)) Q:'X D
.W !,$G(PSJOC(ON,X))
W !,"is part of a complex order. If you discontinue this order the following orders",!,"will be discontinued too (unless the stop date has already been reached)." D CMPLX^PSJCOM1(DFN,PSJCOM,ON)
F W !!,"Do you want to discontinue this series of complex orders" S %=1 D YN^DICN Q:%
I %'=1 S COMFLG=1 Q
N O,OO S O=0,OO="" F S O=$O(^PS(55,"ACX",PSJCOM,O)) Q:'O F S OO=$O(^PS(55,"ACX",PSJCOM,O,OO)) Q:OO="" D Q:COMFLG
.Q:OO=ON I '$$LS^PSSLOCK(DFN,OO) S COMFLG=1 Q
Q:COMFLG
N O,OO S O=0,OO="" F S O=$O(^PS(55,"ACX",PSJCOM,O)) Q:'O F S OO=$O(^PS(55,"ACX",PSJCOM,O,OO)) Q:OO="" D
.I (OO["U") N PSGORD S PSGORD=OO D AC^PSGOECS
.I (OO["V") N PSGORD S (ON,PSGORD)=OO D SPDCIV^PSIVSPDC
.D UNL^PSSLOCK(DFN,PSGORD)
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSIVSPDC 3621 printed Nov 22, 2024@17:15:10 Page 2
PSIVSPDC ;BIR/PR,MV-SPEED DC IV ORDERS ;02 Mar 99 / 9:27 AM
+1 ;;5.0; INPATIENT MEDICATIONS ;**23,29,38,58,110**;16 DEC 97
+2 ;
+3 ; Reference to ^PS(55 is supported by DBIA# 2191.
+4 ; Reference to ^PSSLOCK is supported by DBIA #2789
+5 ;
EN ;Loop thru to find IV ien to DC
+1 IF $SELECT(+PSJSYSU=3:0,+PSJSYSU=1:0,1:1)
Begin DoDot:1
+2 WRITE !,"You're not allowed to DC orders."
DO PAUSE^VALM1
End DoDot:1
QUIT
+3 NEW ON,ON55,PSIVX,SORT,NAT,PSIVAL,PSJORD,PSGODDD,DIR
+4 SET PSGLMT=$ORDER(^TMP("PSIV",$JOB,"XB",0))-1
+5 if PSGLMT<1
SET PSGLMT=$GET(^TMP("PSJPRO",$JOB,0))
+6 if '+PSGLMT
QUIT
+7 SET DIR("?")="Enter the order number(s) to be Discontinued"
+8 SET DIR(0)="L^1:"_PSGLMT
SET DIR("A")="DISCONTINUE which orders"
DO ^DIR
+9 SET PSGODDD=Y
if $DATA(DIRUT)
QUIT
+10 ;prompt for nature of order and requesting provider
+11 DO NATURE^PSIVOREN
IF '$DATA(P("NAT"))!'$$REQPROV^PSGOEC
WRITE !,$CHAR(7),"No order(s) was DC."
HANG 2
QUIT
+12 SET NAT=P("NAT")
DO COMMENT
+13 NEW COMFLG,PSJCOM
SET PSJCOM=0
+14 SET SORT=""
FOR
SET SORT=$ORDER(^TMP("PSIV",$JOB,SORT))
if SORT=""
QUIT
FOR PSIVX=0:0
SET PSIVX=$ORDER(^TMP("PSIV",$JOB,SORT,PSIVX))
if 'PSIVX
QUIT
IF PSGODDD[PSIVX
SET ON=^(PSIVX)
SET ON=(9999999999-ON)_$EXTRACT(ON,11,11)
Begin DoDot:1
+15 DO CHKCOM
IF COMFLG
DO PRNT
QUIT
+16 if 'PSJCOM
DO SPDCIV
End DoDot:1
+17 QUIT
SPDCIV ;Speed DC orders
+1 SET (PSJORD,ON55)=ON
+2 IF ON["V"
IF $PIECE($GET(^PS(55,DFN,"IV",+ON55,.2)),U,4)="D"
WRITE !," ***** DONE ORDER *****"
DO PRNT
QUIT
+3 IF '$$LS^PSSLOCK(DFN,ON)
DO PRNT
QUIT
+4 IF ON["V"
Begin DoDot:1
+5 SET P(3)=$PIECE($GET(^PS(55,DFN,"IV",+ON55,0)),U,3)
+6 DO NOW^%DTC
if P(3)<%
QUIT
+7 DO D1^PSIVOPT2
+8 SET PSIVALT=1
SET PSIVALCK="STOP"
SET PSIVREA="D"
SET ON=ON55
DO LOG
+9 if '$DATA(P("NAT"))
SET P("NAT")=$GET(PSJNOO)
DO HL^PSIVORA
+10 DO UNL^PSSLOCK(DFN,ON)
+11 ;;I $D(PSJNOO) S P("NAT")=PSJNOO D EN1^PSJHL2(DFN,"OC",PSJORD,"ORDER CANCELED")
End DoDot:1
QUIT
+12 NEW DA,DR,DIE,PSJND
SET DA=+PSJORD
SET PSJND=$GET(^PS(53.1,DA,0))
SET P("OLDON")=$PIECE(PSJND,U,25)
SET DIE="^PS(53.1,"
SET DR="28///"_$SELECT($PIECE(PSJND,U,27)="E":"DE",1:"D")
DO ^DIE
+13 DO HL^PSIVORA
+14 DO UNL^PSSLOCK(DFN,ON)
+15 QUIT
+1 IF $GET(PSIVALT)=1
IF '$GET(PSJUNDC)
KILL DA,DIR
SET DIR(0)="55.04,.04"
DO ^DIR
KILL DA,DIR
SET PSIVAL=$SELECT($DATA(DIRUT):"",1:Y)
+2 QUIT
LOG ;Record activity log comments.
+1 if $GET(PSIVALT)=2
SET PSIVAL="Action taken using OE/RR options."
DO ENTACT^PSIVAL
+2 KILL DA,DIE,DR
SET DA(2)=DFN
SET DA(1)=+ON55
SET DA=PSIVLN
SET DIE="^PS(55,"_DFN_",""IV"","_+ON55_",""A"","
SET DR=".02////"_PSIVREA_";.03////"_$PIECE(^VA(200,DUZ,0),U)_";.04////^S X=$G(PSIVAL)"_";.06////"_DUZ
DO ^DIE
+3 ;* Record the stop dates
DO STOP^PSIVORAL
+4 QUIT
PRNT ; DISPLAY IV ORDER AND PRINT MESSAGE
+1 NEW PSJLINE,PSJOC
SET PSJLINE=1
+2 DO DSPLORDV^PSJLMUT1(DFN,ON)
+3 FOR X=0:0
SET X=$ORDER(PSJOC(ON,X))
if 'X
QUIT
Begin DoDot:1
+4 WRITE !,$GET(PSJOC(ON,X))
End DoDot:1
+5 WRITE !," ***** NO ACTION TAKEN ON ORDER *****",!
+6 QUIT
CHKCOM ;Check to see if order is part of complex order series.
+1 NEW PSJSTAT
+2 SET PSJCOM=$PIECE($GET(^PS(55,PSGP,"IV",+ON,.2)),U,8)
SET COMFLG=0
SET PSJSTAT=$PIECE($GET(^(0)),"^",17)
+3 if 'PSJCOM
QUIT
IF "DE"[PSJSTAT
QUIT
+4 NEW PSJLINE,PSJOC
SET PSJLINE=1
+5 DO DSPLORDV^PSJLMUT1(DFN,ON)
+6 WRITE !
FOR X=0:0
SET X=$ORDER(PSJOC(ON,X))
if 'X
QUIT
Begin DoDot:1
+7 WRITE !,$GET(PSJOC(ON,X))
End DoDot:1
+8 WRITE !,"is part of a complex order. If you discontinue this order the following orders",!,"will be discontinued too (unless the stop date has already been reached)."
DO CMPLX^PSJCOM1(DFN,PSJCOM,ON)
+9 FOR
WRITE !!,"Do you want to discontinue this series of complex orders"
SET %=1
DO YN^DICN
if %
QUIT
+10 IF %'=1
SET COMFLG=1
QUIT
+11 NEW O,OO
SET O=0
SET OO=""
FOR
SET O=$ORDER(^PS(55,"ACX",PSJCOM,O))
if 'O
QUIT
FOR
SET OO=$ORDER(^PS(55,"ACX",PSJCOM,O,OO))
if OO=""
QUIT
Begin DoDot:1
+12 if OO=ON
QUIT
IF '$$LS^PSSLOCK(DFN,OO)
SET COMFLG=1
QUIT
End DoDot:1
if COMFLG
QUIT
+13 if COMFLG
QUIT
+14 NEW O,OO
SET O=0
SET OO=""
FOR
SET O=$ORDER(^PS(55,"ACX",PSJCOM,O))
if 'O
QUIT
FOR
SET OO=$ORDER(^PS(55,"ACX",PSJCOM,O,OO))
if OO=""
QUIT
Begin DoDot:1
+15 IF (OO["U")
NEW PSGORD
SET PSGORD=OO
DO AC^PSGOECS
+16 IF (OO["V")
NEW PSGORD
SET (ON,PSGORD)=OO
DO SPDCIV^PSIVSPDC
+17 DO UNL^PSSLOCK(DFN,PSGORD)
End DoDot:1