PSIVEDT ;BIR/MLM - EDIT IV ORDER ;Nov 23, 2021@09:57:57
;;5.0;INPATIENT MEDICATIONS;**4,110,127,133,134,181,252,281,366,319,399,372**;16 DEC 97;Build 153
;
; Reference to ^PS(53.1 is supported by DBIA 2256.
; Reference to ^PS(52.7 is supported by DBIA 2173.
; Reference to ^PS(51.2 is supported by DBIA 2178.
; Reference to ^PS(50.7 is supported by DBIA 2180.
; Reference to ^PS(55 is supported by DBIA 2191.
; Reference to ^PSSJORDF is supported by DBIA 2418.
; Reference to $$SDEA^XUSER supported by DBIA #2343.
;
EDIT ;
;Store the DRG array. If it changed then to do an OC
NEW TMPDRG,PSJFLG57,PSIVE,PSIALLFL
D SAVEDRG^PSIVEDRG(.TMPDRG,.DRG)
I $G(DFN)&($G(PSJORD)["V") I $$COMPLEX^PSJOE(DFN,PSJORD) D
. N X,Y,PARENT,P2ND S P2ND=$S($G(^PS(55,PSGP,"IV",+PSJORD,.2)):$G(^PS(55,PSGP,"IV",+PSJORD,.2)),1:$G(^PS(55,PSGP,5,+PSJORD,.2)))
. S PARENT=$P(P2ND,"^",8)
. I PARENT D FULL^VALM1 W !!?5,"This order is part of a complex order. Please review the following ",!?5,"associated orders before changing this order." D CMPLX^PSJCOM1(PSGP,PARENT,PSJORD)
S DONE=0
F PSIVE=1:1 S:DONE&$E(PSIVAC)="C" OREND=1 Q:PSIVE>$L(EDIT,U)!(DONE) Q:'$L($P(EDIT,U,PSIVE)) D @($P(EDIT,U,PSIVE)) S:$E(PSIVAC,2)="N" PSIVOK=PSIVOK_U_$P(EDIT,U,PSIVE) I $E(X)=U,$L(X)>1 S:PSIVE>1 PSIVE=PSIVE-1 F D FF Q:Y<0 D @Y Q:$E(X)'=U
I $G(PSGORQF) K PSIVEDIT S PSJOCCHK=1,PSIVENO=1 ;RTC 151046
I '$G(PSGORQF),$G(PSJOCCHK) K PSJOCCHK,PSIVENO D OC^PSIVOC
K EDIT,PSIVOK,PSGDI
;If quit then restore DRG( to pre-edit state
I $G(PSGORQF) D SAVEDRG^PSIVEDRG(.DRG,.TMPDRG)
Q
;
1 ; Provider.
N BKP6 S BKP6="" S:P(6) BKP6=P(6)
N1 ;
N PSADCNT,PSPROV ; ** Patch 545 **
;
I $G(P("RES"))="R" I $G(PSJORD)["P",$P($G(^PS(53.1,+$G(ON),0)),"^",24)="R" D Q
. W !!?5,"This is Renewal order. Provider may not be edited at this point." D PAUSE^VALM1
I $G(DFN)&($G(ON)["V") I $$COMPLEX^PSJOE(DFN,ON) D Q
.Q:$G(PSJBKDR) W !!?5,"This is a Complex Order. Provider may not be edited at this point." D PAUSE^VALM1
;*366 - check provider credentials
S P(6)=$S($$ACTPRO^PSGOE1(+P(6)):P(6),1:"")
W !,"PROVIDER: "_$S($P(P(6),U,2)]"":$P(P(6),U,2)_"//",1:"") R X:DTIME
S:'$T X=U S:X=U DONE=1 I $E(X)=U!(X="") S PSPROV=+$G(P(6)) G:$$IVDEA(.DRG,PSPROV,.P) N1 Q:P(6)
I X=U,P(6)="",BKP6]"" S P(6)=BKP6 W $C(7),!!?5,"INVALID PROVIDER." D PAUSE^VALM1 Q
Q:X="^"
I X["???",($E(P("OT"))="I"),(PSIVAC["C") D ORFLDS^PSIVEDT1 G N1
; Patch 545
I X]"" K DIC S DIC=200,DIC(0)="EQMZ",DIC("S")="I $$ACTPRO^PSGOE1(+Y)" D ^DIC K DIC I Y>0 S P(6)=+Y_U_Y(0,0) G:$$IVDEA(.DRG,.Y,.P) N1 Q
S F1=53.1,F2=1 D ENHLP^PSIVORC1 W $C(7),!!,"A Provider must be entered.",!! G N1
Q
;
3 ; Med Route.
I $G(P("RES"))="R" I $G(PSJORD)["P",$P($G(^PS(53.1,+ON,0)),"^",24)="R" D Q
. W !!?5,"Med Route may not be edited at this point." D PAUSE^VALM1
I $G(DFN)&($G(ON)["V") I $$COMPLEX^PSJOE(DFN,ON) D Q
.Q:$G(PSJBKDR) W !!?5,"This is a Complex Order. Med Route may not be edited at this point." D PAUSE^VALM1
;S P(6)=$S('$G(^VA(200,+P(6),"PS")):"",'$P(^("PS"),U,4):P(6),$P(^("PS"),U,4)<DT:"",1:P(6))
;*366 - OIZ to collect the OIs, CT for count
I P("MR")="" D
.N AD,SOL,OI,RT,RTCNT
.S AD=0 F S AD=$O(DRG("AD",AD)) Q:'AD S OI=$P(DRG("AD",AD),"^",6) I OI S OI(OI)=""
.S SOL=0 F S SOL=$O(DRG("SOL",SOL)) Q:'SOL S OI=$P(DRG("SOL",SOL),"^",6) I OI S OI(OI)=""
.S OI="" F S OI=$O(OI(OI)) Q:'OI S RT=$P(^PS(50.7,OI,0),"^",6) S:RT="" RT="NONE" S RT(RT)=$P($G(^PS(51.2,+RT,0)),"^",3)
.S RT="" F RTCNT=0:1 S RT=$O(RT(RT)) Q:RT=""
.Q:RTCNT>1
.S RT=$O(RT("")) I RT]"" S P("MR")=RT_"^"_$G(RT(RT))
;*366
N OIZ,MRTFN S OIZ=0,MRTFN="PSITP" K ^TMP(MRTFN,$J)
D MROL ;to collect overlapping MR list
W !,"MED ROUTE: "_$S($P(P("MR"),U,2)]"":$P(P("MR"),U,2),1:"")_"//" R X:DTIME S:'$T X=U S:X=U DONE=1 I X=U!(X=""&P("MR"))!($E(X)=U) Q
;*366 - to check for "?" and to select from the short list
I X["???",($E(P("OT"))="I"),(PSIVAC["C") D ORFLDS^PSIVEDT1 G 3
I X="?",$G(OIZ) D MRSL G:X=U 3 G CNT
D:$G(OIZ) CKMRSL K ^TMP(MRTFN,$J),OIZ,MRTFN
CNT ;
I X]"" K DIC S DIC=51.2,DIC(0)="EQMZX",DIC("S")="I $P(^(0),U,4)" D ^DIC K DIC I Y>0 S P("MR")=+Y_U_$P(Y(0),U,3) S:$E($G(PSJOCFG),1,2)="FN" PSJFNDS=1 Q ;366
S F1=53.1,F2=3 D ENHLP^PSIVORC1 W $C(7),!!,"A Med Route must be entered." G 3
Q
;
10 ; Start Date.
D 10^PSIVEDT1
I $E($G(PSJOCFG),1,2)="FN" S PSJFNDS=1
Q
;
25 ; Stop Date.
D 25^PSIVEDT1
I $E($G(PSJOCFG),1,2)="FN" S PSJFNDS=1
Q
26 ; Schedule
D 26^PSIVEDT1
Q
;
39 ; Admin Times.
D 39^PSIVEDT1
Q
;
57 ; Additive.
I $G(P("RES"))="R" I $G(PSJORD)["P",$P($G(^PS(53.1,+ON,0)),"^",24)="R" D Q
. W !!?5,"Additive may not be edited at this point." D PAUSE^VALM1
I $G(DFN)&($G(ON)["V") I $$COMPLEX^PSJOE(DFN,ON) D Q
.Q:$G(PSJBKDR) W !!?5,"This is a Complex Order. Provider may not be edited at this point." D PAUSE^VALM1
I $E(PSIVAC)="O" W !!,"Only additives marked for use in IV Fluid Order Entry may be selected."
; Reference to ^PS(52.6 is supported by DBIA 1231.
S FIL=52.6,DRGT="AD",DRGTN="ADDITIVE" D DRG^PSIVEDRG,DKILL
;I $G(X)="^" G DKILL
;If Solution prompt is next then wait to do dose checks after all solutions are entered.
;PSJFLG57 is set so OC is triggered when the user entered ^ADDITIVE.
I $$COMPARE^PSJMISC(.DRG,.TMPDRG) D
. D ENSTOP^PSIVCAL
. I $S($G(PSJFLG57):1,($G(EDIT)'["58"):1,1:0) K PSJFLG57,PSJOCCHK D OC^PSIVOC S:$G(EDIT)]"" PSJENHOC=1
I $G(X)="^" G DKILL
Q
;
58 ; Solution.
NEW PSJCMPFG
I $G(P("RES"))="R" I $G(PSJORD)["P",$P($G(^PS(53.1,+ON,0)),"^",24)="R" D Q
. W !!?5,"Solution may not be edited at this point." D PAUSE^VALM1
S FIL=52.7,DRGT="SOL",DRGTN="SOLUTION" D DRG^PSIVEDRG
;I $G(X)="^" G DKILL
;I $G(X)']"^",$$COMPARE^PSJMISC(.DRG,.TMPDRG) D OC^PSIVOC
S PSJCMPFG=$$COMPARE^PSJMISC(.DRG,.TMPDRG)
I 'PSJCMPFG,$$COMPARE^PSJMISC(.DRG,.TMPDRG,1) D
. NEW X,PSJALLGY
. K PSJALLGY
. D SETDD^PSIVOC(1)
. D GMRAOC^PSJOC S:'$G(PSGORQF) PSIALLFL=1
. K PSJALLGY
Q:$G(PSGORQF)
I PSJCMPFG K PSJOCCHK D ENSTOP^PSIVCAL D OC^PSIVOC S:$G(EDIT)]"" PSJENHOC=1
K PSJCMPFG
I $G(X)="^" G DKILL
;
DKILL ; Kill for drug edit.
K DRGI,DRGN,DRGT,DRGTN,FIL,PSIVSTR
Q
;
59 ; Infusion Rate.
D 59^PSIVEDT1
Q
;
62 ; IV Room.
N DIR S DIR(0)="PA^59.5",DIR("A")="IV Room: ",DIR("??")="^S F1=59.5,F2=.01 D ENHLP^PSIVORC1" S:P("IVRM") DIR("B")=$P(P("IVRM"),U,2)
D ^DIR Q:$D(DIRUT) I Y>0 S P("IVRM")=Y W $P($P(Y,U,2),X,2)
Q
;
63 ; Remarks.
D 63^PSIVEDT1
Q
;
64 ; Other Print Info.
D 64^PSIVEDT1
Q
;
66 ; Provider's comments.
N DA,DIE,DIR,DR S DA=PSIVUP,DIE="^PS(53.45,",DR=4 D ^DIE S PSGSI=X,Y=1
Q
;
101 ; Orderable Item.
I $G(P("RES"))="R" I $G(PSJORD)["P",$P($G(^PS(53.1,+ON,0)),"^",24)="R" D Q
. W !!?5,"This is Renewal order. Orderable Item may not be edited at this point." D PAUSE^VALM1
I $G(DFN)&($G(ON)["V") I $$COMPLEX^PSJOE(DFN,ON) D Q
.Q:$G(PSJBKDR) W !!?5,"This is a Complex Order. Orderable Item may not be edited at this point." D PAUSE^VALM1
W !,"Orderable Item: "_$S(P("PD"):$P(P("PD"),U,2)_"//",1:"") R X:DTIME S:'$T X=U S:X=U DONE=1 I $E(X)=U!(X=""&P("PD")) Q
I X]"" N DIC S DIC="^PS(50.7,",DIC(0)="EMQZ",DIC("B")=$S(P("PD")]"":+$P(("PD"),U),1:""),DIC("S")="S PSJSCT=1 I $$DRGSC^PSIVUTL(Y,PSJSCT) K PSJSCT" D ^DIC K DIC I Y>0 S P("PD")=Y Q
W $C(7),!!,"Orderable Item is required!",!! G 101
Q
109 ; Dosage Ordered.
W !,"DOSAGE ORDERED: "_$S(P("DO")]"":P("DO")_"//",1:"") R X:DTIME S:'$T X=U S:X=U DONE=1 I $E(X)=U!(P("DO")]""&(X="")) Q
I X="???" D ORFLDS^PSIVEDT1 G 109
D:X]"" CHK^DIE(53.1,109,"",X,.X) I $G(X)="^" W $C(7),!!,"Enter the dosage in which the Orderable Item entered should be dispensed.",! W "Answer must be 1-20 characters in length." G 109
S P("DO")=X
Q
;
113 ; Clinic appointment. ;*p319
D 50^PSGOE82
Q
;
126 ; Clinic date. ;*p319
D 51^PSGOE82
Q
;
132 ;*399-IND
D IND^PSIVEDT1
Q
;
FF ; up-arrow to another field.
N DIC S X=$P(X,U,2),DIC="^DD(53.1,",DIC(0)="QEM",DIC("S")="I U_PSIVOK_U[(U_+Y_U)" D ^DIC K DIC S Y=+Y
I Y=57 S PSJFLG57=1
Q
;
NEWDRG ; Ask if adding a new drug.
K DIR S DIR(0)="Y",DIR("A")="Are you adding "_$P(TDRG,U,2)_" as a new "_$S(DRGT="AD":"additive",1:"solution")_" for this order",DIR("B")="NO" D ^DIR I $D(DTOUT)!$D(DUOUT) Q
I Y S (DRGI,DRG(DRGT,0))=DRG(DRGT,0)+1,DRG=TDRG,DRG(DRGT,+DRGI)=+DRG_U_$P(DRG,U,2) I DRGT="SOL" S X=$G(^PS(52.7,+DRG,0)),$P(DRG(DRGT,DRG),U,3)=$P(X,U,3)
Q
;
MRSL ;check for OI med route short list;*366
N I S I=0 F S I=$O(^TMP(MRTFN,$J,I)) Q:'I W !,?10,I_" "_$P(^TMP(MRTFN,$J,I,0),U)_" "_$P(^TMP(MRTFN,$J,I,0),U,3)
N DIC S DIC("A")="Select MED ROUTE: ",DIC="^TMP(MRTFN,$J,",DIC(0)="AEQZ" D ^DIC
Q:Y=-1
I X=" " S X="^" Q
S X=$P(Y,"^",2)
Q
;
CKMRSL ;;check for med route short list leading letters ;*366
N DIC S DIC("T")="",DIC="^TMP(MRTFN,$J,",DIC(0)="EM" D ^DIC
Q:Y=-1
S X=$P(Y,"^",2)
Q
;
MROL ;
N I,OI,CT
S (I,CT)=0 F S I=$O(DRG("AD",I)) Q:'I S OI=$P(DRG("AD",I),"^",6) I OI S CT=CT+1,OIZ(CT)=OI
S I=0 F S I=$O(DRG("SOL",I)) Q:'I S OI=$P(DRG("SOL",I),"^",6) I OI S CT=CT+1,OIZ(CT)=OI
S OIZ(0)=CT
D START1^PSSJORDF(.OIZ,"")
S OIZ=$O(OIZ("A"),-1)
I OIZ D
. S ^TMP(MRTFN,$J,0)=U_U_OIZ_U_OIZ
. N ZZ S I=0 F S I=$O(OIZ(I)) Q:'I D
. . S ZZ($P(OIZ(I),U,2))=$P(OIZ(I),U,2)_U_$P(OIZ(I),U)_U_$P(OIZ(I),U,3,5)
. S (I,CT)=0 F S I=$O(ZZ(I)) Q:I="" D
. . S CT=CT+1,^TMP(MRTFN,$J,CT,0)=ZZ(I),^TMP(MRTFN,$J,"B",I,CT)=""
Q
;
IVDEA(DRG,PROVIEN,P) ; Check that provider PROVIEN is authorized to prescribe CS schedules in DRG("AD") and DRG("SOL")
;**************************************************************
;***************************************************************
;^PS(52.6: DRG("AD",0)=1
; DRG("AD",1)="26^MORPHINE^10 MG^^1^435"
;^PS(52.7: DRG("SOL",0)=1
; DRG("SOL",1)="33^DEXTROSE 5%^100 ML^^^196"
;
S PSDEAFLG=0
Q:'$G(PROVIEN) 0
Q:'$D(DRG) 0
;
; Check Additives
N SCHDCHK S SCHDCHK=""
S ADCNT=0 F S ADCNT=$O(DRG("AD",ADCNT)) Q:'ADCNT D
.;S PSPPKG=$S(PSJPROT=1:"U",PSJPROT=3:"UI",1:"") Q:PSPPKG=""
. N PSADIEN,PSADOI S PSADIEN=+$G(DRG("AD",ADCNT)) Q:'PSADIEN
. S PSADOI=$$GET1^DIQ(52.6,PSADIEN,15,"I")
. S PSIVDEA=$$OIDEA^PSSOPKI(PSADOI,"I"),PSDEA=$P(PSIVDEA,";",2) I (PSDEA>=2),(PSDEA<=5) S PDEA=$$SDEA^XUSER(,+PROVIEN,PSDEA,,"I")
. I ($G(PDEA)=2)!($G(PDEA)=1)!(+$G(PDEA)=4) S PSDEAFLG=+$G(PSDEAFLG)+1,P(6)="",PROVIEN="" D
.. I PDEA=2 W !,"Provider not authorized to prescribe medications in Federal Schedule "_PSDEA_".",!,"Please contact the provider.",! Q
.. W $C(7),!!,"Provider must have a valid DEA# or VA# to write prescriptions for this drug.",!
;
; Check Solutions
S SOLCNT=0 F S SOLCNT=$O(DRG("SOL",SOLCNT)) Q:'SOLCNT D
.;S PSPPKG=$S(PSJPROT=1:"U",PSJPROT=3:"UI",1:"") Q:PSPPKG=""
. N PSADIEN,PSADOI,PDEA S PSADIEN=+$G(DRG("SOL",SOLCNT)) Q:'PSADIEN
. S PSADOI=$$GET1^DIQ(52.7,PSADIEN,9,"I")
. S PSIVDEA=$$OIDEA^PSSOPKI(PSADOI,"I"),PSDEA=$P(PSIVDEA,";",2) I (PSDEA>=2),(PSDEA<=5) S PDEA=$$SDEA^XUSER(,+PROVIEN,PSDEA,,"I")
. I ($G(PDEA)=2)!($G(PDEA)=1)!(+$G(PDEA)=4) S PSDEAFLG=+$G(PSDEAFLG)+1,P(6)="",PROVIEN="" D
.. I PDEA=2 W !,"Provider not authorized to prescribe medications in Federal Schedule "_PSDEA_".",!,"Please contact the provider.",! Q
.. W $C(7),!!,"Provider must have a valid DEA# or VA# to write prescriptions for this drug.",!
Q PSDEAFLG
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSIVEDT 11452 printed Dec 13, 2024@02:04:05 Page 2
PSIVEDT ;BIR/MLM - EDIT IV ORDER ;Nov 23, 2021@09:57:57
+1 ;;5.0;INPATIENT MEDICATIONS;**4,110,127,133,134,181,252,281,366,319,399,372**;16 DEC 97;Build 153
+2 ;
+3 ; Reference to ^PS(53.1 is supported by DBIA 2256.
+4 ; Reference to ^PS(52.7 is supported by DBIA 2173.
+5 ; Reference to ^PS(51.2 is supported by DBIA 2178.
+6 ; Reference to ^PS(50.7 is supported by DBIA 2180.
+7 ; Reference to ^PS(55 is supported by DBIA 2191.
+8 ; Reference to ^PSSJORDF is supported by DBIA 2418.
+9 ; Reference to $$SDEA^XUSER supported by DBIA #2343.
+10 ;
EDIT ;
+1 ;Store the DRG array. If it changed then to do an OC
+2 NEW TMPDRG,PSJFLG57,PSIVE,PSIALLFL
+3 DO SAVEDRG^PSIVEDRG(.TMPDRG,.DRG)
+4 IF $GET(DFN)&($GET(PSJORD)["V")
IF $$COMPLEX^PSJOE(DFN,PSJORD)
Begin DoDot:1
+5 NEW X,Y,PARENT,P2ND
SET P2ND=$SELECT($GET(^PS(55,PSGP,"IV",+PSJORD,.2)):$GET(^PS(55,PSGP,"IV",+PSJORD,.2)),1:$GET(^PS(55,PSGP,5,+PSJORD,.2)))
+6 SET PARENT=$PIECE(P2ND,"^",8)
+7 IF PARENT
DO FULL^VALM1
WRITE !!?5,"This order is part of a complex order. Please review the following ",!?5,"associated orders before changing this order."
DO CMPLX^PSJCOM1(PSGP,PARENT,PSJORD)
End DoDot:1
+8 SET DONE=0
+9 FOR PSIVE=1:1
if DONE&$EXTRACT(PSIVAC)="C"
SET OREND=1
if PSIVE>$LENGTH(EDIT,U)!(DONE)
QUIT
if '$LENGTH($PIECE(EDIT,U,PSIVE))
QUIT
DO @($PIECE(EDIT,U,PSIVE))
if $EXTRACT(PSIVAC,2)="N"
SET PSIVOK=PSIVOK_U_$PIECE(EDIT,U,PSIVE)
IF $EXTRACT(X)=U
IF $LENGTH(X)>1
if PSIVE>1
SET PSIVE=PSIVE-1
FOR
DO FF
if Y<0
QUIT
DO @Y
if $EXTRACT(X)'=U
QUIT
+10 ;RTC 151046
IF $GET(PSGORQF)
KILL PSIVEDIT
SET PSJOCCHK=1
SET PSIVENO=1
+11 IF '$GET(PSGORQF)
IF $GET(PSJOCCHK)
KILL PSJOCCHK,PSIVENO
DO OC^PSIVOC
+12 KILL EDIT,PSIVOK,PSGDI
+13 ;If quit then restore DRG( to pre-edit state
+14 IF $GET(PSGORQF)
DO SAVEDRG^PSIVEDRG(.DRG,.TMPDRG)
+15 QUIT
+16 ;
1 ; Provider.
+1 NEW BKP6
SET BKP6=""
if P(6)
SET BKP6=P(6)
N1 ;
+1 ; ** Patch 545 **
NEW PSADCNT,PSPROV
+2 ;
+3 IF $GET(P("RES"))="R"
IF $GET(PSJORD)["P"
IF $PIECE($GET(^PS(53.1,+$GET(ON),0)),"^",24)="R"
Begin DoDot:1
+4 WRITE !!?5,"This is Renewal order. Provider may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+5 IF $GET(DFN)&($GET(ON)["V")
IF $$COMPLEX^PSJOE(DFN,ON)
Begin DoDot:1
+6 if $GET(PSJBKDR)
QUIT
WRITE !!?5,"This is a Complex Order. Provider may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+7 ;*366 - check provider credentials
+8 SET P(6)=$SELECT($$ACTPRO^PSGOE1(+P(6)):P(6),1:"")
+9 WRITE !,"PROVIDER: "_$SELECT($PIECE(P(6),U,2)]"":$PIECE(P(6),U,2)_"//",1:"")
READ X:DTIME
+10 if '$TEST
SET X=U
if X=U
SET DONE=1
IF $EXTRACT(X)=U!(X="")
SET PSPROV=+$GET(P(6))
if $$IVDEA(.DRG,PSPROV,.P)
GOTO N1
if P(6)
QUIT
+11 IF X=U
IF P(6)=""
IF BKP6]""
SET P(6)=BKP6
WRITE $CHAR(7),!!?5,"INVALID PROVIDER."
DO PAUSE^VALM1
QUIT
+12 if X="^"
QUIT
+13 IF X["???"
IF ($EXTRACT(P("OT"))="I")
IF (PSIVAC["C")
DO ORFLDS^PSIVEDT1
GOTO N1
+14 ; Patch 545
+15 IF X]""
KILL DIC
SET DIC=200
SET DIC(0)="EQMZ"
SET DIC("S")="I $$ACTPRO^PSGOE1(+Y)"
DO ^DIC
KILL DIC
IF Y>0
SET P(6)=+Y_U_Y(0,0)
if $$IVDEA(.DRG,.Y,.P)
GOTO N1
QUIT
+16 SET F1=53.1
SET F2=1
DO ENHLP^PSIVORC1
WRITE $CHAR(7),!!,"A Provider must be entered.",!!
GOTO N1
+17 QUIT
+18 ;
3 ; Med Route.
+1 IF $GET(P("RES"))="R"
IF $GET(PSJORD)["P"
IF $PIECE($GET(^PS(53.1,+ON,0)),"^",24)="R"
Begin DoDot:1
+2 WRITE !!?5,"Med Route may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+3 IF $GET(DFN)&($GET(ON)["V")
IF $$COMPLEX^PSJOE(DFN,ON)
Begin DoDot:1
+4 if $GET(PSJBKDR)
QUIT
WRITE !!?5,"This is a Complex Order. Med Route may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+5 ;S P(6)=$S('$G(^VA(200,+P(6),"PS")):"",'$P(^("PS"),U,4):P(6),$P(^("PS"),U,4)<DT:"",1:P(6))
+6 ;*366 - OIZ to collect the OIs, CT for count
+7 IF P("MR")=""
Begin DoDot:1
+8 NEW AD,SOL,OI,RT,RTCNT
+9 SET AD=0
FOR
SET AD=$ORDER(DRG("AD",AD))
if 'AD
QUIT
SET OI=$PIECE(DRG("AD",AD),"^",6)
IF OI
SET OI(OI)=""
+10 SET SOL=0
FOR
SET SOL=$ORDER(DRG("SOL",SOL))
if 'SOL
QUIT
SET OI=$PIECE(DRG("SOL",SOL),"^",6)
IF OI
SET OI(OI)=""
+11 SET OI=""
FOR
SET OI=$ORDER(OI(OI))
if 'OI
QUIT
SET RT=$PIECE(^PS(50.7,OI,0),"^",6)
if RT=""
SET RT="NONE"
SET RT(RT)=$PIECE($GET(^PS(51.2,+RT,0)),"^",3)
+12 SET RT=""
FOR RTCNT=0:1
SET RT=$ORDER(RT(RT))
if RT=""
QUIT
+13 if RTCNT>1
QUIT
+14 SET RT=$ORDER(RT(""))
IF RT]""
SET P("MR")=RT_"^"_$GET(RT(RT))
End DoDot:1
+15 ;*366
+16 NEW OIZ,MRTFN
SET OIZ=0
SET MRTFN="PSITP"
KILL ^TMP(MRTFN,$JOB)
+17 ;to collect overlapping MR list
DO MROL
+18 WRITE !,"MED ROUTE: "_$SELECT($PIECE(P("MR"),U,2)]"":$PIECE(P("MR"),U,2),1:"")_"//"
READ X:DTIME
if '$TEST
SET X=U
if X=U
SET DONE=1
IF X=U!(X=""&P("MR"))!($EXTRACT(X)=U)
QUIT
+19 ;*366 - to check for "?" and to select from the short list
+20 IF X["???"
IF ($EXTRACT(P("OT"))="I")
IF (PSIVAC["C")
DO ORFLDS^PSIVEDT1
GOTO 3
+21 IF X="?"
IF $GET(OIZ)
DO MRSL
if X=U
GOTO 3
GOTO CNT
+22 if $GET(OIZ)
DO CKMRSL
KILL ^TMP(MRTFN,$JOB),OIZ,MRTFN
CNT ;
+1 ;366
IF X]""
KILL DIC
SET DIC=51.2
SET DIC(0)="EQMZX"
SET DIC("S")="I $P(^(0),U,4)"
DO ^DIC
KILL DIC
IF Y>0
SET P("MR")=+Y_U_$PIECE(Y(0),U,3)
if $EXTRACT($GET(PSJOCFG),1,2)="FN"
SET PSJFNDS=1
QUIT
+2 SET F1=53.1
SET F2=3
DO ENHLP^PSIVORC1
WRITE $CHAR(7),!!,"A Med Route must be entered."
GOTO 3
+3 QUIT
+4 ;
10 ; Start Date.
+1 DO 10^PSIVEDT1
+2 IF $EXTRACT($GET(PSJOCFG),1,2)="FN"
SET PSJFNDS=1
+3 QUIT
+4 ;
25 ; Stop Date.
+1 DO 25^PSIVEDT1
+2 IF $EXTRACT($GET(PSJOCFG),1,2)="FN"
SET PSJFNDS=1
+3 QUIT
26 ; Schedule
+1 DO 26^PSIVEDT1
+2 QUIT
+3 ;
39 ; Admin Times.
+1 DO 39^PSIVEDT1
+2 QUIT
+3 ;
57 ; Additive.
+1 IF $GET(P("RES"))="R"
IF $GET(PSJORD)["P"
IF $PIECE($GET(^PS(53.1,+ON,0)),"^",24)="R"
Begin DoDot:1
+2 WRITE !!?5,"Additive may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+3 IF $GET(DFN)&($GET(ON)["V")
IF $$COMPLEX^PSJOE(DFN,ON)
Begin DoDot:1
+4 if $GET(PSJBKDR)
QUIT
WRITE !!?5,"This is a Complex Order. Provider may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+5 IF $EXTRACT(PSIVAC)="O"
WRITE !!,"Only additives marked for use in IV Fluid Order Entry may be selected."
+6 ; Reference to ^PS(52.6 is supported by DBIA 1231.
+7 SET FIL=52.6
SET DRGT="AD"
SET DRGTN="ADDITIVE"
DO DRG^PSIVEDRG
DO DKILL
+8 ;I $G(X)="^" G DKILL
+9 ;If Solution prompt is next then wait to do dose checks after all solutions are entered.
+10 ;PSJFLG57 is set so OC is triggered when the user entered ^ADDITIVE.
+11 IF $$COMPARE^PSJMISC(.DRG,.TMPDRG)
Begin DoDot:1
+12 DO ENSTOP^PSIVCAL
+13 IF $SELECT($GET(PSJFLG57):1,($GET(EDIT)'["58"):1,1:0)
KILL PSJFLG57,PSJOCCHK
DO OC^PSIVOC
if $GET(EDIT)]""
SET PSJENHOC=1
End DoDot:1
+14 IF $GET(X)="^"
GOTO DKILL
+15 QUIT
+16 ;
58 ; Solution.
+1 NEW PSJCMPFG
+2 IF $GET(P("RES"))="R"
IF $GET(PSJORD)["P"
IF $PIECE($GET(^PS(53.1,+ON,0)),"^",24)="R"
Begin DoDot:1
+3 WRITE !!?5,"Solution may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+4 SET FIL=52.7
SET DRGT="SOL"
SET DRGTN="SOLUTION"
DO DRG^PSIVEDRG
+5 ;I $G(X)="^" G DKILL
+6 ;I $G(X)']"^",$$COMPARE^PSJMISC(.DRG,.TMPDRG) D OC^PSIVOC
+7 SET PSJCMPFG=$$COMPARE^PSJMISC(.DRG,.TMPDRG)
+8 IF 'PSJCMPFG
IF $$COMPARE^PSJMISC(.DRG,.TMPDRG,1)
Begin DoDot:1
+9 NEW X,PSJALLGY
+10 KILL PSJALLGY
+11 DO SETDD^PSIVOC(1)
+12 DO GMRAOC^PSJOC
if '$GET(PSGORQF)
SET PSIALLFL=1
+13 KILL PSJALLGY
End DoDot:1
+14 if $GET(PSGORQF)
QUIT
+15 IF PSJCMPFG
KILL PSJOCCHK
DO ENSTOP^PSIVCAL
DO OC^PSIVOC
if $GET(EDIT)]""
SET PSJENHOC=1
+16 KILL PSJCMPFG
+17 IF $GET(X)="^"
GOTO DKILL
+18 ;
DKILL ; Kill for drug edit.
+1 KILL DRGI,DRGN,DRGT,DRGTN,FIL,PSIVSTR
+2 QUIT
+3 ;
59 ; Infusion Rate.
+1 DO 59^PSIVEDT1
+2 QUIT
+3 ;
62 ; IV Room.
+1 NEW DIR
SET DIR(0)="PA^59.5"
SET DIR("A")="IV Room: "
SET DIR("??")="^S F1=59.5,F2=.01 D ENHLP^PSIVORC1"
if P("IVRM")
SET DIR("B")=$PIECE(P("IVRM"),U,2)
+2 DO ^DIR
if $DATA(DIRUT)
QUIT
IF Y>0
SET P("IVRM")=Y
WRITE $PIECE($PIECE(Y,U,2),X,2)
+3 QUIT
+4 ;
63 ; Remarks.
+1 DO 63^PSIVEDT1
+2 QUIT
+3 ;
64 ; Other Print Info.
+1 DO 64^PSIVEDT1
+2 QUIT
+3 ;
66 ; Provider's comments.
+1 NEW DA,DIE,DIR,DR
SET DA=PSIVUP
SET DIE="^PS(53.45,"
SET DR=4
DO ^DIE
SET PSGSI=X
SET Y=1
+2 QUIT
+3 ;
101 ; Orderable Item.
+1 IF $GET(P("RES"))="R"
IF $GET(PSJORD)["P"
IF $PIECE($GET(^PS(53.1,+ON,0)),"^",24)="R"
Begin DoDot:1
+2 WRITE !!?5,"This is Renewal order. Orderable Item may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+3 IF $GET(DFN)&($GET(ON)["V")
IF $$COMPLEX^PSJOE(DFN,ON)
Begin DoDot:1
+4 if $GET(PSJBKDR)
QUIT
WRITE !!?5,"This is a Complex Order. Orderable Item may not be edited at this point."
DO PAUSE^VALM1
End DoDot:1
QUIT
+5 WRITE !,"Orderable Item: "_$SELECT(P("PD"):$PIECE(P("PD"),U,2)_"//",1:"")
READ X:DTIME
if '$TEST
SET X=U
if X=U
SET DONE=1
IF $EXTRACT(X)=U!(X=""&P("PD"))
QUIT
+6 IF X]""
NEW DIC
SET DIC="^PS(50.7,"
SET DIC(0)="EMQZ"
SET DIC("B")=$SELECT(P("PD")]"":+$PIECE(("PD"),U),1:"")
SET DIC("S")="S PSJSCT=1 I $$DRGSC^PSIVUTL(Y,PSJSCT) K PSJSCT"
DO ^DIC
KILL DIC
IF Y>0
SET P("PD")=Y
QUIT
+7 WRITE $CHAR(7),!!,"Orderable Item is required!",!!
GOTO 101
+8 QUIT
109 ; Dosage Ordered.
+1 WRITE !,"DOSAGE ORDERED: "_$SELECT(P("DO")]"":P("DO")_"//",1:"")
READ X:DTIME
if '$TEST
SET X=U
if X=U
SET DONE=1
IF $EXTRACT(X)=U!(P("DO")]""&(X=""))
QUIT
+2 IF X="???"
DO ORFLDS^PSIVEDT1
GOTO 109
+3 if X]""
DO CHK^DIE(53.1,109,"",X,.X)
IF $GET(X)="^"
WRITE $CHAR(7),!!,"Enter the dosage in which the Orderable Item entered should be dispensed.",!
WRITE "Answer must be 1-20 characters in length."
GOTO 109
+4 SET P("DO")=X
+5 QUIT
+6 ;
113 ; Clinic appointment. ;*p319
+1 DO 50^PSGOE82
+2 QUIT
+3 ;
126 ; Clinic date. ;*p319
+1 DO 51^PSGOE82
+2 QUIT
+3 ;
132 ;*399-IND
+1 DO IND^PSIVEDT1
+2 QUIT
+3 ;
FF ; up-arrow to another field.
+1 NEW DIC
SET X=$PIECE(X,U,2)
SET DIC="^DD(53.1,"
SET DIC(0)="QEM"
SET DIC("S")="I U_PSIVOK_U[(U_+Y_U)"
DO ^DIC
KILL DIC
SET Y=+Y
+2 IF Y=57
SET PSJFLG57=1
+3 QUIT
+4 ;
NEWDRG ; Ask if adding a new drug.
+1 KILL DIR
SET DIR(0)="Y"
SET DIR("A")="Are you adding "_$PIECE(TDRG,U,2)_" as a new "_$SELECT(DRGT="AD":"additive",1:"solution")_" for this order"
SET DIR("B")="NO"
DO ^DIR
IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+2 IF Y
SET (DRGI,DRG(DRGT,0))=DRG(DRGT,0)+1
SET DRG=TDRG
SET DRG(DRGT,+DRGI)=+DRG_U_$PIECE(DRG,U,2)
IF DRGT="SOL"
SET X=$GET(^PS(52.7,+DRG,0))
SET $PIECE(DRG(DRGT,DRG),U,3)=$PIECE(X,U,3)
+3 QUIT
+4 ;
MRSL ;check for OI med route short list;*366
+1 NEW I
SET I=0
FOR
SET I=$ORDER(^TMP(MRTFN,$JOB,I))
if 'I
QUIT
WRITE !,?10,I_" "_$PIECE(^TMP(MRTFN,$JOB,I,0),U)_" "_$PIECE(^TMP(MRTFN,$JOB,I,0),U,3)
+2 NEW DIC
SET DIC("A")="Select MED ROUTE: "
SET DIC="^TMP(MRTFN,$J,"
SET DIC(0)="AEQZ"
DO ^DIC
+3 if Y=-1
QUIT
+4 IF X=" "
SET X="^"
QUIT
+5 SET X=$PIECE(Y,"^",2)
+6 QUIT
+7 ;
CKMRSL ;;check for med route short list leading letters ;*366
+1 NEW DIC
SET DIC("T")=""
SET DIC="^TMP(MRTFN,$J,"
SET DIC(0)="EM"
DO ^DIC
+2 if Y=-1
QUIT
+3 SET X=$PIECE(Y,"^",2)
+4 QUIT
+5 ;
MROL ;
+1 NEW I,OI,CT
+2 SET (I,CT)=0
FOR
SET I=$ORDER(DRG("AD",I))
if 'I
QUIT
SET OI=$PIECE(DRG("AD",I),"^",6)
IF OI
SET CT=CT+1
SET OIZ(CT)=OI
+3 SET I=0
FOR
SET I=$ORDER(DRG("SOL",I))
if 'I
QUIT
SET OI=$PIECE(DRG("SOL",I),"^",6)
IF OI
SET CT=CT+1
SET OIZ(CT)=OI
+4 SET OIZ(0)=CT
+5 DO START1^PSSJORDF(.OIZ,"")
+6 SET OIZ=$ORDER(OIZ("A"),-1)
+7 IF OIZ
Begin DoDot:1
+8 SET ^TMP(MRTFN,$JOB,0)=U_U_OIZ_U_OIZ
+9 NEW ZZ
SET I=0
FOR
SET I=$ORDER(OIZ(I))
if 'I
QUIT
Begin DoDot:2
+10 SET ZZ($PIECE(OIZ(I),U,2))=$PIECE(OIZ(I),U,2)_U_$PIECE(OIZ(I),U)_U_$PIECE(OIZ(I),U,3,5)
End DoDot:2
+11 SET (I,CT)=0
FOR
SET I=$ORDER(ZZ(I))
if I=""
QUIT
Begin DoDot:2
+12 SET CT=CT+1
SET ^TMP(MRTFN,$JOB,CT,0)=ZZ(I)
SET ^TMP(MRTFN,$JOB,"B",I,CT)=""
End DoDot:2
End DoDot:1
+13 QUIT
+14 ;
IVDEA(DRG,PROVIEN,P) ; Check that provider PROVIEN is authorized to prescribe CS schedules in DRG("AD") and DRG("SOL")
+1 ;**************************************************************
+2 ;***************************************************************
+3 ;^PS(52.6: DRG("AD",0)=1
+4 ; DRG("AD",1)="26^MORPHINE^10 MG^^1^435"
+5 ;^PS(52.7: DRG("SOL",0)=1
+6 ; DRG("SOL",1)="33^DEXTROSE 5%^100 ML^^^196"
+7 ;
+8 SET PSDEAFLG=0
+9 if '$GET(PROVIEN)
QUIT 0
+10 if '$DATA(DRG)
QUIT 0
+11 ;
+12 ; Check Additives
+13 NEW SCHDCHK
SET SCHDCHK=""
+14 SET ADCNT=0
FOR
SET ADCNT=$ORDER(DRG("AD",ADCNT))
if 'ADCNT
QUIT
Begin DoDot:1
+15 ;S PSPPKG=$S(PSJPROT=1:"U",PSJPROT=3:"UI",1:"") Q:PSPPKG=""
+16 NEW PSADIEN,PSADOI
SET PSADIEN=+$GET(DRG("AD",ADCNT))
if 'PSADIEN
QUIT
+17 SET PSADOI=$$GET1^DIQ(52.6,PSADIEN,15,"I")
+18 SET PSIVDEA=$$OIDEA^PSSOPKI(PSADOI,"I")
SET PSDEA=$PIECE(PSIVDEA,";",2)
IF (PSDEA>=2)
IF (PSDEA<=5)
SET PDEA=$$SDEA^XUSER(,+PROVIEN,PSDEA,,"I")
+19 IF ($GET(PDEA)=2)!($GET(PDEA)=1)!(+$GET(PDEA)=4)
SET PSDEAFLG=+$GET(PSDEAFLG)+1
SET P(6)=""
SET PROVIEN=""
Begin DoDot:2
+20 IF PDEA=2
WRITE !,"Provider not authorized to prescribe medications in Federal Schedule "_PSDEA_".",!,"Please contact the provider.",!
QUIT
+21 WRITE $CHAR(7),!!,"Provider must have a valid DEA# or VA# to write prescriptions for this drug.",!
End DoDot:2
End DoDot:1
+22 ;
+23 ; Check Solutions
+24 SET SOLCNT=0
FOR
SET SOLCNT=$ORDER(DRG("SOL",SOLCNT))
if 'SOLCNT
QUIT
Begin DoDot:1
+25 ;S PSPPKG=$S(PSJPROT=1:"U",PSJPROT=3:"UI",1:"") Q:PSPPKG=""
+26 NEW PSADIEN,PSADOI,PDEA
SET PSADIEN=+$GET(DRG("SOL",SOLCNT))
if 'PSADIEN
QUIT
+27 SET PSADOI=$$GET1^DIQ(52.7,PSADIEN,9,"I")
+28 SET PSIVDEA=$$OIDEA^PSSOPKI(PSADOI,"I")
SET PSDEA=$PIECE(PSIVDEA,";",2)
IF (PSDEA>=2)
IF (PSDEA<=5)
SET PDEA=$$SDEA^XUSER(,+PROVIEN,PSDEA,,"I")
+29 IF ($GET(PDEA)=2)!($GET(PDEA)=1)!(+$GET(PDEA)=4)
SET PSDEAFLG=+$GET(PSDEAFLG)+1
SET P(6)=""
SET PROVIEN=""
Begin DoDot:2
+30 IF PDEA=2
WRITE !,"Provider not authorized to prescribe medications in Federal Schedule "_PSDEA_".",!,"Please contact the provider.",!
QUIT
+31 WRITE $CHAR(7),!!,"Provider must have a valid DEA# or VA# to write prescriptions for this drug.",!
End DoDot:2
End DoDot:1
+32 QUIT PSDEAFLG