PSIVOPT1 ;BIR/MLM - EDIT/DC ORDER (BACKDOOR) ;May 01, 2019@12:56:55
;;5.0;INPATIENT MEDICATIONS ;**29,58,101,110,127,181,258,279,281,319**;16 DEC 97;Build 31
;
; Reference to ^PS(55 is supported by DBIA 2191
; Reference to ^PSSLOCK is supported by DBIA #2789
; Reference to ^TMP("PSODAOC",$J supported by DBIA 6071
;
E ; Edit order through Pharmacy.
N PSIEDITO S PSIEDITO=1
D GSTRING^PSIVORE1,GTFLDS^PSIVORFE
I '$G(PSIVENO) S PSIVENO=1 D EN^VALM("PSJ LM IV AC/EDIT") S VALMBCK="Q"
Q
ACCEPT ; To be called by ACCEPT^PSJLIACT
NEW PSIVDSFG
D CKNEW
D:'$G(PSGORQF) DOSING
Q:$G(PSGORQF)
;Don't create new order if Inf rate changed not supposed too set PSIVCHG=1
I PSIVCHG,'$G(PSJEDIT1) D
.S P("OLDON")=ON55,Y=$G(^PS(55,DFN,"IV",+ON55,0)) D NOW^%DTC S P("LOG")=$E(%,1,12) K %
.S P("CLRK")=DUZ_U_$P($G(^VA(200,DUZ,0)),U)
.I $G(PSGSDX)!$G(PSGFDX) Q
.I $P(Y,U,2)=P(2),$P(Y,U,3)=P(3) D ENT^PSIVCAL S X=P(2),%DT="T" D ^%DT S P(2)=$E(Y,1,12),PSJEDIT1=1 D ENSTOP^PSIVCAL
I $G(PSGORQF) S VALMBCK="Q" W !,"Order unchanged." D PAUSE^PSJMISC(1,) Q
D OK^PSIVOPT2
I X["N" S VALMBCK="R" Q
I X["^" D GT55^PSIVORFB W !,"Order unchanged." Q
I $G(P("21FLG"))]"" D CKNEW,@$S(PSIVCHG:"NEWORD",1:"UPDATE") Q:$D(X)
S PSJORL=$$ENORL^PSJUTL($G(VAIN(4))) S ON=ON55,OD=P(2)
D:ON["V" EN^PSIVORE
I $G(PSJIVORF),PSIVCHG D EN1^PSJHL2(DFN,"SN",ON55,"NEW ORDER") NEW PSIVXX S PSIVXX=$$LS^PSSLOCK(DFN,ON55)
S ^TMP("PSODAOC",$J,"IP NEW IEN")=ON55
D SETOC^PSJNEWOC(ON55)
S PSIVACEP=1
Q
;
DOSING ;
NEW TMPDRG
;PSIVDSFG is set when changes to fields (except Schedule for continuous IV type) that caused a new order to create.
D TMPDRG^PSJMISC(DFN,$G(ON55),.TMPDRG)
I $S($G(PSIVDSFG):0,$G(PSIVCHG):1,1:0)!$$COMPARE^PSJMISC(.DRG,.TMPDRG,$S(P("DTYP")=1:0,1:1))!$$INFRATE^PSJMISC(DFN,ON55,P(8),P("DTYP")) D
. D IN^PSJOCDS($G(ON),"IV","")
I $G(PSGORQF) S VALMBCK="Q"
Q
CKNEW ; Check if new order is to be created.
N DNE,ND,TDRG,PSJCHG,TMPDRG S (DNE,PSIVCHG,PSIVDSFG)=0
Q:PSIVCHG
D TMPDRG^PSJMISC(DFN,$G(ON55),.TMPDRG)
I $$COMPARE^PSJMISC(.DRG,.TMPDRG,$S(P("DTYP")=1:0,1:1)) S PSIVCHG=1
K TMPDRG
Q:PSIVCHG
F DRGT="AD","SOL" F DRGI=0:0 S DRGI=$O(DRG(DRGT,DRGI)) Q:'DRGI I $P(P("OT"),U)="F",'$P(DRG(DRGT,DRGI),U,5) S P("OT")="I"
;I $G(DRG("AD",0))+$S(P("DTYP")=1:0,1:+$G(DRG("SOL",0)))'=DRG("DRGC") S PSIVCHG=1 Q
S ND(0)=$G(^PS(55,DFN,"IV",+ON55,0)),ND("PD")=$G(^PS(55,DFN,"IV",+ON55,.2))
N X S X=$S($P(ND(0),U,8)["@":$P($P(ND(0),U,8),"@"),1:$P(ND(0),U,8))
S ND=$S($E(P("OT"))="I":$P(ND("PD"),U,1,2)_U,1:"")_$P(ND("PD"),U,3)_U_$S($E(P("OT"))'="I":X_U,1:"")_+$P(ND(0),U,6)_U_$P(ND(0),U,2)_U_$P(ND(0),U,3)
S:ND'=($S($E(P("OT"))="I":+P("PD")_U_$G(P("DO"))_U,1:"")_+P("MR")_U_$S($E(P("OT"))'="I":$S(P(8)["@":$P(P(8),"@"),1:P(8))_U,1:"")_+P(6)_U_P(2)_U_P(3)) PSIVCHG=1
I 'PSIVCHG I $P(ND(0),U,9)'=P(9) S:(P("DTYP")'=1) PSIVDSFG=1 S PSIVCHG=1
;S ND=$S($E(P("OT"))="I":$P(ND("PD"),U,1,2)_U,1:"")_$P(ND("PD"),U,3)_U_$S($E(P("OT"))'="I":X_U,1:"")_+$P(ND(0),U,6)_U_$P(ND(0),U,2)_U_$P(ND(0),U,3)_U_$P(ND(0),U,9)
;S:ND'=($S($E(P("OT"))="I":+P("PD")_U_$G(P("DO"))_U,1:"")_+P("MR")_U_$S($E(P("OT"))'="I":$S(P(8)["@":$P(P(8),"@"),1:P(8))_U,1:"")_+P(6)_U_P(2)_U_P(3)_U_P(9)) PSIVCHG=1
;* S ND=$S($E(P("OT"))="I":$P(ND("PD"),U,1,2)_U,1:"")_$P(ND("PD"),U,3)_U_$S($E(P("OT"))'="I":$P(ND(0),U,8)_U,1:"")_+$P(ND(0),U,6)_U_$P(ND(0),U,2)_U_$P(ND(0),U,3)_U_$P(ND(0),U,9)
;* S:ND'=($S($E(P("OT"))="I":+P("PD")_U_$G(P("DO"))_U,1:"")_+P("MR")_U_$S($E(P("OT"))'="I":P(8)_U,1:"")_+P(6)_U_P(2)_U_P(3)_U_P(9)) PSIVCHG=1
Q
;
UPDATE ; Update original order.
I '$G(PSJSYSP) N PSJSYSP S PSJSYSP=$S($G(DUZ):DUZ,1:$J)
N PSJIBDT,PSJINIV S PSJINIV=0
S PSIVALT=1,PSIVALCK="EN",PSIVREA="E",ON=ON55 K P("OLDON") D LOG^PSIVORAL
; PSJ*319 when updating clinic; check if old clinic is PADE, send cancellation for old clinic to PADE
N OLCLN
S OLCLN=$G(^PS(55,DFN,"IV",+ON55,"DSS")),OLCLN=$P(OLCLN,"^")
I $P(OLCLN,"^")'="",$G(P("CLIN"))'=OLCLN D
.N PSJPDO,I,PSJAP
.S PSJPDO=1,(PSJAP,I)=0
.F S I=$O(^PS(58.7,I)) Q:'I S J=$$PDACT^PSJPDCLA(I)
.Q:'PSJAP
.I '$$CHKPDCL^PSJPDCLA(OLCLN) Q
.N PDTYP,PSJHLDFN,RXO,OSTA
.S OSTA=$P($G(^PS(55,DFN,"IV",+ON55,0)),"^",17)
.S $P(^PS(55,DFN,"IV",+ON55,0),"^",17)="D" ; temporarliy set status to DC
.S PDTYP="OD",PSJHLDFN=PSGP,RXO=ON55
.D PDORD^PSJPDCLU
.S $P(^PS(55,DFN,"IV",+ON55,0),"^",17)=OSTA ; reset status
; PSJ*319 changes end
D SET55^PSIVORFB I $G(P("NUMLBL")) S $P(^PS(55,DFN,"IV",+ON55,11),"^")=$G(P("NUMLBL")) K P("NUMLBL")
D PSBPOIV^PSJIBAG(DFN,ON55,,.PSJINIV)
D ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,"E")
D:'$D(PSJIVORF) ORPARM^PSIVOREN K X Q:'PSJIVORF
S PSJORIFN=$P($G(^PS(55,DFN,"IV",+ON55,0)),U,21) Q:'PSJORIFN
S P("NAT")=""
D EN1^PSJHL2(DFN,"XX",+ON55_"V","UPDATED ORDER")
I $G(PSJINIV),'$G(PSIVCHG) W ! D
.N DIR,X,Y,PSJIRPLB S DIR(0)="Y",DIR("B")="NO",DIR("A")="Print new replacement labels",DIR("?")="Enter YES to print new IV labels to replace inactivated IV labels" D ^DIR
.I ($G(Y)>0) K DIR S PSJIRPLB=1 D ^PSIVORE1
K X
Q
;
NEWORD ; DC orig. order, get new order no.
N PSJIBDT,PSIEDFIR S PSJIBDT=1
D:'$D(PSJIVORF) ORPARM^PSIVOREN I PSJIVORF D NATURE^PSIVOREN I '$D(P("NAT")) S X=1 W !,"Order unchanged." Q
S P("RES")="E",P("OLDON")=$S($G(PSIVCOPY)=2:"",1:ON55),P(16)="" ; INC000000801240 / MWA (VMP)
S PSJAGYSV=1
Q:$$NONVF()
I '($G(PSIVCOPY)=2) K ON55 D NEW55^PSIVORFB
S (P("PON"),P("NEWON"),ON)=ON55,ON55=P("OLDON") S:($G(PSIVCOPY)=2) P("OLDON")=""
I $P($G(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)="A" D D1^PSIVOPT2 D
. I PSJIVORF,$P($G(^PS(55,DFN,"IV",+ON55,0)),U,21) S PSIEDFIR=1 D EN1^PSJHL2(DFN,"OD",+ON55_"V","ORDER DISCONTINUED") K PSIEDFIR
. S P("21FLG")="" W !!,"Original order discontinued...",!!
. D UNL^PSSLOCK(DFN,+ON55_"V")
F ON55=P("NEWON"),P("OLDON") K DA,DIE,DR D
.S DA(1)=DFN,DA=+ON55,DIE="^PS(55,"_DFN_",""IV"",",DR=$S((ON55=P("NEWON")&(+ON55'=+P("OLDON"))):"113////"_P("OLDON")_";122////E",1:"114////"_P("NEWON")_";123////E") D ^DIE
.I ON55=P("NEWON") N CLINAPPT S CLINAPPT=$G(^PS(55,DFN,"IV",+P("OLDON"),"DSS")) D
..S:CLINAPPT DR=DR_";136////"_+CLINAPPT S:$P(CLINAPPT,"^",2) DR=DR_";139////"_$P(CLINAPPT,"^",2)
.D ^DIE
.Q:ON55=P("OLDON")&($P($G(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)'="D")
.D:ON55=P("NEWON") SET55^PSIVORFB
.D:ON55=P("NEWON") VF1^PSJLIACT("","",0)
.D ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,$S(ON55=P("NEWON"):"N",1:"DE"))
.S PSIVREA="E",PSIVAL="Order "_$S(ON55=P("OLDON"):"discontinued",1:"created")_" due to edit" S:ON55=P("OLDON") PSIVALCK="STOP" D LOG^PSIVORAL
L -^PS(55,DFN,"IV",+P("OLDON")) ;D NEWENT^PSIVORFE
K X S ON55=P("NEWON"),P(17)="A" Q:'PSJIVORF D SET^PSIVORFE
Q
;
NEWSTOP ; Set stop date for DC and renewals.
S ND=$G(^PS(55,DFN,"IV",+ON55,0)),Y=+$P(ND,U,3),$P(^PS(55,DFN,"IV",+P("OLDON"),2),U,7)=Y,NSTOP=$S(NSTOP>Y:Y,1:NSTOP),$P(^PS(55,DFN,"IV",+ON55,0),U,3)=NSTOP
K DA,DIK S DIK="^PS(55,"_DFN_",""IV"",",DA(1)=DFN,DA=+P("OLDON") D IX^DIK K DA,DIK
Q
NONVF() ;
NEW PSGOEAV S PSGOEAV=+$P(PSJSYSP0,U,9)
I +PSJSYSU=3,PSGOEAV Q 0
I +PSJSYSU=1,PSGOEAV Q 0
K DA D ENGNN^PSGOETO S (ON,P("NEWON"))=DA_"P",P(17)="N"
S (P("DO"),P("PD"))=""
D GTPD^PSIVORE2,PUT531^PSIVORFA
I $P($G(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)="A" D D1^PSIVOPT2 D
. I PSJIVORF,$P($G(^PS(55,DFN,"IV",+P("OLDON"),0)),U,21) D EN1^PSJHL2(DFN,"OD",+ON55_"V","ORDER DISCONTINUED")
. S P("21FLG")="" W !!,"Original order discontinued...",!!
. D UNL^PSSLOCK(DFN,+P("OLDON")_"V")
F ON55=P("NEWON"),P("OLDON") K DA,DIE,DR D
. S DA=+ON55
. S:ON55=P("NEWON") DIE="^PS(53.1,",DR="104////"_P("OLDON")_";103////E"
. S:ON55=P("OLDON") DA(1)=DFN,DIE="^PS(55,"_DFN_",""IV"",",DR="114////"_P("NEWON")_";123////E"
. D ^DIE
. Q:ON55=P("OLDON")&($P($G(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)'="D")
. I ON55=P("OLDON") D
.. D ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,$S(ON55=P("NEWON"):"N",1:"DE"))
.. S PSIVALT="",PSIVREA="E",PSIVAL="Order discontinued due to edit" S PSIVALCK="STOP" D LOG^PSIVORAL
. I ON55=P("NEWON") D NEWNVAL^PSGAL5(ON55,4100,"","") I $G(PSJIBDT)?7N1"."1.N D NEWNVAL^PSGAL5(ON55,6000,"LABEL INVALID DATE",PSJIBDT)
L -^PS(55,DFN,"IV",+P("OLDON"))
K X S (ON,ON55)=P("NEWON")
D EN1^PSJHL2(DFN,"SN",ON,"ORDER CREATED")
S ^TMP("PSODAOC",$J,"IP NEW IEN")=ON
;RTC 178789 - not to store allergy OC until either verify or quit as non-vf order
;D SETOC^PSJNEWOC(ON)
S X=$$LS^PSSLOCK(DFN,ON)
D GT531^PSIVORFA(DFN,ON)
I ON["P" N CLINAPPT S CLINAPPT=$G(^PS(55,DFN,"IV",+ON,"DSS")) I CLINAPPT D K DIE,DA,DR
. S:CLINAPPT DR="136////"_+CLINAPPT_";" S:$P(CLINAPPT,"^",2) DR=DR_"139////"_$P(CLINAPPT,"^",2)_";" D ^DIE
S VALMBCK="Q"
S PSGACT="EL"
I P(17)="N",(P("OLDON")=""),(P("CLRK")=DUZ) S PSGACT="ELD"
I +PSJSYSU=3!(+PSJSYSU=1) S PSGACT="DELV"
Q 1
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSIVOPT1 8798 printed Oct 16, 2024@18:05:17 Page 2
PSIVOPT1 ;BIR/MLM - EDIT/DC ORDER (BACKDOOR) ;May 01, 2019@12:56:55
+1 ;;5.0;INPATIENT MEDICATIONS ;**29,58,101,110,127,181,258,279,281,319**;16 DEC 97;Build 31
+2 ;
+3 ; Reference to ^PS(55 is supported by DBIA 2191
+4 ; Reference to ^PSSLOCK is supported by DBIA #2789
+5 ; Reference to ^TMP("PSODAOC",$J supported by DBIA 6071
+6 ;
E ; Edit order through Pharmacy.
+1 NEW PSIEDITO
SET PSIEDITO=1
+2 DO GSTRING^PSIVORE1
DO GTFLDS^PSIVORFE
+3 IF '$GET(PSIVENO)
SET PSIVENO=1
DO EN^VALM("PSJ LM IV AC/EDIT")
SET VALMBCK="Q"
+4 QUIT
ACCEPT ; To be called by ACCEPT^PSJLIACT
+1 NEW PSIVDSFG
+2 DO CKNEW
+3 if '$GET(PSGORQF)
DO DOSING
+4 if $GET(PSGORQF)
QUIT
+5 ;Don't create new order if Inf rate changed not supposed too set PSIVCHG=1
+6 IF PSIVCHG
IF '$GET(PSJEDIT1)
Begin DoDot:1
+7 SET P("OLDON")=ON55
SET Y=$GET(^PS(55,DFN,"IV",+ON55,0))
DO NOW^%DTC
SET P("LOG")=$EXTRACT(%,1,12)
KILL %
+8 SET P("CLRK")=DUZ_U_$PIECE($GET(^VA(200,DUZ,0)),U)
+9 IF $GET(PSGSDX)!$GET(PSGFDX)
QUIT
+10 IF $PIECE(Y,U,2)=P(2)
IF $PIECE(Y,U,3)=P(3)
DO ENT^PSIVCAL
SET X=P(2)
SET %DT="T"
DO ^%DT
SET P(2)=$EXTRACT(Y,1,12)
SET PSJEDIT1=1
DO ENSTOP^PSIVCAL
End DoDot:1
+11 IF $GET(PSGORQF)
SET VALMBCK="Q"
WRITE !,"Order unchanged."
DO PAUSE^PSJMISC(1,)
QUIT
+12 DO OK^PSIVOPT2
+13 IF X["N"
SET VALMBCK="R"
QUIT
+14 IF X["^"
DO GT55^PSIVORFB
WRITE !,"Order unchanged."
QUIT
+15 IF $GET(P("21FLG"))]""
DO CKNEW
DO @$SELECT(PSIVCHG:"NEWORD",1:"UPDATE")
if $DATA(X)
QUIT
+16 SET PSJORL=$$ENORL^PSJUTL($GET(VAIN(4)))
SET ON=ON55
SET OD=P(2)
+17 if ON["V"
DO EN^PSIVORE
+18 IF $GET(PSJIVORF)
IF PSIVCHG
DO EN1^PSJHL2(DFN,"SN",ON55,"NEW ORDER")
NEW PSIVXX
SET PSIVXX=$$LS^PSSLOCK(DFN,ON55)
+19 SET ^TMP("PSODAOC",$JOB,"IP NEW IEN")=ON55
+20 DO SETOC^PSJNEWOC(ON55)
+21 SET PSIVACEP=1
+22 QUIT
+23 ;
DOSING ;
+1 NEW TMPDRG
+2 ;PSIVDSFG is set when changes to fields (except Schedule for continuous IV type) that caused a new order to create.
+3 DO TMPDRG^PSJMISC(DFN,$GET(ON55),.TMPDRG)
+4 IF $SELECT($GET(PSIVDSFG):0,$GET(PSIVCHG):1,1:0)!$$COMPARE^PSJMISC(.DRG,.TMPDRG,$SELECT(P("DTYP")=1:0,1:1))!$$INFRATE^PSJMISC(DFN,ON55,P(8),P("DTYP"))
Begin DoDot:1
+5 DO IN^PSJOCDS($GET(ON),"IV","")
End DoDot:1
+6 IF $GET(PSGORQF)
SET VALMBCK="Q"
+7 QUIT
CKNEW ; Check if new order is to be created.
+1 NEW DNE,ND,TDRG,PSJCHG,TMPDRG
SET (DNE,PSIVCHG,PSIVDSFG)=0
+2 if PSIVCHG
QUIT
+3 DO TMPDRG^PSJMISC(DFN,$GET(ON55),.TMPDRG)
+4 IF $$COMPARE^PSJMISC(.DRG,.TMPDRG,$SELECT(P("DTYP")=1:0,1:1))
SET PSIVCHG=1
+5 KILL TMPDRG
+6 if PSIVCHG
QUIT
+7 FOR DRGT="AD","SOL"
FOR DRGI=0:0
SET DRGI=$ORDER(DRG(DRGT,DRGI))
if 'DRGI
QUIT
IF $PIECE(P("OT"),U)="F"
IF '$PIECE(DRG(DRGT,DRGI),U,5)
SET P("OT")="I"
+8 ;I $G(DRG("AD",0))+$S(P("DTYP")=1:0,1:+$G(DRG("SOL",0)))'=DRG("DRGC") S PSIVCHG=1 Q
+9 SET ND(0)=$GET(^PS(55,DFN,"IV",+ON55,0))
SET ND("PD")=$GET(^PS(55,DFN,"IV",+ON55,.2))
+10 NEW X
SET X=$SELECT($PIECE(ND(0),U,8)["@":$PIECE($PIECE(ND(0),U,8),"@"),1:$PIECE(ND(0),U,8))
+11 SET ND=$SELECT($EXTRACT(P("OT"))="I":$PIECE(ND("PD"),U,1,2)_U,1:"")_$PIECE(ND("PD"),U,3)_U_$SELECT($EXTRACT(P("OT"))'="I":X_U,1:"")_+$PIECE(ND(0),U,6)_U_$PIECE(ND(0),U,2)_U_$PIECE(ND(0),U,3)
+12 if ND'=($SELECT($EXTRACT(P("OT"))="I"
SET PSIVCHG=1
+13 IF 'PSIVCHG
IF $PIECE(ND(0),U,9)'=P(9)
if (P("DTYP")'=1)
SET PSIVDSFG=1
SET PSIVCHG=1
+14 ;S ND=$S($E(P("OT"))="I":$P(ND("PD"),U,1,2)_U,1:"")_$P(ND("PD"),U,3)_U_$S($E(P("OT"))'="I":X_U,1:"")_+$P(ND(0),U,6)_U_$P(ND(0),U,2)_U_$P(ND(0),U,3)_U_$P(ND(0),U,9)
+15 ;S:ND'=($S($E(P("OT"))="I":+P("PD")_U_$G(P("DO"))_U,1:"")_+P("MR")_U_$S($E(P("OT"))'="I":$S(P(8)["@":$P(P(8),"@"),1:P(8))_U,1:"")_+P(6)_U_P(2)_U_P(3)_U_P(9)) PSIVCHG=1
+16 ;* S ND=$S($E(P("OT"))="I":$P(ND("PD"),U,1,2)_U,1:"")_$P(ND("PD"),U,3)_U_$S($E(P("OT"))'="I":$P(ND(0),U,8)_U,1:"")_+$P(ND(0),U,6)_U_$P(ND(0),U,2)_U_$P(ND(0),U,3)_U_$P(ND(0),U,9)
+17 ;* S:ND'=($S($E(P("OT"))="I":+P("PD")_U_$G(P("DO"))_U,1:"")_+P("MR")_U_$S($E(P("OT"))'="I":P(8)_U,1:"")_+P(6)_U_P(2)_U_P(3)_U_P(9)) PSIVCHG=1
+18 QUIT
+19 ;
UPDATE ; Update original order.
+1 IF '$GET(PSJSYSP)
NEW PSJSYSP
SET PSJSYSP=$SELECT($GET(DUZ):DUZ,1:$JOB)
+2 NEW PSJIBDT,PSJINIV
SET PSJINIV=0
+3 SET PSIVALT=1
SET PSIVALCK="EN"
SET PSIVREA="E"
SET ON=ON55
KILL P("OLDON")
DO LOG^PSIVORAL
+4 ; PSJ*319 when updating clinic; check if old clinic is PADE, send cancellation for old clinic to PADE
+5 NEW OLCLN
+6 SET OLCLN=$GET(^PS(55,DFN,"IV",+ON55,"DSS"))
SET OLCLN=$PIECE(OLCLN,"^")
+7 IF $PIECE(OLCLN,"^")'=""
IF $GET(P("CLIN"))'=OLCLN
Begin DoDot:1
+8 NEW PSJPDO,I,PSJAP
+9 SET PSJPDO=1
SET (PSJAP,I)=0
+10 FOR
SET I=$ORDER(^PS(58.7,I))
if 'I
QUIT
SET J=$$PDACT^PSJPDCLA(I)
+11 if 'PSJAP
QUIT
+12 IF '$$CHKPDCL^PSJPDCLA(OLCLN)
QUIT
+13 NEW PDTYP,PSJHLDFN,RXO,OSTA
+14 SET OSTA=$PIECE($GET(^PS(55,DFN,"IV",+ON55,0)),"^",17)
+15 ; temporarliy set status to DC
SET $PIECE(^PS(55,DFN,"IV",+ON55,0),"^",17)="D"
+16 SET PDTYP="OD"
SET PSJHLDFN=PSGP
SET RXO=ON55
+17 DO PDORD^PSJPDCLU
+18 ; reset status
SET $PIECE(^PS(55,DFN,"IV",+ON55,0),"^",17)=OSTA
End DoDot:1
+19 ; PSJ*319 changes end
+20 DO SET55^PSIVORFB
IF $GET(P("NUMLBL"))
SET $PIECE(^PS(55,DFN,"IV",+ON55,11),"^")=$GET(P("NUMLBL"))
KILL P("NUMLBL")
+21 DO PSBPOIV^PSJIBAG(DFN,ON55,,.PSJINIV)
+22 DO ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,"E")
+23 if '$DATA(PSJIVORF)
DO ORPARM^PSIVOREN
KILL X
if 'PSJIVORF
QUIT
+24 SET PSJORIFN=$PIECE($GET(^PS(55,DFN,"IV",+ON55,0)),U,21)
if 'PSJORIFN
QUIT
+25 SET P("NAT")=""
+26 DO EN1^PSJHL2(DFN,"XX",+ON55_"V","UPDATED ORDER")
+27 IF $GET(PSJINIV)
IF '$GET(PSIVCHG)
WRITE !
Begin DoDot:1
+28 NEW DIR,X,Y,PSJIRPLB
SET DIR(0)="Y"
SET DIR("B")="NO"
SET DIR("A")="Print new replacement labels"
SET DIR("?")="Enter YES to print new IV labels to replace inactivated IV labels"
DO ^DIR
+29 IF ($GET(Y)>0)
KILL DIR
SET PSJIRPLB=1
DO ^PSIVORE1
End DoDot:1
+30 KILL X
+31 QUIT
+32 ;
NEWORD ; DC orig. order, get new order no.
+1 NEW PSJIBDT,PSIEDFIR
SET PSJIBDT=1
+2 if '$DATA(PSJIVORF)
DO ORPARM^PSIVOREN
IF PSJIVORF
DO NATURE^PSIVOREN
IF '$DATA(P("NAT"))
SET X=1
WRITE !,"Order unchanged."
QUIT
+3 ; INC000000801240 / MWA (VMP)
SET P("RES")="E"
SET P("OLDON")=$SELECT($GET(PSIVCOPY)=2:"",1:ON55)
SET P(16)=""
+4 SET PSJAGYSV=1
+5 if $$NONVF()
QUIT
+6 IF '($GET(PSIVCOPY)=2)
KILL ON55
DO NEW55^PSIVORFB
+7 SET (P("PON"),P("NEWON"),ON)=ON55
SET ON55=P("OLDON")
if ($GET(PSIVCOPY)=2)
SET P("OLDON")=""
+8 IF $PIECE($GET(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)="A"
DO D1^PSIVOPT2
Begin DoDot:1
+9 IF PSJIVORF
IF $PIECE($GET(^PS(55,DFN,"IV",+ON55,0)),U,21)
SET PSIEDFIR=1
DO EN1^PSJHL2(DFN,"OD",+ON55_"V","ORDER DISCONTINUED")
KILL PSIEDFIR
+10 SET P("21FLG")=""
WRITE !!,"Original order discontinued...",!!
+11 DO UNL^PSSLOCK(DFN,+ON55_"V")
End DoDot:1
+12 FOR ON55=P("NEWON"),P("OLDON")
KILL DA,DIE,DR
Begin DoDot:1
+13 SET DA(1)=DFN
SET DA=+ON55
SET DIE="^PS(55,"_DFN_",""IV"","
SET DR=$SELECT((ON55=P("NEWON")&(+ON55'=+P("OLDON"))):"113////"_P("OLDON")_";122////E",1:"114////"_P("NEWON")_";123////E")
DO ^DIE
+14 IF ON55=P("NEWON")
NEW CLINAPPT
SET CLINAPPT=$GET(^PS(55,DFN,"IV",+P("OLDON"),"DSS"))
Begin DoDot:2
+15 if CLINAPPT
SET DR=DR_";136////"_+CLINAPPT
if $PIECE(CLINAPPT,"^",2)
SET DR=DR_";139////"_$PIECE(CLINAPPT,"^",2)
End DoDot:2
+16 DO ^DIE
+17 if ON55=P("OLDON")&($PIECE($GET(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)'="D")
QUIT
+18 if ON55=P("NEWON")
DO SET55^PSIVORFB
+19 if ON55=P("NEWON")
DO VF1^PSJLIACT("","",0)
+20 DO ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,$SELECT(ON55=P("NEWON"):"N",1:"DE"))
+21 SET PSIVREA="E"
SET PSIVAL="Order "_$SELECT(ON55=P("OLDON"):"discontinued",1:"created")_" due to edit"
if ON55=P("OLDON")
SET PSIVALCK="STOP"
DO LOG^PSIVORAL
End DoDot:1
+22 ;D NEWENT^PSIVORFE
LOCK -^PS(55,DFN,"IV",+P("OLDON"))
+23 KILL X
SET ON55=P("NEWON")
SET P(17)="A"
if 'PSJIVORF
QUIT
DO SET^PSIVORFE
+24 QUIT
+25 ;
NEWSTOP ; Set stop date for DC and renewals.
+1 SET ND=$GET(^PS(55,DFN,"IV",+ON55,0))
SET Y=+$PIECE(ND,U,3)
SET $PIECE(^PS(55,DFN,"IV",+P("OLDON"),2),U,7)=Y
SET NSTOP=$SELECT(NSTOP>Y:Y,1:NSTOP)
SET $PIECE(^PS(55,DFN,"IV",+ON55,0),U,3)=NSTOP
+2 KILL DA,DIK
SET DIK="^PS(55,"_DFN_",""IV"","
SET DA(1)=DFN
SET DA=+P("OLDON")
DO IX^DIK
KILL DA,DIK
+3 QUIT
NONVF() ;
+1 NEW PSGOEAV
SET PSGOEAV=+$PIECE(PSJSYSP0,U,9)
+2 IF +PSJSYSU=3
IF PSGOEAV
QUIT 0
+3 IF +PSJSYSU=1
IF PSGOEAV
QUIT 0
+4 KILL DA
DO ENGNN^PSGOETO
SET (ON,P("NEWON"))=DA_"P"
SET P(17)="N"
+5 SET (P("DO"),P("PD"))=""
+6 DO GTPD^PSIVORE2
DO PUT531^PSIVORFA
+7 IF $PIECE($GET(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)="A"
DO D1^PSIVOPT2
Begin DoDot:1
+8 IF PSJIVORF
IF $PIECE($GET(^PS(55,DFN,"IV",+P("OLDON"),0)),U,21)
DO EN1^PSJHL2(DFN,"OD",+ON55_"V","ORDER DISCONTINUED")
+9 SET P("21FLG")=""
WRITE !!,"Original order discontinued...",!!
+10 DO UNL^PSSLOCK(DFN,+P("OLDON")_"V")
End DoDot:1
+11 FOR ON55=P("NEWON"),P("OLDON")
KILL DA,DIE,DR
Begin DoDot:1
+12 SET DA=+ON55
+13 if ON55=P("NEWON")
SET DIE="^PS(53.1,"
SET DR="104////"_P("OLDON")_";103////E"
+14 if ON55=P("OLDON")
SET DA(1)=DFN
SET DIE="^PS(55,"_DFN_",""IV"","
SET DR="114////"_P("NEWON")_";123////E"
+15 DO ^DIE
+16 if ON55=P("OLDON")&($PIECE($GET(^PS(55,DFN,"IV",+P("OLDON"),0)),U,17)'="D")
QUIT
+17 IF ON55=P("OLDON")
Begin DoDot:2
+18 DO ENLBL^PSIVOPT(2,DUZ,DFN,3,+ON55,$SELECT(ON55=P("NEWON"):"N",1:"DE"))
+19 SET PSIVALT=""
SET PSIVREA="E"
SET PSIVAL="Order discontinued due to edit"
SET PSIVALCK="STOP"
DO LOG^PSIVORAL
End DoDot:2
+20 IF ON55=P("NEWON")
DO NEWNVAL^PSGAL5(ON55,4100,"","")
IF $GET(PSJIBDT)?7N1"."1.N
DO NEWNVAL^PSGAL5(ON55,6000,"LABEL INVALID DATE",PSJIBDT)
End DoDot:1
+21 LOCK -^PS(55,DFN,"IV",+P("OLDON"))
+22 KILL X
SET (ON,ON55)=P("NEWON")
+23 DO EN1^PSJHL2(DFN,"SN",ON,"ORDER CREATED")
+24 SET ^TMP("PSODAOC",$JOB,"IP NEW IEN")=ON
+25 ;RTC 178789 - not to store allergy OC until either verify or quit as non-vf order
+26 ;D SETOC^PSJNEWOC(ON)
+27 SET X=$$LS^PSSLOCK(DFN,ON)
+28 DO GT531^PSIVORFA(DFN,ON)
+29 IF ON["P"
NEW CLINAPPT
SET CLINAPPT=$GET(^PS(55,DFN,"IV",+ON,"DSS"))
IF CLINAPPT
Begin DoDot:1
+30 if CLINAPPT
SET DR="136////"_+CLINAPPT_";"
if $PIECE(CLINAPPT,"^",2)
SET DR=DR_"139////"_$PIECE(CLINAPPT,"^",2)_";"
DO ^DIE
End DoDot:1
KILL DIE,DA,DR
+31 SET VALMBCK="Q"
+32 SET PSGACT="EL"
+33 IF P(17)="N"
IF (P("OLDON")="")
IF (P("CLRK")=DUZ)
SET PSGACT="ELD"
+34 IF +PSJSYSU=3!(+PSJSYSU=1)
SET PSGACT="DELV"
+35 QUIT 1